modified-dicom-pacs
Version:
A modified version of DICOM PACS implementation
2 lines • 20.5 kB
JavaScript
"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([[633,481],{27400:(e,t,n)=>{n.r(t),n.d(t,{default:()=>j});const o=JSON.parse('{"UU":"@ohif/extension-cornerstone-dicom-seg"}').UU,a=`${o}.sopClassHandlerModule.dicom-seg`;var i=n(41766),r=n(55411),s=n(92136),c=n(39371),l=n(83342),d=n(31426);const g=["1.2.840.10008.5.1.4.1.1.66.4"];let m={};function S(e,t,n){const o=e[0],{StudyInstanceUID:i,SeriesInstanceUID:S,SOPInstanceUID:p,SeriesDescription:u,SeriesNumber:v,SeriesDate:I,SOPClassUID:y,wadoRoot:b,wadoUri:w,wadoUriRoot:h}=o,f={Modality:"SEG",loading:!1,isReconstructable:!0,displaySetInstanceUID:r.utils.guid(),SeriesDescription:u,SeriesNumber:v,SeriesDate:I,SOPInstanceUID:p,SeriesInstanceUID:S,StudyInstanceUID:i,SOPClassHandlerId:a,SOPClassUID:y,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,segments:{},sopClassUids:g,instance:o,instances:[o],wadoRoot:b,wadoUriRoot:h,wadoUri:w,isOverlayDisplaySet:!0},D=o.ReferencedSeriesSequence;if(!D)return void console.error("ReferencedSeriesSequence is missing for the SEG");const E=D[0]||D;return f.referencedImages=o.ReferencedSeriesSequence.ReferencedInstanceSequence,f.referencedSeriesInstanceUID=E.SeriesInstanceUID,f.getReferenceDisplaySet=()=>{const{displaySetService:e}=t.services,n=e.getDisplaySetsForSeries(f.referencedSeriesInstanceUID);if(!n||0===n.length)throw new Error("Referenced DisplaySet is missing for the SEG");const o=n[0];f.referencedDisplaySetInstanceUID=o.displaySetInstanceUID,f.referencedVolumeURI=o.displaySetInstanceUID;const a=`cornerstoneStreamingImageVolume:${f.referencedVolumeURI}`;return f.referencedVolumeId=a,o},f.load=async({headers:e})=>await function(e,t,n,o){const{SOPInstanceUID:a}=e,{segmentationService:i}=t.services;if((e.loading||e.isLoaded)&&m[a]&&function(e,t){return t.getSegmentation(e.displaySetInstanceUID)}(e,i))return m[a];return e.loading=!0,m[a]=new Promise((async(a,r)=>{e.segments&&0!==Object.keys(e.segments).length||await async function({extensionManager:e,servicesManager:t,segDisplaySet:n,headers:o}){const a=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),{segmentationService:i,uiNotificationService:r}=t.services,{dicomLoaderService:g}=a.exports,m=await g.findDicomDataPromise(n,null,o),S=s.cache.getVolume(n.referencedVolumeId);if(!S)throw new Error("Referenced Volume is missing for the SEG, and stack viewport SEG is not supported yet");const{imageIds:p}=S,u=.001,v=!0;s.eventTarget.addEventListener(l.fX.Events.SEGMENTATION_LOAD_PROGRESS,(e=>{const{percentComplete:t}=e.detail;i._broadcastEvent(i.EVENTS.SEGMENT_LOADING_COMPLETE,{percentComplete:t})}));const I=await l.ql.Cornerstone3D.Segmentation.generateToolState(p,m,s.metaData,{skipOverlapping:v,tolerance:u,eventTarget:s.eventTarget,triggerEvent:s.triggerEvent});let y=!0;I.segMetadata.data.forEach(((e,t)=>{var n;t>0&&(e.rgba=e.RecommendedDisplayCIELabValue,e.rgba?e.rgba=(n=e.rgba,d.Ay.data.Colors.dicomlab2RGB(n).map((e=>Math.round(255*e)))):(y=!1,e.rgba=c.CONSTANTS.COLOR_LUT[t%c.CONSTANTS.COLOR_LUT.length]))})),I.overlappingSegments&&r.show({title:"Overlapping Segments",message:"Unsupported overlapping segments detected, segmentation rendering results may be incorrect.",type:"warning"});y||r.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,I)}({extensionManager:n,servicesManager:t,segDisplaySet:e,headers:o});const g=!0;i.createSegmentationForSEGDisplaySet(e,null,g).then((()=>{e.loading=!1,a()})).catch((t=>{e.loading=!1,r(t)}))})),m[a]}(f,t,n,e),[f]}const p=function({servicesManager:e,extensionManager:t}){return[{name:"dicom-seg",sopClassUids:g,getDisplaySetsFromSeries:n=>S(n,e,t)}]},u={id:"@ohif/seg",name:"Segmentations",protocolMatchingRules:[],toolGroupIds:["default"],numberOfPriorsReferenced:0,defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"segDisplaySetId",matchedDisplaySetsIndex:-1}]},displaySetSelectors:{segDisplaySetId:{seriesMatchingRules:[{attribute:"Modality",constraint:{equals:"SEG"}}]}},stages:[{name:"Segmentations",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{allowUnmatchedView:!0},displaySets:[{id:"segDisplaySetId"}]}]}]};const v=function(){return[{name:u.id,protocol:u}]};var I=n(15575),y=n(5085),b=n(7206),w=n(11374),h=n.n(w);let f=function(e){return e.Expanded="expanded",e.Dropdown="dropdown",e}({});const D=function(e,t,n){const o="enter-segment-label",a=({action:t,value:a})=>{switch(t.id){case"save":n(a.label,t.id);break;case"cancel":n("",t.id)}e.dismiss({id:o})};e&&e.create({id:o,centralize:!0,isDraggable:!1,showOverlay:!0,content:y.lG,contentProps:{title:"Segment",value:{label:t},noCloseButton:!0,onClose:()=>e.dismiss({id:o}),actions:[{id:"cancel",text:"Cancel",type:y.Ny.NW.secondary},{id:"save",text:"Confirm",type:y.Ny.NW.primary}],onSubmit:a,body:({value:e,setValue:t})=>i.createElement(y.pd,{label:"Enter the segment label",labelClassName:"text-white text-[14px] leading-[1.2]",autoFocus:!0,className:"border-primary-main bg-black",type:"text",value:e.label,onChange:e=>{e.persist(),t((t=>({...t,label:e.target.value})))},onKeyPress:t=>{"Enter"===t.key&&a({value:e,action:{id:"save"}})}})}})};var E=n(13726);const T=function(e,t,n){const o="pick-color",a=({action:t,value:a})=>{switch(t.id){case"save":n(a.rgbaColor,t.id);break;case"cancel":n("",t.id)}e.dismiss({id:o})};e&&e.create({id:o,centralize:!0,isDraggable:!1,showOverlay:!0,content:y.lG,contentProps:{title:"Segment Color",value:{rgbaColor:t},noCloseButton:!0,onClose:()=>e.dismiss({id:o}),actions:[{id:"cancel",text:"Cancel",type:"primary"},{id:"save",text:"Save",type:"secondary"}],onSubmit:a,body:({value:e,setValue:t})=>i.createElement(E.xk,{color:e.rgbaColor,onChange:e=>{t({rgbaColor:e.rgb})},presetColors:[],width:300})}})};var C=n(80619);const M={[f.Expanded]:y.fO,[f.Dropdown]:y.QQ};function R({servicesManager:e,commandsManager:t,extensionManager:n,configuration:o}){const{segmentationService:a,viewportGridService:r,uiDialogService:s,displaySetService:c,cornerstoneViewportService:l}=e.services,{t:d}=(0,C.Bd)("PanelSegmentation"),[g,m]=(0,i.useState)(null),[S,p]=(0,i.useState)(""),[u,v]=(0,i.useState)(a.getConfiguration()),[I,w]=(0,i.useState)((()=>a.getSegmentations()));(0,i.useEffect)((()=>{const e=a.EVENTS.SEGMENTATION_ADDED,t=a.EVENTS.SEGMENTATION_UPDATED,n=a.EVENTS.SEGMENTATION_REMOVED,o=[];return[e,t,n].forEach((e=>{const{unsubscribe:t}=a.subscribe(e,(()=>{const e=a.getSegmentations();w(e),v(a.getConfiguration())}));o.push(t)})),()=>{o.forEach((e=>{e()}))}}),[]),(0,i.useEffect)((()=>{const e=e=>{const t=r.getDisplaySetsUIDsForViewport(e||r.getActiveViewportId());if(!t)return;const n=t?.some((e=>{const t=c.getDisplaySetByUID(e);return t?.isReconstructable}))||!1;p(n?"":"ohif-disabled")};e();const t=r.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED,n=r.EVENTS.VIEWPORTS_READY,o=[];[n,t].forEach((t=>{const{unsubscribe:n}=r.subscribe(t,(({viewportId:t})=>{e(t)}));o.push(n)}));const a=l.EVENTS.VIEWPORT_DATA_CHANGED,i=[];return[a].forEach((t=>{const{unsubscribe:n}=l.subscribe(t,(()=>{e()}));i.push(n)})),()=>{o.forEach((e=>e())),i.forEach((e=>e()))}}),[]);const h=e=>a.getToolGroupIdsWithSegmentation(e),f=(0,i.useCallback)(((e,t,n)=>{a.setConfiguration({segmentationId:e,[t]:n})}),[a]),E=M[o?.segmentationPanelMode]||y.QQ,R=o?.addSegment,V=o?.onSegmentationAdd&&"function"==typeof o?.onSegmentationAdd?o?.onSegmentationAdd:async()=>{t.runCommand("createEmptySegmentationForViewport",{viewportId:r.getActiveViewportId()})};return i.createElement(E,{title:d("Segmentations"),segmentations:I,disableEditing:o.disableEditing,activeSegmentationId:g||"",onSegmentationAdd:V,addSegmentationClassName:S,showAddSegment:R,onSegmentationClick:e=>{a.setActiveSegmentationForToolGroup(e)},onSegmentationDelete:e=>{a.remove(e)},onSegmentationDownload:e=>{t.runCommand("downloadSegmentation",{segmentationId:e})},onSegmentationDownloadRTSS:e=>{t.runCommand("downloadRTSS",{segmentationId:e})},storeSegmentation:async o=>{const i=n.getActiveDataSource(),s=await(0,b.createReportAsync)({servicesManager:e,getReport:()=>t.runCommand("storeSegmentation",{segmentationId:o,dataSource:i[0]}),reportType:"Segmentation"});s&&(a.remove(o),r.setDisplaySetsForViewport({viewportId:r.getActiveViewportId(),displaySetInstanceUIDs:s}))},onSegmentationEdit:e=>{const t=a.getSegmentation(e),{label:n}=t;D(s,n,((t,n)=>{""!==t&&a.addOrUpdateSegmentation({id:e,label:t},!1,!0)}))},onSegmentClick:(e,t)=>{a.setActiveSegment(e,t);h(e).forEach((n=>{a.setActiveSegmentationForToolGroup(e,n),a.jumpToSegmentCenter(e,t,n)}))},onSegmentEdit:(e,t)=>{const n=a.getSegmentation(e).segments[t],{label:o}=n;D(s,o,((n,o)=>{""!==n&&a.setSegmentLabel(e,t,n)}))},onSegmentAdd:e=>{a.addSegment(e)},onSegmentColorClick:(e,t)=>{const n=a.getSegmentation(e).segments[t],{color:o,opacity:i}=n,r={r:o[0],g:o[1],b:o[2],a:i/255};T(s,r,((n,o)=>{"cancel"!==o&&a.setSegmentRGBAColor(e,t,[n.r,n.g,n.b,255*n.a])}))},onSegmentDelete:(e,t)=>{a.removeSegment(e,t)},onToggleSegmentVisibility:(e,t)=>{const n=!a.getSegmentation(e).segments[t].isVisible;h(e).forEach((o=>{a.setSegmentVisibility(e,t,n,o)}))},onToggleSegmentLock:(e,t)=>{a.toggleSegmentLocked(e,t)},onToggleSegmentationVisibility:e=>{a.toggleSegmentationVisibility(e);const t=a.getSegmentation(e),n=t.isVisible,o=t.segments;h(e).forEach((t=>{o.forEach(((o,i)=>{a.setSegmentVisibility(e,i,n,t)}))}))},showDeleteSegment:!0,segmentationConfig:{initialConfig:u},setRenderOutline:e=>f(g,"renderOutline",e),setOutlineOpacityActive:e=>f(g,"outlineOpacity",e),setRenderFill:e=>f(g,"renderFill",e),setRenderInactiveSegmentations:e=>f(g,"renderInactiveSegmentations",e),setOutlineWidthActive:e=>f(g,"outlineWidthActive",e),setFillAlpha:e=>f(g,"fillAlpha",e),setFillAlphaInactive:e=>f(g,"fillAlphaInactive",e)})}R.propTypes={commandsManager:h().shape({runCommand:h().func.isRequired}),servicesManager:h().shape({services:h().shape({segmentationService:h().shape({getSegmentation:h().func.isRequired,getSegmentations:h().func.isRequired,toggleSegmentationVisibility:h().func.isRequired,subscribe:h().func.isRequired,EVENTS:h().object.isRequired}).isRequired}).isRequired}).isRequired};const V=({commandsManager:e,servicesManager:t,extensionManager:n,configuration:o,title:a})=>{const{customizationService:r}=t.services;return[{name:"panelSegmentation",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation",component:o=>{const[a]=(0,I.r)();return i.createElement(R,{commandsManager:e,servicesManager:t,extensionManager:n,configuration:{...o,disableEditing:a.disableEditing,...r.get("segmentation.panel")}})}},{name:"panelSegmentationWithTools",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation",component:o=>{const[a]=(0,I.r)();return i.createElement(i.Fragment,null,i.createElement(y.OO,{commandsManager:e,servicesManager:t,extensionManager:n,buttonSectionId:"segmentationToolbox",title:"Segmentation Tools",configuration:{...o}}),i.createElement(R,{commandsManager:e,servicesManager:t,extensionManager:n,configuration:{...o,disableEditing:a.disableEditing,...r.get("segmentation.panel")}}))}}]};var O=n(52754),U=n(45128),N=n(51250);async function A({viewportId:e,loadFn:t,servicesManager:n,referencedDisplaySetInstanceUID:o}){const{cornerstoneViewportService:a,segmentationService:i,viewportGridService:r}=n.services,c=F({viewportId:e,viewportGridService:r}),l=c.viewportOptions.viewportId,d=G({servicesManager:n,viewportId:e,referencedDisplaySetInstanceUID:o=o||c?.displaySetInstanceUIDs[0]}),g=async()=>{const e=await t();i.hydrateSegmentation(e)},m=Array.from(s.cache._volumeCache.keys()).some((e=>e.includes(o)));return d.forEach((async e=>{e.viewportOptions={...e.viewportOptions,viewportType:"volume",needsRerendering:!0};const t=e.viewportId,n=a.getCornerstoneViewport(t),i=n.getCamera();if(m&&t===l)return void await g();const r=async e=>{const n=e.detail.volumeActors?.find((e=>e.uid.includes(o))),c=a.getCornerstoneViewport(t);c.setCamera(i),c.element.removeEventListener(s.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,r),n&&t===l&&await g()};n.element.addEventListener(s.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,r)})),r.setDisplaySetsForViewports(d),!0}const F=({viewportId:e,viewportGridService:t})=>{const{viewports:n,activeViewportId:o}=t.getState(),a=e||o;return n.get(a)};function G({viewportId:e,servicesManager:t,referencedDisplaySetInstanceUID:n}){const{hangingProtocolService:o,displaySetService:a,segmentationService:i,viewportGridService:r}=t.services,{viewports:s,isHangingProtocolLayout:c}=r.getState(),l=F({viewportId:e,viewportGridService:r}).viewportOptions.viewportId,d=s.get(l).displaySetInstanceUIDs,g=n||d[0],m=a.getDisplaySetByUID(g).instances[0].FrameOfReferenceUID,S=o.getViewportsRequireUpdate(l,g,c);return s.forEach(((e,t)=>{if(l===t||S.find((e=>e.viewportId===t)))return;i.shouldRenderSegmentation(e.displaySetInstanceUIDs,m)&&S.push({viewportId:t,displaySetInstanceUIDs:e.displaySetInstanceUIDs,viewportOptions:{viewportType:"volume",needsRerendering:!0}})})),S.filter((e=>"volume3d"!==e.viewportOptions?.viewportType))}const{segmentation:x}=c.utilities,{datasetToBlob:L}=d.Ay.data,{Cornerstone3D:{Segmentation:{generateLabelMaps2DFrom3D:P,generateSegmentation:k}}}=l.ql,{Cornerstone3D:{RTSS:{generateRTSSFromSegmentations:_}}}=l.f_,{downloadDICOMData:B}=l._$,q=({servicesManager:e,extensionManager:t})=>{const{uiNotificationService:n,segmentationService:o,uiDialogService:a,displaySetService:i,viewportGridService:l,toolGroupService:g}=e.services,m={getUpdatedViewportsForSegmentation:G,createEmptySegmentationForViewport:async({viewportId:t})=>{const a=F({viewportId:t,viewportGridService:l}),r=a.displaySetInstanceUIDs[0];i.getDisplaySetByUID(r).isReconstructable?A({viewportId:t,servicesManager:e,loadFn:async()=>{const e=o.getSegmentations(),t=await o.createSegmentationForDisplaySet(r,{label:`Segmentation ${e.length+1}`}),n=a.viewportOptions.toolGroupId;return await o.addSegmentationRepresentationToToolGroup(n,t),o.addSegment(t,{toolGroupId:n,segmentIndex:1,properties:{label:"Segment 1"}}),t}}):n.show({title:"Segmentation",message:"Segmentation is not supported for non-reconstructible displaysets yet",type:"error"})},loadSegmentationsForViewport:async({segmentations:t,viewportId:n})=>{A({viewportId:n,servicesManager:e,loadFn:async()=>{const e=F({viewportId:n,viewportGridService:l}),a=e.displaySetInstanceUIDs[0],i=t[0],r=i.id,s=i.label,c=i.segments;if(delete i.segments,await o.createSegmentationForDisplaySet(a,{segmentationId:r,label:s}),i.scalarData){o.getLabelmapVolume(r).scalarData.set(i.scalarData)}o.addOrUpdateSegmentation(i);const d=e.viewportOptions.toolGroupId;return await o.addSegmentationRepresentationToToolGroup(d,r),c.forEach((e=>{null!==e&&o.addSegment(r,{segmentIndex:e.segmentIndex,toolGroupId:d,properties:{color:e.color,label:e.label,opacity:e.opacity,isLocked:e.isLocked,visibility:e.isVisible,active:i.activeSegmentIndex===e.segmentIndex}})})),i.centroidsIJK&&o.setCentroids(i.id,i.centroidsIJK),r}})},loadSegmentationDisplaySetsForViewport:async({viewportId:t,displaySets:n})=>{const a=n[0],r=i.getDisplaySetByUID(a.referencedDisplaySetInstanceUID);A({viewportId:t,servicesManager:e,referencedDisplaySetInstanceUID:a.referencedDisplaySetInstanceUID,loadFn:async()=>{const e=a,t="SEG"===e.Modality?"createSegmentationForSEGDisplaySet":"createSegmentationForRTDisplaySet",n=o[t].bind(o),i=await n(e,null,!1);return o.getSegmentation(i).description=`S${r.SeriesNumber}: ${r.SeriesDescription}`,i}})},generateSegmentation:({segmentationId:e,options:t={}})=>{const n=c.segmentation.state.getSegmentation(e),{referencedVolumeId:a}=n.representationData.LABELMAP,i=s.cache.getVolume(e),r=s.cache.getVolume(a).getCornerstoneImages(),l=P(i);l.metadata=[];const g=o.getSegmentation(e);l.segmentsOnLabelmap.forEach((e=>{const t=g?.segments[e],{label:n,color:o}=t,a=d.Ay.data.Colors.rgb2DICOMLAB(o.slice(0,3).map((e=>e/255))).map((e=>Math.round(e))),i={SegmentNumber:e.toString(),SegmentLabel:n,SegmentAlgorithmType:"MANUAL",SegmentAlgorithmName:"OHIF Brush",RecommendedDisplayCIELabValue:a,SegmentedPropertyCategoryCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"},SegmentedPropertyTypeCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"}};l.metadata[e]=i}));return k(r,l,s.metaData,t)},downloadSegmentation:({segmentationId:e})=>{const t=o.getSegmentation(e),n=m.generateSegmentation({segmentationId:e});B(n.dataset,`${t.label}`)},storeSegmentation:async({segmentationId:e,dataSource:n})=>{const i=await(0,b.createReportDialogPrompt)(a,{extensionManager:t});if(1!==i.action&&i.value)return;const s=o.getSegmentation(e);if(!s)throw new Error("No segmentation found");const{label:c}=s,l=i.value||c||"Research Derived Series",d=m.generateSegmentation({segmentationId:e,options:{SeriesDescription:l}});if(!d||!d.dataset)throw new Error("Error during segmentation generation");const{dataset:g}=d;return await n.store.dicom(g),g.wadoRoot=n.getConfig().wadoRoot,r.DicomMetadataStore.addInstances([g],!0),g},downloadRTSS:({segmentationId:e})=>{const t=o.getSegmentation(e),n={vtkImageMarchingSquares:O.Ay,vtkDataArray:U.Ay,vtkImageData:N.Ay},a=_(t,r.classes.MetadataProvider,r.DicomMetadataStore,s.cache,c.Enums,n);try{const e=L(a),t=URL.createObjectURL(e);window.location.assign(t)}catch(e){console.warn(e)}},setBrushSize:({value:e,toolNames:t})=>{const n=Number(e);g.getToolGroupIds()?.forEach((e=>{0===t?.length?x.setBrushSizeForToolGroup(e,n):t?.forEach((t=>{x.setBrushSizeForToolGroup(e,n,t)}))}))},setThresholdRange:({value:e,toolNames:t=["ThresholdCircularBrush","ThresholdSphereBrush"]})=>{g.getToolGroupIds()?.forEach((n=>{const o=g.getToolGroup(n);t?.forEach((t=>{o.setToolConfiguration(t,{strategySpecificConfiguration:{THRESHOLD:{threshold:e}}})}))}))}},S={getUpdatedViewportsForSegmentation:{commandFn:m.getUpdatedViewportsForSegmentation},loadSegmentationDisplaySetsForViewport:{commandFn:m.loadSegmentationDisplaySetsForViewport},loadSegmentationsForViewport:{commandFn:m.loadSegmentationsForViewport},createEmptySegmentationForViewport:{commandFn:m.createEmptySegmentationForViewport},generateSegmentation:{commandFn:m.generateSegmentation},downloadSegmentation:{commandFn:m.downloadSegmentation},storeSegmentation:{commandFn:m.storeSegmentation},downloadRTSS:{commandFn:m.downloadRTSS},setBrushSize:{commandFn:m.setBrushSize},setThresholdRange:{commandFn:m.setThresholdRange}};return{actions:m,definitions:S,defaultContext:"SEGMENTATION"}};function W(){return W=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},W.apply(this,arguments)}const H=i.lazy((()=>n.e(295).then(n.bind(n,58295)))),z=e=>i.createElement(i.Suspense,{fallback:i.createElement("div",null,"Loading...")},i.createElement(H,e)),j={id:o,getPanelModule:V,getCommandsModule:q,getToolbarModule:function({servicesManager:e}){const{segmentationService:t,toolbarService:n,toolGroupService:o}=e.services;return[{name:"evaluate.cornerstone.segmentation",evaluate:({viewportId:e,button:a,toolNames:i,disabledText:r})=>{const s=t.getSegmentations();if(!s?.length)return{disabled:!0,className:"!text-common-bright !bg-black opacity-50",disabledText:r??"No segmentations available"};const c=o.getToolGroupForViewport(e);if(!c)return{disabled:!0,className:"!text-common-bright ohif-disabled",disabledText:r??"Not available on the current viewport"};const l=n.getToolNameForButton(a);if(!c.hasTool(l)&&!i)return{disabled:!0,className:"!text-common-bright ohif-disabled",disabledText:r??"Not available on the current viewport"};const d=i?i.includes(c.getActivePrimaryMouseButtonTool()):c.getActivePrimaryMouseButtonTool()===l;return{disabled:!1,className:d?"!text-black !bg-primary-light hover:bg-primary-light hover-text-black hover:cursor-pointer":"!text-common-bright !bg-black hover:bg-primary-light hover:cursor-pointer hover:text-black",isActive:d}}}]},getViewportModule:({servicesManager:e,extensionManager:t,commandsManager:n})=>[{name:"dicom-seg",component:o=>i.createElement(z,W({servicesManager:e,extensionManager:t,commandsManager:n},o))}],getSopClassHandlerModule:p,getHangingProtocolModule:v}}}]);
//# sourceMappingURL=633.bundle.2591d77209742320092b.js.map