@ohif/extension-cornerstone-dicom-seg 3.14.0-beta.73 → 3.14.0-beta.74

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 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@ohif/core"),require("@cornerstonejs/adapters"),require("@ohif/extension-cornerstone"),require("@ohif/ui-next"),require("@cornerstonejs/core"),require("@cornerstonejs/tools/utilities"),require("dcmjs"),require("@ohif/i18n"),require("@cornerstonejs/tools"),require("@cornerstonejs/tools/enums"),require("@ohif/core/src/contextProviders/SystemProvider"),require("@ohif/extension-default")):"function"==typeof define&&define.amd?define(["@ohif/core","@cornerstonejs/adapters","@ohif/extension-cornerstone","@ohif/ui-next","@cornerstonejs/core","@cornerstonejs/tools/utilities","dcmjs","@ohif/i18n","@cornerstonejs/tools","@cornerstonejs/tools/enums","@ohif/core/src/contextProviders/SystemProvider","@ohif/extension-default"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-seg"]=t(require("@ohif/core"),require("@cornerstonejs/adapters"),require("@ohif/extension-cornerstone"),require("@ohif/ui-next"),require("@cornerstonejs/core"),require("@cornerstonejs/tools/utilities"),require("dcmjs"),require("@ohif/i18n"),require("@cornerstonejs/tools"),require("@cornerstonejs/tools/enums"),require("@ohif/core/src/contextProviders/SystemProvider"),require("@ohif/extension-default")):e["ohif-extension-cornerstone-dicom-seg"]=t(e["@ohif/core"],e["@cornerstonejs/adapters"],e["@ohif/extension-cornerstone"],e["@ohif/ui-next"],e["@cornerstonejs/core"],e["@cornerstonejs/tools/utilities"],e.dcmjs,e["@ohif/i18n"],e["@cornerstonejs/tools"],e["@cornerstonejs/tools/enums"],e["@ohif/core/src/contextProviders/SystemProvider"],e["@ohif/extension-default"])}(globalThis,(e,t,n,r,o,a,s,i,l,c,u,d)=>(()=>{var m,g,f={992(e,t,n){"use strict";n.r(t),n.d(t,{default:()=>d});var r=n(184),o=n(326),a=n(55);let s=function({commandsManager:e,toolGroupService:t,customizationService:n,toolGroupId:r}){let o=n.getCustomization("cornerstone.overlayViewportTools"),a=e.run("initializeSegmentLabelTool",{tools:o});return t.createToolGroupAndAddTools(r,a)};var i=n(669),l=n(404),c=n(492),u=n(870);let d=function(e){let t,n,d,m,g,f,p,S,y,h,b,v,I,x,w=(0,r.c)(51),{servicesManager:D,commandsManager:j}=(0,c.useSystem)(),{children:C,displaySets:E,viewportOptions:O}=e,N=O.viewportId,{displaySetService:T,toolGroupService:U,segmentationService:_,customizationService:R}=D.services;w[0]!==R?(t=R.getCustomization("ui.loadingIndicatorTotalPercent"),w[0]=R,w[1]=t):t=w[1];let P=t,A=`SEGToolGroup-${N}`;if(E.length>1)throw Error("SEG viewport should only have a single display set");let L=E[0],[M,F]=(0,a.useViewportGrid)(),{setPositionPresentation:G}=(0,i.usePositionPresentationStore)(),[k,q]=(0,o.useState)(!L.isLoaded);w[2]===Symbol.for("react.memo_cache_sentinel")?(n={percentComplete:null,totalSegments:null},w[2]=n):n=w[2];let[$,V]=(0,o.useState)(n),{viewports:B,activeViewportId:H}=M,z=L.referencedDisplaySetInstanceUID,Y=!1;if(!z){let e=R.getCustomization("missingReferenceDisplaySetHandler");"function"==typeof e?{handled:Y}=e():(console.log("No customization 'missingReferenceDisplaySetHandler' registered. Skipping SEG rendering."),Y=!0)}let W=z?T.getDisplaySetByUID(z):void 0;w[3]!==H||w[4]!==j||w[5]!==L||w[6]!==k||w[7]!==D||w[8]!==N?(d=()=>{k||N===H&&function({servicesManager:e,segDisplaySet:t,viewportId:n,preHydrateCallbacks:r,hydrateCallback:o}){i.utils.promptHydrationDialog({servicesManager:e,viewportId:n,displaySet:t,preHydrateCallbacks:r,hydrateCallback:o,type:"SEG"})}({servicesManager:D,viewportId:N,segDisplaySet:L,hydrateCallback:async()=>(await j.runCommand("hydrateSecondaryDisplaySet",{displaySet:L,viewportId:N}),!0)})},m=[D,N,L,k,j,H],w[3]=H,w[4]=j,w[5]=L,w[6]=k,w[7]=D,w[8]=N,w[9]=d,w[10]=m):(d=w[9],m=w[10]),(0,o.useEffect)(d,m),w[11]!==L||w[12]!==_||w[13]!==G||w[14]!==N||w[15]!==O?(g=()=>{_.clearSegmentationRepresentations(N);let{unsubscribe:e}=_.subscribe(_.EVENTS.SEGMENTATION_LOADING_COMPLETE,e=>{if(e.segDisplaySet?.displaySetInstanceUID===L?.displaySetInstanceUID&&q(!1),L?.firstSegmentedSliceImageId&&O?.presentationIds){let{firstSegmentedSliceImageId:e}=L,{presentationIds:t}=O;G(t.positionPresentationId,{viewReference:{referencedImageId:e}})}});return()=>{e()}},w[11]=L,w[12]=_,w[13]=G,w[14]=N,w[15]=O,w[16]=g):g=w[16],w[17]!==L?(f=[L],w[17]=L,w[18]=f):f=w[18],(0,o.useEffect)(g,f),w[19]!==_?(p=()=>{let{unsubscribe:e}=_.subscribe(_.EVENTS.SEGMENT_LOADING_COMPLETE,e=>{let{percentComplete:t,numSegments:n}=e;V({percentComplete:t,totalSegments:n})});return()=>{e()}},w[19]=_,w[20]=p):p=w[20],w[21]!==L?(S=[L],w[21]=L,w[22]=S):S=w[22],(0,o.useEffect)(p,S),w[23]!==H||w[24]!==T||w[25]!==F||w[26]!==B?(y=()=>{let e=T.subscribe(T.EVENTS.DISPLAY_SETS_REMOVED,e=>{let{displaySetInstanceUIDs:t}=e,n=B.get(H);t.includes(n.displaySetInstanceUID)&&F.setDisplaySetsForViewport({viewportId:H,displaySetInstanceUIDs:[]})});return()=>{e.unsubscribe()}},w[23]=H,w[24]=T,w[25]=F,w[26]=B,w[27]=y):y=w[27],w[28]===Symbol.for("react.memo_cache_sentinel")?(h=[],w[28]=h):h=w[28],(0,o.useEffect)(y,h),w[29]!==j||w[30]!==R||w[31]!==L||w[32]!==_||w[33]!==A||w[34]!==U||w[35]!==N?(b=()=>{if(!U.getToolGroup(A))return j.runCommand("updateStoredSegmentationPresentation",{displaySet:L,type:l.SegmentationRepresentations.Labelmap}),_.clearSegmentationRepresentations(N),s({commandsManager:j,toolGroupService:U,customizationService:R,toolGroupId:A}),()=>{_.clearSegmentationRepresentations(N),U.destroyToolGroup(A)}},w[29]=j,w[30]=R,w[31]=L,w[32]=_,w[33]=A,w[34]=U,w[35]=N,w[36]=b):b=w[36],w[37]===Symbol.for("react.memo_cache_sentinel")?(v=[],w[37]=v):v=w[37],(0,o.useEffect)(b,v);let J=null;if(Y||!W)return null;if(C&&C.length){let e;if(w[38]!==C||w[39]!==N){let t;w[41]!==N?(t=(e,t)=>e&&o.cloneElement(e,{viewportId:N,key:t}),w[41]=N,w[42]=t):t=w[42],e=C.map(t),w[38]=C,w[39]=N,w[40]=e}else e=w[40];J=e}w[43]!==P||w[44]!==$||w[45]!==k?(I=k&&(0,u.jsx)(P,{className:"h-full w-full",totalNumbers:$.totalSegments,percentComplete:$.percentComplete,loadingText:"Loading SEG..."}),w[43]=P,w[44]=$,w[45]=k,w[46]=I):I=w[46];let K=(0,u.jsx)(i.OHIFCornerstoneViewport,{...e,displaySets:[W,L],viewportOptions:{viewportType:O.viewportType,toolGroupId:A,orientation:O.orientation,viewportId:O.viewportId,presentationIds:O.presentationIds},onElementEnabled:t=>{e.onElementEnabled?.(t)}});return w[47]!==J||w[48]!==I||w[49]!==K?(x=(0,u.jsx)(u.Fragment,{children:(0,u.jsxs)("div",{className:"relative flex h-full w-full flex-row overflow-hidden",children:[I,K,J]})}),w[47]=J,w[48]=I,w[49]=K,w[50]=x):x=w[50],x}},76(e,t,n){"use strict";var r=n(326).__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;t.c=function(e){return r.H.useMemoCache(e)}},60(e,t){"use strict";var n=Symbol.for("react.transitional.element");function r(e,t,r){var o=null;if(void 0!==r&&(o=""+r),void 0!==t.key&&(o=""+t.key),"key"in t)for(var a in r={},t)"key"!==a&&(r[a]=t[a]);else r=t;return{$$typeof:n,type:e,key:o,ref:void 0!==(t=r.ref)?t:null,props:r}}t.Fragment=Symbol.for("react.fragment"),t.jsx=r,t.jsxs=r},391(e,t){"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=(Symbol.for("react.fragment"),Symbol.for("react.strict_mode"),Symbol.for("react.profiler"),Symbol.for("react.consumer")),a=Symbol.for("react.context"),s=(Symbol.for("react.forward_ref"),Symbol.for("react.suspense")),i=(Symbol.for("react.memo"),Symbol.for("react.lazy")),l=(Symbol.for("react.activity"),Symbol.iterator),c={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},u=Object.assign,d={};function m(e,t,n){this.props=e,this.context=t,this.refs=d,this.updater=n||c}function g(){}function f(e,t,n){this.props=e,this.context=t,this.refs=d,this.updater=n||c}m.prototype.isReactComponent={},m.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("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")},m.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},g.prototype=m.prototype;var p=f.prototype=new g;p.constructor=f,u(p,m.prototype),p.isPureReactComponent=!0;var S={H:null,A:null,T:null,S:null},y=Object.prototype.hasOwnProperty;function h(e,t,r){var o=r.ref;return{$$typeof:n,type:e,key:t,ref:void 0!==o?o:null,props:r}}function b(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}"function"==typeof reportError&&reportError,t.Suspense=s,t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=S,t.cloneElement=function(e,t,n){if(null==e)throw Error("The argument must be a React element, but you passed "+e+".");var r=u({},e.props),o=e.key;if(null!=t)for(a in void 0!==t.key&&(o=""+t.key),t)y.call(t,a)&&"key"!==a&&"__self"!==a&&"__source"!==a&&("ref"!==a||void 0!==t.ref)&&(r[a]=t[a]);var a=arguments.length-2;if(1===a)r.children=n;else if(1<a){for(var s=Array(a),i=0;i<a;i++)s[i]=arguments[i+2];r.children=s}return h(e.type,o,r)},t.createContext=function(e){return(e={$$typeof:a,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:o,_context:e},e},t.lazy=function(e){return{$$typeof:i,_payload:{_status:-1,_result:e},_init:b}},t.useContext=function(e){return S.H.useContext(e)},t.useEffect=function(e,t){return S.H.useEffect(e,t)},t.useRef=function(e){return S.H.useRef(e)},t.useState=function(e){return S.H.useState(e)}},184(e,t,n){"use strict";e.exports=n(76)},326(e,t,n){"use strict";e.exports=n(391)},870(e,t,n){"use strict";e.exports=n(60)},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(e){"use strict";e.exports=t},557(e){"use strict";e.exports=o},713(e){"use strict";e.exports=l},404(e){"use strict";e.exports=c},154(e){"use strict";e.exports=a},2(t){"use strict";t.exports=e},492(e){"use strict";e.exports=u},669(e){"use strict";e.exports=n},438(e){"use strict";e.exports=d},545(e){"use strict";e.exports=i},55(e){"use strict";e.exports=r},111(e){"use strict";e.exports=s}},p={};function S(e){var t=p[e];if(void 0!==t)return t.exports;var n=p[e]={exports:{}};return f[e](n,n.exports,S),n.exports}S.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return S.d(t,{a:t}),t},S.d=(e,t)=>{for(var n in t)S.o(t,n)&&!S.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},S.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),S.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},m=[],S.O=(e,t,n,r)=>{if(t){r=r||0;for(var o=m.length;o>0&&m[o-1][2]>r;o--)m[o]=m[o-1];m[o]=[t,n,r];return}for(var a=1/0,o=0;o<m.length;o++){for(var[t,n,r]=m[o],s=!0,i=0;i<t.length;i++)(!1&r||a>=r)&&Object.keys(S.O).every(e=>S.O[e](t[i]))?t.splice(i--,1):(s=!1,r<a&&(a=r));if(s){m.splice(o--,1);var l=n();void 0!==l&&(e=l)}}return e},S.F={},S.E=e=>{Object.keys(S.F).map(t=>{S.F[t](e)})},g={509:0},S.F.j=e=>{if(!S.o(g,e)||void 0===g[e]){g[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===g[e],S.O(0,[509],()=>{[509].map(S.E)},5);var y={};return(()=>{"use strict";S.r(y),S.d(y,{default:()=>eg});var e,t=S(184);let n=JSON.parse('{"UU":"@ohif/extension-cornerstone-dicom-seg"}').UU,r=`${n}.sopClassHandlerModule.dicom-seg`;var o=S(326),a=S(2),s=S(545),i=S.n(s),l=S(557),c=S(713),u=S(142),d=S(111),m=S.n(d);let g="1.2.840.10008.5.1.4.1.1.66.7",f="1.2.840.10008.5.1.4.1.1.66.4",p="1.2.840.10008.1.2.5",h="labelmap";function b(e,t){return"bitmap"===(t?.defaultMode??e?.getCustomization("segmentation.store.defaultMode")??h)?"bitmap":"labelmap"}function v(e){return/^(wadouri:|dicomfile:|dicomweb:)/.test(e)}let I=["1.2.840.10008.5.1.4.1.1.66.4","1.2.840.10008.5.1.4.1.1.66.7"],x={},w="[SEG load]";function D(e){if(null!=e)return Array.isArray(e)?e[0]:e}function j(e){let t=Number(e.NumberOfFrames);if(t>0)return t;let n=e.PerFrameFunctionalGroupsSequence;return Array.isArray(n)&&n.length>0?n.length:1}function C(e,t){if(!e||(!function(e,t){if(!e)return;let n=a.classes.MetadataProvider,r=t.StudyInstanceUID,o=t.SeriesInstanceUID,s=t.SOPInstanceUID||t.SopInstanceUID;if(r&&o&&s){let t;n.addImageIdToUIDs(e,{StudyInstanceUID:r,SeriesInstanceUID:o,SOPInstanceUID:s,frameNumber:(t=e.match(/(?:&|\?)frame=(\d+)/))?Number(t[1]):1})}}(e,t),l.metaData.get("instance",e)))return;let n=t.StudyInstanceUID,r=t.SeriesInstanceUID,o=t.SOPInstanceUID||t.SopInstanceUID,s=n&&r&&o?a.DicomMetadataStore.getInstance(n,r,o):void 0;a.classes.MetadataProvider.addCustomMetadata(e,"instance",s||t)}async function E({extensionManager:e,servicesManager:t,segDisplaySet:n}){var r;let o,s,i,{segmentationService:d,uiNotificationService:p,customizationService:S}=t.services,y=n.instance,h=function(e,t){let n,r=t.StudyInstanceUID,o=t.SeriesInstanceUID,s=t.SOPInstanceUID||t.SopInstanceUID;if(r&&o&&s){let e=a.DicomMetadataStore.getInstance(r,o,s);n=e?.url}if((n=n||t.url)&&v(n)){let t=e.getDataSources("dicomlocal");if(t?.[0])return t[0]}return e.getActiveDataSource()[0]}(e,y),I=(i=j(y),D(h.getImageIdsForInstance?.({instance:y,frame:i>1?1:void 0})));if(!I)throw Error("Could not get imageId for SEG instance (no local wadouri url and getImageIdsForInstance returned nothing).");let x=t.services.displaySetService.getDisplaySetByUID(n.referencedDisplaySetInstanceUID);if(!x)throw Error("referencedDisplaySet is missing for SEG");let{imageIds:O}=x;if(O?.length||(O=h.getImageIdsForDisplaySet?.(x)),O?.length||(O=x.images?.map(e=>e.imageId)),!O?.length)throw Error("referencedDisplaySet has no imageIds");n.referencedImageIds=O,x.imageIds?.length||(x.imageIds=O);let N=function(e,t,n){let r=j(t),o=function(e,t){let n=e.match(/(.*\/frames\/)(\d+)(.*)$/);if(!n||t<=1)return[e];let r=n[1],o=n[3]||"",a=[];for(let e=1;e<=t;e++)a.push(`${r}${e}${o}`);return a}(e,r);if(o.length>1)return o;if(r<=1)return[e];let a=[];for(let e=1;e<=r;e++){let r=D(n.getImageIdsForInstance?.({instance:t,frame:e}));r&&a.push(r)}return a.length?a:[e]}(I,n.instance,h),T=v(I)?function(e){let t=e.indexOf("?");if(-1===t)return e;let n=e.slice(0,t),r=e.slice(t+1).split("&").filter(e=>"frame"!==e.split("=")[0]).join("&");return r?`${n}?${r}`:n}(I):I;!function({segDisplaySet:e,segImageIdStr:t,frameImageIds:n,referencedImageIds:r}){let o=e.instance,s=Number(o?.NumberOfFrames)||1;a.log.debug(w,"Loading SEG pixel data",{SOPInstanceUID:e.SOPInstanceUID,SeriesInstanceUID:e.SeriesInstanceUID,SOPClassUID:e.SOPClassUID,NumberOfFrames:s,segmentCount:Object.keys(e.segments||{}).length,referencedDisplaySetInstanceUID:e.referencedDisplaySetInstanceUID,referencedImageIdCount:r.length,referencedImageIds:r,segImageIdForMetadata:t,frameImageIds:n,loadSegFramesIndividually:n.length>1})}({segDisplaySet:n,segImageIdStr:T,frameImageIds:N,referencedImageIds:O}),C(T,y),N.forEach(e=>C(e,y));let U=e=>{let{percentComplete:t}=e.detail;d._broadcastEvent(d.EVENTS.SEGMENT_LOADING_COMPLETE,{percentComplete:t})};l.eventTarget.addEventListener(u.Enums.Events.SEGMENTATION_LOAD_PROGRESS,U),(h?.getConfig?.()?.loadMultiframeAsPart10??S?.getCustomization?.("cornerstone.segmentation.loadMultiframeAsPart10")??!0)&&(o=h.retrieve?.prefetchInstanceFrames?.({instance:y,imageId:T}),o?.done&&await o.done);try{s=await u.adaptersSEG.Cornerstone3D.Segmentation.createFromDicomSegImageId(O,T,{metadataProvider:l.metaData,tolerance:.001,parserType:(r=n.SOPClassUID,r===g?"labelmap":r===f?"bitmap":b(S)),frameImageIds:N,concurrency:16})}finally{l.eventTarget.removeEventListener(u.Enums.Events.SEGMENTATION_LOAD_PROGRESS,U),o?.cancel?.()}let _=!0;s.segMetadata.data.forEach((e,t)=>{if(t>0)if(e.rgba=e.RecommendedDisplayCIELabValue,e.rgba){var n;n=e.rgba,e.rgba=m().data.Colors.dicomlab2RGB(n).map(e=>Math.round(255*e))}else _=!1,e.rgba=c.CONSTANTS.COLOR_LUT[t%c.CONSTANTS.COLOR_LUT.length]}),_||p.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,s);let R=s.labelMapImages?.flat().map(e=>e.imageId);a.log.debug(w,"SEG parse complete",{SOPInstanceUID:n.SOPInstanceUID,labelMapImageCount:R?.length??0,labelMapImageIds:R,segmentIndices:Object.keys(n.segments||{})})}let O={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"}]}]}]};var N=S(438),T=S(669);let{Cornerstone3D:{Segmentation:{generateSegmentation:U}}}=u.adaptersSEG,{Cornerstone3D:{RTSS:{generateRTSSFromRepresentation:_}}}=u.adaptersRT,R={"segmentation.store.defaultMode":h,"segmentation.store.transferSyntaxUID":p,"segmentation.segmentLabel":{enabledByDefault:!1,hoverTimeout:1}};var P=S(55),A=S(154);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})(e)}function M(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 TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==L(t)?t:t+""}S(741),Object.create(null);var F=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,G={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},k=function(e){return G[e]},q={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(F,k)}},$=(0,o.createContext)(),V=function(){var e;function t(){if(!(this instanceof t))throw TypeError("Cannot call a class as a function");this.usedNamespaces={}}return 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)}}],function(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,M(r.key),r)}}(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t}();function B(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 H(){if(console&&console.warn){for(var e,t=arguments.length,n=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 z={};function Y(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&z[t[0]]||("string"==typeof t[0]&&(z[t[0]]=new Date),H.apply(void 0,t))}var W=function(e,t){return function(){e.isInitialized?t():e.on("initialized",function n(){setTimeout(function(){e.off("initialized",n)},0),t()})}};function J(e,t,n){e.loadNamespaces(t,W(e,n))}function K(e,t,n,r){"string"==typeof n&&(n=[n]),n.forEach(function(t){0>e.options.ns.indexOf(t)&&e.options.ns.push(t)}),e.loadLanguages(t,W(e,r))}function Q(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function X(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Q(Object(n),!0).forEach(function(t){var r,o;r=t,o=n[t],(r=M(r))in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Q(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var Z=function(e,t){var n=(0,o.useRef)();return(0,o.useEffect)(function(){n.current=t?n.current:e},[e,t]),n.current};function ee(t){var n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=r.i18n,s=(0,o.useContext)($)||{},i=s.i18n,l=s.defaultNS,c=a||i||e;if(c&&!c.reportNamespaces&&(c.reportNamespaces=new V),!c){Y("You will need to pass in an i18next instance by using initReactI18next");var u=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},d=[u,{},!1];return d.t=u,d.i18n={},d.ready=!1,d}c.options.react&&void 0!==c.options.react.wait&&Y("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var m=X(X(X({},q),c.options.react),r),g=m.useSuspense,f=m.keyPrefix,p=t||l||c.options&&c.options.defaultNS;p="string"==typeof p?[p]:p||["translation"],c.reportNamespaces.addUsedNamespaces&&c.reportNamespaces.addUsedNamespaces(p);var S=(c.isInitialized||c.initializedStoreOnce)&&p.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?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):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}}):(Y("i18n.languages were undefined or empty",t.languages),!0)}(e,c,m)});function y(){return c.getFixedT(r.lng||null,"fallback"===m.nsMode?p:p[0],f)}var h=function(e){if(Array.isArray(e))return e}(n=(0,o.useState)(y))||function(e){var t=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,r,o,a,s=[],i=!0,l=!1;try{o=(t=t.call(e)).next,!1;for(;!(i=(n=o.call(t)).done)&&(s.push(n.value),2!==s.length);i=!0);}catch(e){l=!0,r=e}finally{try{if(!i&&null!=t.return&&(a=t.return(),Object(a)!==a))return}finally{if(l)throw r}}return s}}(n)||function(e){if(e){if("string"==typeof e)return B(e,2);var t=({}).toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?B(e,2):void 0}}(n)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),b=h[0],v=h[1],I=p.join();r.lng&&(I="".concat(r.lng).concat(I));var x=Z(I),w=(0,o.useRef)(!0);(0,o.useEffect)(function(){var e=m.bindI18n,t=m.bindI18nStore;function n(){w.current&&v(y)}return w.current=!0,S||g||(r.lng?K(c,r.lng,p,function(){w.current&&v(y)}):J(c,p,function(){w.current&&v(y)})),S&&x&&x!==I&&w.current&&v(y),e&&c&&c.on(e,n),t&&c&&c.store.on(t,n),function(){w.current=!1,e&&c&&e.split(" ").forEach(function(e){return c.off(e,n)}),t&&c&&t.split(" ").forEach(function(e){return c.store.off(e,n)})}},[c,I]);var D=(0,o.useRef)(!0);(0,o.useEffect)(function(){w.current&&!D.current&&v(y),D.current=!1},[c,f]);var j=[b,c,S];if(j.t=b,j.i18n=c,j.ready=S,S||!S&&!g)return j;throw new Promise(function(e){r.lng?K(c,r.lng,p,function(){return e()}):J(c,p,function(){return e()})})}var et=S(870);let{LogicalOperation:en}=A.contourSegmentation,er=[{value:"merge",logicalOperation:en.Union,label:"Merge",icon:"actions-combine-merge",helperIcon:"helper-combine-merge"},{value:"intersect",logicalOperation:en.Intersect,label:"Intersect",icon:"actions-combine-intersect",helperIcon:"helper-combine-intersect"},{value:"subtract",logicalOperation:en.Subtract,label:"Subtract",icon:"actions-combine-subtract",helperIcon:"helper-combine-subtract"}];function eo(e){let n,r,o,a,s,i,l,c,u,d=(0,t.c)(25),{label:m,value:g,onValueChange:f,segments:p,placeholder:S}=e,y=void 0===S?"Select a segment":S,{t:h}=ee("SegmentationPanel");d[0]!==m?(n=(0,et.jsx)("div",{children:m}),d[0]=m,d[1]=n):n=d[1];let b=`select-segment-${m}`;d[2]!==m?(r=m.toLowerCase(),d[2]=m,d[3]=r):r=d[3];let v=`logical-contour-segment-${r}-trigger`;return d[4]!==y||d[5]!==h?(o=h(y),d[4]=y,d[5]=h,d[6]=o):o=d[6],d[7]!==o?(a=(0,et.jsx)(P.SelectValue,{placeholder:o}),d[7]=o,d[8]=a):a=d[8],d[9]!==v||d[10]!==a?(s=(0,et.jsx)(P.SelectTrigger,{className:"overflow-hidden","data-cy":v,children:a}),d[9]=v,d[10]=a,d[11]=s):s=d[11],d[12]!==p?(i=p.map(ea),d[12]=p,d[13]=i):i=d[13],d[14]!==i?(l=(0,et.jsx)(P.SelectContent,{children:i}),d[14]=i,d[15]=l):l=d[15],d[16]!==f||d[17]!==l||d[18]!==b||d[19]!==s||d[20]!==g?(c=(0,et.jsxs)(P.Select,{onValueChange:f,value:g,children:[s,l]},b),d[16]=f,d[17]=l,d[18]=b,d[19]=s,d[20]=g,d[21]=c):c=d[21],d[22]!==c||d[23]!==n?(u=(0,et.jsxs)("div",{className:"flex justify-between gap-6",children:[n,c]}),d[22]=c,d[23]=n,d[24]=u):u=d[24],u}function ea(e){return(0,et.jsx)(P.SelectItem,{value:e.segmentIndex.toString(),children:e.label},e.segmentIndex)}function es(e){return e.active}function ei(e){let{representation:t}=e;return t?.active}let el=function(){let e,n,r,s,i,l,c,u,d,m,g,f,p,S,y,h,b,v,I,x,w,D,j,C,E,O,N,U,_=(0,t.c)(74),{servicesManager:R}=(0,a.useSystem)(),{segmentationService:A}=R.services,{t:L}=ee("SegmentationPanel"),{segmentationsWithRepresentations:M}=(0,T.useActiveViewportSegmentationRepresentations)(),F=M?.find(ei),G=F?Object.values(F.segmentation.segments):[],k=F?A.getNextAvailableSegmentIndex(F.segmentation.segmentationId):1,q=F?.segmentation?.segmentationId,$=G.find(es),V=$?.segmentIndex||0,[B,H]=(0,o.useState)(er[0]),[z,Y]=(0,o.useState)(V?.toString()||""),[W,J]=(0,o.useState)(""),[K,Q]=(0,o.useState)(!1),[X,Z]=(0,o.useState)("");_[0]!==V?(e=()=>{Y(V?.toString()||null)},n=[V],_[0]=V,_[1]=e,_[2]=n):(e=_[1],n=_[2]),(0,o.useEffect)(e,n),_[3]!==k?(r=()=>{Z(`Segment ${k}`)},s=[k],_[3]=k,_[4]=r,_[5]=s):(r=_[4],s=_[5]),(0,o.useEffect)(r,s);let en=(0,a.useRunCommand)();_[6]!==K||_[7]!==X||_[8]!==k||_[9]!==B.logicalOperation||_[10]!==en||_[11]!==z||_[12]!==W||_[13]!==q?(i=()=>{let e=z;K&&(e=k.toString(),en("addSegment",{segmentationId:q,config:{label:X,segmentIndex:k}})),en("applyLogicalContourOperation",{segmentAInfo:{segmentationId:q,segmentIndex:parseInt(z)},segmentBInfo:{segmentationId:q,segmentIndex:parseInt(W)},resultSegmentInfo:{segmentationId:q,segmentIndex:parseInt(e)},logicalOperation:B.logicalOperation})},_[6]=K,_[7]=X,_[8]=k,_[9]=B.logicalOperation,_[10]=en,_[11]=z,_[12]=W,_[13]=q,_[14]=i):i=_[14];let ea=i,el=B.value;_[15]!==H?(l=er.map(e=>{let{value:t,icon:n}=e;return(0,et.jsx)(P.TabsTrigger,{value:t,onClick:()=>H(e),"data-cy":`logical-contour-operation-${t}`,children:(0,et.jsx)(P.Icons.ByName,{name:n})},`logical-contour-operation-${t}`)}),_[15]=H,_[16]=l):l=_[16],_[17]!==l?(c=(0,et.jsx)(P.TabsList,{className:"inline-flex space-x-1",children:l}),_[17]=l,_[18]=c):c=_[18],_[19]!==B.value||_[20]!==c?(u=(0,et.jsx)(P.Tabs,{value:el,children:c}),_[19]=B.value,_[20]=c,_[21]=u):u=_[21],_[22]!==B.label||_[23]!==L?(d=L(B.label),_[22]=B.label,_[23]=L,_[24]=d):d=_[24],_[25]!==d?(m=(0,et.jsx)("div",{children:d}),_[25]=d,_[26]=m):m=_[26],_[27]!==m||_[28]!==u?(g=(0,et.jsxs)("div",{className:"flex w-auto flex-col items-center gap-2 text-base font-normal leading-none",children:[u,m]}),_[27]=m,_[28]=u,_[29]=g):g=_[29],_[30]!==B.helperIcon?(f=(0,et.jsx)("div",{className:"bg-muted flex h-[62px] w-[88px] items-center justify-center rounded-lg",children:(0,et.jsx)(P.Icons.ByName,{name:B.helperIcon})}),_[30]=B.helperIcon,_[31]=f):f=_[31],_[32]!==g||_[33]!==f?(p=(0,et.jsxs)("div",{className:"flex items-start justify-between",children:[g,f]}),_[32]=g,_[33]=f,_[34]=p):p=_[34],_[35]!==z||_[36]!==G?(S=(0,et.jsx)(eo,{label:"A",value:z,onValueChange:Y,segments:G}),_[35]=z,_[36]=G,_[37]=S):S=_[37],_[38]!==W||_[39]!==G?(y=(0,et.jsx)(eo,{label:"B",value:W,onValueChange:J,segments:G}),_[38]=W,_[39]=G,_[40]=y):y=_[40],_[41]!==ea?(h=()=>{ea()},_[41]=ea,_[42]=h):h=_[42],_[43]!==B.label||_[44]!==L?(b=L(B.label),_[43]=B.label,_[44]=L,_[45]=b):b=_[45],_[46]!==h||_[47]!==b?(v=(0,et.jsx)("div",{className:"flex justify-end pl-[34px]",children:(0,et.jsx)(P.Button,{"data-cy":"apply-logical-contour-operation",className:"border-primary/60 grow border",variant:"ghost",onClick:h,children:b})}),_[46]=h,_[47]=b,_[48]=v):v=_[48],_[49]===Symbol.for("react.memo_cache_sentinel")?(I=(0,et.jsx)(P.Separator,{className:"bg-input mt-2 h-[1px]"}),_[49]=I):I=_[49],_[50]===Symbol.for("react.memo_cache_sentinel")?(x=(0,et.jsx)(P.Switch,{id:"logical-contour-operations-create-new-segment-switch","data-cy":"logical-contour-create-new-segment-switch",onCheckedChange:Q}),_[50]=x):x=_[50],_[51]!==L?(w=L("Create a new segment"),_[51]=L,_[52]=w):w=_[52],_[53]!==w?(D=(0,et.jsxs)("div",{className:"flex items-center justify-start gap-2",children:[x,(0,et.jsx)(P.Label,{htmlFor:"logical-contour-operations-create-new-segment-switch",children:w})]}),_[53]=w,_[54]=D):D=_[54];let ec=K?"visible":"hidden";_[55]!==ec?(j=(0,P.cn)(ec),_[55]=ec,_[56]=j):j=_[56];let eu=!K;return _[57]!==L?(C=L("New segment name"),_[57]=L,_[58]=C):C=_[58],_[59]===Symbol.for("react.memo_cache_sentinel")?(E=e=>Z(e.target.value),_[59]=E):E=_[59],_[60]!==X||_[61]!==j||_[62]!==eu||_[63]!==C?(O=(0,et.jsx)("div",{className:"pl-9",children:(0,et.jsx)(P.Input,{className:j,disabled:eu,id:"logical-contour-operations-create-new-segment-input",type:"text",placeholder:C,value:X,onChange:E})}),_[60]=X,_[61]=j,_[62]=eu,_[63]=C,_[64]=O):O=_[64],_[65]!==D||_[66]!==O?(N=(0,et.jsxs)("div",{className:"flex flex-col gap-2",children:[D,O]}),_[65]=D,_[66]=O,_[67]=N):N=_[67],_[68]!==p||_[69]!==S||_[70]!==y||_[71]!==v||_[72]!==N?(U=(0,et.jsxs)("div",{className:"flex w-[245px] flex-col gap-4",children:[p,S,y,v,I,N]}),_[68]=p,_[69]=S,_[70]=y,_[71]=v,_[72]=N,_[73]=U):U=_[73],U},ec=function(){let e,n,r,s,i,l,c,u,d,m,g,f,p,S,y,h,b,v,I,x,w,D,j,C,E,O,N=(0,t.c)(60),[T,U]=(0,o.useState)(10),_=(0,a.useRunCommand)(),{t:R}=ee("SegmentationPanel");return N[0]!==R?(e=R("Fill contour holes"),N[0]=R,N[1]=e):e=N[1],N[2]!==e?(n=(0,et.jsx)("div",{children:e}),N[2]=e,N[3]=n):n=N[3],N[4]!==_?(r=()=>{_("removeContourHoles")},N[4]=_,N[5]=r):r=N[5],N[6]!==R?(s=R("Fill Holes"),N[6]=R,N[7]=s):s=N[7],N[8]!==r||N[9]!==s?(i=(0,et.jsx)(P.Button,{className:"border-primary/60 border",variant:"ghost",onClick:r,children:s}),N[8]=r,N[9]=s,N[10]=i):i=N[10],N[11]===Symbol.for("react.memo_cache_sentinel")?(l=(0,et.jsx)(P.Separator,{className:"bg-input mt-[20px] h-[1px]"}),N[11]=l):l=N[11],N[12]!==n||N[13]!==i?(c=(0,et.jsxs)("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none",children:[n,i,l]}),N[12]=n,N[13]=i,N[14]=c):c=N[14],N[15]!==R?(u=R("Remove Small Contours"),N[15]=R,N[16]=u):u=N[16],N[17]!==u?(d=(0,et.jsx)("div",{children:u}),N[17]=u,N[18]=d):d=N[18],N[19]!==R?(m=R("Area Threshold"),N[19]=R,N[20]=m):m=N[20],N[21]!==m?(g=(0,et.jsx)(P.Label,{htmlFor:"simplify-contour-options",className:"text-muted-foreground",children:m}),N[21]=m,N[22]=g):g=N[22],N[23]===Symbol.for("react.memo_cache_sentinel")?(f=e=>U(Number(e.target.value)),N[23]=f):f=N[23],N[24]!==T?(p=(0,et.jsx)(P.Input,{id:"simplify-contour-options",className:"w-20",type:"number",value:T,onChange:f}),N[24]=T,N[25]=p):p=N[25],N[26]!==g||N[27]!==p?(S=(0,et.jsxs)("div",{className:"flex items-center gap-2 self-end",children:[g,p]}),N[26]=g,N[27]=p,N[28]=S):S=N[28],N[29]!==T||N[30]!==_?(y=()=>{_("removeSmallContours",{areaThreshold:T})},N[29]=T,N[30]=_,N[31]=y):y=N[31],N[32]!==R?(h=R("Remove Small Contours"),N[32]=R,N[33]=h):h=N[33],N[34]!==y||N[35]!==h?(b=(0,et.jsx)(P.Button,{className:"border-primary/60 border",variant:"ghost",onClick:y,children:h}),N[34]=y,N[35]=h,N[36]=b):b=N[36],N[37]===Symbol.for("react.memo_cache_sentinel")?(v=(0,et.jsx)(P.Separator,{className:"bg-input mt-[20px] h-[1px]"}),N[37]=v):v=N[37],N[38]!==S||N[39]!==b||N[40]!==d?(I=(0,et.jsxs)("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none",children:[d,S,b,v]}),N[38]=S,N[39]=b,N[40]=d,N[41]=I):I=N[41],N[42]!==R?(x=R("Create New Segment from Holes"),N[42]=R,N[43]=x):x=N[43],N[44]!==x?(w=(0,et.jsx)("div",{children:x}),N[44]=x,N[45]=w):w=N[45],N[46]!==_?(D=()=>{_("convertContourHoles")},N[46]=_,N[47]=D):D=N[47],N[48]!==R?(j=R("Create New Segment"),N[48]=R,N[49]=j):j=N[49],N[50]!==D||N[51]!==j?(C=(0,et.jsx)(P.Button,{className:"border-primary/60 border",variant:"ghost",onClick:D,children:j}),N[50]=D,N[51]=j,N[52]=C):C=N[52],N[53]!==w||N[54]!==C?(E=(0,et.jsxs)("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none",children:[w,C]}),N[53]=w,N[54]=C,N[55]=E):E=N[55],N[56]!==I||N[57]!==E||N[58]!==c?(O=(0,et.jsxs)("div",{className:"flex w-auto w-[252px] flex-col gap-[8px] text-base font-normal leading-none",children:[c,I,E]}),N[56]=I,N[57]=E,N[58]=c,N[59]=O):O=N[59],O},eu=function(){let e,n,r,o,s,i,l,c,u,d,m,g,f,p,S=(0,t.c)(32),y=(0,a.useRunCommand)(),{t:h}=ee("SegmentationPanel");return S[0]!==h?(e=h("Smooth all edges"),S[0]=h,S[1]=e):e=S[1],S[2]!==e?(n=(0,et.jsx)("div",{children:e}),S[2]=e,S[3]=n):n=S[3],S[4]!==y?(r=()=>{y("smoothContours")},S[4]=y,S[5]=r):r=S[5],S[6]!==h?(o=h("Smooth Edges"),S[6]=h,S[7]=o):o=S[7],S[8]!==r||S[9]!==o?(s=(0,et.jsx)(P.Button,{className:"border-primary/60 border",variant:"ghost",onClick:r,children:o}),S[8]=r,S[9]=o,S[10]=s):s=S[10],S[11]===Symbol.for("react.memo_cache_sentinel")?(i=(0,et.jsx)(P.Separator,{className:"bg-input mt-[20px] h-[1px]"}),S[11]=i):i=S[11],S[12]!==n||S[13]!==s?(l=(0,et.jsxs)("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none",children:[n,s,i]}),S[12]=n,S[13]=s,S[14]=l):l=S[14],S[15]!==h?(c=h("Remove extra points"),S[15]=h,S[16]=c):c=S[16],S[17]!==c?(u=(0,et.jsx)("div",{children:c}),S[17]=c,S[18]=u):u=S[18],S[19]!==y?(d=()=>{y("decimateContours")},S[19]=y,S[20]=d):d=S[20],S[21]!==h?(m=h("Remove Points"),S[21]=h,S[22]=m):m=S[22],S[23]!==m||S[24]!==d?(g=(0,et.jsx)(P.Button,{className:"border-primary/60 border",variant:"ghost",onClick:d,children:m}),S[23]=m,S[24]=d,S[25]=g):g=S[25],S[26]!==g||S[27]!==u?(f=(0,et.jsxs)("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none",children:[u,g]}),S[26]=g,S[27]=u,S[28]=f):f=S[28],S[29]!==f||S[30]!==l?(p=(0,et.jsxs)("div",{className:"flex w-auto w-[245px] flex-col gap-[8px] text-base font-normal leading-none",children:[l,f]}),S[29]=f,S[30]=l,S[31]=p):p=S[31],p},ed=o.lazy(()=>Promise.resolve().then(S.bind(S,992))),em=e=>{let n,r,a=(0,t.c)(3);return a[0]===Symbol.for("react.memo_cache_sentinel")?(n=(0,et.jsx)("div",{children:"Loading..."}),a[0]=n):n=a[0],a[1]!==e?(r=(0,et.jsx)(o.Suspense,{fallback:n,children:(0,et.jsx)(ed,{...e})}),a[1]=e,a[2]=r):r=a[2],r},eg={id:n,getCommandsModule:({servicesManager:e,extensionManager:t,commandsManager:n})=>{let{segmentationService:r,displaySetService:o,viewportGridService:s,customizationService:i}=e.services,u={loadSegmentationsForViewport:async({segmentations:e,viewportId:t})=>{let n=(({viewportId:e,viewportGridService:t})=>{let{viewports:n,activeViewportId:r}=t.getState();return n.get(e||r)})({viewportId:t,viewportGridService:s}),a=n.displaySetInstanceUIDs[0],i=e[0],l=i.segmentationId,c=i.config.label,u=i.config.segments,d=o.getDisplaySetByUID(a);return await r.createLabelmapForDisplaySet(d,{segmentationId:l,segments:u,label:c}),r.addOrUpdateSegmentation(i),await r.addSegmentationRepresentation(n.viewportId,{segmentationId:l}),l},generateSegmentation:({segmentationId:e,options:n={}})=>{let o,s,u,d,{dataSource:S,...y}=n,h=c.segmentation.state.getSegmentation(e),v=y.predecessorImageId??h.predecessorImageId,I=S?t.getDataSourceDefinition(S):t.getActiveDataSourceDefinition(),x=I?.configuration?.segmentation?.store,w=h.representationData.Labelmap,D=(t,n,r,o)=>{let a=t.map(e=>l.cache.getImage(e)),s=[],i=r?new Map(r.map((e,t)=>[e,t])):void 0,c=0,u=new Set;for(let e of a){let t=i?i.get(e.referencedImageId)??-1:c++;if(t<0)continue;let n=e.getPixelData(),r=function(e,t,n){let r=new Set;for(let t=0;t<e.length;t++){let n=e[t];0!==n&&r.add(n)}return t?Array.from(r).filter(e=>!!t[e]||(n?.add(e),!1)):Array.from(r)}(n,o,u);if(!r.length)continue;let{rows:a,columns:l}=e;s[t]={segmentsOnLabelmap:r,pixelData:n,rows:a,columns:l}}return u.forEach(t=>console.warn(`Label value ${t} of segmentation ${e} has no segment. The SEG export does not include its voxels.`)),{segmentsOnLabelmap:Array.from(new Set(s.filter(Boolean).map(e=>e.segmentsOnLabelmap).flat())),metadata:n,labelmaps2D:s,labelToSegmentIndex:function(e,t){if(!e)return;let n={...e};return t.forEach(e=>{n[e]=0}),n}(o,u)}},j=r.getSegmentation(e),C=r.getRepresentationsForSegmentation(e),E=[];Object.entries(j.segments).forEach(([t,n])=>{if(!n)return;let{label:o}=n,a=C[0],s=r.getSegmentColor(a.viewportId,e,n.segmentIndex),i=m().data.Colors.rgb2DICOMLAB(s.slice(0,3).map(e=>e/255)).map(e=>Math.round(e));E[t]={SegmentNumber:t.toString(),SegmentLabel:o,SegmentAlgorithmType:n?.algorithmType||"MANUAL",SegmentAlgorithmName:n?.algorithmName||"OHIF Brush",RecommendedDisplayCIELabValue:i,SegmentedPropertyCategoryCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"},SegmentedPropertyTypeCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"}}});let O=w.labelmaps?Object.values(w.labelmaps):void 0,N=(e,t)=>{let n=l.cache.getImage(e);if(!n)throw Error(`Referenced source image not in cache for segmentation slice ${t} (referencedImageId: ${e}). Ensure the referenced series is fully loaded before storing.`);return n};if(O&&O.length>1){let e=O[0].referencedImageIds??w.referencedImageIds??[];o=e.map(N),s=O.map(t=>D(t.imageIds??[],E,e,t.labelToSegmentIndex))}else{let{imageIds:e,labelToSegmentIndex:t,layerWithoutImageIds:n}=T.utils.getSingleLayerExportSource(w);n&&console.warn(`Labelmap layer ${n.labelmapId} has no image ids. The SEG export uses the segmentation image ids with the label map of that layer.`),o=e.map(e=>l.cache.getImage(e)).map((e,t)=>N(e.referencedImageId,t)),s=D(e,E,void 0,t)}let _="predecessorImageId"in y?y.predecessorImageId:v,{date:R,time:P}=a.utils.getCurrentDicomDateTime(),A={predecessorImageId:v,ContentDate:R,ContentTime:P,..._?{}:{SeriesDate:R,SeriesTime:P},...(u="bitmap"===b(i,x)?f:g,{sopClassUID:u,transferSyntaxUID:d=x?.transferSyntaxUID??i?.getCustomization("segmentation.store.transferSyntaxUID")??p,transferSyntaxUid:d}),...y};return O&&O.length>1&&A.sopClassUID===g&&(console.warn("generateSegmentation: overlapping segments cannot be stored as a LABELMAP SEG; switching to the binary SEG encoding for this store."),A.sopClassUID=f),U(o,s,l.metaData,A)},downloadSegmentation:({segmentationId:e})=>{let t=r.getSegmentation(e),o=u.generateSegmentation({segmentationId:e});n.runCommand("createStoreFunction",{dataSource:"download",defaultFileName:`${t.label}.dcm`})(o.dataset)},storeSegmentation:async({segmentationId:o,dataSource:s,modality:i="SEG"})=>{let l=r.getSegmentation(o);if(!l)throw Error("No segmentation found");let{label:c,predecessorImageId:d,labelIsGenerated:m}=l,g=m&&c||("RTSTRUCT"===i?"Contours":"Segmentation"),{value:f,dataSourceName:p,series:S,seriesNumber:y,action:h}=await (0,N.createReportDialogPrompt)({servicesManager:e,extensionManager:t,predecessorImageId:d,title:"RTSTRUCT"===i?"Save Contours":"Save Segmentation",modality:i,itemName:m?"":c||"",defaultSeriesDescription:g,enableDownload:!0});if(1!==h)return;let b="RTSTRUCT"===i?`rtss-${o}.dcm`:`${c||"segmentation"}.dcm`,v=n.runCommand("createStoreFunction",{dataSource:p,defaultFileName:b});if(!v)throw Error(`No valid store for dataSource: ${p}`);try{let e={segmentationId:o,options:{dataSource:p,SeriesDescription:S?void 0:f||c||g,SeriesNumber:S?void 0:y,predecessorImageId:S}},t="SEG"===i&&u.generateSegmentation(e)||"RTSTRUCT"===i&&u.generateContour(e),n=await t;if(!n?.dataset)throw Error("Error during segmentation generation");let{dataset:r}=n;return a.utils.updateNewInstanceMetadata(r),"No Study ID"===r.StudyID&&(r.StudyID=""),await v(r,{}),r}catch(e){throw console.debug("Error storing segmentation:",e),e}},generateContour:async e=>{let{segmentationId:t,options:n}=e,{dataSource:o,...s}=n??{},i=r.getSegmentation(t),l=r.getRepresentationsForSegmentation(t)[0];Object.entries(i.segments).forEach(([e,n])=>{n.color=r.getSegmentColor(l.viewportId,t,Number(e))});let c=s.predecessorImageId??i.predecessorImageId,{date:u,time:d}=a.utils.getCurrentDicomDateTime();return{dataset:await _(i,{predecessorImageId:c,StructureSetDate:u,StructureSetTime:d,...s})}},downloadRTSS:async e=>{let{dataset:t}=await u.generateContour(e),{InstanceNumber:r=1,SeriesInstanceUID:o}=t,a=n.runCommand("createStoreFunction",{dataSource:"download",defaultFileName:`rtss-${o}-${r}.dcm`});await a(t)},toggleActiveSegmentationUtility:({itemId:e})=>{let{uiState:t,setUIState:n}=N.useUIStateStore.getState(),r=t.activeSegmentationUtility===e;console.log("toggleActiveSegmentationUtility",r,e),n("activeSegmentationUtility",r?null:e)}},d={loadSegmentationsForViewport:u.loadSegmentationsForViewport,generateSegmentation:u.generateSegmentation,downloadSegmentation:u.downloadSegmentation,storeSegmentation:u.storeSegmentation,downloadRTSS:u.downloadRTSS,toggleActiveSegmentationUtility:u.toggleActiveSegmentationUtility};return{actions:u,definitions:d,defaultContext:"SEGMENTATION"}},getCustomizationModule:function(){return[{name:"default",value:R}]},getToolbarModule:function({servicesManager:e}){let{segmentationService:t,toolbarService:n,toolGroupService:r}=e.services;return[{name:"cornerstone.SimplifyContourOptions",defaultComponent:ec},{name:"cornerstone.LogicalContourOperationsOptions",defaultComponent:el},{name:"cornerstone.SmoothContoursOptions",defaultComponent:eu},{name:"cornerstone.isActiveSegmentationUtility",evaluate:({button:e})=>{let{uiState:t}=N.useUIStateStore.getState();return{isActive:t.activeSegmentationUtility===e.id}}},{name:"evaluate.cornerstone.hasSegmentation",evaluate:({viewportId:e})=>{let n=t.getSegmentationRepresentations(e);return{disabled:!n?.length}}},{name:"evaluate.cornerstone.hasSegmentationOfType",evaluate:({viewportId:e,segmentationRepresentationType:n})=>{let r=t.getSegmentationRepresentations(e);return r?.length?r.some(e=>e.type===n)?void 0:{disabled:!0,disabledText:`No ${n} segmentations available`}:{disabled:!0,disabledText:i().t("SegmentationPanel:No segmentations available")}}},{name:"evaluate.cornerstone.segmentation",evaluate:({viewportId:e,button:o,toolNames:a,disabledText:s})=>{let l=t.getSegmentationRepresentations(e);if(!l?.length)return{disabled:!0,disabledText:s??i().t("SegmentationPanel:No segmentations available")};if(!Object.keys(t.getActiveSegmentation(e).segments).length)return{disabled:!0,disabledText:i().t("SegmentationPanel:Add segment to enable this tool")};let c=r.getToolGroupForViewport(e);if(!c)return{disabled:!0,disabledText:s??i().t("SegmentationPanel:Not available on the current viewport")};if(!a)return{disabled:!1};let u=n.getToolNameForButton(o);return c.hasTool(u)||a?{disabled:!1,isActive:a?a.includes(c.getActivePrimaryMouseButtonTool()):c.getActivePrimaryMouseButtonTool()===u}:{disabled:!0,disabledText:s??i().t("SegmentationPanel:Not available on the current viewport")}}},{name:"evaluate.cornerstone.segmentation.synchronizeDrawingRadius",evaluate:({button:e,radiusOptionId:t})=>{let o=r.getToolGroupIds();if(o?.length)for(let r of o){let o=c.utilities.segmentation.getBrushSizeForToolGroup(r);o&&(n.getOptionById(e,t).value=o)}}}]},getViewportModule:({servicesManager:e,extensionManager:n,commandsManager:r})=>[{name:"dicom-seg",component:o=>{let a,s=(0,t.c)(2);return s[0]!==o?(a=(0,et.jsx)(em,{servicesManager:e,extensionManager:n,commandsManager:r,...o}),s[0]=o,s[1]=a):a=s[1],a}}],getSopClassHandlerModule:function(e){let{servicesManager:t,extensionManager:n}=e;return[{name:"dicom-seg",sopClassUids:I,getDisplaySetsFromSeries:e=>(function(e,t,n){a.utils.sortStudyInstances(e);let o=e[e.length-1],{StudyInstanceUID:s,SeriesInstanceUID:l,SOPInstanceUID:u,SeriesDescription:d="",SeriesNumber:m,SOPClassUID:g,FrameOfReferenceUID:f,wadoRoot:p,wadoUri:S,wadoUriRoot:y,imageId:h}=o,{SeriesDate:b,SeriesTime:v}=a.utils.getLatestInstanceDateTime(o),w={Modality:"SEG",loading:!1,isReconstructable:!1,displaySetInstanceUID:a.utils.guid(),SeriesDescription:d,SeriesNumber:m,SeriesDate:b,SeriesTime:v,SOPInstanceUID:u,SeriesInstanceUID:l,StudyInstanceUID:s,SOPClassHandlerId:r,SOPClassUID:g,FrameOfReferenceUID:f,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,segments:{},sopClassUids:I,instance:o,predecessorImageId:h,instances:[o],wadoRoot:p,wadoUriRoot:y,wadoUri:S,isOverlayDisplaySet:!0,label:d||`${i().t("Series")} ${m} - ${i().t("SEG")}`},D=o.ReferencedSeriesSequence;if(!D)return void console.error("ReferencedSeriesSequence is missing for the SEG");let j=D[0]||D;w.referencedImages=o.ReferencedSeriesSequence.ReferencedInstanceSequence,w.referencedSeriesInstanceUID=j.SeriesInstanceUID;let{displaySetService:C}=t.services,O=C.getDisplaySetsForReferences(o.ReferencedSeriesSequence);O?.length>1&&console.warn("Segmentation does not currently handle references to multiple series, defaulting to first series");let N=O[0];if(N)w.referencedDisplaySetInstanceUID=N.displaySetInstanceUID,w.isReconstructable=N.isReconstructable,w.FrameOfReferenceUID=N.FrameOfReferenceUID;else{let{unsubscribe:e}=C.subscribe(C.EVENTS.DISPLAY_SETS_ADDED,({displaySetsAdded:t})=>{let n=t[0];n.SeriesInstanceUID===w.referencedSeriesInstanceUID&&(w.referencedDisplaySetInstanceUID=n.displaySetInstanceUID,w.isReconstructable=n.isReconstructable,w.FrameOfReferenceUID=n.FrameOfReferenceUID,e())})}return w.load=async({headers:e})=>await function(e,t,n,r){var o;let{SOPInstanceUID:a}=e,{segmentationService:s}=t.services;return(e.loading||e.isLoaded)&&x[a]&&(o=e,c.segmentation.state.getSegmentation(o.displaySetInstanceUID))||(e.loading=!0,x[a]=new Promise(async(o,a)=>{if(!e.segments||0===Object.keys(e.segments).length)try{await E({extensionManager:n,servicesManager:t,segDisplaySet:e,headers:r})}catch(t){return e.loading=!1,a(t)}s.createSegmentationForSEGDisplaySet(e).then(()=>{e.loading=!1,o()}).catch(t=>{e.loading=!1,a(t)})}),e.loadingPromise=x[a]),x[a]}(w,t,n,e),[w]})(e,t,n)}]},getHangingProtocolModule:function(){return[{name:O.id,protocol:O}]}}})(),y=S.O(y)})());
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@ohif/core"),require("@cornerstonejs/adapters"),require("@ohif/extension-cornerstone"),require("@ohif/ui-next"),require("@cornerstonejs/adapters/version"),require("@cornerstonejs/core"),require("@cornerstonejs/tools/utilities"),require("dcmjs"),require("@ohif/i18n"),require("@cornerstonejs/tools"),require("@cornerstonejs/tools/enums"),require("@ohif/core/src/contextProviders/SystemProvider"),require("@ohif/extension-default")):"function"==typeof define&&define.amd?define(["@ohif/core","@cornerstonejs/adapters","@ohif/extension-cornerstone","@ohif/ui-next","@cornerstonejs/adapters/version","@cornerstonejs/core","@cornerstonejs/tools/utilities","dcmjs","@ohif/i18n","@cornerstonejs/tools","@cornerstonejs/tools/enums","@ohif/core/src/contextProviders/SystemProvider","@ohif/extension-default"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-seg"]=t(require("@ohif/core"),require("@cornerstonejs/adapters"),require("@ohif/extension-cornerstone"),require("@ohif/ui-next"),require("@cornerstonejs/adapters/version"),require("@cornerstonejs/core"),require("@cornerstonejs/tools/utilities"),require("dcmjs"),require("@ohif/i18n"),require("@cornerstonejs/tools"),require("@cornerstonejs/tools/enums"),require("@ohif/core/src/contextProviders/SystemProvider"),require("@ohif/extension-default")):e["ohif-extension-cornerstone-dicom-seg"]=t(e["@ohif/core"],e["@cornerstonejs/adapters"],e["@ohif/extension-cornerstone"],e["@ohif/ui-next"],e["@cornerstonejs/adapters/version"],e["@cornerstonejs/core"],e["@cornerstonejs/tools/utilities"],e.dcmjs,e["@ohif/i18n"],e["@cornerstonejs/tools"],e["@cornerstonejs/tools/enums"],e["@ohif/core/src/contextProviders/SystemProvider"],e["@ohif/extension-default"])}(globalThis,(e,t,n,r,o,a,s,i,l,c,u,d,m)=>(()=>{var g,f,p={992(e,t,n){"use strict";n.r(t),n.d(t,{default:()=>d});var r=n(184),o=n(326),a=n(55);let s=function({commandsManager:e,toolGroupService:t,customizationService:n,toolGroupId:r}){let o=n.getCustomization("cornerstone.overlayViewportTools"),a=e.run("initializeSegmentLabelTool",{tools:o});return t.createToolGroupAndAddTools(r,a)};var i=n(669),l=n(404),c=n(492),u=n(870);let d=function(e){let t,n,d,m,g,f,p,S,y,h,b,v,I,x,w=(0,r.c)(51),{servicesManager:D,commandsManager:j}=(0,c.useSystem)(),{children:C,displaySets:E,viewportOptions:O}=e,N=O.viewportId,{displaySetService:T,toolGroupService:U,segmentationService:_,customizationService:R}=D.services;w[0]!==R?(t=R.getCustomization("ui.loadingIndicatorTotalPercent"),w[0]=R,w[1]=t):t=w[1];let P=t,A=`SEGToolGroup-${N}`;if(E.length>1)throw Error("SEG viewport should only have a single display set");let L=E[0],[M,F]=(0,a.useViewportGrid)(),{setPositionPresentation:G}=(0,i.usePositionPresentationStore)(),[k,q]=(0,o.useState)(!L.isLoaded);w[2]===Symbol.for("react.memo_cache_sentinel")?(n={percentComplete:null,totalSegments:null},w[2]=n):n=w[2];let[$,V]=(0,o.useState)(n),{viewports:B,activeViewportId:H}=M,z=L.referencedDisplaySetInstanceUID,W=!1;if(!z){let e=R.getCustomization("missingReferenceDisplaySetHandler");"function"==typeof e?{handled:W}=e():(console.log("No customization 'missingReferenceDisplaySetHandler' registered. Skipping SEG rendering."),W=!0)}let Y=z?T.getDisplaySetByUID(z):void 0;w[3]!==H||w[4]!==j||w[5]!==L||w[6]!==k||w[7]!==D||w[8]!==N?(d=()=>{k||N===H&&function({servicesManager:e,segDisplaySet:t,viewportId:n,preHydrateCallbacks:r,hydrateCallback:o}){i.utils.promptHydrationDialog({servicesManager:e,viewportId:n,displaySet:t,preHydrateCallbacks:r,hydrateCallback:o,type:"SEG"})}({servicesManager:D,viewportId:N,segDisplaySet:L,hydrateCallback:async()=>(await j.runCommand("hydrateSecondaryDisplaySet",{displaySet:L,viewportId:N}),!0)})},m=[D,N,L,k,j,H],w[3]=H,w[4]=j,w[5]=L,w[6]=k,w[7]=D,w[8]=N,w[9]=d,w[10]=m):(d=w[9],m=w[10]),(0,o.useEffect)(d,m),w[11]!==L||w[12]!==_||w[13]!==G||w[14]!==N||w[15]!==O?(g=()=>{_.clearSegmentationRepresentations(N);let{unsubscribe:e}=_.subscribe(_.EVENTS.SEGMENTATION_LOADING_COMPLETE,e=>{if(e.segDisplaySet?.displaySetInstanceUID===L?.displaySetInstanceUID&&q(!1),L?.firstSegmentedSliceImageId&&O?.presentationIds){let{firstSegmentedSliceImageId:e}=L,{presentationIds:t}=O;G(t.positionPresentationId,{viewReference:{referencedImageId:e}})}});return()=>{e()}},w[11]=L,w[12]=_,w[13]=G,w[14]=N,w[15]=O,w[16]=g):g=w[16],w[17]!==L?(f=[L],w[17]=L,w[18]=f):f=w[18],(0,o.useEffect)(g,f),w[19]!==_?(p=()=>{let{unsubscribe:e}=_.subscribe(_.EVENTS.SEGMENT_LOADING_COMPLETE,e=>{let{percentComplete:t,numSegments:n}=e;V({percentComplete:t,totalSegments:n})});return()=>{e()}},w[19]=_,w[20]=p):p=w[20],w[21]!==L?(S=[L],w[21]=L,w[22]=S):S=w[22],(0,o.useEffect)(p,S),w[23]!==H||w[24]!==T||w[25]!==F||w[26]!==B?(y=()=>{let e=T.subscribe(T.EVENTS.DISPLAY_SETS_REMOVED,e=>{let{displaySetInstanceUIDs:t}=e,n=B.get(H);t.includes(n.displaySetInstanceUID)&&F.setDisplaySetsForViewport({viewportId:H,displaySetInstanceUIDs:[]})});return()=>{e.unsubscribe()}},w[23]=H,w[24]=T,w[25]=F,w[26]=B,w[27]=y):y=w[27],w[28]===Symbol.for("react.memo_cache_sentinel")?(h=[],w[28]=h):h=w[28],(0,o.useEffect)(y,h),w[29]!==j||w[30]!==R||w[31]!==L||w[32]!==_||w[33]!==A||w[34]!==U||w[35]!==N?(b=()=>{if(!U.getToolGroup(A))return j.runCommand("updateStoredSegmentationPresentation",{displaySet:L,type:l.SegmentationRepresentations.Labelmap}),_.clearSegmentationRepresentations(N),s({commandsManager:j,toolGroupService:U,customizationService:R,toolGroupId:A}),()=>{_.clearSegmentationRepresentations(N),U.destroyToolGroup(A)}},w[29]=j,w[30]=R,w[31]=L,w[32]=_,w[33]=A,w[34]=U,w[35]=N,w[36]=b):b=w[36],w[37]===Symbol.for("react.memo_cache_sentinel")?(v=[],w[37]=v):v=w[37],(0,o.useEffect)(b,v);let J=null;if(W||!Y)return null;if(C&&C.length){let e;if(w[38]!==C||w[39]!==N){let t;w[41]!==N?(t=(e,t)=>e&&o.cloneElement(e,{viewportId:N,key:t}),w[41]=N,w[42]=t):t=w[42],e=C.map(t),w[38]=C,w[39]=N,w[40]=e}else e=w[40];J=e}w[43]!==P||w[44]!==$||w[45]!==k?(I=k&&(0,u.jsx)(P,{className:"h-full w-full",totalNumbers:$.totalSegments,percentComplete:$.percentComplete,loadingText:"Loading SEG..."}),w[43]=P,w[44]=$,w[45]=k,w[46]=I):I=w[46];let K=(0,u.jsx)(i.OHIFCornerstoneViewport,{...e,displaySets:[Y,L],viewportOptions:{viewportType:O.viewportType,toolGroupId:A,orientation:O.orientation,viewportId:O.viewportId,presentationIds:O.presentationIds},onElementEnabled:t=>{e.onElementEnabled?.(t)}});return w[47]!==J||w[48]!==I||w[49]!==K?(x=(0,u.jsx)(u.Fragment,{children:(0,u.jsxs)("div",{className:"relative flex h-full w-full flex-row overflow-hidden",children:[I,K,J]})}),w[47]=J,w[48]=I,w[49]=K,w[50]=x):x=w[50],x}},76(e,t,n){"use strict";var r=n(326).__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;t.c=function(e){return r.H.useMemoCache(e)}},60(e,t){"use strict";var n=Symbol.for("react.transitional.element");function r(e,t,r){var o=null;if(void 0!==r&&(o=""+r),void 0!==t.key&&(o=""+t.key),"key"in t)for(var a in r={},t)"key"!==a&&(r[a]=t[a]);else r=t;return{$$typeof:n,type:e,key:o,ref:void 0!==(t=r.ref)?t:null,props:r}}t.Fragment=Symbol.for("react.fragment"),t.jsx=r,t.jsxs=r},391(e,t){"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=(Symbol.for("react.fragment"),Symbol.for("react.strict_mode"),Symbol.for("react.profiler"),Symbol.for("react.consumer")),a=Symbol.for("react.context"),s=(Symbol.for("react.forward_ref"),Symbol.for("react.suspense")),i=(Symbol.for("react.memo"),Symbol.for("react.lazy")),l=(Symbol.for("react.activity"),Symbol.iterator),c={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},u=Object.assign,d={};function m(e,t,n){this.props=e,this.context=t,this.refs=d,this.updater=n||c}function g(){}function f(e,t,n){this.props=e,this.context=t,this.refs=d,this.updater=n||c}m.prototype.isReactComponent={},m.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("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")},m.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},g.prototype=m.prototype;var p=f.prototype=new g;p.constructor=f,u(p,m.prototype),p.isPureReactComponent=!0;var S={H:null,A:null,T:null,S:null},y=Object.prototype.hasOwnProperty;function h(e,t,r){var o=r.ref;return{$$typeof:n,type:e,key:t,ref:void 0!==o?o:null,props:r}}function b(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}"function"==typeof reportError&&reportError,t.Suspense=s,t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=S,t.cloneElement=function(e,t,n){if(null==e)throw Error("The argument must be a React element, but you passed "+e+".");var r=u({},e.props),o=e.key;if(null!=t)for(a in void 0!==t.key&&(o=""+t.key),t)y.call(t,a)&&"key"!==a&&"__self"!==a&&"__source"!==a&&("ref"!==a||void 0!==t.ref)&&(r[a]=t[a]);var a=arguments.length-2;if(1===a)r.children=n;else if(1<a){for(var s=Array(a),i=0;i<a;i++)s[i]=arguments[i+2];r.children=s}return h(e.type,o,r)},t.createContext=function(e){return(e={$$typeof:a,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:o,_context:e},e},t.lazy=function(e){return{$$typeof:i,_payload:{_status:-1,_result:e},_init:b}},t.useContext=function(e){return S.H.useContext(e)},t.useEffect=function(e,t){return S.H.useEffect(e,t)},t.useRef=function(e){return S.H.useRef(e)},t.useState=function(e){return S.H.useState(e)}},184(e,t,n){"use strict";e.exports=n(76)},326(e,t,n){"use strict";e.exports=n(391)},870(e,t,n){"use strict";e.exports=n(60)},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(e){"use strict";e.exports=t},833(e){"use strict";e.exports=o},557(e){"use strict";e.exports=a},713(e){"use strict";e.exports=c},404(e){"use strict";e.exports=u},154(e){"use strict";e.exports=s},2(t){"use strict";t.exports=e},492(e){"use strict";e.exports=d},669(e){"use strict";e.exports=n},438(e){"use strict";e.exports=m},545(e){"use strict";e.exports=l},55(e){"use strict";e.exports=r},111(e){"use strict";e.exports=i}},S={};function y(e){var t=S[e];if(void 0!==t)return t.exports;var n=S[e]={exports:{}};return p[e](n,n.exports,y),n.exports}y.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return y.d(t,{a:t}),t},y.d=(e,t)=>{for(var n in t)y.o(t,n)&&!y.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},y.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),y.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},g=[],y.O=(e,t,n,r)=>{if(t){r=r||0;for(var o=g.length;o>0&&g[o-1][2]>r;o--)g[o]=g[o-1];g[o]=[t,n,r];return}for(var a=1/0,o=0;o<g.length;o++){for(var[t,n,r]=g[o],s=!0,i=0;i<t.length;i++)(!1&r||a>=r)&&Object.keys(y.O).every(e=>y.O[e](t[i]))?t.splice(i--,1):(s=!1,r<a&&(a=r));if(s){g.splice(o--,1);var l=n();void 0!==l&&(e=l)}}return e},y.F={},y.E=e=>{Object.keys(y.F).map(t=>{y.F[t](e)})},f={509:0},y.F.j=e=>{if(!y.o(f,e)||void 0===f[e]){f[e]=null;var t=document.createElement("link");y.nc&&t.setAttribute("nonce",y.nc),t.rel="prefetch",t.as="script",t.href=y.p+y.u(e),document.head.appendChild(t)}},y.O.j=e=>0===f[e],y.O(0,[509],()=>{[509].map(y.E)},5);var h={};return(()=>{"use strict";y.r(h),y.d(h,{default:()=>ef});var e,t=y(184);let n=JSON.parse('{"UU":"@ohif/extension-cornerstone-dicom-seg"}').UU,r=`${n}.sopClassHandlerModule.dicom-seg`;var o=y(326),a=y(2),s=y(545),i=y.n(s),l=y(557),c=y(713),u=y(142),d=y(111),m=y.n(d);let g="1.2.840.10008.5.1.4.1.1.66.7",f="1.2.840.10008.5.1.4.1.1.66.4",p="1.2.840.10008.1.2.5",S="labelmap";function b(e,t){return"bitmap"===(t?.defaultMode??e?.getCustomization("segmentation.store.defaultMode")??S)?"bitmap":"labelmap"}function v(e){return/^(wadouri:|dicomfile:|dicomweb:)/.test(e)}let I=["1.2.840.10008.5.1.4.1.1.66.4","1.2.840.10008.5.1.4.1.1.66.7"],x={},w="[SEG load]";function D(e){if(null!=e)return Array.isArray(e)?e[0]:e}function j(e){let t=Number(e.NumberOfFrames);if(t>0)return t;let n=e.PerFrameFunctionalGroupsSequence;return Array.isArray(n)&&n.length>0?n.length:1}function C(e,t){if(!e||(!function(e,t){if(!e)return;let n=a.classes.MetadataProvider,r=t.StudyInstanceUID,o=t.SeriesInstanceUID,s=t.SOPInstanceUID||t.SopInstanceUID;if(r&&o&&s){let t;n.addImageIdToUIDs(e,{StudyInstanceUID:r,SeriesInstanceUID:o,SOPInstanceUID:s,frameNumber:(t=e.match(/(?:&|\?)frame=(\d+)/))?Number(t[1]):1})}}(e,t),l.metaData.get("instance",e)))return;let n=t.StudyInstanceUID,r=t.SeriesInstanceUID,o=t.SOPInstanceUID||t.SopInstanceUID,s=n&&r&&o?a.DicomMetadataStore.getInstance(n,r,o):void 0;a.classes.MetadataProvider.addCustomMetadata(e,"instance",s||t)}async function E({extensionManager:e,servicesManager:t,segDisplaySet:n}){var r;let o,s,i,{segmentationService:d,uiNotificationService:p,customizationService:S}=t.services,y=n.instance,h=function(e,t){let n,r=t.StudyInstanceUID,o=t.SeriesInstanceUID,s=t.SOPInstanceUID||t.SopInstanceUID;if(r&&o&&s){let e=a.DicomMetadataStore.getInstance(r,o,s);n=e?.url}if((n=n||t.url)&&v(n)){let t=e.getDataSources("dicomlocal");if(t?.[0])return t[0]}return e.getActiveDataSource()[0]}(e,y),I=(i=j(y),D(h.getImageIdsForInstance?.({instance:y,frame:i>1?1:void 0})));if(!I)throw Error("Could not get imageId for SEG instance (no local wadouri url and getImageIdsForInstance returned nothing).");let x=t.services.displaySetService.getDisplaySetByUID(n.referencedDisplaySetInstanceUID);if(!x)throw Error("referencedDisplaySet is missing for SEG");let{imageIds:O}=x;if(O?.length||(O=h.getImageIdsForDisplaySet?.(x)),O?.length||(O=x.images?.map(e=>e.imageId)),!O?.length)throw Error("referencedDisplaySet has no imageIds");n.referencedImageIds=O,x.imageIds?.length||(x.imageIds=O);let N=function(e,t,n){let r=j(t),o=function(e,t){let n=e.match(/(.*\/frames\/)(\d+)(.*)$/);if(!n||t<=1)return[e];let r=n[1],o=n[3]||"",a=[];for(let e=1;e<=t;e++)a.push(`${r}${e}${o}`);return a}(e,r);if(o.length>1)return o;if(r<=1)return[e];let a=[];for(let e=1;e<=r;e++){let r=D(n.getImageIdsForInstance?.({instance:t,frame:e}));r&&a.push(r)}return a.length?a:[e]}(I,n.instance,h),T=v(I)?function(e){let t=e.indexOf("?");if(-1===t)return e;let n=e.slice(0,t),r=e.slice(t+1).split("&").filter(e=>"frame"!==e.split("=")[0]).join("&");return r?`${n}?${r}`:n}(I):I;!function({segDisplaySet:e,segImageIdStr:t,frameImageIds:n,referencedImageIds:r}){let o=e.instance,s=Number(o?.NumberOfFrames)||1;a.log.debug(w,"Loading SEG pixel data",{SOPInstanceUID:e.SOPInstanceUID,SeriesInstanceUID:e.SeriesInstanceUID,SOPClassUID:e.SOPClassUID,NumberOfFrames:s,segmentCount:Object.keys(e.segments||{}).length,referencedDisplaySetInstanceUID:e.referencedDisplaySetInstanceUID,referencedImageIdCount:r.length,referencedImageIds:r,segImageIdForMetadata:t,frameImageIds:n,loadSegFramesIndividually:n.length>1})}({segDisplaySet:n,segImageIdStr:T,frameImageIds:N,referencedImageIds:O}),C(T,y),N.forEach(e=>C(e,y));let U=e=>{let{percentComplete:t}=e.detail;d._broadcastEvent(d.EVENTS.SEGMENT_LOADING_COMPLETE,{percentComplete:t})};l.eventTarget.addEventListener(u.Enums.Events.SEGMENTATION_LOAD_PROGRESS,U),(h?.getConfig?.()?.loadMultiframeAsPart10??S?.getCustomization?.("cornerstone.segmentation.loadMultiframeAsPart10")??!0)&&(o=h.retrieve?.prefetchInstanceFrames?.({instance:y,imageId:T}),o?.done&&await o.done);try{s=await u.adaptersSEG.Cornerstone3D.Segmentation.createFromDicomSegImageId(O,T,{metadataProvider:l.metaData,tolerance:.001,parserType:(r=n.SOPClassUID,r===g?"labelmap":r===f?"bitmap":b(S)),frameImageIds:N,concurrency:16})}finally{l.eventTarget.removeEventListener(u.Enums.Events.SEGMENTATION_LOAD_PROGRESS,U),o?.cancel?.()}let _=!0;s.segMetadata.data.forEach((e,t)=>{if(t>0)if(e.rgba=e.RecommendedDisplayCIELabValue,e.rgba){var n;n=e.rgba,e.rgba=m().data.Colors.dicomlab2RGB(n).map(e=>Math.round(255*e))}else _=!1,e.rgba=c.CONSTANTS.COLOR_LUT[t%c.CONSTANTS.COLOR_LUT.length]}),_||p.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,s);let R=s.labelMapImages?.flat().map(e=>e.imageId);a.log.debug(w,"SEG parse complete",{SOPInstanceUID:n.SOPInstanceUID,labelMapImageCount:R?.length??0,labelMapImageIds:R,segmentIndices:Object.keys(n.segments||{})})}let O={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"}]}]}]};var N=y(833),T=y(438),U=y(669);let{Cornerstone3D:{Segmentation:{generateSegmentation:_}}}=u.adaptersSEG,{Cornerstone3D:{RTSS:{generateRTSSFromRepresentation:R}}}=u.adaptersRT,P={"segmentation.store.defaultMode":S,"segmentation.store.transferSyntaxUID":p,"segmentation.segmentLabel":{enabledByDefault:!1,hoverTimeout:1}};var A=y(55),L=y(154);function M(e){return(M="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})(e)}function F(e){var t=function(e,t){if("object"!=M(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=M(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==M(t)?t:t+""}y(741),Object.create(null);var G=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,k={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},q=function(e){return k[e]},$={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(G,q)}},V=(0,o.createContext)(),B=function(){var e;function t(){if(!(this instanceof t))throw TypeError("Cannot call a class as a function");this.usedNamespaces={}}return 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)}}],function(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,F(r.key),r)}}(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t}();function H(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 z(){if(console&&console.warn){for(var e,t=arguments.length,n=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 W={};function Y(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&W[t[0]]||("string"==typeof t[0]&&(W[t[0]]=new Date),z.apply(void 0,t))}var J=function(e,t){return function(){e.isInitialized?t():e.on("initialized",function n(){setTimeout(function(){e.off("initialized",n)},0),t()})}};function K(e,t,n){e.loadNamespaces(t,J(e,n))}function Q(e,t,n,r){"string"==typeof n&&(n=[n]),n.forEach(function(t){0>e.options.ns.indexOf(t)&&e.options.ns.push(t)}),e.loadLanguages(t,J(e,r))}function X(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Z(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?X(Object(n),!0).forEach(function(t){var r,o;r=t,o=n[t],(r=F(r))in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):X(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var ee=function(e,t){var n=(0,o.useRef)();return(0,o.useEffect)(function(){n.current=t?n.current:e},[e,t]),n.current};function et(t){var n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=r.i18n,s=(0,o.useContext)(V)||{},i=s.i18n,l=s.defaultNS,c=a||i||e;if(c&&!c.reportNamespaces&&(c.reportNamespaces=new B),!c){Y("You will need to pass in an i18next instance by using initReactI18next");var u=function(e,t){return"string"==typeof t?t:t&&"object"===M(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},d=[u,{},!1];return d.t=u,d.i18n={},d.ready=!1,d}c.options.react&&void 0!==c.options.react.wait&&Y("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var m=Z(Z(Z({},$),c.options.react),r),g=m.useSuspense,f=m.keyPrefix,p=t||l||c.options&&c.options.defaultNS;p="string"==typeof p?[p]:p||["translation"],c.reportNamespaces.addUsedNamespaces&&c.reportNamespaces.addUsedNamespaces(p);var S=(c.isInitialized||c.initializedStoreOnce)&&p.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?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):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}}):(Y("i18n.languages were undefined or empty",t.languages),!0)}(e,c,m)});function y(){return c.getFixedT(r.lng||null,"fallback"===m.nsMode?p:p[0],f)}var h=function(e){if(Array.isArray(e))return e}(n=(0,o.useState)(y))||function(e){var t=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,r,o,a,s=[],i=!0,l=!1;try{o=(t=t.call(e)).next,!1;for(;!(i=(n=o.call(t)).done)&&(s.push(n.value),2!==s.length);i=!0);}catch(e){l=!0,r=e}finally{try{if(!i&&null!=t.return&&(a=t.return(),Object(a)!==a))return}finally{if(l)throw r}}return s}}(n)||function(e){if(e){if("string"==typeof e)return H(e,2);var t=({}).toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?H(e,2):void 0}}(n)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),b=h[0],v=h[1],I=p.join();r.lng&&(I="".concat(r.lng).concat(I));var x=ee(I),w=(0,o.useRef)(!0);(0,o.useEffect)(function(){var e=m.bindI18n,t=m.bindI18nStore;function n(){w.current&&v(y)}return w.current=!0,S||g||(r.lng?Q(c,r.lng,p,function(){w.current&&v(y)}):K(c,p,function(){w.current&&v(y)})),S&&x&&x!==I&&w.current&&v(y),e&&c&&c.on(e,n),t&&c&&c.store.on(t,n),function(){w.current=!1,e&&c&&e.split(" ").forEach(function(e){return c.off(e,n)}),t&&c&&t.split(" ").forEach(function(e){return c.store.off(e,n)})}},[c,I]);var D=(0,o.useRef)(!0);(0,o.useEffect)(function(){w.current&&!D.current&&v(y),D.current=!1},[c,f]);var j=[b,c,S];if(j.t=b,j.i18n=c,j.ready=S,S||!S&&!g)return j;throw new Promise(function(e){r.lng?Q(c,r.lng,p,function(){return e()}):K(c,p,function(){return e()})})}var en=y(870);let{LogicalOperation:er}=L.contourSegmentation,eo=[{value:"merge",logicalOperation:er.Union,label:"Merge",icon:"actions-combine-merge",helperIcon:"helper-combine-merge"},{value:"intersect",logicalOperation:er.Intersect,label:"Intersect",icon:"actions-combine-intersect",helperIcon:"helper-combine-intersect"},{value:"subtract",logicalOperation:er.Subtract,label:"Subtract",icon:"actions-combine-subtract",helperIcon:"helper-combine-subtract"}];function ea(e){let n,r,o,a,s,i,l,c,u,d=(0,t.c)(25),{label:m,value:g,onValueChange:f,segments:p,placeholder:S}=e,y=void 0===S?"Select a segment":S,{t:h}=et("SegmentationPanel");d[0]!==m?(n=(0,en.jsx)("div",{children:m}),d[0]=m,d[1]=n):n=d[1];let b=`select-segment-${m}`;d[2]!==m?(r=m.toLowerCase(),d[2]=m,d[3]=r):r=d[3];let v=`logical-contour-segment-${r}-trigger`;return d[4]!==y||d[5]!==h?(o=h(y),d[4]=y,d[5]=h,d[6]=o):o=d[6],d[7]!==o?(a=(0,en.jsx)(A.SelectValue,{placeholder:o}),d[7]=o,d[8]=a):a=d[8],d[9]!==v||d[10]!==a?(s=(0,en.jsx)(A.SelectTrigger,{className:"overflow-hidden","data-cy":v,children:a}),d[9]=v,d[10]=a,d[11]=s):s=d[11],d[12]!==p?(i=p.map(es),d[12]=p,d[13]=i):i=d[13],d[14]!==i?(l=(0,en.jsx)(A.SelectContent,{children:i}),d[14]=i,d[15]=l):l=d[15],d[16]!==f||d[17]!==l||d[18]!==b||d[19]!==s||d[20]!==g?(c=(0,en.jsxs)(A.Select,{onValueChange:f,value:g,children:[s,l]},b),d[16]=f,d[17]=l,d[18]=b,d[19]=s,d[20]=g,d[21]=c):c=d[21],d[22]!==c||d[23]!==n?(u=(0,en.jsxs)("div",{className:"flex justify-between gap-6",children:[n,c]}),d[22]=c,d[23]=n,d[24]=u):u=d[24],u}function es(e){return(0,en.jsx)(A.SelectItem,{value:e.segmentIndex.toString(),children:e.label},e.segmentIndex)}function ei(e){return e.active}function el(e){let{representation:t}=e;return t?.active}let ec=function(){let e,n,r,s,i,l,c,u,d,m,g,f,p,S,y,h,b,v,I,x,w,D,j,C,E,O,N,T,_=(0,t.c)(74),{servicesManager:R}=(0,a.useSystem)(),{segmentationService:P}=R.services,{t:L}=et("SegmentationPanel"),{segmentationsWithRepresentations:M}=(0,U.useActiveViewportSegmentationRepresentations)(),F=M?.find(el),G=F?Object.values(F.segmentation.segments):[],k=F?P.getNextAvailableSegmentIndex(F.segmentation.segmentationId):1,q=F?.segmentation?.segmentationId,$=G.find(ei),V=$?.segmentIndex||0,[B,H]=(0,o.useState)(eo[0]),[z,W]=(0,o.useState)(V?.toString()||""),[Y,J]=(0,o.useState)(""),[K,Q]=(0,o.useState)(!1),[X,Z]=(0,o.useState)("");_[0]!==V?(e=()=>{W(V?.toString()||null)},n=[V],_[0]=V,_[1]=e,_[2]=n):(e=_[1],n=_[2]),(0,o.useEffect)(e,n),_[3]!==k?(r=()=>{Z(`Segment ${k}`)},s=[k],_[3]=k,_[4]=r,_[5]=s):(r=_[4],s=_[5]),(0,o.useEffect)(r,s);let ee=(0,a.useRunCommand)();_[6]!==K||_[7]!==X||_[8]!==k||_[9]!==B.logicalOperation||_[10]!==ee||_[11]!==z||_[12]!==Y||_[13]!==q?(i=()=>{let e=z;K&&(e=k.toString(),ee("addSegment",{segmentationId:q,config:{label:X,segmentIndex:k}})),ee("applyLogicalContourOperation",{segmentAInfo:{segmentationId:q,segmentIndex:parseInt(z)},segmentBInfo:{segmentationId:q,segmentIndex:parseInt(Y)},resultSegmentInfo:{segmentationId:q,segmentIndex:parseInt(e)},logicalOperation:B.logicalOperation})},_[6]=K,_[7]=X,_[8]=k,_[9]=B.logicalOperation,_[10]=ee,_[11]=z,_[12]=Y,_[13]=q,_[14]=i):i=_[14];let er=i,es=B.value;_[15]!==H?(l=eo.map(e=>{let{value:t,icon:n}=e;return(0,en.jsx)(A.TabsTrigger,{value:t,onClick:()=>H(e),"data-cy":`logical-contour-operation-${t}`,children:(0,en.jsx)(A.Icons.ByName,{name:n})},`logical-contour-operation-${t}`)}),_[15]=H,_[16]=l):l=_[16],_[17]!==l?(c=(0,en.jsx)(A.TabsList,{className:"inline-flex space-x-1",children:l}),_[17]=l,_[18]=c):c=_[18],_[19]!==B.value||_[20]!==c?(u=(0,en.jsx)(A.Tabs,{value:es,children:c}),_[19]=B.value,_[20]=c,_[21]=u):u=_[21],_[22]!==B.label||_[23]!==L?(d=L(B.label),_[22]=B.label,_[23]=L,_[24]=d):d=_[24],_[25]!==d?(m=(0,en.jsx)("div",{children:d}),_[25]=d,_[26]=m):m=_[26],_[27]!==m||_[28]!==u?(g=(0,en.jsxs)("div",{className:"flex w-auto flex-col items-center gap-2 text-base font-normal leading-none",children:[u,m]}),_[27]=m,_[28]=u,_[29]=g):g=_[29],_[30]!==B.helperIcon?(f=(0,en.jsx)("div",{className:"bg-muted flex h-[62px] w-[88px] items-center justify-center rounded-lg",children:(0,en.jsx)(A.Icons.ByName,{name:B.helperIcon})}),_[30]=B.helperIcon,_[31]=f):f=_[31],_[32]!==g||_[33]!==f?(p=(0,en.jsxs)("div",{className:"flex items-start justify-between",children:[g,f]}),_[32]=g,_[33]=f,_[34]=p):p=_[34],_[35]!==z||_[36]!==G?(S=(0,en.jsx)(ea,{label:"A",value:z,onValueChange:W,segments:G}),_[35]=z,_[36]=G,_[37]=S):S=_[37],_[38]!==Y||_[39]!==G?(y=(0,en.jsx)(ea,{label:"B",value:Y,onValueChange:J,segments:G}),_[38]=Y,_[39]=G,_[40]=y):y=_[40],_[41]!==er?(h=()=>{er()},_[41]=er,_[42]=h):h=_[42],_[43]!==B.label||_[44]!==L?(b=L(B.label),_[43]=B.label,_[44]=L,_[45]=b):b=_[45],_[46]!==h||_[47]!==b?(v=(0,en.jsx)("div",{className:"flex justify-end pl-[34px]",children:(0,en.jsx)(A.Button,{"data-cy":"apply-logical-contour-operation",className:"border-primary/60 grow border",variant:"ghost",onClick:h,children:b})}),_[46]=h,_[47]=b,_[48]=v):v=_[48],_[49]===Symbol.for("react.memo_cache_sentinel")?(I=(0,en.jsx)(A.Separator,{className:"bg-input mt-2 h-[1px]"}),_[49]=I):I=_[49],_[50]===Symbol.for("react.memo_cache_sentinel")?(x=(0,en.jsx)(A.Switch,{id:"logical-contour-operations-create-new-segment-switch","data-cy":"logical-contour-create-new-segment-switch",onCheckedChange:Q}),_[50]=x):x=_[50],_[51]!==L?(w=L("Create a new segment"),_[51]=L,_[52]=w):w=_[52],_[53]!==w?(D=(0,en.jsxs)("div",{className:"flex items-center justify-start gap-2",children:[x,(0,en.jsx)(A.Label,{htmlFor:"logical-contour-operations-create-new-segment-switch",children:w})]}),_[53]=w,_[54]=D):D=_[54];let ec=K?"visible":"hidden";_[55]!==ec?(j=(0,A.cn)(ec),_[55]=ec,_[56]=j):j=_[56];let eu=!K;return _[57]!==L?(C=L("New segment name"),_[57]=L,_[58]=C):C=_[58],_[59]===Symbol.for("react.memo_cache_sentinel")?(E=e=>Z(e.target.value),_[59]=E):E=_[59],_[60]!==X||_[61]!==j||_[62]!==eu||_[63]!==C?(O=(0,en.jsx)("div",{className:"pl-9",children:(0,en.jsx)(A.Input,{className:j,disabled:eu,id:"logical-contour-operations-create-new-segment-input",type:"text",placeholder:C,value:X,onChange:E})}),_[60]=X,_[61]=j,_[62]=eu,_[63]=C,_[64]=O):O=_[64],_[65]!==D||_[66]!==O?(N=(0,en.jsxs)("div",{className:"flex flex-col gap-2",children:[D,O]}),_[65]=D,_[66]=O,_[67]=N):N=_[67],_[68]!==p||_[69]!==S||_[70]!==y||_[71]!==v||_[72]!==N?(T=(0,en.jsxs)("div",{className:"flex w-[245px] flex-col gap-4",children:[p,S,y,v,I,N]}),_[68]=p,_[69]=S,_[70]=y,_[71]=v,_[72]=N,_[73]=T):T=_[73],T},eu=function(){let e,n,r,s,i,l,c,u,d,m,g,f,p,S,y,h,b,v,I,x,w,D,j,C,E,O,N=(0,t.c)(60),[T,U]=(0,o.useState)(10),_=(0,a.useRunCommand)(),{t:R}=et("SegmentationPanel");return N[0]!==R?(e=R("Fill contour holes"),N[0]=R,N[1]=e):e=N[1],N[2]!==e?(n=(0,en.jsx)("div",{children:e}),N[2]=e,N[3]=n):n=N[3],N[4]!==_?(r=()=>{_("removeContourHoles")},N[4]=_,N[5]=r):r=N[5],N[6]!==R?(s=R("Fill Holes"),N[6]=R,N[7]=s):s=N[7],N[8]!==r||N[9]!==s?(i=(0,en.jsx)(A.Button,{className:"border-primary/60 border",variant:"ghost",onClick:r,children:s}),N[8]=r,N[9]=s,N[10]=i):i=N[10],N[11]===Symbol.for("react.memo_cache_sentinel")?(l=(0,en.jsx)(A.Separator,{className:"bg-input mt-[20px] h-[1px]"}),N[11]=l):l=N[11],N[12]!==n||N[13]!==i?(c=(0,en.jsxs)("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none",children:[n,i,l]}),N[12]=n,N[13]=i,N[14]=c):c=N[14],N[15]!==R?(u=R("Remove Small Contours"),N[15]=R,N[16]=u):u=N[16],N[17]!==u?(d=(0,en.jsx)("div",{children:u}),N[17]=u,N[18]=d):d=N[18],N[19]!==R?(m=R("Area Threshold"),N[19]=R,N[20]=m):m=N[20],N[21]!==m?(g=(0,en.jsx)(A.Label,{htmlFor:"simplify-contour-options",className:"text-muted-foreground",children:m}),N[21]=m,N[22]=g):g=N[22],N[23]===Symbol.for("react.memo_cache_sentinel")?(f=e=>U(Number(e.target.value)),N[23]=f):f=N[23],N[24]!==T?(p=(0,en.jsx)(A.Input,{id:"simplify-contour-options",className:"w-20",type:"number",value:T,onChange:f}),N[24]=T,N[25]=p):p=N[25],N[26]!==g||N[27]!==p?(S=(0,en.jsxs)("div",{className:"flex items-center gap-2 self-end",children:[g,p]}),N[26]=g,N[27]=p,N[28]=S):S=N[28],N[29]!==T||N[30]!==_?(y=()=>{_("removeSmallContours",{areaThreshold:T})},N[29]=T,N[30]=_,N[31]=y):y=N[31],N[32]!==R?(h=R("Remove Small Contours"),N[32]=R,N[33]=h):h=N[33],N[34]!==y||N[35]!==h?(b=(0,en.jsx)(A.Button,{className:"border-primary/60 border",variant:"ghost",onClick:y,children:h}),N[34]=y,N[35]=h,N[36]=b):b=N[36],N[37]===Symbol.for("react.memo_cache_sentinel")?(v=(0,en.jsx)(A.Separator,{className:"bg-input mt-[20px] h-[1px]"}),N[37]=v):v=N[37],N[38]!==S||N[39]!==b||N[40]!==d?(I=(0,en.jsxs)("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none",children:[d,S,b,v]}),N[38]=S,N[39]=b,N[40]=d,N[41]=I):I=N[41],N[42]!==R?(x=R("Create New Segment from Holes"),N[42]=R,N[43]=x):x=N[43],N[44]!==x?(w=(0,en.jsx)("div",{children:x}),N[44]=x,N[45]=w):w=N[45],N[46]!==_?(D=()=>{_("convertContourHoles")},N[46]=_,N[47]=D):D=N[47],N[48]!==R?(j=R("Create New Segment"),N[48]=R,N[49]=j):j=N[49],N[50]!==D||N[51]!==j?(C=(0,en.jsx)(A.Button,{className:"border-primary/60 border",variant:"ghost",onClick:D,children:j}),N[50]=D,N[51]=j,N[52]=C):C=N[52],N[53]!==w||N[54]!==C?(E=(0,en.jsxs)("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none",children:[w,C]}),N[53]=w,N[54]=C,N[55]=E):E=N[55],N[56]!==I||N[57]!==E||N[58]!==c?(O=(0,en.jsxs)("div",{className:"flex w-auto w-[252px] flex-col gap-[8px] text-base font-normal leading-none",children:[c,I,E]}),N[56]=I,N[57]=E,N[58]=c,N[59]=O):O=N[59],O},ed=function(){let e,n,r,o,s,i,l,c,u,d,m,g,f,p,S=(0,t.c)(32),y=(0,a.useRunCommand)(),{t:h}=et("SegmentationPanel");return S[0]!==h?(e=h("Smooth all edges"),S[0]=h,S[1]=e):e=S[1],S[2]!==e?(n=(0,en.jsx)("div",{children:e}),S[2]=e,S[3]=n):n=S[3],S[4]!==y?(r=()=>{y("smoothContours")},S[4]=y,S[5]=r):r=S[5],S[6]!==h?(o=h("Smooth Edges"),S[6]=h,S[7]=o):o=S[7],S[8]!==r||S[9]!==o?(s=(0,en.jsx)(A.Button,{className:"border-primary/60 border",variant:"ghost",onClick:r,children:o}),S[8]=r,S[9]=o,S[10]=s):s=S[10],S[11]===Symbol.for("react.memo_cache_sentinel")?(i=(0,en.jsx)(A.Separator,{className:"bg-input mt-[20px] h-[1px]"}),S[11]=i):i=S[11],S[12]!==n||S[13]!==s?(l=(0,en.jsxs)("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none",children:[n,s,i]}),S[12]=n,S[13]=s,S[14]=l):l=S[14],S[15]!==h?(c=h("Remove extra points"),S[15]=h,S[16]=c):c=S[16],S[17]!==c?(u=(0,en.jsx)("div",{children:c}),S[17]=c,S[18]=u):u=S[18],S[19]!==y?(d=()=>{y("decimateContours")},S[19]=y,S[20]=d):d=S[20],S[21]!==h?(m=h("Remove Points"),S[21]=h,S[22]=m):m=S[22],S[23]!==m||S[24]!==d?(g=(0,en.jsx)(A.Button,{className:"border-primary/60 border",variant:"ghost",onClick:d,children:m}),S[23]=m,S[24]=d,S[25]=g):g=S[25],S[26]!==g||S[27]!==u?(f=(0,en.jsxs)("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none",children:[u,g]}),S[26]=g,S[27]=u,S[28]=f):f=S[28],S[29]!==f||S[30]!==l?(p=(0,en.jsxs)("div",{className:"flex w-auto w-[245px] flex-col gap-[8px] text-base font-normal leading-none",children:[l,f]}),S[29]=f,S[30]=l,S[31]=p):p=S[31],p},em=o.lazy(()=>Promise.resolve().then(y.bind(y,992))),eg=e=>{let n,r,a=(0,t.c)(3);return a[0]===Symbol.for("react.memo_cache_sentinel")?(n=(0,en.jsx)("div",{children:"Loading..."}),a[0]=n):n=a[0],a[1]!==e?(r=(0,en.jsx)(o.Suspense,{fallback:n,children:(0,en.jsx)(em,{...e})}),a[1]=e,a[2]=r):r=a[2],r},ef={id:n,getCommandsModule:({servicesManager:e,extensionManager:t,commandsManager:n})=>{let{segmentationService:r,displaySetService:o,viewportGridService:s,customizationService:i}=e.services,u={loadSegmentationsForViewport:async({segmentations:e,viewportId:t})=>{let n=(({viewportId:e,viewportGridService:t})=>{let{viewports:n,activeViewportId:r}=t.getState();return n.get(e||r)})({viewportId:t,viewportGridService:s}),a=n.displaySetInstanceUIDs[0],i=e[0],l=i.segmentationId,c=i.config.label,u=i.config.segments,d=o.getDisplaySetByUID(a);return await r.createLabelmapForDisplaySet(d,{segmentationId:l,segments:u,label:c}),r.addOrUpdateSegmentation(i),await r.addSegmentationRepresentation(n.viewportId,{segmentationId:l}),l},generateSegmentation:({segmentationId:e,options:n={}})=>{let o,s,u,d,{dataSource:S,...y}=n,h=c.segmentation.state.getSegmentation(e),v=y.predecessorImageId??h.predecessorImageId,I=S?t.getDataSourceDefinition(S):t.getActiveDataSourceDefinition(),x=I?.configuration?.segmentation?.store,w=h.representationData.Labelmap,D=(t,n,r,o)=>{let a=t.map(e=>l.cache.getImage(e)),s=[],i=r?new Map(r.map((e,t)=>[e,t])):void 0,c=0,u=new Set;for(let e of a){let t=i?i.get(e.referencedImageId)??-1:c++;if(t<0)continue;let n=e.getPixelData(),r=function(e,t,n){let r=new Set;for(let t=0;t<e.length;t++){let n=e[t];0!==n&&r.add(n)}return t?Array.from(r).filter(e=>!!t[e]||(n?.add(e),!1)):Array.from(r)}(n,o,u);if(!r.length)continue;let{rows:a,columns:l}=e;s[t]={segmentsOnLabelmap:r,pixelData:n,rows:a,columns:l}}return u.forEach(t=>console.warn(`Label value ${t} of segmentation ${e} has no segment. The SEG export does not include its voxels.`)),{segmentsOnLabelmap:Array.from(new Set(s.filter(Boolean).map(e=>e.segmentsOnLabelmap).flat())),metadata:n,labelmaps2D:s,labelToSegmentIndex:function(e,t){if(!e)return;let n={...e};return t.forEach(e=>{n[e]=0}),n}(o,u)}},j=r.getSegmentation(e),C=r.getRepresentationsForSegmentation(e),E=[];Object.entries(j.segments).forEach(([t,n])=>{if(!n)return;let{label:o}=n,a=C[0],s=r.getSegmentColor(a.viewportId,e,n.segmentIndex),i=m().data.Colors.rgb2DICOMLAB(s.slice(0,3).map(e=>e/255)).map(e=>Math.round(e));E[t]={SegmentNumber:t.toString(),SegmentLabel:o,SegmentAlgorithmType:n?.algorithmType||"MANUAL",SegmentAlgorithmName:n?.algorithmName||"OHIF Brush",RecommendedDisplayCIELabValue:i,SegmentedPropertyCategoryCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"},SegmentedPropertyTypeCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"}}});let O=w.labelmaps?Object.values(w.labelmaps):void 0,T=(e,t)=>{let n=l.cache.getImage(e);if(!n)throw Error(`Referenced source image not in cache for segmentation slice ${t} (referencedImageId: ${e}). Ensure the referenced series is fully loaded before storing.`);return n};if(O&&O.length>1){let e=O[0].referencedImageIds??w.referencedImageIds??[];o=e.map(T),s=O.map(t=>D(t.imageIds??[],E,e,t.labelToSegmentIndex))}else{let{imageIds:e,labelToSegmentIndex:t,layerWithoutImageIds:n}=U.utils.getSingleLayerExportSource(w);n&&console.warn(`Labelmap layer ${n.labelmapId} has no image ids. The SEG export uses the segmentation image ids with the label map of that layer.`),o=e.map(e=>l.cache.getImage(e)).map((e,t)=>T(e.referencedImageId,t)),s=D(e,E,void 0,t)}let R="predecessorImageId"in y?y.predecessorImageId:v,{date:P,time:A}=a.utils.getCurrentDicomDateTime(),L={predecessorImageId:v,ContentDate:P,ContentTime:A,...R?{}:{SeriesDate:P,SeriesTime:A},...(u="bitmap"===b(i,x)?f:g,{sopClassUID:u,transferSyntaxUID:d=x?.transferSyntaxUID??i?.getCustomization("segmentation.store.transferSyntaxUID")??p,transferSyntaxUid:d}),...y,...a.utils.getOhifWriterHeader("@cornerstonejs/adapters","CS3D",N.version,y)};return O&&O.length>1&&L.sopClassUID===g&&(console.warn("generateSegmentation: overlapping segments cannot be stored as a LABELMAP SEG; switching to the binary SEG encoding for this store."),L.sopClassUID=f),_(o,s,l.metaData,L)},downloadSegmentation:({segmentationId:e})=>{let t=r.getSegmentation(e),o=u.generateSegmentation({segmentationId:e});n.runCommand("createStoreFunction",{dataSource:"download",defaultFileName:`${t.label}.dcm`})(o.dataset)},storeSegmentation:async({segmentationId:o,dataSource:s,modality:i="SEG"})=>{let l=r.getSegmentation(o);if(!l)throw Error("No segmentation found");let{label:c,predecessorImageId:d,labelIsGenerated:m}=l,g=m&&c||("RTSTRUCT"===i?"Contours":"Segmentation"),{value:f,dataSourceName:p,series:S,seriesNumber:y,action:h}=await (0,T.createReportDialogPrompt)({servicesManager:e,extensionManager:t,predecessorImageId:d,title:"RTSTRUCT"===i?"Save Contours":"Save Segmentation",modality:i,itemName:m?"":c||"",defaultSeriesDescription:g,enableDownload:!0});if(1!==h)return;let b="RTSTRUCT"===i?`rtss-${o}.dcm`:`${c||"segmentation"}.dcm`,v=n.runCommand("createStoreFunction",{dataSource:p,defaultFileName:b});if(!v)throw Error(`No valid store for dataSource: ${p}`);try{let e={segmentationId:o,options:{dataSource:p,SeriesDescription:S?void 0:f||c||g,SeriesNumber:S?void 0:y,predecessorImageId:S}},t="SEG"===i&&u.generateSegmentation(e)||"RTSTRUCT"===i&&u.generateContour(e),n=await t;if(!n?.dataset)throw Error("Error during segmentation generation");let{dataset:r}=n;return a.utils.updateNewInstanceMetadata(r),"No Study ID"===r.StudyID&&(r.StudyID=""),await v(r,{}),r}catch(e){throw console.debug("Error storing segmentation:",e),e}},generateContour:async e=>{let{segmentationId:t,options:n}=e,{dataSource:o,...s}=n??{},i=r.getSegmentation(t),l=r.getRepresentationsForSegmentation(t)[0];Object.entries(i.segments).forEach(([e,n])=>{n.color=r.getSegmentColor(l.viewportId,t,Number(e))});let c=s.predecessorImageId??i.predecessorImageId,{date:u,time:d}=a.utils.getCurrentDicomDateTime();return{dataset:await R(i,{predecessorImageId:c,StructureSetDate:u,StructureSetTime:d,...s,...a.utils.getOhifWriterHeader("@cornerstonejs/adapters","CS3D",N.version,s)})}},downloadRTSS:async e=>{let{dataset:t}=await u.generateContour(e),{InstanceNumber:r=1,SeriesInstanceUID:o}=t,a=n.runCommand("createStoreFunction",{dataSource:"download",defaultFileName:`rtss-${o}-${r}.dcm`});await a(t)},toggleActiveSegmentationUtility:({itemId:e})=>{let{uiState:t,setUIState:n}=T.useUIStateStore.getState(),r=t.activeSegmentationUtility===e;console.log("toggleActiveSegmentationUtility",r,e),n("activeSegmentationUtility",r?null:e)}},d={loadSegmentationsForViewport:u.loadSegmentationsForViewport,generateSegmentation:u.generateSegmentation,downloadSegmentation:u.downloadSegmentation,storeSegmentation:u.storeSegmentation,downloadRTSS:u.downloadRTSS,toggleActiveSegmentationUtility:u.toggleActiveSegmentationUtility};return{actions:u,definitions:d,defaultContext:"SEGMENTATION"}},getCustomizationModule:function(){return[{name:"default",value:P}]},getToolbarModule:function({servicesManager:e}){let{segmentationService:t,toolbarService:n,toolGroupService:r}=e.services;return[{name:"cornerstone.SimplifyContourOptions",defaultComponent:eu},{name:"cornerstone.LogicalContourOperationsOptions",defaultComponent:ec},{name:"cornerstone.SmoothContoursOptions",defaultComponent:ed},{name:"cornerstone.isActiveSegmentationUtility",evaluate:({button:e})=>{let{uiState:t}=T.useUIStateStore.getState();return{isActive:t.activeSegmentationUtility===e.id}}},{name:"evaluate.cornerstone.hasSegmentation",evaluate:({viewportId:e})=>{let n=t.getSegmentationRepresentations(e);return{disabled:!n?.length}}},{name:"evaluate.cornerstone.hasSegmentationOfType",evaluate:({viewportId:e,segmentationRepresentationType:n})=>{let r=t.getSegmentationRepresentations(e);return r?.length?r.some(e=>e.type===n)?void 0:{disabled:!0,disabledText:`No ${n} segmentations available`}:{disabled:!0,disabledText:i().t("SegmentationPanel:No segmentations available")}}},{name:"evaluate.cornerstone.segmentation",evaluate:({viewportId:e,button:o,toolNames:a,disabledText:s})=>{let l=t.getSegmentationRepresentations(e);if(!l?.length)return{disabled:!0,disabledText:s??i().t("SegmentationPanel:No segmentations available")};if(!Object.keys(t.getActiveSegmentation(e).segments).length)return{disabled:!0,disabledText:i().t("SegmentationPanel:Add segment to enable this tool")};let c=r.getToolGroupForViewport(e);if(!c)return{disabled:!0,disabledText:s??i().t("SegmentationPanel:Not available on the current viewport")};if(!a)return{disabled:!1};let u=n.getToolNameForButton(o);return c.hasTool(u)||a?{disabled:!1,isActive:a?a.includes(c.getActivePrimaryMouseButtonTool()):c.getActivePrimaryMouseButtonTool()===u}:{disabled:!0,disabledText:s??i().t("SegmentationPanel:Not available on the current viewport")}}},{name:"evaluate.cornerstone.segmentation.synchronizeDrawingRadius",evaluate:({button:e,radiusOptionId:t})=>{let o=r.getToolGroupIds();if(o?.length)for(let r of o){let o=c.utilities.segmentation.getBrushSizeForToolGroup(r);o&&(n.getOptionById(e,t).value=o)}}}]},getViewportModule:({servicesManager:e,extensionManager:n,commandsManager:r})=>[{name:"dicom-seg",component:o=>{let a,s=(0,t.c)(2);return s[0]!==o?(a=(0,en.jsx)(eg,{servicesManager:e,extensionManager:n,commandsManager:r,...o}),s[0]=o,s[1]=a):a=s[1],a}}],getSopClassHandlerModule:function(e){let{servicesManager:t,extensionManager:n}=e;return[{name:"dicom-seg",sopClassUids:I,getDisplaySetsFromSeries:e=>(function(e,t,n){a.utils.sortStudyInstances(e);let o=e[e.length-1],{StudyInstanceUID:s,SeriesInstanceUID:l,SOPInstanceUID:u,SeriesDescription:d="",SeriesNumber:m,SOPClassUID:g,FrameOfReferenceUID:f,wadoRoot:p,wadoUri:S,wadoUriRoot:y,imageId:h}=o,{SeriesDate:b,SeriesTime:v}=a.utils.getLatestInstanceDateTime(o),w={Modality:"SEG",loading:!1,isReconstructable:!1,displaySetInstanceUID:a.utils.guid(),SeriesDescription:d,SeriesNumber:m,SeriesDate:b,SeriesTime:v,SOPInstanceUID:u,SeriesInstanceUID:l,StudyInstanceUID:s,SOPClassHandlerId:r,SOPClassUID:g,FrameOfReferenceUID:f,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,segments:{},sopClassUids:I,instance:o,predecessorImageId:h,instances:[o],wadoRoot:p,wadoUriRoot:y,wadoUri:S,isOverlayDisplaySet:!0,label:d||`${i().t("Series")} ${m} - ${i().t("SEG")}`},D=o.ReferencedSeriesSequence;if(!D)return void console.error("ReferencedSeriesSequence is missing for the SEG");let j=D[0]||D;w.referencedImages=o.ReferencedSeriesSequence.ReferencedInstanceSequence,w.referencedSeriesInstanceUID=j.SeriesInstanceUID;let{displaySetService:C}=t.services,O=C.getDisplaySetsForReferences(o.ReferencedSeriesSequence);O?.length>1&&console.warn("Segmentation does not currently handle references to multiple series, defaulting to first series");let N=O[0];if(N)w.referencedDisplaySetInstanceUID=N.displaySetInstanceUID,w.isReconstructable=N.isReconstructable,w.FrameOfReferenceUID=N.FrameOfReferenceUID;else{let{unsubscribe:e}=C.subscribe(C.EVENTS.DISPLAY_SETS_ADDED,({displaySetsAdded:t})=>{let n=t[0];n.SeriesInstanceUID===w.referencedSeriesInstanceUID&&(w.referencedDisplaySetInstanceUID=n.displaySetInstanceUID,w.isReconstructable=n.isReconstructable,w.FrameOfReferenceUID=n.FrameOfReferenceUID,e())})}return w.load=async({headers:e})=>await function(e,t,n,r){var o;let{SOPInstanceUID:a}=e,{segmentationService:s}=t.services;return(e.loading||e.isLoaded)&&x[a]&&(o=e,c.segmentation.state.getSegmentation(o.displaySetInstanceUID))||(e.loading=!0,x[a]=new Promise(async(o,a)=>{if(!e.segments||0===Object.keys(e.segments).length)try{await E({extensionManager:n,servicesManager:t,segDisplaySet:e,headers:r})}catch(t){return e.loading=!1,a(t)}s.createSegmentationForSEGDisplaySet(e).then(()=>{e.loading=!1,o()}).catch(t=>{e.loading=!1,a(t)})}),e.loadingPromise=x[a]),x[a]}(w,t,n,e),[w]})(e,t,n)}]},getHangingProtocolModule:function(){return[{name:O.id,protocol:O}]}}})(),h=y.O(h)})());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ohif/extension-cornerstone-dicom-seg",
3
- "version": "3.14.0-beta.73",
3
+ "version": "3.14.0-beta.74",
4
4
  "description": "DICOM SEG read workflow",
5
5
  "author": "OHIF",
6
6
  "license": "MIT",
@@ -22,10 +22,10 @@
22
22
  "access": "public"
23
23
  },
24
24
  "peerDependencies": {
25
- "@ohif/core": "3.14.0-beta.73",
26
- "@ohif/extension-cornerstone": "3.14.0-beta.73",
27
- "@ohif/extension-default": "3.14.0-beta.73",
28
- "@ohif/i18n": "3.14.0-beta.73",
25
+ "@ohif/core": "3.14.0-beta.74",
26
+ "@ohif/extension-cornerstone": "3.14.0-beta.74",
27
+ "@ohif/extension-default": "3.14.0-beta.74",
28
+ "@ohif/i18n": "3.14.0-beta.74",
29
29
  "react": "19.2.7",
30
30
  "react-dom": "19.2.7",
31
31
  "react-i18next": "12.3.1",