@ohif/extension-cornerstone-dicom-seg 3.10.0-beta.21 → 3.10.0-beta.23

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("@cornerstonejs/adapters"),require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@cornerstonejs/tools/enums"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),require("@ohif/core"),require("@ohif/extension-default"),require("@ohif/ui"),require("dcmjs")):"function"==typeof define&&define.amd?define(["@cornerstonejs/adapters","@cornerstonejs/core","@cornerstonejs/tools","@cornerstonejs/tools/enums","@kitware/vtk.js/Common/Core/DataArray","@kitware/vtk.js/Common/DataModel/ImageData","@kitware/vtk.js/Filters/General/ImageMarchingSquares","@ohif/core","@ohif/extension-default","@ohif/ui","dcmjs"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-seg"]=t(require("@cornerstonejs/adapters"),require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@cornerstonejs/tools/enums"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),require("@ohif/core"),require("@ohif/extension-default"),require("@ohif/ui"),require("dcmjs")):e["ohif-extension-cornerstone-dicom-seg"]=t(e["@cornerstonejs/adapters"],e["@cornerstonejs/core"],e["@cornerstonejs/tools"],e["@cornerstonejs/tools/enums"],e["@kitware/vtk.js/Common/Core/DataArray"],e["@kitware/vtk.js/Common/DataModel/ImageData"],e["@kitware/vtk.js/Filters/General/ImageMarchingSquares"],e["@ohif/core"],e["@ohif/extension-default"],e["@ohif/ui"],e.dcmjs)}(self,((e,t,n,r,o,a,s,i,c,u,l)=>(()=>{var d,p,f={292:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>R});var r=n(326);n(741);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 a={};function s(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&a[t[0]]||("string"==typeof t[0]&&(a[t[0]]=new Date),o.apply(void 0,t))}var i=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,i(e,n))}function u(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,i(e,r))}function l(e){return l="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},l(e)}function d(e){var t=function(e,t){if("object"!=l(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==l(t)?t:t+""}function p(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}var f=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,m={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},g=function(e){return m[e]};var S={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(f,g)}};var y;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,d(r.key),r)}}var h=(0,r.createContext)(),b=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.usedNamespaces={}}return function(e,t,n){t&&v(e.prototype,t),n&&v(e,n),Object.defineProperty(e,"prototype",{writable:!1})}(e,[{key:"addUsedNamespaces",value:function(e){var t=this;e.forEach((function(e){t.usedNamespaces[e]||(t.usedNamespaces[e]=!0)}))}},{key:"getUsedNamespaces",value:function(){return Object.keys(this.usedNamespaces)}}]),e}();function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function I(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,s,i=[],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)&&(i.push(r.value),i.length!==t);c=!0);}catch(e){u=!0,o=e}finally{try{if(!c&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw o}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return w(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?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 D(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 E(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?D(Object(n),!0).forEach((function(t){p(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):D(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function C(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,o=(0,r.useContext)(h)||{},a=o.i18n,i=o.defaultNS,d=n||a||y;if(d&&!d.reportNamespaces&&(d.reportNamespaces=new b),!d){s("You will need to pass in an i18next instance by using initReactI18next");var p=function(e,t){return"string"==typeof t?t:t&&"object"===l(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},f=[p,{},!1];return f.t=p,f.i18n={},f.ready=!1,f}d.options.react&&void 0!==d.options.react.wait&&s("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var m=E(E(E({},S),d.options.react),t),g=m.useSuspense,v=m.keyPrefix,w=e||i||d.options&&d.options.defaultNS;w="string"==typeof w?[w]:w||["translation"],d.reportNamespaces.addUsedNamespaces&&d.reportNamespaces.addUsedNamespaces(w);var D=(d.isInitialized||d.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,a=t.languages[t.languages.length-1];if("cimode"===r.toLowerCase())return!0;var s=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&&!s(t.isLanguageChangingTo,e)||!t.hasResourceBundle(r,e)&&t.services.backendConnector.backend&&(!t.options.resources||t.options.partialBundledLanguages)&&(!s(r,e)||o&&!s(a,e)))}(e,t,n):(s("i18n.languages were undefined or empty",t.languages),!0)}(e,d,m)}));function C(){return d.getFixedT(t.lng||null,"fallback"===m.nsMode?w:w[0],v)}var O=I((0,r.useState)(C),2),T=O[0],k=O[1],x=w.join();t.lng&&(x="".concat(t.lng).concat(x));var j,N,M,P=(j=x,M=(0,r.useRef)(),(0,r.useEffect)((function(){M.current=N?M.current:j}),[j,N]),M.current),R=(0,r.useRef)(!0);(0,r.useEffect)((function(){var e=m.bindI18n,n=m.bindI18nStore;function r(){R.current&&k(C)}return R.current=!0,D||g||(t.lng?u(d,t.lng,w,(function(){R.current&&k(C)})):c(d,w,(function(){R.current&&k(C)}))),D&&P&&P!==x&&R.current&&k(C),e&&d&&d.on(e,r),n&&d&&d.store.on(n,r),function(){R.current=!1,e&&d&&e.split(" ").forEach((function(e){return d.off(e,r)})),n&&d&&n.split(" ").forEach((function(e){return d.store.off(e,r)}))}}),[d,x]);var U=(0,r.useRef)(!0);(0,r.useEffect)((function(){R.current&&!U.current&&k(C),U.current=!1}),[d,v]);var _=[T,d,D];if(_.t=T,_.i18n=d,_.ready=D,D)return _;if(!D&&!g)return _;throw new Promise((function(e){t.lng?u(d,t.lng,w,(function(){return e()})):c(d,w,(function(){return e()}))}))}var O=n(307);const T=function(e,t,n){const{tools:r}=t.get("cornerstone.overlayViewportTools")??{};return e.createToolGroupAndAddTools(n,r)},k=0,x=5;const j=function({servicesManager:e,segDisplaySet:t,viewportId:n,preHydrateCallbacks:r,hydrateCallback:o}){const{uiViewportDialogService:a}=e.services,s=e._extensionManager._appConfig;return new Promise((async function(e,i){const c=s?.disableConfirmationPrompts?x:await function(e,t){return new Promise((function(n,r){const o="Do you want to open this Segmentation?",a=[{id:"no-hydrate",type:O.ButtonEnums.type.secondary,text:"No",value:k},{id:"yes-hydrate",type:O.ButtonEnums.type.primary,text:"Yes",value:x}],s=t=>{e.hide(),n(t)};e.show({viewportId:t,type:"info",message:o,actions:a,onSubmit:s,onOutsideClick:()=>{e.hide(),n(k)},onKeyPress:e=>{"Enter"===e.key&&s(x)}})}))}(a,n);c===x&&(r?.forEach((e=>{e()})),window.setTimeout((async()=>{const r=await o({segDisplaySet:t,viewportId:n});e(r)}),0))}))};function N({isHydrated:e,onStatusClick:t}){let n=null,o=null;switch(e){case!0:o=()=>r.createElement(O.Icon,{name:"status-alert"}),n=()=>r.createElement("div",null,"This Segmentation is loaded in the segmentation panel");break;case!1:o=()=>r.createElement(O.Icon,{className:"text-aqua-pale",name:"status-untracked"}),n=()=>r.createElement("div",null,"Click LOAD to load segmentation.")}const a=()=>{const{t:n}=C("Common"),a=n("LOAD");return r.createElement("div",{className:"flex h-6 cursor-default text-sm leading-6 text-white"},r.createElement("div",{className:"bg-customgray-100 flex min-w-[45px] items-center rounded-l-xl rounded-r p-1"},r.createElement(o,null),r.createElement("span",{className:"ml-1"},"SEG")),!e&&r.createElement("div",{className:"bg-primary-main hover:bg-primary-light ml-1 cursor-pointer rounded px-1.5 hover:text-black",onMouseUp:t},a))};return r.createElement(r.Fragment,null,n&&r.createElement(O.Tooltip,{content:r.createElement(n,null),position:"bottom-left"},r.createElement(a,null)),!n&&r.createElement(a,null))}var M=n(404);function P(){return P=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},P.apply(null,arguments)}const R=function(e){const{children:t,displaySets:n,viewportOptions:o,servicesManager:a,extensionManager:s,commandsManager:i}=e,{t:c}=C("SEGViewport"),u=o.viewportId,{displaySetService:l,toolGroupService:d,segmentationService:p,customizationService:f,viewportActionCornersService:m}=a.services,g=`SEGToolGroup-${u}`;if(n.length>1)throw new Error("SEG viewport should only have a single display set");const S=n[0],[y,v]=(0,O.useViewportGrid)(),[h,b]=(0,r.useState)(1),[w,I]=(0,r.useState)(S.isHydrated),[D,E]=(0,r.useState)(!S.isLoaded),[k,x]=(0,r.useState)(null),[R,U]=(0,r.useState)({percentComplete:null,totalSegments:null}),_=(0,r.useRef)(null),{viewports:A,activeViewportId:L}=y,G=S.referencedDisplaySetInstanceUID,F=l.getDisplaySetByUID(G),q=function(e,t){const{SharedFunctionalGroupsSequence:n}=t.instance,r=Array.isArray(n)?n[0]:n,{PixelMeasuresSequence:o}=r,a=Array.isArray(o)?o[0]:o,{SpacingBetweenSlices:s,SliceThickness:i}=a,c=e.images[0],u={PatientID:c.PatientID,PatientName:c.PatientName,PatientSex:c.PatientSex,PatientAge:c.PatientAge,SliceThickness:c.SliceThickness||i,StudyDate:c.StudyDate,SeriesDescription:c.SeriesDescription,SeriesInstanceUID:c.SeriesInstanceUID,SeriesNumber:c.SeriesNumber,ManufacturerModelName:c.ManufacturerModelName,SpacingBetweenSlices:c.SpacingBetweenSlices||s};return u}(F,S);_.current={displaySet:F,metadata:q};const V=()=>{x(null)},B=(0,r.useCallback)((()=>{y?.viewports.forEach((({viewportId:e})=>{i.runCommand("storePresentation",{viewportId:e})}))}),[y]),$=(0,r.useCallback)((()=>{const{component:t}=s.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone");return r.createElement(t,P({},e,{displaySets:[S],viewportOptions:{viewportType:o.viewportType,toolGroupId:g,orientation:o.orientation,viewportId:o.viewportId,presentationIds:o.presentationIds},onElementEnabled:t=>{e.onElementEnabled?.(t),(e=>{x(e.detail.element)})(t)},onElementDisabled:V}))}),[u,S,g]),H=(0,r.useCallback)((e=>{const t=S.displaySetInstanceUID,n=p.getSegmentation(t),{segments:r}=n,o=Object.keys(r).length;let a=h+e;a>o-1?a=1:0===a&&(a=o-1),p.jumpToSegmentCenter(t,a,u),b(a)}),[h]),z=(0,r.useCallback)((()=>{i.runCommand("updateStoredSegmentationPresentation",{displaySet:S,type:M.SegmentationRepresentations.Labelmap}),i.runCommand("updateStoredPositionPresentation",{viewportId:u,displaySetInstanceUID:F.displaySetInstanceUID}),v.setDisplaySetsForViewport({viewportId:u,displaySetInstanceUIDs:[F.displaySetInstanceUID]})}),[i,u,F,S]);(0,r.useEffect)((()=>{D||j({servicesManager:a,viewportId:u,segDisplaySet:S,preHydrateCallbacks:[B],hydrateCallback:z}).then((e=>{e&&I(!0)}))}),[a,u,S,D,z]),(0,r.useEffect)((()=>{p.clearSegmentationRepresentations(u);const{unsubscribe:e}=p.subscribe(p.EVENTS.SEGMENTATION_LOADING_COMPLETE,(e=>{e.segDisplaySet.displaySetInstanceUID===S.displaySetInstanceUID&&E(!1)}));return()=>{e()}}),[S]),(0,r.useEffect)((()=>{const{unsubscribe:e}=p.subscribe(p.EVENTS.SEGMENT_LOADING_COMPLETE,(({percentComplete:e,numSegments:t})=>{U({percentComplete:e,totalSegments:t})}));return()=>{e()}}),[S]),(0,r.useEffect)((()=>{const e=l.subscribe(l.EVENTS.DISPLAY_SETS_REMOVED,(({displaySetInstanceUIDs:e})=>{const t=A.get(L);e.includes(t.displaySetInstanceUID)&&v.setDisplaySetsForViewport({viewportId:L,displaySetInstanceUIDs:[]})}));return()=>{e.unsubscribe()}}),[]),(0,r.useEffect)((()=>{let e=d.getToolGroup(g);if(!e)return i.runCommand("updateStoredSegmentationPresentation",{displaySet:S,type:M.SegmentationRepresentations.Labelmap}),p.clearSegmentationRepresentations(u),e=T(d,f,g),()=>{p.clearSegmentationRepresentations(u),d.destroyToolGroup(g)}}),[]);const Y=(0,r.useCallback)((async()=>{B(),z()}),[B,z]);(0,r.useEffect)((()=>{m.addComponents([{viewportId:u,id:"viewportStatusComponent",component:N({isHydrated:w,onStatusClick:Y}),indexPriority:-100,location:m.LOCATIONS.topLeft},{viewportId:u,id:"viewportActionArrowsComponent",component:r.createElement(O.ViewportActionArrows,{key:"actionArrows",onArrowsClick:H,className:u===L?"visible":"invisible group-hover/pane:visible"}),indexPriority:0,location:m.LOCATIONS.topRight}])}),[L,w,H,Y,m,u]);let J=null;return _.current&&F.displaySetInstanceUID===_.current.displaySet.displaySetInstanceUID?(t&&t.length&&(J=t.map(((e,t)=>e&&r.cloneElement(e,{viewportId:u,key:t})))),r.createElement(r.Fragment,null,r.createElement("div",{className:"relative flex h-full w-full flex-row overflow-hidden"},D&&r.createElement(O.LoadingIndicatorTotalPercent,{className:"h-full w-full",totalNumbers:R.totalSegments,percentComplete:R.percentComplete,loadingText:"Loading SEG..."}),$(),J))):null}},249:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),c=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,S={};function y(e,t,n){this.props=e,this.context=t,this.refs=S,this.updater=n||m}function v(){}function h(e,t,n){this.props=e,this.context=t,this.refs=S,this.updater=n||m}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=y.prototype;var b=h.prototype=new v;b.constructor=h,g(b,y.prototype),b.isPureReactComponent=!0;var w=Array.isArray,I=Object.prototype.hasOwnProperty,D={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function C(e,t,r){var o,a={},s=null,i=null;if(null!=t)for(o in void 0!==t.ref&&(i=t.ref),void 0!==t.key&&(s=""+t.key),t)I.call(t,o)&&!E.hasOwnProperty(o)&&(a[o]=t[o]);var c=arguments.length-2;if(1===c)a.children=r;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(o in c=e.defaultProps)void 0===a[o]&&(a[o]=c[o]);return{$$typeof:n,type:e,key:s,ref:i,props:a,_owner:D.current}}function O(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var T=/\/+/g;function k(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 x(e,t,o,a,s){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var c=!1;if(null===e)c=!0;else switch(i){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case n:case r:c=!0}}if(c)return s=s(c=e),e=""===a?"."+k(c,0):a,w(s)?(o="",null!=e&&(o=e.replace(T,"$&/")+"/"),x(s,t,o,"",(function(e){return e}))):null!=s&&(O(s)&&(s=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(s,o+(!s.key||c&&c.key===s.key?"":(""+s.key).replace(T,"$&/")+"/")+e)),t.push(s)),1;if(c=0,a=""===a?".":a+":",w(e))for(var u=0;u<e.length;u++){var l=a+k(i=e[u],u);c+=x(i,t,o,l,s)}else if(l=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof l)for(e=l.call(e),u=0;!(i=e.next()).done;)c+=x(i=i.value,t,o,l=a+k(i,u++),s);else if("object"===i)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return c}function j(e,t,n){if(null==e)return e;var r=[],o=0;return x(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function N(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var M={current:null},P={transition:null},R={ReactCurrentDispatcher:M,ReactCurrentBatchConfig:P,ReactCurrentOwner:D};function U(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:j,forEach:function(e,t,n){j(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return j(e,(function(){t++})),t},toArray:function(e){return j(e,(function(e){return e}))||[]},only:function(e){if(!O(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=y,t.Fragment=o,t.Profiler=s,t.PureComponent=h,t.StrictMode=a,t.Suspense=l,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=R,t.act=U,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=g({},e.props),a=e.key,s=e.ref,i=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,i=D.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(u in t)I.call(t,u)&&!E.hasOwnProperty(u)&&(o[u]=void 0===t[u]&&void 0!==c?c[u]:t[u])}var u=arguments.length-2;if(1===u)o.children=r;else if(1<u){c=Array(u);for(var l=0;l<u;l++)c[l]=arguments[l+2];o.children=c}return{$$typeof:n,type:e.type,key:a,ref:s,props:o,_owner:i}},t.createContext=function(e){return(e={$$typeof:c,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=C,t.createFactory=function(e){var t=C.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:u,render:e}},t.isValidElement=O,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:N}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=P.transition;P.transition={};try{e()}finally{P.transition=t}},t.unstable_act=U,t.useCallback=function(e,t){return M.current.useCallback(e,t)},t.useContext=function(e){return M.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return M.current.useDeferredValue(e)},t.useEffect=function(e,t){return M.current.useEffect(e,t)},t.useId=function(){return M.current.useId()},t.useImperativeHandle=function(e,t,n){return M.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return M.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return M.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return M.current.useMemo(e,t)},t.useReducer=function(e,t,n){return M.current.useReducer(e,t,n)},t.useRef=function(e){return M.current.useRef(e)},t.useState=function(e){return M.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return M.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return M.current.useTransition()},t.version="18.3.1"},326:(e,t,n)=>{"use strict";e.exports=n(249)},741:e=>{e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},142:t=>{"use strict";t.exports=e},557:e=>{"use strict";e.exports=t},713:e=>{"use strict";e.exports=n},404:e=>{"use strict";e.exports=r},670:e=>{"use strict";e.exports=o},322:e=>{"use strict";e.exports=a},934:e=>{"use strict";e.exports=s},2:e=>{"use strict";e.exports=i},438:e=>{"use strict";e.exports=c},307:e=>{"use strict";e.exports=u},111:e=>{"use strict";e.exports=l}},m={};function g(e){var t=m[e];if(void 0!==t)return t.exports;var n=m[e]={exports:{}};return f[e](n,n.exports,g),n.exports}g.m=f,d=[],g.O=(e,t,n,r)=>{if(!t){var o=1/0;for(c=0;c<d.length;c++){t=d[c][0],n=d[c][1],r=d[c][2];for(var a=!0,s=0;s<t.length;s++)(!1&r||o>=r)&&Object.keys(g.O).every((e=>g.O[e](t[s])))?t.splice(s--,1):(a=!1,r<o&&(o=r));if(a){d.splice(c--,1);var i=n();void 0!==i&&(e=i)}}return e}r=r||0;for(var c=d.length;c>0&&d[c-1][2]>r;c--)d[c]=d[c-1];d[c]=[t,n,r]},g.F={},g.E=e=>{Object.keys(g.F).map((t=>{g.F[t](e)}))},g.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return g.d(t,{a:t}),t},g.d=(e,t)=>{for(var n in t)g.o(t,n)&&!g.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},g.miniCssF=e=>{},g.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),g.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},g.p="/",p={524:0},g.F.j=e=>{if(!g.o(p,e)||void 0===p[e]){p[e]=null;var t=document.createElement("link");g.nc&&t.setAttribute("nonce",g.nc),t.rel="prefetch",t.as="script",t.href=g.p+g.u(e),document.head.appendChild(t)}},g.O.j=e=>0===p[e],g.O(0,[524],(()=>{g.E(524)}),5);var S={};return(()=>{"use strict";g.r(S),g.d(S,{default:()=>P});const e=JSON.parse('{"UU":"@ohif/extension-cornerstone-dicom-seg"}').UU,t=`${e}.sopClassHandlerModule.dicom-seg`;var n=g(326),r=g(2),o=g(557),a=g(713),s=g(142),i=g(111),c=g.n(i);const u=["1.2.840.10008.5.1.4.1.1.66.4"],l={};function d(e,n,i){const d=e[0],{StudyInstanceUID:p,SeriesInstanceUID:f,SOPInstanceUID:m,SeriesDescription:g,SeriesNumber:S,SeriesDate:y,SOPClassUID:v,wadoRoot:h,wadoUri:b,wadoUriRoot:w}=d,I={Modality:"SEG",loading:!1,isReconstructable:!0,displaySetInstanceUID:r.utils.guid(),SeriesDescription:g,SeriesNumber:S,SeriesDate:y,SOPInstanceUID:m,SeriesInstanceUID:f,StudyInstanceUID:p,SOPClassHandlerId:t,SOPClassUID:v,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,segments:{},sopClassUids:u,instance:d,instances:[d],wadoRoot:h,wadoUriRoot:w,wadoUri:b,isOverlayDisplaySet:!0},D=d.ReferencedSeriesSequence;if(!D)return void console.error("ReferencedSeriesSequence is missing for the SEG");const E=D[0]||D;I.referencedImages=d.ReferencedSeriesSequence.ReferencedInstanceSequence,I.referencedSeriesInstanceUID=E.SeriesInstanceUID;const{displaySetService:C}=n.services,O=C.getDisplaySetsForSeries(I.referencedSeriesInstanceUID)[0];if(O)I.referencedDisplaySetInstanceUID=O.displaySetInstanceUID;else{const{unsubscribe:e}=C.subscribe(C.EVENTS.DISPLAY_SETS_ADDED,(({displaySetsAdded:t})=>{const n=t[0];n.SeriesInstanceUID===I.referencedSeriesInstanceUID&&(I.referencedDisplaySetInstanceUID=n.displaySetInstanceUID,e())}))}return I.load=async({headers:e})=>await function(e,t,n,r){const{SOPInstanceUID:i}=e,{segmentationService:u}=t.services;if((e.loading||e.isLoaded)&&l[i]&&function(e){return a.segmentation.state.getSegmentation(e.displaySetInstanceUID)}(e))return l[i];return e.loading=!0,l[i]=new Promise((async(i,l)=>{if(!e.segments||0===Object.keys(e.segments).length)try{await async function({extensionManager:e,servicesManager:t,segDisplaySet:n,headers:r}){const i=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),{segmentationService:u,uiNotificationService:l}=t.services,{dicomLoaderService:d}=i.exports,p=await d.findDicomDataPromise(n,null,r),f=t.services.displaySetService.getDisplaySetByUID(n.referencedDisplaySetInstanceUID);if(!f)throw new Error("referencedDisplaySet is missing for SEG");const{instances:m}=f,g=m.map((({imageId:e})=>e)),S=.001,y=!0;o.eventTarget.addEventListener(s.Enums.Events.SEGMENTATION_LOAD_PROGRESS,(e=>{const{percentComplete:t}=e.detail;u._broadcastEvent(u.EVENTS.SEGMENT_LOADING_COMPLETE,{percentComplete:t})}));const v=await s.adaptersSEG.Cornerstone3D.Segmentation.generateToolState(g,p,o.metaData,{skipOverlapping:y,tolerance:S,eventTarget:o.eventTarget,triggerEvent:o.triggerEvent});let h=!0;v.segMetadata.data.forEach(((e,t)=>{var n;t>0&&(e.rgba=e.RecommendedDisplayCIELabValue,e.rgba?e.rgba=(n=e.rgba,c().data.Colors.dicomlab2RGB(n).map((e=>Math.round(255*e)))):(h=!1,e.rgba=a.CONSTANTS.COLOR_LUT[t%a.CONSTANTS.COLOR_LUT.length]))})),v.overlappingSegments&&l.show({title:"Overlapping Segments",message:"Unsupported overlapping segments detected, segmentation rendering results may be incorrect.",type:"warning"});h||l.show({title:"DICOM SEG import",message:"RecommendedDisplayCIELabValue not found for one or more segments. The default color was used instead.",type:"warning",duration:5e3});Object.assign(n,v)}({extensionManager:n,servicesManager:t,segDisplaySet:e,headers:r})}catch(t){return e.loading=!1,l(t)}u.createSegmentationForSEGDisplaySet(e).then((()=>{e.loading=!1,i()})).catch((t=>{e.loading=!1,l(t)}))})),l[i]}(I,n,i,e),[I]}const p=function({servicesManager:e,extensionManager:t}){return[{name:"dicom-seg",sopClassUids:u,getDisplaySetsFromSeries:n=>d(n,e,t)}]},f={id:"@ohif/seg",name:"Segmentations",protocolMatchingRules:[],toolGroupIds:["default"],numberOfPriorsReferenced:0,defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0,syncGroups:[{type:"hydrateseg",id:"sameFORId",source:!0,target:!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,syncGroups:[{type:"hydrateseg",id:"sameFORId",source:!0,target:!0}]},displaySets:[{id:"segDisplaySetId"}]}]}]};const m=function(){return[{name:f.id,protocol:f}]};var y=g(438),v=g(934),h=g.n(v),b=g(670),w=g.n(b),I=g(322),D=g.n(I);const{segmentation:E}=a.utilities,{datasetToBlob:C}=c().data,{Cornerstone3D:{Segmentation:{generateSegmentation:O}}}=s.adaptersSEG,{Cornerstone3D:{RTSS:{generateRTSSFromSegmentations:T}}}=s.adaptersRT,{downloadDICOMData:k}=s.helpers,x=({servicesManager:e,extensionManager:t})=>{const{segmentationService:n,uiDialogService:s,displaySetService:i,viewportGridService:u,toolGroupService:l}=e.services,d={loadSegmentationsForViewport:async({segmentations:e,viewportId:t})=>{const r=(({viewportId:e,viewportGridService:t})=>{const{viewports:n,activeViewportId:r}=t.getState(),o=e||r;return n.get(o)})({viewportId:t,viewportGridService:u}),o=r.displaySetInstanceUIDs[0],a=e[0],s=a.segmentationId,c=a.config.label,l=a.config.segments,d=i.getDisplaySetByUID(o);return await n.createLabelmapForDisplaySet(d,{segmentationId:s,segments:l,label:c}),n.addOrUpdateSegmentation(a),await n.addSegmentationRepresentation(r.viewportId,{segmentationId:s}),s},generateSegmentation:({segmentationId:e,options:t={}})=>{const r=a.segmentation.state.getSegmentation(e),{imageIds:s}=r.representationData.Labelmap,i=s.map((e=>o.cache.getImage(e))),u=i.map((e=>o.cache.getImage(e.referencedImageId))),l=[];let d=0;for(const e of i){const t=new Set,n=e.getPixelData(),{rows:r,columns:o}=e;for(let e=0;e<n.length;e++){const r=n[e];0!==r&&t.add(r)}l[d++]={segmentsOnLabelmap:Array.from(t),pixelData:n,rows:r,columns:o}}const p=l.map((e=>e.segmentsOnLabelmap)),f={segmentsOnLabelmap:Array.from(new Set(p.flat())),metadata:[],labelmaps2D:l},m=n.getSegmentation(e),g=n.getRepresentationsForSegmentation(e);Object.entries(m.segments).forEach((([t,r])=>{if(!r)return;const{label:o}=r,a=g[0],s=n.getSegmentColor(a.viewportId,e,r.segmentIndex),i=c().data.Colors.rgb2DICOMLAB(s.slice(0,3).map((e=>e/255))).map((e=>Math.round(e))),u={SegmentNumber:t.toString(),SegmentLabel:o,SegmentAlgorithmType:r?.algorithmType||"MANUAL",SegmentAlgorithmName:r?.algorithmName||"OHIF Brush",RecommendedDisplayCIELabValue:i,SegmentedPropertyCategoryCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"},SegmentedPropertyTypeCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"}};f.metadata[t]=u}));return O(u,f,o.metaData,t)},downloadSegmentation:({segmentationId:e})=>{const t=n.getSegmentation(e),r=d.generateSegmentation({segmentationId:e});k(r.dataset,`${t.label}`)},storeSegmentation:async({segmentationId:e,dataSource:o})=>{const a=await(0,y.createReportDialogPrompt)(s,{extensionManager:t});if(1!==a.action&&!a.value)return;const i=n.getSegmentation(e);if(!i)throw new Error("No segmentation found");const{label:c}=i,u=a.value||c||"Research Derived Series",l=d.generateSegmentation({segmentationId:e,options:{SeriesDescription:u}});if(!l||!l.dataset)throw new Error("Error during segmentation generation");const{dataset:p}=l;return await o.store.dicom(p),p.wadoRoot=o.getConfig().wadoRoot,r.DicomMetadataStore.addInstances([p],!0),p},downloadRTSS:({segmentationId:e})=>{const t=n.getSegmentation(e),s={vtkImageMarchingSquares:h(),vtkDataArray:w(),vtkImageData:D()},i=T(t,r.classes.MetadataProvider,r.DicomMetadataStore,o.cache,a.Enums,s);try{const e=C(i),t=URL.createObjectURL(e);window.location.assign(t)}catch(e){console.warn(e)}},setBrushSize:({value:e,toolNames:t})=>{const n=Number(e);l.getToolGroupIds()?.forEach((e=>{0===t?.length?E.setBrushSizeForToolGroup(e,n):t?.forEach((t=>{E.setBrushSizeForToolGroup(e,n,t)}))}))},setThresholdRange:({value:e,toolNames:t=["ThresholdCircularBrush","ThresholdSphereBrush"]})=>{l.getToolGroupIds()?.forEach((n=>{const r=l.getToolGroup(n);t?.forEach((t=>{r.setToolConfiguration(t,{strategySpecificConfiguration:{THRESHOLD:{threshold:e}}})}))}))}},p={loadSegmentationDisplaySetsForViewport:{commandFn:d.loadSegmentationDisplaySetsForViewport},loadSegmentationsForViewport:{commandFn:d.loadSegmentationsForViewport},generateSegmentation:{commandFn:d.generateSegmentation},downloadSegmentation:{commandFn:d.downloadSegmentation},storeSegmentation:{commandFn:d.storeSegmentation},downloadRTSS:{commandFn:d.downloadRTSS},setBrushSize:{commandFn:d.setBrushSize},setThresholdRange:{commandFn:d.setThresholdRange}};return{actions:d,definitions:p,defaultContext:"SEGMENTATION"}};function j(){return j=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},j.apply(null,arguments)}const N=n.lazy((()=>Promise.resolve().then(g.bind(g,292)))),M=e=>n.createElement(n.Suspense,{fallback:n.createElement("div",null,"Loading...")},n.createElement(N,e)),P={id:e,getCommandsModule:x,getToolbarModule:function({servicesManager:e}){const{segmentationService:t,toolbarService:n,toolGroupService:r}=e.services;return[{name:"evaluate.cornerstone.segmentation",evaluate:({viewportId:e,button:o,toolNames:a,disabledText:s})=>{const i=t.getSegmentationRepresentations(e);if(!i?.length)return{disabled:!0,className:"!text-common-bright !bg-black opacity-50",disabledText:s??"No segmentations available"};const c=r.getToolGroupForViewport(e);if(!c)return{disabled:!0,className:"!text-common-bright ohif-disabled",disabledText:s??"Not available on the current viewport"};const u=n.getToolNameForButton(o);if(!c.hasTool(u)&&!a)return{disabled:!0,className:"!text-common-bright ohif-disabled",disabledText:s??"Not available on the current viewport"};const l=a?a.includes(c.getActivePrimaryMouseButtonTool()):c.getActivePrimaryMouseButtonTool()===u;return{disabled:!1,className:l?"!text-black !bg-primary-light hover:bg-primary-light hover-text-black hover:cursor-pointer":"!text-common-bright !bg-black hover:bg-primary-light hover:cursor-pointer hover:text-black",isActive:l}}}]},getViewportModule:({servicesManager:e,extensionManager:t,commandsManager:r})=>[{name:"dicom-seg",component:o=>n.createElement(M,j({servicesManager:e,extensionManager:t,commandsManager:r},o))}],getSopClassHandlerModule:p,getHangingProtocolModule:m}})(),S=g.O(S)})()));
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@cornerstonejs/adapters"),require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@cornerstonejs/tools/enums"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),require("@ohif/core"),require("@ohif/extension-cornerstone"),require("@ohif/extension-default"),require("@ohif/ui"),require("dcmjs")):"function"==typeof define&&define.amd?define(["@cornerstonejs/adapters","@cornerstonejs/core","@cornerstonejs/tools","@cornerstonejs/tools/enums","@kitware/vtk.js/Common/Core/DataArray","@kitware/vtk.js/Common/DataModel/ImageData","@kitware/vtk.js/Filters/General/ImageMarchingSquares","@ohif/core","@ohif/extension-cornerstone","@ohif/extension-default","@ohif/ui","dcmjs"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-seg"]=t(require("@cornerstonejs/adapters"),require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@cornerstonejs/tools/enums"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),require("@ohif/core"),require("@ohif/extension-cornerstone"),require("@ohif/extension-default"),require("@ohif/ui"),require("dcmjs")):e["ohif-extension-cornerstone-dicom-seg"]=t(e["@cornerstonejs/adapters"],e["@cornerstonejs/core"],e["@cornerstonejs/tools"],e["@cornerstonejs/tools/enums"],e["@kitware/vtk.js/Common/Core/DataArray"],e["@kitware/vtk.js/Common/DataModel/ImageData"],e["@kitware/vtk.js/Filters/General/ImageMarchingSquares"],e["@ohif/core"],e["@ohif/extension-cornerstone"],e["@ohif/extension-default"],e["@ohif/ui"],e.dcmjs)}(self,((e,t,n,r,o,a,s,i,c,u,l,d)=>(()=>{var p,f,m={292:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>U});var r=n(326);n(741);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 a={};function s(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&a[t[0]]||("string"==typeof t[0]&&(a[t[0]]=new Date),o.apply(void 0,t))}var i=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,i(e,n))}function u(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,i(e,r))}function l(e){return l="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},l(e)}function d(e){var t=function(e,t){if("object"!=l(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==l(t)?t:t+""}function p(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}var f=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,m={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},g=function(e){return m[e]};var S={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(f,g)}};var y;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,d(r.key),r)}}var h=(0,r.createContext)(),b=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.usedNamespaces={}}return function(e,t,n){t&&v(e.prototype,t),n&&v(e,n),Object.defineProperty(e,"prototype",{writable:!1})}(e,[{key:"addUsedNamespaces",value:function(e){var t=this;e.forEach((function(e){t.usedNamespaces[e]||(t.usedNamespaces[e]=!0)}))}},{key:"getUsedNamespaces",value:function(){return Object.keys(this.usedNamespaces)}}]),e}();function I(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function w(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,s,i=[],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)&&(i.push(r.value),i.length!==t);c=!0);}catch(e){u=!0,o=e}finally{try{if(!c&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw o}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return I(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?I(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 D(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 E(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?D(Object(n),!0).forEach((function(t){p(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):D(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function C(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,o=(0,r.useContext)(h)||{},a=o.i18n,i=o.defaultNS,d=n||a||y;if(d&&!d.reportNamespaces&&(d.reportNamespaces=new b),!d){s("You will need to pass in an i18next instance by using initReactI18next");var p=function(e,t){return"string"==typeof t?t:t&&"object"===l(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},f=[p,{},!1];return f.t=p,f.i18n={},f.ready=!1,f}d.options.react&&void 0!==d.options.react.wait&&s("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var m=E(E(E({},S),d.options.react),t),g=m.useSuspense,v=m.keyPrefix,I=e||i||d.options&&d.options.defaultNS;I="string"==typeof I?[I]:I||["translation"],d.reportNamespaces.addUsedNamespaces&&d.reportNamespaces.addUsedNamespaces(I);var D=(d.isInitialized||d.initializedStoreOnce)&&I.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,a=t.languages[t.languages.length-1];if("cimode"===r.toLowerCase())return!0;var s=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&&!s(t.isLanguageChangingTo,e)||!t.hasResourceBundle(r,e)&&t.services.backendConnector.backend&&(!t.options.resources||t.options.partialBundledLanguages)&&(!s(r,e)||o&&!s(a,e)))}(e,t,n):(s("i18n.languages were undefined or empty",t.languages),!0)}(e,d,m)}));function C(){return d.getFixedT(t.lng||null,"fallback"===m.nsMode?I:I[0],v)}var O=w((0,r.useState)(C),2),T=O[0],x=O[1],k=I.join();t.lng&&(k="".concat(t.lng).concat(k));var j,N,M,P=(j=k,M=(0,r.useRef)(),(0,r.useEffect)((function(){M.current=N?M.current:j}),[j,N]),M.current),R=(0,r.useRef)(!0);(0,r.useEffect)((function(){var e=m.bindI18n,n=m.bindI18nStore;function r(){R.current&&x(C)}return R.current=!0,D||g||(t.lng?u(d,t.lng,I,(function(){R.current&&x(C)})):c(d,I,(function(){R.current&&x(C)}))),D&&P&&P!==k&&R.current&&x(C),e&&d&&d.on(e,r),n&&d&&d.store.on(n,r),function(){R.current=!1,e&&d&&e.split(" ").forEach((function(e){return d.off(e,r)})),n&&d&&n.split(" ").forEach((function(e){return d.store.off(e,r)}))}}),[d,k]);var U=(0,r.useRef)(!0);(0,r.useEffect)((function(){R.current&&!U.current&&x(C),U.current=!1}),[d,v]);var _=[T,d,D];if(_.t=T,_.i18n=d,_.ready=D,D)return _;if(!D&&!g)return _;throw new Promise((function(e){t.lng?u(d,t.lng,I,(function(){return e()})):c(d,I,(function(){return e()}))}))}var O=n(307);const T=function(e,t,n){const{tools:r}=t.get("cornerstone.overlayViewportTools")??{};return e.createToolGroupAndAddTools(n,r)},x=0,k=5;const j=function({servicesManager:e,segDisplaySet:t,viewportId:n,preHydrateCallbacks:r,hydrateCallback:o}){const{uiViewportDialogService:a}=e.services,s=e._extensionManager._appConfig;return new Promise((async function(e,i){const c=s?.disableConfirmationPrompts?k:await function(e,t){return new Promise((function(n,r){const o="Do you want to open this Segmentation?",a=[{id:"no-hydrate",type:O.ButtonEnums.type.secondary,text:"No",value:x},{id:"yes-hydrate",type:O.ButtonEnums.type.primary,text:"Yes",value:k}],s=t=>{e.hide(),n(t)};e.show({viewportId:t,type:"info",message:o,actions:a,onSubmit:s,onOutsideClick:()=>{e.hide(),n(x)},onKeyPress:e=>{"Enter"===e.key&&s(k)}})}))}(a,n);c===k&&(r?.forEach((e=>{e()})),window.setTimeout((async()=>{const r=await o({segDisplaySet:t,viewportId:n});e(r)}),0))}))};function N({isHydrated:e,onStatusClick:t}){let n=null,o=null;switch(e){case!0:o=()=>r.createElement(O.Icon,{name:"status-alert"}),n=()=>r.createElement("div",null,"This Segmentation is loaded in the segmentation panel");break;case!1:o=()=>r.createElement(O.Icon,{className:"text-aqua-pale",name:"status-untracked"}),n=()=>r.createElement("div",null,"Click LOAD to load segmentation.")}const a=()=>{const{t:n}=C("Common"),a=n("LOAD");return r.createElement("div",{className:"flex h-6 cursor-default text-sm leading-6 text-white"},r.createElement("div",{className:"bg-customgray-100 flex min-w-[45px] items-center rounded-l-xl rounded-r p-1"},r.createElement(o,null),r.createElement("span",{className:"ml-1"},"SEG")),!e&&r.createElement("div",{className:"bg-primary-main hover:bg-primary-light ml-1 cursor-pointer rounded px-1.5 hover:text-black",onMouseUp:t},a))};return r.createElement(r.Fragment,null,n&&r.createElement(O.Tooltip,{content:r.createElement(n,null),position:"bottom-left"},r.createElement(a,null)),!n&&r.createElement(a,null))}var M=n(669),P=n(404);function R(){return R=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},R.apply(null,arguments)}const U=function(e){const{children:t,displaySets:n,viewportOptions:o,servicesManager:a,extensionManager:s,commandsManager:i}=e,{t:c}=C("SEGViewport"),u=o.viewportId,{displaySetService:l,toolGroupService:d,segmentationService:p,customizationService:f,viewportActionCornersService:m}=a.services,g=`SEGToolGroup-${u}`;if(n.length>1)throw new Error("SEG viewport should only have a single display set");const S=n[0],[y,v]=(0,O.useViewportGrid)(),[h,b]=(0,r.useState)(1),{setPositionPresentation:I}=(0,M.usePositionPresentationStore)(),[w,D]=(0,r.useState)(S.isHydrated),[E,x]=(0,r.useState)(!S.isLoaded),[k,U]=(0,r.useState)(null),[_,A]=(0,r.useState)({percentComplete:null,totalSegments:null}),L=(0,r.useRef)(null),{viewports:G,activeViewportId:F}=y,q=S.referencedDisplaySetInstanceUID,V=l.getDisplaySetByUID(q),B=function(e,t){const{SharedFunctionalGroupsSequence:n}=t.instance,r=Array.isArray(n)?n[0]:n,{PixelMeasuresSequence:o}=r,a=Array.isArray(o)?o[0]:o,{SpacingBetweenSlices:s,SliceThickness:i}=a,c=e.images[0],u={PatientID:c.PatientID,PatientName:c.PatientName,PatientSex:c.PatientSex,PatientAge:c.PatientAge,SliceThickness:c.SliceThickness||i,StudyDate:c.StudyDate,SeriesDescription:c.SeriesDescription,SeriesInstanceUID:c.SeriesInstanceUID,SeriesNumber:c.SeriesNumber,ManufacturerModelName:c.ManufacturerModelName,SpacingBetweenSlices:c.SpacingBetweenSlices||s};return u}(V,S);L.current={displaySet:V,metadata:B};const $=()=>{U(null)},H=(0,r.useCallback)((()=>{y?.viewports.forEach((({viewportId:e})=>{i.runCommand("storePresentation",{viewportId:e})}))}),[y]),z=(0,r.useCallback)((()=>{const{component:t}=s.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone");return r.createElement(t,R({},e,{displaySets:[S],viewportOptions:{viewportType:o.viewportType,toolGroupId:g,orientation:o.orientation,viewportId:o.viewportId,presentationIds:o.presentationIds},onElementEnabled:t=>{e.onElementEnabled?.(t),(e=>{U(e.detail.element)})(t)},onElementDisabled:$}))}),[u,S,g]),Y=(0,r.useCallback)((e=>{const t=S.displaySetInstanceUID,n=p.getSegmentation(t),{segments:r}=n,o=Object.keys(r).length;let a=h+e;a>o-1?a=1:0===a&&(a=o-1),p.jumpToSegmentCenter(t,a,u),b(a)}),[h]),J=(0,r.useCallback)((()=>{i.runCommand("updateStoredSegmentationPresentation",{displaySet:S,type:P.SegmentationRepresentations.Labelmap}),i.runCommand("updateStoredPositionPresentation",{viewportId:u,displaySetInstanceUID:V.displaySetInstanceUID}),v.setDisplaySetsForViewport({viewportId:u,displaySetInstanceUIDs:[V.displaySetInstanceUID]})}),[i,u,V,S]);(0,r.useEffect)((()=>{E||j({servicesManager:a,viewportId:u,segDisplaySet:S,preHydrateCallbacks:[H],hydrateCallback:J}).then((e=>{e&&D(!0)}))}),[a,u,S,E,J]),(0,r.useEffect)((()=>{p.clearSegmentationRepresentations(u);const{unsubscribe:e}=p.subscribe(p.EVENTS.SEGMENTATION_LOADING_COMPLETE,(e=>{if(e.segDisplaySet.displaySetInstanceUID===S.displaySetInstanceUID&&x(!1),S?.firstSegmentedSliceImageId&&o?.presentationIds){const{firstSegmentedSliceImageId:e}=S,{presentationIds:t}=o;I(t.positionPresentationId,{viewReference:{referencedImageId:e}})}}));return()=>{e()}}),[S]),(0,r.useEffect)((()=>{const{unsubscribe:e}=p.subscribe(p.EVENTS.SEGMENT_LOADING_COMPLETE,(({percentComplete:e,numSegments:t})=>{A({percentComplete:e,totalSegments:t})}));return()=>{e()}}),[S]),(0,r.useEffect)((()=>{const e=l.subscribe(l.EVENTS.DISPLAY_SETS_REMOVED,(({displaySetInstanceUIDs:e})=>{const t=G.get(F);e.includes(t.displaySetInstanceUID)&&v.setDisplaySetsForViewport({viewportId:F,displaySetInstanceUIDs:[]})}));return()=>{e.unsubscribe()}}),[]),(0,r.useEffect)((()=>{let e=d.getToolGroup(g);if(!e)return i.runCommand("updateStoredSegmentationPresentation",{displaySet:S,type:P.SegmentationRepresentations.Labelmap}),p.clearSegmentationRepresentations(u),e=T(d,f,g),()=>{p.clearSegmentationRepresentations(u),d.destroyToolGroup(g)}}),[]);const K=(0,r.useCallback)((async()=>{H(),J()}),[H,J]);(0,r.useEffect)((()=>{m.addComponents([{viewportId:u,id:"viewportStatusComponent",component:N({isHydrated:w,onStatusClick:K}),indexPriority:-100,location:m.LOCATIONS.topLeft},{viewportId:u,id:"viewportActionArrowsComponent",component:r.createElement(O.ViewportActionArrows,{key:"actionArrows",onArrowsClick:Y,className:u===F?"visible":"invisible group-hover/pane:visible"}),indexPriority:0,location:m.LOCATIONS.topRight}])}),[F,w,Y,K,m,u]);let W=null;return L.current&&V.displaySetInstanceUID===L.current.displaySet.displaySetInstanceUID?(t&&t.length&&(W=t.map(((e,t)=>e&&r.cloneElement(e,{viewportId:u,key:t})))),r.createElement(r.Fragment,null,r.createElement("div",{className:"relative flex h-full w-full flex-row overflow-hidden"},E&&r.createElement(O.LoadingIndicatorTotalPercent,{className:"h-full w-full",totalNumbers:_.totalSegments,percentComplete:_.percentComplete,loadingText:"Loading SEG..."}),z(),W))):null}},249:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),c=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,S={};function y(e,t,n){this.props=e,this.context=t,this.refs=S,this.updater=n||m}function v(){}function h(e,t,n){this.props=e,this.context=t,this.refs=S,this.updater=n||m}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=y.prototype;var b=h.prototype=new v;b.constructor=h,g(b,y.prototype),b.isPureReactComponent=!0;var I=Array.isArray,w=Object.prototype.hasOwnProperty,D={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function C(e,t,r){var o,a={},s=null,i=null;if(null!=t)for(o in void 0!==t.ref&&(i=t.ref),void 0!==t.key&&(s=""+t.key),t)w.call(t,o)&&!E.hasOwnProperty(o)&&(a[o]=t[o]);var c=arguments.length-2;if(1===c)a.children=r;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(o in c=e.defaultProps)void 0===a[o]&&(a[o]=c[o]);return{$$typeof:n,type:e,key:s,ref:i,props:a,_owner:D.current}}function O(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var T=/\/+/g;function x(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 k(e,t,o,a,s){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var c=!1;if(null===e)c=!0;else switch(i){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case n:case r:c=!0}}if(c)return s=s(c=e),e=""===a?"."+x(c,0):a,I(s)?(o="",null!=e&&(o=e.replace(T,"$&/")+"/"),k(s,t,o,"",(function(e){return e}))):null!=s&&(O(s)&&(s=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(s,o+(!s.key||c&&c.key===s.key?"":(""+s.key).replace(T,"$&/")+"/")+e)),t.push(s)),1;if(c=0,a=""===a?".":a+":",I(e))for(var u=0;u<e.length;u++){var l=a+x(i=e[u],u);c+=k(i,t,o,l,s)}else if(l=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof l)for(e=l.call(e),u=0;!(i=e.next()).done;)c+=k(i=i.value,t,o,l=a+x(i,u++),s);else if("object"===i)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return c}function j(e,t,n){if(null==e)return e;var r=[],o=0;return k(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function N(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var M={current:null},P={transition:null},R={ReactCurrentDispatcher:M,ReactCurrentBatchConfig:P,ReactCurrentOwner:D};function U(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:j,forEach:function(e,t,n){j(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return j(e,(function(){t++})),t},toArray:function(e){return j(e,(function(e){return e}))||[]},only:function(e){if(!O(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=y,t.Fragment=o,t.Profiler=s,t.PureComponent=h,t.StrictMode=a,t.Suspense=l,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=R,t.act=U,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=g({},e.props),a=e.key,s=e.ref,i=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,i=D.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(u in t)w.call(t,u)&&!E.hasOwnProperty(u)&&(o[u]=void 0===t[u]&&void 0!==c?c[u]:t[u])}var u=arguments.length-2;if(1===u)o.children=r;else if(1<u){c=Array(u);for(var l=0;l<u;l++)c[l]=arguments[l+2];o.children=c}return{$$typeof:n,type:e.type,key:a,ref:s,props:o,_owner:i}},t.createContext=function(e){return(e={$$typeof:c,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=C,t.createFactory=function(e){var t=C.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:u,render:e}},t.isValidElement=O,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:N}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=P.transition;P.transition={};try{e()}finally{P.transition=t}},t.unstable_act=U,t.useCallback=function(e,t){return M.current.useCallback(e,t)},t.useContext=function(e){return M.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return M.current.useDeferredValue(e)},t.useEffect=function(e,t){return M.current.useEffect(e,t)},t.useId=function(){return M.current.useId()},t.useImperativeHandle=function(e,t,n){return M.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return M.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return M.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return M.current.useMemo(e,t)},t.useReducer=function(e,t,n){return M.current.useReducer(e,t,n)},t.useRef=function(e){return M.current.useRef(e)},t.useState=function(e){return M.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return M.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return M.current.useTransition()},t.version="18.3.1"},326:(e,t,n)=>{"use strict";e.exports=n(249)},741:e=>{e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},142:t=>{"use strict";t.exports=e},557:e=>{"use strict";e.exports=t},713:e=>{"use strict";e.exports=n},404:e=>{"use strict";e.exports=r},670:e=>{"use strict";e.exports=o},322:e=>{"use strict";e.exports=a},934:e=>{"use strict";e.exports=s},2:e=>{"use strict";e.exports=i},669:e=>{"use strict";e.exports=c},438:e=>{"use strict";e.exports=u},307:e=>{"use strict";e.exports=l},111:e=>{"use strict";e.exports=d}},g={};function S(e){var t=g[e];if(void 0!==t)return t.exports;var n=g[e]={exports:{}};return m[e](n,n.exports,S),n.exports}S.m=m,p=[],S.O=(e,t,n,r)=>{if(!t){var o=1/0;for(c=0;c<p.length;c++){t=p[c][0],n=p[c][1],r=p[c][2];for(var a=!0,s=0;s<t.length;s++)(!1&r||o>=r)&&Object.keys(S.O).every((e=>S.O[e](t[s])))?t.splice(s--,1):(a=!1,r<o&&(o=r));if(a){p.splice(c--,1);var i=n();void 0!==i&&(e=i)}}return e}r=r||0;for(var c=p.length;c>0&&p[c-1][2]>r;c--)p[c]=p[c-1];p[c]=[t,n,r]},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.miniCssF=e=>{},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})},S.p="/",f={524:0},S.F.j=e=>{if(!S.o(f,e)||void 0===f[e]){f[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===f[e],S.O(0,[524],(()=>{S.E(524)}),5);var y={};return(()=>{"use strict";S.r(y),S.d(y,{default:()=>P});const e=JSON.parse('{"UU":"@ohif/extension-cornerstone-dicom-seg"}').UU,t=`${e}.sopClassHandlerModule.dicom-seg`;var n=S(326),r=S(2),o=S(557),a=S(713),s=S(142),i=S(111),c=S.n(i);const u=["1.2.840.10008.5.1.4.1.1.66.4"],l={};function d(e,n,i){const d=e[0],{StudyInstanceUID:p,SeriesInstanceUID:f,SOPInstanceUID:m,SeriesDescription:g,SeriesNumber:S,SeriesDate:y,SOPClassUID:v,wadoRoot:h,wadoUri:b,wadoUriRoot:I}=d,w={Modality:"SEG",loading:!1,isReconstructable:!0,displaySetInstanceUID:r.utils.guid(),SeriesDescription:g,SeriesNumber:S,SeriesDate:y,SOPInstanceUID:m,SeriesInstanceUID:f,StudyInstanceUID:p,SOPClassHandlerId:t,SOPClassUID:v,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,segments:{},sopClassUids:u,instance:d,instances:[d],wadoRoot:h,wadoUriRoot:I,wadoUri:b,isOverlayDisplaySet:!0},D=d.ReferencedSeriesSequence;if(!D)return void console.error("ReferencedSeriesSequence is missing for the SEG");const E=D[0]||D;w.referencedImages=d.ReferencedSeriesSequence.ReferencedInstanceSequence,w.referencedSeriesInstanceUID=E.SeriesInstanceUID;const{displaySetService:C}=n.services,O=C.getDisplaySetsForSeries(w.referencedSeriesInstanceUID)[0];if(O)w.referencedDisplaySetInstanceUID=O.displaySetInstanceUID;else{const{unsubscribe:e}=C.subscribe(C.EVENTS.DISPLAY_SETS_ADDED,(({displaySetsAdded:t})=>{const n=t[0];n.SeriesInstanceUID===w.referencedSeriesInstanceUID&&(w.referencedDisplaySetInstanceUID=n.displaySetInstanceUID,e())}))}return w.load=async({headers:e})=>await function(e,t,n,r){const{SOPInstanceUID:i}=e,{segmentationService:u}=t.services;if((e.loading||e.isLoaded)&&l[i]&&function(e){return a.segmentation.state.getSegmentation(e.displaySetInstanceUID)}(e))return l[i];return e.loading=!0,l[i]=new Promise((async(i,l)=>{if(!e.segments||0===Object.keys(e.segments).length)try{await async function({extensionManager:e,servicesManager:t,segDisplaySet:n,headers:r}){const i=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),{segmentationService:u,uiNotificationService:l}=t.services,{dicomLoaderService:d}=i.exports,p=await d.findDicomDataPromise(n,null,r),f=t.services.displaySetService.getDisplaySetByUID(n.referencedDisplaySetInstanceUID);if(!f)throw new Error("referencedDisplaySet is missing for SEG");const{instances:m}=f,g=m.map((({imageId:e})=>e)),S=.001,y=!0;o.eventTarget.addEventListener(s.Enums.Events.SEGMENTATION_LOAD_PROGRESS,(e=>{const{percentComplete:t}=e.detail;u._broadcastEvent(u.EVENTS.SEGMENT_LOADING_COMPLETE,{percentComplete:t})}));const v=await s.adaptersSEG.Cornerstone3D.Segmentation.generateToolState(g,p,o.metaData,{skipOverlapping:y,tolerance:S,eventTarget:o.eventTarget,triggerEvent:o.triggerEvent});let h=!0;v.segMetadata.data.forEach(((e,t)=>{var n;t>0&&(e.rgba=e.RecommendedDisplayCIELabValue,e.rgba?e.rgba=(n=e.rgba,c().data.Colors.dicomlab2RGB(n).map((e=>Math.round(255*e)))):(h=!1,e.rgba=a.CONSTANTS.COLOR_LUT[t%a.CONSTANTS.COLOR_LUT.length]))})),v.overlappingSegments&&l.show({title:"Overlapping Segments",message:"Unsupported overlapping segments detected, segmentation rendering results may be incorrect.",type:"warning"});h||l.show({title:"DICOM SEG import",message:"RecommendedDisplayCIELabValue not found for one or more segments. The default color was used instead.",type:"warning",duration:5e3});Object.assign(n,v)}({extensionManager:n,servicesManager:t,segDisplaySet:e,headers:r})}catch(t){return e.loading=!1,l(t)}u.createSegmentationForSEGDisplaySet(e).then((()=>{e.loading=!1,i()})).catch((t=>{e.loading=!1,l(t)}))})),l[i]}(w,n,i,e),[w]}const p=function({servicesManager:e,extensionManager:t}){return[{name:"dicom-seg",sopClassUids:u,getDisplaySetsFromSeries:n=>d(n,e,t)}]},f={id:"@ohif/seg",name:"Segmentations",protocolMatchingRules:[],toolGroupIds:["default"],numberOfPriorsReferenced:0,defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0,syncGroups:[{type:"hydrateseg",id:"sameFORId",source:!0,target:!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,syncGroups:[{type:"hydrateseg",id:"sameFORId",source:!0,target:!0}]},displaySets:[{id:"segDisplaySetId"}]}]}]};const m=function(){return[{name:f.id,protocol:f}]};var g=S(438),v=S(934),h=S.n(v),b=S(670),I=S.n(b),w=S(322),D=S.n(w);const{segmentation:E}=a.utilities,{datasetToBlob:C}=c().data,{Cornerstone3D:{Segmentation:{generateSegmentation:O}}}=s.adaptersSEG,{Cornerstone3D:{RTSS:{generateRTSSFromSegmentations:T}}}=s.adaptersRT,{downloadDICOMData:x}=s.helpers,k=({servicesManager:e,extensionManager:t})=>{const{segmentationService:n,uiDialogService:s,displaySetService:i,viewportGridService:u,toolGroupService:l}=e.services,d={loadSegmentationsForViewport:async({segmentations:e,viewportId:t})=>{const r=(({viewportId:e,viewportGridService:t})=>{const{viewports:n,activeViewportId:r}=t.getState(),o=e||r;return n.get(o)})({viewportId:t,viewportGridService:u}),o=r.displaySetInstanceUIDs[0],a=e[0],s=a.segmentationId,c=a.config.label,l=a.config.segments,d=i.getDisplaySetByUID(o);return await n.createLabelmapForDisplaySet(d,{segmentationId:s,segments:l,label:c}),n.addOrUpdateSegmentation(a),await n.addSegmentationRepresentation(r.viewportId,{segmentationId:s}),s},generateSegmentation:({segmentationId:e,options:t={}})=>{const r=a.segmentation.state.getSegmentation(e),{imageIds:s}=r.representationData.Labelmap,i=s.map((e=>o.cache.getImage(e))),u=i.map((e=>o.cache.getImage(e.referencedImageId))),l=[];let d=0;for(const e of i){const t=new Set,n=e.getPixelData(),{rows:r,columns:o}=e;for(let e=0;e<n.length;e++){const r=n[e];0!==r&&t.add(r)}l[d++]={segmentsOnLabelmap:Array.from(t),pixelData:n,rows:r,columns:o}}const p=l.map((e=>e.segmentsOnLabelmap)),f={segmentsOnLabelmap:Array.from(new Set(p.flat())),metadata:[],labelmaps2D:l},m=n.getSegmentation(e),g=n.getRepresentationsForSegmentation(e);Object.entries(m.segments).forEach((([t,r])=>{if(!r)return;const{label:o}=r,a=g[0],s=n.getSegmentColor(a.viewportId,e,r.segmentIndex),i=c().data.Colors.rgb2DICOMLAB(s.slice(0,3).map((e=>e/255))).map((e=>Math.round(e))),u={SegmentNumber:t.toString(),SegmentLabel:o,SegmentAlgorithmType:r?.algorithmType||"MANUAL",SegmentAlgorithmName:r?.algorithmName||"OHIF Brush",RecommendedDisplayCIELabValue:i,SegmentedPropertyCategoryCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"},SegmentedPropertyTypeCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"}};f.metadata[t]=u}));return O(u,f,o.metaData,t)},downloadSegmentation:({segmentationId:e})=>{const t=n.getSegmentation(e),r=d.generateSegmentation({segmentationId:e});x(r.dataset,`${t.label}`)},storeSegmentation:async({segmentationId:e,dataSource:o})=>{const a=await(0,g.createReportDialogPrompt)(s,{extensionManager:t});if(1!==a.action&&!a.value)return;const i=n.getSegmentation(e);if(!i)throw new Error("No segmentation found");const{label:c}=i,u=a.value||c||"Research Derived Series",l=d.generateSegmentation({segmentationId:e,options:{SeriesDescription:u}});if(!l||!l.dataset)throw new Error("Error during segmentation generation");const{dataset:p}=l;return await o.store.dicom(p),p.wadoRoot=o.getConfig().wadoRoot,r.DicomMetadataStore.addInstances([p],!0),p},downloadRTSS:({segmentationId:e})=>{const t=n.getSegmentation(e),s={vtkImageMarchingSquares:h(),vtkDataArray:I(),vtkImageData:D()},i=T(t,r.classes.MetadataProvider,r.DicomMetadataStore,o.cache,a.Enums,s);try{const e=C(i),t=URL.createObjectURL(e);window.location.assign(t)}catch(e){console.warn(e)}},setBrushSize:({value:e,toolNames:t})=>{const n=Number(e);l.getToolGroupIds()?.forEach((e=>{0===t?.length?E.setBrushSizeForToolGroup(e,n):t?.forEach((t=>{E.setBrushSizeForToolGroup(e,n,t)}))}))},setThresholdRange:({value:e,toolNames:t=["ThresholdCircularBrush","ThresholdSphereBrush"]})=>{l.getToolGroupIds()?.forEach((n=>{const r=l.getToolGroup(n);t?.forEach((t=>{r.setToolConfiguration(t,{strategySpecificConfiguration:{THRESHOLD:{threshold:e}}})}))}))}},p={loadSegmentationDisplaySetsForViewport:{commandFn:d.loadSegmentationDisplaySetsForViewport},loadSegmentationsForViewport:{commandFn:d.loadSegmentationsForViewport},generateSegmentation:{commandFn:d.generateSegmentation},downloadSegmentation:{commandFn:d.downloadSegmentation},storeSegmentation:{commandFn:d.storeSegmentation},downloadRTSS:{commandFn:d.downloadRTSS},setBrushSize:{commandFn:d.setBrushSize},setThresholdRange:{commandFn:d.setThresholdRange}};return{actions:d,definitions:p,defaultContext:"SEGMENTATION"}};function j(){return j=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},j.apply(null,arguments)}const N=n.lazy((()=>Promise.resolve().then(S.bind(S,292)))),M=e=>n.createElement(n.Suspense,{fallback:n.createElement("div",null,"Loading...")},n.createElement(N,e)),P={id:e,getCommandsModule:k,getToolbarModule:function({servicesManager:e}){const{segmentationService:t,toolbarService:n,toolGroupService:r}=e.services;return[{name:"evaluate.cornerstone.segmentation",evaluate:({viewportId:e,button:o,toolNames:a,disabledText:s})=>{const i=t.getSegmentationRepresentations(e);if(!i?.length)return{disabled:!0,className:"!text-common-bright !bg-black opacity-50",disabledText:s??"No segmentations available"};const c=r.getToolGroupForViewport(e);if(!c)return{disabled:!0,className:"!text-common-bright ohif-disabled",disabledText:s??"Not available on the current viewport"};const u=n.getToolNameForButton(o);if(!c.hasTool(u)&&!a)return{disabled:!0,className:"!text-common-bright ohif-disabled",disabledText:s??"Not available on the current viewport"};const l=a?a.includes(c.getActivePrimaryMouseButtonTool()):c.getActivePrimaryMouseButtonTool()===u;return{disabled:!1,className:l?"!text-black !bg-primary-light hover:bg-primary-light hover-text-black hover:cursor-pointer":"!text-common-bright !bg-black hover:bg-primary-light hover:cursor-pointer hover:text-black",isActive:l}}}]},getViewportModule:({servicesManager:e,extensionManager:t,commandsManager:r})=>[{name:"dicom-seg",component:o=>n.createElement(M,j({servicesManager:e,extensionManager:t,commandsManager:r},o))}],getSopClassHandlerModule:p,getHangingProtocolModule:m}})(),y=S.O(y)})()));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ohif/extension-cornerstone-dicom-seg",
3
- "version": "3.10.0-beta.21",
3
+ "version": "3.10.0-beta.23",
4
4
  "description": "DICOM SEG read workflow",
5
5
  "author": "OHIF",
6
6
  "license": "MIT",
@@ -33,10 +33,10 @@
33
33
  "start": "yarn run dev"
34
34
  },
35
35
  "peerDependencies": {
36
- "@ohif/core": "3.10.0-beta.21",
37
- "@ohif/extension-cornerstone": "3.10.0-beta.21",
38
- "@ohif/extension-default": "3.10.0-beta.21",
39
- "@ohif/i18n": "3.10.0-beta.21",
36
+ "@ohif/core": "3.10.0-beta.23",
37
+ "@ohif/extension-cornerstone": "3.10.0-beta.23",
38
+ "@ohif/extension-default": "3.10.0-beta.23",
39
+ "@ohif/i18n": "3.10.0-beta.23",
40
40
  "prop-types": "^15.6.2",
41
41
  "react": "^18.3.1",
42
42
  "react-dom": "^18.3.1",