@ohif/extension-cornerstone-dicom-sr 3.14.0-beta.3 → 3.14.0-beta.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@ohif/core"),require("@cornerstonejs/adapters"),require("gl-matrix"),require("@ohif/extension-cornerstone"),require("@cornerstonejs/core"),require("@ohif/i18n"),require("@cornerstonejs/tools"),require("@ohif/ui-next"),require("@ohif/core/src/contextProviders/SystemProvider")):"function"==typeof define&&define.amd?define(["@ohif/core","@cornerstonejs/adapters","gl-matrix","@ohif/extension-cornerstone","@cornerstonejs/core","@ohif/i18n","@cornerstonejs/tools","@ohif/ui-next","@ohif/core/src/contextProviders/SystemProvider"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-sr"]=t(require("@ohif/core"),require("@cornerstonejs/adapters"),require("gl-matrix"),require("@ohif/extension-cornerstone"),require("@cornerstonejs/core"),require("@ohif/i18n"),require("@cornerstonejs/tools"),require("@ohif/ui-next"),require("@ohif/core/src/contextProviders/SystemProvider")):e["ohif-extension-cornerstone-dicom-sr"]=t(e["@ohif/core"],e["@cornerstonejs/adapters"],e["gl-matrix"],e["@ohif/extension-cornerstone"],e["@cornerstonejs/core"],e["@ohif/i18n"],e["@cornerstonejs/tools"],e["@ohif/ui-next"],e["@ohif/core/src/contextProviders/SystemProvider"])}(globalThis,(e,t,n,r,a,o,i,s,l)=>(()=>{var c,u,d={954(e,t,n){"use strict";n.r(t),n.d(t,{default:()=>O});var r=n(598),a=n.n(r),o=n(326),i=n(2),s=n(963),l=n(154),c=n(669),u=n(55),d=n(492);function p(){return(p=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(null,arguments)}function f(e){let{servicesManager:t}=(0,d.useSystem)(),{children:n,dataSource:r,displaySets:a,viewportOptions:i}=e,{displaySetService:l}=t.services,f=i.viewportId;if(a.length>1)throw Error("SR viewport should only have a single display set");let m=a[0],{setPositionPresentation:g}=(0,c.usePositionPresentationStore)(),[h,y]=(0,u.useViewportGrid)(),[I,R]=(0,o.useState)(0),[C,O]=(0,o.useState)(null),[D,E]=(0,o.useState)(null),[T,v]=(0,o.useState)(null),{viewports:b,activeViewportId:w}=h,N=(0,o.useCallback)(e=>{let{measurements:t}=m;(0,s.m1)(T,t.map(e=>e.TrackingUniqueIdentifier),e)},[T,I,m]),U=(0,o.useCallback)(e=>{let{StudyInstanceUID:t,displaySetInstanceUID:n}=m;t&&n&&S(m,e,l).then(({referencedDisplaySet:t,referencedDisplaySetMetadata:n})=>{if(!t||!n)return;R(e),O(t),E(n);let{presentationIds:r}=i,a=m.measurements[e];g(r.positionPresentationId,{viewReference:a.viewReference||{referencedImageId:a.imageId}})})},[r,m,C,f]),M=(0,o.useCallback)(()=>{if(!C)return null;let{measurements:t}=m;return t[I]?o.createElement(c.OHIFCornerstoneViewport,p({},e,{displaySets:[C],viewportOptions:{...i,toolGroupId:"SRToolGroup",viewportType:"stack",positionIds:null},onElementEnabled:t=>{e.onElementEnabled?.(t),v(t.detail.element)},isJumpToMeasurementDisabled:!0})):null},[C,f,I]);(0,o.useEffect)(()=>{let e=l.subscribe(l.EVENTS.DISPLAY_SETS_REMOVED,({displaySetInstanceUIDs:e})=>{let t=b.get(w);e.includes(t.displaySetInstanceUID)&&y.setDisplaySetsForViewport({viewportId:w,displaySetInstanceUIDs:[]})});return()=>{e.unsubscribe()}},[]),(0,o.useEffect)(()=>{(async()=>{m.isLoaded||await m.load(),U(I)})()},[m]),(0,o.useEffect)(()=>{(async()=>{m.isLoaded||await m.load(),T&&m.isLoaded&&N(I)})()},[I,T,N,m]);let P=null;return C&&D?(n&&n.length&&(P=n.map((e,t)=>e&&o.cloneElement(e,{viewportId:f,key:t}))),o.createElement(o.Fragment,null,o.createElement("div",{className:"relative flex h-full w-full flex-row overflow-hidden"},M(),P))):null}async function S(e,t,n){let{measurements:r}=e,{displaySetInstanceUID:a}=r[t];if(e.keyImageDisplaySet||(e.keyImageDisplaySet=(0,l.A)(n,e)),!a)return{referencedDisplaySetMetadata:null,referencedDisplaySet:null};let o=n.getDisplaySetByUID(a);if(!o?.images)return{referencedDisplaySetMetadata:null,referencedDisplaySet:null};let i=o.images[0];return{referencedDisplaySetMetadata:{PatientID:i.PatientID,PatientName:i.PatientName,PatientSex:i.PatientSex,PatientAge:i.PatientAge,SliceThickness:i.SliceThickness,StudyDate:i.StudyDate,SeriesDescription:i.SeriesDescription,SeriesInstanceUID:i.SeriesInstanceUID,SeriesNumber:i.SeriesNumber,ManufacturerModelName:i.ManufacturerModelName,SpacingBetweenSlices:i.SpacingBetweenSlices},referencedDisplaySet:o}}f.propTypes={displaySets:a().arrayOf(a().object),viewportId:a().string.isRequired,dataSource:a().object,children:a().node,viewportLabel:a().string,viewportOptions:a().object};var m=n(548);let g={TEXT:e=>e.TextValue,CODE:e=>e.ConceptCodeSequence?.[0]?.CodeMeaning,UIDREF:e=>e.UID,NUM:e=>{let t=e.MeasuredValueSequence?.[0];if(!t)return;let{NumericValue:n,MeasurementUnitsCodeSequence:r}=t,{CodeValue:a}=r;return`${n} ${a}`},PNAME:e=>{let t=e.PersonName?.[0];return t?i.utils.formatPN(t):void 0},DATE:e=>{let{Date:t}=e;return t?i.utils.formatDate(t):void 0},TIME:e=>{let{Time:t}=e;return t?i.utils.formatTime(t):void 0},DATETIME:e=>{let{DateTime:t}=e;if("string"!=typeof t)return;if(t.length<14)return t;let n=t.substring(0,8),r=t.substring(8,14),a=i.utils.formatDate(n),o=i.utils.formatTime(r);return`${a} ${o}`}};function h(e){let{contentItem:t,nodeIndexesTree:n,continuityOfContent:r}=e,{ConceptNameCodeSequence:a}=t,{CodeValue:i,CodeMeaning:s}=a,l=0===n[n.length-1],c=function(e){let{ValueType:t}=e,n=g[t];return n?n(e):`[${t} is not supported]`}(t)??"[empty]",u="CONTINUOUS"===r,d=i===m.n7.Finding,p=u&&!l&&/^[a-zA-Z0-9]/.test(c?.[0]),f="whitespace-pre-line";return(i===m.n7.Finding&&(f="whitespace-pre-wrap"),u)?o.createElement(o.Fragment,null,o.createElement("span",{className:f,title:s},p?" ":"",c)):o.createElement(o.Fragment,null,o.createElement("div",{className:"mb-2"},o.createElement("span",{className:"font-bold"},s,": "),d?o.createElement("pre",null,c):o.createElement("span",{className:f},c)))}function y(){return(y=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}).apply(null,arguments)}function I(e){let{container:t,nodeIndexesTree:n=[0],containerNumberedTree:r=[1]}=e,{ContinuityOfContent:a,ConceptNameCodeSequence:i}=t,{CodeMeaning:s}=i??{},l=1,c=t.ContentSequence?.map((e,t)=>{let i,s,{ValueType:c}=e,u=[...n,t],d=u.join(".");if("CONTAINER"===c){let t=[...r,l++];i=I,s={container:e,nodeIndexesTree:u,containerNumberedTree:t}}else i=h,s={contentItem:e,nodeIndexesTree:u,continuityOfContent:a};return o.createElement(i,y({key:d},s))});return o.createElement("div",null,o.createElement("div",{className:"font-bold"},r.join("."),".\xa0",s),o.createElement("div",{className:"ml-4 mb-2"},c))}function R(e){let{displaySets:t}=e,n=t[0].instances[0];return o.createElement("div",{className:"text-foreground relative flex h-full w-full flex-col overflow-auto p-4"},o.createElement("div",null,o.createElement(I,{container:n})))}function C(e){let{displaySets:t}=e,{isImagingMeasurementReport:n}=t[0];return n?o.createElement(f,e):o.createElement(R,e)}h.propTypes={contentItem:a().object,nodeIndexesTree:a().arrayOf(a().number),continuityOfContent:a().string},I.propTypes={container:a().object,nodeIndexesTree:a().arrayOf(a().number),containerNumberedTree:a().arrayOf(a().number)},R.propTypes={displaySets:a().arrayOf(a().object),viewportId:a().string.isRequired,dataSource:a().object,children:a().node,viewportLabel:a().string,viewportOptions:a().object,servicesManager:a().object.isRequired,extensionManager:a().instanceOf(i.ExtensionManager).isRequired},C.propTypes={displaySets:a().arrayOf(a().object),viewportId:a().string.isRequired,dataSource:a().object,children:a().node,viewportLabel:a().string,viewportOptions:a().object,servicesManager:a().object.isRequired,extensionManager:a().instanceOf(i.ExtensionManager).isRequired};let O=C},548(e,t,n){"use strict";n.d(t,{Ay:()=>s,bY:()=>i,n7:()=>o,sh:()=>a});let{CodeScheme:r}=n(142).adaptersSR.Cornerstone3D,a={POINT:"POINT",MULTIPOINT:"MULTIPOINT",POLYLINE:"POLYLINE",CIRCLE:"CIRCLE",ELLIPSE:"ELLIPSE"},o={ImagingMeasurementReport:"126000",ImageLibrary:"111028",ImagingMeasurements:"126010",MeasurementGroup:"125007",ImageLibraryGroup:"126200",TrackingUniqueIdentifier:"112040",TrackingIdentifier:"112039",Finding:"121071",FindingSite:"G-C0E3",FindingSiteSCT:"363698007"},i={SRT:"SRT",SCT:"SCT",CornerstoneCodeSchemes:[r.CodingSchemeDesignator,"CST4"]},s={CodeNameCodeSequenceValues:o,CodingSchemeDesignators:i,RelationshipType:{INFERRED_FROM:"INFERRED FROM",CONTAINS:"CONTAINS"},SCOORDTypes:a}},963(e,t,n){"use strict";n.d(t,{eF:()=>i,m1:()=>o});var r=n(557);let a={};function o(e,t,n=0){let{viewport:i}=(0,r.getEnabledElement)(e);a[i.id]={trackingUniqueIdentifiers:t,activeIndex:n}}function i(e){let{viewport:t}=(0,r.getEnabledElement)(e);return a[t.id]?a[t.id]:{trackingUniqueIdentifiers:[]}}},154(e,t,n){"use strict";n.d(t,{A:()=>i});let r=n(2).classes.ImageSet,a=(e,t)=>{let{displaySetInstanceUID:n,ReferencedSOPInstanceUID:r}=e,a=t.getDisplaySetByUID(n);if(a.images)return a.images.find(e=>e.SOPInstanceUID===r)},o=(e,t)=>{let n=[],r={};for(let o of t.measurements){let{imageId:t}=o;if(!t||r[t])continue;let i=a(o,e);if(!i){console.log("Measurement",o,"had no instances found");continue}r[t]=i,n.push(i)}return n},i=(e,t)=>{let n=o(e,t),a=new r(n),i=n[0];if(i)return a.setAttributes({displaySetInstanceUID:a.uid,SeriesDate:i.SeriesDate,SeriesTime:i.SeriesTime,SeriesInstanceUID:a.uid,StudyInstanceUID:i.StudyInstanceUID,SeriesNumber:i.SeriesNumber||0,SOPClassUID:i.SOPClassUID,SeriesDescription:`${t.SeriesDescription} KO ${t.instance.SeriesNumber}`,Modality:"KO",isMultiFrame:!1,numImageFrames:n.length,SOPClassHandlerId:"@ohif/extension-default.sopClassHandlerModule.stack",isReconstructable:!1,isCompositeStack:!0,madeInClient:!0,excludeFromThumbnailBrowser:!0,updateInstances:function(){this.images.splice(0,this.images.length,...o(e,t)),this.numImageFrames=this.images.length}}),e.addDisplaySets(a),a}},856(e,t,n){"use strict";var r=n(183);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},598(e,t,n){e.exports=n(856)()},183(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},249(e,t){"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=(Symbol.for("react.strict_mode"),Symbol.for("react.profiler"),Symbol.for("react.provider"),Symbol.for("react.context"),Symbol.for("react.forward_ref"),Symbol.for("react.suspense")),i=(Symbol.for("react.memo"),Symbol.for("react.lazy")),s=Symbol.iterator,l={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},c=Object.assign,u={};function d(e,t,n){this.props=e,this.context=t,this.refs=u,this.updater=n||l}function p(){}function f(e,t,n){this.props=e,this.context=t,this.refs=u,this.updater=n||l}d.prototype.isReactComponent={},d.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")},d.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},p.prototype=d.prototype;var S=f.prototype=new p;S.constructor=f,c(S,d.prototype),S.isPureReactComponent=!0;var m=Array.isArray,g=Object.prototype.hasOwnProperty,h=null,y={key:!0,ref:!0,__self:!0,__source:!0};function I(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 R=null;t.Fragment=a,t.Suspense=o,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 a=c({},e.props),o=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=h),void 0!==t.key&&(o=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(u in t)g.call(t,u)&&!y.hasOwnProperty(u)&&(a[u]=void 0===t[u]&&void 0!==l?l[u]:t[u])}var u=arguments.length-2;if(1===u)a.children=r;else if(1<u){l=Array(u);for(var d=0;d<u;d++)l[d]=arguments[d+2];a.children=l}return{$$typeof:n,type:e.type,key:o,ref:i,props:a,_owner:s}},t.createElement=function(e,t,r){var a,o={},i=null,s=null;if(null!=t)for(a in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)g.call(t,a)&&!y.hasOwnProperty(a)&&(o[a]=t[a]);var l=arguments.length-2;if(1===l)o.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];o.children=c}if(e&&e.defaultProps)for(a in l=e.defaultProps)void 0===o[a]&&(o[a]=l[a]);return{$$typeof:n,type:e,key:i,ref:s,props:o,_owner:h}},t.lazy=function(e){return{$$typeof:i,_payload:{_status:-1,_result:e},_init:I}},t.useCallback=function(e,t){return R.useCallback(e,t)},t.useEffect=function(e,t){return R.useEffect(e,t)},t.useState=function(e){return R.useState(e)}},326(e,t,n){"use strict";e.exports=n(249)},142(e){"use strict";e.exports=t},557(e){"use strict";e.exports=a},713(e){"use strict";e.exports=i},2(t){"use strict";t.exports=e},492(e){"use strict";e.exports=l},669(e){"use strict";e.exports=r},545(e){"use strict";e.exports=o},55(e){"use strict";e.exports=s},155(e){"use strict";e.exports=n}},p={};function f(e){var t=p[e];if(void 0!==t)return t.exports;var n=p[e]={exports:{}};return d[e](n,n.exports,f),n.exports}f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},f.d=(e,t)=>{for(var n in t)f.o(t,n)&&!f.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),f.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c=[],f.O=(e,t,n,r)=>{if(t){r=r||0;for(var a=c.length;a>0&&c[a-1][2]>r;a--)c[a]=c[a-1];c[a]=[t,n,r];return}for(var o=1/0,a=0;a<c.length;a++){for(var[t,n,r]=c[a],i=!0,s=0;s<t.length;s++)(!1&r||o>=r)&&Object.keys(f.O).every(e=>f.O[e](t[s]))?t.splice(s--,1):(i=!1,r<o&&(o=r));if(i){c.splice(a--,1);var l=n();void 0!==l&&(e=l)}}return e},f.F={},f.E=e=>{Object.keys(f.F).map(t=>{f.F[t](e)})},u={509:0},f.F.j=e=>{if(!f.o(u,e)||void 0===u[e]){u[e]=null;var t=document.createElement("link");f.nc&&t.setAttribute("nonce",f.nc),t.rel="prefetch",t.as="script",t.href=f.p+f.u(e),document.head.appendChild(t)}},f.O.j=e=>0===u[e],f.O(0,[509],()=>{[509].map(f.E)},5);var S={};return(()=>{"use strict";f.r(S),f.d(S,{Enums:()=>u.Ay,createReferencedImageDisplaySet:()=>et.A,default:()=>eo,hydrateStructuredReport:()=>z,srProtocol:()=>L,toolNames:()=>m});var e=f(326),t=f(2),n=f.n(t),r=f(545),a=f.n(r),o=f(669),i=f(142),s=f(713),l=f(557),c=f(155),u=f(548);let d=({GraphicData:e,ValueType:t,imageId:n})=>{let r=[];if("SCOORD3D"===t)for(let t=0;t<e.length;t+=3)r.push([e[t],e[t+1],e[t+2]]);else for(let t=0;t<e.length;t+=2){let a=l.utilities.imageToWorldCoords(n,[e[t],e[t+1]]);r.push(a)}return r},p=function({GraphicType:e,GraphicData:t,ValueType:n,imageId:r}){let a=[];switch(e){case u.sh.POINT:case u.sh.MULTIPOINT:case u.sh.POLYLINE:a=d({GraphicData:t,ValueType:n,imageId:r});break;case u.sh.CIRCLE:{let e=d({GraphicData:t,ValueType:n,imageId:r});if(!r)return e;let o=e[0],i=e[1],s=c.vec3.distance(o,i),u=l.metaData.get("imagePlaneModule",r);if(!u)throw Error("No imagePlaneModule found");let{columnCosines:p,rowCosines:f}=u,S=c.vec3.create();c.vec3.scaleAndAdd(S,o,p,s);let m=c.vec3.create();c.vec3.scaleAndAdd(m,o,p,-s);let g=c.vec3.create();c.vec3.scaleAndAdd(g,o,f,s);let h=c.vec3.create();c.vec3.scaleAndAdd(h,o,f,-s),a=[S,m,g,h];break}case u.sh.ELLIPSE:{let e=d({GraphicData:t,ValueType:n,imageId:r});if(!r)return e;let o=c.vec3.fromValues(...e[0]),i=c.vec3.fromValues(...e[1]),s=c.vec3.fromValues(...e[2]),u=c.vec3.fromValues(...e[3]),p=c.vec3.create();c.vec3.sub(p,i,o),c.vec3.normalize(p,p);let f=c.vec3.create();c.vec3.sub(f,u,s),c.vec3.normalize(f,f);let S=l.metaData.get("imagePlaneModule",r);if(!S)throw Error("imageId does not have imagePlaneModule metadata");let{columnCosines:m}=S,g=c.vec3.fromValues(...m),h=Math.abs(c.vec3.dot(g,p)),y=Math.abs(Math.abs(c.vec3.dot(g,f)));a=[],1e-4>Math.abs(Math.abs(h)-1)?a=[e[0],e[1],e[2],e[3]]:1e-4>Math.abs(y-1)?a=[e[2],e[3],e[0],e[1]]:console.warn("OBLIQUE ELLIPSE NOT YET SUPPORTED");break}default:console.warn("Unsupported GraphicType:",e)}return a},m={DICOMSRDisplay:"DICOMSRDisplay",SRLength:"SRLength",SRBidirectional:"SRBidirectional",SREllipticalROI:"SREllipticalROI",SRCircleROI:"SRCircleROI",SRArrowAnnotate:"SRArrowAnnotate",SRAngle:"SRAngle",SRCobbAngle:"SRCobbAngle",SRRectangleROI:"SRRectangleROI",SRPlanarFreehandROI:"SRPlanarFreehandROI"},{MeasurementReport:g}=i.adaptersSR.Cornerstone3D;function h({measurement:e,imageId:t=null,frameNumber:n=null,displaySet:r}){let a=m.DICOMSRDisplay,o=e.coords.reduce((e,n)=>(e[n.GraphicType]=e[n.GraphicType]||[],e[n.GraphicType].push(p({...n,imageId:t})),e),{}),{TrackingUniqueIdentifier:i}=e,{ValueType:c,GraphicType:u}=e.coords[0],d=o[u],f=null,S=null;if(t){let e=l.metaData.get("imagePlaneModule",t);f=e?.frameOfReferenceUID}"SCOORD3D"===c&&(S={FrameOfReferenceUID:f=e.coords[0].ReferencedFrameOfReferenceSequence,point:d[0][0]}),e.viewReference={planeRestriction:S,FrameOfReferenceUID:f,referencedImageId:t};let g={annotationUID:i,highlighted:!1,isLocked:!1,isPreview:a===m.DICOMSRDisplay,invalidated:!1,metadata:{toolName:a,planeRestriction:S,valueType:c,graphicType:u,FrameOfReferenceUID:f,referencedImageId:t,displaySetInstanceUID:r.displaySetInstanceUID},data:{label:e.labels?.[0]?.value||void 0,displayText:e.displayText||void 0,handles:{textBox:e.textBox??{},points:d[0]},cachedStats:{},frameNumber:n,renderableData:o,TrackingUniqueIdentifier:i,labels:e.labels}};s.annotation.state.addAnnotation(g)}let{MeasurementReport:y}=i.adaptersSR.Cornerstone3D,I=JSON.parse('{"UU":"@ohif/extension-cornerstone-dicom-sr"}').UU,R="dicom-sr",C=`${I}.sopClassHandlerModule.${R}`,O="dicom-sr-3d",D=`${I}.sopClassHandlerModule.${O}`,{sopClassDictionary:E}=t.utils,{CORNERSTONE_3D_TOOLS_SOURCE_NAME:T,CORNERSTONE_3D_TOOLS_SOURCE_VERSION:v}=o.Enums,{MetadataProvider:b}=t.classes,{TEXT_ANNOTATION_POSITION:w,COMMENT_CODE:N,CodeScheme:U}=i.adaptersSR.Cornerstone3D,M=[E.BasicTextSR,E.EnhancedSR,E.ComprehensiveSR,E.Comprehensive3DSR];function P(e,n){return this.instances.push(...e),t.utils.sortStudyInstances(this.instances),this.instance=this.instances[this.instances.length-1],this.isLoaded=!1,this}async function x(e,n,r){let{displaySetService:a,measurementService:o}=n.services,i=r.getDataSources()[0],{ContentSequence:s}=e.instance;async function l(t,n=null,r=null){for(let a in t)if("object"==typeof t[a]&&null!==t[a])await l(t[a],t,a);else if(Array.isArray(t[a]))await Promise.all(t[a].map(e=>l(e,t,a)));else if("BulkDataURI"===a){let o=await i.retrieve.bulkDataURI({BulkDataURI:t[a],StudyInstanceUID:e.instance.StudyInstanceUID,SeriesInstanceUID:e.instance.SeriesInstanceUID,SOPInstanceUID:e.instance.SOPInstanceUID});n&&r&&(n[r]=new Float32Array(o))}}!0!==e.isLoaded&&await l(s),e.isImagingMeasurementReport?(e.referencedImages=function(e){let t=e.find(e=>e.ConceptNameCodeSequence.CodeValue===u.n7.ImageLibrary);if(!t)return[];let n=k(t.ContentSequence).find(e=>e.ConceptNameCodeSequence.CodeValue===u.n7.ImageLibraryGroup);if(!n)return[];let r=[];return k(n.ContentSequence).forEach(e=>{let{ReferencedSOPSequence:t}=e;if(t){for(let e of k(t))if(e.ReferencedSOPClassUID){let{ReferencedSOPClassUID:t,ReferencedSOPInstanceUID:n}=e;r.push({ReferencedSOPClassUID:t,ReferencedSOPInstanceUID:n})}}}),r}(s),e.measurements=function(e){var t;let n,r=e.find(e=>e.ConceptNameCodeSequence.CodeValue===u.n7.ImagingMeasurements);if(!r)return[];let a=(t=k(r.ContentSequence).filter(e=>e.ConceptNameCodeSequence.CodeValue===u.n7.MeasurementGroup),n={},t.forEach(e=>{let t=k(e.ContentSequence),r=t.find(e=>e.ConceptNameCodeSequence.CodeValue===u.n7.TrackingUniqueIdentifier);r||console.warn("No Tracking Unique Identifier, skipping ambiguous measurement.");let a=r.UID;void 0===n[a]?n[a]=[...t]:t.forEach(e=>{e.ConceptNameCodeSequence.CodeValue!==u.n7.TrackingUniqueIdentifier&&n[a].push(e)})}),n),o=[];return Object.keys(a).forEach(e=>{var t;let n=(t=a[e]).some(e=>{var t;let n;return("SCOORD"===(t=e).ValueType||"SCOORD3D"===t.ValueType)&&!((n=e.ConceptNameCodeSequence[0])&&n.CodeValue===w.value&&n.CodingSchemeDesignator===w.schemeDesignator)})?function(e){let t=e.find(e=>"SCOORD"===e.ValueType||"SCOORD3D"===e.ValueType),n=e.find(e=>"UIDREF"===e.ValueType),r=e.find(e=>e.ConceptNameCodeSequence.CodeValue===u.n7.TrackingIdentifier);if(!t)return void console.warn(`graphic ValueType ${t.ValueType} not currently supported, skipping annotation.`);let a=e.filter(e=>"NUM"===e.ValueType),{ConceptNameCodeSequence:o}=t,{CodeValue:i,CodingSchemeDesignator:s}=o,l=`${s}:${i}`,c=q(t),d="SCOORD3D"===c.ValueType,p=c.GraphicData.length/(d?3:2),f={loaded:!1,labels:[],coords:[c],TrackingUniqueIdentifier:n.UID,TrackingIdentifier:r.TextValue,graphicCode:l,is3DMeasurement:d,pointsLength:p,graphicType:c.GraphicType};a.forEach(e=>{let{ConceptNameCodeSequence:t,MeasuredValueSequence:n}=e;n&&f.labels.push(F(t,n))});let S=e.filter(e=>e.ConceptNameCodeSequence.CodingSchemeDesignator===u.bY.SCT&&e.ConceptNameCodeSequence.CodeValue===u.n7.FindingSiteSCT);return S.length&&f.labels.push({label:u.n7.FindingSiteSCT,value:S[0].ConceptCodeSequence.CodeMeaning}),f}(t):function(e){let t=e.filter(e=>"NUM"===e.ValueType),n=e.find(e=>"UIDREF"===e.ValueType),r=e.find(e=>e.ConceptNameCodeSequence.CodeValue===u.n7.TrackingIdentifier),a=e.find(e=>e.ConceptNameCodeSequence.CodeValue===u.n7.Finding),o=e.filter(e=>e.ConceptNameCodeSequence.CodingSchemeDesignator===u.bY.SRT&&e.ConceptNameCodeSequence.CodeValue===u.n7.FindingSite),i=e.filter(e=>e.ConceptNameCodeSequence.CodingSchemeDesignator===N.schemeDesignator&&e.ConceptNameCodeSequence.CodeValue===N.value),s={loaded:!1,labels:[],coords:[],TrackingUniqueIdentifier:n.UID,TrackingIdentifier:r.TextValue};if(i)for(let e of i)e.TextValue&&s.labels.push({label:e.TextValue,value:""});if(a&&u.bY.CornerstoneCodeSchemes.includes(a.ConceptCodeSequence.CodingSchemeDesignator)&&a.ConceptCodeSequence.CodeValue===U.codeValues.CORNERSTONEFREETEXT&&s.labels.push({label:U.codeValues.CORNERSTONEFREETEXT,value:a.ConceptCodeSequence.CodeMeaning}),o.length){let e=o.find(e=>u.bY.CornerstoneCodeSchemes.includes(e.ConceptCodeSequence.CodingSchemeDesignator)&&e.ConceptCodeSequence.CodeValue===U.codeValues.CORNERSTONEFREETEXT);e&&s.labels.push({label:U.codeValues.CORNERSTONEFREETEXT,value:e.ConceptCodeSequence.CodeMeaning})}return t.forEach(e=>{let{ConceptNameCodeSequence:t,ContentSequence:n,MeasuredValueSequence:r}=e;if(n){let e=Array.isArray(n)?n.find(e=>("SCOORD"===e.ValueType||"SCOORD3D"===e.ValueType)&&!e.ConceptNameCodeSequence)??n.find(e=>"SCOORD"===e.ValueType||"SCOORD3D"===e.ValueType):n;if(!e)return void console.warn("ContentSequence array contains no SCOORD or SCOORD3D entry, skipping annotation.");let{ValueType:t}=e;if("SCOORD"!==t&&"SCOORD3D"!==t)return void console.warn(`Graphic ${t} not currently supported, skipping annotation.`);let r=q(e);r&&s.coords.push(r)}r&&s.labels.push(F(t,r))}),s}(t);n&&o.push(n)}),o}(s)):(e.referencedImages=[],e.measurements=[]);let{predecessorImageId:c}=e;for(let t of e.measurements)t.predecessorImageId=c;let d=o.getSourceMappings(T,v);e.isHydrated=!1,e.isRehydratable=function(e,t){if(!t||!t.length)return!1;let n=new Set;for(let e of t)n.add(e.annotationType);let{measurements:r}=e;for(let e=0;e<r.length;e++){let t=r[e];if(!t)continue;let{TrackingIdentifier:a="",graphicType:o,graphicCode:i,pointsLength:s}=t;if(!a&&!o){console.warn("No tracking identifier or graphicType for measurement ",t);continue}let l=y.getAdapterForTrackingIdentifier(a),c=y.getAdaptersForTypes(i,o,s);if(l&&n.has(l.toolType)||c&&c.some(e=>n.has(e.toolType)))return!0;console.log("Measurement is not rehydratable",a,r[e])}return console.log("No measurements found which were rehydratable"),!1}(e,d),e.isLoaded=!0,t.utils.sortDisplaySetsCopy(a.activeDisplaySets,{studyInstanceUIDFirst:e.StudyInstanceUID}).forEach(t=>{A(e,t,i,n)}),a.subscribe(a.EVENTS.DISPLAY_SETS_ADDED,t=>{let{displaySetsAdded:r}=t;r.forEach(t=>{A(e,t,i,n)})})}function A(e,t,n,r){let{customizationService:a}=r.services,o=e.measurements.filter(e=>!1===e.loaded);if(!o.length||t.unsupported)return;let i=new Map;for(let e of n.getImageIdsForDisplaySet(t)){let{SOPInstanceUID:t,frameNumber:n}=b.getUIDsFromImageID(e),r=`${t}:${n||1}`;i.set(r,e)}if(!o?.length)return;let s=e.SOPClassUID===E.Comprehensive3DSR;for(let n=o.length-1;n>=0;n--){let r=o[n],l=r.coords?.[0]?.ValueType==="SCOORD3D",c=a.getCustomization("onBeforeSRAddMeasurement");if("function"==typeof c&&(r=c({measurement:r,StudyInstanceUID:e.StudyInstanceUID,SeriesInstanceUID:e.SeriesInstanceUID})),s&&l&&function({measurement:e,displaySet:t}){return e.coords[0].ReferencedFrameOfReferenceSequence===t.FrameOfReferenceUID}({measurement:r,displaySet:t})){h({measurement:r,displaySet:t}),r.loaded=!0,r.displaySetInstanceUID=t.displaySetInstanceUID,o.splice(n,1);continue}let u=r.coords[0].ReferencedSOPSequence;if(!u)continue;let{ReferencedSOPInstanceUID:d}=u,p=u.ReferencedFrameNumber||1,f=`${d}:${p}`,S=i.get(f);S&&function(e,t,n){let{coords:r}=e,a=e.coords[0].ReferencedSOPSequence&&e.coords[0].ReferencedSOPSequence?.ReferencedFrameNumber||1;if(n&&Number(n)!==Number(a))return!1;for(let e=0;e<r.length;e++){let{ReferencedSOPInstanceUID:n}=r[e].ReferencedSOPSequence;if(n===t)return!0}return!1}(r,d,p)&&(h({measurement:r,imageId:S,frameNumber:p,displaySet:t}),r.loaded=!0,r.imageId=S,r.displaySetInstanceUID=t.displaySetInstanceUID,r.ReferencedSOPInstanceUID=d,r.frameNumber=p,o.splice(n,1))}}let q=e=>{let{ValueType:t,GraphicType:n,GraphicData:r}=e,a={ValueType:t,GraphicType:n,GraphicData:r};return a.ReferencedSOPSequence=e.ContentSequence?.ReferencedSOPSequence,a.ReferencedFrameOfReferenceSequence=e.ReferencedFrameOfReferenceUID||e.ContentSequence?.ReferencedFrameOfReferenceSequence,a};function F(e,t){let{CodeMeaning:n}=e,{NumericValue:r,MeasurementUnitsCodeSequence:a}=t,{CodeValue:o}=a,i=r?Number(r).toFixed(2):"";return{label:n,value:`${i} ${o}`}}function k(e){return e?Array.isArray(e)?e:[e]:[]}let L={id:"@ohif/sr",name:"SR Key Images",protocolMatchingRules:[],toolGroupIds:["default"],numberOfPriorsReferenced:0,defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"srDisplaySetId",matchedDisplaySetsIndex:-1}]},displaySetSelectors:{srDisplaySetId:{seriesMatchingRules:[{attribute:"Modality",constraint:{equals:"SR"}}]}},stages:[{name:"SR Key Images",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{allowUnmatchedView:!0},displaySets:[{id:"srDisplaySetId"}]}]}]},V=function(e,t){let n={},r=e.map(e=>e.uid).slice(),a=s.annotation.state.getAnnotationManager(),o=a.getFramesOfReference();for(let s=0;s<o.length;s++){let l=o[s],c=a.getAnnotations(l),u=Object.keys(c);for(let a=0;a<u.length;a++){let o=u[a],s=c[o];if(s)for(let a=0;a<s.length;a++){let l=s[a],c=r.findIndex(e=>e===l.annotationUID);if(-1!==c&&(!function(r,a){let o=r.metadata?.referencedImageId??i.NO_IMAGE_ID;n[o]||(n[o]={});let s=n[o];s[a]||(s[a]={data:[]});let l=e.find(e=>e.uid===r.annotationUID),c=s[a].data,{finding:u}=l,d=[];l.label&&(t.includes(a)?u={CodeValue:"CORNERSTONEFREETEXT",CodingSchemeDesignator:"CORNERSTONEJS",CodeMeaning:l.label}:d.push({CodeValue:"CORNERSTONEFREETEXT",CodingSchemeDesignator:"CORNERSTONEJS",CodeMeaning:l.label})),l.findingSites&&d.push(...l.findingSites);let p=Object.assign({},r,{finding:u,findingSites:d});c.push(p)}(l,o),r.splice(c,1),!r.length))return n}}}return n},{CodeScheme:_}=i.adaptersSR.Cornerstone3D,{locking:j}=s.annotation,{guid:$}=n().utils,{MeasurementReport:B}=i.adaptersSR.Cornerstone3D,{CORNERSTONE_3D_TOOLS_SOURCE_NAME:G,CORNERSTONE_3D_TOOLS_SOURCE_VERSION:H}=o.Enums,W=(e,t)=>{if(!t||"CORNERSTONEJS"===t.CodingSchemeDesignator)return;let n=`${t.CodingSchemeDesignator}:${t.CodeValue}`;return{...e[n],ref:n,...t,text:t.CodeMeaning}};function z({servicesManager:e,extensionManager:n,commandsManager:r},a){var o,i,s,u;let d,p,f,S=n.getActiveDataSource()[0],{measurementService:m,displaySetService:g,customizationService:h}=e.services,y=h.getCustomization("codingValues"),I=h.getCustomization("panelMeasurement.disableEditing"),R=g.getDisplaySetByUID(a),{StudyInstanceUID:C,SeriesInstanceUID:O,instance:{SOPInstanceUID:D}}=R,E=m.getSourceMappings(G,H);if(!E||!E.length)throw Error("Attempting to hydrate measurements service when no mappings present. This shouldn't be reached.");let T=t.DicomMetadataStore.getInstance(C,O,D),v={};R.measurements.forEach(e=>{let{ReferencedSOPInstanceUID:t,imageId:n,frameNumber:r=1}=e,a=`${t}:${r}`;n&&!v[a]&&(v[a]=n)});let b=B.generateToolState(T,v,l.metaData),w=h.getCustomization("onBeforeSRHydration")?.value;"function"==typeof w&&(b=w({storedMeasurementByAnnotationType:b,displaySet:R}));let N=E.map(e=>e.annotationType),U={};Object.keys(b).forEach(e=>{N.includes(e)&&(U[e]=b[e])});let M=[],P=(o=U,i=v,d=[],Object.keys(o).forEach(e=>{o[e].forEach(e=>{let t=e.annotation.data?.frameNumber||1,n=i[`${e.sopInstanceUid}:${t}`];n&&!d.includes(n)&&d.push(n)})}),d);for(let e of P){let{SeriesInstanceUID:t,StudyInstanceUID:n}=l.metaData.get("instance",e);M.includes(t)||M.push(t),f?f!==n&&console.warn("NO SUPPORT FOR SRs THAT HAVE MEASUREMENTS FROM MULTIPLE STUDIES."):f=n}let x=(s=U,u=v,p=[],Object.keys(s).forEach(e=>{s[e].forEach(e=>{let t=e.annotation.data?.frameNumber||1;if(!u[`${e.sopInstanceUid}:${t}`]){let{FrameOfReferenceUID:t}=e.annotation.metadata;t&&!p.includes(t)&&p.push(t)}})}),p),A=new Map;for(let e of x){let t=function(e,t,n,r){let a=e.measurements?.find(e=>e.coords?.some(e=>"SCOORD3D"===e.ValueType&&e.ReferencedFrameOfReferenceSequence===n))?.displaySetInstanceUID,o=a?r.getDisplaySetByUID(a):void 0;return o?.FrameOfReferenceUID!==n||o.isDerivedDisplaySet?Y(t,n):o}(R,g.getDisplaySetsBy(t=>t.FrameOfReferenceUID===e&&!t.isDerivedDisplaySet),e,g);t&&(A.set(e,t),M.includes(t.SeriesInstanceUID)||M.push(t.SeriesInstanceUID),f?f!==t.StudyInstanceUID&&console.warn("NO SUPPORT FOR SRs THAT HAVE MEASUREMENTS FROM MULTIPLE STUDIES."):f=t.StudyInstanceUID)}return Object.keys(U).forEach(t=>{U[t].forEach(n=>{n.uid=$();let a=function(t){let n=t.annotation.data&&t.annotation.data.frameNumber||1,r=v[`${t.sopInstanceUid}:${n}`];if(!r)return function(e,t,n=new Map){let{FrameOfReferenceUID:r}=e.annotation.metadata,{points:a}=e.annotation.data.handles,{displaySetService:o}=t.services,i=o.getDisplaySetsBy(e=>e.FrameOfReferenceUID===r);if(!i.length||!a?.length)return{FrameOfReferenceUID:r};let s=n.get(r)||Y(i,e.annotation),u={...{cameraFocalPoint:function(e){let t=1/e.length,n=c.vec3.create();for(let r of e)c.vec3.scaleAndAdd(n,n,r,t);return n}(function(e){if(1===e.length||2===e.length)return e;let t=Math.ceil(e.length/4),n=Math.ceil(e.length/2);return[e[0],e[t],e[n]]}(a)),viewPlaneNormal:null,viewUp:null},volumeId:s.displaySetInstanceUID,FrameOfReferenceUID:r};return l.utilities.updatePlaneRestriction(a,u),u}(t,e,A);let{FrameOfReferenceUID:a}=l.metaData.get("instance",r);return{referencedImageId:r,FrameOfReferenceUID:a}}(n),{referencedImageId:o}=a,i={annotationUID:n.annotation.annotationUID,data:n.annotation.data,predecessorImageId:n.predecessorImageId,metadata:{...a,toolName:t}};l.utilities.updatePlaneRestriction(i.data.handles.points,i.metadata);let s=m.getSource(G,H);i.data.label=function(e){let{findingSites:t=[],finding:n,annotation:r}=e;if(r.data.label)return r.data.label;let a=t.find(e=>e.CodeValue===_.codeValues.CORNERSTONEFREETEXT);return a?a.CodeMeaning:n&&n.CodeValue===_.codeValues.CORNERSTONEFREETEXT?n.CodeMeaning:void 0}(n),i.data.finding=W(y,n.finding?.[0]),i.data.findingSites=((e,t)=>{if(!t||!t.length)return;let n=[];for(let r=0;r<t.length;r++){let a=W(e,t[r][0]||t[r]);a&&n.push(a)}return n.length&&n||void 0})(y,n.findingSites),i.data.findingSites?.forEach(e=>{e.type&&(i.data[e.type]=e)});let u=E.find(e=>e.annotationType===t),d=m.addRawMeasurement(s,t,{annotation:i},u.toMeasurementSchema,S);r.runCommand("updateMeasurement",{uid:d,code:i.data.finding}),I&&j.setAnnotationLocked(d,!0),o&&!P.includes(o)&&P.push(o)})}),R.isHydrated=!0,{StudyInstanceUID:f,SeriesInstanceUIDs:M}}function Y(e,t){if(!e?.length)return void console.warn("No display set found for",t);let r=n().utils.sortDisplaySetsCopy(e);if(1===r.length)return r[0];let a=r.find(e=>e.isReconstructable);return a||r[0]}let{MeasurementReport:X}=i.adaptersSR.Cornerstone3D,{log:J}=n();var K=f(963);class Q extends s.AnnotationTool{constructor(e={},t={configuration:{}}){super(e,t),this.isPointNearTool=()=>null,this.getHandleNearImagePoint=()=>null,this.renderAnnotation=(e,t)=>{let{viewport:n}=e,{element:r}=n,a=s.annotation.state.getAnnotations(this.getToolName(),r);if(!a?.length||(a=this.filterInteractableAnnotationsForElement(r,a),!a?.length))return;let{activeIndex:o,trackingUniqueIdentifiers:i}=(0,K.eF)(r),l=i[o],c=a.filter(e=>i.includes(e.data?.TrackingUniqueIdentifier));if(!("function"==typeof n.getActors?n.getActors().length>0:!!n._actors?.size))return;let d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},{style:p}=s.annotation.config;for(let e=0;e<c.length;e++){let r=c[e],a=r.annotationUID,{renderableData:o,TrackingUniqueIdentifier:i}=r.data,{referencedImageId:f}=r.metadata;d.annotationUID=a;let S=p.getToolGroupToolStyles(this.toolGroupId)[this.getToolName()],m=this.getStyle("lineWidth",d,r),g=this.getStyle("lineDash",d,r),h={color:i===l?"rgb(0, 255, 0)":this.getStyle("color",d,r),lineDash:g,lineWidth:m,...S};Object.keys(o).forEach(e=>{let i,l,c=o[e];switch(e){case u.sh.POINT:i=this.renderPoint;break;case u.sh.MULTIPOINT:i=this.renderMultipoint;break;case u.sh.POLYLINE:i=this.renderPolyLine;break;case u.sh.CIRCLE:i=this.renderEllipse;break;case u.sh.ELLIPSE:i=this.renderEllipse,l=s.utilities.math.ellipse.getCanvasEllipseCorners;break;default:throw Error(`Unsupported GraphicType: ${e}`)}let p=i(t,n,c,a,f,h);this.renderTextBox(t,n,p,l,r,d,h)})}}}_getTextBoxLinesFromLabels(e){let t=Math.min(e.length,5),n=[];for(let r=0;r<t;r++){let t=e[r];n.push(`${function(e){let t=Z[e];return void 0!==t?t:e}(t.label)}: ${t.value}`)}return n}renderPolyLine(e,t,n,r,a,o){let i={color:o.color,width:o.lineWidth,lineDash:o.lineDash},l=[];return n.map((n,a)=>{let o=n.map(e=>t.worldToCanvas(e)),c=`${a}`;2===o.length?s.drawing.drawLine(e,r,c,o[0],o[1],i):s.drawing.drawPolyline(e,r,c,o,i),l=l.concat(o)}),l}renderMultipoint(e,t,n,r,a,o){let i;n.map((n,a)=>{i=n.map(e=>t.worldToCanvas(e)),s.drawing.drawHandles(e,r,"0",i,{color:o.color})})}renderPoint(e,t,n,r,a,o){let i=[];return n.map((n,c)=>{let u=n[0];if(i.push(t.worldToCanvas(u)),void 0!==n[1])i.push(t.worldToCanvas(n[1]));else{let e=l.metaData.get("imagePixelModule",a),n=10,r=10;if(e){let{columns:t,rows:a}=e;n=t/10,r=a/10}let o=l.utilities.worldToImageCoords(a,u),s=l.utilities.imageToWorldCoords(a,[o[0]+n,o[1]+r]);i.push(t.worldToCanvas(s))}let d=`${c}`;s.drawing.drawArrow(e,r,d,i[1],i[0],{color:o.color,width:o.lineWidth})}),i}renderEllipse(e,t,n,r,a,o){let i;return n.map((n,a)=>{let l;if(0===n.length)return;let c=t.getRotation();i=n.map(e=>t.worldToCanvas(e)),l=90==c||270==c?s.utilities.math.ellipse.getCanvasEllipseCorners([i[2],i[3],i[0],i[1]]):s.utilities.math.ellipse.getCanvasEllipseCorners(i);let u=`${a}`;s.drawing.drawEllipse(e,r,u,l[0],l[1],{color:o.color,width:o.lineWidth,lineDash:o.lineDash})}),i}renderTextBox(e,t,n,r,a,o,i={}){if(!n||!a)return;let{annotationUID:l,data:c={}}=a,{labels:u}=c,{color:d}=i,p=n;"function"==typeof r&&(p=r(n));let f=this._getTextBoxLinesFromLabels(u),S=s.utilities.drawing.getTextBoxCoordsCanvas(p);a.data?.handles?.textBox?.worldPosition||(a.data.handles.textBox.worldPosition=t.canvasToWorld(S));let m=t.worldToCanvas(a.data.handles.textBox.worldPosition),g=this.getLinkedTextBoxStyle(o,a),{x:h,y:y,width:I,height:R}=s.drawing.drawLinkedTextBox(e,l,"1",f,m,n,{},{...g,color:d});a.data.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([h,y]),topRight:t.canvasToWorld([h+I,y]),bottomLeft:t.canvasToWorld([h,y+R]),bottomRight:t.canvasToWorld([h+I,y+R])}}}Q.toolName=m.DICOMSRDisplay;let Z={"Short Axis":"W: ","Long Axis":"L: ",AREA:"Area: ",Length:"",CORNERSTONEFREETEXT:""};function ee(e,t,n={}){class r extends t{constructor(e,t){e.configuration=e.configuration?{...e.configuration,...n}:n,super(e,t)}}r.toolName=e,(0,s.addTool)(r)}var et=f(154);function en(){return(en=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}).apply(null,arguments)}let er=e.lazy(()=>Promise.resolve().then(f.bind(f,954))),ea=t=>e.createElement(e.Suspense,{fallback:e.createElement("div",null,"Loading...")},e.createElement(er,t)),eo={id:I,onModeEnter:function({servicesManager:e}){let{displaySetService:t}=e.services;[...t.getDisplaySetCache().values()].filter(e=>e.SOPClassHandlerId===C||e.SOPClassHandlerId===D).forEach(e=>{e.isHydrated=!1})},preRegistration:function({configuration:e={},servicesManager:t}){ee(m.DICOMSRDisplay,Q),ee(m.SRLength,s.LengthTool),ee(m.SRBidirectional,s.BidirectionalTool),ee(m.SREllipticalROI,s.EllipticalROITool),ee(m.SRCircleROI,s.CircleROITool),ee(m.SRArrowAnnotate,s.ArrowAnnotateTool),ee(m.SRAngle,s.AngleTool),ee(m.SRPlanarFreehandROI,s.PlanarFreehandROITool),ee(m.SRRectangleROI,s.RectangleROITool),ee(m.SRCobbAngle,s.CobbAngleTool);let n={lineDash:"4,4"};s.annotation.config.style.setToolGroupToolStyles("SRToolGroup",{[m.DICOMSRDisplay]:n,SRLength:n,SRBidirectional:n,SREllipticalROI:n,SRCircleROI:n,SRArrowAnnotate:n,SRCobbAngle:n,SRAngle:n,SRPlanarFreehandROI:n,SRRectangleROI:n,global:{}})},getViewportModule:({servicesManager:t,extensionManager:n})=>[{name:"dicom-sr",component:r=>e.createElement(ea,en({servicesManager:t,extensionManager:n},r))}],getCommandsModule:e=>{let{servicesManager:t,extensionManager:n,commandsManager:r}=e,{customizationService:a}=t.services,o={changeColorMeasurement:({uid:e})=>{throw Error("Unsupported operation: changeColorMeasurement")},storeMeasurements:async({measurementData:e,dataSource:t,additionalFindingTypes:n,options:o={}})=>{J.info("[DICOMSR] storeMeasurements");let i=r.runCommand("createStoreFunction",{dataSource:t,defaultFileName:"dicom-sr.dcm"});if(!i)return J.error("[DICOMSR] No valid store for dataSource:",t),Promise.reject({});try{let t,r=((e,t,n={})=>{let r=V(e,t),{dataset:a}=X.generateReport(r,l.metaData,n);return void 0===a.SpecificCharacterSet&&(a.SpecificCharacterSet="ISO_IR 192"),a})(e,n,o),{ContentSequence:s}=r;if(!s?.[4]?.ContentSequence?.length)throw console.log("naturalizedReport missing imaging content",r),Error("Invalid report, no content");if(!r.SOPClassUID)throw Error("No sop class uid");let c=a.getCustomization("onBeforeDicomStore");return"function"==typeof c&&(t=c({dicomDict:t,measurementData:e,naturalizedReport:r})),await i(r,{measurementData:e,dicomDict:t}),r}catch(e){throw console.warn(e),J.error(`[DICOMSR] Error while saving the measurements: ${e.message}`),Error(e.message||"Error while saving the measurements.")}},hydrateStructuredReport:({displaySetInstanceUID:e})=>z({servicesManager:t,extensionManager:n,commandsManager:r},e)},i={storeMeasurements:o.storeMeasurements,hydrateStructuredReport:o.hydrateStructuredReport};return{actions:o,definitions:i,defaultContext:"CORNERSTONE_STRUCTURED_REPORT"}},getSopClassHandlerModule:function(e){let{servicesManager:n,extensionManager:r}=e,o=e=>(function(e,n,r){var o;if(!e||!e.length)throw Error("No instances were provided");t.utils.sortStudyInstances(e);let i=e[e.length-1],{StudyInstanceUID:s,SeriesInstanceUID:l,SOPInstanceUID:c,SeriesDescription:d,SeriesNumber:p,SeriesDate:f,SeriesTime:S,ConceptNameCodeSequence:m,SOPClassUID:g,imageId:h}=i;o=i.StudyInstanceUID,e.forEach(e=>{if(e.StudyInstanceUID!==o)throw console.warn("Not all instances have the same UID",o,e),Error(`Instances ${e.SOPInstanceUID} does not belong to ${o}`)});let y=g===E.Comprehensive3DSR,I=m?.CodeValue===u.n7.ImagingMeasurementReport,R={Modality:"SR",displaySetInstanceUID:t.utils.guid(),SeriesDescription:d,SeriesNumber:p,SeriesDate:f,SeriesTime:S,SOPInstanceUID:c,SeriesInstanceUID:l,StudyInstanceUID:s,SOPClassHandlerId:y?D:C,SOPClassUID:g,instances:e,referencedImages:null,measurements:null,isDerivedDisplaySet:!0,isLoaded:!1,isImagingMeasurementReport:I,sopClassUids:M,instance:i,predecessorImageId:h,addInstances:P,label:d||`${a().t("Series")} ${p} - ${a().t("SR")}`};return R.load=()=>x(R,n,r),[R]})(e,n,r);return[{name:R,sopClassUids:M,getDisplaySetsFromSeries:o},{name:O,sopClassUids:[E.Comprehensive3DSR],getDisplaySetsFromSeries:o}]},getUtilityModule:({servicesManager:e})=>[{name:"tools",exports:{toolNames:m}}]}})(),S=f.O(S)})());
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@ohif/core"),require("@cornerstonejs/adapters"),require("gl-matrix"),require("@cornerstonejs/core"),require("@ohif/extension-cornerstone"),require("@ohif/i18n"),require("@cornerstonejs/tools"),require("@ohif/ui-next"),require("@ohif/core/src/contextProviders/SystemProvider")):"function"==typeof define&&define.amd?define(["@ohif/core","@cornerstonejs/adapters","gl-matrix","@cornerstonejs/core","@ohif/extension-cornerstone","@ohif/i18n","@cornerstonejs/tools","@ohif/ui-next","@ohif/core/src/contextProviders/SystemProvider"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-sr"]=t(require("@ohif/core"),require("@cornerstonejs/adapters"),require("gl-matrix"),require("@cornerstonejs/core"),require("@ohif/extension-cornerstone"),require("@ohif/i18n"),require("@cornerstonejs/tools"),require("@ohif/ui-next"),require("@ohif/core/src/contextProviders/SystemProvider")):e["ohif-extension-cornerstone-dicom-sr"]=t(e["@ohif/core"],e["@cornerstonejs/adapters"],e["gl-matrix"],e["@cornerstonejs/core"],e["@ohif/extension-cornerstone"],e["@ohif/i18n"],e["@cornerstonejs/tools"],e["@ohif/ui-next"],e["@ohif/core/src/contextProviders/SystemProvider"])}(globalThis,(e,t,n,r,a,o,i,s,l)=>(()=>{"use strict";var c,u,d={954(e,t,n){n.r(t),n.d(t,{default:()=>R});var r=n(184),a=n(326),o=n(963),i=n(154),s=n(669),l=n(55),c=n(492),u=n(870);function d(e){return e.TrackingUniqueIdentifier}async function f(e,t,n){let{measurements:r}=e,{displaySetInstanceUID:a}=r[t];if(e.keyImageDisplaySet||(e.keyImageDisplaySet=(0,i.A)(n,e)),!a)return{referencedDisplaySetMetadata:null,referencedDisplaySet:null};let o=n.getDisplaySetByUID(a);if(!o?.images)return{referencedDisplaySetMetadata:null,referencedDisplaySet:null};let s=o.images[0];return{referencedDisplaySetMetadata:{PatientID:s.PatientID,PatientName:s.PatientName,PatientSex:s.PatientSex,PatientAge:s.PatientAge,SliceThickness:s.SliceThickness,StudyDate:s.StudyDate,SeriesDescription:s.SeriesDescription,SeriesInstanceUID:s.SeriesInstanceUID,SeriesNumber:s.SeriesNumber,ManufacturerModelName:s.ManufacturerModelName,SpacingBetweenSlices:s.SpacingBetweenSlices},referencedDisplaySet:o}}let p=function(e){let t,n,i,p,S,m,h,g,I,y,R,C,D=(0,r.c)(43),{servicesManager:T}=(0,c.useSystem)(),{children:O,dataSource:E,displaySets:v,viewportOptions:b}=e,{displaySetService:N}=T.services,U=b.viewportId;if(v.length>1)throw Error("SR viewport should only have a single display set");let w=v[0],{setPositionPresentation:x}=(0,s.usePositionPresentationStore)(),[M,P]=(0,l.useViewportGrid)(),[A,_]=(0,a.useState)(0),[q,F]=(0,a.useState)(null),[L,V]=(0,a.useState)(null),[k,j]=(0,a.useState)(null),{viewports:$,activeViewportId:B}=M;D[0]!==k||D[1]!==w?(t=e=>{let{measurements:t}=w;(0,o.m1)(k,t.map(d),e)},D[0]=k,D[1]=w,D[2]=t):t=D[2];let G=t;D[3]===Symbol.for("react.memo_cache_sentinel")?(n=e=>{j(e.detail.element)},D[3]=n):n=D[3];let H=n;D[4]!==N||D[5]!==x||D[6]!==w||D[7]!==b?(i=e=>{let{StudyInstanceUID:t,displaySetInstanceUID:n}=w;t&&n&&f(w,e,N).then(t=>{let{referencedDisplaySet:n,referencedDisplaySetMetadata:r}=t;if(!n||!r)return;_(e),F(n),V(r);let{presentationIds:a}=b,o=w.measurements[e];x(a.positionPresentationId,{viewReference:o.viewReference||{referencedImageId:o.imageId}})})},D[4]=N,D[5]=x,D[6]=w,D[7]=b,D[8]=i):i=D[8];let W=i;D[9]!==q||D[10]!==A||D[11]!==e||D[12]!==w||D[13]!==b?(p=()=>{if(!q)return null;let{measurements:t}=w;return t?.[A]?(0,u.jsx)(s.OHIFCornerstoneViewport,{...e,displaySets:[q],viewportOptions:{...b,toolGroupId:"SRToolGroup",viewportType:"stack",positionIds:null},onElementEnabled:t=>{e.onElementEnabled?.(t),H(t)},isJumpToMeasurementDisabled:!0}):null},D[9]=q,D[10]=A,D[11]=e,D[12]=w,D[13]=b,D[14]=p):p=D[14];let Y=p;D[15]!==B||D[16]!==N||D[17]!==P||D[18]!==$?(S=()=>{let e=N.subscribe(N.EVENTS.DISPLAY_SETS_REMOVED,e=>{let{displaySetInstanceUIDs:t}=e,n=$.get(B);t.includes(n.displaySetInstanceUID)&&P.setDisplaySetsForViewport({viewportId:B,displaySetInstanceUIDs:[]})});return()=>{e.unsubscribe()}},D[15]=B,D[16]=N,D[17]=P,D[18]=$,D[19]=S):S=D[19],D[20]===Symbol.for("react.memo_cache_sentinel")?(m=[],D[20]=m):m=D[20],(0,a.useEffect)(S,m),D[21]!==A||D[22]!==w||D[23]!==W?(h=()=>{(async()=>{w.isLoaded||await w.load(),W(A)})()},D[21]=A,D[22]=w,D[23]=W,D[24]=h):h=D[24],D[25]!==w?(g=[w],D[25]=w,D[26]=g):g=D[26],(0,a.useEffect)(h,g),D[27]!==k||D[28]!==A||D[29]!==G||D[30]!==w?(I=()=>{(async()=>{w.isLoaded||await w.load(),k&&w.isLoaded&&G(A)})()},y=[A,k,G,w],D[27]=k,D[28]=A,D[29]=G,D[30]=w,D[31]=I,D[32]=y):(I=D[31],y=D[32]),(0,a.useEffect)(I,y);let z=null;if(!q||!L)return null;if(O&&O.length){let e;if(D[33]!==O||D[34]!==U){let t;D[36]!==U?(t=(e,t)=>e&&a.cloneElement(e,{viewportId:U,key:t}),D[36]=U,D[37]=t):t=D[37],e=O.map(t),D[33]=O,D[34]=U,D[35]=e}else e=D[35];z=e}return D[38]!==Y?(R=Y(),D[38]=Y,D[39]=R):R=D[39],D[40]!==z||D[41]!==R?(C=(0,u.jsx)(u.Fragment,{children:(0,u.jsxs)("div",{className:"relative flex h-full w-full flex-row overflow-hidden",children:[R,z]})}),D[40]=z,D[41]=R,D[42]=C):C=D[42],C};var S=n(548),m=n(2);let h={TEXT:e=>e.TextValue,CODE:e=>e.ConceptCodeSequence?.[0]?.CodeMeaning,UIDREF:e=>e.UID,NUM:e=>{let t=e.MeasuredValueSequence?.[0];if(!t)return;let{NumericValue:n,MeasurementUnitsCodeSequence:r}=t,{CodeValue:a}=r;return`${n} ${a}`},PNAME:e=>{let t=e.PersonName?.[0];return t?m.utils.formatPN(t):void 0},DATE:e=>{let{Date:t}=e;return t?m.utils.formatDate(t):void 0},TIME:e=>{let{Time:t}=e;return t?m.utils.formatTime(t):void 0},DATETIME:e=>{let{DateTime:t}=e;if("string"!=typeof t)return;if(t.length<14)return t;let n=t.substring(0,8),r=t.substring(8,14),a=m.utils.formatDate(n),o=m.utils.formatTime(r);return`${a} ${o}`}};function g(e){let t,n,a,o,i,s,l,c=(0,r.c)(22),{contentItem:d,nodeIndexesTree:f,continuityOfContent:p}=e,{ConceptNameCodeSequence:m}=d,{CodeValue:g,CodeMeaning:I}=m,y=0===f[f.length-1];c[0]!==g||c[1]!==d||c[2]!==p||c[3]!==y?(t=function(e){let{ValueType:t}=e,n=h[t];return n?n(e):`[${t} is not supported]`}(d)??"[empty]",n="CONTINUOUS"===p,a=g===S.n7.Finding,o=n&&!y&&/^[a-zA-Z0-9]/.test(t?.[0]),c[0]=g,c[1]=d,c[2]=p,c[3]=y,c[4]=t,c[5]=n,c[6]=a,c[7]=o):(t=c[4],n=c[5],a=c[6],o=c[7]);let R=o,C="whitespace-pre-line";if(g===S.n7.Finding&&(C="whitespace-pre-wrap"),n){let e,n=R?" ":"";return c[8]!==I||c[9]!==C||c[10]!==t||c[11]!==n?(e=(0,u.jsx)(u.Fragment,{children:(0,u.jsxs)("span",{className:C,title:I,children:[n,t]})}),c[8]=I,c[9]=C,c[10]=t,c[11]=n,c[12]=e):e=c[12],e}return c[13]!==I?(i=(0,u.jsxs)("span",{className:"font-bold",children:[I,": "]}),c[13]=I,c[14]=i):i=c[14],c[15]!==C||c[16]!==t||c[17]!==a?(s=a?(0,u.jsx)("pre",{children:t}):(0,u.jsx)("span",{className:C,children:t}),c[15]=C,c[16]=t,c[17]=a,c[18]=s):s=c[18],c[19]!==i||c[20]!==s?(l=(0,u.jsx)(u.Fragment,{children:(0,u.jsxs)("div",{className:"mb-2",children:[i,s]})}),c[19]=i,c[20]=s,c[21]=l):l=c[21],l}function I(e){let t,n,a,o,i,s,l,c,d=(0,r.c)(20),{container:f,nodeIndexesTree:p,containerNumberedTree:S}=e;d[0]!==p?(t=void 0===p?[0]:p,d[0]=p,d[1]=t):t=d[1];let m=t;d[2]!==S?(n=void 0===S?[1]:S,d[2]=S,d[3]=n):n=d[3];let h=n,{ConceptNameCodeSequence:y}=f;d[4]!==y?(a=y??{},d[4]=y,d[5]=a):a=d[5];let{CodeMeaning:R}=a;d[6]!==f||d[7]!==h||d[8]!==m?(o=function(e,t,n){let{ContinuityOfContent:r}=e,a=e.ContentSequence;if(!a)return;let o=1;return a.map((e,a)=>{let{ValueType:i}=e,s=[...t,a],l=s.join(".");return"CONTAINER"===i?(0,u.jsx)(I,{container:e,nodeIndexesTree:s,containerNumberedTree:[...n,o++]},l):(0,u.jsx)(g,{contentItem:e,nodeIndexesTree:s,continuityOfContent:r},l)})}(f,m,h),d[6]=f,d[7]=h,d[8]=m,d[9]=o):o=d[9];let C=o;return d[10]!==h?(i=h.join("."),d[10]=h,d[11]=i):i=d[11],d[12]!==R||d[13]!==i?(s=(0,u.jsxs)("div",{className:"font-bold",children:[i,". ",R]}),d[12]=R,d[13]=i,d[14]=s):s=d[14],d[15]!==C?(l=(0,u.jsx)("div",{className:"ml-4 mb-2",children:C}),d[15]=C,d[16]=l):l=d[16],d[17]!==s||d[18]!==l?(c=(0,u.jsxs)("div",{children:[s,l]}),d[17]=s,d[18]=l,d[19]=c):c=d[19],c}let y=function(e){let t,n=(0,r.c)(2),{displaySets:a}=e,o=a[0].instances[0];return n[0]!==o?(t=(0,u.jsx)("div",{className:"text-foreground relative flex h-full w-full flex-col overflow-auto p-4",children:(0,u.jsx)("div",{children:(0,u.jsx)(I,{container:o})})}),n[0]=o,n[1]=t):t=n[1],t},R=function(e){let t,n=(0,r.c)(4),{displaySets:a}=e,{isImagingMeasurementReport:o}=a[0];if(o){let t;return n[0]!==e?(t=(0,u.jsx)(p,{...e}),n[0]=e,n[1]=t):t=n[1],t}return n[2]!==e?(t=(0,u.jsx)(y,{...e}),n[2]=e,n[3]=t):t=n[3],t}},548(e,t,n){n.d(t,{Ay:()=>s,bY:()=>i,n7:()=>o,sh:()=>a});let{CodeScheme:r}=n(142).adaptersSR.Cornerstone3D,a={POINT:"POINT",MULTIPOINT:"MULTIPOINT",POLYLINE:"POLYLINE",CIRCLE:"CIRCLE",ELLIPSE:"ELLIPSE"},o={ImagingMeasurementReport:"126000",ImageLibrary:"111028",ImagingMeasurements:"126010",MeasurementGroup:"125007",ImageLibraryGroup:"126200",TrackingUniqueIdentifier:"112040",TrackingIdentifier:"112039",Finding:"121071",FindingSite:"G-C0E3",FindingSiteSCT:"363698007"},i={SRT:"SRT",SCT:"SCT",CornerstoneCodeSchemes:[r.CodingSchemeDesignator,"CST4"]},s={CodeNameCodeSequenceValues:o,CodingSchemeDesignators:i,RelationshipType:{INFERRED_FROM:"INFERRED FROM",CONTAINS:"CONTAINS"},SCOORDTypes:a}},963(e,t,n){n.d(t,{eF:()=>i,m1:()=>o});var r=n(557);let a={};function o(e,t,n=0){let i=(0,r.getEnabledElement)(e);if(!i)return;let{viewport:s}=i;a[s.id]={trackingUniqueIdentifiers:t,activeIndex:n}}function i(e){let t=(0,r.getEnabledElement)(e);if(!t)return{trackingUniqueIdentifiers:[]};let{viewport:n}=t;return a[n.id]?a[n.id]:{trackingUniqueIdentifiers:[]}}},154(e,t,n){n.d(t,{A:()=>i});let r=n(2).classes.ImageSet,a=(e,t)=>{let{displaySetInstanceUID:n,ReferencedSOPInstanceUID:r}=e,a=t.getDisplaySetByUID(n);if(a.images)return a.images.find(e=>e.SOPInstanceUID===r)},o=(e,t)=>{let n=[],r={};for(let o of t.measurements){let{imageId:t}=o;if(!t||r[t])continue;let i=a(o,e);if(!i){console.log("Measurement",o,"had no instances found");continue}r[t]=i,n.push(i)}return n},i=(e,t)=>{let n=o(e,t),a=new r(n),i=n[0];if(i)return a.setAttributes({displaySetInstanceUID:a.uid,SeriesDate:i.SeriesDate,SeriesTime:i.SeriesTime,SeriesInstanceUID:a.uid,StudyInstanceUID:i.StudyInstanceUID,SeriesNumber:i.SeriesNumber||0,SOPClassUID:i.SOPClassUID,SeriesDescription:`${t.SeriesDescription} KO ${t.instance.SeriesNumber}`,Modality:"KO",isMultiFrame:!1,numImageFrames:n.length,SOPClassHandlerId:"@ohif/extension-default.sopClassHandlerModule.stack",isReconstructable:!1,isCompositeStack:!0,madeInClient:!0,excludeFromThumbnailBrowser:!0,updateInstances:function(){this.images.splice(0,this.images.length,...o(e,t)),this.numImageFrames=this.images.length}}),e.addDisplaySets(a),a}},76(e,t,n){var r=n(326).__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;t.c=function(e){return r.H.useMemoCache(e)}},60(e,t){var n=Symbol.for("react.transitional.element");function r(e,t,r){var a=null;if(void 0!==r&&(a=""+r),void 0!==t.key&&(a=""+t.key),"key"in t)for(var o in r={},t)"key"!==o&&(r[o]=t[o]);else r=t;return{$$typeof:n,type:e,key:a,ref:void 0!==(t=r.ref)?t:null,props:r}}t.Fragment=Symbol.for("react.fragment"),t.jsx=r,t.jsxs=r},391(e,t){var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),a=(Symbol.for("react.fragment"),Symbol.for("react.strict_mode"),Symbol.for("react.profiler"),Symbol.for("react.consumer"),Symbol.for("react.context"),Symbol.for("react.forward_ref"),Symbol.for("react.suspense")),o=(Symbol.for("react.memo"),Symbol.for("react.lazy")),i=(Symbol.for("react.activity"),Symbol.iterator),s={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},l=Object.assign,c={};function u(e,t,n){this.props=e,this.context=t,this.refs=c,this.updater=n||s}function d(){}function f(e,t,n){this.props=e,this.context=t,this.refs=c,this.updater=n||s}u.prototype.isReactComponent={},u.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},u.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},d.prototype=u.prototype;var p=f.prototype=new d;p.constructor=f,l(p,u.prototype),p.isPureReactComponent=!0;var S={H:null,A:null,T:null,S:null},m=Object.prototype.hasOwnProperty;function h(e,t,r){var a=r.ref;return{$$typeof:n,type:e,key:t,ref:void 0!==a?a:null,props:r}}function g(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t){(0===e._status||-1===e._status)&&(e._status=1,e._result=t)},function(t){(0===e._status||-1===e._status)&&(e._status=2,e._result=t)}),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}"function"==typeof reportError&&reportError,t.Suspense=a,t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=S,t.cloneElement=function(e,t,n){if(null==e)throw Error("The argument must be a React element, but you passed "+e+".");var r=l({},e.props),a=e.key;if(null!=t)for(o in void 0!==t.key&&(a=""+t.key),t)m.call(t,o)&&"key"!==o&&"__self"!==o&&"__source"!==o&&("ref"!==o||void 0!==t.ref)&&(r[o]=t[o]);var o=arguments.length-2;if(1===o)r.children=n;else if(1<o){for(var i=Array(o),s=0;s<o;s++)i[s]=arguments[s+2];r.children=i}return h(e.type,a,r)},t.lazy=function(e){return{$$typeof:o,_payload:{_status:-1,_result:e},_init:g}},t.useEffect=function(e,t){return S.H.useEffect(e,t)},t.useState=function(e){return S.H.useState(e)}},184(e,t,n){e.exports=n(76)},326(e,t,n){e.exports=n(391)},870(e,t,n){e.exports=n(60)},142(e){e.exports=t},557(e){e.exports=r},713(e){e.exports=i},2(t){t.exports=e},492(e){e.exports=l},669(e){e.exports=a},545(e){e.exports=o},55(e){e.exports=s},155(e){e.exports=n}},f={};function p(e){var t=f[e];if(void 0!==t)return t.exports;var n=f[e]={exports:{}};return d[e](n,n.exports,p),n.exports}p.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return p.d(t,{a:t}),t},p.d=(e,t)=>{for(var n in t)p.o(t,n)&&!p.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},p.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),p.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c=[],p.O=(e,t,n,r)=>{if(t){r=r||0;for(var a=c.length;a>0&&c[a-1][2]>r;a--)c[a]=c[a-1];c[a]=[t,n,r];return}for(var o=1/0,a=0;a<c.length;a++){for(var[t,n,r]=c[a],i=!0,s=0;s<t.length;s++)(!1&r||o>=r)&&Object.keys(p.O).every(e=>p.O[e](t[s]))?t.splice(s--,1):(i=!1,r<o&&(o=r));if(i){c.splice(a--,1);var l=n();void 0!==l&&(e=l)}}return e},p.F={},p.E=e=>{Object.keys(p.F).map(t=>{p.F[t](e)})},u={509:0},p.F.j=e=>{if(!p.o(u,e)||void 0===u[e]){u[e]=null;var t=document.createElement("link");p.nc&&t.setAttribute("nonce",p.nc),t.rel="prefetch",t.as="script",t.href=p.p+p.u(e),document.head.appendChild(t)}},p.O.j=e=>0===u[e],p.O(0,[509],()=>{[509].map(p.E)},5);var S={};return(()=>{p.r(S),p.d(S,{Enums:()=>d.Ay,createReferencedImageDisplaySet:()=>en.A,default:()=>ei,hydrateStructuredReport:()=>z,srProtocol:()=>V,toolNames:()=>h});var e=p(184),t=p(326),n=p(2),r=p.n(n),a=p(545),o=p.n(a),i=p(669),s=p(142),l=p(713),c=p(557),u=p(155),d=p(548);let f=({GraphicData:e,ValueType:t,imageId:n})=>{let r=[];if("SCOORD3D"===t)for(let t=0;t<e.length;t+=3)r.push([e[t],e[t+1],e[t+2]]);else for(let t=0;t<e.length;t+=2){let a=c.utilities.imageToWorldCoords(n,[e[t],e[t+1]]);r.push(a)}return r},m=function({GraphicType:e,GraphicData:t,ValueType:n,imageId:r}){let a=[];switch(e){case d.sh.POINT:case d.sh.MULTIPOINT:case d.sh.POLYLINE:a=f({GraphicData:t,ValueType:n,imageId:r});break;case d.sh.CIRCLE:{let e=f({GraphicData:t,ValueType:n,imageId:r});if(!r)return e;let o=e[0],i=e[1],s=u.vec3.distance(o,i),l=c.metaData.get("imagePlaneModule",r);if(!l)throw Error("No imagePlaneModule found");let{columnCosines:d,rowCosines:p}=l,S=u.vec3.create();u.vec3.scaleAndAdd(S,o,d,s);let m=u.vec3.create();u.vec3.scaleAndAdd(m,o,d,-s);let h=u.vec3.create();u.vec3.scaleAndAdd(h,o,p,s);let g=u.vec3.create();u.vec3.scaleAndAdd(g,o,p,-s),a=[S,m,h,g];break}case d.sh.ELLIPSE:{let e=f({GraphicData:t,ValueType:n,imageId:r});if(!r)return e;let o=u.vec3.fromValues(...e[0]),i=u.vec3.fromValues(...e[1]),s=u.vec3.fromValues(...e[2]),l=u.vec3.fromValues(...e[3]),d=u.vec3.create();u.vec3.sub(d,i,o),u.vec3.normalize(d,d);let p=u.vec3.create();u.vec3.sub(p,l,s),u.vec3.normalize(p,p);let S=c.metaData.get("imagePlaneModule",r);if(!S)throw Error("imageId does not have imagePlaneModule metadata");let{columnCosines:m}=S,h=u.vec3.fromValues(...m),g=Math.abs(u.vec3.dot(h,d)),I=Math.abs(Math.abs(u.vec3.dot(h,p)));a=[],1e-4>Math.abs(Math.abs(g)-1)?a=[e[0],e[1],e[2],e[3]]:1e-4>Math.abs(I-1)?a=[e[2],e[3],e[0],e[1]]:console.warn("OBLIQUE ELLIPSE NOT YET SUPPORTED");break}default:console.warn("Unsupported GraphicType:",e)}return a},h={DICOMSRDisplay:"DICOMSRDisplay",SRLength:"SRLength",SRBidirectional:"SRBidirectional",SREllipticalROI:"SREllipticalROI",SRCircleROI:"SRCircleROI",SRArrowAnnotate:"SRArrowAnnotate",SRAngle:"SRAngle",SRCobbAngle:"SRCobbAngle",SRRectangleROI:"SRRectangleROI",SRPlanarFreehandROI:"SRPlanarFreehandROI"},{MeasurementReport:g}=s.adaptersSR.Cornerstone3D;function I({measurement:e,imageId:t=null,frameNumber:n=null,displaySet:r}){let a=h.DICOMSRDisplay,o=e.coords.reduce((e,n)=>(e[n.GraphicType]=e[n.GraphicType]||[],e[n.GraphicType].push(m({...n,imageId:t})),e),{}),{TrackingUniqueIdentifier:i}=e,{ValueType:s,GraphicType:u}=e.coords[0],d=o[u],f=null,p=null;if(t){let e=c.metaData.get("imagePlaneModule",t);f=e?.frameOfReferenceUID}"SCOORD3D"===s&&(p={FrameOfReferenceUID:f=e.coords[0].ReferencedFrameOfReferenceSequence,point:d[0][0]}),e.viewReference={planeRestriction:p,FrameOfReferenceUID:f,referencedImageId:t};let S={annotationUID:i,highlighted:!1,isLocked:!1,isPreview:a===h.DICOMSRDisplay,invalidated:!1,metadata:{toolName:a,planeRestriction:p,valueType:s,graphicType:u,FrameOfReferenceUID:f,referencedImageId:t,displaySetInstanceUID:r.displaySetInstanceUID},data:{label:e.labels?.[0]?.value||void 0,displayText:e.displayText||void 0,handles:{textBox:e.textBox??{},points:d[0]},cachedStats:{},frameNumber:n,renderableData:o,TrackingUniqueIdentifier:i,labels:e.labels}};l.annotation.state.addAnnotation(S)}let{MeasurementReport:y}=s.adaptersSR.Cornerstone3D,R=JSON.parse('{"UU":"@ohif/extension-cornerstone-dicom-sr"}').UU,C="dicom-sr",D=`${R}.sopClassHandlerModule.${C}`,T="dicom-sr-3d",O=`${R}.sopClassHandlerModule.${T}`,{sopClassDictionary:E}=n.utils,{CORNERSTONE_3D_TOOLS_SOURCE_NAME:v,CORNERSTONE_3D_TOOLS_SOURCE_VERSION:b}=i.Enums,{MetadataProvider:N}=n.classes,{TEXT_ANNOTATION_POSITION:U,COMMENT_CODE:w,CodeScheme:x}=s.adaptersSR.Cornerstone3D,M=[E.BasicTextSR,E.EnhancedSR,E.ComprehensiveSR,E.Comprehensive3DSR];function P(e,t){this.instances.push(...e),n.utils.sortStudyInstances(this.instances),this.instance=this.instances[this.instances.length-1];let{SeriesDate:r,SeriesTime:a}=n.utils.getLatestInstanceDateTime(this.instance);return this.SeriesDate=r,this.SeriesTime=a,this.isLoaded=!1,this}async function A(e,t,r){let{displaySetService:a,measurementService:o}=t.services,i=r.getDataSources()[0],{ContentSequence:s}=e.instance;async function l(t,n=null,r=null){for(let a in t)if("object"==typeof t[a]&&null!==t[a])await l(t[a],t,a);else if(Array.isArray(t[a]))await Promise.all(t[a].map(e=>l(e,t,a)));else if("BulkDataURI"===a){let o=await i.retrieve.bulkDataURI({BulkDataURI:t[a],StudyInstanceUID:e.instance.StudyInstanceUID,SeriesInstanceUID:e.instance.SeriesInstanceUID,SOPInstanceUID:e.instance.SOPInstanceUID});n&&r&&(n[r]=new Float32Array(o))}}!0!==e.isLoaded&&await l(s),e.isImagingMeasurementReport?(e.referencedImages=function(e){let t=e.find(e=>e.ConceptNameCodeSequence.CodeValue===d.n7.ImageLibrary);if(!t)return[];let n=L(t.ContentSequence).find(e=>e.ConceptNameCodeSequence.CodeValue===d.n7.ImageLibraryGroup);if(!n)return[];let r=[];return L(n.ContentSequence).forEach(e=>{let{ReferencedSOPSequence:t}=e;if(t){for(let e of L(t))if(e.ReferencedSOPClassUID){let{ReferencedSOPClassUID:t,ReferencedSOPInstanceUID:n}=e;r.push({ReferencedSOPClassUID:t,ReferencedSOPInstanceUID:n})}}}),r}(s),e.measurements=function(e){var t;let n,r=e.find(e=>e.ConceptNameCodeSequence.CodeValue===d.n7.ImagingMeasurements);if(!r)return[];let a=(t=L(r.ContentSequence).filter(e=>e.ConceptNameCodeSequence.CodeValue===d.n7.MeasurementGroup),n={},t.forEach(e=>{let t=L(e.ContentSequence),r=t.find(e=>e.ConceptNameCodeSequence.CodeValue===d.n7.TrackingUniqueIdentifier);r||console.warn("No Tracking Unique Identifier, skipping ambiguous measurement.");let a=r.UID;void 0===n[a]?n[a]=[...t]:t.forEach(e=>{e.ConceptNameCodeSequence.CodeValue!==d.n7.TrackingUniqueIdentifier&&n[a].push(e)})}),n),o=[];return Object.keys(a).forEach(e=>{var t;let n=(t=a[e]).some(e=>{var t;let n;return("SCOORD"===(t=e).ValueType||"SCOORD3D"===t.ValueType)&&!((n=e.ConceptNameCodeSequence[0])&&n.CodeValue===U.value&&n.CodingSchemeDesignator===U.schemeDesignator)})?function(e){let t=e.find(e=>"SCOORD"===e.ValueType||"SCOORD3D"===e.ValueType),n=e.find(e=>"UIDREF"===e.ValueType),r=e.find(e=>e.ConceptNameCodeSequence.CodeValue===d.n7.TrackingIdentifier);if(!t)return void console.warn(`graphic ValueType ${t.ValueType} not currently supported, skipping annotation.`);let a=e.filter(e=>"NUM"===e.ValueType),{ConceptNameCodeSequence:o}=t,{CodeValue:i,CodingSchemeDesignator:s}=o,l=`${s}:${i}`,c=q(t),u="SCOORD3D"===c.ValueType,f=c.GraphicData.length/(u?3:2),p={loaded:!1,labels:[],coords:[c],TrackingUniqueIdentifier:n.UID,TrackingIdentifier:r.TextValue,graphicCode:l,is3DMeasurement:u,pointsLength:f,graphicType:c.GraphicType};a.forEach(e=>{let{ConceptNameCodeSequence:t,MeasuredValueSequence:n}=e;n&&p.labels.push(F(t,n))});let S=e.filter(e=>e.ConceptNameCodeSequence.CodingSchemeDesignator===d.bY.SCT&&e.ConceptNameCodeSequence.CodeValue===d.n7.FindingSiteSCT);return S.length&&p.labels.push({label:d.n7.FindingSiteSCT,value:S[0].ConceptCodeSequence.CodeMeaning}),p}(t):function(e){let t=e.filter(e=>"NUM"===e.ValueType),n=e.find(e=>"UIDREF"===e.ValueType),r=e.find(e=>e.ConceptNameCodeSequence.CodeValue===d.n7.TrackingIdentifier),a=e.find(e=>e.ConceptNameCodeSequence.CodeValue===d.n7.Finding),o=e.filter(e=>e.ConceptNameCodeSequence.CodingSchemeDesignator===d.bY.SRT&&e.ConceptNameCodeSequence.CodeValue===d.n7.FindingSite),i=e.filter(e=>e.ConceptNameCodeSequence.CodingSchemeDesignator===w.schemeDesignator&&e.ConceptNameCodeSequence.CodeValue===w.value),s={loaded:!1,labels:[],coords:[],TrackingUniqueIdentifier:n.UID,TrackingIdentifier:r.TextValue};if(i)for(let e of i)e.TextValue&&s.labels.push({label:e.TextValue,value:""});if(a&&d.bY.CornerstoneCodeSchemes.includes(a.ConceptCodeSequence.CodingSchemeDesignator)&&a.ConceptCodeSequence.CodeValue===x.codeValues.CORNERSTONEFREETEXT&&s.labels.push({label:x.codeValues.CORNERSTONEFREETEXT,value:a.ConceptCodeSequence.CodeMeaning}),o.length){let e=o.find(e=>d.bY.CornerstoneCodeSchemes.includes(e.ConceptCodeSequence.CodingSchemeDesignator)&&e.ConceptCodeSequence.CodeValue===x.codeValues.CORNERSTONEFREETEXT);e&&s.labels.push({label:x.codeValues.CORNERSTONEFREETEXT,value:e.ConceptCodeSequence.CodeMeaning})}return t.forEach(e=>{let{ConceptNameCodeSequence:t,ContentSequence:n,MeasuredValueSequence:r}=e;if(n){let e=Array.isArray(n)?n.find(e=>("SCOORD"===e.ValueType||"SCOORD3D"===e.ValueType)&&!e.ConceptNameCodeSequence)??n.find(e=>"SCOORD"===e.ValueType||"SCOORD3D"===e.ValueType):n;if(!e)return void console.warn("ContentSequence array contains no SCOORD or SCOORD3D entry, skipping annotation.");let{ValueType:t}=e;if("SCOORD"!==t&&"SCOORD3D"!==t)return void console.warn(`Graphic ${t} not currently supported, skipping annotation.`);let r=q(e);r&&s.coords.push(r)}r&&s.labels.push(F(t,r))}),s}(t);n&&o.push(n)}),o}(s)):(e.referencedImages=[],e.measurements=[]);let{predecessorImageId:c}=e;for(let t of e.measurements)t.predecessorImageId=c;let u=o.getSourceMappings(v,b);e.isHydrated=!1,e.isRehydratable=function(e,t){if(!t||!t.length)return!1;let n=new Set;for(let e of t)n.add(e.annotationType);let{measurements:r}=e;for(let e=0;e<r.length;e++){let t=r[e];if(!t)continue;let{TrackingIdentifier:a="",graphicType:o,graphicCode:i,pointsLength:s}=t;if(!a&&!o){console.warn("No tracking identifier or graphicType for measurement ",t);continue}let l=y.getAdapterForTrackingIdentifier(a),c=y.getAdaptersForTypes(i,o,s);if(l&&n.has(l.toolType)||c&&c.some(e=>n.has(e.toolType)))return!0;console.log("Measurement is not rehydratable",a,r[e])}return console.log("No measurements found which were rehydratable"),!1}(e,u),e.isLoaded=!0,n.utils.sortDisplaySetsCopy(a.activeDisplaySets,{studyInstanceUIDFirst:e.StudyInstanceUID}).forEach(n=>{_(e,n,i,t)}),a.subscribe(a.EVENTS.DISPLAY_SETS_ADDED,n=>{let{displaySetsAdded:r}=n;r.forEach(n=>{_(e,n,i,t)})})}function _(e,t,n,r){let{customizationService:a}=r.services,o=e.measurements.filter(e=>!1===e.loaded);if(!o.length||t.unsupported||t.isDerivedDisplaySet||t.isDerived||t.isOverlayDisplaySet)return;let i=new Map;for(let e of n.getImageIdsForDisplaySet(t)){let t=N.getUIDsFromImageID(e);if(!t)continue;let{SOPInstanceUID:n,frameNumber:r}=t,a=`${n}:${r||1}`;i.set(a,e)}if(!o?.length)return;let s=e.SOPClassUID===E.Comprehensive3DSR;for(let n=o.length-1;n>=0;n--){let r=o[n],l=r.coords?.[0]?.ValueType==="SCOORD3D",c=a.getCustomization("onBeforeSRAddMeasurement");if("function"==typeof c&&(r=c({measurement:r,StudyInstanceUID:e.StudyInstanceUID,SeriesInstanceUID:e.SeriesInstanceUID})),s&&l&&function({measurement:e,displaySet:t}){return e.coords[0].ReferencedFrameOfReferenceSequence===t.FrameOfReferenceUID}({measurement:r,displaySet:t})){I({measurement:r,displaySet:t}),r.loaded=!0,r.displaySetInstanceUID=t.displaySetInstanceUID,o.splice(n,1);continue}let u=r.coords[0].ReferencedSOPSequence;if(!u)continue;let{ReferencedSOPInstanceUID:d}=u,f=u.ReferencedFrameNumber||1,p=`${d}:${f}`,S=i.get(p);S&&function(e,t,n){let{coords:r}=e,a=e.coords[0].ReferencedSOPSequence&&e.coords[0].ReferencedSOPSequence?.ReferencedFrameNumber||1;if(n&&Number(n)!==Number(a))return!1;for(let e=0;e<r.length;e++){let{ReferencedSOPInstanceUID:n}=r[e].ReferencedSOPSequence;if(n===t)return!0}return!1}(r,d,f)&&(I({measurement:r,imageId:S,frameNumber:f,displaySet:t}),r.loaded=!0,r.imageId=S,r.displaySetInstanceUID=t.displaySetInstanceUID,r.ReferencedSOPInstanceUID=d,r.frameNumber=f,o.splice(n,1))}}let q=e=>{let{ValueType:t,GraphicType:n,GraphicData:r}=e,a={ValueType:t,GraphicType:n,GraphicData:r};return a.ReferencedSOPSequence=e.ContentSequence?.ReferencedSOPSequence,a.ReferencedFrameOfReferenceSequence=e.ReferencedFrameOfReferenceUID||e.ContentSequence?.ReferencedFrameOfReferenceSequence,a};function F(e,t){let{CodeMeaning:n}=e,{NumericValue:r,MeasurementUnitsCodeSequence:a}=t,{CodeValue:o}=a,i=r?Number(r).toFixed(2):"";return{label:n,value:`${i} ${o}`}}function L(e){return e?Array.isArray(e)?e:[e]:[]}let V={id:"@ohif/sr",name:"SR Key Images",protocolMatchingRules:[],toolGroupIds:["default"],numberOfPriorsReferenced:0,defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"srDisplaySetId",matchedDisplaySetsIndex:-1}]},displaySetSelectors:{srDisplaySetId:{seriesMatchingRules:[{attribute:"Modality",constraint:{equals:"SR"}}]}},stages:[{name:"SR Key Images",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{allowUnmatchedView:!0},displaySets:[{id:"srDisplaySetId"}]}]}]},k=function(e,t){let n={},r=e.map(e=>e.uid).slice(),a=l.annotation.state.getAnnotationManager(),o=a.getFramesOfReference();for(let i=0;i<o.length;i++){let l=o[i],c=a.getAnnotations(l),u=Object.keys(c);for(let a=0;a<u.length;a++){let o=u[a],i=c[o];if(i)for(let a=0;a<i.length;a++){let l=i[a],c=r.findIndex(e=>e===l.annotationUID);if(-1!==c&&(!function(r,a){let o=r.metadata?.referencedImageId??s.NO_IMAGE_ID;n[o]||(n[o]={});let i=n[o];i[a]||(i[a]={data:[]});let l=e.find(e=>e.uid===r.annotationUID),c=i[a].data,{finding:u}=l,d=[];l.label&&(t.includes(a)?u={CodeValue:"CORNERSTONEFREETEXT",CodingSchemeDesignator:"CORNERSTONEJS",CodeMeaning:l.label}:d.push({CodeValue:"CORNERSTONEFREETEXT",CodingSchemeDesignator:"CORNERSTONEJS",CodeMeaning:l.label})),l.findingSites&&d.push(...l.findingSites);let f=Object.assign({},r,{finding:u,findingSites:d});c.push(f)}(l,o),r.splice(c,1),!r.length))return n}}}return n},{CodeScheme:j}=s.adaptersSR.Cornerstone3D,{locking:$}=l.annotation,{guid:B}=r().utils,{MeasurementReport:G}=s.adaptersSR.Cornerstone3D,{CORNERSTONE_3D_TOOLS_SOURCE_NAME:H,CORNERSTONE_3D_TOOLS_SOURCE_VERSION:W}=i.Enums,Y=(e,t)=>{if(!t||"CORNERSTONEJS"===t.CodingSchemeDesignator)return;let n=`${t.CodingSchemeDesignator}:${t.CodeValue}`;return{...e[n],ref:n,...t,text:t.CodeMeaning}};function z({servicesManager:e,extensionManager:t,commandsManager:r},a){var o,i,s,l;let d,f,p,S=t.getActiveDataSource()[0],{measurementService:m,displaySetService:h,customizationService:g}=e.services,I=g.getCustomization("codingValues"),y=g.getCustomization("panelMeasurement.disableEditing"),R=h.getDisplaySetByUID(a),{StudyInstanceUID:C,SeriesInstanceUID:D,instance:{SOPInstanceUID:T}}=R,O=m.getSourceMappings(H,W);if(!O||!O.length)throw Error("Attempting to hydrate measurements service when no mappings present. This shouldn't be reached.");let E=n.DicomMetadataStore.getInstance(C,D,T),v={};R.measurements.forEach(e=>{let{ReferencedSOPInstanceUID:t,imageId:n,frameNumber:r=1}=e,a=`${t}:${r}`;n&&!v[a]&&(v[a]=n)});let b=G.generateToolState(E,v,c.metaData),N=g.getCustomization("onBeforeSRHydration")?.value;"function"==typeof N&&(b=N({storedMeasurementByAnnotationType:b,displaySet:R}));let U=O.map(e=>e.annotationType),w={};Object.keys(b).forEach(e=>{U.includes(e)&&(w[e]=b[e])});let x=[],M=(o=w,i=v,d=[],Object.keys(o).forEach(e=>{o[e].forEach(e=>{let t=e.annotation.data?.frameNumber||1,n=i[`${e.sopInstanceUid}:${t}`];n&&!d.includes(n)&&d.push(n)})}),d);for(let e of M){let{SeriesInstanceUID:t,StudyInstanceUID:n}=c.metaData.get("instance",e);x.includes(t)||x.push(t),p?p!==n&&console.warn("NO SUPPORT FOR SRs THAT HAVE MEASUREMENTS FROM MULTIPLE STUDIES."):p=n}let P=(s=w,l=v,f=[],Object.keys(s).forEach(e=>{s[e].forEach(e=>{let t=e.annotation.data?.frameNumber||1;if(!l[`${e.sopInstanceUid}:${t}`]){let{FrameOfReferenceUID:t}=e.annotation.metadata;t&&!f.includes(t)&&f.push(t)}})}),f),A=new Map;for(let e of P){let t=function(e,t,n,r){let a=e.measurements?.find(e=>e.coords?.some(e=>"SCOORD3D"===e.ValueType&&e.ReferencedFrameOfReferenceSequence===n))?.displaySetInstanceUID,o=a?r.getDisplaySetByUID(a):void 0;return o?.FrameOfReferenceUID!==n||o.isDerivedDisplaySet?X(t,n):o}(R,h.getDisplaySetsBy(t=>t.FrameOfReferenceUID===e&&!t.isDerivedDisplaySet),e,h);t&&(A.set(e,t),x.includes(t.SeriesInstanceUID)||x.push(t.SeriesInstanceUID),p?p!==t.StudyInstanceUID&&console.warn("NO SUPPORT FOR SRs THAT HAVE MEASUREMENTS FROM MULTIPLE STUDIES."):p=t.StudyInstanceUID)}return Object.keys(w).forEach(t=>{w[t].forEach(n=>{n.uid=B();let a=function(t){let n=t.annotation.data&&t.annotation.data.frameNumber||1,r=v[`${t.sopInstanceUid}:${n}`];if(!r)return function(e,t,n=new Map){let{FrameOfReferenceUID:r}=e.annotation.metadata,{points:a}=e.annotation.data.handles,{displaySetService:o}=t.services,i=o.getDisplaySetsBy(e=>e.FrameOfReferenceUID===r);if(!i.length||!a?.length)return{FrameOfReferenceUID:r};let s=n.get(r)||X(i,e.annotation),l={...{cameraFocalPoint:function(e){let t=1/e.length,n=u.vec3.create();for(let r of e)u.vec3.scaleAndAdd(n,n,r,t);return n}(function(e){if(1===e.length||2===e.length)return e;let t=Math.ceil(e.length/4),n=Math.ceil(e.length/2);return[e[0],e[t],e[n]]}(a)),viewPlaneNormal:null,viewUp:null},volumeId:s.displaySetInstanceUID,FrameOfReferenceUID:r};return c.utilities.updatePlaneRestriction(a,l),l}(t,e,A);let{FrameOfReferenceUID:a}=c.metaData.get("instance",r);return{referencedImageId:r,FrameOfReferenceUID:a}}(n),{referencedImageId:o}=a,i={annotationUID:n.annotation.annotationUID,data:n.annotation.data,predecessorImageId:n.predecessorImageId,metadata:{...a,toolName:t}};c.utilities.updatePlaneRestriction(i.data.handles.points,i.metadata);let s=m.getSource(H,W);i.data.label=function(e){let{findingSites:t=[],finding:n,annotation:r}=e;if(r.data.label)return r.data.label;let a=t.find(e=>e.CodeValue===j.codeValues.CORNERSTONEFREETEXT);return a?a.CodeMeaning:n&&n.CodeValue===j.codeValues.CORNERSTONEFREETEXT?n.CodeMeaning:void 0}(n),i.data.finding=Y(I,n.finding?.[0]),i.data.findingSites=((e,t)=>{if(!t||!t.length)return;let n=[];for(let r=0;r<t.length;r++){let a=Y(e,t[r][0]||t[r]);a&&n.push(a)}return n.length&&n||void 0})(I,n.findingSites),i.data.findingSites?.forEach(e=>{e.type&&(i.data[e.type]=e)});let l=O.find(e=>e.annotationType===t),d=m.addRawMeasurement(s,t,{annotation:i},l.toMeasurementSchema,S);r.runCommand("updateMeasurement",{uid:d,code:i.data.finding}),y&&$.setAnnotationLocked(d,!0),o&&!M.includes(o)&&M.push(o)})}),R.isHydrated=!0,{StudyInstanceUID:p,SeriesInstanceUIDs:x}}function X(e,t){if(!e?.length)return void console.warn("No display set found for",t);let n=r().utils.sortDisplaySetsCopy(e);if(1===n.length)return n[0];let a=n.find(e=>e.isReconstructable);return a||n[0]}let{MeasurementReport:J}=s.adaptersSR.Cornerstone3D,{log:K}=r();var Q=p(963);class Z extends l.AnnotationTool{constructor(e={},t={configuration:{}}){super(e,t),this.isPointNearTool=()=>null,this.getHandleNearImagePoint=()=>null,this.renderAnnotation=(e,t)=>{let{viewport:n}=e,{element:r}=n,a=l.annotation.state.getAnnotations(this.getToolName(),r);if(!a?.length||(a=this.filterInteractableAnnotationsForElement(r,a),!a?.length))return;let{activeIndex:o,trackingUniqueIdentifiers:i}=(0,Q.eF)(r),s=i[o],c=a.filter(e=>i.includes(e.data?.TrackingUniqueIdentifier));if(!("function"==typeof n.getActors?n.getActors().length>0:!!n._actors?.size))return;let u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},{style:f}=l.annotation.config;for(let e=0;e<c.length;e++){let r=c[e],a=r.annotationUID,{renderableData:o,TrackingUniqueIdentifier:i}=r.data,{referencedImageId:p}=r.metadata;u.annotationUID=a;let S=f.getToolGroupToolStyles(this.toolGroupId)[this.getToolName()],m=this.getStyle("lineWidth",u,r),h=this.getStyle("lineDash",u,r),g={color:i===s?"rgb(0, 255, 0)":this.getStyle("color",u,r),lineDash:h,lineWidth:m,...S};Object.keys(o).forEach(e=>{let i,s,c=o[e];switch(e){case d.sh.POINT:i=this.renderPoint;break;case d.sh.MULTIPOINT:i=this.renderMultipoint;break;case d.sh.POLYLINE:i=this.renderPolyLine;break;case d.sh.CIRCLE:i=this.renderEllipse;break;case d.sh.ELLIPSE:i=this.renderEllipse,s=l.utilities.math.ellipse.getCanvasEllipseCorners;break;default:throw Error(`Unsupported GraphicType: ${e}`)}let f=i(t,n,c,a,p,g);this.renderTextBox(t,n,f,s,r,u,g)})}}}_getTextBoxLinesFromLabels(e){let t=Math.min(e.length,5),n=[];for(let r=0;r<t;r++){let t=e[r];n.push(`${function(e){let t=ee[e];return void 0!==t?t:e}(t.label)}: ${t.value}`)}return n}renderPolyLine(e,t,n,r,a,o){let i={color:o.color,width:o.lineWidth,lineDash:o.lineDash},s=[];return n.map((n,a)=>{let o=n.map(e=>t.worldToCanvas(e)),c=`${a}`;2===o.length?l.drawing.drawLine(e,r,c,o[0],o[1],i):l.drawing.drawPolyline(e,r,c,o,i),s=s.concat(o)}),s}renderMultipoint(e,t,n,r,a,o){let i;n.map((n,a)=>{i=n.map(e=>t.worldToCanvas(e)),l.drawing.drawHandles(e,r,"0",i,{color:o.color})})}renderPoint(e,t,n,r,a,o){let i=[];return n.map((n,s)=>{let u=n[0];if(i.push(t.worldToCanvas(u)),void 0!==n[1])i.push(t.worldToCanvas(n[1]));else{let e=c.metaData.get("imagePixelModule",a),n=10,r=10;if(e){let{columns:t,rows:a}=e;n=t/10,r=a/10}let o=c.utilities.worldToImageCoords(a,u),s=c.utilities.imageToWorldCoords(a,[o[0]+n,o[1]+r]);i.push(t.worldToCanvas(s))}let d=`${s}`;l.drawing.drawArrow(e,r,d,i[1],i[0],{color:o.color,width:o.lineWidth})}),i}renderEllipse(e,t,n,r,a,o){let i;return n.map((n,a)=>{let s;if(0===n.length)return;let c=t.getRotation();i=n.map(e=>t.worldToCanvas(e)),s=90==c||270==c?l.utilities.math.ellipse.getCanvasEllipseCorners([i[2],i[3],i[0],i[1]]):l.utilities.math.ellipse.getCanvasEllipseCorners(i);let u=`${a}`;l.drawing.drawEllipse(e,r,u,s[0],s[1],{color:o.color,width:o.lineWidth,lineDash:o.lineDash})}),i}renderTextBox(e,t,n,r,a,o,i={}){if(!n||!a)return;let{annotationUID:s,data:c={}}=a,{labels:u}=c,{color:d}=i,f=n;"function"==typeof r&&(f=r(n));let p=this._getTextBoxLinesFromLabels(u),S=l.utilities.drawing.getTextBoxCoordsCanvas(f);a.data?.handles?.textBox?.worldPosition||(a.data.handles.textBox.worldPosition=t.canvasToWorld(S));let m=t.worldToCanvas(a.data.handles.textBox.worldPosition),h=this.getLinkedTextBoxStyle(o,a),{x:g,y:I,width:y,height:R}=l.drawing.drawLinkedTextBox(e,s,"1",p,m,n,{},{...h,color:d});a.data.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([g,I]),topRight:t.canvasToWorld([g+y,I]),bottomLeft:t.canvasToWorld([g,I+R]),bottomRight:t.canvasToWorld([g+y,I+R])}}}Z.toolName=h.DICOMSRDisplay;let ee={"Short Axis":"W: ","Long Axis":"L: ",AREA:"Area: ",Length:"",CORNERSTONEFREETEXT:""};function et(e,t,n={}){class r extends t{constructor(e,t){e.configuration=e.configuration?{...e.configuration,...n}:n,super(e,t)}}r.toolName=e,(0,l.addTool)(r)}var en=p(154),er=p(870);let ea=t.lazy(()=>Promise.resolve().then(p.bind(p,954))),eo=n=>{let r,a,o=(0,e.c)(3);return o[0]===Symbol.for("react.memo_cache_sentinel")?(r=(0,er.jsx)("div",{children:"Loading..."}),o[0]=r):r=o[0],o[1]!==n?(a=(0,er.jsx)(t.Suspense,{fallback:r,children:(0,er.jsx)(ea,{...n})}),o[1]=n,o[2]=a):a=o[2],a},ei={id:R,onModeEnter:function({servicesManager:e}){let{displaySetService:t}=e.services;[...t.getDisplaySetCache().values()].filter(e=>e.SOPClassHandlerId===D||e.SOPClassHandlerId===O).forEach(e=>{e.isHydrated=!1})},preRegistration:function({configuration:e={},servicesManager:t}){et(h.DICOMSRDisplay,Z),et(h.SRLength,l.LengthTool),et(h.SRBidirectional,l.BidirectionalTool),et(h.SREllipticalROI,l.EllipticalROITool),et(h.SRCircleROI,l.CircleROITool),et(h.SRArrowAnnotate,l.ArrowAnnotateTool),et(h.SRAngle,l.AngleTool),et(h.SRPlanarFreehandROI,l.PlanarFreehandROITool),et(h.SRRectangleROI,l.RectangleROITool),et(h.SRCobbAngle,l.CobbAngleTool);let n={lineDash:"4,4"};l.annotation.config.style.setToolGroupToolStyles("SRToolGroup",{[h.DICOMSRDisplay]:n,SRLength:n,SRBidirectional:n,SREllipticalROI:n,SRCircleROI:n,SRArrowAnnotate:n,SRCobbAngle:n,SRAngle:n,SRPlanarFreehandROI:n,SRRectangleROI:n,global:{}})},getViewportModule:({servicesManager:t,extensionManager:n})=>[{name:"dicom-sr",component:r=>{let a,o=(0,e.c)(2);return o[0]!==r?(a=(0,er.jsx)(eo,{servicesManager:t,extensionManager:n,...r}),o[0]=r,o[1]=a):a=o[1],a}}],getCommandsModule:e=>{let{servicesManager:t,extensionManager:r,commandsManager:a}=e,{customizationService:o}=t.services,i={changeColorMeasurement:({uid:e})=>{throw Error("Unsupported operation: changeColorMeasurement")},storeMeasurements:async({measurementData:e,dataSource:t,additionalFindingTypes:r,options:i={}})=>{K.info("[DICOMSR] storeMeasurements");let s=a.runCommand("createStoreFunction",{dataSource:t,defaultFileName:"dicom-sr.dcm"});if(!s)return K.error("[DICOMSR] No valid store for dataSource:",t),Promise.reject({});try{let t,{date:a,time:l}=n.utils.getCurrentDicomDateTime(),u=((e,t,n={})=>{let r=k(e,t),{dataset:a}=J.generateReport(r,c.metaData,n);return void 0===a.SpecificCharacterSet&&(a.SpecificCharacterSet="ISO_IR 192"),a})(e,r,{...i.predecessorImageId?{}:{SeriesDate:a,SeriesTime:l},...i});n.utils.updateNewInstanceMetadata(u);let{ContentSequence:d}=u;if(!d?.[4]?.ContentSequence?.length)throw console.log("naturalizedReport missing imaging content",u),Error("Invalid report, no content");if(!u.SOPClassUID)throw Error("No sop class uid");let f=o.getCustomization("onBeforeDicomStore");return"function"==typeof f&&(t=f({dicomDict:t,measurementData:e,naturalizedReport:u})),await s(u,{measurementData:e,dicomDict:t}),u}catch(e){throw console.warn(e),K.error(`[DICOMSR] Error while saving the measurements: ${e.message}`),Error(e.message||"Error while saving the measurements.")}},hydrateStructuredReport:({displaySetInstanceUID:e})=>z({servicesManager:t,extensionManager:r,commandsManager:a},e)},s={storeMeasurements:i.storeMeasurements,hydrateStructuredReport:i.hydrateStructuredReport};return{actions:i,definitions:s,defaultContext:"CORNERSTONE_STRUCTURED_REPORT"}},getSopClassHandlerModule:function(e){let{servicesManager:t,extensionManager:r}=e,a=e=>(function(e,t,r){var a;if(!e||!e.length)throw Error("No instances were provided");n.utils.sortStudyInstances(e);let i=e[e.length-1],{StudyInstanceUID:s,SeriesInstanceUID:l,SOPInstanceUID:c,SeriesDescription:u,SeriesNumber:f,ConceptNameCodeSequence:p,SOPClassUID:S,imageId:m}=i;a=i.StudyInstanceUID,e.forEach(e=>{if(e.StudyInstanceUID!==a)throw console.warn("Not all instances have the same UID",a,e),Error(`Instances ${e.SOPInstanceUID} does not belong to ${a}`)});let{SeriesDate:h,SeriesTime:g}=n.utils.getLatestInstanceDateTime(i),I=S===E.Comprehensive3DSR,y=p?.CodeValue===d.n7.ImagingMeasurementReport,R=!!i.ContentSequence,C=new n.DisplaySetMessageList;R||C.addMessage(n.DisplaySetMessage.CODES.MISSING_REPORT_CONTENT);let T={Modality:"SR",displaySetInstanceUID:n.utils.guid(),SeriesDescription:u,SeriesNumber:f,SeriesDate:h,SeriesTime:g,SOPInstanceUID:c,SeriesInstanceUID:l,StudyInstanceUID:s,SOPClassHandlerId:I?O:D,SOPClassUID:S,instances:e,referencedImages:null,measurements:null,isDerivedDisplaySet:!0,isLoaded:!1,isImagingMeasurementReport:y&&R,messages:C,sopClassUids:M,instance:i,predecessorImageId:m,addInstances:P,label:u||`${o().t("Series")} ${f} - ${o().t("SR")}`};return T.load=()=>A(T,t,r),[T]})(e,t,r);return[{name:C,sopClassUids:M,getDisplaySetsFromSeries:a},{name:T,sopClassUids:[E.Comprehensive3DSR],getDisplaySetsFromSeries:a}]},getUtilityModule:({servicesManager:e})=>[{name:"tools",exports:{toolNames:h}}]}})(),S=p.O(S)})());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ohif/extension-cornerstone-dicom-sr",
3
- "version": "3.14.0-beta.3",
3
+ "version": "3.14.0-beta.37",
4
4
  "description": "OHIF extension for an SR Cornerstone Viewport",
5
5
  "author": "OHIF",
6
6
  "license": "MIT",
@@ -24,17 +24,15 @@
24
24
  "dcmjs": "0.52.0",
25
25
  "dicom-parser": "1.8.21",
26
26
  "hammerjs": "2.0.8",
27
- "prop-types": "15.8.1",
28
- "react": "18.3.1",
29
- "@ohif/extension-cornerstone": "3.14.0-beta.3",
30
- "@ohif/ui": "3.14.0-beta.3",
31
- "@ohif/core": "3.14.0-beta.3"
27
+ "react": "19.2.7",
28
+ "@ohif/core": "3.14.0-beta.37",
29
+ "@ohif/extension-cornerstone": "3.14.0-beta.37"
32
30
  },
33
31
  "dependencies": {
34
32
  "@babel/runtime": "7.29.7",
35
- "@cornerstonejs/adapters": "5.6.8",
36
- "@cornerstonejs/core": "5.6.8",
37
- "@cornerstonejs/tools": "5.6.8",
33
+ "@cornerstonejs/adapters": "5.10.3",
34
+ "@cornerstonejs/core": "5.10.3",
35
+ "@cornerstonejs/tools": "5.10.3",
38
36
  "classnames": "2.5.1"
39
37
  },
40
38
  "devDependencies": {