@ohif/extension-cornerstone-dicom-seg 3.7.0-beta.7 → 3.7.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see ohif-extension-cornerstone-dicom-seg.umd.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@kitware/vtk.js/Common/Core/Math"),require("@ohif/core"),require("dcmjs"),require("@ohif/ui")):"function"==typeof define&&define.amd?define(["@kitware/vtk.js/Common/Core/Math","@ohif/core","dcmjs","@ohif/ui"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-seg"]=t(require("@kitware/vtk.js/Common/Core/Math"),require("@ohif/core"),require("dcmjs"),require("@ohif/ui")):e["ohif-extension-cornerstone-dicom-seg"]=t(e["@kitware/vtk.js/Common/Core/Math"],e["@ohif/core"],e.dcmjs,e["@ohif/ui"])}(globalThis,((e,t,n,r)=>(()=>{var o,i,a={580:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>S});var r=n(216),o=n.n(r),i=n(735),a=n(281),s=n(762),c=n.n(s),l=n(369);const u=function(e,t,n){const{tools:r}=t.get("cornerstone.overlayViewportTools")??{};return e.createToolGroupAndAddTools(n,r,{})};const p=async function(e){let{segDisplaySet:t,viewportIndex:n,servicesManager:r}=e;const{segmentationService:o,hangingProtocolService:i,viewportGridService:a}=r.services,s=t.referencedDisplaySetInstanceUID;let c=null;c=await o.createSegmentationForSEGDisplaySet(t,c,!1),o.hydrateSegmentation(t.displaySetInstanceUID);const{viewports:l}=a.getState(),u=i.getViewportsRequireUpdate(n,s);return l.forEach(((e,r)=>{if(r===n)return;o.shouldRenderSegmentation(e.displaySetInstanceUIDs,t.displaySetInstanceUID)&&u.push({viewportIndex:r,displaySetInstanceUIDs:e.displaySetInstanceUIDs,viewportOptions:{initialImageOptions:{preset:"middle"}}})})),a.setDisplaySetsForViewports(u),!0},f={NO_NEVER:-1,CANCEL:0,HYDRATE_SEG:5};const d=function(e){let{servicesManager:t,segDisplaySet:n,viewportIndex:r}=e;const{uiViewportDialogService:o}=t.services;return new Promise((async function(e,i){const a=await function(e,t){return new Promise((function(n,r){const o="Do you want to open this Segmentation?",i=[{type:l.ButtonEnums.type.secondary,text:"No",value:f.CANCEL},{type:l.ButtonEnums.type.primary,text:"Yes",value:f.HYDRATE_SEG}],a=t=>{e.hide(),n(t)};e.show({viewportIndex:t,type:"info",message:o,actions:i,onSubmit:a,onOutsideClick:()=>{e.hide(),n(f.CANCEL)}})}))}(o,r);if(a===f.HYDRATE_SEG){e(await p({segDisplaySet:n,viewportIndex:r,servicesManager:t}))}}))};function m(){return m=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},m.apply(this,arguments)}const{formatDate:g}=s.utils;function y(e){const{children:t,displaySets:n,viewportOptions:r,viewportIndex:o,viewportLabel:s,servicesManager:f,extensionManager:y}=e,{t:S}=(0,a.$G)("SEGViewport"),{displaySetService:v,toolGroupService:b,segmentationService:h,uiNotificationService:w,customizationService:E}=f.services,I=`SEGToolGroup-${o}`;if(n.length>1)throw new Error("SEG viewport should only have a single display set");const O=n[0],[D,C]=(0,l.useViewportGrid)(),[P,x]=(0,i.useState)(!1),[j,k]=(0,i.useState)(1),[N,T]=(0,i.useState)(O.isHydrated),[R,M]=(0,i.useState)(!O.isLoaded),[_,U]=(0,i.useState)(null),[A,G]=(0,i.useState)({percentComplete:null,totalSegments:null}),q=(0,i.useRef)(null),{viewports:V,activeViewportIndex:F}=D,L=O.getReferenceDisplaySet(),$=function(e){const t=e.images[0],n={PatientID:t.PatientID,PatientName:t.PatientName,PatientSex:t.PatientSex,PatientAge:t.PatientAge,SliceThickness:t.SliceThickness,StudyDate:t.StudyDate,SeriesDescription:t.SeriesDescription,SeriesInstanceUID:t.SeriesInstanceUID,SeriesNumber:t.SeriesNumber,ManufacturerModelName:t.ManufacturerModelName,SpacingBetweenSlices:t.SpacingBetweenSlices};return n}(L);q.current={displaySet:L,metadata:$};const B=e=>{U(e.detail.element)},z=()=>{U(null)},H=(0,i.useCallback)((()=>{const{component:t}=y.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone"),{displaySet:n}=q.current;return i.createElement(t,m({},e,{displaySets:[n,O],viewportOptions:{viewportType:"volume",toolGroupId:I,orientation:r.orientation,viewportId:r.viewportId},onElementEnabled:B,onElementDisabled:z}))}),[o,O,I]),W=(0,i.useCallback)((e=>{e="left"===e?-1:1;const t=O.displaySetInstanceUID,n=h.getSegmentation(t),{segments:r}=n,o=Object.keys(r).length;let i=j+e;i>o-1?i=1:0===i&&(i=o-1),h.jumpToSegmentCenter(t,i,I),k(i)}),[j]);(0,i.useEffect)((()=>{R||d({servicesManager:f,viewportIndex:o,segDisplaySet:O}).then((e=>{e&&T(!0)}))}),[f,o,O,R]),(0,i.useEffect)((()=>{const{unsubscribe:e}=h.subscribe(h.EVENTS.SEGMENTATION_LOADING_COMPLETE,(e=>{e.segDisplaySet.displaySetInstanceUID===O.displaySetInstanceUID&&M(!1),e.overlappingSegments&&w.show({title:"Overlapping Segments",message:"Overlapping segments detected which is not currently supported",type:"warning"})}));return()=>{e()}}),[O]),(0,i.useEffect)((()=>{const{unsubscribe:e}=h.subscribe(h.EVENTS.SEGMENT_LOADING_COMPLETE,(e=>{let{percentComplete:t,numSegments:n}=e;G({percentComplete:t,totalSegments:n})}));return()=>{e()}}),[O]),(0,i.useEffect)((()=>{const e=v.subscribe(v.EVENTS.DISPLAY_SETS_REMOVED,(e=>{let{displaySetInstanceUIDs:t}=e;const n=V[F];t.includes(n.displaySetInstanceUID)&&C.setDisplaySetsForViewport({viewportIndex:F,displaySetInstanceUIDs:[]})}));return()=>{e.unsubscribe()}}),[]),(0,i.useEffect)((()=>{let e=b.getToolGroup(I);if(!e)return e=u(b,E,I),x(!0),()=>{h.removeSegmentationRepresentationFromToolGroup(I),b.destroyToolGroup(I)}}),[]),(0,i.useEffect)((()=>(T(O.isHydrated),()=>{h.removeSegmentationRepresentationFromToolGroup(I),q.current=null})),[O]);let Y=null;if(!q.current||L.displaySetInstanceUID!==q.current.displaySet.displaySetInstanceUID)return null;t&&t.length&&(Y=t.map(((e,t)=>e&&i.cloneElement(e,{viewportIndex:o,key:t}))));const{PatientID:J,PatientName:K,PatientSex:Q,PatientAge:X,SliceThickness:Z,ManufacturerModelName:ee,StudyDate:te,SeriesDescription:ne,SpacingBetweenSlices:re}=q.current.metadata,oe=async()=>{const e=await p({segDisplaySet:O,viewportIndex:o,servicesManager:f});T(e)};return i.createElement(i.Fragment,null,i.createElement(l.ViewportActionBar,{onDoubleClick:e=>{e.stopPropagation(),e.preventDefault()},onArrowsClick:W,getStatusComponent:()=>function(e){let{isHydrated:t,onStatusClick:n}=e,r=null,o=null;const{t:s}=(0,a.$G)("Common"),c=s("LOAD");switch(t){case!0:o=()=>i.createElement(l.Icon,{name:"status-alert"}),r=()=>i.createElement("div",null,"This Segmentation is loaded in the segmentation panel");break;case!1:o=()=>i.createElement(l.Icon,{name:"status-untracked"}),r=()=>i.createElement("div",null,"Click LOAD to load segmentation.")}const u=()=>i.createElement("div",{className:"flex h-6 leading-6 cursor-default text-sm text-white"},i.createElement("div",{className:"min-w-[45px] flex items-center p-1 rounded-l-xl rounded-r bg-customgray-100"},i.createElement(o,null),i.createElement("span",{className:"ml-1"},"SEG")),!t&&i.createElement("div",{className:"ml-1 px-1.5 rounded cursor-pointer hover:text-black bg-primary-main hover:bg-primary-light",onMouseUp:n},c));return i.createElement(i.Fragment,null,r&&i.createElement(l.Tooltip,{content:i.createElement(r,null),position:"bottom-left"},i.createElement(u,null)),!r&&i.createElement(u,null))}({isHydrated:N,onStatusClick:oe}),studyData:{label:s,useAltStyling:!0,studyDate:g(te),seriesDescription:`SEG Viewport ${ne}`,patientInformation:{patientName:K?c().utils.formatPN(K.Alphabetic):"",patientSex:Q||"",patientAge:X||"",MRN:J||"",thickness:Z?`${Z.toFixed(2)}mm`:"",spacing:void 0!==re?`${re.toFixed(2)}mm`:"",scanner:ee||""}}}),i.createElement("div",{className:"relative flex flex-row w-full h-full overflow-hidden"},R&&i.createElement(l.LoadingIndicatorTotalPercent,{className:"w-full h-full",totalNumbers:A.totalSegments,percentComplete:A.percentComplete,loadingText:"Loading SEG..."}),H(),Y))}y.propTypes={displaySets:o().arrayOf(o().object),viewportIndex:o().number.isRequired,dataSource:o().object,children:o().node,customProps:o().object},y.defaultProps={customProps:{}};const S=y},516:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,o){for(var i,a,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c<arguments.length;c++){for(var l in i=Object(arguments[c]))n.call(i,l)&&(s[l]=i[l]);if(t){a=t(i);for(var u=0;u<a.length;u++)r.call(i,a[u])&&(s[a[u]]=i[a[u]])}}return s}},459:(e,t,n)=>{"use strict";var r=n(704);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},216:(e,t,n)=>{e.exports=n(459)()},704:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},447:(e,t,n)=>{"use strict";var r=n(516),o=60103,i=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var a=60109,s=60110,c=60112;t.Suspense=60113;var l=60115,u=60116;if("function"==typeof Symbol&&Symbol.for){var p=Symbol.for;o=p("react.element"),i=p("react.portal"),t.Fragment=p("react.fragment"),t.StrictMode=p("react.strict_mode"),t.Profiler=p("react.profiler"),a=p("react.provider"),s=p("react.context"),c=p("react.forward_ref"),t.Suspense=p("react.suspense"),l=p("react.memo"),u=p("react.lazy")}var f="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 m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g={};function y(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function S(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}y.prototype.isReactComponent={},y.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")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},S.prototype=y.prototype;var b=v.prototype=new S;b.constructor=v,r(b,y.prototype),b.isPureReactComponent=!0;var h={current:null},w=Object.prototype.hasOwnProperty,E={key:!0,ref:!0,__self:!0,__source:!0};function I(e,t,n){var r,i={},a=null,s=null;if(null!=t)for(r in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)w.call(t,r)&&!E.hasOwnProperty(r)&&(i[r]=t[r]);var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];i.children=l}if(e&&e.defaultProps)for(r in c=e.defaultProps)void 0===i[r]&&(i[r]=c[r]);return{$$typeof:o,type:e,key:a,ref:s,props:i,_owner:h.current}}function O(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var D=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,a){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var c=!1;if(null===e)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case o:case i:c=!0}}if(c)return a=a(c=e),e=""===r?"."+C(c,0):r,Array.isArray(a)?(n="",null!=e&&(n=e.replace(D,"$&/")+"/"),P(a,t,n,"",(function(e){return e}))):null!=a&&(O(a)&&(a=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(a,n+(!a.key||c&&c.key===a.key?"":(""+a.key).replace(D,"$&/")+"/")+e)),t.push(a)),1;if(c=0,r=""===r?".":r+":",Array.isArray(e))for(var l=0;l<e.length;l++){var u=r+C(s=e[l],l);c+=P(s,t,n,u,a)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),l=0;!(s=e.next()).done;)c+=P(s=s.value,t,n,u=r+C(s,l++),a);else if("object"===s)throw t=""+e,Error(d(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return c}function x(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function j(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 k={current:null};function N(){var e=k.current;if(null===e)throw Error(d(321));return e}var T={ReactCurrentDispatcher:k,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:h,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:x,forEach:function(e,t,n){x(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return x(e,(function(){t++})),t},toArray:function(e){return x(e,(function(e){return e}))||[]},only:function(e){if(!O(e))throw Error(d(143));return e}},t.Component=y,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=T,t.cloneElement=function(e,t,n){if(null==e)throw Error(d(267,e));var i=r({},e.props),a=e.key,s=e.ref,c=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,c=h.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(u in t)w.call(t,u)&&!E.hasOwnProperty(u)&&(i[u]=void 0===t[u]&&void 0!==l?l[u]:t[u])}var u=arguments.length-2;if(1===u)i.children=n;else if(1<u){l=Array(u);for(var p=0;p<u;p++)l[p]=arguments[p+2];i.children=l}return{$$typeof:o,type:e.type,key:a,ref:s,props:i,_owner:c}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:s,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:a,_context:e},e.Consumer=e},t.createElement=I,t.createFactory=function(e){var t=I.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=O,t.lazy=function(e){return{$$typeof:u,_payload:{_status:-1,_result:e},_init:j}},t.memo=function(e,t){return{$$typeof:l,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return N().useCallback(e,t)},t.useContext=function(e,t){return N().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return N().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return N().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return N().useLayoutEffect(e,t)},t.useMemo=function(e,t){return N().useMemo(e,t)},t.useReducer=function(e,t,n){return N().useReducer(e,t,n)},t.useRef=function(e){return N().useRef(e)},t.useState=function(e){return N().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}},807:t=>{"use strict";t.exports=e},762:e=>{"use strict";e.exports=t},369:e=>{"use strict";e.exports=r},836:e=>{"use strict";e.exports=n},281:(e,t,n)=>{"use strict";n.d(t,{$G:()=>C});var r=n(735);n(432);Object.create(null);function o(){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 i={};function a(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&i[t[0]]||("string"==typeof t[0]&&(i[t[0]]=new Date),o.apply(void 0,t))}var s=function(e,t){return function(){if(e.isInitialized)t();else{e.on("initialized",(function n(){setTimeout((function(){e.off("initialized",n)}),0),t()}))}}};function c(e,t,n){e.loadNamespaces(t,s(e,n))}function l(e,t,n,r){"string"==typeof n&&(n=[n]),n.forEach((function(t){e.options.ns.indexOf(t)<0&&e.options.ns.push(t)})),e.loadLanguages(t,s(e,r))}function u(e){return u="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},u(e)}function p(e){var t=function(e,t){if("object"!==u(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==u(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===u(t)?t:String(t)}function f(e,t,n){return(t=p(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,m={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},g=function(e){return m[e]};var y={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(d,g)}};var S;function v(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,p(r.key),r)}}var b=(0,r.createContext)(),h=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)}}])&&v(t.prototype,n),r&&v(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function w(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 E(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,s=[],c=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return w(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)?w(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 I(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 O(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?I(Object(n),!0).forEach((function(t){f(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):I(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var D=function(e,t){var n=(0,r.useRef)();return(0,r.useEffect)((function(){n.current=t?n.current:e}),[e,t]),n.current};function C(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,o=(0,r.useContext)(b)||{},i=o.i18n,s=o.defaultNS,p=n||i||S;if(p&&!p.reportNamespaces&&(p.reportNamespaces=new h),!p){a("You will need to pass in an i18next instance by using initReactI18next");var f=function(e,t){return"string"==typeof t?t:t&&"object"===u(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},d=[f,{},!1];return d.t=f,d.i18n={},d.ready=!1,d}p.options.react&&void 0!==p.options.react.wait&&a("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var m=O(O(O({},y),p.options.react),t),g=m.useSuspense,v=m.keyPrefix,w=e||s||p.options&&p.options.defaultNS;w="string"==typeof w?[w]:w||["translation"],p.reportNamespaces.addUsedNamespaces&&p.reportNamespaces.addUsedNamespaces(w);var I=(p.isInitialized||p.initializedStoreOnce)&&w.every((function(e){return function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return t.languages&&t.languages.length?void 0!==t.options.ignoreJSONStructure?t.hasLoadedNamespace(e,{lng:n.lng,precheck:function(t,r){if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}):function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=t.languages[0],o=!!t.options&&t.options.fallbackLng,i=t.languages[t.languages.length-1];if("cimode"===r.toLowerCase())return!0;var a=function(e,n){var r=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===r||2===r};return!(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!a(t.isLanguageChangingTo,e)||!t.hasResourceBundle(r,e)&&t.services.backendConnector.backend&&(!t.options.resources||t.options.partialBundledLanguages)&&(!a(r,e)||o&&!a(i,e)))}(e,t,n):(a("i18n.languages were undefined or empty",t.languages),!0)}(e,p,m)}));function C(){return p.getFixedT(t.lng||null,"fallback"===m.nsMode?w:w[0],v)}var P=E((0,r.useState)(C),2),x=P[0],j=P[1],k=w.join();t.lng&&(k="".concat(t.lng).concat(k));var N=D(k),T=(0,r.useRef)(!0);(0,r.useEffect)((function(){var e=m.bindI18n,n=m.bindI18nStore;function r(){T.current&&j(C)}return T.current=!0,I||g||(t.lng?l(p,t.lng,w,(function(){T.current&&j(C)})):c(p,w,(function(){T.current&&j(C)}))),I&&N&&N!==k&&T.current&&j(C),e&&p&&p.on(e,r),n&&p&&p.store.on(n,r),function(){T.current=!1,e&&p&&e.split(" ").forEach((function(e){return p.off(e,r)})),n&&p&&n.split(" ").forEach((function(e){return p.store.off(e,r)}))}}),[p,k]);var R=(0,r.useRef)(!0);(0,r.useEffect)((function(){T.current&&!R.current&&j(C),R.current=!1}),[p,v]);var M=[x,p,I];if(M.t=x,M.i18n=p,M.ready=I,I)return M;if(!I&&!g)return M;throw new Promise((function(e){t.lng?l(p,t.lng,w,(function(){return e()})):c(p,w,(function(){return e()}))}))}}},s={};function c(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}};return a[e](n,n.exports,c),n.exports}c.m=a,o=[],c.O=(e,t,n,r)=>{if(!t){var i=1/0;for(u=0;u<o.length;u++){for(var[t,n,r]=o[u],a=!0,s=0;s<t.length;s++)(!1&r||i>=r)&&Object.keys(c.O).every((e=>c.O[e](t[s])))?t.splice(s--,1):(a=!1,r<i&&(i=r));if(a){o.splice(u--,1);var l=n();void 0!==l&&(e=l)}}return e}r=r||0;for(var u=o.length;u>0&&o[u-1][2]>r;u--)o[u]=o[u-1];o[u]=[t,n,r]},c.F={},c.E=e=>{Object.keys(c.F).map((t=>{c.F[t](e)}))},c.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return c.d(t,{a:t}),t},c.d=(e,t)=>{for(var n in t)c.o(t,n)&&!c.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},c.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i={143:0},c.F.j=e=>{if(!c.o(i,e)||void 0===i[e]){i[e]=null;var t=document.createElement("link");c.nc&&t.setAttribute("nonce",c.nc),t.rel="prefetch",t.as="script",t.href=c.p+c.u(e),document.head.appendChild(t)}},c.O.j=e=>0===i[e],c.O(0,[143],(()=>{c.E(143)}),5);var l={};return(()=>{"use strict";c.r(l),c.d(l,{default:()=>P});const e=JSON.parse('{"u2":"@ohif/extension-cornerstone-dicom-seg"}').u2,t=`${e}.sopClassHandlerModule.dicom-seg`;var n=c(735),r=c(807),o=c.n(r),i=c(762),a=c(836),s=c.n(a);const{DicomMessage:u,DicomMetaDictionary:p}=s().data,f=["1.2.840.10008.5.1.4.1.1.66.4"];let d={};function m(e,n,r){const a=e[0],{StudyInstanceUID:c,SeriesInstanceUID:l,SOPInstanceUID:m,SeriesDescription:g,SeriesNumber:y,SeriesDate:S,SOPClassUID:v,wadoRoot:b,wadoUri:h,wadoUriRoot:w}=a,E={Modality:"SEG",loading:!1,isReconstructable:!0,displaySetInstanceUID:i.utils.guid(),SeriesDescription:g,SeriesNumber:y,SeriesDate:S,SOPInstanceUID:m,SeriesInstanceUID:l,StudyInstanceUID:c,SOPClassHandlerId:t,SOPClassUID:v,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,segments:{},sopClassUids:f,instance:a,instances:[a],wadoRoot:b,wadoUriRoot:w,wadoUri:h,isOverlayDisplaySet:!0},I=a.ReferencedSeriesSequence;if(!I)throw new Error("ReferencedSeriesSequence is missing for the SEG");const O=I[0];return E.referencedImages=a.ReferencedSeriesSequence.ReferencedInstanceSequence,E.referencedSeriesInstanceUID=O.SeriesInstanceUID,E.getReferenceDisplaySet=()=>{const{displaySetService:e}=n.services,t=e.getDisplaySetsForSeries(E.referencedSeriesInstanceUID);if(!t||0===t.length)throw new Error("Referenced DisplaySet is missing for the SEG");const r=t[0];E.referencedDisplaySetInstanceUID=r.displaySetInstanceUID,E.referencedVolumeURI=r.displaySetInstanceUID;const o=`cornerstoneStreamingImageVolume:${E.referencedVolumeURI}`;return E.referencedVolumeId=o,r},E.load=async e=>{let{headers:t}=e;return await function(e,t,n,r){const{SOPInstanceUID:i}=e,{segmentationService:a}=t.services;if((e.loading||e.isLoaded)&&d[i]&&function(e,t){return t.getSegmentation(e.displaySetInstanceUID)}(e,a))return d[i];return e.loading=!0,d[i]=new Promise((async(t,i)=>{if(!e.segments||0===Object.keys(e.segments).length){const t=await async function(e,t,n){const r=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),{dicomLoaderService:i}=r.exports,a=await i.findDicomDataPromise(t,null,n),c=u.readFile(a),l=p.naturalizeDataset(c.dict);l._meta=p.namifyDataset(c.meta),Array.isArray(l.SegmentSequence)||(l.SegmentSequence=[l.SegmentSequence]);const f=function(e){const t={};return e.SegmentSequence.forEach((e=>{const n=e.RecommendedDisplayCIELabValue,r=s().data.Colors.dicomlab2RGB(n).map((e=>Math.round(255*e)));r.push(255);const o=e.SegmentNumber;t[o]={color:r,functionalGroups:[],offset:null,size:null,pixelData:null,label:e.SegmentLabel}})),e.PerFrameFunctionalGroupsSequence.forEach((e=>{const n=e.SegmentIdentificationSequence.ReferencedSegmentNumber;t[n].functionalGroups.push(e)})),function(e,t){let n=Math.ceil(e.Rows*e.Columns/8),r=0;return Object.keys(t).forEach((i=>{const a=t[i];a.numberOfFrames=a.functionalGroups.length,a.size=a.numberOfFrames*n,a.offset=r,r=a.offset+a.size;const c=e.PixelData[0].slice(a.offset,r);a.pixelData=s().data.BitArray.unpack(c),a.geometry=function(e,t){let n=e.SharedFunctionalGroupsSequence.PixelMeasuresSequence,r=e.SharedFunctionalGroupsSequence.PlaneOrientationSequence,i=t[0].PlanePositionSequence;const a={};let s=n.SpacingBetweenSlices;s||n.SliceThickness&&(console.log("Using SliceThickness as SpacingBetweenSlices"),s=n.SliceThickness);a.spacing=[n.PixelSpacing[1],n.PixelSpacing[0],s].map(Number),a.dimensions=[e.Columns,e.Rows,t.length].map(Number);let c=r.ImageOrientationPatient.map(Number);const l=c.slice(0,3),u=c.slice(3,6);a.planeNormal=[],o().cross(l,u,a.planeNormal);let p=t[0].PlanePositionSequence.ImagePositionPatient.map(Number),f=t[t.length-1].PlanePositionSequence.ImagePositionPatient.map(Number);return a.sliceStep=[],o().subtract(f,p,a.sliceStep),o().normalize(a.sliceStep),a.direction=l.concat(u).concat(a.sliceStep),a.origin=i.ImagePositionPatient.map(Number),a}(e,a.functionalGroups)})),t}(e,t)}(l);return f}(n,e,r);e.segments=t}const c=!0;a.createSegmentationForSEGDisplaySet(e,null,c).then((()=>{e.loading=!1,t()})).catch((t=>{e.loading=!1,i(t)}))})),d[i]}(E,n,r,t)},[E]}const g=function(e){let{servicesManager:t,extensionManager:n}=e;return[{name:"dicom-seg",sopClassUids:f,getDisplaySetsFromSeries:e=>m(e,t,n)}]};var y=c(216),S=c.n(y),v=c(369);const b=function(e,t,r){const o="enter-segment-label",i=t=>{let{action:n,value:i}=t;switch(n.id){case"save":r(i.label,n.id);break;case"cancel":r("",n.id)}e.dismiss({id:o})};e&&e.create({id:o,centralize:!0,isDraggable:!1,showOverlay:!0,content:v.Dialog,contentProps:{title:"Segment",value:{label:t},noCloseButton:!0,onClose:()=>e.dismiss({id:o}),actions:[{id:"cancel",text:"Cancel",type:v.ButtonEnums.type.secondary},{id:"save",text:"Confirm",type:v.ButtonEnums.type.primary}],onSubmit:i,body:e=>{let{value:t,setValue:r}=e;return n.createElement(v.Input,{label:"Enter the segment label",labelClassName:"text-white text-[14px] leading-[1.2]",autoFocus:!0,className:"bg-black border-primary-main",type:"text",value:t.label,onChange:e=>{e.persist(),r((t=>({...t,label:e.target.value})))},onKeyPress:e=>{"Enter"===e.key&&i({value:t,action:{id:"save"}})}})}}})};var h=c(281);function w(e){let{servicesManager:t,commandsManager:r}=e;const{segmentationService:o,uiDialogService:i}=t.services,{t:a}=(0,h.$G)("PanelSegmentation"),[s,c]=(0,n.useState)(null),[l,u]=(0,n.useState)(o.getConfiguration()),[p,f]=(0,n.useState)((()=>o.getSegmentations())),[d,m]=(0,n.useState)({}),g=(0,n.useCallback)((e=>{m((t=>({...t,[e]:!t[e]})))}),[m]);(0,n.useEffect)((()=>{const e=p[p.length-1]?.id;e&&m((t=>({...t,[e]:!1})))}),[p,m]),(0,n.useEffect)((()=>{const e=o.EVENTS.SEGMENTATION_ADDED,t=o.EVENTS.SEGMENTATION_UPDATED,n=o.EVENTS.SEGMENTATION_REMOVED,r=[];return[e,t,n].forEach((e=>{const{unsubscribe:t}=o.subscribe(e,(()=>{const e=o.getSegmentations();f(e),u(o.getConfiguration())}));r.push(t)})),()=>{r.forEach((e=>{e()}))}}),[]);const y=e=>o.getToolGroupIdsWithSegmentation(e),S=(0,n.useCallback)(((e,t,n)=>{o.setConfiguration({segmentationId:e,[t]:n})}),[o]);return n.createElement("div",{className:"flex flex-col flex-auto min-h-0 justify-between mt-1"},p?.length?n.createElement(v.SegmentationGroupTable,{title:a("Segmentations"),showAddSegmentation:!1,segmentations:p,isMinimized:d,activeSegmentationId:s||"",onSegmentationClick:e=>{o.setActiveSegmentationForToolGroup(e)},onSegmentationDelete:e=>{o.remove(e)},onSegmentationEdit:e=>{const t=o.getSegmentation(e),{label:n}=t;b(i,n,((t,n)=>{""!==t&&o.addOrUpdateSegmentation({id:e,label:t},!1,!0)}))},onSegmentClick:(e,t)=>{o.setActiveSegmentForSegmentation(e,t);y(e).forEach((n=>{o.setActiveSegmentationForToolGroup(e,n),o.jumpToSegmentCenter(e,t,n)}))},onSegmentEdit:(e,t)=>{const n=o.getSegmentation(e).segments[t],{label:r}=n;b(i,r,((n,r)=>{""!==n&&o.setSegmentLabelForSegmentation(e,t,n)}))},onSegmentColorClick:(e,t)=>{},onSegmentDelete:(e,t)=>{console.warn("not implemented yet")},onToggleSegmentVisibility:(e,t)=>{const n=!o.getSegmentation(e).segments[t].isVisible;y(e).forEach((r=>{o.setSegmentVisibility(e,t,n,r)}))},onToggleSegmentationVisibility:e=>{o.toggleSegmentationVisibility(e)},onToggleMinimizeSegmentation:g,segmentationConfig:{initialConfig:l},setRenderOutline:e=>S(s,"renderOutline",e),setOutlineOpacityActive:e=>S(s,"outlineOpacity",e),setRenderFill:e=>S(s,"renderFill",e),setRenderInactiveSegmentations:e=>S(s,"renderInactiveSegmentations",e),setOutlineWidthActive:e=>S(s,"outlineWidthActive",e),setFillAlpha:e=>S(s,"fillAlpha",e),setFillAlphaInactive:e=>S(s,"fillAlphaInactive",e)}):null)}w.propTypes={commandsManager:S().shape({runCommand:S().func.isRequired}),servicesManager:S().shape({services:S().shape({segmentationService:S().shape({getSegmentation:S().func.isRequired,getSegmentations:S().func.isRequired,toggleSegmentationVisibility:S().func.isRequired,subscribe:S().func.isRequired,EVENTS:S().object.isRequired}).isRequired}).isRequired}).isRequired};const E={id:"@ohif/seg",hasUpdatedPriorsInformation:!1,name:"Segmentations",protocolMatchingRules:[],toolGroupIds:["default"],numberOfPriorsReferenced:0,defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"segDisplaySetId",matchedDisplaySetsIndex:-1}]},displaySetSelectors:{segDisplaySetId:{seriesMatchingRules:[{attribute:"Modality",constraint:{equals:"SEG"}}]}},stages:[{name:"Segmentations",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{allowUnmatchedView:!0},displaySets:[{id:"segDisplaySetId"}]}]}]};const I=function(){return[{name:E.id,protocol:E}]};function O(){return O=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},O.apply(this,arguments)}const D=n.lazy((()=>Promise.resolve().then(c.bind(c,580)))),C=e=>n.createElement(n.Suspense,{fallback:n.createElement("div",null,"Loading...")},n.createElement(D,e)),P={id:e,getPanelModule:e=>{let{servicesManager:t,commandsManager:r,extensionManager:o}=e;return[{name:"panelSegmentation",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation",component:()=>n.createElement(w,{commandsManager:r,servicesManager:t,extensionManager:o})}]},getViewportModule(e){let{servicesManager:t,extensionManager:r}=e;return[{name:"dicom-seg",component:e=>n.createElement(C,O({servicesManager:t,extensionManager:r},e))}]},getSopClassHandlerModule:g,getHangingProtocolModule:I}})(),l=c.O(l)})()));
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@kitware/vtk.js/Common/Core/Math"),require("@ohif/core"),require("dcmjs"),require("@ohif/ui")):"function"==typeof define&&define.amd?define(["@kitware/vtk.js/Common/Core/Math","@ohif/core","dcmjs","@ohif/ui"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-seg"]=t(require("@kitware/vtk.js/Common/Core/Math"),require("@ohif/core"),require("dcmjs"),require("@ohif/ui")):e["ohif-extension-cornerstone-dicom-seg"]=t(e["@kitware/vtk.js/Common/Core/Math"],e["@ohif/core"],e.dcmjs,e["@ohif/ui"])}(globalThis,((e,t,n,r)=>(()=>{var o,i,a={580:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>S});var r=n(216),o=n.n(r),i=n(735),a=n(281),s=n(762),c=n.n(s),l=n(369);const u=function(e,t,n){const{tools:r}=t.get("cornerstone.overlayViewportTools")??{};return e.createToolGroupAndAddTools(n,r,{})};const p=async function(e){let{segDisplaySet:t,viewportIndex:n,servicesManager:r}=e;const{segmentationService:o,hangingProtocolService:i,viewportGridService:a}=r.services,s=t.referencedDisplaySetInstanceUID;let c=null;c=await o.createSegmentationForSEGDisplaySet(t,c,!1),o.hydrateSegmentation(t.displaySetInstanceUID);const{viewports:l}=a.getState(),u=i.getViewportsRequireUpdate(n,s);return l.forEach(((e,r)=>{if(r===n)return;o.shouldRenderSegmentation(e.displaySetInstanceUIDs,t.displaySetInstanceUID)&&u.push({viewportIndex:r,displaySetInstanceUIDs:e.displaySetInstanceUIDs,viewportOptions:{initialImageOptions:{preset:"middle"}}})})),a.setDisplaySetsForViewports(u),!0},f={NO_NEVER:-1,CANCEL:0,HYDRATE_SEG:5};const d=function(e){let{servicesManager:t,segDisplaySet:n,viewportIndex:r}=e;const{uiViewportDialogService:o}=t.services;return new Promise((async function(e,i){const a=await function(e,t){return new Promise((function(n,r){const o="Do you want to open this Segmentation?",i=[{type:l.ButtonEnums.type.secondary,text:"No",value:f.CANCEL},{type:l.ButtonEnums.type.primary,text:"Yes",value:f.HYDRATE_SEG}],a=t=>{e.hide(),n(t)};e.show({viewportIndex:t,type:"info",message:o,actions:i,onSubmit:a,onOutsideClick:()=>{e.hide(),n(f.CANCEL)}})}))}(o,r);if(a===f.HYDRATE_SEG){e(await p({segDisplaySet:n,viewportIndex:r,servicesManager:t}))}}))};function m(){return m=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},m.apply(this,arguments)}const{formatDate:g}=s.utils;function y(e){const{children:t,displaySets:n,viewportOptions:r,viewportIndex:o,viewportLabel:s,servicesManager:f,extensionManager:y}=e,{t:S}=(0,a.$G)("SEGViewport"),{displaySetService:v,toolGroupService:b,segmentationService:h,uiNotificationService:w,customizationService:E}=f.services,I=`SEGToolGroup-${o}`;if(n.length>1)throw new Error("SEG viewport should only have a single display set");const O=n[0],[D,C]=(0,l.useViewportGrid)(),[P,x]=(0,i.useState)(!1),[j,k]=(0,i.useState)(1),[N,T]=(0,i.useState)(O.isHydrated),[M,R]=(0,i.useState)(!O.isLoaded),[_,U]=(0,i.useState)(null),[A,G]=(0,i.useState)({percentComplete:null,totalSegments:null}),q=(0,i.useRef)(null),{viewports:F,activeViewportIndex:V}=D,L=O.getReferenceDisplaySet(),$=function(e,t){const{SharedFunctionalGroupsSequence:[n]}=t.instance,{PixelMeasuresSequence:[r]}=n,{SpacingBetweenSlices:o,SliceThickness:i}=r,a=e.images[0],s={PatientID:a.PatientID,PatientName:a.PatientName,PatientSex:a.PatientSex,PatientAge:a.PatientAge,SliceThickness:a.SliceThickness||i,StudyDate:a.StudyDate,SeriesDescription:a.SeriesDescription,SeriesInstanceUID:a.SeriesInstanceUID,SeriesNumber:a.SeriesNumber,ManufacturerModelName:a.ManufacturerModelName,SpacingBetweenSlices:a.SpacingBetweenSlices||o};return s}(L,O);q.current={displaySet:L,metadata:$};const B=e=>{U(e.detail.element)},z=()=>{U(null)},H=(0,i.useCallback)((()=>{const{component:t}=y.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone"),{displaySet:n}=q.current;return i.createElement(t,m({},e,{displaySets:[n,O],viewportOptions:{viewportType:"volume",toolGroupId:I,orientation:r.orientation,viewportId:r.viewportId},onElementEnabled:B,onElementDisabled:z}))}),[o,O,I]),W=(0,i.useCallback)((e=>{e="left"===e?-1:1;const t=O.displaySetInstanceUID,n=h.getSegmentation(t),{segments:r}=n,o=Object.keys(r).length;let i=j+e;i>o-1?i=1:0===i&&(i=o-1),h.jumpToSegmentCenter(t,i,I),k(i)}),[j]);(0,i.useEffect)((()=>{M||d({servicesManager:f,viewportIndex:o,segDisplaySet:O}).then((e=>{e&&T(!0)}))}),[f,o,O,M]),(0,i.useEffect)((()=>{const{unsubscribe:e}=h.subscribe(h.EVENTS.SEGMENTATION_LOADING_COMPLETE,(e=>{e.segDisplaySet.displaySetInstanceUID===O.displaySetInstanceUID&&R(!1),e.overlappingSegments&&w.show({title:"Overlapping Segments",message:"Overlapping segments detected which is not currently supported",type:"warning"})}));return()=>{e()}}),[O]),(0,i.useEffect)((()=>{const{unsubscribe:e}=h.subscribe(h.EVENTS.SEGMENT_LOADING_COMPLETE,(e=>{let{percentComplete:t,numSegments:n}=e;G({percentComplete:t,totalSegments:n})}));return()=>{e()}}),[O]),(0,i.useEffect)((()=>{const e=v.subscribe(v.EVENTS.DISPLAY_SETS_REMOVED,(e=>{let{displaySetInstanceUIDs:t}=e;const n=F[V];t.includes(n.displaySetInstanceUID)&&C.setDisplaySetsForViewport({viewportIndex:V,displaySetInstanceUIDs:[]})}));return()=>{e.unsubscribe()}}),[]),(0,i.useEffect)((()=>{let e=b.getToolGroup(I);if(!e)return e=u(b,E,I),x(!0),()=>{h.removeSegmentationRepresentationFromToolGroup(I),b.destroyToolGroup(I)}}),[]),(0,i.useEffect)((()=>(T(O.isHydrated),()=>{h.removeSegmentationRepresentationFromToolGroup(I),q.current=null})),[O]);let Y=null;if(!q.current||L.displaySetInstanceUID!==q.current.displaySet.displaySetInstanceUID)return null;t&&t.length&&(Y=t.map(((e,t)=>e&&i.cloneElement(e,{viewportIndex:o,key:t}))));const{PatientID:J,PatientName:K,PatientSex:Q,PatientAge:X,SliceThickness:Z,ManufacturerModelName:ee,StudyDate:te,SeriesDescription:ne,SpacingBetweenSlices:re}=q.current.metadata,oe=async()=>{const e=await p({segDisplaySet:O,viewportIndex:o,servicesManager:f});T(e)};return i.createElement(i.Fragment,null,i.createElement(l.ViewportActionBar,{onDoubleClick:e=>{e.stopPropagation(),e.preventDefault()},onArrowsClick:W,getStatusComponent:()=>function(e){let{isHydrated:t,onStatusClick:n}=e,r=null,o=null;const{t:s}=(0,a.$G)("Common"),c=s("LOAD");switch(t){case!0:o=()=>i.createElement(l.Icon,{name:"status-alert"}),r=()=>i.createElement("div",null,"This Segmentation is loaded in the segmentation panel");break;case!1:o=()=>i.createElement(l.Icon,{name:"status-untracked"}),r=()=>i.createElement("div",null,"Click LOAD to load segmentation.")}const u=()=>i.createElement("div",{className:"flex h-6 leading-6 cursor-default text-sm text-white"},i.createElement("div",{className:"min-w-[45px] flex items-center p-1 rounded-l-xl rounded-r bg-customgray-100"},i.createElement(o,null),i.createElement("span",{className:"ml-1"},"SEG")),!t&&i.createElement("div",{className:"ml-1 px-1.5 rounded cursor-pointer hover:text-black bg-primary-main hover:bg-primary-light",onMouseUp:n},c));return i.createElement(i.Fragment,null,r&&i.createElement(l.Tooltip,{content:i.createElement(r,null),position:"bottom-left"},i.createElement(u,null)),!r&&i.createElement(u,null))}({isHydrated:N,onStatusClick:oe}),studyData:{label:s,useAltStyling:!0,studyDate:g(te),seriesDescription:`SEG Viewport ${ne}`,patientInformation:{patientName:K?c().utils.formatPN(K.Alphabetic):"",patientSex:Q||"",patientAge:X||"",MRN:J||"",thickness:Z?`${Z.toFixed(2)}mm`:"",spacing:void 0!==re?`${re.toFixed(2)}mm`:"",scanner:ee||""}}}),i.createElement("div",{className:"relative flex flex-row w-full h-full overflow-hidden"},M&&i.createElement(l.LoadingIndicatorTotalPercent,{className:"w-full h-full",totalNumbers:A.totalSegments,percentComplete:A.percentComplete,loadingText:"Loading SEG..."}),H(),Y))}y.propTypes={displaySets:o().arrayOf(o().object),viewportIndex:o().number.isRequired,dataSource:o().object,children:o().node,customProps:o().object},y.defaultProps={customProps:{}};const S=y},516:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,o){for(var i,a,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c<arguments.length;c++){for(var l in i=Object(arguments[c]))n.call(i,l)&&(s[l]=i[l]);if(t){a=t(i);for(var u=0;u<a.length;u++)r.call(i,a[u])&&(s[a[u]]=i[a[u]])}}return s}},459:(e,t,n)=>{"use strict";var r=n(704);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},216:(e,t,n)=>{e.exports=n(459)()},704:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},447:(e,t,n)=>{"use strict";var r=n(516),o=60103,i=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var a=60109,s=60110,c=60112;t.Suspense=60113;var l=60115,u=60116;if("function"==typeof Symbol&&Symbol.for){var p=Symbol.for;o=p("react.element"),i=p("react.portal"),t.Fragment=p("react.fragment"),t.StrictMode=p("react.strict_mode"),t.Profiler=p("react.profiler"),a=p("react.provider"),s=p("react.context"),c=p("react.forward_ref"),t.Suspense=p("react.suspense"),l=p("react.memo"),u=p("react.lazy")}var f="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 m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g={};function y(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function S(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}y.prototype.isReactComponent={},y.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")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},S.prototype=y.prototype;var b=v.prototype=new S;b.constructor=v,r(b,y.prototype),b.isPureReactComponent=!0;var h={current:null},w=Object.prototype.hasOwnProperty,E={key:!0,ref:!0,__self:!0,__source:!0};function I(e,t,n){var r,i={},a=null,s=null;if(null!=t)for(r in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)w.call(t,r)&&!E.hasOwnProperty(r)&&(i[r]=t[r]);var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];i.children=l}if(e&&e.defaultProps)for(r in c=e.defaultProps)void 0===i[r]&&(i[r]=c[r]);return{$$typeof:o,type:e,key:a,ref:s,props:i,_owner:h.current}}function O(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var D=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,a){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var c=!1;if(null===e)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case o:case i:c=!0}}if(c)return a=a(c=e),e=""===r?"."+C(c,0):r,Array.isArray(a)?(n="",null!=e&&(n=e.replace(D,"$&/")+"/"),P(a,t,n,"",(function(e){return e}))):null!=a&&(O(a)&&(a=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(a,n+(!a.key||c&&c.key===a.key?"":(""+a.key).replace(D,"$&/")+"/")+e)),t.push(a)),1;if(c=0,r=""===r?".":r+":",Array.isArray(e))for(var l=0;l<e.length;l++){var u=r+C(s=e[l],l);c+=P(s,t,n,u,a)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),l=0;!(s=e.next()).done;)c+=P(s=s.value,t,n,u=r+C(s,l++),a);else if("object"===s)throw t=""+e,Error(d(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return c}function x(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function j(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 k={current:null};function N(){var e=k.current;if(null===e)throw Error(d(321));return e}var T={ReactCurrentDispatcher:k,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:h,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:x,forEach:function(e,t,n){x(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return x(e,(function(){t++})),t},toArray:function(e){return x(e,(function(e){return e}))||[]},only:function(e){if(!O(e))throw Error(d(143));return e}},t.Component=y,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=T,t.cloneElement=function(e,t,n){if(null==e)throw Error(d(267,e));var i=r({},e.props),a=e.key,s=e.ref,c=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,c=h.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(u in t)w.call(t,u)&&!E.hasOwnProperty(u)&&(i[u]=void 0===t[u]&&void 0!==l?l[u]:t[u])}var u=arguments.length-2;if(1===u)i.children=n;else if(1<u){l=Array(u);for(var p=0;p<u;p++)l[p]=arguments[p+2];i.children=l}return{$$typeof:o,type:e.type,key:a,ref:s,props:i,_owner:c}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:s,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:a,_context:e},e.Consumer=e},t.createElement=I,t.createFactory=function(e){var t=I.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=O,t.lazy=function(e){return{$$typeof:u,_payload:{_status:-1,_result:e},_init:j}},t.memo=function(e,t){return{$$typeof:l,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return N().useCallback(e,t)},t.useContext=function(e,t){return N().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return N().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return N().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return N().useLayoutEffect(e,t)},t.useMemo=function(e,t){return N().useMemo(e,t)},t.useReducer=function(e,t,n){return N().useReducer(e,t,n)},t.useRef=function(e){return N().useRef(e)},t.useState=function(e){return N().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}},807:t=>{"use strict";t.exports=e},762:e=>{"use strict";e.exports=t},369:e=>{"use strict";e.exports=r},836:e=>{"use strict";e.exports=n},281:(e,t,n)=>{"use strict";n.d(t,{$G:()=>C});var r=n(735);n(432);Object.create(null);function o(){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 i={};function a(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&i[t[0]]||("string"==typeof t[0]&&(i[t[0]]=new Date),o.apply(void 0,t))}var s=function(e,t){return function(){if(e.isInitialized)t();else{e.on("initialized",(function n(){setTimeout((function(){e.off("initialized",n)}),0),t()}))}}};function c(e,t,n){e.loadNamespaces(t,s(e,n))}function l(e,t,n,r){"string"==typeof n&&(n=[n]),n.forEach((function(t){e.options.ns.indexOf(t)<0&&e.options.ns.push(t)})),e.loadLanguages(t,s(e,r))}function u(e){return u="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},u(e)}function p(e){var t=function(e,t){if("object"!==u(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==u(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===u(t)?t:String(t)}function f(e,t,n){return(t=p(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,m={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},g=function(e){return m[e]};var y={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(d,g)}};var S;function v(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,p(r.key),r)}}var b=(0,r.createContext)(),h=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)}}])&&v(t.prototype,n),r&&v(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function w(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 E(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,s=[],c=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return w(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)?w(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 I(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 O(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?I(Object(n),!0).forEach((function(t){f(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):I(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var D=function(e,t){var n=(0,r.useRef)();return(0,r.useEffect)((function(){n.current=t?n.current:e}),[e,t]),n.current};function C(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,o=(0,r.useContext)(b)||{},i=o.i18n,s=o.defaultNS,p=n||i||S;if(p&&!p.reportNamespaces&&(p.reportNamespaces=new h),!p){a("You will need to pass in an i18next instance by using initReactI18next");var f=function(e,t){return"string"==typeof t?t:t&&"object"===u(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},d=[f,{},!1];return d.t=f,d.i18n={},d.ready=!1,d}p.options.react&&void 0!==p.options.react.wait&&a("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var m=O(O(O({},y),p.options.react),t),g=m.useSuspense,v=m.keyPrefix,w=e||s||p.options&&p.options.defaultNS;w="string"==typeof w?[w]:w||["translation"],p.reportNamespaces.addUsedNamespaces&&p.reportNamespaces.addUsedNamespaces(w);var I=(p.isInitialized||p.initializedStoreOnce)&&w.every((function(e){return function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return t.languages&&t.languages.length?void 0!==t.options.ignoreJSONStructure?t.hasLoadedNamespace(e,{lng:n.lng,precheck:function(t,r){if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}):function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=t.languages[0],o=!!t.options&&t.options.fallbackLng,i=t.languages[t.languages.length-1];if("cimode"===r.toLowerCase())return!0;var a=function(e,n){var r=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===r||2===r};return!(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!a(t.isLanguageChangingTo,e)||!t.hasResourceBundle(r,e)&&t.services.backendConnector.backend&&(!t.options.resources||t.options.partialBundledLanguages)&&(!a(r,e)||o&&!a(i,e)))}(e,t,n):(a("i18n.languages were undefined or empty",t.languages),!0)}(e,p,m)}));function C(){return p.getFixedT(t.lng||null,"fallback"===m.nsMode?w:w[0],v)}var P=E((0,r.useState)(C),2),x=P[0],j=P[1],k=w.join();t.lng&&(k="".concat(t.lng).concat(k));var N=D(k),T=(0,r.useRef)(!0);(0,r.useEffect)((function(){var e=m.bindI18n,n=m.bindI18nStore;function r(){T.current&&j(C)}return T.current=!0,I||g||(t.lng?l(p,t.lng,w,(function(){T.current&&j(C)})):c(p,w,(function(){T.current&&j(C)}))),I&&N&&N!==k&&T.current&&j(C),e&&p&&p.on(e,r),n&&p&&p.store.on(n,r),function(){T.current=!1,e&&p&&e.split(" ").forEach((function(e){return p.off(e,r)})),n&&p&&n.split(" ").forEach((function(e){return p.store.off(e,r)}))}}),[p,k]);var M=(0,r.useRef)(!0);(0,r.useEffect)((function(){T.current&&!M.current&&j(C),M.current=!1}),[p,v]);var R=[x,p,I];if(R.t=x,R.i18n=p,R.ready=I,I)return R;if(!I&&!g)return R;throw new Promise((function(e){t.lng?l(p,t.lng,w,(function(){return e()})):c(p,w,(function(){return e()}))}))}}},s={};function c(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}};return a[e](n,n.exports,c),n.exports}c.m=a,o=[],c.O=(e,t,n,r)=>{if(!t){var i=1/0;for(u=0;u<o.length;u++){for(var[t,n,r]=o[u],a=!0,s=0;s<t.length;s++)(!1&r||i>=r)&&Object.keys(c.O).every((e=>c.O[e](t[s])))?t.splice(s--,1):(a=!1,r<i&&(i=r));if(a){o.splice(u--,1);var l=n();void 0!==l&&(e=l)}}return e}r=r||0;for(var u=o.length;u>0&&o[u-1][2]>r;u--)o[u]=o[u-1];o[u]=[t,n,r]},c.F={},c.E=e=>{Object.keys(c.F).map((t=>{c.F[t](e)}))},c.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return c.d(t,{a:t}),t},c.d=(e,t)=>{for(var n in t)c.o(t,n)&&!c.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},c.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i={143:0},c.F.j=e=>{if(!c.o(i,e)||void 0===i[e]){i[e]=null;var t=document.createElement("link");c.nc&&t.setAttribute("nonce",c.nc),t.rel="prefetch",t.as="script",t.href=c.p+c.u(e),document.head.appendChild(t)}},c.O.j=e=>0===i[e],c.O(0,[143],(()=>{c.E(143)}),5);var l={};return(()=>{"use strict";c.r(l),c.d(l,{default:()=>P});const e=JSON.parse('{"u2":"@ohif/extension-cornerstone-dicom-seg"}').u2,t=`${e}.sopClassHandlerModule.dicom-seg`;var n=c(735),r=c(807),o=c.n(r),i=c(762),a=c(836),s=c.n(a);const{DicomMessage:u,DicomMetaDictionary:p}=s().data,f=["1.2.840.10008.5.1.4.1.1.66.4"];let d={};function m(e,n,r){const a=e[0],{StudyInstanceUID:c,SeriesInstanceUID:l,SOPInstanceUID:m,SeriesDescription:g,SeriesNumber:y,SeriesDate:S,SOPClassUID:v,wadoRoot:b,wadoUri:h,wadoUriRoot:w}=a,E={Modality:"SEG",loading:!1,isReconstructable:!0,displaySetInstanceUID:i.utils.guid(),SeriesDescription:g,SeriesNumber:y,SeriesDate:S,SOPInstanceUID:m,SeriesInstanceUID:l,StudyInstanceUID:c,SOPClassHandlerId:t,SOPClassUID:v,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,segments:{},sopClassUids:f,instance:a,instances:[a],wadoRoot:b,wadoUriRoot:w,wadoUri:h,isOverlayDisplaySet:!0},I=a.ReferencedSeriesSequence;if(!I)throw new Error("ReferencedSeriesSequence is missing for the SEG");const O=I[0];return E.referencedImages=a.ReferencedSeriesSequence.ReferencedInstanceSequence,E.referencedSeriesInstanceUID=O.SeriesInstanceUID,E.getReferenceDisplaySet=()=>{const{displaySetService:e}=n.services,t=e.getDisplaySetsForSeries(E.referencedSeriesInstanceUID);if(!t||0===t.length)throw new Error("Referenced DisplaySet is missing for the SEG");const r=t[0];E.referencedDisplaySetInstanceUID=r.displaySetInstanceUID,E.referencedVolumeURI=r.displaySetInstanceUID;const o=`cornerstoneStreamingImageVolume:${E.referencedVolumeURI}`;return E.referencedVolumeId=o,r},E.load=async e=>{let{headers:t}=e;return await function(e,t,n,r){const{SOPInstanceUID:i}=e,{segmentationService:a}=t.services;if((e.loading||e.isLoaded)&&d[i]&&function(e,t){return t.getSegmentation(e.displaySetInstanceUID)}(e,a))return d[i];return e.loading=!0,d[i]=new Promise((async(t,i)=>{if(!e.segments||0===Object.keys(e.segments).length){const t=await async function(e,t,n){const r=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),{dicomLoaderService:i}=r.exports,a=await i.findDicomDataPromise(t,null,n),c=u.readFile(a),l=p.naturalizeDataset(c.dict);l._meta=p.namifyDataset(c.meta),Array.isArray(l.SegmentSequence)||(l.SegmentSequence=[l.SegmentSequence]);const f=function(e){const t={};return e.SegmentSequence.forEach((e=>{const n=e.RecommendedDisplayCIELabValue,r=s().data.Colors.dicomlab2RGB(n).map((e=>Math.round(255*e)));r.push(255);const o=e.SegmentNumber;t[o]={color:r,functionalGroups:[],offset:null,size:null,pixelData:null,label:e.SegmentLabel}})),e.PerFrameFunctionalGroupsSequence.forEach((e=>{const n=e.SegmentIdentificationSequence.ReferencedSegmentNumber;t[n].functionalGroups.push(e)})),function(e,t){let n=Math.ceil(e.Rows*e.Columns/8),r=0;return Object.keys(t).forEach((i=>{const a=t[i];a.numberOfFrames=a.functionalGroups.length,a.size=a.numberOfFrames*n,a.offset=r,r=a.offset+a.size;const c=e.PixelData[0].slice(a.offset,r);a.pixelData=s().data.BitArray.unpack(c),a.geometry=function(e,t){let n=e.SharedFunctionalGroupsSequence.PixelMeasuresSequence,r=e.SharedFunctionalGroupsSequence.PlaneOrientationSequence,i=t[0].PlanePositionSequence;const a={};let s=n.SpacingBetweenSlices;s||n.SliceThickness&&(console.log("Using SliceThickness as SpacingBetweenSlices"),s=n.SliceThickness);a.spacing=[n.PixelSpacing[1],n.PixelSpacing[0],s].map(Number),a.dimensions=[e.Columns,e.Rows,t.length].map(Number);let c=r.ImageOrientationPatient.map(Number);const l=c.slice(0,3),u=c.slice(3,6);a.planeNormal=[],o().cross(l,u,a.planeNormal);let p=t[0].PlanePositionSequence.ImagePositionPatient.map(Number),f=t[t.length-1].PlanePositionSequence.ImagePositionPatient.map(Number);return a.sliceStep=[],o().subtract(f,p,a.sliceStep),o().normalize(a.sliceStep),a.direction=l.concat(u).concat(a.sliceStep),a.origin=i.ImagePositionPatient.map(Number),a}(e,a.functionalGroups)})),t}(e,t)}(l);return f}(n,e,r);e.segments=t}const c=!0;a.createSegmentationForSEGDisplaySet(e,null,c).then((()=>{e.loading=!1,t()})).catch((t=>{e.loading=!1,i(t)}))})),d[i]}(E,n,r,t)},[E]}const g=function(e){let{servicesManager:t,extensionManager:n}=e;return[{name:"dicom-seg",sopClassUids:f,getDisplaySetsFromSeries:e=>m(e,t,n)}]};var y=c(216),S=c.n(y),v=c(369);const b=function(e,t,r){const o="enter-segment-label",i=t=>{let{action:n,value:i}=t;switch(n.id){case"save":r(i.label,n.id);break;case"cancel":r("",n.id)}e.dismiss({id:o})};e&&e.create({id:o,centralize:!0,isDraggable:!1,showOverlay:!0,content:v.Dialog,contentProps:{title:"Segment",value:{label:t},noCloseButton:!0,onClose:()=>e.dismiss({id:o}),actions:[{id:"cancel",text:"Cancel",type:v.ButtonEnums.type.secondary},{id:"save",text:"Confirm",type:v.ButtonEnums.type.primary}],onSubmit:i,body:e=>{let{value:t,setValue:r}=e;return n.createElement(v.Input,{label:"Enter the segment label",labelClassName:"text-white text-[14px] leading-[1.2]",autoFocus:!0,className:"bg-black border-primary-main",type:"text",value:t.label,onChange:e=>{e.persist(),r((t=>({...t,label:e.target.value})))},onKeyPress:e=>{"Enter"===e.key&&i({value:t,action:{id:"save"}})}})}}})};var h=c(281);function w(e){let{servicesManager:t,commandsManager:r}=e;const{segmentationService:o,uiDialogService:i}=t.services,{t:a}=(0,h.$G)("PanelSegmentation"),[s,c]=(0,n.useState)(null),[l,u]=(0,n.useState)(o.getConfiguration()),[p,f]=(0,n.useState)((()=>o.getSegmentations())),[d,m]=(0,n.useState)({}),g=(0,n.useCallback)((e=>{m((t=>({...t,[e]:!t[e]})))}),[m]);(0,n.useEffect)((()=>{const e=p[p.length-1]?.id;e&&m((t=>({...t,[e]:!1})))}),[p,m]),(0,n.useEffect)((()=>{const e=o.EVENTS.SEGMENTATION_ADDED,t=o.EVENTS.SEGMENTATION_UPDATED,n=o.EVENTS.SEGMENTATION_REMOVED,r=[];return[e,t,n].forEach((e=>{const{unsubscribe:t}=o.subscribe(e,(()=>{const e=o.getSegmentations();f(e),u(o.getConfiguration())}));r.push(t)})),()=>{r.forEach((e=>{e()}))}}),[]);const y=e=>o.getToolGroupIdsWithSegmentation(e),S=(0,n.useCallback)(((e,t,n)=>{o.setConfiguration({segmentationId:e,[t]:n})}),[o]);return n.createElement("div",{className:"flex flex-col flex-auto min-h-0 justify-between mt-1"},p?.length?n.createElement(v.SegmentationGroupTable,{title:a("Segmentations"),showAddSegmentation:!1,segmentations:p,isMinimized:d,activeSegmentationId:s||"",onSegmentationClick:e=>{o.setActiveSegmentationForToolGroup(e)},onSegmentationDelete:e=>{o.remove(e)},onSegmentationEdit:e=>{const t=o.getSegmentation(e),{label:n}=t;b(i,n,((t,n)=>{""!==t&&o.addOrUpdateSegmentation({id:e,label:t},!1,!0)}))},onSegmentClick:(e,t)=>{o.setActiveSegmentForSegmentation(e,t);y(e).forEach((n=>{o.setActiveSegmentationForToolGroup(e,n),o.jumpToSegmentCenter(e,t,n)}))},onSegmentEdit:(e,t)=>{const n=o.getSegmentation(e).segments[t],{label:r}=n;b(i,r,((n,r)=>{""!==n&&o.setSegmentLabelForSegmentation(e,t,n)}))},onSegmentColorClick:(e,t)=>{},onSegmentDelete:(e,t)=>{console.warn("not implemented yet")},onToggleSegmentVisibility:(e,t)=>{const n=!o.getSegmentation(e).segments[t].isVisible;y(e).forEach((r=>{o.setSegmentVisibility(e,t,n,r)}))},onToggleSegmentationVisibility:e=>{o.toggleSegmentationVisibility(e)},onToggleMinimizeSegmentation:g,segmentationConfig:{initialConfig:l},setRenderOutline:e=>S(s,"renderOutline",e),setOutlineOpacityActive:e=>S(s,"outlineOpacity",e),setRenderFill:e=>S(s,"renderFill",e),setRenderInactiveSegmentations:e=>S(s,"renderInactiveSegmentations",e),setOutlineWidthActive:e=>S(s,"outlineWidthActive",e),setFillAlpha:e=>S(s,"fillAlpha",e),setFillAlphaInactive:e=>S(s,"fillAlphaInactive",e)}):null)}w.propTypes={commandsManager:S().shape({runCommand:S().func.isRequired}),servicesManager:S().shape({services:S().shape({segmentationService:S().shape({getSegmentation:S().func.isRequired,getSegmentations:S().func.isRequired,toggleSegmentationVisibility:S().func.isRequired,subscribe:S().func.isRequired,EVENTS:S().object.isRequired}).isRequired}).isRequired}).isRequired};const E={id:"@ohif/seg",hasUpdatedPriorsInformation:!1,name:"Segmentations",protocolMatchingRules:[],toolGroupIds:["default"],numberOfPriorsReferenced:0,defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"segDisplaySetId",matchedDisplaySetsIndex:-1}]},displaySetSelectors:{segDisplaySetId:{seriesMatchingRules:[{attribute:"Modality",constraint:{equals:"SEG"}}]}},stages:[{name:"Segmentations",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{allowUnmatchedView:!0},displaySets:[{id:"segDisplaySetId"}]}]}]};const I=function(){return[{name:E.id,protocol:E}]};function O(){return O=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},O.apply(this,arguments)}const D=n.lazy((()=>Promise.resolve().then(c.bind(c,580)))),C=e=>n.createElement(n.Suspense,{fallback:n.createElement("div",null,"Loading...")},n.createElement(D,e)),P={id:e,getPanelModule:e=>{let{servicesManager:t,commandsManager:r,extensionManager:o}=e;return[{name:"panelSegmentation",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation",component:()=>n.createElement(w,{commandsManager:r,servicesManager:t,extensionManager:o})}]},getViewportModule(e){let{servicesManager:t,extensionManager:r}=e;return[{name:"dicom-seg",component:e=>n.createElement(C,O({servicesManager:t,extensionManager:r},e))}]},getSopClassHandlerModule:g,getHangingProtocolModule:I}})(),l=c.O(l)})()));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ohif/extension-cornerstone-dicom-seg",
|
|
3
|
-
"version": "3.7.0-beta.
|
|
3
|
+
"version": "3.7.0-beta.9",
|
|
4
4
|
"description": "DICOM SEG read workflow",
|
|
5
5
|
"author": "OHIF",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"start": "yarn run dev"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"@ohif/core": "3.7.0-beta.
|
|
35
|
-
"@ohif/extension-cornerstone": "3.7.0-beta.
|
|
36
|
-
"@ohif/extension-default": "3.7.0-beta.
|
|
37
|
-
"@ohif/i18n": "3.7.0-beta.
|
|
34
|
+
"@ohif/core": "3.7.0-beta.9",
|
|
35
|
+
"@ohif/extension-cornerstone": "3.7.0-beta.9",
|
|
36
|
+
"@ohif/extension-default": "3.7.0-beta.9",
|
|
37
|
+
"@ohif/i18n": "3.7.0-beta.9",
|
|
38
38
|
"prop-types": "^15.6.2",
|
|
39
39
|
"react": "^17.0.2",
|
|
40
40
|
"react-dom": "^17.0.2",
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"@babel/runtime": "^7.20.13",
|
|
47
47
|
"react-color": "^2.19.3"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "a34a0b1a3ad4287e0330da5fc3b49739a6d58a92"
|
|
50
50
|
}
|