@ohif/extension-cornerstone-dicom-seg 3.12.0 → 3.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see ohif-extension-cornerstone-dicom-seg.umd.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@cornerstonejs/adapters"),require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@cornerstonejs/tools/enums"),require("@cornerstonejs/tools/utilities"),require("@ohif/core"),require("@ohif/core/src/contextProviders/SystemProvider"),require("@ohif/extension-cornerstone"),require("@ohif/extension-default"),require("@ohif/i18n"),require("@ohif/ui-next"),require("dcmjs")):"function"==typeof define&&define.amd?define(["@cornerstonejs/adapters","@cornerstonejs/core","@cornerstonejs/tools","@cornerstonejs/tools/enums","@cornerstonejs/tools/utilities","@ohif/core","@ohif/core/src/contextProviders/SystemProvider","@ohif/extension-cornerstone","@ohif/extension-default","@ohif/i18n","@ohif/ui-next","dcmjs"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-seg"]=t(require("@cornerstonejs/adapters"),require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@cornerstonejs/tools/enums"),require("@cornerstonejs/tools/utilities"),require("@ohif/core"),require("@ohif/core/src/contextProviders/SystemProvider"),require("@ohif/extension-cornerstone"),require("@ohif/extension-default"),require("@ohif/i18n"),require("@ohif/ui-next"),require("dcmjs")):e["ohif-extension-cornerstone-dicom-seg"]=t(e["@cornerstonejs/adapters"],e["@cornerstonejs/core"],e["@cornerstonejs/tools"],e["@cornerstonejs/tools/enums"],e["@cornerstonejs/tools/utilities"],e["@ohif/core"],e["@ohif/core/src/contextProviders/SystemProvider"],e["@ohif/extension-cornerstone"],e["@ohif/extension-default"],e["@ohif/i18n"],e["@ohif/ui-next"],e.dcmjs)}(globalThis,(e,t,n,r,o,a,s,i,c,l,u,d)=>(()=>{var m,p,g={275:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>d});var r=n(326),o=n(55);const a=function({commandsManager:e,toolGroupService:t,customizationService:n,toolGroupId:r}){const o=n.getCustomization("cornerstone.overlayViewportTools"),a=e.run("initializeSegmentLabelTool",{tools:o});return t.createToolGroupAndAddTools(r,a)};var s=n(669);const i=function({servicesManager:e,segDisplaySet:t,viewportId:n,preHydrateCallbacks:r,hydrateCallback:o}){return s.utils.promptHydrationDialog({servicesManager:e,viewportId:n,displaySet:t,preHydrateCallbacks:r,hydrateCallback:o,type:"SEG"})};var c=n(404),l=n(492);function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u.apply(null,arguments)}const d=function(e){const{servicesManager:t,commandsManager:n}=(0,l.useSystem)(),{children:d,displaySets:m,viewportOptions:p}=e,g=p.viewportId,{displaySetService:f,toolGroupService:S,segmentationService:y,customizationService:v}=t.services,b=v.getCustomization("ui.loadingIndicatorTotalPercent"),h=`SEGToolGroup-${g}`;if(m.length>1)throw new Error("SEG viewport should only have a single display set");const I=m[0],[E,w]=(0,o.useViewportGrid)(),{setPositionPresentation:x}=(0,s.usePositionPresentationStore)(),[C,D]=(0,r.useState)(!I.isLoaded),[O,N]=(0,r.useState)({percentComplete:null,totalSegments:null}),T=(0,r.useRef)(null),{viewports:R,activeViewportId:P}=E,j=I.referencedDisplaySetInstanceUID;if(!j){const e=v.getCustomization("missingReferenceDisplaySetHandler");if("function"!=typeof e)return void console.log("No customization 'missingReferenceDisplaySetHandler' registered. Skipping SEG rendering.");{const{handled:t}=e();if(t)return}}const U=f.getDisplaySetByUID(j),_=function(e,t){const{SharedFunctionalGroupsSequence:n}=t.instance,r=Array.isArray(n)?n[0]:n,{PixelMeasuresSequence:o}=r,a=Array.isArray(o)?o[0]:o,{SpacingBetweenSlices:s,SliceThickness:i}=a,c=e.images[0],l={PatientID:c.PatientID,PatientName:c.PatientName,PatientSex:c.PatientSex,PatientAge:c.PatientAge,SliceThickness:c.SliceThickness||i,StudyDate:c.StudyDate,SeriesDescription:c.SeriesDescription,SeriesInstanceUID:c.SeriesInstanceUID,SeriesNumber:c.SeriesNumber,ManufacturerModelName:c.ManufacturerModelName,SpacingBetweenSlices:c.SpacingBetweenSlices||s};return l}(U,I);T.current={displaySet:U,metadata:_};const M=(0,r.useCallback)(()=>r.createElement(s.OHIFCornerstoneViewport,u({},e,{displaySets:[I],viewportOptions:{viewportType:p.viewportType,toolGroupId:h,orientation:p.orientation,viewportId:p.viewportId,presentationIds:p.presentationIds},onElementEnabled:t=>{e.onElementEnabled?.(t)}})),[g,I,h,e,p]);(0,r.useEffect)(()=>{C||g===P&&i({servicesManager:t,viewportId:g,segDisplaySet:I,hydrateCallback:async()=>(await n.runCommand("hydrateSecondaryDisplaySet",{displaySet:I,viewportId:g}),!0)})},[t,g,I,C,n,P]),(0,r.useEffect)(()=>{y.clearSegmentationRepresentations(g);const{unsubscribe:e}=y.subscribe(y.EVENTS.SEGMENTATION_LOADING_COMPLETE,e=>{if(e.segDisplaySet?.displaySetInstanceUID===I?.displaySetInstanceUID&&D(!1),I?.firstSegmentedSliceImageId&&p?.presentationIds){const{firstSegmentedSliceImageId:e}=I,{presentationIds:t}=p;x(t.positionPresentationId,{viewReference:{referencedImageId:e}})}});return()=>{e()}},[I]),(0,r.useEffect)(()=>{const{unsubscribe:e}=y.subscribe(y.EVENTS.SEGMENT_LOADING_COMPLETE,({percentComplete:e,numSegments:t})=>{N({percentComplete:e,totalSegments:t})});return()=>{e()}},[I]),(0,r.useEffect)(()=>{const e=f.subscribe(f.EVENTS.DISPLAY_SETS_REMOVED,({displaySetInstanceUIDs:e})=>{const t=R.get(P);e.includes(t.displaySetInstanceUID)&&w.setDisplaySetsForViewport({viewportId:P,displaySetInstanceUIDs:[]})});return()=>{e.unsubscribe()}},[]),(0,r.useEffect)(()=>{let e=S.getToolGroup(h);if(!e)return n.runCommand("updateStoredSegmentationPresentation",{displaySet:I,type:c.SegmentationRepresentations.Labelmap}),y.clearSegmentationRepresentations(g),e=a({commandsManager:n,toolGroupService:S,customizationService:v,toolGroupId:h}),()=>{y.clearSegmentationRepresentations(g),S.destroyToolGroup(h)}},[]);let k=null;return T.current&&U.displaySetInstanceUID===T.current.displaySet.displaySetInstanceUID?(d&&d.length&&(k=d.map((e,t)=>e&&r.cloneElement(e,{viewportId:g,key:t}))),r.createElement(r.Fragment,null,r.createElement("div",{className:"relative flex h-full w-full flex-row overflow-hidden"},C&&r.createElement(b,{className:"h-full w-full",totalNumbers:O.totalSegments,percentComplete:O.percentComplete,loadingText:"Loading SEG..."}),M(),k))):null}},249:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),c=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),p=Symbol.iterator;var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},f=Object.assign,S={};function y(e,t,n){this.props=e,this.context=t,this.refs=S,this.updater=n||g}function v(){}function b(e,t,n){this.props=e,this.context=t,this.refs=S,this.updater=n||g}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=y.prototype;var h=b.prototype=new v;h.constructor=b,f(h,y.prototype),h.isPureReactComponent=!0;var I=Array.isArray,E=Object.prototype.hasOwnProperty,w={current:null},x={key:!0,ref:!0,__self:!0,__source:!0};function C(e,t,r){var o,a={},s=null,i=null;if(null!=t)for(o in void 0!==t.ref&&(i=t.ref),void 0!==t.key&&(s=""+t.key),t)E.call(t,o)&&!x.hasOwnProperty(o)&&(a[o]=t[o]);var c=arguments.length-2;if(1===c)a.children=r;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];a.children=l}if(e&&e.defaultProps)for(o in c=e.defaultProps)void 0===a[o]&&(a[o]=c[o]);return{$$typeof:n,type:e,key:s,ref:i,props:a,_owner:w.current}}function D(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var O=/\/+/g;function N(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(e){return t[e]})}(""+e.key):t.toString(36)}function T(e,t,o,a,s){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var c=!1;if(null===e)c=!0;else switch(i){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case n:case r:c=!0}}if(c)return s=s(c=e),e=""===a?"."+N(c,0):a,I(s)?(o="",null!=e&&(o=e.replace(O,"$&/")+"/"),T(s,t,o,"",function(e){return e})):null!=s&&(D(s)&&(s=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(s,o+(!s.key||c&&c.key===s.key?"":(""+s.key).replace(O,"$&/")+"/")+e)),t.push(s)),1;if(c=0,a=""===a?".":a+":",I(e))for(var l=0;l<e.length;l++){var u=a+N(i=e[l],l);c+=T(i,t,o,u,s)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),l=0;!(i=e.next()).done;)c+=T(i=i.value,t,o,u=a+N(i,l++),s);else if("object"===i)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return c}function R(e,t,n){if(null==e)return e;var r=[],o=0;return T(e,r,"","",function(e){return t.call(n,e,o++)}),r}function P(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)},function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)}),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var j={current:null},U={transition:null},_={ReactCurrentDispatcher:j,ReactCurrentBatchConfig:U,ReactCurrentOwner:w};function M(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:R,forEach:function(e,t,n){R(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return R(e,function(){t++}),t},toArray:function(e){return R(e,function(e){return e})||[]},only:function(e){if(!D(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=y,t.Fragment=o,t.Profiler=s,t.PureComponent=b,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=_,t.act=M,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=f({},e.props),a=e.key,s=e.ref,i=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,i=w.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(l in t)E.call(t,l)&&!x.hasOwnProperty(l)&&(o[l]=void 0===t[l]&&void 0!==c?c[l]:t[l])}var l=arguments.length-2;if(1===l)o.children=r;else if(1<l){c=Array(l);for(var u=0;u<l;u++)c[u]=arguments[u+2];o.children=c}return{$$typeof:n,type:e.type,key:a,ref:s,props:o,_owner:i}},t.createContext=function(e){return(e={$$typeof:c,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=C,t.createFactory=function(e){var t=C.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=D,t.lazy=function(e){return{$$typeof:m,_payload:{_status:-1,_result:e},_init:P}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=U.transition;U.transition={};try{e()}finally{U.transition=t}},t.unstable_act=M,t.useCallback=function(e,t){return j.current.useCallback(e,t)},t.useContext=function(e){return j.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return j.current.useDeferredValue(e)},t.useEffect=function(e,t){return j.current.useEffect(e,t)},t.useId=function(){return j.current.useId()},t.useImperativeHandle=function(e,t,n){return j.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return j.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return j.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return j.current.useMemo(e,t)},t.useReducer=function(e,t,n){return j.current.useReducer(e,t,n)},t.useRef=function(e){return j.current.useRef(e)},t.useState=function(e){return j.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return j.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return j.current.useTransition()},t.version="18.3.1"},326:(e,t,n)=>{"use strict";e.exports=n(249)},741:e=>{e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},142:t=>{"use strict";t.exports=e},557:e=>{"use strict";e.exports=t},713:e=>{"use strict";e.exports=n},404:e=>{"use strict";e.exports=r},154:e=>{"use strict";e.exports=o},2:e=>{"use strict";e.exports=a},492:e=>{"use strict";e.exports=s},669:e=>{"use strict";e.exports=i},438:e=>{"use strict";e.exports=c},545:e=>{"use strict";e.exports=l},55:e=>{"use strict";e.exports=u},111:e=>{"use strict";e.exports=d}},f={};function S(e){var t=f[e];if(void 0!==t)return t.exports;var n=f[e]={exports:{}};return g[e](n,n.exports,S),n.exports}S.m=g,m=[],S.O=(e,t,n,r)=>{if(!t){var o=1/0;for(c=0;c<m.length;c++){for(var[t,n,r]=m[c],a=!0,s=0;s<t.length;s++)(!1&r||o>=r)&&Object.keys(S.O).every(e=>S.O[e](t[s]))?t.splice(s--,1):(a=!1,r<o&&(o=r));if(a){m.splice(c--,1);var i=n();void 0!==i&&(e=i)}}return e}r=r||0;for(var c=m.length;c>0&&m[c-1][2]>r;c--)m[c]=m[c-1];m[c]=[t,n,r]},S.F={},S.E=e=>{Object.keys(S.F).map(t=>{S.F[t](e)})},S.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return S.d(t,{a:t}),t},S.d=(e,t)=>{for(var n in t)S.o(t,n)&&!S.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},S.miniCssF=e=>{},S.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),S.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},S.p="/",p={524:0},S.F.j=e=>{if(!S.o(p,e)||void 0===p[e]){p[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===p[e],S.O(0,[524],()=>{S.E(524)},5);var y={};return(()=>{"use strict";S.r(y),S.d(y,{default:()=>ae});const e=JSON.parse('{"UU":"@ohif/extension-cornerstone-dicom-seg"}').UU,t=`${e}.sopClassHandlerModule.dicom-seg`;var n=S(326),r=S(2),o=S(545),a=S.n(o),s=S(557),i=S(713),c=S(142),l=S(111),u=S.n(l);const d=["1.2.840.10008.5.1.4.1.1.66.4","1.2.840.10008.5.1.4.1.1.66.7"],m={};function p(e,n,o){r.utils.sortStudyInstances(e);const l=e[e.length-1],{StudyInstanceUID:p,SeriesInstanceUID:g,SOPInstanceUID:f,SeriesDescription:S="",SeriesNumber:y,SeriesDate:v,StructureSetDate:b,SOPClassUID:h,wadoRoot:I,wadoUri:E,wadoUriRoot:w,imageId:x}=l,C={Modality:"SEG",loading:!1,isReconstructable:!1,displaySetInstanceUID:r.utils.guid(),SeriesDescription:S,SeriesNumber:y,SeriesDate:v||b||"",SOPInstanceUID:f,SeriesInstanceUID:g,StudyInstanceUID:p,SOPClassHandlerId:t,SOPClassUID:h,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,segments:{},sopClassUids:d,instance:l,predecessorImageId:x,instances:[l],wadoRoot:I,wadoUriRoot:w,wadoUri:E,isOverlayDisplaySet:!0,label:S||`${a().t("Series")} ${y} - ${a().t("SEG")}`},D=l.ReferencedSeriesSequence;if(!D)return void console.error("ReferencedSeriesSequence is missing for the SEG");const O=D[0]||D;C.referencedImages=l.ReferencedSeriesSequence.ReferencedInstanceSequence,C.referencedSeriesInstanceUID=O.SeriesInstanceUID;const{displaySetService:N}=n.services,T=N.getDisplaySetsForReferences(l.ReferencedSeriesSequence);T?.length>1&&console.warn("Segmentation does not currently handle references to multiple series, defaulting to first series");const R=T[0];if(R)C.referencedDisplaySetInstanceUID=R.displaySetInstanceUID,C.isReconstructable=R.isReconstructable;else{const{unsubscribe:e}=N.subscribe(N.EVENTS.DISPLAY_SETS_ADDED,({displaySetsAdded:t})=>{const n=t[0];n.SeriesInstanceUID===C.referencedSeriesInstanceUID&&(C.referencedDisplaySetInstanceUID=n.displaySetInstanceUID,C.isReconstructable=n.isReconstructable,e())})}return C.load=async({headers:e})=>await function(e,t,n,r){const{SOPInstanceUID:o}=e,{segmentationService:a}=t.services;if((e.loading||e.isLoaded)&&m[o]&&function(e){return i.segmentation.state.getSegmentation(e.displaySetInstanceUID)}(e))return m[o];return e.loading=!0,m[o]=new Promise(async(o,l)=>{if(!e.segments||0===Object.keys(e.segments).length)try{await async function({extensionManager:e,servicesManager:t,segDisplaySet:n,headers:r}){const o=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),{segmentationService:a,uiNotificationService:l}=t.services,{dicomLoaderService:d}=o.exports,m=await d.findDicomDataPromise(n,null,r),p=t.services.displaySetService.getDisplaySetByUID(n.referencedDisplaySetInstanceUID);if(!p)throw new Error("referencedDisplaySet is missing for SEG");let{imageIds:g}=p;if(!g){const{images:e}=p;g=e.map(e=>e.imageId)}const f=.001;s.eventTarget.addEventListener(c.Enums.Events.SEGMENTATION_LOAD_PROGRESS,e=>{const{percentComplete:t}=e.detail;a._broadcastEvent(a.EVENTS.SEGMENT_LOADING_COMPLETE,{percentComplete:t})});const S=await c.adaptersSEG.Cornerstone3D.Segmentation.createFromDICOMSegBuffer(g,m,{metadataProvider:s.metaData,tolerance:f});let y=!0;S.segMetadata.data.forEach((e,t)=>{var n;t>0&&(e.rgba=e.RecommendedDisplayCIELabValue,e.rgba?e.rgba=(n=e.rgba,u().data.Colors.dicomlab2RGB(n).map(e=>Math.round(255*e))):(y=!1,e.rgba=i.CONSTANTS.COLOR_LUT[t%i.CONSTANTS.COLOR_LUT.length]))}),y||l.show({title:"DICOM SEG import",message:"RecommendedDisplayCIELabValue not found for one or more segments. The default color was used instead.",type:"warning",duration:5e3});Object.assign(n,S)}({extensionManager:n,servicesManager:t,segDisplaySet:e,headers:r})}catch(t){return e.loading=!1,l(t)}a.createSegmentationForSEGDisplaySet(e).then(()=>{e.loading=!1,o()}).catch(t=>{e.loading=!1,l(t)})}),m[o]}(C,n,o,e),[C]}const g=function(e){const{servicesManager:t,extensionManager:n}=e;return[{name:"dicom-seg",sopClassUids:d,getDisplaySetsFromSeries:e=>p(e,t,n)}]},f={id:"@ohif/seg",name:"Segmentations",protocolMatchingRules:[],toolGroupIds:["default"],numberOfPriorsReferenced:0,defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0,syncGroups:[{type:"hydrateseg",id:"sameFORId",source:!0,target:!0}]},displaySets:[{id:"segDisplaySetId",matchedDisplaySetsIndex:-1}]},displaySetSelectors:{segDisplaySetId:{seriesMatchingRules:[{attribute:"Modality",constraint:{equals:"SEG"}}]}},stages:[{name:"Segmentations",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{allowUnmatchedView:!0,syncGroups:[{type:"hydrateseg",id:"sameFORId",source:!0,target:!0}]},displaySets:[{id:"segDisplaySetId"}]}]}]};const v=function(){return[{name:f.id,protocol:f}]};var b=S(438);const h={NO_NEVER:-1,CANCEL:0,CREATE_REPORT:1,ADD_SERIES:2,SET_STUDY_AND_SERIES:3,NO_NOT_FOR_SERIES:4},{Cornerstone3D:{Segmentation:{generateSegmentation:I}}}=c.adaptersSEG,{Cornerstone3D:{RTSS:{generateRTSSFromRepresentation:E}}}=c.adaptersRT,{downloadDICOMData:w}=c.helpers,x=({servicesManager:e,extensionManager:t})=>{const{segmentationService:n,displaySetService:o,viewportGridService:a}=e.services,c={loadSegmentationsForViewport:async({segmentations:e,viewportId:t})=>{const r=(({viewportId:e,viewportGridService:t})=>{const{viewports:n,activeViewportId:r}=t.getState(),o=e||r;return n.get(o)})({viewportId:t,viewportGridService:a}),s=r.displaySetInstanceUIDs[0],i=e[0],c=i.segmentationId,l=i.config.label,u=i.config.segments,d=o.getDisplaySetByUID(s);return await n.createLabelmapForDisplaySet(d,{segmentationId:c,segments:u,label:l}),n.addOrUpdateSegmentation(i),await n.addSegmentationRepresentation(r.viewportId,{segmentationId:c}),c},generateSegmentation:({segmentationId:e,options:t={}})=>{const r=i.segmentation.state.getSegmentation(e),o=t.predecessorImageId??r.predecessorImageId,{imageIds:a}=r.representationData.Labelmap,c=a.map(e=>s.cache.getImage(e)),l=c.map(e=>s.cache.getImage(e.referencedImageId)),d=[];let m=0;for(const e of c){const t=new Set,n=e.getPixelData(),{rows:r,columns:o}=e;for(let e=0;e<n.length;e++){const r=n[e];0!==r&&t.add(r)}d[m++]={segmentsOnLabelmap:Array.from(t),pixelData:n,rows:r,columns:o}}const p=d.map(e=>e.segmentsOnLabelmap),g={segmentsOnLabelmap:Array.from(new Set(p.flat())),metadata:[],labelmaps2D:d},f=n.getSegmentation(e),S=n.getRepresentationsForSegmentation(e);Object.entries(f.segments).forEach(([t,r])=>{if(!r)return;const{label:o}=r,a=S[0],s=n.getSegmentColor(a.viewportId,e,r.segmentIndex),i=u().data.Colors.rgb2DICOMLAB(s.slice(0,3).map(e=>e/255)).map(e=>Math.round(e)),c={SegmentNumber:t.toString(),SegmentLabel:o,SegmentAlgorithmType:r?.algorithmType||"MANUAL",SegmentAlgorithmName:r?.algorithmName||"OHIF Brush",RecommendedDisplayCIELabValue:i,SegmentedPropertyCategoryCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"},SegmentedPropertyTypeCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"}};g.metadata[t]=c});return I(l,g,s.metaData,{predecessorImageId:o,...t})},downloadSegmentation:({segmentationId:e})=>{const t=n.getSegmentation(e),r=c.generateSegmentation({segmentationId:e});w(r.dataset,`${t.label}`)},storeSegmentation:async({segmentationId:o,dataSource:a,modality:s="SEG"})=>{const i=n.getSegmentation(o);if(!i)throw new Error("No segmentation found");const{label:l,predecessorImageId:u}=i,d=a??t.getActiveDataSource()[0],{value:m,dataSourceName:p,series:g,priorSeriesNumber:f,action:S}=await(0,b.createReportDialogPrompt)({servicesManager:e,extensionManager:t,predecessorImageId:u,title:"Store Segmentation",modality:s});if(S===h.CREATE_REPORT)try{const e=p?t.getDataSources(p)[0]:d,n={segmentationId:o,options:{SeriesDescription:g?void 0:m||l||"Contour Series",SeriesNumber:g?void 0:1+f,predecessorImageId:g}},a="SEG"===s&&c.generateSegmentation(n)||"RTSTRUCT"===s&&c.generateContour(n),i=await a;if(!i||!i.dataset)throw new Error("Error during segmentation generation");const{dataset:u}=i;return"No Study ID"===u.StudyID&&(u.StudyID=""),await e.store.dicom(u),u.wadoRoot=e.getConfig().wadoRoot,r.DicomMetadataStore.addInstances([u],!0),u}catch(e){throw console.debug("Error storing segmentation:",e),e}},generateContour:async e=>{const{segmentationId:t,options:r}=e,o=n.getSegmentation(t),a=n.getRepresentationsForSegmentation(t)[0];Object.entries(o.segments).forEach(([e,r])=>{r.color=n.getSegmentColor(a.viewportId,t,Number(e))});const s=r?.predecessorImageId??o.predecessorImageId;return{dataset:await E(o,{predecessorImageId:s,...r})}},downloadRTSS:async e=>{const{dataset:t}=await c.generateContour(e),{InstanceNumber:n=1,SeriesInstanceUID:r}=t;try{w(t,`rtss-${r}-${n}.dcm`)}catch(e){console.warn(e)}},toggleActiveSegmentationUtility:({itemId:e})=>{const{uiState:t,setUIState:n}=b.useUIStateStore.getState(),r=t.activeSegmentationUtility===e;console.log("toggleActiveSegmentationUtility",r,e),n("activeSegmentationUtility",r?null:e)}},l={loadSegmentationsForViewport:c.loadSegmentationsForViewport,generateSegmentation:c.generateSegmentation,downloadSegmentation:c.downloadSegmentation,storeSegmentation:c.storeSegmentation,downloadRTSS:c.downloadRTSS,toggleActiveSegmentationUtility:c.toggleActiveSegmentationUtility};return{actions:c,definitions:l,defaultContext:"SEGMENTATION"}};var C=S(669),D=S(55),O=S(154);S(741);Object.create(null);function N(){if(console&&console.warn){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];"string"==typeof n[0]&&(n[0]="react-i18next:: ".concat(n[0])),(e=console).warn.apply(e,n)}}var T={};function R(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&T[t[0]]||("string"==typeof t[0]&&(T[t[0]]=new Date),N.apply(void 0,t))}var P=function(e,t){return function(){if(e.isInitialized)t();else{e.on("initialized",function n(){setTimeout(function(){e.off("initialized",n)},0),t()})}}};function j(e,t,n){e.loadNamespaces(t,P(e,n))}function U(e,t,n,r){"string"==typeof n&&(n=[n]),n.forEach(function(t){e.options.ns.indexOf(t)<0&&e.options.ns.push(t)}),e.loadLanguages(t,P(e,r))}function _(e){return _="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"!=_(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=_(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==_(t)?t:t+""}function k(e,t,n){return(t=M(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var A=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,L={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},G=function(e){return L[e]};var V={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(A,G)}};var q;function F(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)}}var $=(0,n.createContext)(),B=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.usedNamespaces={}}return function(e,t,n){t&&F(e.prototype,t),n&&F(e,n),Object.defineProperty(e,"prototype",{writable:!1})}(e,[{key:"addUsedNamespaces",value:function(e){var t=this;e.forEach(function(e){t.usedNamespaces[e]||(t.usedNamespaces[e]=!0)})}},{key:"getUsedNamespaces",value:function(){return Object.keys(this.usedNamespaces)}}]),e}();function 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(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,s,i=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(i.push(r.value),i.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(l)throw o}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return H(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?H(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Y(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 W(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y(Object(n),!0).forEach(function(t){k(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Y(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function J(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.i18n,o=(0,n.useContext)($)||{},a=o.i18n,s=o.defaultNS,i=r||a||q;if(i&&!i.reportNamespaces&&(i.reportNamespaces=new B),!i){R("You will need to pass in an i18next instance by using initReactI18next");var c=function(e,t){return"string"==typeof t?t:t&&"object"===_(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},l=[c,{},!1];return l.t=c,l.i18n={},l.ready=!1,l}i.options.react&&void 0!==i.options.react.wait&&R("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var u=W(W(W({},V),i.options.react),t),d=u.useSuspense,m=u.keyPrefix,p=e||s||i.options&&i.options.defaultNS;p="string"==typeof p?[p]:p||["translation"],i.reportNamespaces.addUsedNamespaces&&i.reportNamespaces.addUsedNamespaces(p);var g=(i.isInitialized||i.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?t.hasLoadedNamespace(e,{lng:n.lng,precheck:function(t,r){if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}):function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=t.languages[0],o=!!t.options&&t.options.fallbackLng,a=t.languages[t.languages.length-1];if("cimode"===r.toLowerCase())return!0;var s=function(e,n){var r=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===r||2===r};return!(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!s(t.isLanguageChangingTo,e)||!t.hasResourceBundle(r,e)&&t.services.backendConnector.backend&&(!t.options.resources||t.options.partialBundledLanguages)&&(!s(r,e)||o&&!s(a,e)))}(e,t,n):(R("i18n.languages were undefined or empty",t.languages),!0)}(e,i,u)});function f(){return i.getFixedT(t.lng||null,"fallback"===u.nsMode?p:p[0],m)}var S=z((0,n.useState)(f),2),y=S[0],v=S[1],b=p.join();t.lng&&(b="".concat(t.lng).concat(b));var h,I,E,w=(h=b,E=(0,n.useRef)(),(0,n.useEffect)(function(){E.current=I?E.current:h},[h,I]),E.current),x=(0,n.useRef)(!0);(0,n.useEffect)(function(){var e=u.bindI18n,n=u.bindI18nStore;function r(){x.current&&v(f)}return x.current=!0,g||d||(t.lng?U(i,t.lng,p,function(){x.current&&v(f)}):j(i,p,function(){x.current&&v(f)})),g&&w&&w!==b&&x.current&&v(f),e&&i&&i.on(e,r),n&&i&&i.store.on(n,r),function(){x.current=!1,e&&i&&e.split(" ").forEach(function(e){return i.off(e,r)}),n&&i&&n.split(" ").forEach(function(e){return i.store.off(e,r)})}},[i,b]);var C=(0,n.useRef)(!0);(0,n.useEffect)(function(){x.current&&!C.current&&v(f),C.current=!1},[i,m]);var D=[y,i,g];if(D.t=y,D.i18n=i,D.ready=g,g)return D;if(!g&&!d)return D;throw new Promise(function(e){t.lng?U(i,t.lng,p,function(){return e()}):j(i,p,function(){return e()})})}const{LogicalOperation:K}=O.contourSegmentation,Q=[{value:"merge",logicalOperation:K.Union,label:"Merge",icon:"actions-combine-merge",helperIcon:"helper-combine-merge"},{value:"intersect",logicalOperation:K.Intersect,label:"Intersect",icon:"actions-combine-intersect",helperIcon:"helper-combine-intersect"},{value:"subtract",logicalOperation:K.Subtract,label:"Subtract",icon:"actions-combine-subtract",helperIcon:"helper-combine-subtract"}];function X({label:e,value:t,onValueChange:r,segments:o,placeholder:a="Select a segment"}){const{t:s}=J("SegmentationPanel");return n.createElement("div",{className:"flex justify-between gap-6"},n.createElement("div",null,e),n.createElement(D.Select,{key:`select-segment-${e}`,onValueChange:r,value:t},n.createElement(D.SelectTrigger,{className:"overflow-hidden"},n.createElement(D.SelectValue,{placeholder:s(a)})),n.createElement(D.SelectContent,null,o.map(e=>n.createElement(D.SelectItem,{key:e.segmentIndex,value:e.segmentIndex.toString()},e.label)))))}const Z=function(){const{servicesManager:e}=(0,r.useSystem)(),{segmentationService:t}=e.services,{t:o}=J("SegmentationPanel"),{segmentationsWithRepresentations:a}=(0,C.useActiveViewportSegmentationRepresentations)(),s=a?.find(({representation:e})=>e?.active),i=s?Object.values(s.segmentation.segments):[],c=s?t.getNextAvailableSegmentIndex(s.segmentation.segmentationId):1,l=i.find(e=>e.active),u=l?.segmentIndex||0,[d,m]=(0,n.useState)(Q[0]),[p,g]=(0,n.useState)(u?.toString()||""),[f,S]=(0,n.useState)(""),[y,v]=(0,n.useState)(!1),[b,h]=(0,n.useState)("");(0,n.useEffect)(()=>{g(u?.toString()||null)},[u]),(0,n.useEffect)(()=>{h(`Segment ${c}`)},[c]);const I=(0,r.useRunCommand)(),E=(0,n.useCallback)(()=>{let e=p;y&&(e=c.toString(),I("addSegment",{segmentationId:s.segmentation.segmentationId,config:{label:b,segmentIndex:c}})),I("applyLogicalContourOperation",{segmentAInfo:{segmentationId:s.segmentation.segmentationId,segmentIndex:parseInt(p)},segmentBInfo:{segmentationId:s.segmentation.segmentationId,segmentIndex:parseInt(f)},resultSegmentInfo:{segmentationId:s.segmentation.segmentationId,segmentIndex:parseInt(e)},logicalOperation:d.logicalOperation})},[s?.segmentation?.segmentationId,y,b,c,d.logicalOperation,I,p,f]);return n.createElement("div",{className:"flex w-[245px] flex-col gap-4"},n.createElement("div",{className:"flex items-start justify-between"},n.createElement("div",{className:"flex w-auto flex-col items-center gap-2 text-base font-normal leading-none"},n.createElement(D.Tabs,{value:d.value},n.createElement(D.TabsList,{className:"inline-flex space-x-1"},Q.map(e=>{const{value:t,icon:r}=e;return n.createElement(D.TabsTrigger,{value:t,key:`logical-contour-operation-${t}`,onClick:()=>m(e)},n.createElement(D.Icons.ByName,{name:r}))}))),n.createElement("div",null,o(d.label))),n.createElement("div",{className:"bg-primary-dark flex h-[62px] w-[88px] items-center justify-center rounded-lg"},n.createElement(D.Icons.ByName,{name:d.helperIcon}))),n.createElement(X,{label:"A",value:p,onValueChange:g,segments:i}),n.createElement(X,{label:"B",value:f,onValueChange:S,segments:i}),n.createElement("div",{className:"flex justify-end pl-[34px]"},n.createElement(D.Button,{className:"border-primary/60 grow border",variant:"ghost",onClick:()=>{E()}},o(d.label))),n.createElement(D.Separator,{className:"bg-input mt-2 h-[1px]"}),n.createElement("div",{className:"flex flex-col gap-2"},n.createElement("div",{className:"flex items-center justify-start gap-2"},n.createElement(D.Switch,{id:"logical-contour-operations-create-new-segment-switch",onCheckedChange:v}),n.createElement(D.Label,{htmlFor:"logical-contour-operations-create-new-segment-switch"},o("Create a new segment"))),n.createElement("div",{className:"pl-9"},n.createElement(D.Input,{className:(0,D.cn)(y?"visible":"hidden"),disabled:!y,id:"logical-contour-operations-create-new-segment-input",type:"text",placeholder:o("New segment name"),value:b,onChange:e=>h(e.target.value)}))))};const ee=function(){const[e,t]=(0,n.useState)(10),o=(0,r.useRunCommand)(),{t:a}=J("SegmentationPanel");return n.createElement("div",{className:"flex w-auto w-[252px] flex-col gap-[8px] text-base font-normal leading-none"},n.createElement("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none"},n.createElement("div",null,a("Fill contour holes")),n.createElement(D.Button,{className:"border-primary/60 border",variant:"ghost",onClick:()=>{o("removeContourHoles")}},a("Fill Holes")),n.createElement(D.Separator,{className:"bg-input mt-[20px] h-[1px]"})),n.createElement("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none"},n.createElement("div",null,a("Remove Small Contours")),n.createElement("div",{className:"flex items-center gap-2 self-end"},n.createElement(D.Label,{htmlFor:"simplify-contour-options",className:"text-muted-foreground"},a("Area Threshold")),n.createElement(D.Input,{id:"simplify-contour-options",className:"w-20",type:"number",value:e,onChange:e=>t(Number(e.target.value))})),n.createElement(D.Button,{className:"border-primary/60 border",variant:"ghost",onClick:()=>{o("removeSmallContours",{areaThreshold:e})}},a("Remove Small Contours")),n.createElement(D.Separator,{className:"bg-input mt-[20px] h-[1px]"})),n.createElement("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none"},n.createElement("div",null,a("Create New Segment from Holes")),n.createElement(D.Button,{className:"border-primary/60 border",variant:"ghost",onClick:()=>{o("convertContourHoles")}},a("Create New Segment"))))};const te=function(){const e=(0,r.useRunCommand)(),{t}=J("SegmentationPanel");return n.createElement("div",{className:"flex w-auto w-[245px] flex-col gap-[8px] text-base font-normal leading-none"},n.createElement("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none"},n.createElement("div",null,t("Smooth all edges")),n.createElement(D.Button,{className:"border-primary/60 border",variant:"ghost",onClick:()=>{e("smoothContours")}},t("Smooth Edges")),n.createElement(D.Separator,{className:"bg-input mt-[20px] h-[1px]"})),n.createElement("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none"},n.createElement("div",null,t("Remove extra points")),n.createElement(D.Button,{className:"border-primary/60 border",variant:"ghost",onClick:()=>{e("decimateContours")}},t("Remove Points"))))};function ne(){return ne=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ne.apply(null,arguments)}const re=n.lazy(()=>Promise.resolve().then(S.bind(S,275))),oe=e=>n.createElement(n.Suspense,{fallback:n.createElement("div",null,"Loading...")},n.createElement(re,e)),ae={id:e,getCommandsModule:x,getToolbarModule:function({servicesManager:e}){const{segmentationService:t,toolbarService:n,toolGroupService:r}=e.services;return[{name:"cornerstone.SimplifyContourOptions",defaultComponent:ee},{name:"cornerstone.LogicalContourOperationsOptions",defaultComponent:Z},{name:"cornerstone.SmoothContoursOptions",defaultComponent:te},{name:"cornerstone.isActiveSegmentationUtility",evaluate:({button:e})=>{const{uiState:t}=b.useUIStateStore.getState();return{isActive:t.activeSegmentationUtility===e.id}}},{name:"evaluate.cornerstone.hasSegmentation",evaluate:({viewportId:e})=>{const n=t.getSegmentationRepresentations(e);return{disabled:!n?.length}}},{name:"evaluate.cornerstone.hasSegmentationOfType",evaluate:({viewportId:e,segmentationRepresentationType:n})=>{const r=t.getSegmentationRepresentations(e);return r?.length?r.some(e=>Boolean(e.type===n))?void 0:{disabled:!0,disabledText:`No ${n} segmentations available`}:{disabled:!0,disabledText:a().t("SegmentationPanel:No segmentations available")}}},{name:"evaluate.cornerstone.segmentation",evaluate:({viewportId:e,button:o,toolNames:s,disabledText:i})=>{const c=t.getSegmentationRepresentations(e);if(!c?.length)return{disabled:!0,disabledText:i??a().t("SegmentationPanel:No segmentations available")};const l=t.getActiveSegmentation(e);if(!Object.keys(l.segments).length)return{disabled:!0,disabledText:a().t("SegmentationPanel:Add segment to enable this tool")};const u=r.getToolGroupForViewport(e);if(!u)return{disabled:!0,disabledText:i??a().t("SegmentationPanel:Not available on the current viewport")};if(!s)return{disabled:!1};const d=n.getToolNameForButton(o);if(!u.hasTool(d)&&!s)return{disabled:!0,disabledText:i??a().t("SegmentationPanel:Not available on the current viewport")};return{disabled:!1,isActive:s?s.includes(u.getActivePrimaryMouseButtonTool()):u.getActivePrimaryMouseButtonTool()===d}}},{name:"evaluate.cornerstone.segmentation.synchronizeDrawingRadius",evaluate:({button:e,radiusOptionId:t})=>{const o=r.getToolGroupIds();if(o?.length)for(const r of o){const o=i.utilities.segmentation.getBrushSizeForToolGroup(r);if(o){n.getOptionById(e,t).value=o}}}}]},getViewportModule:({servicesManager:e,extensionManager:t,commandsManager:r})=>[{name:"dicom-seg",component:o=>n.createElement(oe,ne({servicesManager:e,extensionManager:t,commandsManager:r},o))}],getSopClassHandlerModule:g,getHangingProtocolModule:v}})(),y=S.O(y)})());
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@cornerstonejs/adapters"),require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@cornerstonejs/tools/enums"),require("@cornerstonejs/tools/utilities"),require("@ohif/core"),require("@ohif/core/src/contextProviders/SystemProvider"),require("@ohif/extension-cornerstone"),require("@ohif/extension-default"),require("@ohif/i18n"),require("@ohif/ui-next"),require("dcmjs")):"function"==typeof define&&define.amd?define(["@cornerstonejs/adapters","@cornerstonejs/core","@cornerstonejs/tools","@cornerstonejs/tools/enums","@cornerstonejs/tools/utilities","@ohif/core","@ohif/core/src/contextProviders/SystemProvider","@ohif/extension-cornerstone","@ohif/extension-default","@ohif/i18n","@ohif/ui-next","dcmjs"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-seg"]=t(require("@cornerstonejs/adapters"),require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@cornerstonejs/tools/enums"),require("@cornerstonejs/tools/utilities"),require("@ohif/core"),require("@ohif/core/src/contextProviders/SystemProvider"),require("@ohif/extension-cornerstone"),require("@ohif/extension-default"),require("@ohif/i18n"),require("@ohif/ui-next"),require("dcmjs")):e["ohif-extension-cornerstone-dicom-seg"]=t(e["@cornerstonejs/adapters"],e["@cornerstonejs/core"],e["@cornerstonejs/tools"],e["@cornerstonejs/tools/enums"],e["@cornerstonejs/tools/utilities"],e["@ohif/core"],e["@ohif/core/src/contextProviders/SystemProvider"],e["@ohif/extension-cornerstone"],e["@ohif/extension-default"],e["@ohif/i18n"],e["@ohif/ui-next"],e.dcmjs)}(globalThis,(e,t,n,r,o,a,s,i,c,l,u,d)=>(()=>{var m,p,g={275(e,t,n){"use strict";n.r(t),n.d(t,{default:()=>d});var r=n(326),o=n(55);const a=function({commandsManager:e,toolGroupService:t,customizationService:n,toolGroupId:r}){const o=n.getCustomization("cornerstone.overlayViewportTools"),a=e.run("initializeSegmentLabelTool",{tools:o});return t.createToolGroupAndAddTools(r,a)};var s=n(669);const i=function({servicesManager:e,segDisplaySet:t,viewportId:n,preHydrateCallbacks:r,hydrateCallback:o}){return s.utils.promptHydrationDialog({servicesManager:e,viewportId:n,displaySet:t,preHydrateCallbacks:r,hydrateCallback:o,type:"SEG"})};var c=n(404),l=n(492);function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u.apply(null,arguments)}const d=function(e){const{servicesManager:t,commandsManager:n}=(0,l.useSystem)(),{children:d,displaySets:m,viewportOptions:p}=e,g=p.viewportId,{displaySetService:f,toolGroupService:S,segmentationService:y,customizationService:v}=t.services,b=v.getCustomization("ui.loadingIndicatorTotalPercent"),h=`SEGToolGroup-${g}`;if(m.length>1)throw new Error("SEG viewport should only have a single display set");const I=m[0],[E,w]=(0,o.useViewportGrid)(),{setPositionPresentation:x}=(0,s.usePositionPresentationStore)(),[C,D]=(0,r.useState)(!I.isLoaded),[O,N]=(0,r.useState)({percentComplete:null,totalSegments:null}),T=(0,r.useRef)(null),{viewports:R,activeViewportId:P}=E,j=I.referencedDisplaySetInstanceUID;if(!j){const e=v.getCustomization("missingReferenceDisplaySetHandler");if("function"!=typeof e)return void console.log("No customization 'missingReferenceDisplaySetHandler' registered. Skipping SEG rendering.");{const{handled:t}=e();if(t)return}}const U=f.getDisplaySetByUID(j),_=function(e,t){const{SharedFunctionalGroupsSequence:n}=t.instance,r=Array.isArray(n)?n[0]:n,{PixelMeasuresSequence:o}=r,a=Array.isArray(o)?o[0]:o,{SpacingBetweenSlices:s,SliceThickness:i}=a,c=e.images[0],l={PatientID:c.PatientID,PatientName:c.PatientName,PatientSex:c.PatientSex,PatientAge:c.PatientAge,SliceThickness:c.SliceThickness||i,StudyDate:c.StudyDate,SeriesDescription:c.SeriesDescription,SeriesInstanceUID:c.SeriesInstanceUID,SeriesNumber:c.SeriesNumber,ManufacturerModelName:c.ManufacturerModelName,SpacingBetweenSlices:c.SpacingBetweenSlices||s};return l}(U,I);T.current={displaySet:U,metadata:_};const M=(0,r.useCallback)(()=>r.createElement(s.OHIFCornerstoneViewport,u({},e,{displaySets:[I],viewportOptions:{viewportType:p.viewportType,toolGroupId:h,orientation:p.orientation,viewportId:p.viewportId,presentationIds:p.presentationIds},onElementEnabled:t=>{e.onElementEnabled?.(t)}})),[g,I,h,e,p]);(0,r.useEffect)(()=>{C||g===P&&i({servicesManager:t,viewportId:g,segDisplaySet:I,hydrateCallback:async()=>(await n.runCommand("hydrateSecondaryDisplaySet",{displaySet:I,viewportId:g}),!0)})},[t,g,I,C,n,P]),(0,r.useEffect)(()=>{y.clearSegmentationRepresentations(g);const{unsubscribe:e}=y.subscribe(y.EVENTS.SEGMENTATION_LOADING_COMPLETE,e=>{if(e.segDisplaySet?.displaySetInstanceUID===I?.displaySetInstanceUID&&D(!1),I?.firstSegmentedSliceImageId&&p?.presentationIds){const{firstSegmentedSliceImageId:e}=I,{presentationIds:t}=p;x(t.positionPresentationId,{viewReference:{referencedImageId:e}})}});return()=>{e()}},[I]),(0,r.useEffect)(()=>{const{unsubscribe:e}=y.subscribe(y.EVENTS.SEGMENT_LOADING_COMPLETE,({percentComplete:e,numSegments:t})=>{N({percentComplete:e,totalSegments:t})});return()=>{e()}},[I]),(0,r.useEffect)(()=>{const e=f.subscribe(f.EVENTS.DISPLAY_SETS_REMOVED,({displaySetInstanceUIDs:e})=>{const t=R.get(P);e.includes(t.displaySetInstanceUID)&&w.setDisplaySetsForViewport({viewportId:P,displaySetInstanceUIDs:[]})});return()=>{e.unsubscribe()}},[]),(0,r.useEffect)(()=>{let e=S.getToolGroup(h);if(!e)return n.runCommand("updateStoredSegmentationPresentation",{displaySet:I,type:c.SegmentationRepresentations.Labelmap}),y.clearSegmentationRepresentations(g),e=a({commandsManager:n,toolGroupService:S,customizationService:v,toolGroupId:h}),()=>{y.clearSegmentationRepresentations(g),S.destroyToolGroup(h)}},[]);let k=null;return T.current&&U.displaySetInstanceUID===T.current.displaySet.displaySetInstanceUID?(d&&d.length&&(k=d.map((e,t)=>e&&r.cloneElement(e,{viewportId:g,key:t}))),r.createElement(r.Fragment,null,r.createElement("div",{className:"relative flex h-full w-full flex-row overflow-hidden"},C&&r.createElement(b,{className:"h-full w-full",totalNumbers:O.totalSegments,percentComplete:O.percentComplete,loadingText:"Loading SEG..."}),M(),k))):null}},249(e,t){"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),c=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),p=Symbol.iterator;var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},f=Object.assign,S={};function y(e,t,n){this.props=e,this.context=t,this.refs=S,this.updater=n||g}function v(){}function b(e,t,n){this.props=e,this.context=t,this.refs=S,this.updater=n||g}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=y.prototype;var h=b.prototype=new v;h.constructor=b,f(h,y.prototype),h.isPureReactComponent=!0;var I=Array.isArray,E=Object.prototype.hasOwnProperty,w={current:null},x={key:!0,ref:!0,__self:!0,__source:!0};function C(e,t,r){var o,a={},s=null,i=null;if(null!=t)for(o in void 0!==t.ref&&(i=t.ref),void 0!==t.key&&(s=""+t.key),t)E.call(t,o)&&!x.hasOwnProperty(o)&&(a[o]=t[o]);var c=arguments.length-2;if(1===c)a.children=r;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];a.children=l}if(e&&e.defaultProps)for(o in c=e.defaultProps)void 0===a[o]&&(a[o]=c[o]);return{$$typeof:n,type:e,key:s,ref:i,props:a,_owner:w.current}}function D(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var O=/\/+/g;function N(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(e){return t[e]})}(""+e.key):t.toString(36)}function T(e,t,o,a,s){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var c=!1;if(null===e)c=!0;else switch(i){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case n:case r:c=!0}}if(c)return s=s(c=e),e=""===a?"."+N(c,0):a,I(s)?(o="",null!=e&&(o=e.replace(O,"$&/")+"/"),T(s,t,o,"",function(e){return e})):null!=s&&(D(s)&&(s=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(s,o+(!s.key||c&&c.key===s.key?"":(""+s.key).replace(O,"$&/")+"/")+e)),t.push(s)),1;if(c=0,a=""===a?".":a+":",I(e))for(var l=0;l<e.length;l++){var u=a+N(i=e[l],l);c+=T(i,t,o,u,s)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),l=0;!(i=e.next()).done;)c+=T(i=i.value,t,o,u=a+N(i,l++),s);else if("object"===i)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return c}function R(e,t,n){if(null==e)return e;var r=[],o=0;return T(e,r,"","",function(e){return t.call(n,e,o++)}),r}function P(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)},function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)}),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var j={current:null},U={transition:null},_={ReactCurrentDispatcher:j,ReactCurrentBatchConfig:U,ReactCurrentOwner:w};function M(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:R,forEach:function(e,t,n){R(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return R(e,function(){t++}),t},toArray:function(e){return R(e,function(e){return e})||[]},only:function(e){if(!D(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=y,t.Fragment=o,t.Profiler=s,t.PureComponent=b,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=_,t.act=M,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=f({},e.props),a=e.key,s=e.ref,i=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,i=w.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(l in t)E.call(t,l)&&!x.hasOwnProperty(l)&&(o[l]=void 0===t[l]&&void 0!==c?c[l]:t[l])}var l=arguments.length-2;if(1===l)o.children=r;else if(1<l){c=Array(l);for(var u=0;u<l;u++)c[u]=arguments[u+2];o.children=c}return{$$typeof:n,type:e.type,key:a,ref:s,props:o,_owner:i}},t.createContext=function(e){return(e={$$typeof:c,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=C,t.createFactory=function(e){var t=C.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=D,t.lazy=function(e){return{$$typeof:m,_payload:{_status:-1,_result:e},_init:P}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=U.transition;U.transition={};try{e()}finally{U.transition=t}},t.unstable_act=M,t.useCallback=function(e,t){return j.current.useCallback(e,t)},t.useContext=function(e){return j.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return j.current.useDeferredValue(e)},t.useEffect=function(e,t){return j.current.useEffect(e,t)},t.useId=function(){return j.current.useId()},t.useImperativeHandle=function(e,t,n){return j.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return j.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return j.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return j.current.useMemo(e,t)},t.useReducer=function(e,t,n){return j.current.useReducer(e,t,n)},t.useRef=function(e){return j.current.useRef(e)},t.useState=function(e){return j.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return j.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return j.current.useTransition()},t.version="18.3.1"},326(e,t,n){"use strict";e.exports=n(249)},741(e){e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},142(t){"use strict";t.exports=e},557(e){"use strict";e.exports=t},713(e){"use strict";e.exports=n},404(e){"use strict";e.exports=r},154(e){"use strict";e.exports=o},2(e){"use strict";e.exports=a},492(e){"use strict";e.exports=s},669(e){"use strict";e.exports=i},438(e){"use strict";e.exports=c},545(e){"use strict";e.exports=l},55(e){"use strict";e.exports=u},111(e){"use strict";e.exports=d}},f={};function S(e){var t=f[e];if(void 0!==t)return t.exports;var n=f[e]={exports:{}};return g[e](n,n.exports,S),n.exports}S.m=g,m=[],S.O=(e,t,n,r)=>{if(!t){var o=1/0;for(c=0;c<m.length;c++){for(var[t,n,r]=m[c],a=!0,s=0;s<t.length;s++)(!1&r||o>=r)&&Object.keys(S.O).every(e=>S.O[e](t[s]))?t.splice(s--,1):(a=!1,r<o&&(o=r));if(a){m.splice(c--,1);var i=n();void 0!==i&&(e=i)}}return e}r=r||0;for(var c=m.length;c>0&&m[c-1][2]>r;c--)m[c]=m[c-1];m[c]=[t,n,r]},S.F={},S.E=e=>{Object.keys(S.F).map(t=>{S.F[t](e)})},S.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return S.d(t,{a:t}),t},S.d=(e,t)=>{for(var n in t)S.o(t,n)&&!S.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},S.miniCssF=e=>{},S.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),S.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},S.p="/",p={524:0},S.F.j=e=>{if(!S.o(p,e)||void 0===p[e]){p[e]=null;var t=document.createElement("link");t.charset="utf-8",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===p[e],S.O(0,[524],()=>{S.E(524)},5);var y={};return(()=>{"use strict";S.r(y),S.d(y,{default:()=>ae});const e=JSON.parse('{"UU":"@ohif/extension-cornerstone-dicom-seg"}').UU,t=`${e}.sopClassHandlerModule.dicom-seg`;var n=S(326),r=S(2),o=S(545),a=S.n(o),s=S(557),i=S(713),c=S(142),l=S(111),u=S.n(l);const d=["1.2.840.10008.5.1.4.1.1.66.4","1.2.840.10008.5.1.4.1.1.66.7"],m={};function p(e,n,o){r.utils.sortStudyInstances(e);const l=e[e.length-1],{StudyInstanceUID:p,SeriesInstanceUID:g,SOPInstanceUID:f,SeriesDescription:S="",SeriesNumber:y,SeriesDate:v,StructureSetDate:b,SOPClassUID:h,wadoRoot:I,wadoUri:E,wadoUriRoot:w,imageId:x}=l,C={Modality:"SEG",loading:!1,isReconstructable:!1,displaySetInstanceUID:r.utils.guid(),SeriesDescription:S,SeriesNumber:y,SeriesDate:v||b||"",SOPInstanceUID:f,SeriesInstanceUID:g,StudyInstanceUID:p,SOPClassHandlerId:t,SOPClassUID:h,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,segments:{},sopClassUids:d,instance:l,predecessorImageId:x,instances:[l],wadoRoot:I,wadoUriRoot:w,wadoUri:E,isOverlayDisplaySet:!0,label:S||`${a().t("Series")} ${y} - ${a().t("SEG")}`},D=l.ReferencedSeriesSequence;if(!D)return void console.error("ReferencedSeriesSequence is missing for the SEG");const O=D[0]||D;C.referencedImages=l.ReferencedSeriesSequence.ReferencedInstanceSequence,C.referencedSeriesInstanceUID=O.SeriesInstanceUID;const{displaySetService:N}=n.services,T=N.getDisplaySetsForReferences(l.ReferencedSeriesSequence);T?.length>1&&console.warn("Segmentation does not currently handle references to multiple series, defaulting to first series");const R=T[0];if(R)C.referencedDisplaySetInstanceUID=R.displaySetInstanceUID,C.isReconstructable=R.isReconstructable;else{const{unsubscribe:e}=N.subscribe(N.EVENTS.DISPLAY_SETS_ADDED,({displaySetsAdded:t})=>{const n=t[0];n.SeriesInstanceUID===C.referencedSeriesInstanceUID&&(C.referencedDisplaySetInstanceUID=n.displaySetInstanceUID,C.isReconstructable=n.isReconstructable,e())})}return C.load=async({headers:e})=>await function(e,t,n,r){const{SOPInstanceUID:o}=e,{segmentationService:a}=t.services;if((e.loading||e.isLoaded)&&m[o]&&function(e){return i.segmentation.state.getSegmentation(e.displaySetInstanceUID)}(e))return m[o];return e.loading=!0,m[o]=new Promise(async(o,l)=>{if(!e.segments||0===Object.keys(e.segments).length)try{await async function({extensionManager:e,servicesManager:t,segDisplaySet:n,headers:r}){const o=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),{segmentationService:a,uiNotificationService:l}=t.services,{dicomLoaderService:d}=o.exports,m=await d.findDicomDataPromise(n,null,r),p=t.services.displaySetService.getDisplaySetByUID(n.referencedDisplaySetInstanceUID);if(!p)throw new Error("referencedDisplaySet is missing for SEG");let{imageIds:g}=p;if(!g){const{images:e}=p;g=e.map(e=>e.imageId)}const f=.001;s.eventTarget.addEventListener(c.Enums.Events.SEGMENTATION_LOAD_PROGRESS,e=>{const{percentComplete:t}=e.detail;a._broadcastEvent(a.EVENTS.SEGMENT_LOADING_COMPLETE,{percentComplete:t})});const S=await c.adaptersSEG.Cornerstone3D.Segmentation.createFromDICOMSegBuffer(g,m,{metadataProvider:s.metaData,tolerance:f});let y=!0;S.segMetadata.data.forEach((e,t)=>{var n;t>0&&(e.rgba=e.RecommendedDisplayCIELabValue,e.rgba?e.rgba=(n=e.rgba,u().data.Colors.dicomlab2RGB(n).map(e=>Math.round(255*e))):(y=!1,e.rgba=i.CONSTANTS.COLOR_LUT[t%i.CONSTANTS.COLOR_LUT.length]))}),y||l.show({title:"DICOM SEG import",message:"RecommendedDisplayCIELabValue not found for one or more segments. The default color was used instead.",type:"warning",duration:5e3});Object.assign(n,S)}({extensionManager:n,servicesManager:t,segDisplaySet:e,headers:r})}catch(t){return e.loading=!1,l(t)}a.createSegmentationForSEGDisplaySet(e).then(()=>{e.loading=!1,o()}).catch(t=>{e.loading=!1,l(t)})}),m[o]}(C,n,o,e),[C]}const g=function(e){const{servicesManager:t,extensionManager:n}=e;return[{name:"dicom-seg",sopClassUids:d,getDisplaySetsFromSeries:e=>p(e,t,n)}]},f={id:"@ohif/seg",name:"Segmentations",protocolMatchingRules:[],toolGroupIds:["default"],numberOfPriorsReferenced:0,defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0,syncGroups:[{type:"hydrateseg",id:"sameFORId",source:!0,target:!0}]},displaySets:[{id:"segDisplaySetId",matchedDisplaySetsIndex:-1}]},displaySetSelectors:{segDisplaySetId:{seriesMatchingRules:[{attribute:"Modality",constraint:{equals:"SEG"}}]}},stages:[{name:"Segmentations",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{allowUnmatchedView:!0,syncGroups:[{type:"hydrateseg",id:"sameFORId",source:!0,target:!0}]},displaySets:[{id:"segDisplaySetId"}]}]}]};const v=function(){return[{name:f.id,protocol:f}]};var b=S(438);const h={NO_NEVER:-1,CANCEL:0,CREATE_REPORT:1,ADD_SERIES:2,SET_STUDY_AND_SERIES:3,NO_NOT_FOR_SERIES:4},{Cornerstone3D:{Segmentation:{generateSegmentation:I}}}=c.adaptersSEG,{Cornerstone3D:{RTSS:{generateRTSSFromRepresentation:E}}}=c.adaptersRT,{downloadDICOMData:w}=c.helpers,x=({servicesManager:e,extensionManager:t})=>{const{segmentationService:n,displaySetService:o,viewportGridService:a}=e.services,c={loadSegmentationsForViewport:async({segmentations:e,viewportId:t})=>{const r=(({viewportId:e,viewportGridService:t})=>{const{viewports:n,activeViewportId:r}=t.getState(),o=e||r;return n.get(o)})({viewportId:t,viewportGridService:a}),s=r.displaySetInstanceUIDs[0],i=e[0],c=i.segmentationId,l=i.config.label,u=i.config.segments,d=o.getDisplaySetByUID(s);return await n.createLabelmapForDisplaySet(d,{segmentationId:c,segments:u,label:l}),n.addOrUpdateSegmentation(i),await n.addSegmentationRepresentation(r.viewportId,{segmentationId:c}),c},generateSegmentation:({segmentationId:e,options:t={}})=>{const r=i.segmentation.state.getSegmentation(e),o=t.predecessorImageId??r.predecessorImageId,{imageIds:a}=r.representationData.Labelmap,c=a.map(e=>s.cache.getImage(e)),l=c.map(e=>s.cache.getImage(e.referencedImageId)),d=[];let m=0;for(const e of c){const t=new Set,n=e.getPixelData(),{rows:r,columns:o}=e;for(let e=0;e<n.length;e++){const r=n[e];0!==r&&t.add(r)}d[m++]={segmentsOnLabelmap:Array.from(t),pixelData:n,rows:r,columns:o}}const p=d.map(e=>e.segmentsOnLabelmap),g={segmentsOnLabelmap:Array.from(new Set(p.flat())),metadata:[],labelmaps2D:d},f=n.getSegmentation(e),S=n.getRepresentationsForSegmentation(e);Object.entries(f.segments).forEach(([t,r])=>{if(!r)return;const{label:o}=r,a=S[0],s=n.getSegmentColor(a.viewportId,e,r.segmentIndex),i=u().data.Colors.rgb2DICOMLAB(s.slice(0,3).map(e=>e/255)).map(e=>Math.round(e)),c={SegmentNumber:t.toString(),SegmentLabel:o,SegmentAlgorithmType:r?.algorithmType||"MANUAL",SegmentAlgorithmName:r?.algorithmName||"OHIF Brush",RecommendedDisplayCIELabValue:i,SegmentedPropertyCategoryCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"},SegmentedPropertyTypeCodeSequence:{CodeValue:"T-D0050",CodingSchemeDesignator:"SRT",CodeMeaning:"Tissue"}};g.metadata[t]=c});return I(l,g,s.metaData,{predecessorImageId:o,...t})},downloadSegmentation:({segmentationId:e})=>{const t=n.getSegmentation(e),r=c.generateSegmentation({segmentationId:e});w(r.dataset,`${t.label}`)},storeSegmentation:async({segmentationId:o,dataSource:a,modality:s="SEG"})=>{const i=n.getSegmentation(o);if(!i)throw new Error("No segmentation found");const{label:l,predecessorImageId:u}=i,d=a??t.getActiveDataSource()[0],{value:m,dataSourceName:p,series:g,priorSeriesNumber:f,action:S}=await(0,b.createReportDialogPrompt)({servicesManager:e,extensionManager:t,predecessorImageId:u,title:"Store Segmentation",modality:s});if(S===h.CREATE_REPORT)try{const e=p?t.getDataSources(p)[0]:d,n={segmentationId:o,options:{SeriesDescription:g?void 0:m||l||"Contour Series",SeriesNumber:g?void 0:1+f,predecessorImageId:g}},a="SEG"===s&&c.generateSegmentation(n)||"RTSTRUCT"===s&&c.generateContour(n),i=await a;if(!i||!i.dataset)throw new Error("Error during segmentation generation");const{dataset:u}=i;return"No Study ID"===u.StudyID&&(u.StudyID=""),await e.store.dicom(u),u.wadoRoot=e.getConfig().wadoRoot,r.DicomMetadataStore.addInstances([u],!0),u}catch(e){throw console.debug("Error storing segmentation:",e),e}},generateContour:async e=>{const{segmentationId:t,options:r}=e,o=n.getSegmentation(t),a=n.getRepresentationsForSegmentation(t)[0];Object.entries(o.segments).forEach(([e,r])=>{r.color=n.getSegmentColor(a.viewportId,t,Number(e))});const s=r?.predecessorImageId??o.predecessorImageId;return{dataset:await E(o,{predecessorImageId:s,...r})}},downloadRTSS:async e=>{const{dataset:t}=await c.generateContour(e),{InstanceNumber:n=1,SeriesInstanceUID:r}=t;try{w(t,`rtss-${r}-${n}.dcm`)}catch(e){console.warn(e)}},toggleActiveSegmentationUtility:({itemId:e})=>{const{uiState:t,setUIState:n}=b.useUIStateStore.getState(),r=t.activeSegmentationUtility===e;console.log("toggleActiveSegmentationUtility",r,e),n("activeSegmentationUtility",r?null:e)}},l={loadSegmentationsForViewport:c.loadSegmentationsForViewport,generateSegmentation:c.generateSegmentation,downloadSegmentation:c.downloadSegmentation,storeSegmentation:c.storeSegmentation,downloadRTSS:c.downloadRTSS,toggleActiveSegmentationUtility:c.toggleActiveSegmentationUtility};return{actions:c,definitions:l,defaultContext:"SEGMENTATION"}};var C=S(669),D=S(55),O=S(154);S(741);Object.create(null);function N(){if(console&&console.warn){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];"string"==typeof n[0]&&(n[0]="react-i18next:: ".concat(n[0])),(e=console).warn.apply(e,n)}}var T={};function R(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&T[t[0]]||("string"==typeof t[0]&&(T[t[0]]=new Date),N.apply(void 0,t))}var P=function(e,t){return function(){if(e.isInitialized)t();else{e.on("initialized",function n(){setTimeout(function(){e.off("initialized",n)},0),t()})}}};function j(e,t,n){e.loadNamespaces(t,P(e,n))}function U(e,t,n,r){"string"==typeof n&&(n=[n]),n.forEach(function(t){e.options.ns.indexOf(t)<0&&e.options.ns.push(t)}),e.loadLanguages(t,P(e,r))}function _(e){return _="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"!=_(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=_(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==_(t)?t:t+""}function k(e,t,n){return(t=M(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var A=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,L={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},G=function(e){return L[e]};var V={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(A,G)}};var q;function F(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)}}var $=(0,n.createContext)(),B=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.usedNamespaces={}}return function(e,t,n){t&&F(e.prototype,t),n&&F(e,n),Object.defineProperty(e,"prototype",{writable:!1})}(e,[{key:"addUsedNamespaces",value:function(e){var t=this;e.forEach(function(e){t.usedNamespaces[e]||(t.usedNamespaces[e]=!0)})}},{key:"getUsedNamespaces",value:function(){return Object.keys(this.usedNamespaces)}}]),e}();function 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(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,s,i=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(i.push(r.value),i.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(l)throw o}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return H(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?H(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Y(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 W(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y(Object(n),!0).forEach(function(t){k(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Y(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function J(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.i18n,o=(0,n.useContext)($)||{},a=o.i18n,s=o.defaultNS,i=r||a||q;if(i&&!i.reportNamespaces&&(i.reportNamespaces=new B),!i){R("You will need to pass in an i18next instance by using initReactI18next");var c=function(e,t){return"string"==typeof t?t:t&&"object"===_(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},l=[c,{},!1];return l.t=c,l.i18n={},l.ready=!1,l}i.options.react&&void 0!==i.options.react.wait&&R("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var u=W(W(W({},V),i.options.react),t),d=u.useSuspense,m=u.keyPrefix,p=e||s||i.options&&i.options.defaultNS;p="string"==typeof p?[p]:p||["translation"],i.reportNamespaces.addUsedNamespaces&&i.reportNamespaces.addUsedNamespaces(p);var g=(i.isInitialized||i.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?t.hasLoadedNamespace(e,{lng:n.lng,precheck:function(t,r){if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}):function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=t.languages[0],o=!!t.options&&t.options.fallbackLng,a=t.languages[t.languages.length-1];if("cimode"===r.toLowerCase())return!0;var s=function(e,n){var r=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===r||2===r};return!(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!s(t.isLanguageChangingTo,e)||!t.hasResourceBundle(r,e)&&t.services.backendConnector.backend&&(!t.options.resources||t.options.partialBundledLanguages)&&(!s(r,e)||o&&!s(a,e)))}(e,t,n):(R("i18n.languages were undefined or empty",t.languages),!0)}(e,i,u)});function f(){return i.getFixedT(t.lng||null,"fallback"===u.nsMode?p:p[0],m)}var S=z((0,n.useState)(f),2),y=S[0],v=S[1],b=p.join();t.lng&&(b="".concat(t.lng).concat(b));var h,I,E,w=(h=b,E=(0,n.useRef)(),(0,n.useEffect)(function(){E.current=I?E.current:h},[h,I]),E.current),x=(0,n.useRef)(!0);(0,n.useEffect)(function(){var e=u.bindI18n,n=u.bindI18nStore;function r(){x.current&&v(f)}return x.current=!0,g||d||(t.lng?U(i,t.lng,p,function(){x.current&&v(f)}):j(i,p,function(){x.current&&v(f)})),g&&w&&w!==b&&x.current&&v(f),e&&i&&i.on(e,r),n&&i&&i.store.on(n,r),function(){x.current=!1,e&&i&&e.split(" ").forEach(function(e){return i.off(e,r)}),n&&i&&n.split(" ").forEach(function(e){return i.store.off(e,r)})}},[i,b]);var C=(0,n.useRef)(!0);(0,n.useEffect)(function(){x.current&&!C.current&&v(f),C.current=!1},[i,m]);var D=[y,i,g];if(D.t=y,D.i18n=i,D.ready=g,g)return D;if(!g&&!d)return D;throw new Promise(function(e){t.lng?U(i,t.lng,p,function(){return e()}):j(i,p,function(){return e()})})}const{LogicalOperation:K}=O.contourSegmentation,Q=[{value:"merge",logicalOperation:K.Union,label:"Merge",icon:"actions-combine-merge",helperIcon:"helper-combine-merge"},{value:"intersect",logicalOperation:K.Intersect,label:"Intersect",icon:"actions-combine-intersect",helperIcon:"helper-combine-intersect"},{value:"subtract",logicalOperation:K.Subtract,label:"Subtract",icon:"actions-combine-subtract",helperIcon:"helper-combine-subtract"}];function X({label:e,value:t,onValueChange:r,segments:o,placeholder:a="Select a segment"}){const{t:s}=J("SegmentationPanel");return n.createElement("div",{className:"flex justify-between gap-6"},n.createElement("div",null,e),n.createElement(D.Select,{key:`select-segment-${e}`,onValueChange:r,value:t},n.createElement(D.SelectTrigger,{className:"overflow-hidden"},n.createElement(D.SelectValue,{placeholder:s(a)})),n.createElement(D.SelectContent,null,o.map(e=>n.createElement(D.SelectItem,{key:e.segmentIndex,value:e.segmentIndex.toString()},e.label)))))}const Z=function(){const{servicesManager:e}=(0,r.useSystem)(),{segmentationService:t}=e.services,{t:o}=J("SegmentationPanel"),{segmentationsWithRepresentations:a}=(0,C.useActiveViewportSegmentationRepresentations)(),s=a?.find(({representation:e})=>e?.active),i=s?Object.values(s.segmentation.segments):[],c=s?t.getNextAvailableSegmentIndex(s.segmentation.segmentationId):1,l=i.find(e=>e.active),u=l?.segmentIndex||0,[d,m]=(0,n.useState)(Q[0]),[p,g]=(0,n.useState)(u?.toString()||""),[f,S]=(0,n.useState)(""),[y,v]=(0,n.useState)(!1),[b,h]=(0,n.useState)("");(0,n.useEffect)(()=>{g(u?.toString()||null)},[u]),(0,n.useEffect)(()=>{h(`Segment ${c}`)},[c]);const I=(0,r.useRunCommand)(),E=(0,n.useCallback)(()=>{let e=p;y&&(e=c.toString(),I("addSegment",{segmentationId:s.segmentation.segmentationId,config:{label:b,segmentIndex:c}})),I("applyLogicalContourOperation",{segmentAInfo:{segmentationId:s.segmentation.segmentationId,segmentIndex:parseInt(p)},segmentBInfo:{segmentationId:s.segmentation.segmentationId,segmentIndex:parseInt(f)},resultSegmentInfo:{segmentationId:s.segmentation.segmentationId,segmentIndex:parseInt(e)},logicalOperation:d.logicalOperation})},[s?.segmentation?.segmentationId,y,b,c,d.logicalOperation,I,p,f]);return n.createElement("div",{className:"flex w-[245px] flex-col gap-4"},n.createElement("div",{className:"flex items-start justify-between"},n.createElement("div",{className:"flex w-auto flex-col items-center gap-2 text-base font-normal leading-none"},n.createElement(D.Tabs,{value:d.value},n.createElement(D.TabsList,{className:"inline-flex space-x-1"},Q.map(e=>{const{value:t,icon:r}=e;return n.createElement(D.TabsTrigger,{value:t,key:`logical-contour-operation-${t}`,onClick:()=>m(e)},n.createElement(D.Icons.ByName,{name:r}))}))),n.createElement("div",null,o(d.label))),n.createElement("div",{className:"bg-primary-dark flex h-[62px] w-[88px] items-center justify-center rounded-lg"},n.createElement(D.Icons.ByName,{name:d.helperIcon}))),n.createElement(X,{label:"A",value:p,onValueChange:g,segments:i}),n.createElement(X,{label:"B",value:f,onValueChange:S,segments:i}),n.createElement("div",{className:"flex justify-end pl-[34px]"},n.createElement(D.Button,{className:"border-primary/60 grow border",variant:"ghost",onClick:()=>{E()}},o(d.label))),n.createElement(D.Separator,{className:"bg-input mt-2 h-[1px]"}),n.createElement("div",{className:"flex flex-col gap-2"},n.createElement("div",{className:"flex items-center justify-start gap-2"},n.createElement(D.Switch,{id:"logical-contour-operations-create-new-segment-switch",onCheckedChange:v}),n.createElement(D.Label,{htmlFor:"logical-contour-operations-create-new-segment-switch"},o("Create a new segment"))),n.createElement("div",{className:"pl-9"},n.createElement(D.Input,{className:(0,D.cn)(y?"visible":"hidden"),disabled:!y,id:"logical-contour-operations-create-new-segment-input",type:"text",placeholder:o("New segment name"),value:b,onChange:e=>h(e.target.value)}))))};const ee=function(){const[e,t]=(0,n.useState)(10),o=(0,r.useRunCommand)(),{t:a}=J("SegmentationPanel");return n.createElement("div",{className:"flex w-auto w-[252px] flex-col gap-[8px] text-base font-normal leading-none"},n.createElement("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none"},n.createElement("div",null,a("Fill contour holes")),n.createElement(D.Button,{className:"border-primary/60 border",variant:"ghost",onClick:()=>{o("removeContourHoles")}},a("Fill Holes")),n.createElement(D.Separator,{className:"bg-input mt-[20px] h-[1px]"})),n.createElement("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none"},n.createElement("div",null,a("Remove Small Contours")),n.createElement("div",{className:"flex items-center gap-2 self-end"},n.createElement(D.Label,{htmlFor:"simplify-contour-options",className:"text-muted-foreground"},a("Area Threshold")),n.createElement(D.Input,{id:"simplify-contour-options",className:"w-20",type:"number",value:e,onChange:e=>t(Number(e.target.value))})),n.createElement(D.Button,{className:"border-primary/60 border",variant:"ghost",onClick:()=>{o("removeSmallContours",{areaThreshold:e})}},a("Remove Small Contours")),n.createElement(D.Separator,{className:"bg-input mt-[20px] h-[1px]"})),n.createElement("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none"},n.createElement("div",null,a("Create New Segment from Holes")),n.createElement(D.Button,{className:"border-primary/60 border",variant:"ghost",onClick:()=>{o("convertContourHoles")}},a("Create New Segment"))))};const te=function(){const e=(0,r.useRunCommand)(),{t}=J("SegmentationPanel");return n.createElement("div",{className:"flex w-auto w-[245px] flex-col gap-[8px] text-base font-normal leading-none"},n.createElement("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none"},n.createElement("div",null,t("Smooth all edges")),n.createElement(D.Button,{className:"border-primary/60 border",variant:"ghost",onClick:()=>{e("smoothContours")}},t("Smooth Edges")),n.createElement(D.Separator,{className:"bg-input mt-[20px] h-[1px]"})),n.createElement("div",{className:"flex w-auto flex-col gap-[10px] text-base font-normal leading-none"},n.createElement("div",null,t("Remove extra points")),n.createElement(D.Button,{className:"border-primary/60 border",variant:"ghost",onClick:()=>{e("decimateContours")}},t("Remove Points"))))};function ne(){return ne=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ne.apply(null,arguments)}const re=n.lazy(()=>Promise.resolve().then(S.bind(S,275))),oe=e=>n.createElement(n.Suspense,{fallback:n.createElement("div",null,"Loading...")},n.createElement(re,e)),ae={id:e,getCommandsModule:x,getToolbarModule:function({servicesManager:e}){const{segmentationService:t,toolbarService:n,toolGroupService:r}=e.services;return[{name:"cornerstone.SimplifyContourOptions",defaultComponent:ee},{name:"cornerstone.LogicalContourOperationsOptions",defaultComponent:Z},{name:"cornerstone.SmoothContoursOptions",defaultComponent:te},{name:"cornerstone.isActiveSegmentationUtility",evaluate:({button:e})=>{const{uiState:t}=b.useUIStateStore.getState();return{isActive:t.activeSegmentationUtility===e.id}}},{name:"evaluate.cornerstone.hasSegmentation",evaluate:({viewportId:e})=>{const n=t.getSegmentationRepresentations(e);return{disabled:!n?.length}}},{name:"evaluate.cornerstone.hasSegmentationOfType",evaluate:({viewportId:e,segmentationRepresentationType:n})=>{const r=t.getSegmentationRepresentations(e);return r?.length?r.some(e=>Boolean(e.type===n))?void 0:{disabled:!0,disabledText:`No ${n} segmentations available`}:{disabled:!0,disabledText:a().t("SegmentationPanel:No segmentations available")}}},{name:"evaluate.cornerstone.segmentation",evaluate:({viewportId:e,button:o,toolNames:s,disabledText:i})=>{const c=t.getSegmentationRepresentations(e);if(!c?.length)return{disabled:!0,disabledText:i??a().t("SegmentationPanel:No segmentations available")};const l=t.getActiveSegmentation(e);if(!Object.keys(l.segments).length)return{disabled:!0,disabledText:a().t("SegmentationPanel:Add segment to enable this tool")};const u=r.getToolGroupForViewport(e);if(!u)return{disabled:!0,disabledText:i??a().t("SegmentationPanel:Not available on the current viewport")};if(!s)return{disabled:!1};const d=n.getToolNameForButton(o);if(!u.hasTool(d)&&!s)return{disabled:!0,disabledText:i??a().t("SegmentationPanel:Not available on the current viewport")};return{disabled:!1,isActive:s?s.includes(u.getActivePrimaryMouseButtonTool()):u.getActivePrimaryMouseButtonTool()===d}}},{name:"evaluate.cornerstone.segmentation.synchronizeDrawingRadius",evaluate:({button:e,radiusOptionId:t})=>{const o=r.getToolGroupIds();if(o?.length)for(const r of o){const o=i.utilities.segmentation.getBrushSizeForToolGroup(r);if(o){n.getOptionById(e,t).value=o}}}}]},getViewportModule:({servicesManager:e,extensionManager:t,commandsManager:r})=>[{name:"dicom-seg",component:o=>n.createElement(oe,ne({servicesManager:e,extensionManager:t,commandsManager:r},o))}],getSopClassHandlerModule:g,getHangingProtocolModule:v}})(),y=S.O(y)})());
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ohif/extension-cornerstone-dicom-seg",
|
|
3
|
-
"version": "3.12.
|
|
3
|
+
"version": "3.12.2",
|
|
4
4
|
"description": "DICOM SEG read workflow",
|
|
5
5
|
"author": "OHIF",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
"start": "yarn run dev"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
|
-
"@ohif/core": "3.12.
|
|
37
|
-
"@ohif/extension-cornerstone": "3.12.
|
|
38
|
-
"@ohif/extension-default": "3.12.
|
|
39
|
-
"@ohif/i18n": "3.12.
|
|
36
|
+
"@ohif/core": "3.12.2",
|
|
37
|
+
"@ohif/extension-cornerstone": "3.12.2",
|
|
38
|
+
"@ohif/extension-default": "3.12.2",
|
|
39
|
+
"@ohif/i18n": "3.12.2",
|
|
40
40
|
"prop-types": "15.8.1",
|
|
41
41
|
"react": "18.3.1",
|
|
42
42
|
"react-dom": "18.3.1",
|
|
@@ -48,7 +48,6 @@
|
|
|
48
48
|
"@babel/runtime": "7.28.2",
|
|
49
49
|
"@cornerstonejs/adapters": "4.15.29",
|
|
50
50
|
"@cornerstonejs/core": "4.15.29",
|
|
51
|
-
"@kitware/vtk.js": "34.15.1"
|
|
52
|
-
"react-color": "2.19.3"
|
|
51
|
+
"@kitware/vtk.js": "34.15.1"
|
|
53
52
|
}
|
|
54
53
|
}
|