@ohif/extension-cornerstone-dicom-rt 3.0.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.
package/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Open Health Imaging Foundation
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
7
|
+
the Software without restriction, including without limitation the rights to
|
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
10
|
+
subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
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)})()));
|
|
3
|
+
//# sourceMappingURL=ohif-extension-cornerstone-dicom-rt.umd.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*
|
|
2
|
+
object-assign
|
|
3
|
+
(c) Sindre Sorhus
|
|
4
|
+
@license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/** @license React v17.0.2
|
|
8
|
+
* react.production.min.js
|
|
9
|
+
*
|
|
10
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
11
|
+
*
|
|
12
|
+
* This source code is licensed under the MIT license found in the
|
|
13
|
+
* LICENSE file in the root directory of this source tree.
|
|
14
|
+
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dist/ohif-extension-cornerstone-dicom-rt.umd.js","mappings":"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","sources":["webpack://ohif-extension-cornerstone-dicom-rt/webpack/universalModuleDefinition","webpack://ohif-extension-cornerstone-dicom-rt/webpack/runtime/chunk loaded","webpack://ohif-extension-cornerstone-dicom-rt/webpack/runtime/jsonp chunk loading","webpack://ohif-extension-cornerstone-dicom-rt/./utils/_hydrateRT.ts","webpack://ohif-extension-cornerstone-dicom-rt/./utils/promptHydrateRT.ts","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/html-parse-stringify/dist/html-parse-stringify.module.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/react-i18next/dist/es/utils.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/react-i18next/dist/es/unescape.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/react-i18next/dist/es/defaults.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/react-i18next/dist/es/i18nInstance.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/react-i18next/dist/es/context.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/react-i18next/dist/es/useTranslation.js","webpack://ohif-extension-cornerstone-dicom-rt/./utils/initRTToolGroup.ts","webpack://ohif-extension-cornerstone-dicom-rt/./viewports/OHIFCornerstoneRTViewport.tsx","webpack://ohif-extension-cornerstone-dicom-rt/./viewports/_getStatusComponent.tsx","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/object-assign/index.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/prop-types/factoryWithThrowingShims.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/prop-types/index.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/react/cjs/react.production.min.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/react/index.js","webpack://ohif-extension-cornerstone-dicom-rt/../../../node_modules/void-elements/index.js","webpack://ohif-extension-cornerstone-dicom-rt/external umd \"@ohif/core\"","webpack://ohif-extension-cornerstone-dicom-rt/external umd \"@ohif/ui\"","webpack://ohif-extension-cornerstone-dicom-rt/external umd \"dcmjs\"","webpack://ohif-extension-cornerstone-dicom-rt/webpack/bootstrap","webpack://ohif-extension-cornerstone-dicom-rt/webpack/runtime/chunk prefetch function","webpack://ohif-extension-cornerstone-dicom-rt/webpack/runtime/compat get default export","webpack://ohif-extension-cornerstone-dicom-rt/webpack/runtime/define property getters","webpack://ohif-extension-cornerstone-dicom-rt/webpack/runtime/hasOwnProperty shorthand","webpack://ohif-extension-cornerstone-dicom-rt/webpack/runtime/make namespace object","webpack://ohif-extension-cornerstone-dicom-rt/webpack/runtime/startup prefetch","webpack://ohif-extension-cornerstone-dicom-rt/./id.js","webpack://ohif-extension-cornerstone-dicom-rt/./loadRTStruct.js","webpack://ohif-extension-cornerstone-dicom-rt/./getSopClassHandlerModule.js","webpack://ohif-extension-cornerstone-dicom-rt/./index.tsx"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@ohif/core\"), require(\"dcmjs\"), require(\"@ohif/ui\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@ohif/core\", \"dcmjs\", \"@ohif/ui\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ohif-extension-cornerstone-dicom-rt\"] = factory(require(\"@ohif/core\"), require(\"dcmjs\"), require(\"@ohif/ui\"));\n\telse\n\t\troot[\"ohif-extension-cornerstone-dicom-rt\"] = factory(root[\"@ohif/core\"], root[\"dcmjs\"], root[\"@ohif/ui\"]);\n})(globalThis, (__WEBPACK_EXTERNAL_MODULE__762__, __WEBPACK_EXTERNAL_MODULE__836__, __WEBPACK_EXTERNAL_MODULE__369__) => {\nreturn ","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n__webpack_require__.F.j = (chunkId) => {\n\tif((!__webpack_require__.o(installedChunks, chunkId) || installedChunks[chunkId] === undefined) && true) {\n\t\tinstalledChunks[chunkId] = null;\n\t\tvar link = document.createElement('link');\n\n\t\tif (__webpack_require__.nc) {\n\t\t\tlink.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tlink.rel = \"prefetch\";\n\t\tlink.as = \"script\";\n\t\tlink.href = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\tdocument.head.appendChild(link);\n\t}\n};\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// no jsonp function","async function _hydrateRTDisplaySet({\n rtDisplaySet,\n viewportIndex,\n servicesManager,\n}) {\n const {\n segmentationService,\n hangingProtocolService,\n viewportGridService,\n } = servicesManager.services;\n\n const displaySetInstanceUID = rtDisplaySet.referencedDisplaySetInstanceUID;\n\n let segmentationId = null;\n\n // We need the hydration to notify panels about the new segmentation added\n const suppressEvents = false;\n\n segmentationId = await segmentationService.createSegmentationForRTDisplaySet(\n rtDisplaySet,\n segmentationId,\n suppressEvents\n );\n\n segmentationService.hydrateSegmentation(rtDisplaySet.displaySetInstanceUID);\n\n const { viewports } = viewportGridService.getState();\n\n const updatedViewports = hangingProtocolService.getViewportsRequireUpdate(\n viewportIndex,\n displaySetInstanceUID\n );\n\n viewportGridService.setDisplaySetsForViewports(updatedViewports);\n\n // Todo: fix this after we have a better way for stack viewport segmentations\n\n // check every viewport in the viewports to see if the displaySetInstanceUID\n // is being displayed, if so we need to update the viewport to use volume viewport\n // (if already is not using it) since Cornerstone3D currently only supports\n // volume viewport for segmentation\n viewports.forEach((viewport, index) => {\n if (index === viewportIndex) {\n return;\n }\n\n const shouldDisplaySeg = segmentationService.shouldRenderSegmentation(\n viewport.displaySetInstanceUIDs,\n rtDisplaySet.displaySetInstanceUID\n );\n\n if (shouldDisplaySeg) {\n updatedViewports.push({\n viewportIndex: index,\n displaySetInstanceUIDs: viewport.displaySetInstanceUIDs,\n viewportOptions: {\n initialImageOptions: {\n preset: 'middle',\n },\n },\n });\n }\n });\n\n // Do the entire update at once\n viewportGridService.setDisplaySetsForViewports(updatedViewports);\n return true;\n}\n\nexport default _hydrateRTDisplaySet;\n","import hydrateRTDisplaySet from './_hydrateRT';\n\nconst RESPONSE = {\n NO_NEVER: -1,\n CANCEL: 0,\n HYDRATE_SEG: 5,\n};\n\nfunction promptHydrateRT({\n servicesManager,\n rtDisplaySet,\n viewportIndex,\n toolGroupId = 'default',\n}) {\n const { uiViewportDialogService } = servicesManager.services;\n\n return new Promise(async function(resolve, reject) {\n const promptResult = await _askHydrate(\n uiViewportDialogService,\n viewportIndex\n );\n\n if (promptResult === RESPONSE.HYDRATE_SEG) {\n const isHydrated = await hydrateRTDisplaySet({\n rtDisplaySet,\n viewportIndex,\n toolGroupId,\n servicesManager,\n });\n\n resolve(isHydrated);\n }\n });\n}\n\nfunction _askHydrate(uiViewportDialogService, viewportIndex) {\n return new Promise(function(resolve, reject) {\n const message = 'Do you want to open this Segmentation?';\n const actions = [\n {\n type: 'secondary',\n text: 'No',\n value: RESPONSE.CANCEL,\n },\n {\n type: 'primary',\n text: 'Yes',\n value: RESPONSE.HYDRATE_SEG,\n },\n ];\n const onSubmit = result => {\n uiViewportDialogService.hide();\n resolve(result);\n };\n\n uiViewportDialogService.show({\n viewportIndex,\n type: 'info',\n message,\n actions,\n onSubmit,\n onOutsideClick: () => {\n uiViewportDialogService.hide();\n resolve(RESPONSE.CANCEL);\n },\n });\n });\n}\n\nexport default promptHydrateRT;\n","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import e from\"void-elements\";var t=/\\s([^'\"/\\s><]+?)[\\s/>]|([^\\s=]+)=\\s?(\".*?\"|'.*?')/g;function n(n){var r={type:\"tag\",name:\"\",voidElement:!1,attrs:{},children:[]},i=n.match(/<\\/?([^\\s]+?)[/\\s>]/);if(i&&(r.name=i[1],(e[i[1]]||\"/\"===n.charAt(n.length-2))&&(r.voidElement=!0),r.name.startsWith(\"!--\"))){var s=n.indexOf(\"--\\x3e\");return{type:\"comment\",comment:-1!==s?n.slice(4,s):\"\"}}for(var a=new RegExp(t),c=null;null!==(c=a.exec(n));)if(c[0].trim())if(c[1]){var o=c[1].trim(),l=[o,\"\"];o.indexOf(\"=\")>-1&&(l=o.split(\"=\")),r.attrs[l[0]]=l[1],a.lastIndex--}else c[2]&&(r.attrs[c[2]]=c[3].trim().substring(1,c[3].length-1));return r}var r=/<[a-zA-Z0-9\\-\\!\\/](?:\"[^\"]*\"|'[^']*'|[^'\">])*>/g,i=/^\\s*$/,s=Object.create(null);function a(e,t){switch(t.type){case\"text\":return e+t.content;case\"tag\":return e+=\"<\"+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+'=\"'+e[n]+'\"');return t.length?\" \"+t.join(\" \"):\"\"}(t.attrs):\"\")+(t.voidElement?\"/>\":\">\"),t.voidElement?e:e+t.children.reduce(a,\"\")+\"</\"+t.name+\">\";case\"comment\":return e+\"\\x3c!--\"+t.comment+\"--\\x3e\"}}var c={parse:function(e,t){t||(t={}),t.components||(t.components=s);var a,c=[],o=[],l=-1,m=!1;if(0!==e.indexOf(\"<\")){var u=e.indexOf(\"<\");c.push({type:\"text\",content:-1===u?e:e.substring(0,u)})}return e.replace(r,function(r,s){if(m){if(r!==\"</\"+a.name+\">\")return;m=!1}var u,f=\"/\"!==r.charAt(1),h=r.startsWith(\"\\x3c!--\"),p=s+r.length,d=e.charAt(p);if(h){var v=n(r);return l<0?(c.push(v),c):((u=o[l]).children.push(v),c)}if(f&&(l++,\"tag\"===(a=n(r)).type&&t.components[a.name]&&(a.type=\"component\",m=!0),a.voidElement||m||!d||\"<\"===d||a.children.push({type:\"text\",content:e.slice(p,e.indexOf(\"<\",p))}),0===l&&c.push(a),(u=o[l-1])&&u.children.push(a),o[l]=a),(!f||a.voidElement)&&(l>-1&&(a.voidElement||a.name===r.slice(2,-1))&&(l--,a=-1===l?c:o[l]),!m&&\"<\"!==d&&d)){u=-1===l?c:o[l].children;var x=e.indexOf(\"<\",p),g=e.slice(p,-1===x?void 0:x);i.test(g)&&(g=\" \"),(x>-1&&l+u.length>=0||\" \"!==g)&&u.push({type:\"text\",content:g})}}),c},stringify:function(e){return e.reduce(function(e,t){return e+a(\"\",t)},\"\")}};export default c;\n//# sourceMappingURL=html-parse-stringify.module.js.map\n","export function warn() {\n if (console && console.warn) {\n var _console;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (typeof args[0] === 'string') args[0] = \"react-i18next:: \".concat(args[0]);\n\n (_console = console).warn.apply(_console, args);\n }\n}\nvar alreadyWarned = {};\nexport function warnOnce() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return;\n if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date();\n warn.apply(void 0, args);\n}\nexport function loadNamespaces(i18n, ns, cb) {\n i18n.loadNamespaces(ns, function () {\n if (i18n.isInitialized) {\n cb();\n } else {\n var initialized = function initialized() {\n setTimeout(function () {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n\n i18n.on('initialized', initialized);\n }\n });\n}\n\nfunction oldI18nextHasLoadedNamespace(ns, i18n) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var lng = i18n.languages[0];\n var fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n var lastLng = i18n.languages[i18n.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n\n var loadNotPending = function loadNotPending(l, n) {\n var loadState = i18n.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n return loadState === -1 || loadState === 2;\n };\n\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;\n if (i18n.hasResourceBundle(lng, ns)) return true;\n if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n}\n\nexport function hasLoadedNamespace(ns, i18n) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce('i18n.languages were undefined or empty', i18n.languages);\n return true;\n }\n\n var isNewerI18next = i18n.options.ignoreJSONStructure !== undefined;\n\n if (!isNewerI18next) {\n return oldI18nextHasLoadedNamespace(ns, i18n, options);\n }\n\n return i18n.hasLoadedNamespace(ns, {\n precheck: function precheck(i18nInstance, loadNotPending) {\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n}\nexport function getDisplayName(Component) {\n return Component.displayName || Component.name || (typeof Component === 'string' && Component.length > 0 ? Component : 'Unknown');\n}","var matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nvar htmlEntities = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n ' ': ' ',\n ' ': ' ',\n '©': '©',\n '©': '©',\n '®': '®',\n '®': '®',\n '…': '…',\n '…': '…',\n '/': '/',\n '/': '/'\n};\n\nvar unescapeHtmlEntity = function unescapeHtmlEntity(m) {\n return htmlEntities[m];\n};\n\nexport var unescape = function unescape(text) {\n return text.replace(matchHtmlEntity, unescapeHtmlEntity);\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { unescape } from './unescape.js';\nvar defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape: unescape\n};\nexport function setDefaults() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n defaultOptions = _objectSpread(_objectSpread({}, defaultOptions), options);\n}\nexport function getDefaults() {\n return defaultOptions;\n}","var i18nInstance;\nexport function setI18n(instance) {\n i18nInstance = instance;\n}\nexport function getI18n() {\n return i18nInstance;\n}","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport var I18nContext = createContext();\nexport var ReportNamespaces = function () {\n function ReportNamespaces() {\n _classCallCheck(this, ReportNamespaces);\n\n this.usedNamespaces = {};\n }\n\n _createClass(ReportNamespaces, [{\n key: \"addUsedNamespaces\",\n value: function addUsedNamespaces(namespaces) {\n var _this = this;\n\n namespaces.forEach(function (ns) {\n if (!_this.usedNamespaces[ns]) _this.usedNamespaces[ns] = true;\n });\n }\n }, {\n key: \"getUsedNamespaces\",\n value: function getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n }]);\n\n return ReportNamespaces;\n}();\nexport function composeInitialProps(ForComponent) {\n return function (ctx) {\n return new Promise(function (resolve) {\n var i18nInitialProps = getInitialProps();\n\n if (ForComponent.getInitialProps) {\n ForComponent.getInitialProps(ctx).then(function (componentsInitialProps) {\n resolve(_objectSpread(_objectSpread({}, componentsInitialProps), i18nInitialProps));\n });\n } else {\n resolve(i18nInitialProps);\n }\n });\n };\n}\nexport function getInitialProps() {\n var i18n = getI18n();\n var namespaces = i18n.reportNamespaces ? i18n.reportNamespaces.getUsedNamespaces() : [];\n var ret = {};\n var initialI18nStore = {};\n i18n.languages.forEach(function (l) {\n initialI18nStore[l] = {};\n namespaces.forEach(function (ns) {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (null != _i) {\n var _s,\n _e,\n _x,\n _r,\n _arr = [],\n _n = !0,\n _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { useState, useEffect, useContext, useRef } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, hasLoadedNamespace } from './utils.js';\n\nvar usePrevious = function usePrevious(value, ignore) {\n var ref = useRef();\n useEffect(function () {\n ref.current = ignore ? ref.current : value;\n }, [value, ignore]);\n return ref.current;\n};\n\nexport function useTranslation(ns) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nFromProps = props.i18n;\n\n var _ref = useContext(I18nContext) || {},\n i18nFromContext = _ref.i18n,\n defaultNSFromContext = _ref.defaultNS;\n\n var i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n\n if (!i18n) {\n warnOnce('You will need to pass in an i18next instance by using initReactI18next');\n\n var notReadyT = function notReadyT(k, optsOrDefaultValue) {\n if (typeof optsOrDefaultValue === 'string') return optsOrDefaultValue;\n if (optsOrDefaultValue && _typeof(optsOrDefaultValue) === 'object' && typeof optsOrDefaultValue.defaultValue === 'string') return optsOrDefaultValue.defaultValue;\n return Array.isArray(k) ? k[k.length - 1] : k;\n };\n\n var retNotReady = [notReadyT, {}, false];\n retNotReady.t = notReadyT;\n retNotReady.i18n = {};\n retNotReady.ready = false;\n return retNotReady;\n }\n\n if (i18n.options.react && i18n.options.react.wait !== undefined) warnOnce('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');\n\n var i18nOptions = _objectSpread(_objectSpread(_objectSpread({}, getDefaults()), i18n.options.react), props);\n\n var useSuspense = i18nOptions.useSuspense,\n keyPrefix = i18nOptions.keyPrefix;\n var namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation'];\n if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces);\n var ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(function (n) {\n return hasLoadedNamespace(n, i18n, i18nOptions);\n });\n\n function getT() {\n return i18n.getFixedT(null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n }\n\n var _useState = useState(getT),\n _useState2 = _slicedToArray(_useState, 2),\n t = _useState2[0],\n setT = _useState2[1];\n\n var joinedNS = namespaces.join();\n var previousJoinedNS = usePrevious(joinedNS);\n var isMounted = useRef(true);\n useEffect(function () {\n var bindI18n = i18nOptions.bindI18n,\n bindI18nStore = i18nOptions.bindI18nStore;\n isMounted.current = true;\n\n if (!ready && !useSuspense) {\n loadNamespaces(i18n, namespaces, function () {\n if (isMounted.current) setT(getT);\n });\n }\n\n if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {\n setT(getT);\n }\n\n function boundReset() {\n if (isMounted.current) setT(getT);\n }\n\n if (bindI18n && i18n) i18n.on(bindI18n, boundReset);\n if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset);\n return function () {\n isMounted.current = false;\n if (bindI18n && i18n) bindI18n.split(' ').forEach(function (e) {\n return i18n.off(e, boundReset);\n });\n if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(function (e) {\n return i18n.store.off(e, boundReset);\n });\n };\n }, [i18n, joinedNS]);\n var isInitial = useRef(true);\n useEffect(function () {\n if (isMounted.current && !isInitial.current) {\n setT(getT);\n }\n\n isInitial.current = false;\n }, [i18n, keyPrefix]);\n var ret = [t, i18n, ready];\n ret.t = t;\n ret.i18n = i18n;\n ret.ready = ready;\n if (ready) return ret;\n if (!ready && !useSuspense) return ret;\n throw new Promise(function (resolve) {\n loadNamespaces(i18n, namespaces, function () {\n resolve();\n });\n });\n}","function createRTToolGroupAndAddTools(\n ToolGroupService,\n customizationService,\n toolGroupId\n) {\n const { tools } =\n customizationService.get('cornerstone.overlayViewportTools') ?? {};\n\n return ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, {});\n}\n\nexport default createRTToolGroupAndAddTools;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport OHIF, { utils } from '@ohif/core';\nimport {\n ViewportActionBar,\n useViewportGrid,\n LoadingIndicatorTotalPercent,\n} from '@ohif/ui';\n\nimport _hydrateRTdisplaySet from '../utils/_hydrateRT';\nimport promptHydrateRT from '../utils/promptHydrateRT';\nimport _getStatusComponent from './_getStatusComponent';\nimport createRTToolGroupAndAddTools from '../utils/initRTToolGroup';\nimport _hydrateRTDisplaySet from '../utils/_hydrateRT';\n\nconst { formatDate } = utils;\nconst RT_TOOLGROUP_BASE_NAME = 'RTToolGroup';\n\nfunction OHIFCornerstoneRTViewport(props) {\n const {\n children,\n displaySets,\n viewportOptions,\n viewportIndex,\n viewportLabel,\n servicesManager,\n extensionManager,\n } = props;\n\n const {\n displaySetService,\n toolGroupService,\n segmentationService,\n uiNotificationService,\n customizationService,\n } = servicesManager.services;\n\n const toolGroupId = `${RT_TOOLGROUP_BASE_NAME}-${viewportIndex}`;\n\n // RT viewport will always have a single display set\n if (displaySets.length > 1) {\n throw new Error('RT viewport should only have a single display set');\n }\n\n const rtDisplaySet = displaySets[0];\n\n const [viewportGrid, viewportGridService] = useViewportGrid();\n\n // States\n const [isToolGroupCreated, setToolGroupCreated] = useState(false);\n const [selectedSegment, setSelectedSegment] = useState(1);\n\n // Hydration means that the RT is opened and segments are loaded into the\n // segmentation panel, and RT is also rendered on any viewport that is in the\n // same frameOfReferenceUID as the referencedSeriesUID of the RT. However,\n // loading basically means RT loading over network and bit unpacking of the\n // RT data.\n const [isHydrated, setIsHydrated] = useState(rtDisplaySet.isHydrated);\n const [rtIsLoading, setRtIsLoading] = useState(!rtDisplaySet.isLoaded);\n const [element, setElement] = useState(null);\n const [processingProgress, setProcessingProgress] = useState({\n percentComplete: null,\n totalSegments: null,\n });\n\n // refs\n const referencedDisplaySetRef = useRef(null);\n\n const { viewports, activeViewportIndex } = viewportGrid;\n\n const referencedDisplaySet = rtDisplaySet.getReferenceDisplaySet();\n const referencedDisplaySetMetadata = _getReferencedDisplaySetMetadata(\n referencedDisplaySet\n );\n\n referencedDisplaySetRef.current = {\n displaySet: referencedDisplaySet,\n metadata: referencedDisplaySetMetadata,\n };\n /**\n * OnElementEnabled callback which is called after the cornerstoneExtension\n * has enabled the element. Note: we delegate all the image rendering to\n * cornerstoneExtension, so we don't need to do anything here regarding\n * the image rendering, element enabling etc.\n */\n const onElementEnabled = evt => {\n setElement(evt.detail.element);\n };\n\n const onElementDisabled = () => {\n setElement(null);\n };\n\n const getCornerstoneViewport = useCallback(() => {\n const { component: Component } = extensionManager.getModuleEntry(\n '@ohif/extension-cornerstone.viewportModule.cornerstone'\n );\n\n const {\n displaySet: referencedDisplaySet,\n } = referencedDisplaySetRef.current;\n\n // Todo: jump to the center of the first segment\n return (\n <Component\n {...props}\n displaySets={[referencedDisplaySet, rtDisplaySet]}\n viewportOptions={{\n viewportType: 'volume',\n toolGroupId: toolGroupId,\n orientation: viewportOptions.orientation,\n viewportId: viewportOptions.viewportId,\n }}\n onElementEnabled={onElementEnabled}\n onElementDisabled={onElementDisabled}\n ></Component>\n );\n }, [viewportIndex, rtDisplaySet, toolGroupId]);\n\n const onSegmentChange = useCallback(\n direction => {\n direction = direction === 'left' ? -1 : 1;\n const segmentationId = rtDisplaySet.displaySetInstanceUID;\n const segmentation = segmentationService.getSegmentation(segmentationId);\n\n const { segments } = segmentation;\n\n const numberOfSegments = Object.keys(segments).length;\n\n let newSelectedSegmentIndex = selectedSegment + direction;\n\n // Segment 0 is always background\n if (newSelectedSegmentIndex >= numberOfSegments - 1) {\n newSelectedSegmentIndex = 1;\n } else if (newSelectedSegmentIndex === 0) {\n newSelectedSegmentIndex = numberOfSegments - 1;\n }\n\n segmentationService.jumpToSegmentCenter(\n segmentationId,\n newSelectedSegmentIndex,\n toolGroupId\n );\n setSelectedSegment(newSelectedSegmentIndex);\n },\n [selectedSegment]\n );\n\n useEffect(() => {\n if (rtIsLoading) {\n return;\n }\n\n promptHydrateRT({\n servicesManager,\n viewportIndex,\n rtDisplaySet,\n }).then(isHydrated => {\n if (isHydrated) {\n setIsHydrated(true);\n }\n });\n }, [servicesManager, viewportIndex, rtDisplaySet, rtIsLoading]);\n\n useEffect(() => {\n const { unsubscribe } = segmentationService.subscribe(\n segmentationService.EVENTS.SEGMENTATION_LOADING_COMPLETE,\n evt => {\n if (\n evt.rtDisplaySet.displaySetInstanceUID ===\n rtDisplaySet.displaySetInstanceUID\n ) {\n setRtIsLoading(false);\n }\n\n if (evt.overlappingSegments) {\n uiNotificationService.show({\n title: 'Overlapping Segments',\n message:\n 'Overlapping segments detected which is not currently supported',\n type: 'warning',\n });\n }\n }\n );\n\n return () => {\n unsubscribe();\n };\n }, [rtDisplaySet]);\n\n useEffect(() => {\n const { unsubscribe } = segmentationService.subscribe(\n segmentationService.EVENTS.SEGMENT_LOADING_COMPLETE,\n ({ percentComplete, numSegments }) => {\n setProcessingProgress({\n percentComplete,\n totalSegments: numSegments,\n });\n }\n );\n\n return () => {\n unsubscribe();\n };\n }, [rtDisplaySet]);\n\n /**\n Cleanup the SEG viewport when the viewport is destroyed\n */\n useEffect(() => {\n const onDisplaySetsRemovedSubscription = displaySetService.subscribe(\n displaySetService.EVENTS.DISPLAY_SETS_REMOVED,\n ({ displaySetInstanceUIDs }) => {\n const activeViewport = viewports[activeViewportIndex];\n if (\n displaySetInstanceUIDs.includes(activeViewport.displaySetInstanceUID)\n ) {\n viewportGridService.setDisplaySetsForViewport({\n viewportIndex: activeViewportIndex,\n displaySetInstanceUIDs: [],\n });\n }\n }\n );\n\n return () => {\n onDisplaySetsRemovedSubscription.unsubscribe();\n };\n }, []);\n\n useEffect(() => {\n let toolGroup = toolGroupService.getToolGroup(toolGroupId);\n\n if (toolGroup) {\n return;\n }\n\n toolGroup = createRTToolGroupAndAddTools(\n toolGroupService,\n customizationService,\n toolGroupId\n );\n\n setToolGroupCreated(true);\n\n return () => {\n // remove the segmentation representations if seg displayset changed\n segmentationService.removeSegmentationRepresentationFromToolGroup(\n toolGroupId\n );\n\n toolGroupService.destroyToolGroup(toolGroupId);\n };\n }, []);\n\n useEffect(() => {\n setIsHydrated(rtDisplaySet.isHydrated);\n\n return () => {\n // remove the segmentation representations if seg displayset changed\n segmentationService.removeSegmentationRepresentationFromToolGroup(\n toolGroupId\n );\n referencedDisplaySetRef.current = null;\n };\n }, [rtDisplaySet]);\n\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n let childrenWithProps = null;\n\n if (\n !referencedDisplaySetRef.current ||\n referencedDisplaySet.displaySetInstanceUID !==\n referencedDisplaySetRef.current.displaySet.displaySetInstanceUID\n ) {\n return null;\n }\n\n if (children && children.length) {\n childrenWithProps = children.map((child, index) => {\n return (\n child &&\n React.cloneElement(child, {\n viewportIndex,\n key: index,\n })\n );\n });\n }\n\n const {\n PatientID,\n PatientName,\n PatientSex,\n PatientAge,\n SliceThickness,\n ManufacturerModelName,\n StudyDate,\n SeriesDescription,\n SpacingBetweenSlices,\n SeriesNumber,\n } = referencedDisplaySetRef.current.metadata;\n\n const onStatusClick = async () => {\n const isHydrated = await _hydrateRTDisplaySet({\n rtDisplaySet,\n viewportIndex,\n servicesManager,\n });\n\n setIsHydrated(isHydrated);\n };\n\n return (\n <>\n <ViewportActionBar\n onDoubleClick={evt => {\n evt.stopPropagation();\n evt.preventDefault();\n }}\n onArrowsClick={onSegmentChange}\n getStatusComponent={() => {\n return _getStatusComponent({\n isHydrated,\n onStatusClick,\n });\n }}\n studyData={{\n label: viewportLabel,\n useAltStyling: true,\n studyDate: formatDate(StudyDate),\n currentSeries: SeriesNumber,\n seriesDescription: `RT Viewport ${SeriesDescription}`,\n patientInformation: {\n patientName: PatientName\n ? OHIF.utils.formatPN(PatientName.Alphabetic)\n : '',\n patientSex: PatientSex || '',\n patientAge: PatientAge || '',\n MRN: PatientID || '',\n thickness: SliceThickness ? `${SliceThickness.toFixed(2)}mm` : '',\n spacing:\n SpacingBetweenSlices !== undefined\n ? `${SpacingBetweenSlices.toFixed(2)}mm`\n : '',\n scanner: ManufacturerModelName || '',\n },\n }}\n />\n\n <div className=\"relative flex flex-row w-full h-full overflow-hidden\">\n {rtIsLoading && (\n <LoadingIndicatorTotalPercent\n className=\"w-full h-full\"\n totalNumbers={processingProgress.totalSegments}\n percentComplete={processingProgress.percentComplete}\n loadingText=\"Loading RTSTRUCT...\"\n />\n )}\n {getCornerstoneViewport()}\n {childrenWithProps}\n </div>\n </>\n );\n}\n\nOHIFCornerstoneRTViewport.propTypes = {\n displaySets: PropTypes.arrayOf(PropTypes.object),\n viewportIndex: PropTypes.number.isRequired,\n dataSource: PropTypes.object,\n children: PropTypes.node,\n customProps: PropTypes.object,\n};\n\nOHIFCornerstoneRTViewport.defaultProps = {\n customProps: {},\n};\n\nfunction _getReferencedDisplaySetMetadata(referencedDisplaySet) {\n const image0 = referencedDisplaySet.images[0];\n const referencedDisplaySetMetadata = {\n PatientID: image0.PatientID,\n PatientName: image0.PatientName,\n PatientSex: image0.PatientSex,\n PatientAge: image0.PatientAge,\n SliceThickness: image0.SliceThickness,\n StudyDate: image0.StudyDate,\n SeriesDescription: image0.SeriesDescription,\n SeriesInstanceUID: image0.SeriesInstanceUID,\n SeriesNumber: image0.SeriesNumber,\n ManufacturerModelName: image0.ManufacturerModelName,\n SpacingBetweenSlices: image0.SpacingBetweenSlices,\n };\n\n return referencedDisplaySetMetadata;\n}\n\nexport default OHIFCornerstoneRTViewport;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Icon, Tooltip } from '@ohif/ui';\n\nexport default function _getStatusComponent({ isHydrated, onStatusClick }) {\n let ToolTipMessage = null;\n let StatusIcon = null;\n\n const { t } = useTranslation('Common');\n const loadStr = t('LOAD');\n\n switch (isHydrated) {\n case true:\n StatusIcon = () => <Icon name=\"status-alert\" />;\n\n ToolTipMessage = () => (\n <div>This Segmentation is loaded in the segmentation panel</div>\n );\n break;\n case false:\n StatusIcon = () => <Icon name=\"status-untracked\" />;\n\n ToolTipMessage = () => <div>Click LOAD to load RTSTRUCT.</div>;\n }\n\n const StatusArea = () => (\n <div className=\"flex h-6 leading-6 cursor-default text-sm text-white\">\n <div className=\"min-w-[45px] flex items-center p-1 rounded-l-xl rounded-r bg-customgray-100\">\n <StatusIcon />\n <span className=\"ml-1\">RTSTRUCT</span>\n </div>\n {!isHydrated && (\n <div\n className=\"ml-1 px-1.5 rounded cursor-pointer hover:text-black bg-primary-main hover:bg-primary-light\"\n // Using onMouseUp here because onClick is not working when the viewport is not active and is styled with pointer-events:none\n onMouseUp={onStatusClick}\n >\n {loadStr}\n </div>\n )}\n </div>\n );\n\n return (\n <>\n {ToolTipMessage && (\n <Tooltip content={<ToolTipMessage />} position=\"bottom-left\">\n <StatusArea />\n </Tooltip>\n )}\n {!ToolTipMessage && <StatusArea />}\n </>\n );\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/** @license React v17.0.2\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=require(\"object-assign\"),n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116;\nif(\"function\"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w(\"react.element\");p=w(\"react.portal\");exports.Fragment=w(\"react.fragment\");exports.StrictMode=w(\"react.strict_mode\");exports.Profiler=w(\"react.profiler\");q=w(\"react.provider\");r=w(\"react.context\");t=w(\"react.forward_ref\");exports.Suspense=w(\"react.suspense\");u=w(\"react.memo\");v=w(\"react.lazy\")}var x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){if(null===a||\"object\"!==typeof a)return null;a=x&&a[x]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function z(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar A={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},B={};function C(a,b,c){this.props=a;this.context=b;this.refs=B;this.updater=c||A}C.prototype.isReactComponent={};C.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(z(85));this.updater.enqueueSetState(this,a,b,\"setState\")};C.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction D(){}D.prototype=C.prototype;function E(a,b,c){this.props=a;this.context=b;this.refs=B;this.updater=c||A}var F=E.prototype=new D;F.constructor=E;l(F,C.prototype);F.isPureReactComponent=!0;var G={current:null},H=Object.prototype.hasOwnProperty,I={key:!0,ref:!0,__self:!0,__source:!0};\nfunction J(a,b,c){var e,d={},k=null,h=null;if(null!=b)for(e in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)H.call(b,e)&&!I.hasOwnProperty(e)&&(d[e]=b[e]);var g=arguments.length-2;if(1===g)d.children=c;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];d.children=f}if(a&&a.defaultProps)for(e in g=a.defaultProps,g)void 0===d[e]&&(d[e]=g[e]);return{$$typeof:n,type:a,key:k,ref:h,props:d,_owner:G.current}}\nfunction K(a,b){return{$$typeof:n,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function L(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===n}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var M=/\\/+/g;function N(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction O(a,b,c,e,d){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case n:case p:h=!0}}if(h)return h=a,d=d(h),a=\"\"===e?\".\"+N(h,0):e,Array.isArray(d)?(c=\"\",null!=a&&(c=a.replace(M,\"$&/\")+\"/\"),O(d,b,c,\"\",function(a){return a})):null!=d&&(L(d)&&(d=K(d,c+(!d.key||h&&h.key===d.key?\"\":(\"\"+d.key).replace(M,\"$&/\")+\"/\")+a)),b.push(d)),1;h=0;e=\"\"===e?\".\":e+\":\";if(Array.isArray(a))for(var g=\n0;g<a.length;g++){k=a[g];var f=e+N(k,g);h+=O(k,b,c,f,d)}else if(f=y(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=e+N(k,g++),h+=O(k,b,c,f,d);else if(\"object\"===k)throw b=\"\"+a,Error(z(31,\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b));return h}function P(a,b,c){if(null==a)return a;var e=[],d=0;O(a,e,\"\",\"\",function(a){return b.call(c,a,d++)});return e}\nfunction Q(a){if(-1===a._status){var b=a._result;b=b();a._status=0;a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}if(1===a._status)return a._result;throw a._result;}var R={current:null};function S(){var a=R.current;if(null===a)throw Error(z(321));return a}var T={ReactCurrentDispatcher:R,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:G,IsSomeRendererActing:{current:!1},assign:l};\nexports.Children={map:P,forEach:function(a,b,c){P(a,function(){b.apply(this,arguments)},c)},count:function(a){var b=0;P(a,function(){b++});return b},toArray:function(a){return P(a,function(a){return a})||[]},only:function(a){if(!L(a))throw Error(z(143));return a}};exports.Component=C;exports.PureComponent=E;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=T;\nexports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(z(267,a));var e=l({},a.props),d=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=G.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)H.call(b,f)&&!I.hasOwnProperty(f)&&(e[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)e.children=c;else if(1<f){g=Array(f);for(var m=0;m<f;m++)g[m]=arguments[m+2];e.children=g}return{$$typeof:n,type:a.type,\nkey:d,ref:k,props:e,_owner:h}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:r,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:q,_context:a};return a.Consumer=a};exports.createElement=J;exports.createFactory=function(a){var b=J.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:t,render:a}};exports.isValidElement=L;\nexports.lazy=function(a){return{$$typeof:v,_payload:{_status:-1,_result:a},_init:Q}};exports.memo=function(a,b){return{$$typeof:u,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return S().useCallback(a,b)};exports.useContext=function(a,b){return S().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return S().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return S().useImperativeHandle(a,b,c)};\nexports.useLayoutEffect=function(a,b){return S().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return S().useMemo(a,b)};exports.useReducer=function(a,b,c){return S().useReducer(a,b,c)};exports.useRef=function(a){return S().useRef(a)};exports.useState=function(a){return S().useState(a)};exports.version=\"17.0.2\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n \"area\": true,\n \"base\": true,\n \"br\": true,\n \"col\": true,\n \"embed\": true,\n \"hr\": true,\n \"img\": true,\n \"input\": true,\n \"link\": true,\n \"meta\": true,\n \"param\": true,\n \"source\": true,\n \"track\": true,\n \"wbr\": true\n};\n","module.exports = __WEBPACK_EXTERNAL_MODULE__762__;","module.exports = __WEBPACK_EXTERNAL_MODULE__369__;","module.exports = __WEBPACK_EXTERNAL_MODULE__836__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.F = {};\n__webpack_require__.E = (chunkId) => {\n\tObject.keys(__webpack_require__.F).map((key) => {\n\t\t__webpack_require__.F[key](chunkId);\n\t});\n}","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.O(0, [143], () => {\n\t__webpack_require__.E(143);\n}, 5);","import packageJson from '../package.json';\n\nconst id = packageJson.name;\nconst SOPClassHandlerName = 'dicom-rt';\nconst SOPClassHandlerId = `${id}.sopClassHandlerModule.${SOPClassHandlerName}`;\n\nexport { id, SOPClassHandlerId, SOPClassHandlerName };\n","import dcmjs from 'dcmjs';\nconst { DicomMessage, DicomMetaDictionary } = dcmjs.data;\nconst dicomlab2RGB = dcmjs.data.Colors.dicomlab2RGB;\n\nasync function checkAndLoadContourData(instance, datasource) {\n if (!instance || !instance.ROIContourSequence) {\n return Promise.reject('Invalid instance object or ROIContourSequence');\n }\n\n const promisesMap = new Map();\n\n for (const ROIContour of instance.ROIContourSequence) {\n const referencedROINumber = ROIContour.ReferencedROINumber;\n if (!ROIContour || !ROIContour.ContourSequence) {\n promisesMap.set(referencedROINumber, [Promise.resolve([])]);\n continue;\n }\n\n for (const Contour of ROIContour.ContourSequence) {\n if (!Contour || !Contour.ContourData) {\n return Promise.reject('Invalid Contour or ContourData');\n }\n\n const contourData = Contour.ContourData;\n\n if (Array.isArray(contourData)) {\n promisesMap.has(referencedROINumber)\n ? promisesMap\n .get(referencedROINumber)\n .push(Promise.resolve(contourData))\n : promisesMap.set(referencedROINumber, [\n Promise.resolve(contourData),\n ]);\n } else if (contourData && contourData.BulkDataURI) {\n const bulkDataURI = contourData.BulkDataURI;\n\n if (\n !datasource ||\n !datasource.retrieve ||\n !datasource.retrieve.bulkDataURI\n ) {\n return Promise.reject(\n 'Invalid datasource object or retrieve function'\n );\n }\n\n const bulkDataPromise = datasource.retrieve.bulkDataURI({\n BulkDataURI: bulkDataURI,\n StudyInstanceUID: instance.StudyInstanceUID,\n SeriesInstanceUID: instance.SeriesInstanceUID,\n SOPInstanceUID: instance.SOPInstanceUID,\n });\n\n promisesMap.has(referencedROINumber)\n ? promisesMap.get(referencedROINumber).push(bulkDataPromise)\n : promisesMap.set(referencedROINumber, [bulkDataPromise]);\n } else {\n return Promise.reject(`Invalid ContourData: ${contourData}`);\n }\n }\n }\n\n const resolvedPromisesMap = new Map();\n for (const [key, promiseArray] of promisesMap.entries()) {\n resolvedPromisesMap.set(key, await Promise.allSettled(promiseArray));\n }\n\n instance.ROIContourSequence.forEach(ROIContour => {\n try {\n const referencedROINumber = ROIContour.ReferencedROINumber;\n const resolvedPromises = resolvedPromisesMap.get(referencedROINumber);\n\n if (ROIContour.ContourSequence) {\n ROIContour.ContourSequence.forEach((Contour, index) => {\n const promise = resolvedPromises[index];\n if (promise.status === 'fulfilled') {\n if (\n Array.isArray(promise.value) &&\n promise.value.every(Number.isFinite)\n ) {\n // If promise.value is already an array of numbers, use it directly\n Contour.ContourData = promise.value;\n } else {\n // If the resolved promise value is a byte array (Blob), it needs to be decoded\n const uint8Array = new Uint8Array(promise.value);\n const textDecoder = new TextDecoder();\n const dataUint8Array = textDecoder.decode(uint8Array);\n if (\n typeof dataUint8Array === 'string' &&\n dataUint8Array.includes('\\\\')\n ) {\n Contour.ContourData = dataUint8Array\n .split('\\\\')\n .map(parseFloat);\n } else {\n Contour.ContourData = [];\n }\n }\n } else {\n console.error(promise.reason);\n }\n });\n }\n } catch (error) {\n console.error(error);\n }\n });\n}\n\nexport default async function loadRTStruct(\n extensionManager,\n rtStructDisplaySet,\n referencedDisplaySet,\n headers\n) {\n const utilityModule = extensionManager.getModuleEntry(\n '@ohif/extension-cornerstone.utilityModule.common'\n );\n const dataSource = extensionManager.getActiveDataSource()[0];\n const { bulkDataURI } = dataSource.getConfig?.() || {};\n\n const { dicomLoaderService } = utilityModule.exports;\n const imageIdSopInstanceUidPairs = _getImageIdSopInstanceUidPairsForDisplaySet(\n referencedDisplaySet\n );\n\n // Set here is loading is asynchronous.\n // If this function throws its set back to false.\n rtStructDisplaySet.isLoaded = true;\n let instance = rtStructDisplaySet.instance;\n\n if (!bulkDataURI || !bulkDataURI.enabled) {\n const segArrayBuffer = await dicomLoaderService.findDicomDataPromise(\n rtStructDisplaySet,\n null,\n headers\n );\n\n const dicomData = DicomMessage.readFile(segArrayBuffer);\n const rtStructDataset = DicomMetaDictionary.naturalizeDataset(\n dicomData.dict\n );\n rtStructDataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);\n instance = rtStructDataset;\n } else {\n await checkAndLoadContourData(instance, dataSource);\n }\n\n const {\n StructureSetROISequence,\n ROIContourSequence,\n RTROIObservationsSequence,\n } = instance;\n\n // Define our structure set entry and add it to the rtstruct module state.\n const structureSet = {\n StructureSetLabel: instance.StructureSetLabel,\n SeriesInstanceUID: instance.SeriesInstanceUID,\n ROIContours: [],\n visible: true,\n };\n\n for (let i = 0; i < ROIContourSequence.length; i++) {\n const ROIContour = ROIContourSequence[i];\n const { ContourSequence } = ROIContour;\n\n if (!ContourSequence) {\n continue;\n }\n\n const isSupported = false;\n\n const ContourSequenceArray = _toArray(ContourSequence);\n\n const contourPoints = [];\n for (let c = 0; c < ContourSequenceArray.length; c++) {\n const {\n ContourImageSequence,\n ContourData,\n NumberOfContourPoints,\n ContourGeometricType,\n } = ContourSequenceArray[c];\n\n const sopInstanceUID = ContourImageSequence.ReferencedSOPInstanceUID;\n const imageId = _getImageId(imageIdSopInstanceUidPairs, sopInstanceUID);\n\n if (!imageId) {\n continue;\n }\n let isSupported = false;\n\n const points = [];\n for (let p = 0; p < NumberOfContourPoints * 3; p += 3) {\n points.push({\n x: ContourData[p],\n y: ContourData[p + 1],\n z: ContourData[p + 2],\n });\n }\n\n switch (ContourGeometricType) {\n case 'CLOSED_PLANAR':\n case 'OPEN_PLANAR':\n case 'POINT':\n isSupported = true;\n\n break;\n default:\n continue;\n }\n\n contourPoints.push({\n numberOfPoints: NumberOfContourPoints,\n points,\n type: ContourGeometricType,\n isSupported,\n });\n }\n\n _setROIContourMetadata(\n structureSet,\n StructureSetROISequence,\n RTROIObservationsSequence,\n ROIContour,\n contourPoints,\n isSupported\n );\n }\n return structureSet;\n}\n\nconst _getImageId = (imageIdSopInstanceUidPairs, sopInstanceUID) => {\n const imageIdSopInstanceUidPairsEntry = imageIdSopInstanceUidPairs.find(\n imageIdSopInstanceUidPairsEntry =>\n imageIdSopInstanceUidPairsEntry.sopInstanceUID === sopInstanceUID\n );\n\n return imageIdSopInstanceUidPairsEntry\n ? imageIdSopInstanceUidPairsEntry.imageId\n : null;\n};\n\nfunction _getImageIdSopInstanceUidPairsForDisplaySet(referencedDisplaySet) {\n return referencedDisplaySet.images.map(image => {\n return {\n imageId: image.imageId,\n sopInstanceUID: image.SOPInstanceUID,\n };\n });\n}\n\nfunction _setROIContourMetadata(\n structureSet,\n StructureSetROISequence,\n RTROIObservationsSequence,\n ROIContour,\n contourPoints,\n isSupported\n) {\n const StructureSetROI = StructureSetROISequence.find(\n structureSetROI =>\n structureSetROI.ROINumber === ROIContour.ReferencedROINumber\n );\n\n const ROIContourData = {\n ROINumber: StructureSetROI.ROINumber,\n ROIName: StructureSetROI.ROIName,\n ROIGenerationAlgorithm: StructureSetROI.ROIGenerationAlgorithm,\n ROIDescription: StructureSetROI.ROIDescription,\n isSupported,\n contourPoints,\n visible: true,\n };\n\n _setROIContourDataColor(ROIContour, ROIContourData);\n\n if (RTROIObservationsSequence) {\n // If present, add additional RTROIObservations metadata.\n _setROIContourRTROIObservations(\n ROIContourData,\n RTROIObservationsSequence,\n ROIContour.ReferencedROINumber\n );\n }\n\n structureSet.ROIContours.push(ROIContourData);\n}\n\nfunction _setROIContourDataColor(ROIContour, ROIContourData) {\n let { ROIDisplayColor, RecommendedDisplayCIELabValue } = ROIContour;\n\n if (!ROIDisplayColor && RecommendedDisplayCIELabValue) {\n // If ROIDisplayColor is absent, try using the RecommendedDisplayCIELabValue color.\n ROIDisplayColor = dicomlab2RGB(RecommendedDisplayCIELabValue);\n }\n\n if (ROIDisplayColor) {\n ROIContourData.colorArray = [...ROIDisplayColor];\n }\n}\n\nfunction _setROIContourRTROIObservations(\n ROIContourData,\n RTROIObservationsSequence,\n ROINumber\n) {\n const RTROIObservations = RTROIObservationsSequence.find(\n RTROIObservations => RTROIObservations.ReferencedROINumber === ROINumber\n );\n\n if (RTROIObservations) {\n // Deep copy so we don't keep the reference to the dcmjs dataset entry.\n const {\n ObservationNumber,\n ROIObservationDescription,\n RTROIInterpretedType,\n ROIInterpreter,\n } = RTROIObservations;\n\n ROIContourData.RTROIObservations = {\n ObservationNumber,\n ROIObservationDescription,\n RTROIInterpretedType,\n ROIInterpreter,\n };\n }\n}\n\nfunction _toArray(objOrArray) {\n return Array.isArray(objOrArray) ? objOrArray : [objOrArray];\n}\n","import { utils } from '@ohif/core';\n\nimport { SOPClassHandlerId } from './id';\nimport loadRTStruct from './loadRTStruct';\n\nconst sopClassUids = ['1.2.840.10008.5.1.4.1.1.481.3'];\n\nlet loadPromises = {};\n\nfunction _getDisplaySetsFromSeries(\n instances,\n servicesManager,\n extensionManager\n) {\n const instance = instances[0];\n\n const {\n StudyInstanceUID,\n SeriesInstanceUID,\n SOPInstanceUID,\n SeriesDescription,\n SeriesNumber,\n SeriesDate,\n SOPClassUID,\n wadoRoot,\n wadoUri,\n wadoUriRoot,\n } = instance;\n\n const displaySet = {\n Modality: 'RTSTRUCT',\n loading: false,\n isReconstructable: false, // by default for now since it is a volumetric SEG currently\n displaySetInstanceUID: utils.guid(),\n SeriesDescription,\n SeriesNumber,\n SeriesDate,\n SOPInstanceUID,\n SeriesInstanceUID,\n StudyInstanceUID,\n SOPClassHandlerId,\n SOPClassUID,\n referencedImages: null,\n referencedSeriesInstanceUID: null,\n referencedDisplaySetInstanceUID: null,\n isDerivedDisplaySet: true,\n isLoaded: false,\n isHydrated: false,\n structureSet: null,\n sopClassUids,\n instance,\n wadoRoot,\n wadoUriRoot,\n wadoUri,\n isOverlayDisplaySet: true,\n };\n\n let referencedSeriesSequence = instance.ReferencedSeriesSequence;\n if (\n instance.ReferencedFrameOfReferenceSequence &&\n !instance.ReferencedSeriesSequence\n ) {\n instance.ReferencedSeriesSequence = _deriveReferencedSeriesSequenceFromFrameOfReferenceSequence(\n instance.ReferencedFrameOfReferenceSequence\n );\n referencedSeriesSequence = instance.ReferencedSeriesSequence;\n }\n\n if (!referencedSeriesSequence) {\n throw new Error('ReferencedSeriesSequence is missing for the RTSTRUCT');\n }\n\n const referencedSeries = referencedSeriesSequence[0];\n\n displaySet.referencedImages =\n instance.ReferencedSeriesSequence.ReferencedInstanceSequence;\n displaySet.referencedSeriesInstanceUID = referencedSeries.SeriesInstanceUID;\n\n displaySet.getReferenceDisplaySet = () => {\n const { DisplaySetService } = servicesManager.services;\n const referencedDisplaySets = DisplaySetService.getDisplaySetsForSeries(\n displaySet.referencedSeriesInstanceUID\n );\n\n if (!referencedDisplaySets || referencedDisplaySets.length === 0) {\n throw new Error('Referenced DisplaySet is missing for the RT');\n }\n\n const referencedDisplaySet = referencedDisplaySets[0];\n\n displaySet.referencedDisplaySetInstanceUID =\n referencedDisplaySet.displaySetInstanceUID;\n\n return referencedDisplaySet;\n };\n\n displaySet.load = ({ headers }) =>\n _load(displaySet, servicesManager, extensionManager, headers);\n\n return [displaySet];\n}\n\nfunction _load(rtDisplaySet, servicesManager, extensionManager, headers) {\n const { SOPInstanceUID } = rtDisplaySet;\n const { segmentationService } = servicesManager.services;\n if (\n (rtDisplaySet.loading || rtDisplaySet.isLoaded) &&\n loadPromises[SOPInstanceUID] &&\n _segmentationExistsInCache(rtDisplaySet, segmentationService)\n ) {\n return loadPromises[SOPInstanceUID];\n }\n\n rtDisplaySet.loading = true;\n\n // We don't want to fire multiple loads, so we'll wait for the first to finish\n // and also return the same promise to any other callers.\n loadPromises[SOPInstanceUID] = new Promise(async (resolve, reject) => {\n if (!rtDisplaySet.structureSet) {\n const structureSet = await loadRTStruct(\n extensionManager,\n rtDisplaySet,\n rtDisplaySet.getReferenceDisplaySet(),\n headers\n );\n\n rtDisplaySet.structureSet = structureSet;\n }\n\n const suppressEvents = true;\n segmentationService\n .createSegmentationForRTDisplaySet(rtDisplaySet, null, suppressEvents)\n .then(() => {\n rtDisplaySet.loading = false;\n resolve();\n })\n .catch(error => {\n rtDisplaySet.loading = false;\n reject(error);\n });\n });\n\n return loadPromises[SOPInstanceUID];\n}\n\nfunction _deriveReferencedSeriesSequenceFromFrameOfReferenceSequence(\n ReferencedFrameOfReferenceSequence\n) {\n const ReferencedSeriesSequence = [];\n\n ReferencedFrameOfReferenceSequence.forEach(referencedFrameOfReference => {\n const { RTReferencedStudySequence } = referencedFrameOfReference;\n\n RTReferencedStudySequence.forEach(rtReferencedStudy => {\n const { RTReferencedSeriesSequence } = rtReferencedStudy;\n\n RTReferencedSeriesSequence.forEach(rtReferencedSeries => {\n const ReferencedInstanceSequence = [];\n const { ContourImageSequence, SeriesInstanceUID } = rtReferencedSeries;\n\n ContourImageSequence.forEach(contourImage => {\n ReferencedInstanceSequence.push({\n ReferencedSOPInstanceUID: contourImage.ReferencedSOPInstanceUID,\n ReferencedSOPClassUID: contourImage.ReferencedSOPClassUID,\n });\n });\n\n const referencedSeries = {\n SeriesInstanceUID,\n ReferencedInstanceSequence,\n };\n\n ReferencedSeriesSequence.push(referencedSeries);\n });\n });\n });\n\n return ReferencedSeriesSequence;\n}\n\nfunction _segmentationExistsInCache(rtDisplaySet, segmentationService) {\n // Todo: fix this\n return false;\n // This should be abstracted with the CornerstoneCacheService\n const rtContourId = rtDisplaySet.displaySetInstanceUID;\n const contour = segmentationService.getContour(rtContourId);\n\n return contour !== undefined;\n}\n\nfunction getSopClassHandlerModule({ servicesManager, extensionManager }) {\n return [\n {\n name: 'dicom-rt',\n sopClassUids,\n getDisplaySetsFromSeries: instances => {\n return _getDisplaySetsFromSeries(\n instances,\n servicesManager,\n extensionManager\n );\n },\n },\n ];\n}\n\nexport default getSopClassHandlerModule;\n","import { id } from './id';\nimport React from 'react';\nimport { Types } from '@ohif/core';\nimport getSopClassHandlerModule from './getSopClassHandlerModule';\n\nconst Component = React.lazy(() => {\n return import(\n /* webpackPrefetch: true */ './viewports/OHIFCornerstoneRTViewport'\n );\n});\n\nconst OHIFCornerstoneRTViewport = props => {\n return (\n <React.Suspense fallback={<div>Loading...</div>}>\n <Component {...props} />\n </React.Suspense>\n );\n};\n\n/**\n * You can remove any of the following modules if you don't need them.\n */\nconst extension: Types.Extensions.Extension = {\n /**\n * Only required property. Should be a unique value across all extensions.\n * You ID can be anything you want, but it should be unique.\n */\n id,\n\n /**\n * PanelModule should provide a list of panels that will be available in OHIF\n * for Modes to consume and render. Each panel is defined by a {name,\n * iconName, iconLabel, label, component} object. Example of a panel module\n * is the StudyBrowserPanel that is provided by the default extension in OHIF.\n */\n getViewportModule({\n servicesManager,\n extensionManager,\n }: Types.Extensions.ExtensionParams) {\n const ExtendedOHIFCornerstoneRTViewport = props => {\n return (\n <OHIFCornerstoneRTViewport\n servicesManager={servicesManager}\n extensionManager={extensionManager}\n {...props}\n />\n );\n };\n\n return [{ name: 'dicom-rt', component: ExtendedOHIFCornerstoneRTViewport }];\n },\n /**\n * SopClassHandlerModule should provide a list of sop class handlers that will be\n * available in OHIF for Modes to consume and use to create displaySets from Series.\n * Each sop class handler is defined by a { name, sopClassUids, getDisplaySetsFromSeries}.\n * Examples include the default sop class handler provided by the default extension\n */\n getSopClassHandlerModule,\n};\n\nexport default extension;\n"],"names":["root","factory","exports","module","require","define","amd","globalThis","__WEBPACK_EXTERNAL_MODULE__762__","__WEBPACK_EXTERNAL_MODULE__836__","__WEBPACK_EXTERNAL_MODULE__369__","deferred","installedChunks","async","_ref","rtDisplaySet","viewportIndex","servicesManager","segmentationService","hangingProtocolService","viewportGridService","services","displaySetInstanceUID","referencedDisplaySetInstanceUID","segmentationId","createSegmentationForRTDisplaySet","hydrateSegmentation","viewports","getState","updatedViewports","getViewportsRequireUpdate","setDisplaySetsForViewports","forEach","viewport","index","shouldRenderSegmentation","displaySetInstanceUIDs","push","viewportOptions","initialImageOptions","preset","RESPONSE","NO_NEVER","CANCEL","HYDRATE_SEG","toolGroupId","uiViewportDialogService","Promise","resolve","reject","promptResult","message","actions","type","text","value","onSubmit","result","hide","show","onOutsideClick","_askHydrate","hydrateRTDisplaySet","obj","Symbol","iterator","constructor","prototype","_toPropertyKey","arg","key","input","hint","prim","toPrimitive","undefined","res","call","TypeError","String","Number","Object","defineProperty","enumerable","configurable","writable","create","console","warn","_console","_len","arguments","length","args","Array","_key","concat","apply","alreadyWarned","_len2","_key2","Date","loadNamespaces","i18n","ns","cb","isInitialized","on","initialized","setTimeout","off","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","m","i18nInstance","defaultOptions","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transWrapTextNodes","transKeepBasicHtmlNodesFor","useSuspense","unescape","replace","_defineProperties","target","props","i","descriptor","createContext","ReportNamespaces","instance","Constructor","_classCallCheck","this","usedNamespaces","protoProps","staticProps","namespaces","_this","keys","_arrayLikeToArray","arr","len","arr2","isArray","_i","_s","_e","_x","_r","_arr","_n","_d","next","done","err","o","minLen","n","toString","slice","name","from","test","object","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","source","getOwnPropertyDescriptors","defineProperties","usePrevious","ignore","ref","useRef","useEffect","current","i18nFromProps","useContext","i18nFromContext","defaultNSFromContext","defaultNS","reportNamespaces","notReadyT","k","optsOrDefaultValue","defaultValue","retNotReady","t","ready","options","react","wait","i18nOptions","keyPrefix","addUsedNamespaces","initializedStoreOnce","every","languages","ignoreJSONStructure","hasLoadedNamespace","precheck","loadNotPending","indexOf","backendConnector","backend","isLanguageChangingTo","lng","fallbackLng","lastLng","toLowerCase","l","loadState","state","hasResourceBundle","resources","partialBundledLanguages","oldI18nextHasLoadedNamespace","getT","getFixedT","nsMode","_useState2","useState","setT","joinedNS","join","previousJoinedNS","isMounted","boundReset","store","split","e","isInitial","ret","ToolGroupService","customizationService","tools","get","createToolGroupAndAddTools","formatDate","utils","OHIFCornerstoneRTViewport","children","displaySets","viewportLabel","extensionManager","displaySetService","toolGroupService","uiNotificationService","Error","viewportGrid","useViewportGrid","isToolGroupCreated","setToolGroupCreated","selectedSegment","setSelectedSegment","isHydrated","setIsHydrated","rtIsLoading","setRtIsLoading","isLoaded","element","setElement","processingProgress","setProcessingProgress","percentComplete","totalSegments","referencedDisplaySetRef","activeViewportIndex","referencedDisplaySet","getReferenceDisplaySet","referencedDisplaySetMetadata","image0","images","PatientID","PatientName","PatientSex","PatientAge","SliceThickness","StudyDate","SeriesDescription","SeriesInstanceUID","SeriesNumber","ManufacturerModelName","SpacingBetweenSlices","_getReferencedDisplaySetMetadata","displaySet","metadata","onElementEnabled","evt","detail","onElementDisabled","getCornerstoneViewport","useCallback","component","Component","getModuleEntry","React","_extends","viewportType","orientation","viewportId","onSegmentChange","direction","segmentation","getSegmentation","segments","numberOfSegments","newSelectedSegmentIndex","jumpToSegmentCenter","promptHydrateRT","then","unsubscribe","subscribe","EVENTS","SEGMENTATION_LOADING_COMPLETE","overlappingSegments","title","SEGMENT_LOADING_COMPLETE","numSegments","onDisplaySetsRemovedSubscription","DISPLAY_SETS_REMOVED","_ref2","activeViewport","includes","setDisplaySetsForViewport","toolGroup","getToolGroup","createRTToolGroupAndAddTools","removeSegmentationRepresentationFromToolGroup","destroyToolGroup","childrenWithProps","map","child","onStatusClick","_hydrateRTDisplaySet","ViewportActionBar","onDoubleClick","stopPropagation","preventDefault","onArrowsClick","getStatusComponent","ToolTipMessage","StatusIcon","useTranslation","loadStr","Icon","StatusArea","className","onMouseUp","Tooltip","content","position","_getStatusComponent","studyData","label","useAltStyling","studyDate","currentSeries","seriesDescription","patientInformation","patientName","OHIF","Alphabetic","patientSex","patientAge","MRN","thickness","toFixed","spacing","scanner","LoadingIndicatorTotalPercent","totalNumbers","loadingText","propTypes","PropTypes","dataSource","customProps","defaultProps","hasOwnProperty","propIsEnumerable","propertyIsEnumerable","assign","test1","getOwnPropertyNames","test2","fromCharCode","test3","letter","shouldUseNative","to","val","toObject","s","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","location","propFullName","secret","getShim","isRequired","ReactPropTypes","array","bigint","bool","func","number","string","symbol","any","arrayOf","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","p","Fragment","StrictMode","Profiler","q","r","Suspense","u","v","for","w","x","z","a","b","c","encodeURIComponent","A","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","B","C","context","refs","updater","D","E","isReactComponent","setState","forceUpdate","F","isPureReactComponent","G","H","I","__self","__source","J","d","h","g","f","$$typeof","_owner","L","M","N","escape","O","K","y","P","Q","_status","_result","default","R","S","T","ReactCurrentDispatcher","ReactCurrentBatchConfig","transition","ReactCurrentOwner","IsSomeRendererActing","Children","count","toArray","only","PureComponent","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","cloneElement","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","createElement","createFactory","bind","createRef","forwardRef","render","isValidElement","lazy","_payload","_init","memo","compare","useDebugValue","useImperativeHandle","useLayoutEffect","useMemo","useReducer","version","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","splice","chunkId","getter","__esModule","definition","prop","toStringTag","link","document","nc","setAttribute","rel","as","href","head","appendChild","id","packageJson","SOPClassHandlerId","DicomMessage","DicomMetaDictionary","dcmjs","dicomlab2RGB","loadRTStruct","rtStructDisplaySet","headers","utilityModule","getActiveDataSource","bulkDataURI","getConfig","dicomLoaderService","imageIdSopInstanceUidPairs","image","imageId","sopInstanceUID","SOPInstanceUID","_getImageIdSopInstanceUidPairsForDisplaySet","enabled","datasource","ROIContourSequence","promisesMap","Map","ROIContour","referencedROINumber","ReferencedROINumber","ContourSequence","Contour","ContourData","contourData","has","set","BulkDataURI","retrieve","bulkDataPromise","StudyInstanceUID","resolvedPromisesMap","promiseArray","entries","allSettled","resolvedPromises","promise","status","isFinite","uint8Array","Uint8Array","dataUint8Array","TextDecoder","decode","parseFloat","error","reason","checkAndLoadContourData","segArrayBuffer","findDicomDataPromise","dicomData","readFile","rtStructDataset","naturalizeDataset","dict","_meta","namifyDataset","meta","StructureSetROISequence","RTROIObservationsSequence","structureSet","StructureSetLabel","ROIContours","visible","isSupported","ContourSequenceArray","objOrArray","contourPoints","ContourImageSequence","NumberOfContourPoints","ContourGeometricType","ReferencedSOPInstanceUID","_getImageId","points","numberOfPoints","_setROIContourMetadata","imageIdSopInstanceUidPairsEntry","find","StructureSetROI","structureSetROI","ROINumber","ROIContourData","ROIName","ROIGenerationAlgorithm","ROIDescription","ROIDisplayColor","RecommendedDisplayCIELabValue","colorArray","_setROIContourDataColor","RTROIObservations","ObservationNumber","ROIObservationDescription","RTROIInterpretedType","ROIInterpreter","_setROIContourRTROIObservations","sopClassUids","loadPromises","_getDisplaySetsFromSeries","instances","SeriesDate","SOPClassUID","wadoRoot","wadoUri","wadoUriRoot","Modality","loading","isReconstructable","referencedImages","referencedSeriesInstanceUID","isDerivedDisplaySet","isOverlayDisplaySet","referencedSeriesSequence","ReferencedSeriesSequence","ReferencedFrameOfReferenceSequence","referencedFrameOfReference","RTReferencedStudySequence","rtReferencedStudy","RTReferencedSeriesSequence","rtReferencedSeries","ReferencedInstanceSequence","contourImage","ReferencedSOPClassUID","referencedSeries","_deriveReferencedSeriesSequenceFromFrameOfReferenceSequence","DisplaySetService","referencedDisplaySets","getDisplaySetsForSeries","load","suppressEvents","catch","_load","getDisplaySetsFromSeries","fallback","getViewportModule","getSopClassHandlerModule"],"sourceRoot":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ohif/extension-cornerstone-dicom-rt",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "DICOM RT read workflow",
|
|
5
|
+
"author": "OHIF",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"main": "dist/ohif-extension-cornerstone-dicom-rt.umd.js",
|
|
8
|
+
"module": "src/index.tsx",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist/**",
|
|
11
|
+
"public/**",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public"
|
|
16
|
+
},
|
|
17
|
+
"repository": "OHIF/Viewers",
|
|
18
|
+
"keywords": [
|
|
19
|
+
"ohif-extension"
|
|
20
|
+
],
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=14",
|
|
23
|
+
"npm": ">=6",
|
|
24
|
+
"yarn": ">=1.18.0"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"dev": "cross-env NODE_ENV=development webpack --config .webpack/webpack.dev.js --watch --output-pathinfo",
|
|
28
|
+
"dev:dicom-seg": "yarn run dev",
|
|
29
|
+
"build": "cross-env NODE_ENV=production webpack --config .webpack/webpack.prod.js",
|
|
30
|
+
"build:package": "yarn run build",
|
|
31
|
+
"start": "yarn run dev"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@ohif/core": "^3.0.0",
|
|
35
|
+
"@ohif/extension-default": "^3.0.0",
|
|
36
|
+
"@ohif/extension-cornerstone": "^3.0.0",
|
|
37
|
+
"@ohif/i18n": "^1.0.0",
|
|
38
|
+
"prop-types": "^15.6.2",
|
|
39
|
+
"react": "^17.0.2",
|
|
40
|
+
"react-dom": "^17.0.2",
|
|
41
|
+
"react-i18next": "^10.11.0",
|
|
42
|
+
"react-router": "^6.3.0",
|
|
43
|
+
"react-router-dom": "^6.3.0",
|
|
44
|
+
"webpack": "^5.50.0",
|
|
45
|
+
"webpack-merge": "^5.7.3"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@babel/runtime": "^7.20.13",
|
|
49
|
+
"react-color": "^2.19.3"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
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-plugin-inline-react-svg": "^2.0.1",
|
|
60
|
+
"@babel/preset-env": "^7.5.0",
|
|
61
|
+
"@babel/preset-react": "^7.16.7",
|
|
62
|
+
"babel-eslint": "^8.0.3",
|
|
63
|
+
"babel-loader": "^8.0.0-beta.4",
|
|
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-merge": "^5.7.3",
|
|
72
|
+
"webpack-cli": "^4.7.2"
|
|
73
|
+
}
|
|
74
|
+
}
|