UNPKG

dicomweb-pacs

Version:

A self contained easy to use PACS with DICOMWEB and DIMSE service support

2 lines 150 kB
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3984],{52675:(e,t,a)=>{a.d(t,{A:()=>o});var n=a(86326),s=a(2836);function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},r.apply(null,arguments)}const i=({commandsManager:e,items:t,servicesManager:a,...i})=>{const{customizationService:o}=a.services,c=o.getCustomization("ohif.menuContent"),l=c?.content||(({item:t})=>n.createElement(s._26,{onClick:()=>t.onClick({commandsManager:e,...i})},n.createElement("div",{className:"flex items-center gap-2"},t.iconName&&n.createElement(s.FI1.ByName,{name:t.iconName}),n.createElement("span",null,t.label))));return n.createElement(s.SQm,{hideWhenDetached:!0,align:"start",onClick:e=>{e.stopPropagation(),e.preventDefault()}},t?.map(((t,s)=>n.createElement(l,r({key:t.id||`menu-item-${s}`,item:t,commandsManager:e,servicesManager:a},i)))))};function o(e){const{menuItemsKey:t,getMenuItems:a=i,commandsManager:r,servicesManager:o}=e,{customizationService:c}=o.services,l=c.getCustomization(t);if(!l?.length)return null;return function(e){return n.createElement(s.rId,null,n.createElement(s.tyb,{asChild:!0},n.createElement(s.$nd,{variant:"ghost",size:"icon",className:"hidden group-hover:inline-flex data-[state=open]:inline-flex",onClick:e=>{e.preventDefault(),e.stopPropagation()}},n.createElement(s.FI1.More,null))),a({...e,commandsManager:r,servicesManager:o,items:l}))}}},40565:(e,t,a)=>{a.d(t,{A:()=>g});var n=a(86326),s=a(2836),r=a(62037),i=a(4194),o=a(3329);const c=[{id:"settings",iconName:"Settings",value:!1}];var l=a(52675);const{sortStudyInstances:u,formatDate:d,createStudyBrowserTabs:m}=r.Wp,p=["SR","SEG","SM","RTSTRUCT","RTPLAN","RTDOSE","DOC","OT","PMAP"];const g=function({getImageSrc:e,getStudiesForPatientByMRN:t,requestDisplaySetCreationForStudy:a,dataSource:g,customMapDisplaySets:y,onClickUntrack:h,onDoubleClickThumbnailHandlerCallBack:I}){const{servicesManager:v,commandsManager:D,extensionManager:b}=(0,r.Jg)(),{displaySetService:w,customizationService:E}=v.services,x=(0,i.Zp)(),M=E.getCustomization("studyBrowser.studyMode")||"all",C=(0,s.Bzx)().StudyInstanceUIDs,[{activeViewportId:P,viewports:N,isHangingProtocolLayout:U}]=(0,s.ihW)(),[O,R]=(0,n.useState)(M),[T,A]=(0,n.useState)([...C]),[k,V]=(0,n.useState)(!1),[L,F]=(0,n.useState)([]),[B,$]=(0,n.useState)([]),[H,z]=(0,n.useState)({}),[_,q]=(0,n.useState)({}),[W,j]=(0,n.useState)(null),[G,Y]=(0,n.useState)(E.getCustomization("studyBrowser.viewPresets")),[J,X]=(0,n.useState)(c),K=y||f,Q=(0,n.useCallback)((async e=>{const t=E.getCustomization("studyBrowser.thumbnailDoubleClickCallback"),a={activeViewportId:P,commandsManager:D,servicesManager:v,isHangingProtocolLayout:U,appConfig:b._appConfig},n=t?.callbacks.map((e=>e(a)));for(const t of n)await t(e);I?.(e)}),[P,D,v,U,E]);(0,n.useEffect)((()=>{C.forEach((e=>async function(e){const a=await g.query.studies.search({studyInstanceUid:e});if(!a?.length)throw x("/notfoundstudy","_self"),new Error("Invalid study URL");let n=a;try{n=await t(a)}catch(e){console.warn(e)}const s=n.map((e=>({AccessionNumber:e.accession,StudyDate:e.date,StudyDescription:e.description,NumInstances:e.instances,ModalitiesInStudy:e.modalities,PatientID:e.mrn,PatientName:e.patientName,StudyInstanceUID:e.studyInstanceUid,StudyTime:e.time}))).map((e=>({studyInstanceUid:e.StudyInstanceUID,date:d(e.StudyDate)||"",description:e.StudyDescription,modalities:e.ModalitiesInStudy,numInstances:Number(e.NumInstances)})));F((e=>{const t=[...e];for(const a of s)e.find((e=>e.studyInstanceUid===a.studyInstanceUid))||t.push(a);return t}))}(e)))}),[C,g,t,x]),(0,n.useEffect)((()=>{if(!k){if(P){const e=250+10*w.getActiveDisplaySets().length;window.setTimeout((()=>V(!0)),e)}return}let t=w.activeDisplaySets;t=t.filter((e=>!p.includes(e.Modality))),t.length&&t.forEach((async t=>{const a={},n=w.getDisplaySetByUID(t.displaySetInstanceUID),s=S(n,g.getImageIdsForDisplaySet(n));if(!s||n?.unsupported)return;let{thumbnailSrc:r}=n;if(!r&&n.getThumbnailSrc&&(r=await n.getThumbnailSrc()),!r){const t=await e(s);n.thumbnailSrc=t}a[t.displaySetInstanceUID]=r,q((e=>({...e,...a})))}))}),[w,g,e,P,k]),(0,n.useEffect)((()=>{const e=w.activeDisplaySets;if(!e.length)return;const t=K(e,H,_,N);y||u(t),$(t)}),[w.activeDisplaySets,H,N,_,y]),(0,n.useEffect)((()=>{const t=w.subscribe(w.EVENTS.DISPLAY_SETS_ADDED,(t=>{if(!k)return;const{displaySetsAdded:a,options:n}=t;a.forEach((async t=>{const a=t.displaySetInstanceUID,s={},r=w.getDisplaySetByUID(a);if(r?.unsupported)return;n?.madeInClient&&j(a);const i=S(r,g.getImageIdsForDisplaySet(r));if(!i)return;let{thumbnailSrc:o}=r;!o&&r.getThumbnailSrc&&(o=await r.getThumbnailSrc()),o||(o=await e(i),r.thumbnailSrc=o),s[a]=o,q((e=>({...e,...s})))}))}));return()=>{t.unsubscribe()}}),[w,g,e,k]),(0,n.useEffect)((()=>{const e=w.subscribe(w.EVENTS.DISPLAY_SETS_CHANGED,(e=>{const t=K(e,H,_,N);y||u(t),$(t)})),t=w.subscribe(w.EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED,(()=>{const e=K(w.getActiveDisplaySets(),H,_,N);y||u(e),$(e)}));return()=>{e.unsubscribe(),t.unsubscribe()}}),[H,_,N,w,y]);const Z=m(C,L,B);(0,n.useEffect)((()=>{if(W){const e=W,t=document.getElementById(`thumbnail-${e}`);t&&"function"==typeof t.scrollIntoView&&(t.scrollIntoView({behavior:"smooth"}),j(null))}}),[W,T,O]),(0,n.useEffect)((()=>{if(!W)return;const e=function(e,t){for(let a=0;a<t.length;a++){const{studies:n}=t[a];for(let s=0;s<n.length;s++){const{displaySets:r}=n[s];for(let i=0;i<r.length;i++){if(r[i].displaySetInstanceUID===e)return{tabName:t[a].name,StudyInstanceUID:n[s].studyInstanceUid}}}}}(W,Z);if(!e)return void console.warn("jumpToThumbnail: displaySet thumbnail not found.");const{tabName:t,StudyInstanceUID:a}=e;R(t);if(!T.includes(a)){const e=[...T,a];A(e)}}),[T,W,Z]);const ee=N.get(P)?.displaySetInstanceUIDs;return n.createElement(n.Fragment,null,n.createElement(n.Fragment,null,n.createElement(o.T,{viewPresets:G,updateViewPresetValue:e=>{if(!e)return;const t=G.map((t=>(t.selected=t.id===e.id,t)));Y(t)},actionIcons:J,updateActionIconValue:e=>{e.value=!e.value;const t=[...J];X(t)}}),n.createElement(s.wvv,{orientation:"horizontal",className:"bg-black",thickness:"2px"})),n.createElement(s.M4o,{tabs:Z,servicesManager:v,activeTabName:O,expandedStudyInstanceUIDs:T,onClickStudy:function(e){const t=T.includes(e),n=t?[...T.filter((t=>t!==e))]:[...T,e];if(A(n),!t){a(w,e,!0)}},onClickTab:e=>{R(e)},onClickUntrack:h,onClickThumbnail:()=>{},onDoubleClickThumbnail:Q,activeDisplaySetInstanceUIDs:ee,showSettings:J.find((e=>"settings"===e.id))?.value,viewPresets:G,ThumbnailMenuItems:(0,l.A)({commandsManager:D,servicesManager:v,menuItemsKey:"studyBrowser.thumbnailMenuItems"}),StudyMenuItems:(0,l.A)({commandsManager:D,servicesManager:v,menuItemsKey:"studyBrowser.studyMenuItems"})}))};function f(e,t,a,n){const s=[],r=[];return e.filter((e=>!e.excludeFromThumbnailBrowser)).forEach((e=>{const{thumbnailSrc:n,displaySetInstanceUID:i}=e,o=function(e){if(p.includes(e.Modality)||e?.unsupported)return"thumbnailNoImage";return"thumbnail"}(e),c="thumbnail"===o?s:r,l=t?.[i];c.push({displaySetInstanceUID:i,description:e.SeriesDescription||"",seriesNumber:e.SeriesNumber,modality:e.Modality,seriesDate:d(e.SeriesDate),numInstances:e.numImageFrames,loadingProgress:l,countIcon:e.countIcon,messages:e.messages,StudyInstanceUID:e.StudyInstanceUID,componentType:o,imageSrc:n||a[i],dragData:{type:"displayset",displaySetInstanceUID:i},isHydratedForDerivedDisplaySet:e.isHydrated})})),[...s,...r]}function S(e,t){let a;if(e.isDynamicVolume){const t=e.dynamicVolumeInfo.timePoints,n=t[Math.floor(t.length/2)];a=n[Math.floor(n.length/2)]}else a=t[Math.floor(t.length/2)];return a}},3329:(e,t,a)=>{a.d(t,{T:()=>r});var n=a(86326),s=a(2836);function r({viewPresets:e,updateViewPresetValue:t,actionIcons:a,updateActionIconValue:r}){return n.createElement(n.Fragment,null,n.createElement("div",{className:"bg-muted flex h-[40px] select-none rounded-t p-2"},n.createElement("div",{className:"flex h-[24px] w-full select-none justify-center self-center text-[14px]"},n.createElement("div",{className:"flex w-full items-center gap-[10px]"},n.createElement("div",{className:"flex items-center justify-center"},n.createElement("div",{className:"text-primary flex items-center space-x-1"},a.map(((e,t)=>n.createElement(s.FI1[e.iconName]||s.FI1.MissingIcon,{key:t,onClick:()=>r(e),className:"cursor-pointer"}))))),n.createElement("div",{className:"ml-auto flex h-full items-center justify-center"},n.createElement(s.OY8,{type:"single",value:e.filter((e=>e.selected))[0].id,onValueChange:a=>{const n=e.find((e=>e.id===a));t(n)}},e.map(((e,t)=>n.createElement(s.dzE,{key:t,"aria-label":e.id,value:e.id,className:"text-actions-primary"},n.createElement(s.FI1[e.iconName]||s.FI1.MissingIcon))))))))))}},43984:(e,t,a)=>{a.r(t),a.d(t,{ContextMenuController:()=>oa,CustomizableContextMenuTypes:()=>n,MoreDropdownMenu:()=>zs.A,PanelStudyBrowserHeader:()=>Fs.T,StaticWadoClient:()=>T,Toolbox:()=>Hs,callInputDialog:()=>Ts,callInputDialogAutoComplete:()=>As,cleanDenaturalizedDataset:()=>Ms,colorPickerDialog:()=>Vs,createReportAsync:()=>za,createReportDialogPrompt:()=>Ze,default:()=>qs,dicomWebUtils:()=>s,getStudiesForPatientByMRN:()=>Je,promptLabelAnnotation:()=>Ls,promptSaveReport:()=>Xa,requestDisplaySetCreationForStudy:()=>Xe,useDisplaySetSelectorStore:()=>Oa,useHangingProtocolStageIndexStore:()=>Ta,usePatientInfo:()=>Oe,useToggleHangingProtocolStore:()=>$a,useToggleOneUpViewportGridStore:()=>Ha,useUIStateStore:()=>Us,useViewportGridStore:()=>Na,useViewportsByPositionStore:()=>Va,utils:()=>r});var n={};a.r(n);var s={};a.r(s),a.d(s,{cleanDenaturalizedDataset:()=>Ms,fixBulkDataURI:()=>L,fixMultiValueKeys:()=>Ps,transferDenaturalizedDataset:()=>Cs});var r={};a.r(r),a.d(r,{Toolbox:()=>Hs,addIcon:()=>Bs});var i=a(83562),o=a(62037),c=a(45476);const{getString:l,getName:u,getModalities:d}=o.ll;function m(e){if(!e||!e.length)return[];const t=[];return e.forEach((e=>t.push({studyInstanceUid:l(e["0020000D"]),date:l(e["00080020"]),time:l(e["00080030"]),accession:l(e["00080050"])||"",mrn:l(e["00100020"])||"",patientName:o.Wp.formatPN(u(e["00100010"]))||"",instances:Number(l(e["00201208"]))||0,description:l(e["00081030"])||"",modalities:l(d(e["00080060"],e["00080061"]))||""}))),t}async function p(e,t,a,n){return await e.searchForStudies({studyInstanceUid:void 0,queryParams:n})}function g(e,t={}){if(!e)return;const a=["00081030","00080060"].join(","),n=void 0!==e?.disableWildcard?!e.disableWildcard:t.supportsWildcard,s=e=>n&&e?`*${e}*`:e,r={PatientName:s(e.patientName),"00100020":s(e.patientId),AccessionNumber:s(e.accessionNumber),StudyDescription:s(e.studyDescription),ModalitiesInStudy:e.modalitiesInStudy,limit:e.limit||101,offset:e.offset||0,fuzzymatching:!0===t.supportsFuzzyMatching,includefield:a};if(e.startDate&&e.endDate)r.StudyDate=`${e.startDate}-${e.endDate}`;else if(e.startDate){const t=new Date,a=String(t.getDate()).padStart(2,"0"),n=String(t.getMonth()+1).padStart(2,"0"),s=`${t.getFullYear()}${n}${a}`;r.StudyDate=`${e.startDate}-${s}`}else if(e.endDate){const t="19700102";r.StudyDate=`${t}-${e.endDate}`}if(e.studyInstanceUid){let t=e.studyInstanceUid;t=Array.isArray(t)?t.join():t,t=t.replace(/[^0-9.]+/g,"\\"),r.StudyInstanceUID=t}const i={};return Object.keys(r).forEach((e=>{void 0!==r[e]&&""!==r[e]&&(i[e]=r[e])})),i}function f({instance:e,frame:t,config:a,thumbnail:n=!1}){if(!e)return;if(e.imageId&&void 0===t)return e.imageId;if(e.url)return e.url;const s=n?"thumbnailRendering":"imageRendering";if(a[s]&&"wadouri"!==a[s])return function(e,t,a){const n=function(e,t,a){const n=function(e,t){const{StudyInstanceUID:a,SeriesInstanceUID:n,SOPInstanceUID:s}=e;return`${t.wadoRoot}/studies/${a}/series/${n}/instances/${s}`}(e,t);return`${n}/frames/${a=a||1}`}(e,t,a);if(n)return`wadors:${n}`}(e,a,t);{const n=function(e,t){const{StudyInstanceUID:a,SeriesInstanceUID:n,SOPInstanceUID:s}=t,r=[];r.push("requestType=WADO"),r.push(`studyUID=${a}`),r.push(`seriesUID=${n}`),r.push(`objectUID=${s}`),r.push("contentType=application/dicom"),r.push("transferSyntax=*");const i=r.join("&");return`${e.wadoUriRoot}?${i}`}(a,e);let s="dicomweb:"+n;return void 0!==t&&(s+="&frame="+t),s}}var S=a(5842);class y{constructor(e,t,a={},n=void 0,s=void 0){this.client=e,this.studyInstanceUID=t,this.filters=a,this.sortCriteria=n,this.sortFunction=s}async execLoad(){const e=await this.preLoad(),t=await this.load(e);return await this.posLoad(t)}async runLoaders(e){let t;for(const a of e)if(t=await a(),t&&t.length)break;if(e.next().done&&!t)throw new Error("RetrieveMetadataLoader failed");return t}async configLoad(){}async preLoad(){}async load(e){}async posLoad(e){}}class h extends y{getOptions(){const{studyInstanceUID:e,filters:t}=this,a={studyInstanceUID:e},{seriesInstanceUID:n}=t;return n&&(a.seriesInstanceUID=n),a}*getLoaders(){const e=[],{studyInstanceUID:t,filters:{seriesInstanceUID:a}={},client:n}=this;a&&e.push(n.retrieveSeriesMetadata.bind(n,{studyInstanceUID:t,seriesInstanceUID:a})),e.push(n.retrieveStudyMetadata.bind(n,{studyInstanceUID:t})),yield*e}async load(e){const t=this.getLoaders();return this.runLoaders(t)}async posLoad(e){return e}}const I=["00080021","00080031","0008103E","00200011"].join(",");class v{constructor(){this.metadata=void 0,this.processFunction=void 0,this.internalPromise=void 0,this.thenFunction=void 0,this.rejectFunction=void 0}setMetadata(e){this.metadata=e}setProcessFunction(e){this.processFunction=e}getPromise(){return this.start()}start(){return this.internalPromise||(this.internalPromise=this.processFunction(),this.thenFunction&&(this.then(this.thenFunction),this.thenFunction=void 0),this.rejectFunction&&(this.reject(this.rejectFunction),this.rejectFunction=void 0)),this.internalPromise}then(e){if(this.internalPromise)return this.internalPromise.then(e);this.thenFunction=e}reject(e){if(this.internalPromise)return this.internalPromise.reject(e);this.rejectFunction=e}}class D extends y{*getPreLoaders(){const e=[],{studyInstanceUID:t,filters:{seriesInstanceUID:a}={},client:n}=this;let s={studyInstanceUID:t,queryParams:{includefield:I}};a&&(s.queryParams.SeriesInstanceUID=a,e.push(n.searchForSeries.bind(n,s))),e.push(n.searchForSeries.bind(n,s)),yield*e}async preLoad(){const e=this.getPreLoaders(),t=await this.runLoaders(e),a=this.sortCriteria,n=this.sortFunction,{naturalizeDataset:s}=S.Ay.data.DicomMetaDictionary,r=t.map(s);return(0,c.LM)(r,a,n)}async load(e){const{client:t,studyInstanceUID:a}=this,n=function(e,t,a){return Object.freeze({hasNext:()=>a.length>0,next(){const{seriesInstanceUID:n,metadata:s}=a.shift(),r=new v;return r.setMetadata(s),r.setProcessFunction((()=>e.retrieveSeriesMetadata({studyInstanceUID:t,seriesInstanceUID:n}))),r}})}(t,a,e.map((e=>({seriesInstanceUID:e.SeriesInstanceUID,metadata:e})))),s=[];for(;n.hasNext();){const e=n.next();s.push(e)}return{preLoadData:e,promises:s}}async posLoad({preLoadData:e,promises:t}){return{preLoadData:e,promises:t}}}const b=async function(e,t,a,n={},s,r){const i=new(!1!==a?D:h)(e,t,n,s,r);return await i.execLoad()};const w=function(e,t,a,n,s,r){const{seriesInstanceUID:i}=n;return new Promise(((o,c)=>{const l=i.map((i=>{const o=Object.assign({},n,{seriesInstanceUID:i});return b(e,t,a,o,s,r)}));!0===a?Promise.all(l).then((e=>{const t={preLoadData:[],promises:[]};e.forEach((({preLoadData:e,promises:a})=>{t.preLoadData=t.preLoadData.concat(e),t.promises=t.promises.concat(a)})),o(t)}),c):Promise.all(l).then((e=>{o(e.flat())}),c)}))},E="RetrieveStudyMetadata",x=new Map;function M(e,t,a,n,s,r,i={}){if(!e)throw new Error(`${E}: Required 'dicomWebClient' parameter not provided.`);if(!t)throw new Error(`${E}: Required 'StudyInstanceUID' parameter not provided.`);const o=`${i.name}:${t}`;if(x.has(o))return x.get(o);let c;return c=n&&n.seriesInstanceUID&&Array.isArray(n.seriesInstanceUID)?w(e,t,a,n,s,r):new Promise(((i,o)=>{b(e,t,a,n,s,r).then((function(e){i(e)}),o)})),x.set(o,c),c}function C(e){x.has(e)&&x.delete(e)}function P(e,t,a){if(a+e.length>t.length)return!1;let n=a;for(let a=0;a<e.length;a++)if(e[a]!==t[n++])return!1;return!0}const N=function(e,t,a){a=a||0;const n=function(e){const t=new Uint8Array(e.length);for(let a=0,n=e.length;a<n;a++)t[a]=e.charCodeAt(a);return t}(t);for(let t=a;t<e.length;t++)if(n[0]===e[t]&&P(n,e,t))return t;return-1};function U(e){const t=new Uint8Array(e[0]);if(t.length<25)return e;const a=N(t,"--");if(a>6)return e;const n=N(t,"\r\n\r\n",a);if(n>512)return e;const s=function(e,t,a){t=t||0,a=a||e.length-t;let n="";for(let s=t;s<t+a;s++)n+=String.fromCharCode(e[s]);return n}(t,0,n),r=function(e){for(let t=0;t<e.length;t++)if("--"===e[t].substr(0,2))return e[t]}(s.split("\r\n"));if(!r)return e;const i=n+4,o=N(t,r,i);return-1===o?e:[t.slice(i,o-2).buffer]}const{DICOMwebClient:O}=i.FH,R=O;R._orig_buildMultipartAcceptHeaderFieldValue||(R._orig_buildMultipartAcceptHeaderFieldValue=R._buildMultipartAcceptHeaderFieldValue,R._buildMultipartAcceptHeaderFieldValue=function(e,t){return 1===e.length&&e[0].mediaType.endsWith("/*")?"*/*":R._orig_buildMultipartAcceptHeaderFieldValue(e,t)});class T extends i.FH.DICOMwebClient{constructor(e){super(e),this.config=void 0,this.staticWado=void 0,this.staticWado=e.staticWado,this.config=e}retrieveBulkData(e){const t=!1!==this.config.fixBulkdataMultipart,a={...e};return this.staticWado&&(a.mediaTypes=[{mediaType:"application/*"}]),super.retrieveBulkData(a).then((e=>t?U(e):e))}retrieveInstanceFrames(e){return this.staticWado?super.retrieveInstanceFrames({...e,mediaTypes:[{mediaType:"image/*"}]}):super.retrieveInstanceFrames(e)}async searchForStudies(e){if(!this.staticWado)return super.searchForStudies(e);const t=await super.searchForStudies(e),{queryParams:a}=e;if(!a)return t;const n=this.toLowerParams(a);return t.filter((e=>{for(const t of Object.keys(T.studyFilterKeys))if(!this.filterItem(t,n,e,T.studyFilterKeys))return!1;return!0}))}async searchForSeries(e){if(!this.staticWado)return super.searchForSeries(e);const t=await super.searchForSeries(e),{queryParams:a}=e;if(!a)return t;const n=this.toLowerParams(a);return t.filter((e=>{for(const t of Object.keys(T.seriesFilterKeys))if(!this.filterItem(t,n,e,T.seriesFilterKeys))return!1;return!0}))}compareValues(e,t,a){const{fuzzyMatching:n}=a;if(Array.isArray(e))return e.find((e=>this.compareValues(e,t,a)));if(Array.isArray(t))return t.find((t=>this.compareValues(e,t,a)));if(t?.Alphabetic&&(t=t.Alphabetic),n&&"string"==typeof t&&"string"==typeof e){const a=e=>e.toLowerCase(),n=a(e),s=a(t),r=e=>e.split(/[\s^]+/).filter(Boolean),i=r(n),o=r(s);return i.every((e=>o.some((t=>t.startsWith(e)))))}if("string"==typeof t){if(0===t.length)return!0;if(0===e.length||"*"===e)return!0;if("*"===e[0]&&"*"===e[e.length-1])return-1!=t.indexOf(e.substring(1,e.length-1));if("*"===e[e.length-1])return-1!=t.indexOf(e.substring(0,e.length-1));if("*"===e[0])return t.indexOf(e.substring(1))===t.length-e.length+1}return e===t}compareDateRange(e,t){if(!t)return!0;const a=e.indexOf("-");if(-1===a)return this.compareValues(e,t,{});const n=e.substring(0,a),s=e.substring(a+1);return(!n||t>=n)&&(!s||t<=s)}filterItem(e,t,a,n){const{supportsFuzzyMatching:s=!1}=this.config,r={fuzzyMatching:(e=>-1!==e.indexOf("name"))(e)&&s},i=n[e]||e;if(!t)return!0;const o=t[e]||t[i];if(!o)return!0;const c=a[e]||a[i];if(!c)return!1;if("DA"===c.vr&&c.Value?.[0])return this.compareDateRange(o,c.Value[0]);const l=c.Value;return this.compareValues(o,l,r)}toLowerParams(e){const t={};return Object.entries(e).forEach((([e,a])=>{t[e.toLowerCase()]=a})),t}}T.studyFilterKeys={studyinstanceuid:"0020000D",patientname:"00100010","00100020":"mrn",studydescription:"00081030",studydate:"00080020",modalitiesinstudy:"00080061",accessionnumber:"00080050"},T.seriesFilterKeys={seriesinstanceuid:"0020000E",seriesnumber:"00200011",modality:"00080060"};const A=(e,t)=>{const{instance:a,tag:n="PixelData",defaultPath:s="/pixeldata",defaultType:r="video/mp4"}=t,i=a[n],{StudyInstanceUID:o,SeriesInstanceUID:c,SOPInstanceUID:l}=a,u=i&&i.BulkDataURI||`series/${c}/instances/${l}${s}`,d=-1!==u.indexOf("?"),m=-1!==u.indexOf("accept="),p=u+(m?"":(d?"&":"?")+`accept=${r}`);if(p.startsWith("series/")){const{wadoRoot:t}=e;return`${t}/studies/${o}/${p}`}return p},k=(e,t)=>{const{wadoRoot:a}=e,{instance:n,tag:s="PixelData"}=t,{StudyInstanceUID:r,SeriesInstanceUID:i,SOPInstanceUID:o}=n,c=n[s]?.BulkDataURI??"";if(-1===c?.indexOf("?"))return"PixelData"===s||"EncapsulatedDocument"===s?`${a}/studies/${r}/series/${i}/instances/${o}/rendered`:void 0},V=(e,t)=>{const{singlepart:a}=e,{instance:n,tag:s="PixelData",defaultType:r="video/mp4",singlepart:i="video",url:c=null}=t;if(c)return c;const l=n[s];if(l){if(l.DirectRetrieveURL)return l.DirectRetrieveURL;if(l.InlineBinary){const e=o.Wp.b64toBlob(l.InlineBinary,r);return l.DirectRetrieveURL=URL.createObjectURL(e),l.DirectRetrieveURL}if(!a||!0!==a&&-1===a.indexOf(i)){if(l.retrieveBulkData){const e={mediaType:r};return l.retrieveBulkData(e).then((e=>(l.DirectRetrieveURL=URL.createObjectURL(new Blob([e],{type:r})),l.DirectRetrieveURL)))}return void console.warn("Unable to retrieve",s,"from",n)}}return k(e,t)||A(e,t)};function L(e,t,a){let{BulkDataURI:n}=e;const{bulkDataURI:s={}}=a;n=s.transform?.(n)||n;const{startsWith:r,prefixWith:i=""}=s;if(r&&n.startsWith(r)&&(n=i+n.substring(r.length),e.BulkDataURI=n),n.startsWith("http")||e.BulkDataURI.startsWith("/")){if("/"===n[0]&&a.wadoRoot.startsWith("http")){const t=new URL(a.wadoRoot);e.BulkDataURI=`${t.origin}${n}`}}else{const{StudyInstanceUID:r,SeriesInstanceUID:i}=t,o=n.startsWith("instances/")||n.startsWith("../");n.startsWith("series/")||n.startsWith("bulkdata/")||"studies"===s.relativeResolution&&!o?e.BulkDataURI=`${a.wadoRoot}/studies/${r}/${n}`:!o&&"series"!==s.relativeResolution&&s.relativeResolution||(e.BulkDataURI=`${a.wadoRoot}/studies/${r}/series/${i}/${n}`)}}const{DicomMetaDictionary:F,DicomDict:B}=S.Ay.data,{naturalizeDataset:$,denaturalizeDataset:H}=F,z="2.25.270695996825855179949881587723571202391.2.0.0",_="OHIF-VIEWER-2.0.0",q="1.2.840.10008.1.2.1",W=o.Ly.MetadataProvider;function j(e,t){const{userAuthenticationService:a}=t.services;let n,s,r,u,d,S,y;e.bulkDataURI||={enabled:!0};const h={initialize:({params:t,query:c})=>{e.onConfiguration&&"function"==typeof e.onConfiguration&&(e=e.onConfiguration(e,{params:t,query:c})),n=JSON.parse(JSON.stringify(e)),S=()=>{const e={},t=a.getAuthorizationHeader();return t&&t.Authorization&&(e.Authorization=t.Authorization),e},y=()=>({...S(),Accept:o.Wp.generateAcceptHeader(e.acceptHeader,e.requestTransferSyntaxUID,e.omitQuotationForMultipartRequest)}),s={url:e.qidoRoot,staticWado:e.staticWado,singlepart:e.singlepart,headers:a.getAuthorizationHeader(),errorInterceptor:o.r_.getHTTPErrorHandler(),supportsFuzzyMatching:e.supportsFuzzyMatching},r={url:e.wadoRoot,staticWado:e.staticWado,singlepart:e.singlepart,headers:a.getAuthorizationHeader(),errorInterceptor:o.r_.getHTTPErrorHandler(),supportsFuzzyMatching:e.supportsFuzzyMatching},u=e.staticWado?new T(s):new i.FH.DICOMwebClient(s),d=e.staticWado?new T(r):new i.FH.DICOMwebClient(r)},query:{studies:{mapParams:g.bind(),search:async function(t){u.headers=S();const{studyInstanceUid:a,seriesInstanceUid:n,...s}=g(t,{supportsFuzzyMatching:e.supportsFuzzyMatching,supportsWildcard:e.supportsWildcard})||{};return m(await p(u,0,0,s))},processResults:m.bind()},series:{search:async function(e){u.headers=S();return function(e){const t=[];return e&&e.length&&e.forEach((e=>t.push({studyInstanceUid:l(e["0020000D"]),seriesInstanceUid:l(e["0020000E"]),modality:l(e["00080060"]),seriesNumber:l(e["00200011"]),seriesDate:o.Wp.formatDate(l(e["00080021"])),numSeriesInstances:Number(l(e["00201209"])),description:l(e["0008103E"])}))),(0,c.LM)(t),t}(await function(e,t){const a={includefield:["0008103E","00080021"].join(",")};return e.searchForSeries({studyInstanceUID:t,queryParams:a})}(u,e))}},instances:{search:(e,t)=>(u.headers=S(),p.call(void 0,u,e,null,t))}},retrieve:{directURL:t=>V({wadoRoot:e.wadoRoot,singlepart:e.singlepart},t),getWadoDicomWebClient:()=>d,bulkDataURI:async({StudyInstanceUID:e,BulkDataURI:t})=>{u.headers=S();const a={multipart:!1,BulkDataURI:t,StudyInstanceUID:e};return u.retrieveBulkData(a).then((e=>e&&e[0]||void 0))},series:{metadata:async({StudyInstanceUID:t,filters:a,sortCriteria:n,sortFunction:s,madeInClient:r=!1,returnPromises:i=!1}={})=>{if(!t)throw new Error("Unable to query for SeriesMetadata without StudyInstanceUID");return e.enableStudyLazyLoad?h._retrieveSeriesMetadataAsync(t,a,n,s,r,i):h._retrieveSeriesMetadataSync(t,a,n,s,r)}}},store:{dicom:async(e,t,a)=>{if(d.headers=S(),e instanceof ArrayBuffer){const a={datasets:[e],request:t};await d.storeInstances(a)}else{let n=a;if(!a){const t={FileMetaInformationVersion:e._meta?.FileMetaInformationVersion?.Value,MediaStorageSOPClassUID:e.SOPClassUID,MediaStorageSOPInstanceUID:e.SOPInstanceUID,TransferSyntaxUID:q,ImplementationClassUID:z,ImplementationVersionName:_},a=H(t),s=new B(a);s.dict=H(e),n=s}const s={datasets:[n.write()],request:t};await d.storeInstances(s)}}},_retrieveSeriesMetadataSync:async(t,a,n,s,r)=>{d.headers=y();const i=(await M(d,t,!1,a,n,s,e)).map($),c={},l={};i.forEach((a=>{c[a.SeriesInstanceUID]||(c[a.SeriesInstanceUID]={StudyInstanceUID:a.StudyInstanceUID,StudyDescription:a.StudyDescription,SeriesInstanceUID:a.SeriesInstanceUID,SeriesDescription:a.SeriesDescription,SeriesNumber:a.SeriesNumber,SeriesTime:a.SeriesTime,SOPClassUID:a.SOPClassUID,ProtocolName:a.ProtocolName,Modality:a.Modality}),l[a.SeriesInstanceUID]||(l[a.SeriesInstanceUID]=[]);const n=h.getImageIdsForInstance({instance:a});a.imageId=n,a.wadoRoot=e.wadoRoot,a.wadoUri=e.wadoUri,W.addImageIdToUIDs(n,{StudyInstanceUID:t,SeriesInstanceUID:a.SeriesInstanceUID,SOPInstanceUID:a.SOPInstanceUID}),l[a.SeriesInstanceUID].push(a)}));const u=Object.values(c);return o.H8.addSeriesMetadata(u,r),Object.keys(l).forEach((e=>o.H8.addInstances(l[e],r))),c},_retrieveSeriesMetadataAsync:async(t,a,n,s,r=!1,i=!1)=>{d.headers=y();const{preLoadData:c,promises:l}=await M(d,t,!0,a,n,s,e),m=(t,a=t)=>{if(!t)return t;for(const n of Object.keys(t)){const s=t[n];if(Array.isArray(s)&&"object"==typeof s[0]){s.filter(Boolean).forEach((e=>m(e,a)))}else s&&s.BulkDataURI&&!s.Value&&(L(s,a,e),s.retrieveBulkData=G.bind(u,s))}return t},p=t=>{const a=$(t);return e.bulkDataURI?.enabled?m(a):a};function g(){const e=o.H8.getStudy(t);e&&(e.isLoaded=!0)}c.forEach((e=>{e.StudyInstanceUID=t})),o.H8.addSeriesMetadata(c,r);const f=l.map((t=>(i||t?.start(),t.then((t=>{!function(t){const a=t.map(p);a.forEach((t=>{t.wadoRoot=e.wadoRoot,t.wadoUri=e.wadoUri;const{StudyInstanceUID:a,SeriesInstanceUID:n,SOPInstanceUID:s}=t,r=t.NumberOfFrames||1;for(let e=0;e<r;e++){const i=e+1,o=h.getImageIdsForInstance({instance:t,frame:i});W.addImageIdToUIDs(o,{StudyInstanceUID:a,SeriesInstanceUID:n,SOPInstanceUID:s,frameNumber:r>1?i:void 0})}const i=h.getImageIdsForInstance({instance:t});t.imageId=i})),o.H8.addInstances(a,r)}(t)})))));return i?(Promise.all(f).then((()=>g())),l):(await Promise.all(f),g(),c)},deleteStudyMetadataPromise:C,getImageIdsForDisplaySet(e){const t=e.images,a=[];return t?(e.images.forEach((e=>{const t=e.NumberOfFrames;if(t>1)for(let n=1;n<=t;n++){const t=this.getImageIdsForInstance({instance:e,frame:n});a.push(t)}else{const t=this.getImageIdsForInstance({instance:e});a.push(t)}})),a):a},getImageIdsForInstance:({instance:t,frame:a})=>f({instance:t,frame:a,config:e}),getConfig:()=>n,getStudyInstanceUIDs({params:e,query:t}){const a=e.StudyInstanceUIDs||e.studyInstanceUIDs,n=o.Wp.splitComma(t.getAll("StudyInstanceUIDs").concat(t.getAll("studyInstanceUIDs"))),s=n.length&&n||a;return s&&Array.isArray(s)?s:[s]}};var I,v;return e.supportsReject&&(h.reject=(I=e.wadoRoot,v=S,{series:(e,t)=>new Promise(((a,n)=>{const s=`${I}/studies/${e}/series/${t}/reject/113001%5EDCM`,r=new XMLHttpRequest;r.open("POST",s,!0);const i=v();for(const e in i)r.setRequestHeader(e,i[e]);console.log(r),r.onreadystatechange=function(){if(4==r.readyState)switch(r.status){case 204:a(r.responseText);break;case 404:n("Your dataSource does not support reject functionality")}},r.send()}))})),o.pt.create(h)}function G(e,t={}){const{mediaType:a}=t,n={multipart:!1,BulkDataURI:e.BulkDataURI,mediaTypes:a?[{mediaType:a},{mediaType:"application/octet-stream"}]:void 0,...t};return this.retrieveBulkData(n).then((t=>{const a=t instanceof Array&&t.find((e=>e?.byteLength))||void 0;return e.Value=a,a}))}var Y=a(98985);const J=o.Ay.classes.MetadataProvider,X={studyInstanceUid:"StudyInstanceUID",patientId:"PatientID"};let K={urls:[],studyInstanceUIDMap:new Map};function Q(e){return Object.keys(e).reduce(((t,a)=>("object"==typeof e[a]&&null!==e[a]?t[a]=Q(e[a]):t[a]=e[a],a.endsWith("Sequence")&&(t[a]=o.Ay.utils.addAccessors(t[a])),t)),Array.isArray(e)?[]:{})}const Z=e=>K.urls.find((t=>t.url===e)),ee=(e,t)=>{let a=[];return K.urls.map((n=>{n.studies.map((n=>{n[e]===t&&a.push(n)}))})),a};function te(e){const t={initialize:async({query:t,url:a})=>{a||(a=t.get("url"));let n=Z(a);if(n)return n.studies.map((e=>e.StudyInstanceUID));const s=await fetch(a),r=await s.json();let i,o;r.studies.forEach((t=>{i=t.StudyInstanceUID,t.series.forEach((t=>{o=t.SeriesInstanceUID,t.instances.forEach((t=>{const{metadata:a}=t,n=f({instance:t,config:e}),{query:s}=Y.parseUrl(t.url);J.addImageIdToUIDs(n,{StudyInstanceUID:i,SeriesInstanceUID:o,SOPInstanceUID:a.SOPInstanceUID,frameNumber:s.frame?parseInt(s.frame):void 0})}))}))})),K.urls.push({url:a,studies:[...r.studies]}),K.studyInstanceUIDMap.set(a,r.studies.map((e=>e.StudyInstanceUID)))},query:{studies:{mapParams:()=>{},search:async e=>{const[t,a]=Object.entries(e)[0],n=X[t];return ee(n,a).map((e=>({accession:e.AccessionNumber,date:e.StudyDate,description:e.StudyDescription,instances:e.NumInstances,modalities:e.Modalities,mrn:e.PatientID,patientName:e.PatientName,studyInstanceUid:e.StudyInstanceUID,NumInstances:e.NumInstances,time:e.StudyTime})))},processResults:()=>{console.warn(" DICOMJson QUERY processResults not implemented")}},series:{search:()=>{console.warn(" DICOMJson QUERY SERIES SEARCH not implemented")}},instances:{search:()=>{console.warn(" DICOMJson QUERY instances SEARCH not implemented")}}},retrieve:{directURL:t=>V(e,t),series:{metadata:async({filters:t,StudyInstanceUID:a,madeInClient:n=!1,customSort:s}={})=>{if(!a)throw new Error("Unable to query for SeriesMetadata without StudyInstanceUID");const r=ee("StudyInstanceUID",a)[0];let i;i=s?s(r.series):r.series;const c=["SeriesInstanceUID","SeriesInstanceUIDs","seriesInstanceUID","seriesInstanceUIDs"].find((e=>t[e]));if(c){const e=t[c];i=i.filter((t=>e.includes(t.SeriesInstanceUID)))}const l=i.map((e=>{const t={StudyInstanceUID:r.StudyInstanceUID,...e};return delete t.instances,t}));o.H8.addSeriesMetadata(l,n);const u=i.length;i.forEach(((t,s)=>{const i=t.instances.map((a=>{const n={...Q(a.metadata),url:a.url,imageId:f({instance:a,config:e}),...t,...r};return delete n.instances,delete n.series,n}));var c;c=i,o.H8.addInstances(c,n),s===u-1&&(o.H8.getStudy(a,n).isLoaded=!0)}))}}},store:{dicom:()=>{console.warn(" DICOMJson store dicom not implemented")}},getImageIdsForDisplaySet(t){const a=t.images,n=[];if(!a)return n;const{StudyInstanceUID:s,SeriesInstanceUID:r}=t,i=ee("StudyInstanceUID",s)[0].series.find((e=>e.SeriesInstanceUID===r))||[],o=new Map;return i.instances.forEach((e=>{if(e?.metadata?.SOPInstanceUID){const{metadata:t,url:a}=e,n=o.get(t.SOPInstanceUID)||[];n.push({...t,url:a}),o.set(t.SOPInstanceUID,n)}})),t.images.forEach((t=>{const a=t.NumberOfFrames||1,s=o.get(t.SOPInstanceUID)||[t];for(let t=0;t<a;t++){const r=f({instance:s[Math.min(t,s.length-1)],frame:a>1?t:void 0,config:e});n.push(r)}})),n},getImageIdsForInstance:({instance:e,frame:t})=>f({instance:e,frame:t}),getStudyInstanceUIDs:({params:e,query:t})=>{const a=t.get("url");return K.studyInstanceUIDMap.get(a)}};return o.pt.create(t)}const ae=o.Ay.classes.MetadataProvider,{EVENTS:ne}=o.H8,se={SR:!0,SEG:!0,DOC:!0},re=(e,t,a=0)=>e===t?a:e<t?-1:1,ie=(e,t)=>{const a=e.instances[0],n=t.instances[0],s=a.Modality,r=n.Modality,i=se[s],o=se[r];return i&&o?re(a.SeriesNumber,n.SeriesNumber):i||o?i?-1:1:re(n.SeriesNumber,a.SeriesNumber)};function oe(e){const{name:t}=e,a={initialize:({params:e,query:t})=>{},query:{studies:{mapParams:()=>{},search:e=>o.H8.getStudyInstanceUIDs().map((e=>{let t=0;const a=new Set,n=o.H8.getStudy(e);n.series.forEach((e=>{t+=e.instances.length,a.add(e.instances[0].Modality)}));const s=n?.series[0]?.instances[0];if(s)return{accession:s.AccessionNumber,date:s.StudyDate,description:s.StudyDescription,mrn:s.PatientID,patientName:o.Wp.formatPN(s.PatientName),studyInstanceUid:s.StudyInstanceUID,time:s.StudyTime,instances:t,modalities:Array.from(a).join("/"),NumInstances:t}})),processResults:()=>{console.warn(" DICOMLocal QUERY processResults not implemented")}},series:{search:e=>o.H8.getStudy(e).series.map((t=>{const a=t?.instances[0];return{studyInstanceUid:e,seriesInstanceUid:a.SeriesInstanceUID,modality:a.Modality,seriesNumber:a.SeriesNumber,seriesDate:a.SeriesDate,numSeriesInstances:t.instances.length,description:a.SeriesDescription}}))},instances:{search:()=>{console.warn(" DICOMLocal QUERY instances SEARCH not implemented")}}},retrieve:{directURL:e=>{const{instance:t,tag:a,defaultType:n}=e,s=t[a];if(s instanceof Array&&s[0]instanceof ArrayBuffer)return URL.createObjectURL(new Blob([s[0]],{type:n}))},series:{metadata:async({StudyInstanceUID:e,madeInClient:t=!1}={})=>{if(!e)throw new Error("Unable to query for SeriesMetadata without StudyInstanceUID");const a=o.H8.getStudy(e,t);o.H8._broadcastEvent(ne.SERIES_ADDED,{StudyInstanceUID:e,madeInClient:t}),a.series.forEach((a=>{const{SeriesInstanceUID:n}=a,s=a.instances[0].NumberOfFrames>1;a.instances.forEach(((e,t)=>{const{url:a,StudyInstanceUID:n,SeriesInstanceUID:r,SOPInstanceUID:i}=e;e.imageId=a,ae.addImageIdToUIDs(a,{StudyInstanceUID:n,SeriesInstanceUID:r,SOPInstanceUID:i,frameIndex:s?t:1})})),o.H8._broadcastEvent(ne.INSTANCES_ADDED,{StudyInstanceUID:e,SeriesInstanceUID:n,madeInClient:t})}))}}},store:{dicom:e=>{const t=S.Ay.data.datasetToBlob(e);var a=URL.createObjectURL(t);window.location.assign(a)}},getImageIdsForDisplaySet(e){const t=e.images,a=[];return t?(e.images.forEach((e=>{const t=e.NumberOfFrames;if(t>1)for(let n=1;n<=t;n++){const t=this.getImageIdsForInstance({instance:e,frame:n});a.push(t)}else{const t=this.getImageIdsForInstance({instance:e});a.push(t)}})),a):a},getImageIdsForInstance({instance:e,frame:t}){const{StudyInstanceUID:a,SeriesInstanceUID:n}=e,s=e.SOPInstanceUID||e.SopInstanceUID;let r=o.H8.getInstance(a,n,s).url;return void 0!==t&&(r+=`&frame=${t}`),r},deleteStudyMetadataPromise(){console.log("deleteStudyMetadataPromise not implemented")},getStudyInstanceUIDs:({params:e,query:t})=>{const{StudyInstanceUIDs:a}=e,n=t.getAll("StudyInstanceUIDs")||a,s=n&&Array.isArray(n)?n:[n];let r=!1;return s.forEach((e=>{const t=o.H8.getStudy(e);t&&(t.series=t.series.sort(ie),r=!0)})),r?s:[]}};return o.pt.create(a)}function ce(e,t){const{name:a}=e;let n;const s={initialize:async({params:e,query:s})=>{const r=s.get("url");if(!r)throw new Error(`No url for '${a}'`);{const a=await fetch(r),i=await a.json();if(!i.servers?.dicomWeb?.[0])throw new Error("Invalid configuration returned by url");n=j(i.servers.dicomWeb[0].configuration||i.servers.dicomWeb[0],t),n.initialize({params:e,query:s})}},query:{studies:{search:e=>n.query.studies.search(e)},series:{search:(...e)=>n.query.series.search(...e)},instances:{search:(e,t)=>n.query.instances.search(e,t)}},retrieve:{directURL:(...e)=>n.retrieve.directURL(...e),series:{metadata:async(...e)=>n.retrieve.series.metadata(...e)}},store:{dicom:(...e)=>n.store(...e)},deleteStudyMetadataPromise:(...e)=>n.deleteStudyMetadataPromise(...e),getImageIdsForDisplaySet:(...e)=>n.getImageIdsForDisplaySet(...e),getImageIdsForInstance:(...e)=>n.getImageIdsForInstance(...e),getStudyInstanceUIDs({params:e,query:t}){let n=[];const s=t.get("studyInstanceUIDs")||t.get("studyInstanceUids");if(!s)throw new Error(`No studyInstanceUids in request for '${a}'`);return n=s.split(";"),n}};return o.pt.create(s)}var le=a(93008),ue=a.n(le),de=a(83424),me=a.n(de);const pe={"query.studies.search":{mergeKey:"studyInstanceUid",tagFunc:e=>e},"query.series.search":{mergeKey:"seriesInstanceUid",tagFunc:(e,t)=>(e.forEach((e=>{e.RetrieveAETitle=t,o.H8.updateSeriesMetadata(e)})),e)}},ge=async({mergeMap:e,path:t,args:a,extensionManager:n,dataSourceNames:s,defaultDataSourceName:r})=>{const{mergeKey:i,tagFunc:o}=e[t]||{tagFunc:e=>e},c=Object.values(n.dataSourceDefs),l=c.find((e=>e.sourceName===r)),u=c.filter((e=>e.sourceName!==r));l&&u.unshift(l);const d=[],m=[];for(const e of u){const{configuration:r,sourceName:i}=e;if(r&&s.includes(i)){const[e]=n.getDataSources(i),s=ue()(e,t).apply(e,a);d.push(s),m.push(i)}}const p=(await Promise.allSettled(d)).map(((e,t)=>o(e.value,m[t])));let g=[];return g=i?me()(p.flat(),(e=>ue()(e,i))):p.flat(),g},fe=({path:e,args:t,extensionManager:a,dataSourceNames:n,defaultDataSourceName:s})=>{const r=Object.values(a.dataSourceDefs),i=r.find((e=>e.sourceName===s)),o=r.filter((e=>e.sourceName!==s));i&&o.unshift(i);const c=[];for(const s of o){const{configuration:r,sourceName:i}=s;if(r&&n.includes(i)){const[n]=a.getDataSources(i),s=ue()(n,e).apply(n,t);c.push(s)}}return c.flat()},Se=({path:e,args:t,defaultDataSourceName:a,extensionManager:n})=>{const[s]=n.getDataSources(a);return ue()(s,e).apply(s,t)},ye=({path:e,args:t,defaultDataSourceName:a,extensionManager:n})=>{const[s]=t,r=o.H8.getSeries(s.StudyInstanceUID,s.SeriesInstanceUID),[i]=n.getDataSources(r.RetrieveAETitle||a);return i[e](...t)};function he(e,t,a){const{seriesMerge:n}=e,{dataSourceNames:s,defaultDataSourceName:r}=n,i={initialize:(...e)=>fe({path:"initialize",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r}),query:{studies:{search:(...e)=>ge({mergeMap:pe,path:"query.studies.search",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r})},series:{search:(...e)=>ge({mergeMap:pe,path:"query.series.search",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r})},instances:{search:(...e)=>ge({mergeMap:pe,path:"query.instances.search",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r})}},retrieve:{bulkDataURI:(...e)=>ge({mergeMap:pe,path:"retrieve.bulkDataURI",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r}),directURL:(...e)=>Se({path:"retrieve.directURL",args:e,defaultDataSourceName:r,extensionManager:a}),series:{metadata:(...e)=>ge({mergeMap:pe,path:"retrieve.series.metadata",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r})}},store:{dicom:(...e)=>Se({path:"store.dicom",args:e,defaultDataSourceName:r,extensionManager:a})},deleteStudyMetadataPromise:(...e)=>fe({path:"deleteStudyMetadataPromise",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r}),getImageIdsForDisplaySet:(...e)=>ye({path:"getImageIdsForDisplaySet",args:e,defaultDataSourceName:r,extensionManager:a}),getImageIdsForInstance:(...e)=>ye({path:"getImageIdsForDisplaySet",args:e,defaultDataSourceName:r,extensionManager:a}),getStudyInstanceUIDs:(...e)=>fe({path:"getStudyInstanceUIDs",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r})};return o.pt.create(i)}const Ie=function(){return[{name:"dicomweb",type:"webApi",createDataSource:j},{name:"dicomwebproxy",type:"webApi",createDataSource:ce},{name:"dicomjson",type:"jsonApi",createDataSource:te},{name:"dicomlocal",type:"localApi",createDataSource:oe},{name:"merge",type:"mergeApi",createDataSource:he}]};var ve=a(86326),De=a(97598),be=a.n(De),we=a(2836),Ee=a(45981),xe=a(4194),Me=a(99993);function Ce(){return Ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},Ce.apply(null,arguments)}function Pe({servicesManager:e,buttonSection:t="primary"}){const{toolbarButtons:a,onInteraction:n}=(0,o.tR)({servicesManager:e,buttonSection:t});return a.length?ve.createElement(ve.Fragment,null,a?.map((t=>{if(!t)return null;const{id:a,Component:s,componentProps:r}=t,i=ve.createElement(s,Ce({key:a,id:a,onInteraction:n,servicesManager:e},r));return ve.createElement("div",{key:a},i)}))):null}const{formatPN:Ne,formatDate:Ue}=o.Wp;const Oe=function(e){const{displaySetService:t}=e.services,[a,n]=(0,ve.useState)({PatientName:"",PatientID:"",PatientSex:"",PatientDOB:""}),[s,r]=(0,ve.useState)(!1),i=({displaySetsAdded:e})=>{if(!e.length)return;const a=e[0],s=a?.instances?.[0]||a?.instance;s&&(n({PatientID:s.PatientID||null,PatientName:s.PatientName?Ne(s.PatientName):null,PatientSex:s.PatientSex||null,PatientDOB:Ue(s.PatientBirthDate)||null}),(e=>{const a=t.getActiveDisplaySets();let n=!1;a.forEach((t=>{const a=t?.instances?.[0]||t?.instance;a&&a.PatientID!==e&&(n=!0)})),r(n)})(s.PatientID||null))};return(0,ve.useEffect)((()=>{const e=t.subscribe(t.EVENTS.DISPLAY_SETS_ADDED,(e=>i(e)));return()=>e.unsubscribe()}),[]),{patientInfo:a,isMixedPatients:s}};let Re=function(e){return e.VISIBLE="visible",e.VISIBLE_COLLAPSED="visibleCollapsed",e.DISABLED="disabled",e.VISIBLE_READONLY="visibleReadOnly",e}({});const Te=(e,t)=>e?.length>t?e.substring(0,t)+"...":e;const Ae=function({servicesManager:e,appConfig:t}){const a=t.showPatientInfo===Re.VISIBLE||t.showPatientInfo===Re.VISIBLE_READONLY,[n,s]=(0,ve.useState)(a),{patientInfo:r,isMixedPatients:i}=Oe(e);(0,ve.useEffect)((()=>{i&&n&&s(!1)}),[i,n]);const o=Te(r.PatientName,27),c=Te(r.PatientID,15);return ve.createElement("div",{className:"hover:bg-primary-dark flex cursor-pointer items-center justify-center gap-1 rounded-lg",onClick:()=>{i||t.showPatientInfo===Re.VISIBLE_READONLY||s(!n)}},i?ve.createElement(we.FI1.MultiplePatients,{className:"text-primary"}):ve.createElement(we.FI1.Patient,{className:"text-primary"}),ve.createElement("div",{className:"flex flex-col justify-center"},n?ve.createElement(ve.Fragment,null,ve.createElement("div",{className:"self-start text-[13px] font-bold text-white"},o),ve.createElement("div",{className:"text-aqua-pale flex gap-2 text-[11px]"},ve.createElement("div",null,c),ve.createElement("div",null,r.PatientSex),ve.createElement("div",null,r.PatientDOB))):ve.createElement("div",{className:"text-primary self-center text-[13px]"},i?"Multiple Patients":"Patient")),ve.createElement(we.FI1.ArrowLeft,{className:"text-primary "+(n?"rotate-180":"")}))};var ke=a(50484);const Ve=function({appConfig:e}){const{servicesManager:t,extensionManager:a,commandsManager:n}=(0,o.Jg)(),{customizationService:s}=t.services,r=(0,xe.Zp)(),i=(0,xe.zy)(),{t:c}=(0,Me.Bd)(),{show:l}=(0,we.hSE)(),u=s.getCustomization("ohif.aboutModal"),d=s.getCustomization("ohif.userPreferencesModal"),m=[{title:c("Header:About"),icon:"info",onClick:()=>l({content:u,title:c("AboutModal:About OHIF Viewer"),containerClassName:"max-w-md"})},{title:c("Header:Preferences"),icon:"settings",onClick:()=>l({content:d,title:c("UserPreferencesModal:User preferences"),containerClassName:"flex max-w-4xl p-6 flex-col"})}];return e.oidc&&m.push({title:c("Header:Logout"),icon:"power-off",onClick:async()=>{r(`/logout?redirect_uri=${encodeURIComponent(window.location.href)}`)}}),ve.createElement(we.Y9Y,{menuOptions:m,isReturnEnabled:!!e.showStudyList,onClickReturnButton:()=>{const{pathname:e}=i,t=e.indexOf("/",1),n=e.substring(t+1),s=a.getDataSources(n),o=new URLSearchParams;-1!==t&&s&&o.append("datasources",e.substring(t+1)),(0,ke.Nn)(o),r({pathname:"/",search:decodeURIComponent(o.toString())})},WhiteLabeling:e.whiteLabeling,Secondary:ve.createElement(Pe,{servicesManager:t,buttonSection:"secondary"}),PatientInfo:e.showPatientInfo!==Re.DISABLED&&ve.createElement(Ae,{servicesManager:t,appConfig:e}),UndoRedo:ve.createElement("div",{className:"text-primary flex cursor-pointer items-center"},ve.createElement(we.$nd,{variant:"ghost",className:"hover:bg-primary-dark",onClick:()=>{n.run("undo")}},ve.createElement(we.FI1.Undo,{className:""})),ve.createElement(we.$nd,{variant:"ghost",className:"hover:bg-primary-dark",onClick:()=>{n.run("redo")}},ve.createElement(we.FI1.Redo,{className:""})))},ve.createElement("div",{className:"relative flex justify-center gap-[4px]"},ve.createElement(Pe,{servicesManager:t})))};function Le(){return Le=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},Le.apply(null,arguments)}const Fe=({servicesManager:e,side:t,activeTabIndex:a,isExpanded:n,tabs:s,onOpen:r,onClose:i,...o})=>{const c=e?.services?.panelService,[l,u]=(0,ve.useState)(n),[d,m]=(0,ve.useState)(a??0),[p,g]=(0,ve.useState)(!1),[f,S]=(0,ve.useState)(s??c.getPanels(t)),y=(0,ve.useCallback)((({activeTabIndex:e})=>{m(e)}),[]),h=(0,ve.useCallback)((()=>{u(!0),r?.()}),[r]),I=(0,ve.useCallback)((()=>{u(!1),g(!0),i?.()}),[i]);return(0,ve.useEffect)((()=>{u(n)}),[n]),(0,ve.useEffect)((()=>{m(a??0)}),[a]),(0,ve.useEffect)((()=>{const{unsubscribe:e}=c.subscribe(c.EVENTS.PANELS_CHANGED,(e=>{e.position===t&&S(c.getPanels(t))}));return()=>{e()}}),[c,t]),(0,ve.useEffect)((()=>{const e=c.subscribe(c.EVENTS.ACTIVATE_PANEL,(e=>{if(l||e.forceActive){const t=f.findIndex((t=>t.id===e.panelId));-1!==t&&(p||u(!0),m(t))}}));return()=>{e.unsubscribe()}}),[f,l,c,p]),ve.createElement(we.wv,Le({},o,{side:t,tabs:f,activeTabIndex:d,isExpanded:l,onOpen:h,onClose:I,onActiveTabIndexChange:y}))};var Be=a(17825);const $e={groupId:"viewerLayoutResizablePanelGroup",shared:{expandedInsideBorderSize:0,collapsedInsideBorderSize:4,collapsedOutsideBorderSize:4,collapsedWidth:25},left:{panelId:"viewerLayoutResizableLeftPanel",initialExpandedWidth:292,minimumExpandedOffsetWidth:145,initialExpandedOffsetWidth:292,collapsedOffsetWidth:33},right:{panelId:"viewerLayoutResizableRightPanel",initialExpandedWidth:280,minimumExpandedOffsetWidth:280,initialExpandedOffsetWidth:280,collapsedOffsetWidth:33}},He=(e,t)=>{e&&(e.style.minWidth=void 0===t?"":`${t}px`,e.style.maxWidth=e.style.minWidth)},ze=(e,t,a,n,s,r)=>{const[i,o]=(0,ve.useState)($e.left.initialExpandedWidth),[c,l]=(0,ve.useState)($e.right.initialExpandedWidth),[u,d]=(0,ve.useState)(0),[m,p]=(0,ve.useState)(0),[g,f]=(0,ve.useState)(0),[S,y]=(0,ve.useState)(0),h=(0,ve.useRef)(null),I=(0,ve.useRef)(null),v=(0,ve.useRef)(null),D=(0,ve.useRef)(null),b=(0,ve.useRef)(null),w=(0,ve.useRef)(!1),E=(0,ve.useRef)(null);(0,ve.useLayoutEffect)((()=>{const t=(0,Be.Gx)($e.groupId);h.current=t;const n=(0,Be.PV)($e.left.panelId);I.current=n;const s=(0,Be.PV)($e.right.panelId);v.current=s;const r=document.querySelectorAll("[data-panel-resize-handle-id]");if(E.current=0,r.forEach((e=>{E.current+=e.offsetWidth})),!e){const e=R($e.left.initialExpandedOffsetWidth);D?.current?.expand(e),He(n,$e.left.initialExpandedOffsetWidth)}if(!a){const e=R($e.right.initialExpandedOffsetWidth);b?.current?.expand(e),He(s,$e.right.initialExpandedOffsetWidth)}}),[]),(0,ve.useLayoutEffect)((()=>{if(!D.current?.isCollapsed()){const e=R(i+$e.shared.expandedInsideBorderSize);D.current?.resize(e)}if(!b?.current?.isCollapsed()){const e=R(c+$e.shared.expandedInsideBorderSize);b?.current?.resize(e)}const e=new ResizeObserver((()=>{const e=R($e.left.minimumExpandedOffsetWidth),t=R($e.right.minimumExpandedOffsetWidth);d(e),p(t),f(R($e.left.collapsedOffsetWidth)),y(R($e.right.collapsedOffsetWidth))}));return e.observe(h.current),()=>{e.disconnect()}}),[i,c,u,m,s,r]);const x=(0,ve.useCallback)((e=>{e?(w.current=!0,He(I.current),He(v.current)):(w.current=!1,D?.current?.isExpanded()&&He(I.current,i+$e.shared.expandedInsideBorderSize),b?.current?.isExpanded()&&He(v.current,c+$e.shared.expandedInsideBorderSize))}),[i,c]),M=(0,ve.useCallback)((()=>{t(!0),He(I.current),D?.current?.collapse()}),[t]),C=(0,ve.useCallback)((()=>{D?.current?.expand(R($e.left.initialExpandedOffsetWidth)),t(!1)}),[t]),P=(0,ve.useCallback)((e=>{if(!h?.current||D.current?.isCollapsed())return;const t=T(e);o(t),w.current||He(I.current,t)}),[]),N=(0,ve.useCallback)((()=>{n(!0),He(v.current),b?.current?.collapse()}),[n]),U=(0,ve.useCallback)((()=>{b?.current?.expand(R($e.right.initialExpandedOffsetWidth)),n(!1)}),[n]),O=(0,ve.useCallback)((e=>{if(!h?.current||b?.current?.isCollapsed())return;const t=T(e);l(t),w.current||He(v.current,t)}),[]),R=e=>{const{width:t}=h.current?.getBoundingClientRect();return e/(t-E.current)*100},T=e=>{const{width:t}=h.current?.getBoundingClientRect();return e/100*(t-E.current)-$e.shared.expandedInsideBorderSize};return[{expandedWidth:i,collapsedWidth:$e.shared.collapsedWidth,collapsedInsideBorderSize:$e.shared.collapsedInsideBorderSize,collapsedOutsideBorderSize:$e.shared.collapsedOutsideBorderSize,expandedInsideBorderSize:$e.shared.expandedInsideBorderSize,onClose:M,onOpen:C},{expandedWidth:c,collapsedWidth:$e.shared.collapsedWidth,collapsedInsideBorderSize:$e.shared.collapsedInsideBorderSize,collapsedOutsideBorderSize:$e.shared.collapsedOutsideBorderSize,expandedInsideBorderSize:$e.shared.expandedInsideBorderSize,onClose:N,onOpen:U},{direction:"horizontal",id:$e.groupId},{defaultSize:u,minSize:u,onResize:P,collapsible:!0,collapsedSize:g,onCollapse:()=>t(!0),onExpand:()=>t(!1),ref:D,order:0,id:$e.left.panelId},{order:1,id:"viewerLayoutResizableViewportGridPanel"},{defaultSize:m,minSize:m,onResize:O,collapsible:!0,collapsedSize:S,onCollapse:()=>n(!0),onExpand:()=>n(!1),ref:b,order:2,id:$e.right.panelId},x]};function _e(){return _e=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},_e.apply(null,arguments)}const qe="mt-[1px] bg-black";function We({extensionManager:e,servicesManager:t,hotkeysManager:a,commandsManager:n,viewports:s,ViewportGridComp:r,leftPanelClosed:i=!1,rightPanelClosed:c=!1,leftPanelResizable:l=!1,rightPanelResizable:u=!1}){const[d]=(0,Ee.r)(),{panelService:m,hangingProtocolService:p,customizationService:g}=t.services,[f,S]=(0,ve.useState)(d.showLoadingIndicator),y=(0,ve.useCallback)((e=>!!m.getPanels(e).length),[m]),[h,I]=(0,ve.useState)(y("right")),[v,D]=(0,ve.useState)(y("left")),[b,w]=(0,ve.useState)(i),[E,x]=(0,ve.useState)(c),[M,C,P,N,U,O,R]=ze(i,w,c,x,v,h),T=g.getCustomization("ui.loadingIndicatorProgress");(0,ve.useEffect)((()=>(document.body.classList.add("bg-black"),document.body.classList.add("overflow-hidden"),()=>{document.body.classList.remove("bg-black"),document.body.classList.remove("overflow-hidden")})),[]);(0,ve.useEffect)((()=>{const{unsubscribe:e}=p.subscribe(o.Qe.EVENTS.PROTOCOL_CHANGED,(()=>{S(!1)}));return()=>{e()}}),[p]);(0,ve.useEffect)((()=>{const{unsubscribe:e}=m.subscribe(m.EVENTS.PANELS_CHANGED,(({options:e})=>{D(y("left")),I(y("right")),void 0!==e?.leftPanelClosed&&w(e.leftPanelClosed),void 0!==e?.rightPanelClosed&&x(e.rightPanelClosed)}));return()=>{e()}}),[m,y]);const A=s.map((t=>{const{entry:a}=(t=>{const a=e.getModuleEntry(t);if(!a||!a.component)throw new Error(`${t} is not valid for an extension module or no component found from extension ${t}. Please verify your configuration or ensure that the extension is properly registered. It's also possible that your mode is utilizing a module from an extension that hasn't been included in its dependencies (add the extension to the "extensionDependencies" array in your mode's index.js file). Check the reference string to the extension in your Mode configuration`);return{entry:a}})(t.namespace);return{component:a.component,isReferenceViewable:a.isReferenceViewable,displaySetsToDisplay:t.displaySetsToDisplay}}));return ve.createElement("div",null,ve.createElement(Ve,{hotkeysManager:a,extensionManager:e,servicesManager:t,appConfig:d}),ve.createElement("div",{className:"relative flex w-full flex-row flex-nowrap items-stretch overflow-hidden bg-black",style:{height:"calc(100vh - 52px"}},ve.createElement(ve.Fragment,null,f&&ve.createElement(T,{className:"h-full w-full bg-black"}),ve.createElement(we.HKS,P,v?ve.createElement(ve.Fragment,null,ve.createElement(we.wVo,N,ve.createElement(Fe,_e({side:"left",isExpanded:!b,servicesManager:t},M))),ve.createElement(we.WM_,{onDragging:R,disabled:!l,className:qe})):null,ve.createElement(we.wVo,U,ve.createElement("div",{className:"flex h-full flex-1 flex-col"},ve.createElement("div",{className:"relative flex h-full flex-1 items-center justify-center overflow-hidden bg-black",onMouseEnter:()=>{document.activeElement?.blur()}},ve.createElement(r,{servicesManager:t,viewportComponents:A,commandsManager:n})))),h?ve.createElement(ve.Fragment,null,ve.createElement(we.WM_,{onDragging:R,disabled:!u,className:qe}),ve.createElement(we.wVo,O,ve.createElement(Fe,_e({side:"right",isExpanded:!E,servicesManager:t},C)))):null))),ve.createElement(we.M7w,{tours:g.getCustomization("ohif.tours")}),ve.createElement(we.jaF,{dialogConfiguration:d?.investigationalUseDialog}))}We.propTypes={extensionManager:be().shape({getModuleEntry:be().func.isRequired}).isRequired,commandsManager:be().instanceOf(o.Sp),servicesManager:be().object.isRequired,leftPanels:be().array,rightPanels:be().array,leftPanelClosed:be().bool.isRequired,rightPanelClosed:be().bool.isRequired,children:be().oneOfType([be().node,be().func]).isRequired,viewports:be().array};const je=We;var Ge=a(40565);const Ye=function(e,t){return new Promise(((a,n)=>{const s=document.createElement("canvas");e.utilities.loadImageToCanvas({canvas:s,imageId:t,thumbnail:!0}).then((e=>{a(s.toDataURL())})).catch(n)}))};const Je=async function(e,t){if(!t?.length)return[];const a=t[0].mrn;return a?e.query.studies.search({patientId:a,disableWildcard:!0}):t};const Xe=function(e,t,a,n){if(!t.activeDisplaySets.some((e=>e.StudyInstanceUID===a)))return e.retrieve.series.metadata({StudyInstanceUID:a,madeInClient:n})};const Ke=function(){const{extensionManager:e}=(0,o.Jg)(),[t]=e.getActiveDataSource(),a=Je.bind(null,t),n=(0,ve.useCallback)(function(e){const t=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common");try{const{cornerstone:e}=t.exports.getCornerstoneLibraries();return Ye.bind(null,e)}catch(e){throw new Error("Required command not found")}}(e),[]),s=Xe.bind(null,t);return ve.createElement(Ge.A,{dataSource:t,getImageSrc:n,getStudiesForPatientByMRN:a,requestDisplaySetCreationForStudy:s})};var Qe=a(96357);function Ze({title:e="Create Report",extensionManager:t,servicesManager:a}){const{uiDialogService:n,customizationService:s}=a.services,r=t.getDataSourcesForUI(),i=s.getCustomization("ohif.createReportDialog"),o=window.config.allowMultiSelectExport;return new Promise((function(t,a){n.show({id:"report-dialog",title:e,content:i,contentProps:{dataSources:o?r:void 0,onSave:async({reportName:e,dataSource:a,series:n})=>{t({value:e,dataSourceName:a,series:n,action:Qe.A.CREATE_REPORT})},onCancel:()=>{t({action:Qe.A.CANCEL,value:void 0,series:void 0,dataSourceName:void 0})},defaultValue:e}})}))}var et=a(40680);function tt(){return tt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},tt.apply(null,arguments)}const at=function({commandsManager:e,extensionManager:t,servicesManager:a}){return[{name:"seriesList",iconName:"tab-studies",iconLabel:"Studies",label:et.A.t("SidePanel:Studies"),component:n=>ve.createElement(Ke,tt({},n,{commandsManager:e,extensionManager:t,servicesManager:a}))}]},nt=JSON.parse('{"UU":"@ohif/extension-default"}').UU;var st=a(44563),rt=a(67803);var it=a(37827);var ot=a(3823);function ct(e,t,a,n){const s=ot.eR.scaleAndAdd(ot.eR.create(),e,a,n);return ot.eR.distance(t,s)>n}function lt(e){if(!e?.length)return!1;const t=(0,it.A)(e[0].ImageOrientationPatient);if(!t)return!1;const a=function(e){const t=ot.eR.fromValues(e[0],e[1],e[2]),a=ot.eR.fromValues(e[3],e[4],e[5]);return ot.eR.cross(ot.eR.create(),t,a)}(t),n=(0,it.A)(e[0].ImagePositionPatient),s=(0,it.A)(e[e.length-1].ImagePositionPatient);if(!n||!s)return!1;const r=(0,rt.jj)(n,s)/(e.length-1);let i=n;for(let t=1;t<e.length;t++){const n=e[t],s=(0,it.A)(n.ImagePositionPatient);if(ct(i,s,a,r))return!1;i=s}return!0}function ut(e,t){e.length>2&&(function(e){if(!e?.length)return!1;const t=e[0],a=(0,it.A)(t.Rows),n=(0,it.A)(t.Columns);for(let t=1;t<e.length;t++){const s=e[t],{Rows:r,Columns:i}=s;if((0,it.A)(r)!==a||(0,it.A)(i)!==n)return!1}return!0}(e)||t.addMessage(o.Ob.CODES.INCONSISTENT_DIMENSIONS),function(e){if(!e?.length)return!1;const t=e[0],a=(0,it.A)(t.SamplesPerPixel);for(let t=1;t<e.length;t++){const n=e[t],{SamplesPerPixel:s}=n;if(s!==a)return!1}return!0}(e)||t.addMessage(o.Ob.CODES.INCONSISTENT_COMPONENTS),function(e){if(!e?.length)return!1;const t=e[0],a=(0,it.A)(t.ImageOrientationPatient);for(let t=1;t<e.length;t++){const n=e[t],s=(0,it.A)(n.ImageOrientationPatient);if(!(0,rt.sW)(s,a))return!1}return!0}(e)||t.addMessage(o.Ob.CODES.INCONSISTENT_ORIENTATIONS),lt(e)||t.addMessage(o.Ob.CODES.INCONSISTENT_POSITION_INFORMATION),function(e,t){if(!e?.length)return;const a=(0,it.A)(e[0].ImagePositionPatient);if(!a)return;const n=(0,it.A)(e[e.length-1].ImagePositionPatient),s=(0,rt.jj)(a,n)/(e.length-1);let r=a;const i=[];for(let a=1;a<e.length;a++){const n=e[a],c=(0,it.A)(n.ImagePositionPatient),l=(0,rt.jj)(c,r),u=(0,rt.Op)(l,s);if(u){const e=u.issue;if(i.includes(e)||(i.push(e),e===rt.JG.MISSING_FRAMES?t.addMessage(o.Ob.CODES.MISSING_FRAMES):e===rt.JG.IRREGULAR_SPACING&&t.addMessage(o.Ob.CODES.IRREGULAR_SPACING)),i.length>1)break}r=c}}(e,t))}function dt(e,t,a){const n=new o.WZ;if(a)return n;if(!e.length)return void n.addMessage(o.Ob.CODES.NO_VALID_INSTANCES);const s=e[0],{Modality:r,ImageType:i,NumberOfFrames:c}=s;if(i?.includes("LOCALIZER"))return n;if(!rt.Hf.includes(r))return n;const l=c>1;l||e.every((e=>e.ImagePositionPatient))||n.addMessage(o.Ob.CODES.NO_POSITION_INFORMATION);const u=(0,st.A)(e);return l?function(e,t){(0,rt.Yt)(e)||t.addMessage(o.Ob.CODES.MULTIFRAME_NO_PIXEL_MEASUREMENTS),(0,rt.VX)(e)||t.addMessage(o.Ob.CODES.MULTIFRAME_NO_ORIENTATION),(0,rt.sL)(e)||t.addMessage(o.Ob.CODES.MULTIFRAME_NO_POSITION_INFORMATION)}(u[0],n):ut(u,n),t||n.addMessage(o.Ob.CODES.NOT_RECONSTRUCTABLE),n}var mt=a(14169);function pt(e){const t=new mt.A(e),a=new o.WZ;a.addMessage(o.Ob.CODES.UNSUPPORTED_DISPLAYSET);const n=e[0];return t.setAttributes({displaySetInstanceUID:t.uid,SeriesDate:n.SeriesDate,SeriesTime:n.SeriesTime,SeriesInstanceUID:n.SeriesInstanceUID,StudyInstanceUID:n.StudyInstanceUID,SeriesNumber:n.SeriesNumber||0,FrameRate:n.FrameTime,SOPClassUID:n.SOPClassUID,SeriesDescription:n.SeriesDescription||"",Modality:n.Modality,numImageFrames:e.length,unsupported:!0,SOPClassHandlerId:"unsupported",isReconstructable:!1,messages:a}),[t]}const gt="chart",ft=(e,t)=>{const{StudyInstanceUID:a,SeriesInstanceUID:n,SOPInstanceUID:s,SeriesDescription:r,SeriesNumber:i,SeriesDate:c,SOPClassUID:l}=e;return{Modality:"CHT",loading:!1,isReconstructable:!1,displaySetInstanceUID:o.Wp.guid(),SeriesDescription:r,SeriesNumber:i,SeriesDate:c,SOPInstanceUID:s,SeriesInstanceUID:n,StudyInstanceUID:a,SOPClassHandlerId:`${nt}.sopClassHandlerModule.${gt}`,SOPClassUID:l,isDerivedDisplaySet:!0,isLoaded:!0,sopClassUids:t,instance:e,instances:[e],addInstances:function(e,t){return this.instances.push(...e),this.instance=this.instances[this.instances.length-1],this}}};function St(e){if(!e||!e.length)throw new Error("No instances were provided");const t=function(e){const t=new Set;return e.forEach((e=>{t.add(e.SOPClassUID)})),Array.from(t)}(e);return e.map((e=>{if("CHT"===e.Modality)return ft(e,t);throw new Error("Unsupported modality")}))}const yt={name:gt,sopClassUids:["1.9.451.13215.7.3.2.7.6.1"],getDisplaySetsFromSeries:e=>St(e)},{isImage:ht,sopClassDictionary:It,isDisplaySetReconstructable:vt}=o.Wp,{ImageSet:Dt}=o.Ly,bt="stack";let wt={};const Et=e=>e.NumberOfFrames>1;function xt(e){const t=(e=>{const{extensionManager:t}=wt;if(!t)throw new Error("extensionManager is not available");const a=e.map((({imageId:e})=>e)),n=t.getModuleEntry("@ohif/extension-cornerstone.utilityModule.volumeLoader"),{getDynamicVolumeInfo:s}=n.exports;return s(a)})(e),{isDynamicVolume:a,timePoints:n}=t;let s;const{appConfig:r}=wt;if(a){const t=n[0],a=new Map;e.forEach((e=>a.set(e.imageId,e)));const i=t.map((e=>a.get(e)));s=vt(i,r)}else s=vt(e,r);return{isDynamicVolume:a,...s,dynamicVolumeInfo:t}}const Mt=e=>{const t=e[0],a=new Dt(e),{isDynamicVolume:n,value:s,averageSpacingBetweenFrames:r,dynamicVolumeInfo:i}=xt(e),o=n?"cornerstoneStreamingDynamicImageVolume":"cornerstoneStreamingImageVolume",c=dt(e,s,n);a.setAttributes({volumeLoaderSchema:o,displaySetInstanceUID:a.uid,SeriesDate:t.SeriesDate,SeriesTime:t.SeriesTime,SeriesInstanceUID:t.SeriesInstanceUID,StudyInstanceUID:t.StudyInstanceUID,SeriesNumber:t.SeriesNumber||0,FrameRate:t.FrameTime,SOPClassUID:t.SOPClassUID,SeriesDescription:t.SeriesDescription||"",Modality:t.Modality,isMultiFrame:Et(t),countIcon:s?"icon-mpr":void 0,numImageFrames:e.length,SOPClassHandlerId:`${nt}.sopClassHandlerModule.${bt}`,isReconstructable:s,messages:c,averageSpacingBetweenFrames:r||null,isDynamicVolume:n,dynamicVolumeInfo:i});return a.sortBy(((e,t)=>(parseInt(e.InstanceNumber)||0)-(parseInt(t.InstanceNumber)||0))),a},Ct=e=>"CR"===e||"MG"===e||"DX"===e;function Pt(e){if(!e||!e.length)throw new Error("No instances were provided");const t=[],a=function(e){const t=new Set;return e.forEach((e=>{t.add(e.SOPClassUID)})),Array.from(t)}(e),n=[];if(e.forEach((e=>{if(!ht(e.SOPClassUID)&&!e.Rows)return;let s;Et(e)?(s=Mt([e]),s.setAttributes({sopClassUids:a,numImageFrames:e.NumberOfFrames,instanceNumber:e.InstanceNumber,acquisitionDatetime:e.AcquisitionDateTime}),t.push(s)):Ct(e.Modality)?(s=Mt([e]),s.setAttributes({sopClassUids:a,instanceNumber:e.InstanceNumber,acquisitionDatetime:e.AcquisitionDateTime}),t.push(s)):n.push(e)})),n.length){const s=Mt(n);s.setAttribute("studyInstanceUid",e[0].StudyInstanceUID),s.setAttributes({sopClassUids:a}),t.push(s)}return t}const Nt=[It.ComputedRadiographyImageStorage,It.DigitalXRayImageStorageForPresentation,It.DigitalXRayImageStorageForProcessing,It.DigitalMammographyXRayImageStorageForPresentation,It.DigitalMammographyXRayImageStorageForProcessing,It.DigitalIntraOralXRayImageStorageForPresentation,It.DigitalIntraOralXRayImageStorageForProcessing,It.CTImageStorage,It.EnhancedCTImageStorage,It.LegacyConvertedEnhancedCTImageStorage,It.UltrasoundMultiframeImageStorage,It.MRImageStorage,It.EnhancedMRImageStorage,It.EnhancedMRColorImageStorage,It.LegacyConvertedEnhancedMRImageStorage,It.UltrasoundImageStorage,It.UltrasoundImageStorageRET,It.SecondaryCaptureImageStorage,It.MultiframeSingleBitSecondaryCaptureImageStorage,It.MultiframeGrayscaleByteSecondaryCaptureImageStorage,It.MultiframeGrayscaleWordSecondaryCaptureImageStorage,It.MultiframeTrueColorSecondaryCaptureImageStorage,It.XRayAngiographicImageStorage,It.EnhancedXAImageStorage,It.XRayRadiofluoroscopicImageStorage,It.EnhancedXRFImageStorage,It.XRay3DAngiographicImageStorage,It.XRay3DCraniofacialImageStorage,It.BreastTomosynthesisImageStorage,It.BreastProjectionXRayImageStorageForPresentation,It.BreastProjectionXRayImageStorageForProcessing,It.IntravascularOpticalCoherenceTomographyImageStorageForPresentation,It.IntravascularOpticalCoherenceTomographyImageStorageForProcessing,It.NuclearMedicineImageStorage,It.VLEndoscopicImageStorage,It.VideoEndoscopicImageStorage,It.VLMicroscopicImageStorage,It.VideoMicroscopicImageStorage,It.VLSlideCoordinatesMicroscopicImageStorage,It.VLPhotographicImageStorage,It.VideoPhotographicImageStorage,It.OphthalmicPhotography8BitImageStorage,It.OphthalmicPhotography16BitImageStorage,It.OphthalmicTomographyImageStorage,It.PositronEmissionTomographyImageStorage,It.EnhancedPETImageStorage,It.LegacyConvertedEnhancedPETImageStorage,It.RTImageStorage,It.EnhancedUSVolumeStorage];const Ut=function(e){return wt=e,[{name:bt,sopClassUids:Nt,getDisplaySetsFromSeries:Pt},{name:"not-supported-display-sets-handler",sopClassUids:[],getDisplaySetsFromSeries:pt},{name:yt.name,sopClassUids:yt.sopClassUids,getDisplaySetsFromSeries:yt.getDisplaySetsFromSeries}]};var Ot=a(820),Rt=a(63042),Tt=a(67671),At=a(14260),kt=a(55758),Vt=a(62886);const Lt=(0,ve.createContext)(void 0),Ft=()=>{const e=(0,ve.useContext)(Lt);if(void 0===e)throw new Error("useLayoutSelector must be used within a LayoutSelector component");return e},Bt=({onSelectionChange:e,onSelection:t=(e=>{}),onSelectionPreset:a=(e=>{}),children:n,open:s,onOpenChange:r,tooltipDisabled:i})=>{const[o,c]=(0,ve.useState)(!1),l=void 0!==s,u=l?s:o,d=l?r:c,m=(0,ve.useCallback)((a=>{t(a),e&&e(a,!1),d(!1)}),[t,e,d]),p=(0,ve.useCallback)((t=>{a(t),e&&e(t,!0),d(!1)}),[a,e,d]);return ve.createElement(Lt.Provider,{value:{isOpen:u,setIsOpen:d,onSelection:m,onSelectionPreset:p}},ve.createElement(Rt.AM,{open:u,onOpenChange:d},n))};Bt.Trigger=({children:e,className:t,tooltip:a="Change layout",disabled:n=!1,disabledText:s})=>{const{isOpen:r}=Ft(),i=a||n&&s,o=ve.createElement(At.$,{className:(0,kt.cn)("inline-flex h-10 w-10 items-center justify-center !rounded-lg",n?"text-common-bright hover:bg-primary-dark hover:text-primary-light cursor-not-allowed opacity-40":r?"bg-background text-foreground/80":"text-foreground/80 hover:bg-background hover:text-highlight bg-transparent",t),variant:"ghost",size:"icon","aria-label":a,disabled:n},ve.createElement(Vt.F.ByName,{name:"tool-layout",className:"h-7 w-7"}));return e?ve.createElement(Rt.Wv,{asChild:!0,className:t},e):!r&&i?ve.createElement(Tt.m_,null,ve.createElement(Tt.k$,{asChild:!0},ve.createElement(Rt.Wv,{asChild:!0},ve.createElement("span",{"data-cy":"layout-button"},o))),ve.createElement(Tt.ZI,{side:"bottom"},a&&ve.createElement("div",null,a),n&&s&&ve.createElement("div",{className:"text-muted-foreground"},s))):ve.createElement(Rt.Wv,{asChild:!0},ve.createElement("span",{"data-cy":"layout-button"},o))},Bt.Content=({children:e,className:t,align:a="center",sideOffset:n=8})=>ve.createElement(Rt.hl,{align:a,sideOffset:n,className:(0,kt.cn)("w-auto rounded-lg border-none p-0 shadow-lg",t)},ve.createElement("div",{className:"flex"},e)),Bt.PresetSection=({children:e,title:t,className:a})=>ve.createElement("div",{className:(0,kt.cn)("flex flex-col gap-2",a)},ve.createElement("div",{className:"text-muted-foreground text-xs"},t),ve.Children.count(e)>0&&ve.createElement("div",{className:(0,kt.cn)("common"===t.toLowerCase()?"flex gap-2":"flex flex-col gap-0")},e)),Bt.Preset=({title:e,icon:t,commandOptions:a,disabled:n=!1,className:s,isPreset:r=!1,iconSize:i})=>{const{onSelection:o,onSelectionPreset:c}=Ft();return ve.createElement("div",{className:(0,kt.cn)("group cursor-pointer rounded transition","hover:bg-accent flex items-center gap-2 p-1.5",n&&"pointer-events-none opacity-50",s),onClick:()=>{n||(r?c(a):o(a))},"data-cy":e},ve.createElement("div",{className:"flex-shrink-0"},ve.createElement(Vt.F.ByName,{name:t,className:(0,kt.cn)("group-hover:text-primary",i)})),e&&ve.createElement("div",{className:"text-foreground text-base"},e))},Bt.GridSelector=({rows:e=3,columns:t=4,className:a})=>{const[n,s]=(0,ve.useState)(void 0),{onSelection:r}=Ft(),i=void 0!==n?n%t:-1,o=void 0!==n?Math.floor(n/t):-1,c=e=>{if(void 0===n)return!1;const a=e%t,s=Math.floor(e/t);return a<=i&&s<=o};return ve.createElement("div",{className:(0,kt.cn)(a),style:{display:"grid",gridTemplateColumns:`repeat(${t}, 20px)`,gridTemplateRows:`repeat(${e}, 20px)`,gap:"2px"}},Array.from(Array(e*t).keys()).map((e=>ve.createElement("div",{key:e,className:(0,kt.cn)("cursor-pointer",c(e)?"bg-primary-active":"bg-[#04225b]"),"data-cy":`Layout-${e%t}-${Math.floor(e/t)}`,onClick:()=>(e=>{const a=e%t,n=Math.floor(e/t);r({numRows:n+1,numCols:a+1})})(e),onMouseEnter:()=>s(e),onMouseLeave:()=>s(void 0)}))))},Bt.Divider=({className:e})=>ve.createElement("div",{className:(0,kt.cn)("h-px bg-black",e)}),Bt.HelpText=({children:e,className:t})=>ve.createElement("p",{className:(0,kt.cn)("text-muted-foreground text-xs leading-tight",t)},e),Bt.propTypes={onSelectionChange:De.func,onSelection:De.func,onSelectionPreset:De.func,children:De.node.isRequired,open:De.bool,onOpenChange:De.func,tooltipDisabled:De.bool};function $t(){return $t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},$t.apply(null,arguments)}function Ht({commandsManager:e,servicesManager:t,rows:a=3,columns:n=4,...s}){const{customizationService:r}=t.services,i=r?.getCustomization("layoutSelector.commonPresets")||[{icon:"layout-single",commandOptions:{numRows:1,numCols:1}},{icon:"layout-side-by-side",commandOptions:{numRows:1,numCols:2}},{icon:"layout-four-up",commandOptions:{numRows:2,numCols:2}},{icon:"layout-three-row",commandOptions:{numRows:3,numCols:1}}],o=r?.getCustomization("layoutSelector.advancedPresetGenerator"),c=o?o({servicesManager:t}):[{title:"MPR",icon:"layout-three-col",commandOptions:{protocolId:"mpr"}},{title:"3D four up",icon:"layout-four-up",commandOptions:{protocolId:"3d-four-up"}},{title:"3D main",icon:"layout-three-row",commandOptions:{protocolId:"3d-main"}},{title:"Axial Primary",icon:"layout-side-by-side",commandOptions:{protocolId:"axial-primary"}},{title:"3D only",icon:"layout-single",commandOptions:{protocolId:"3d-only"}},{title:"3D primary",icon:"layout-side-by-side",commandOptions:{protocolId:"3d-primary"}},{title:"Frame View",icon:"icon-stack",commandOptions:{protocolId:"frame-view"}}],l=(0,ve.useCallback)(((t,a)=>{a?e.run({commandName:"setHangingProtocol",commandOptions:t}):e.run({commandName:"setViewportGridLayout",commandOptions:t})}),[e]);return ve.createElement("div",{id:"Layout","data-cy":"Layout"},ve.createElement(Bt,$t({onSelectionChange:l},s),ve.createElement(Bt.Trigger,{tooltip:"Change layout"}),ve.createElement(Bt.Content,null,(i.length>0||c.length>0)&&ve.createElement("div",{className:"bg-popover flex flex-col gap-2.5 rounded-lg p-2"},i.length>0&&ve.createElement(ve.Fragment,null,ve.createElement(Bt.PresetSection,{title:"Common"},i.map(((e,t)=>ve.createElement(Bt.Preset,{key:`common-preset-${t}`,icon:e.icon,commandOptions:e.commandOptions,isPreset:!1})))),ve.createElement(Bt.Divider,null)),c.length>0&&ve.createElement(Bt.PresetSection,{title:"Advanced"},c.map(((e,t)=>ve.createElement(Bt.Preset,{key:`advanced-preset-${t}`,title:e.title,icon:e.icon,commandOptions:e.commandOptions,disabled:e.disabled,isPreset:!0}))))),ve.createElement("div",{className:"bg-muted flex flex-col gap-2.5 border-l-2 border-solid border-black p-2"},ve.createElement("div",{className:"text-muted-foreground text-xs"},"Custom"),ve.createElement(Bt.GridSelector,{rows:a,columns:n}),ve.createElement(Bt.HelpText,null,"Hover to select ",ve.createElement("br",null),"rows and columns ",ve.createElement("br",null)," Click to apply")))))}Ht.propTypes={commandsManager:be().instanceOf(o.Sp),servicesManager:be().object,rows:be().number,columns:be().number};const zt=Ht;function _t(){return ve.createElement("span",{className:"border-common-dark mx-2 h-8 w-4 self-center border-l"})}function qt(){return qt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},qt.apply(null,arguments)}function Wt({groupId:e,primary:t,secondary:a,items:n,renderer:s,onInteraction:r,servicesManager:i}){const{toolbarService:o}=i?.services,c=(0,ve.useCallback)((t=>t.map(((t,a)=>({...t,index:a,onClick:()=>{r({groupId:e,itemId:t.id,item:t})}})))),[e,r]),l=o?.getButtonComponentForUIType(t.uiType)??Ot.IB,u=s;return ve.createElement(Ot.fk,{primary:t,secondary:a,items:c(n),groupId:e,renderer:u,onInteraction:r,Component:e=>ve.createElement(l,qt({},e,{servicesManager:i}))})}Wt.propTypes={groupId:be().string,primary:be().shape({id:be().string.isRequired,uiType:be().string}),secondary:be().shape({id:be().string,icon:be().string.isRequired,label:be().string,tooltip:be().string.isRequired,disabled:be().bool,className:be().string}),items:be().arrayOf(be().shape({id:be().string.isRequired,icon:be().string,label:be().string,tooltip:be().string,disabled:be().bool,className:be().string})),renderer:be().func,onInteraction:be().func.isRequired,servicesManager:be().shape({services:be().shape({toolbarService:be().object})})};const jt=Wt;const Gt=function({groupId:e,items:t,onInteraction:a,size:n}){const s=(0,ve.useCallback)((t=>t.map(((t,s)=>ve.createElement(Ot.IB,{key:t.id,icon:t.icon,label:t.label,disabled:t.disabled,className:t.className,disabledText:t.disabledText,id:t.id,size:n,onClick:()=>{a({groupId:e,itemId:t.id,commands:t.commands,item:t})},toolTipClassName:""})))),[a,e]);return ve.createElement(Ot.e2,null,s(t))},Yt=(e=[])=>e.map((e=>({label:e.name,value:e.id,info:e.info,activated:!1,completed:!1})));function Jt({servicesManager:e}){const{workflowStepsService:t}=e.services,[a,n]=(0,ve.useState)(t.activeWorkflowStep?.id),[s,r]=(0,ve.useState)(Yt(t.workflowSteps)),i=(0,ve.useCallback)((e=>{e.completed||r((t=>{const a=[...t];for(let t=a.findIndex((t=>t.value===e.value));t>=0;t--){const e=a[t];if(e.completed)break;a[t]={...e,completed:!0}}return a}))}),[]),o=(0,ve.useCallback)((({selectedOption:e})=>{e&&(i(e),n(e.value))}),[i]);return(0,ve.useEffect)((()=>(a&&t.setActiveWorkflowStep(a),()=>clearTimeout(undefined))),[a,t]),(0,ve.useEffect)((()=>{const{unsubscribe:e}=t.subscribe(t.EVENTS.STEPS_CHANGED,(()=>r(Yt(t.workflowSteps)))),{unsubscribe:a}=t.subscribe(t.EVENTS.ACTIVE_STEP_CHANGED,(()=>n(t.activeWorkflowStep.id)));return()=>{e(),a()}}),[e,t]),ve.createElement(we.LWY,{options:s,value:a,onChange:o})}function Xt(){return Xt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},Xt.apply(null,arguments)}function Kt({groupId:e,buttonSection:t}){const{onInteraction:a,toolbarButtons:n}=(0,o.tR)({buttonSection:t});if(!n?.length)return null;const s=n.find((e=>e.componentProps.isActive))?.componentProps||n[0].componentProps,r=n.map((e=>e.componentProps));return ve.createElement(we.XI3,null,ve.createElement(we.mkO,null,ve.createElement("div",{"data-cy":`${e}-split-button-primary`,"data-tool":s.id,"data-active":s.isActive},ve.createElement(we.T0e,Xt({},s,{onInteraction:({itemId:t})=>a?.({groupId:e,itemId:t,commands:s.commands}),className:s.className})))),ve.createElement(we.ItI,{className:s.isActive?"opacity-0":"opacity-100"}),ve.createElement("div",{"data-cy":`${e}-split-button-secondary`},ve.createElement(we.oID,null,r.map((t=>ve.createElement(we.U$I,Xt({key:t.id},t,{"data-cy":t.id,"data-tool":t.id,"data-active":t.isActive,onSelect:()=>a?.({groupId:e,itemId:t.id,commands:t.commands})}),ve.createElement("span",{className:"pl-1"},t.label||t.tooltip||t.id)))))))}var Qt=a(55530),Zt=a.n(Qt),ea=a(8992);function ta(){return ta=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},ta.apply(null,arguments)}function aa({groupId:e,buttonSection:t,...a}){const{onInteraction:n,toolbarButtons:s}=(0,ea.t)({buttonSection:t});if(!e)return null;const r=s.map((e=>e.componentProps));return ve.createElement("div",{className:"bg-popover flex flex-row space-x-1 rounded-md px-0 py-0"},r.map((t=>ve.createElement(we.T0e,ta({},t,{key:t.id,size:"small",className:t.disabled&&"text-foreground/70",onInteraction:a=>{n?.({event:a,groupId:e,commands:t.commands,itemId:t.id,item:t})}})))))}function na({onInteraction:e,className:t,options:a,...n}){return ve.createElement("div",{className:"bg-popover flex flex-row rounded-md px-0 py-0"},ve.createElement(we.T0e,ta({},n,{id:n.id,size:"small",className:Zt()(n.disabled&&"text-foreground/70",t),onInteraction:t=>{e?.({event:t,itemId:n.id,commands:n.commands,options:a})}})))}function sa(e,t,a,n){const s={selectorProps:e,event:t},r=function(e,t,a){const{subMenu:n}=t,s=function*(){yield function(e,t){if(t)return e.find((e=>e.id===t))}(e,a||n),yield function(e,t){return e?e.find((e=>!e.selector||e.selector(t.selectorProps))):null}(e,t)}();let r=s.next(),i=r.value;for(;!r.done;)i=r.value,i&&s.return(),r=s.next();return i}(a,s,n);if(!r)return;if(!r.items)return console.warn("Must define items in menu",r),[];let i=[];return r.items.forEach((n=>{const{delegating:r,selector:o,subMenu:c}=n;if(!o||o(e))if(r)i=[...i,...sa(e,t,a,c)];else{const e=function(e,t){const a={...e,value:t.selectorProps?.value};"ShowSubMenu"!==e.actionType||a.iconRight||(a.iconRight="chevron-down");e.action||(a.action=(e,n)=>{const{event:s={}}=n,{detail:r={}}=s;a.element=r.element,n.onClose();const i=n[`on${e.actionType||"Default"}`];i?i.call(n,a,e,t):console.warn("No action defined for",e)});return a}(n,s);i.push(e)}})),i}var ra,ia=a(4667);class oa{constructor(e,t){this.commandsManager=void 0,this.services=void 0,this.menuItems=void 0,this.services=e.services,this.commandsManager=t}closeContextMenu(){this.services.uiDialogService.hide("context-menu")}showContextMenu(e,t,a){if(!this.services.uiDialogService)return void console.warn("Unable to show dialog; no UI Dialog Service available.");const{event:n,subMenu:s,menuId:r,menus:i,selectorProps:o}=e;if(!i)return void console.warn("No menus found for",r);const{locking:c,visibility:l}=ia.annotation,u=o?.nearbyToolData?.annotationUID;if(u){const e=c.isAnnotationLocked(u),t=l.isAnnotationVisible(u);if(e||!t)return void console.warn(`Annotation is ${e?"locked":"not visible"}.`)}const d=sa(o||e,n,i,r);if(!d)return;const m=this.services.customizationService.getCustomization("ui.contextMenu");this.services.uiDialogService.hide("context-menu"),this.services.uiDialogService.show({id:"context-menu",defaultPosition:oa._getDefaultPosition(a,n?.detail||n,t),content:m,shouldCloseOnEsc:!0,shouldCloseOnOverlayClick:!0,unstyled:!0,contentProps:{items:d,selectorProps:o,menus:i,event:n,subMenu:s,eventData:n?.detail||n,onClose:()=>{this.services.uiDialogService.hide("context-menu")},onShowSubMenu:(n,s,r)=>{s.subMenu?this.showContextMenu({...e,menuId:s.subMenu},t,a):console.warn("No submenu defined for",n,s,r)},onDefault:(e,t,a)=>{this.commandsManager.run(e,{...o,...t,subProps:a})}}})}}ra=oa,oa.getDefaultPosition=()=>({x:0,y:0}),oa._getEventDefaultPosition=e=>({x:e?.currentPoints?.client[0]??e?.pageX,y:e?.currentPoints?.client[1]??e?.pageY}),oa._getElementDefaultPosition=e=>{if(e){const t=e.getBoundingClientRect();return{x:t.x,y:t.y}}return{x:void 0,y:void 0}},oa._getCanvasPointsPosition=(e=[],t)=>{const a=ra._getElementDefaultPosition(t);for(let t=0;t<e.length;t++){const n={x:e[t][0]||e[t].x,y:e[t][1]||e[t].y};if(ra._isValidPosition(n)&&ra._isValidPosition(a))return{x:n.x+a.x,y:n.y+a.y}}},oa._isValidPosition=e=>e&&"number"==typeof e.x&&"number"==typeof e.y,oa._getDefaultPosition=(e,t,a)=>{const n=function*(){yield ra._getCanvasPointsPosition(e,a),yield ra._getEventDefaultPosition(t),yield ra._getElementDefaultPosition(a),yield ra.getDefaultPosition()}();let s=n.next(),r=s.value;for(;!s.done;)r=s.value,ra._isValidPosition(r)&&n.return(),s=n.next();return r};var ca=a(14867),la=a.n(ca),ua=a(28271),da=a(62051),ma=a.n(da);const pa={padding:"10px 0"},ga={borderBottomWidth:"1px",...pa},fa=({row:e,style:t,keyPrefix:a,onToggle:n})=>{const s=(0,ve.useCallback)((()=>{n(!e.areChildrenVisible)}),[e.areChildrenVisible,n]),r=e.children&&e.children.length>0||e.depth>0,i=8*(1+2*e.depth);return ve.createElement("div",{style:{...t,...ga},className:Zt()("hover:bg-secondary-main border-secondary-light text-foreground flex w-full flex-row items-center break-all bg-black text-base transition duration-300","leading-[20px]"),key:a},r&&ve.createElement("div",{style:{paddingLeft:`${i}px`,opacity:n?1:0}},e.areChildrenVisible?ve.createElement("div",{className:"cursor-pointer p-1",onClick:s},ve.createElement(we.FI1.ChevronDown,null)):ve.createElement("div",{className:"cursor-pointer p-1",onClick:s},ve.createElement(we.FI1.ChevronRight,null))),ve.createElement("div",{className:"w-4/24 px-3"},e.tag),ve.createElement("div",{className:"w-2/24 px-3"},e.valueRepresentation),ve.createElement("div",{className:"w-6/24 px-3"},e.keyword),ve.createElement("div",{className:"w-5/24 grow px-3"},e.value))};function Sa({tagRef:e,vrRef:t,keywordRef:a,valueRef:n}){return ve.createElement("div",{className:Zt()("bg-secondary-dark ohif-scrollbar flex w-full flex-row overflow-y-scroll"),style:pa},ve.createElement("div",{className:"w-4/24 px-3"},ve.createElement("label",{ref:e,className:"flex flex-1 select-none flex-col pl-1 text-lg text-white"},ve.createElement("span",{className:"flex flex-row items-center focus:outline-none"},"Tag"))),ve.createElement("div",{className:"w-2/24 px-3"},ve.createElement("label",{ref:t,className:"flex flex-1 select-none flex-col pl-1 text-lg text-white"},ve.createElement("span",{className:"flex flex-row items-center focus:outline-none"},"VR"))),ve.createElement("div",{className:"w-6/24 px-3"},ve.createElement("label",{ref:a,className:"flex flex-1 select-none flex-col pl-1 text-lg text-white"},ve.createElement("span",{className:"flex flex-row items-center focus:outline-none"},"Keyword"))),ve.createElement("div",{className:"w-5/24 grow px-3"},ve.createElement("label",{ref:n,className:"flex flex-1 select-none flex-col pl-1 text-lg text-white"},ve.createElement("span",{className:"flex flex-row items-center focus:outline-none"},"Value"))))}function ya({rows:e}){const t=(0,ve.useRef)(),a=(0,ve.useRef)(),[n,s]=(0,ve.useState)(null),[r,i]=(0,ve.useState)(null),[o,c]=(0,ve.useState)(null),[l,u]=(0,ve.useState)(null),[d,m]=(0,ve.useState)(e);(0,ve.useEffect)((()=>{m(e)}),[e]);const p=(0,ve.useMemo)((()=>d.filter((e=>e.isVisible))),[d]);(0,ve.useEffect)((()=>{t?.current&&(t.current.scrollTo(0),t.current.resetAfterIndex(0))}),[e]),(0,ve.useEffect)((()=>{const e=ma()((()=>t.current.resetAfterIndex(0)),100);return window.addEventListener("resize",e),()=>{e.cancel(),window.removeEventListener("resize",e)}}),[]);const g=(0,ve.useCallback)((e=>{const t=[n.offsetWidth,r.offsetWidth,o.offsetWidth,l.offsetWidth],s=a.current.getContext("2d");s.font=getComputedStyle(a.current).font;const i=["tag","valueRepresentation","keyword","value"];return Object.entries(e).filter((([e])=>i.includes(e))).map((([,e],a)=>{const n=s.measureText(e).width;return 20*Math.ceil(n/t[a])+20+1})).reduce(((e,t)=>Math.max(e,t)),0)}),[o,n,l,r]),f=(0,ve.useCallback)((e=>t=>{const a=e[t];return g(a)}),[g]),S=(0,ve.useCallback)((e=>{if(e.children)return a=>{const n=d.map((t=>e.uid===t.uid?{...t,areChildrenVisible:a}:e.children.includes(t.uid)?{...t,isVisible:a,areChildrenVisible:a}:t));m(n),t?.current?.resetAfterIndex(0)}}),[d,t]),y=(0,ve.useCallback)((({rows:e})=>function({index:t,style:a}){const n=(0,ve.useMemo)((()=>e[t]),[t]);return ve.createElement(fa,{style:a,row:n,keyPrefix:`DICOMTagRow-${t}`,onToggle:S(n)})}),[S]),h=(0,ve.useCallback)((()=>null!==n),[n]);return ve.createElement("div",null,ve.createElement("canvas",{style:{visibility:"hidden",position:"absolute"},className:"text-base",ref:a}),ve.createElement(Sa,{tagRef:e=>{e&&s(e)},vrRef:e=>{e&&i(e)},keywordRef:e=>{e&&c(e)},valueRef:e=>{e&&u(e)}}),ve.createElement("div",{className:"relative m-auto border-2 border-black bg-black",style:{height:"32rem"}},h()&&ve.createElement(ua._m,{ref:t,height:500,itemCount:p.length,itemSize:f(p),width:"100%",className:"ohif-scrollbar text-foreground"},y({rows:p}))))}const ha=ve.memo(ya);let Ia=0;const va=()=>"row_"+ ++Ia,{ImageSet:Da}=o.Ly,{DicomMetaDictionary:ba}=S.Ay.data,{nameMap:wa}=ba;function Ea(e,t=0){const a=Object.keys(e),n=[];for(let r=0;r<a.length;r++){let i=a[r];if("_vrMap"===i)continue;const o=wa[i];let c=e[i];if(o&&"SQ"===o.vr){const e=(s=c,Array.isArray(s)?s:[s]),a={tag:o.tag,vr:o.vr,keyword:i,values:[]};if(n.push(a),null===c)continue;e.forEach((e=>{const n=Ea(e,t+1);n.length&&(xa(n),a.values.push(n))}))}else if(Array.isArray(c)&&c.length>0&&"object"!=typeof c[0]&&(c=c.join("\\")),"number"==typeof c&&(c=c.toString()),"string"!=typeof c&&(null===c?c=" ":"object"==typeof c?c.InlineBinary?c="Inline Binary":c.BulkDataURI?c="Bulk Data URI":c.Alphabetic?c=c.Alphabetic:(console.warn(`Unrecognised Value: ${c} for ${i}:`),console.warn(c),c=" "):(console.warn(`Unrecognised Value: ${c} for ${i}:`),c=" ")),i=i.replace("RETIRED_",""),o)n.push({tag:o.tag,vr:o.vr,keyword:i,value:c});else{const e=/[0-9A-Fa-f]{6}/g;if(i.match(e)){const e=`(${i.substring(0,4)},${i.substring(4,8)})`;n.push({tag:e,vr:"",keyword:"Private Tag",value:c})}}}var s;return n}function xa(e){e.sort(((e,t)=>e.tag<t.tag?-1:1))}const Ma=({displaySets:e,displaySetInstanceUID:t})=>{const[a,n]=(0,ve.useState)(t),[s,r]=(0,ve.useState)(1),[i,o]=(0,ve.useState)(!1),[c,l]=(0,ve.useState)(""),u=e.find((e=>e.displaySetInstanceUID===a)),d=(0,ve.useMemo)((()=>(e.sort(((e,t)=>e.SeriesNumber-t.SeriesNumber)),e.map((e=>{const{displaySetInstanceUID:t,SeriesDate:a,SeriesTime:n,SeriesNumber:s,SeriesDescription:r,Modality:i}=e,o=`${a}:${n}`.split(".")[0];return{value:t,label:`${s} (${i}):  ${r}`,description:la()(o,"YYYYMMDD:HHmmss").format("ddd, MMM Do YYYY")}})))),[e]),m=(0,ve.useCallback)((e=>e?u.images[s-1]:u.instance||u),[u,s]),p=(0,ve.useMemo)((()=>{const e=u instanceof Da,t=m(e);o(e&&u.images.length>1);const a=function(e){const t=Ea(e);return xa(t),t}(t),n=function({tags:e,metadata:t}){const a=[],n=[{tags:e,depth:0,parents:null,index:0,children:[]}],s=new Map;for(;n.length>0;){const e=n.pop(),{tags:r,depth:i,parents:o,index:c,children:l}=e;for(let e=c;e<r.length;e++){const c=r[e],u=c.uid??va();if(o?.length>0&&o.forEach((e=>{s.get(e).push(u)})),"SQ"===c.vr){const t={uid:u,tag:c.tag,valueRepresentation:c.vr,keyword:c.keyword,value:"",depth:i,isVisible:!0,areChildrenVisible:!0,children:[],parents:o};a.push(t),s.set(u,t.children);const d=o?[...o,u]:[u];if(c.values.length>0){n.push({tags:r,depth:i,parents:o,index:e+1,children:l});for(let e=c.values.length-1,t=c.values[e];e>=0;t=c.values[--e]){const a=va();n.push({tags:t,depth:i+2,parents:[...d,a],index:0,children:[]});const r={tags:[{tag:"(FFFE,E000)",vr:"",keyword:`Item #${e}`,value:"",uid:a}],depth:i+1,parents:d,index:0,children:[]};n.push(r),s.set(a,r.children)}break}}else{if("xs"===c.vr)try{const e=t[S.Ay.data.Tag.fromPString(c.tag).toCleanString()];c.vr=e.vr}catch(e){console.warn(`Failed to parse value representation for tag '${c.keyword}'`)}const e={uid:u,tag:c.tag,valueRepresentation:c.vr,keyword:c.keyword,value:c.value,depth:i,isVisible:!0,parents:o};a.push(e),"(FFFE,E000)"===e.tag&&(e.areChildrenVisible=!0,e.children=[])}}}return a}({tags:a,metadata:t});return n}),[m,u]),g=(0,ve.useMemo)((()=>{if(!c)return p;const e=new Set,t=["tag","valueRepresentation","keyword","value"],a=c.toLowerCase();return p.forEach((n=>{t.some((e=>n[e]?.toLowerCase().includes(a)))&&(e.add(n.uid),[...n.parents??[],...n.children??[]].forEach((t=>e.add(t))))})),p.filter((t=>e.has(t.uid)))}),[p,c]);return ve.createElement("div",{className:"dicom-tag-browser-content bg-muted"},ve.createElement("div",{className:"mb-6 flex flex-row items-start pl-1"},ve.createElement("div",{className:"flex w-full flex-row items-start gap-4"},ve.createElement("div",{className:"flex w-1/3 flex-col"},ve.createElement("span",{className:"text-muted-foreground flex h-6 items-center text-xs"},"Series"),ve.createElement(we.l6P,{value:a,onValueChange:e=>(e=>{n(e.value),r(1)})({value:e})},ve.createElement(we.bqE,null,d.find((e=>e.value===a))?.label||"Select Series"),ve.createElement(we.gCo,null,d.map((e=>ve.createElement(we.ebT,{key:e.value,value:e.value},e.label,ve.createElement("span",{className:"text-muted-foreground ml-1 text-xs"},e.description))))))),i&&ve.createElement("div",{className:"mx-auto mt-0.5 flex w-1/4 flex-col"},ve.createElement("span",{className:"text-muted-foreground flex h-6 items-center text-xs"},"Instance Number (",s," of ",u?.images?.length,")"),ve.createElement(we.Apm,{value:[s],onValueChange:([e])=>{r(e)},min:1,max:u?.images?.length,step:1,className:"pt-4"})),ve.createElement("div",{className:"ml-auto mr-1 flex w-1/3 flex-col"},ve.createElement("span",{className:"text-muted-foreground flex h-6 items-center text-xs"},"Search metadata"),ve.createElement(we.zbB,{className:"text-muted-foreground",onChange:l},ve.createElement(we.zbB.SearchIcon,null),ve.createElement(we.zbB.Input,{placeholder:"Search metadata",className:"pl-9 pr-9"}),ve.createElement(we.zbB.ClearButton,null))))),ve.createElement(ha,{rows:g}))};var Ca=a(78713);a(21978);const Pa=e=>({type:"viewportGridId",viewportGridState:{},setViewportGridState:(t,a)=>e((e=>({viewportGridState:{...e.viewportGridState,[t]:a}})),!1,"setViewportGridState"),clearViewportGridState:()=>e({viewportGridState:{}},!1,"clearViewportGridState")}),Na=(0,Ca.vt)()(Pa),Ua=e=>({type:"displaySetSelectorId",displaySetSelectorMap:{},setDisplaySetSelector:(t,a)=>e((e=>({displaySetSelectorMap:{...e.displaySetSelectorMap,[t]:a}})),!1,"setDisplaySetSelector"),clearDisplaySetSelectorMap:()=>e({displaySetSelectorMap:{}},!1,"clearDisplaySetSelectorMap")}),Oa=(0,Ca.vt)()(Ua),Ra=e=>({hangingProtocolStageIndexMap:{},type:"hangingProtocolStageIndexId",setHangingProtocolStageIndex:(t,a)=>e((e=>({hangingProtocolStageIndexMap:{...e.hangingProtocolStageIndexMap,[t]:a}})),!1,"setHangingProtocolStageIndex"),clearHangingProtocolStageIndexMap:()=>e({hangingProtocolStageIndexMap:{}},!1,"clearHangingProtocolStageIndexMap")}),Ta=(0,Ca.vt)()(Ra),Aa=(e,t)=>{const{activeViewportId:a}=e,{protocol:n}=t.getActiveProtocol();if(!n)return;const s=t.getState(),{protocolId:r,stageIndex:i,activeStudyUID:o}=s,{viewportGridState:c,setViewportGridState:l}=Na.getState(),{displaySetSelectorMap:u,setDisplaySetSelector:d}=Oa.getState(),{hangingProtocolStageIndexMap:m,setHangingProtocolStageIndex:p}=Ta.getState(),g=n.stages[i],f=`${o}:${r}:${i}`,S=`${o}:${r}`,{rows:y,columns:h}=g.viewportStructure.properties,I=g.viewports.length!==e.viewports.size||e.layout.numRows!==y||e.layout.numCols!==h;return m[S]=s,f&&I&&l(f,{...e}),e.viewports.forEach(((e,t)=>{const{displaySetOptions:n,displaySetInstanceUIDs:s}=e;if(n)for(let e=0;e<n.length;e++){const r=s[e];r&&(t===a&&0===e&&d(`${o}:activeDisplaySet:0`,r),n[e]?.id&&d(`${o}:${n[e].id}:${n[e].matchedDisplaySetsIndex||0}`,r))}})),p(S,s),{hangingProtocolStageIndexMap:m,viewportGridStore:c,displaySetSelectorMap:u}},ka=e=>({type:"viewportsByPositionId",viewportsByPosition:{},initialInDisplay:[],setViewportsByPosition:(t,a)=>e((e=>({viewportsByPosition:{...e.viewportsByPosition,[t]:a}})),!1,"setViewportsByPosition"),clearViewportsByPosition:()=>e({viewportsByPosition:{}},!1,"clearViewportsByPosition"),addInitialInDisplay:t=>e((e=>({initialInDisplay:[...e.initialInDisplay,t]})),!1,"addInitialInDisplay")}),Va=(0,Ca.vt)()(ka),La=(e,t,a,n,s,r)=>{const i=a?.[s];if(i)return{...i};const{protocolId:o,stageIndex:c}=e.getState();r.inDisplay||(r.inDisplay=[...a.initialInDisplay]);const l=e.getMissingViewport(t?o:"default",c,r);if(l){const e=l.displaySetsInfo.map((e=>e.displaySetInstanceUID));return r.inDisplay.push(...e),{displaySetInstanceUIDs:e,displaySetOptions:l.displaySetsInfo.map((e=>e.displaySetOptions)),viewportOptions:{...l.viewportOptions}}}return{}},Fa=(e,{numRows:t,numCols:a})=>{const{viewports:n}=e,{setViewportsByPosition:s,addInitialInDisplay:r}=Va.getState(),i=[],o={};n.forEach((e=>{if(e.positionId){const t={...e,viewportOptions:{...e.viewportOptions}};o[e.positionId]=t,s(e.positionId,t)}}));for(let e=0;e<t;e++)for(let t=0;t<a;t++){const a=o[`${t}-${e}`];a?.displaySetInstanceUIDs&&i.push(...a.displaySetInstanceUIDs)}i.forEach((e=>r(e)))},Ba=e=>({toggleHangingProtocol:{},type:"toggleHangingProtocolId",setToggleHangingProtocol:(t,a)=>e((e=>({toggleHangingProtocol:{...e.toggleHangingProtocol,[t]:a}})),!1,"setToggleHangingProtocol"),clearToggleHangingProtocol:()=>e({toggleHangingProtocol:{}},!1,"clearToggleHangingProtocol")}),$a=(0,Ca.vt)()(Ba),Ha=(0,Ca.vt)((e=>({toggleOneUpViewportGridStore:null,type:"toggleOneUpViewportGridId",setToggleOneUpViewportGridStore:t=>e({toggleOneUpViewportGridStore:t}),clearToggleOneUpViewportGridStore:()=>e({toggleOneUpViewportGridStore:null})})));const za=async function({servicesManager:e,getReport:t,reportType:a="measurement"}){const{displaySetService:n,uiNotificationService:s,uiDialogService:r}=e.services;try{const e=await t();if(!e)return;o.H8.addInstances([e],!0);const r=n.getMostRecentDisplaySet().displaySetInstanceUID;return s.show({title:"Create Report",message:`${a} saved successfully`,type:"success"}),[r]}catch(e){throw s.show({title:"Create Report",message:e.message||`Failed to store ${a}`,type:"error"}),new Error(`Failed to store ${a}. Error: ${e.message||"Unknown error"}`)}finally{r.hide("loading-dialog")}},_a=4700;function qa({displaySetService:e,modality:t,minSeriesNumber:a}){const n=e.getActiveDisplaySets(),s=n.filter((e=>e.Modality===t)).map((e=>e.SeriesNumber)),r=Math.max(...s,a),i=n.map((e=>e.SeriesNumber));let o=r+1;for(;i.includes(o);)o++;return{SeriesNumber:o,InstanceNumber:1}}const Wa=(e=new Date)=>{const t=String(e.getUTCMonth()+1).padStart(2,"0"),a=String(e.getUTCDate()).padStart(2,"0");return{date:`${String(e.getUTCFullYear()).padStart(4,"0")}${t}${a}`,time:`${String(e.getUTCHours()).padStart(2,"0")}${String(e.getUTCMinutes()).padStart(2,"0")}${String(e.getUTCSeconds()).padStart(2,"0")}`}},{filterAnd:ja,filterMeasurementsByStudyUID:Ga,filterMeasurementsBySeriesUID:Ya,filterPlanarMeasurement:Ja}=o.Wp.MeasurementFilters;const Xa=async function({servicesManager:e,commandsManager:t,extensionManager:a},n,s){const{measurementService:r,displaySetService:i}=e.services,o=void 0===s.viewportId?s.data.viewportId:s.viewportId,c=void 0===s.isBackupSave?s.data.isBackupSave:s.isBackupSave,l=s?.data?.StudyInstanceUID||n.trackedStudy,u=s?.data?.SeriesInstanceUID,{displaySetInstanceUID:d}=s.data??s,{trackedSeries:m,measurementFilter:p=ja(Ga(l),Ya(m),Ja),defaultSaveTitle:g="Create Report"}=n;let f;try{const n=await Ze({title:g,extensionManager:a,servicesManager:e});if(n.action===Qe.A.CREATE_REPORT){const s=a.getDataSources(n.dataSourceName)[0],o=r.getMeasurements(p),c=n.value||g,{SeriesNumber:l,InstanceNumber:u,referenceDisplaySet:d}=function({displaySetService:e,SeriesInstanceUid:t}){if(!t)return qa({displaySetService:e,modality:"SR",minSeriesNumber:_a});const a=e.getDisplaySetCache(),n=Array.from(a.values()).find((e=>"SR"===e.Modality&&e.SeriesInstanceUID===t)),s=n.instances?.length+1;return n?.SeriesNumber&&s?{SeriesNumber:n.SeriesNumber,InstanceNumber:s,referenceDisplaySet:n}:qa({displaySetService:e,modality:"SR",minSeriesNumber:_a})}({displaySetService:i,SeriesInstanceUid:n.series}),{SeriesDate:m,SeriesTime:S}=d??((e=new Date)=>{const t=Wa(e);return{SeriesDate:t.date,SeriesTime:t.time}})(),y=async()=>t.runCommand("storeMeasurements",{measurementData:o,dataSource:s,additionalFindingTypes:["ArrowAnnotate"],options:{SeriesDescription:c,SeriesNumber:l,InstanceNumber:u,SeriesInstanceUID:n.series,SeriesDate:m,SeriesTime:S}},"CORNERSTONE_STRUCTURED_REPORT");f=await za({servicesManager:e,getReport:y})}else n.action,RESPONSE.CANCEL;return{userResponse:n.action,createdDisplaySetInstanceUIDs:f,StudyInstanceUID:l,SeriesInstanceUID:u,viewportId:o,isBackupSave:c,displaySetInstanceUID:d}}catch(e){return console.warn("Unable to save report",e),null}},Ka=({servicesManager:e,commandsManager:t,extensionManager:a})=>{const{customizationService:n,measurementService:s,hangingProtocolService:r,uiNotificationService:i,viewportGridService:c,displaySetService:l,multiMonitorService:u}=e.services,d=new oa(e,t),m={multimonitor:async e=>{const{screenDelta:t,StudyInstanceUID:a,commands:n,hashParams:s}=e;if(u.numberOfScreens<2)return e.fallback?.(e);await u.launchWindow(a,t,s)&&n&&setTimeout((()=>{u.run(t,n,e)}),1e3)},promptSaveReport:n=>{const{StudyInstanceUID:s}=n;Xa({servicesManager:e,commandsManager:t,extensionManager:a},n,{data:{StudyInstanceUID:s}})},loadStudy:async e=>{const{StudyInstanceUID:t}=e;if(l.getActiveDisplaySets().find((e=>e.StudyInstanceUID===t)))return;const[n]=a.getActiveDataSource();await Xe(n,l,t);const s=o.H8.getStudy(t);r.addStudy(s)},showContextMenu:e=>{const{menuCustomizationId:t,element:a,event:s,selectorProps:i,defaultPointsPosition:o=[]}=e,c={...e};t&&Object.assign(c,n.getCustomization(t));const{protocol:l,stage:u}=r.getActiveProtocol();c.selectorProps={event:s,protocol:l,stage:u,...i},d.showContextMenu(c,a,o)},closeContextMenu:()=>{d.closeContextMenu()},displayNotification:({text:e,title:t,type:a})=>{i.show({title:t,message:e,type:a})},clearMeasurements:e=>{s.clearMeasurements(e.measurementFilter)},setHangingProtocol:({activeStudyUID:e="",StudyInstanceUID:t="",protocolId:a,stageId:n,stageIndex:s,reset:o=!1})=>{const u=e||t;try{const e=c.getState(),t=r.getState();Aa(e,r);const{hangingProtocolStageIndexMap:i}=Ta.getState(),{displaySetSelectorMap:d}=Oa.getState();if(a){if(void 0===s&&void 0===n){const e=`${u||t.activeStudyUID}:${a}`;s=i[e]?.stageIndex}}else a=t.protocolId,void 0===n&&void 0===s&&(s=t.stageIndex);const m=s??r.getStageIndex(a,{stageId:n,stageIndex:s}),p=r.setActiveStudyUID(u),g=`${u||r.getState().activeStudyUID}:${a}:${m||0}`,{viewportGridState:f}=Na.getState(),S=!o&&f[g];if(o||p&&!f[g]&&void 0===s&&void 0===n){const e={StudyInstanceUID:u,displaySets:l.getActiveDisplaySets()};r.run(e,a)}else a!==t.protocolId||m!==t.stageIndex||u?(r.setProtocol(a,{displaySetSelectorMap:d,stageId:n,stageIndex:m,restoreProtocol:S}),S&&c.set(f[g])):r.setProtocol(a,{stageId:n,stageIndex:m});const{setDisplaySetSelector:y}=Oa.getState();return y(`${u||t.activeStudyUID}:activeDisplaySet:0`,null),!0}catch(e){return console.error(e),i.show({title:"Apply Hanging Protocol",message:"The hanging protocol could not be applied.",type:"error",duration:3e3}),!1}},toggleHangingProtocol:({protocolId:e,stageIndex:t})=>{const{protocol:a,stageIndex:n,activeStudy:s}=r.getActiveProtocol(),{toggleHangingProtocol:i,setToggleHangingProtocol:o}=$a.getState(),c=`${s.StudyInstanceUID}:${e}:${0|t}`;if(a.id!==e||void 0!==t&&t!==n)return o(c,{protocolId:a.id,stageIndex:n}),m.setHangingProtocol({protocolId:e,stageIndex:t,reset:!0});{const e=i[c]||{protocolId:"default"};return m.setHangingProtocol(e)}},deltaStage:({direction:e})=>{const{protocolId:t,stageIndex:a}=r.getState(),{protocol:n}=r.getActiveProtocol();for(let s=a+e;s>=0&&s<n.stages.length;s+=e)if("disabled"!==n.stages[s].status)return m.setHangingProtocol({protocolId:t,stageIndex:s});i.show({title:"Change Stage",message:"The hanging protocol has no more applicable stages",type:"info",duration:3e3})},setViewportGridLayout:({numRows:e,numCols:a,isHangingProtocolLayout:n=!1})=>{const{protocol:s}=r.getActiveProtocol(),i=s.callbacks?.onLayoutChange;if(!1===t.run(i,{numRows:e,numCols:a}))return;window.setTimeout((()=>{const t=c.getState();Fa(t,{numRows:e,numCols:a});const{viewportsByPosition:s,initialInDisplay:i}=Va.getState(),o=La.bind(null,r,n,{...s,initialInDisplay:i});c.setLayout({numRows:e,numCols:a,findOrCreateViewport:o,isHangingProtocolLayout:n})}),0)},toggleOneUp(){const e=c.getState(),{activeViewportId:a,viewports:n,layout:s,isHangingProtocolLayout:i}=e,{displaySetInstanceUIDs:o,displaySetOptions:l,viewportOptions:u}=n.get(a);if(1===s.numCols&&1===s.numRows){const{toggleOneUpViewportGridStore:e}=Ha.getState();if(!e)return;const a=e.activeViewportId,n=o.length>1?[]:o.map((e=>r.getViewportsRequireUpdate(a,e,i))).flat(),s=(t,a)=>{const s=Array.from(e.viewports.values()).find((e=>e.positionId===a)),r=n.find((e=>e.viewportId===s.viewportId));return r?{viewportOptions:u,displaySetOptions:l,...r}:s},d=c.getLayoutOptionsFromState(e);c.setLayout({numRows:e.layout.numRows,numCols:e.layout.numCols,activeViewportId:a,layoutOptions:d,findOrCreateViewport:s,isHangingProtocolLayout:!0}),setTimeout((()=>{t.runCommand("resetCrosshairs")}),0)}else{const{setToggleOneUpViewportGridStore:t}=Ha.getState();t(e);const a=()=>({displaySetInstanceUIDs:o,displaySetOptions:l,viewportOptions:u});c.setLayout({numRows:1,numCols:1,findOrCreateViewport:a,isHangingProtocolLayout:!0})}},navigateHistory(e){ke.b6.navigate(e.to,e.options)},openDICOMTagViewer({displaySetInstanceUID:t}){const{activeViewportId:a,viewports:n}=c.getState(),s=n.get(a),{displaySetInstanceUIDs:r}=s,i=l.activeDisplaySets,{UIModalService:o}=e.services,u=t||r[0];o.show({content:Ma,contentProps:{displaySets:i,displaySetInstanceUID:u},title:"DICOM Tag Browser",containerClassName:"max-w-3xl"})},toggleOverlays:()=>{const e=document.getElementsByClassName("viewport-overlay");for(let t=0;t<e.length;t++)e.item(t).classList.toggle("hidden")},scrollActiveThumbnailIntoView:()=>{const{activeViewportId:e,viewports:t}=c.getState(),a=t.get(e).displaySetInstanceUIDs[0],n=document.querySelector("#ohif-thumbnail-list");if(!n)return;const s=n.getBoundingClientRect(),r=document.querySelector(`#thumbnail-${a}`);if(!r)return;const i=r.getBoundingClientRect();i.top>=s.top&&i.top<=s.bottom||r.scrollIntoView({behavior:"smooth"})},updateViewportDisplaySet:({direction:e,excludeNonImageModalities:a})=>{const n=["SR","SEG","SM","RTSTRUCT","RTPLAN","RTDOSE"],s=[...l.activeDisplaySets],{activeViewportId:o,viewports:u,isHangingProtocolLayout:d}=c.getState(),{displaySetInstanceUIDs:p}=u.get(o);let g;for(g=s.findIndex((e=>p.includes(e.displaySetInstanceUID)))+e;g>-1&&g<s.length&&(a&&n.includes(s[g].Modality));g+=e);if(g<0||g>=s.length)return;const{displaySetInstanceUID:f}=s[g];let S=[];try{S=r.getViewportsRequireUpdate(o,f,d)}catch(e){console.warn(e),i.show({title:"Navigate Viewport Display Set",message:"The requested display sets could not be added to the viewport due to a mismatch in the Hanging Protocol rules.",type:"info",duration:3e3})}t.run("setDisplaySetsForViewports",{viewportsToUpdate:S}),setTimeout((()=>m.scrollActiveThumbnailIntoView()),0)}},p={multimonitor:m.multimonitor,promptSaveReport:m.promptSaveReport,loadStudy:m.loadStudy,showContextMenu:m.showContextMenu,closeContextMenu:m.closeContextMenu,clearMeasurements:m.clearMeasurements,displayNotification:m.displayNotification,setHangingProtocol:m.setHangingProtocol,toggleHangingProtocol:m.toggleHangingProtocol,navigateHistory:m.navigateHistory,nextStage:{commandFn:m.deltaStage,options:{direction:1}},previousStage:{commandFn:m.deltaStage,options:{direction:-1}},setViewportGridLayout:m.setViewportGridLayout,toggleOneUp:m.toggleOneUp,openDICOMTagViewer:m.openDICOMTagViewer,updateViewportDisplaySet:m.updateViewportDisplaySet};return{actions:m,definitions:p,defaultContext:"DEFAULT"}},Qa={toolGroupId:"default",allowUnmatchedView:!0,syncGroups:[{type:"hydrateseg",id:"sameFORId",source:!0,target:!0,options:{matchingRules:["sameFOR"]}}]},Za={id:"@ohif/mnGrid",description:"Has various hanging protocol grid layouts",name:"2x2",protocolMatchingRules:[{id:"OneOrMoreSeries",weight:25,attribute:"numberOfDisplaySetsWithImages",constraint:{greaterThan:0}}],toolGroupIds:["default"],displaySetSelectors:{defaultDisplaySetId:{allowUnmatchedView:!0,seriesMatchingRules:[{attribute:"numImageFrames",constraint:{greaterThan:{value:0}},weight:1,required:!0},{attribute:"isDisplaySetFromUrl",weight:20,constraint:{equals:!0}}]}},defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",syncGroups:[{type:"hydrateseg",id:"sameFORId",source:!0,target:!0,options:{matchingRules:["sameFOR"]}}]},displaySets:[{id:"defaultDisplaySetId",matchedDisplaySetsIndex:-1}]},stages:[{id:"2x2",name:"2x2",stageActivation:{enabled:{minViewportsMatched:4}},viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[{viewportOptions:Qa,displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:1,id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:2,id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:3,id:"defaultDisplaySetId"}]}]},{name:"3x1",stageActivation:{enabled:{minViewportsMatched:3}},viewportStructure:{layoutType:"grid",properties:{rows:1,columns:3}},viewports:[{viewportOptions:Qa,displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{id:"defaultDisplaySetId",matchedDisplaySetsIndex:1}]},{viewportOptions:Qa,displaySets:[{id:"defaultDisplaySetId",matchedDisplaySetsIndex:2}]}]},{name:"2x1",stageActivation:{enabled:{minViewportsMatched:2}},viewportStructure:{layoutType:"grid",properties:{rows:1,columns:2}},viewports:[{viewportOptions:Qa,displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:1,id:"defaultDisplaySetId"}]}]},{name:"1x1",stageActivation:{enabled:{minViewportsMatched:1}},viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:Qa,displaySets:[{id:"defaultDisplaySetId"}]}]}],numberOfPriorsReferenced:-1},en={...Za,id:"@ohif/mnGrid8",description:"Has various hanging protocol grid layouts up to 4x2",name:"4x2",stages:[{id:"4x2",name:"4x2",stageActivation:{enabled:{minViewportsMatched:7}},viewportStructure:{layoutType:"grid",properties:{rows:2,columns:4}},viewports:[{viewportOptions:Qa,displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:1,id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:2,id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:3,id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:4,id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:5,id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:6,id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:7,id:"defaultDisplaySetId"}]}]},{id:"3x2",name:"3x2",stageActivation:{enabled:{minViewportsMatched:5}},viewportStructure:{layoutType:"grid",properties:{rows:2,columns:3}},viewports:[{viewportOptions:Qa,displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:1,id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:2,id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:3,id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:4,id:"defaultDisplaySetId"}]},{viewportOptions:Qa,displaySets:[{matchedDisplaySetsIndex:5,id:"defaultDisplaySetId"}]}]},...Za.stages]},tn={id:"defaultDisplaySetId"},an={id:"priorDisplaySetId"},nn={viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0},displaySets:[tn]},sn={...nn,displaySets:[{...tn,matchedDisplaySetsIndex:1}]},rn={...nn,displaySets:[an]},on={id:"@ohif/hpCompare",description:"Compare two studies in various layouts",name:"Compare Two Studies",numberOfPriorsReferenced:1,protocolMatchingRules:[{id:"Two Studies",weight:1e3,attribute:"StudyInstanceUID",from:"prior",required:!0,constraint:{notNull:!0}}],toolGroupIds:["default"],displaySetSelectors:{defaultDisplaySetId:{studyMatchingRules:[{attribute:"studyInstanceUIDsIndex",from:"options",required:!0,constraint:{equals:{value:0}}}],seriesMatchingRules:[{attribute:"numImageFrames",constraint:{greaterThan:{value:0}}},{attribute:"isDisplaySetFromUrl",weight:20,constraint:{equals:!0}}]},priorDisplaySetId:{studyMatchingRules:[{attribute:"studyInstanceUIDsIndex",from:"options",required:!0,constraint:{equals:{value:1}}}],seriesMatchingRules:[{attribute:"numImageFrames",constraint:{greaterThan:{value:0}}},{attribute:"isDisplaySetFromUrl",weight:20,constraint:{equals:!0}}]}},defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"defaultDisplaySetId",matchedDisplaySetsIndex:-1}]},stages:[{name:"2x2",stageActivation:{enabled:{minViewportsMatched:4}},viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[nn,rn,sn,{...rn,displaySets:[{...an,matchedDisplaySetsIndex:1}]}]},{name:"2x1",stageActivation:{enabled:{minViewportsMatched:2}},viewportStructure:{layoutType:"grid",properties:{rows:1,columns:2}},viewports:[nn,rn]}]},cn=[{attribute:"studyInstanceUIDsIndex",from:"options",required:!0,constraint:{equals:{value:1}}}],ln=[{attribute:"studyInstanceUIDsIndex",from:"options",required:!0,constraint:{equals:{value:0}}}],un=[{weight:10,attribute:"ViewCode",constraint:{contains:"SCT:399162004"}},{weight:5,attribute:"PatientOrientation",constraint:{contains:"L"}},{weight:20,attribute:"SeriesDescription",constraint:{contains:"L CC"}}],dn=[{weight:10,attribute:"ViewCode",constraint:{contains:"SCT:399162004"}},{weight:5,attribute:"PatientOrientation",constraint:{equals:["P","L"]}},{attribute:"PatientOrientation",constraint:{doesNotEqual:["A","R"]},required:!0},{weight:20,attribute:"SeriesDescription",constraint:{contains:"CC"}}],mn=[{weight:10,attribute:"ViewCode",constraint:{contains:"SCT:399368009"}},{weight:0,attribute:"ViewCode",constraint:{doesNotEqual:"SCT:399162004"},required:!0},{weight:5,attribute:"PatientOrientation",constraint:{equals:["A","R"]}},{weight:20,attribute:"SeriesDescription",constraint:{contains:"L MLO"}}],pn=[{weight:10,attribute:"ViewCode",constraint:{contains:"SCT:399368009"}},{attribute:"ViewCode",constraint:{doesNotEqual:"SCT:399162004"},required:!0},{attribute:"PatientOrientation",constraint:{doesNotContain:["P","FL"]},required:!0},{weight:5,attribute:"PatientOrientation",constraint:{equals:["P","L"]}},{weight:5,attribute:"PatientOrientation",constraint:{equals:["A","FR"]}},{weight:20,attribute:"SeriesDescription",constraint:{contains:"R MLO"}},{attribute:"SeriesDescription",required:!0,constraint:{doesNotContain:"CC"}},{attribute:"SeriesDescription",required:!0,constraint:{doesNotEqual:"L MLO"},required:!0}],gn={storeAsInitialCamera:!0,imageArea:[.8,.8],imageCanvasPoint:{imagePoint:[0,.5],canvasPoint:[0,.5]}},fn={storeAsInitialCamera:!0,imageArea:[.8,.8],imageCanvasPoint:{imagePoint:[1,.5],canvasPoint:[1,.5]}},Sn={id:"@ohif/hpMammo",hasUpdatedPriorsInformation:!1,name:"Mammography Breast Screening",protocolMatchingRules:[{id:"Mammography",weight:150,attribute:"ModalitiesInStudy",constraint:{contains:"MG"},required:!0},{id:"numberOfImages",attribute:"numberOfDisplaySetsWithImages",constraint:{greaterThan:2},required:!0}],toolGroupIds:["default"],displaySetSelectors:{RCC:{seriesMatchingRules:dn,studyMatchingRules:ln},LCC:{seriesMatchingRules:un,studyMatchingRules:ln},RMLO:{seriesMatchingRules:pn,studyMatchingRules:ln},LMLO:{seriesMatchingRules:mn,studyMatchingRules:ln},RCCPrior:{seriesMatchingRules:dn,studyMatchingRules:cn},LCCPrior:{seriesMatchingRules:un,studyMatchingRules:cn},RMLOPrior:{seriesMatchingRules:pn,studyMatchingRules:cn},LMLOPrior:{seriesMatchingRules:mn,studyMatchingRules:cn}},stages:[{name:"CC/MLO",viewportStructure:{type:"grid",layoutType:"grid",properties:{rows:2,columns:2}},viewports:[{viewportOptions:{toolGroupId:"default",displayArea:fn,allowUnmatchedView:!0},displaySets:[{id:"RCC"}]},{viewportOptions:{toolGroupId:"default",displayArea:gn,allowUnmatchedView:!0},displaySets:[{id:"LCC"}]},{viewportOptions:{toolGroupId:"default",displayArea:fn,allowUnmatchedView:!0},displaySets:[{id:"RMLO"}]},{viewportOptions:{toolGroupId:"default",displayArea:gn,allowUnmatchedView:!0},displaySets:[{id:"LMLO"}]}]},{name:"CC compare",viewportStructure:{type:"grid",layoutType:"grid",properties:{rows:2,columns:2}},viewports:[{viewportOptions:{toolGroupId:"default",displayArea:fn,flipHorizontal:!0,rotation:180},displaySets:[{id:"RCC"}]},{viewportOptions:{toolGroupId:"default",flipHorizontal:!0,displayArea:gn},displaySets:[{id:"LCC"}]},{viewportOptions:{toolGroupId:"default",displayArea:fn,flipHorizontal:!0},displaySets:[{id:"RCCPrior"}]},{viewportOptions:{toolGroupId:"default",displayArea:gn},displaySets:[{id:"LCCPrior"}]}]}],numberOfPriorsReferenced:0},yn={type:"SCALE",scale:1,storeAsInitialCamera:!0},hn={id:"@ohif/hpScale",description:"Has various hanging protocol grid layouts",name:"Scale Images",protocolMatchingRules:[{id:"OneOrMoreSeries",weight:25,attribute:"numberOfDisplaySetsWithImages",constraint:{greaterThan:0}}],toolGroupIds:["default"],displaySetSelectors:{defaultDisplaySetId:{seriesMatchingRules:[{weight:1,attribute:"numImageFrames",constraint:{greaterThan:{value:0}},required:!0},{attribute:"isDisplaySetFromUrl",weight:20,constraint:{equals:!0}}]}},defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",displayArea:yn,allowUnmatchedView:!0},displaySets:[{id:"defaultDisplaySetId",matchedDisplaySetsIndex:-1}]},stages:[{name:"Scale 1:1",stageActivation:{enabled:{minViewportsMatched:1}},viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0,displayArea:yn},displaySets:[{id:"defaultDisplaySetId"}]}]},{name:"Scale 1:15",stageActivation:{enabled:{minViewportsMatched:1}},viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0,displayArea:{...yn,scale:15}},displaySets:[{id:"defaultDisplaySetId"}]}]}],numberOfPriorsReferenced:-1},In={id:"default",locked:!0,name:"Default",createdDate:"2021-02-23T19:22:08.894Z",modifiedDate:"2023-04-01",availableTo:{},editableBy:{},protocolMatchingRules:[],toolGroupIds:["default"],numberOfPriorsReferenced:0,defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0,syncGroups:[{type:"hydrateseg",id:"sameFORId",source:!0,target:!0,options:{matchingRules:["sameFOR"]}}]},displaySets:[{id:"defaultDisplaySetId",matchedDisplaySetsIndex:-1}]},displaySetSelectors:{defaultDisplaySetId:{seriesMatchingRules:[{weight:10,attribute:"numImageFrames",constraint:{greaterThan:{value:0}}},{attribute:"isDisplaySetFromUrl",weight:20,constraint:{equals:!0}}]}},stages:[{name:"default",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{viewportType:"stack",viewportId:"default",toolGroupId:"default",initialImageOptions:{custom:"sopInstanceLocation"},syncGroups:[{type:"hydrateseg",id:"sameFORId",source:!0,target:!0}]},displaySets:[{id:"defaultDisplaySetId"}]}],createdDate:"2021-02-23T18:32:42.850Z"}]};const vn=function(){return[{name:In.id,protocol:In},{name:on.id,protocol:on},{name:Sn.id,protocol:Sn},{name:hn.id,protocol:hn},{name:Za.id,protocol:Za},{name:en.id,protocol:en}]},Dn={measurementsContextMenu:{inheritsFrom:"ohif.contextMenu",menus:[{id:"forExistingMeasurement",selector:({nearbyToolData:e})=>!!e,items:[{label:"Delete measurement",commands:"removeMeasurement"},{label:"Add Label",commands:"setMeasurementLabel"}]}]}},bn={"routes.customRoutes":{routes:{$push:[{path:"/custom",children:()=>ve.createElement("h1",{style:{color:"white"}},"Hello Custom Route")}]}}};const wn={"routes.customRoutes":{routes:{$push:[{path:"/datasources",children:function(){const[e]=(0,Ee.r)(),t=(0,xe.Zp)(),a=e.dataSources;return ve.createElement("div",{style:{width:"100%",height:"100%"}},ve.createElement("div",{className:"flex h-screen w-screen items-center justify-center"},ve.createElement("div",{className:"bg-secondary-dark mx-auto space-y-2 rounded-lg py-8 px-8 drop-shadow-md"},ve.createElement("img",{className:"mx-auto block h-14",src:"./ohif-logo.svg",alt:"OHIF"}),ve.createElement("div",{className:"space-y-2 pt-4 text-center"},a.filter((e=>"dicomjson"!==e.sourceName&&"dicomlocal"!==e.sourceName)).map((e=>ve.createElement("div",{key:e.sourceName},ve.createElement("h1",{className:"text-white"},e.configuration?.friendlyName||e.friendlyName),ve.createElement(Ot.$n,{type:Ot.Ny.NW.primary,className:Zt()("ml-2"),onClick:()=>{t({pathname:"/",search:`datasources=${e.sourceName}`})}},e.sourceName),ve.createElement("br",null))))))))}}]}}},En={"studyBrowser.studyMenuItems":{$push:[{id:"applyHangingProtocol",label:"Apply Hanging Protocol",iconName:"ViewportViews",items:[{id:"applyDefaultProtocol",label:"Default",commands:["loadStudy",{commandName:"setHangingProtocol",commandOptions:{protocolId:"default"}}]},{id:"applyMPRProtocol",label:"2x2 Grid",commands:["loadStudy",{commandName:"setHangingProtocol",commandOptions:{protocolId:"@ohif/mnGrid"}}]}]},{id:"showInOtherMonitor",label:"Launch On Second Monitor",iconName:"DicomTagBrowser",selector:({servicesManager:e})=>{const{multiMonitorService:t}=e.services;return t.isMultimonitor},commands:{commandName:"multimonitor",commandOptions:{hashParams:"&hangingProtocolId=@ohif/mnGrid8",commands:["loadStudy",{commandName:"setHangingProtocol",commandOptions:{protocolId:"@ohif/mnGrid8"}}]}}}]}},xn={"routes.customRoutes":{routes:[],notFoundRoute:null}},{formatDate:Mn}=o.Wp,Cn={"studyBrowser.studyMenuItems":[],"studyBrowser.thumbnailMenuItems":[{id:"tagBrowser",label:"Tag Browser",iconName:"DicomTagBrowser",onClick:({commandsManager:e,displaySetInstanceUID:t})=>{e.runCommand("openDICOMTagViewer",{displaySetInstanceUID:t})}}],"studyBrowser.sortFunctions":[{label:"Series Number",sortFunction:(e,t)=>e?.SeriesNumber-t?.SeriesNumber},{label:"Series Date",sortFunction:(e,t)=>{const a=new Date(Mn(e?.SeriesDate));return new Date(Mn(t?.SeriesDate)).getTime()-a.getTime()}}],"studyBrowser.viewPresets":[{id:"list",iconName:"ListView",selected:!1},{id:"thumbnails",iconName:"ThumbnailView",selected:!0}],"studyBrowser.studyMode":"all","studyBrowser.thumbnailDoubleClickCallback":{callbacks:[({activeViewportId:e,servicesManager:t,commandsManager:a,isHangingProtocolLayout:n})=>async s=>{const{hangingProtocolService:r,uiNotificationService:i}=t.services;let o=[];const c=e;try{o=r.getViewportsRequireUpdate(c,s,n)}catch(e){console.warn(e),i.show({title:"Thumbnail Double Click",message:"The selected display sets could not be added to the viewport.",type:"error",duration:3e3})}a.run("setDisplaySetsForViewports",{viewportsToUpdate:o})}]}},Pn={"ohif.overlayItem":function(e){if(this.condition&&!this.condition(e))return null;const{instance:t}=e,a=t&&this.attribute?t[this.attribute]:this.contentF&&"function"==typeof this.contentF?this.contentF(e):null;return a?ve.createElement("span",{className:"overlay-item flex flex-row",style:{color:this.color||void 0},title:this.title||""},this.label&&ve.createElement("span",{className:"mr-1 shrink-0"},this.label),ve.createElement("span",{className:"font-light"},a)):null}},Nn={"ohif.contextMenu":{$transform:function(e){const t={...this};t.menus=this.menus.map((e=>({...e})));for(const a of t.menus){const{items:t}=a;a.items=[];for(const n of t)a.items.push(e.transform(n))}return t}}},Un={"ui.contextMenu":Ot.tz},On={"ohif.menuContent":function(e){const{item:t,commandsManager:a,servicesManager:n,...s}=e,r=function(e){const{item:t}=e,r=t.selector&&!t.selector({servicesManager:n});return ve.createElement(we._26,{disabled:r,onSelect:()=>{a.runAsync(t.commands,{...t.commandOptions,...s})},className:"gap-[6px]"},t.iconName&&ve.createElement(we.FI1.ByName,{name:t.iconName,className:"-ml-1"}),t.label)};return t.items?ve.createElement(we.lvB,null,ve.createElement(we.nVd,{className:"gap-[6px]"},t.iconName&&ve.createElement(we.FI1.ByName,{name:t.iconName,className:"-ml-1"}),t.label),ve.createElement(we.dce,null,ve.createElement(we.M56,null,t.items.map((t=>r({...e,item:t})))))):r({...e,item:t})}};const Rn=function({itemLabel:e,itemList:t,onItemClicked:a}){const{servicesManager:n}=(0,o.Jg)(),{t:s}=(0,Me.Bd)("DataSourceConfiguration"),[r,i]=(0,ve.useState)("");(0,ve.useEffect)((()=>{i("")}),[t]);const c=n.services.customizationService.getCustomization("ui.loadingIndicatorProgress");return ve.createElement("div",{className:"flex min-h-[1px] grow flex-col gap-4"},ve.createElement("div",{className:"flex items-center justify-between"},ve.createElement("div",{className:"text-primary-light text-[20px]"},s(`Select ${e}`)),ve.createElement(Ot.Cv,{className:"max-w-[40%] grow",value:r,onDebounceChange:i,placeholder:s(`Search ${e} list`)})),ve.createElement("div",{className:"relative flex min-h-[1px] grow flex-col bg-black text-[14px]"},null==t?ve.createElement(c,{className:"h-full w-full"}):0===t.length?ve.createElement("div",{className:"text-primary-light flex h-full flex-col items-center justify-center px-6 py-4"},ve.createElement(we.FI1.ToolMagnify,{className:"mb-4"}),ve.createElement("span",null,s(`No ${e} available`))):ve.createElement(ve.Fragment,null,ve.createElement("div",{className:"bg-secondary-dark px-3 py-1.5 text-white"},s(e)),ve.createElement("div",{className:"ohif-scrollbar overflow-auto"},t.filter((e=>!r||e.name.toLowerCase().includes(r.toLowerCase()))).map((e=>ve.createElement("div",{className:Zt()("hover:text-primary-light hover:bg-primary-dark group mx-2 flex items-center justify-between px-6 py-2","rounded border-transparent border-b-secondary-light border-[1px] hover:border-primary-light"),key:e.id},ve.createElement("div",null,e.name),ve.createElement(Ot.$n,{onClick:()=>a(e),className:"invisible group-hover:visible",endIcon:ve.createElement(we.FI1.ByName,{name:"arrow-left"})},s("Select")))))))))},Tn="text-ellipsis whitespace-nowrap overflow-hidden";const An=function({configurationAPI:e,configuredItems:t,onHide:a}){const{t:n}=(0,Me.Bd)("DataSourceConfiguration"),[s,r]=(0,ve.useState)(),[i,o]=(0,ve.useState)(t),[c,l]=(0,ve.useState)(),[u]=(0,ve.useState)(e.getItemLabels()),[d,m]=(0,ve.useState)(u.length===t.length),p=d?i.length-2:i.length-1;(0,ve.useEffect)((()=>{let t=!0;return l(null),r(null),0===i.length?e.initialize().then((e=>{t&&r(e)})).catch((e=>l(e.message))):d||i.length!==u.length?e.setCurrentItem(i[p]).then((e=>{t&&r(e)})).catch((e=>l(e.message))):(e.setCurrentItem(i[i.length-1]),a()),()=>{t=!1}}),[i,e,a,u,d,p]);const g=e=>e<i.length?Zt()("bg-black/[.4]",e!==u.length-1?"hover:bg-transparent active:bg-secondary-dark":""):"bg-transparent",f=e=>e===p+1?Zt()("border-2","border-solid","border-primary-light"):e<i.length?"border border-solid border-primary-active hover:border-primary-light active:border-white":"border border-dashed border-secondary-light",S=e=>e<=i.length?"text-primary-light":"text-primary";return ve.createElement("div",{className:"flex h-[calc(100vh-300px)] select-none flex-col gap-4 pt-0.5"},ve.createElement("div",{className:"flex gap-4"},u.map(((e,t)=>{return ve.createElement("div",{key:e,className:Zt()("flex min-w-[1px] shrink basis-[200px] flex-col gap-1 rounded-md p-3.5",(a=t,a!==u.length-1&&a<i.length?"cursor-pointer":"cursor-auto"),g(t),f(t),S(t)),onClick:d&&t<p||t<=p?()=>{m(!1),o((e=>e.slice(0,t)))}:void 0},ve.createElement("div",{className:"text- flex items-center gap-2"},t<i.length?ve.createElement(we.FI1.ByName,{name:"status-tracked"}):ve.createElement(we.FI1.ByName,{name:"status-untracked"}),ve.createElement("div",{className:Zt()(Tn)},n(e))),t<i.length?ve.createElement("div",{className:Zt()("text-[14px] text-white",Tn)},i[t].name):ve.createElement("br",null));var a}))),ve.createElement("div",{className:"h-0.5 w-full shrink-0 bg-black"}),c?ve.createElement("div",{className:"flex min-h-[1px] grow flex-col gap-4"},ve.createElement("div",{className:"text-primary-light text-[20px]"},n(`Error fetching ${u[i.length]} list`)),ve.createElement("div",{className:"grow bg-black p-4 text-[14px]"},c)):ve.createElement(Rn,{itemLabel:u[p+1],itemList:s,onItemClicked:e=>{m(!1),o((t=>[...t.slice(0,p+1),e]))}}))};const kn=function({servicesManager:e,extensionManager:t}){const{t:a}=(0,Me.Bd)("DataSourceConfiguration"),{show:n,hide:s}=(0,we.hSE)(),{customizationService:r}=e.services,[i,o]=(0,ve.useState)(),[c,l]=(0,ve.useState)();(0,ve.useEffect)((()=>{let e=!0;const a=async()=>{const a=t.getActiveDataSourceDefinition();if(!a?.configuration?.configurationAPI)return;const{factory:n}=r.getCustomization(a.configuration.configurationAPI)??{factory:()=>null};if(!n)return;const s=n(a.sourceName);o(s),l(null),s.getConfiguredItems().then((t=>{e&&l(t)}))},n=t.subscribe(t.EVENTS.ACTIVE_DATA_SOURCE_CHANGED,a);return a(),()=>{e=!1,n.unsubscribe()}}),[]);const u=(0,ve.useCallback)((()=>{n({content:An,title:a("Configure Data Source"),contentProps:{configurationAPI:i,configuredItems:c,onHide:s}})}),[i,c]);return(0,ve.useEffect)((()=>{i&&c&&c.length!==i.getItemLabels().length&&u()}),[i,c,u]),c?ve.createElement("div",{className:"text-aqua-pale flex items-center overflow-hidden"},ve.createElement(we.FI1.Settings,{className:"mr-2.5 h-3.5 w-3.5 shrink-0 cursor-pointer",onClick:u}),c.map(((e,t)=>ve.createElement("div",{key:t,className:"flex overflow-hidden"},ve.createElement("div",{key:t,className:"overflow-hidden text-ellipsis whitespace-nowrap"},e.name),t!==c.length-1&&ve.createElement("div",{className:"px-2.5"},"|"))))):ve.createElement(ve.Fragment,null)};var Vn=function(e){return e[e.projects=0]="projects",e[e.locations=1]="locations",e[e.datasets=2]="datasets",e[e.dicomStores=3]="dicomStores",e}(Vn||{});const Ln="https://cloudresourcemanager.googleapis.com/v1",Fn="https://healthcare.googleapis.com/v1";class Bn{constructor(e,t,a){this._extensionManager=void 0,this._fetchOptions=void 0,this._dataSourceName=void 0,this.getItemLabels=()=>["Project","Location","Data set","DICOM store"],this._dataSourceName=e,this._extensionManager=a;const n=t.services.userAuthenticationService;this._fetchOptions={method:"GET",headers:n.getAuthorizationHeader()}}async initialize(){const e=`${Ln}/projects`,t=await Bn._doFetch(e,Vn.projects,this._fetchOptions);if(!t?.length)return[];return t.map((e=>({id:e.projectId,name:e.name,itemType:Vn.projects,url:`${Fn}/projects/${e.projectId}`})))}async setCurrentItem(e){const t=e;if(t.itemType===Vn.dicomStores){const e=`${t.url}/dicomWeb`,a=JSON.parse(JSON.stringify(this._extensionManager.getDataSourceDefinition(this._dataSourceName)));return a.configuration={...a.configuration,wadoUriRoot:e,qidoRoot:e,wadoRoot:e},this._extensionManager.updateDataSourceConfiguration(a.sourceName,a.configuration),[]}const a=t.itemType+1,n=`${Vn[a]}`,s=`${t.url}/${n}`,r=await Bn._doFetch(s,a,this._fetchOptions);if(!r?.length)return[];return r.map((e=>{const t=e.name.split("/");return{id:e.name,name:t[t.length-1],itemType:a,url:`${Fn}/${e.name}`}}))}async getConfiguredItems(){const e=this._extensionManager.getDataSourceDefinition(this._dataSourceName).configuration.wadoUriRoot,t=e.indexOf("projects"),a=e.substring(t).split("/"),n=[];for(let e=0;e<4&&2*(e+1)<a.length;e+=1)if(e===Vn.projects){const t=a[1],s=`${Ln}/projects/${t}`,r=(await Bn._doFetch(s,Vn.projects,this._fetchOptions))[0];n.push({id:r.projectId,name:r.name,itemType:e,url:`${Fn}/projects/${r.projectId}`})}else{const t=a.slice(0,2*e+2).join("/");n.push({id:t,name:a[2*e+1],itemType:e,url:`${Fn}/${t}`})}return n}static async _doFetch(e,t,a={},n={}){try{const s=new URL(e);s.search=new URLSearchParams(n).toString();const r=await fetch(s,a),i=await r.json();if(r.status>=200&&r.status<300&&null!=i){if(null!=i.nextPageToken){n.pageToken=i.nextPageToken;const s=await this._doFetch(e,t,a,n);i[Vn[t]]=i[Vn[t]].concat(s)}return i[Vn[t]]?i[Vn[t]]:i.name?[i]:[]}{const e=i?.error?.message||`Error returned from Google Cloud Healthcare: ${r.status} - ${r.statusText}`;throw new Error(e)}}catch(e){throw new Error(e?.message||"Error occurred during fetch request.")}}}function $n({servicesManager:e,extensionManager:t}){return{"ohif.dataSourceConfigurationComponent":kn.bind(null,{servicesManager:e,extensionManager:t}),"ohif.dataSourceConfigurationAPI.google":a=>new Bn(a,e,t)}}const Hn={progressDropdownWithServiceComponent:Jt},{sortingCriteria:zn}=o.Wp,_n={sortingCriteria:zn.seriesSortCriteria.seriesInfoSortingCriteria},qn={customOnDropHandler:()=>Promise.resolve({handled:!1})},Wn={"ui.loadingIndicatorProgress":we.JxG},jn={"ui.loadingIndicatorTotalPercent":we.pTz},Gn={"ui.progressLoadingBar":we.dDv},Yn={"ui.viewportActionCorner":we.R2R},Jn={"ui.labellingComponent":we.ndl};var Xn=a(16076);const Kn=Xn.A.t("MeasurementTable:Track measurements for this series?"),Qn=Xn.A.t("Do you want to add this measurement to the existing report?"),Zn=Xn.A.t("You have existing tracked measurements. What would you like to do with your existing tracked measurements?"),es=Xn.A.t("MeasurementTable:Track measurements for this series?"),ts=Xn.A.t("Measurements cannot span across multiple studies. Do you want to save your tracked measurements?"),as=Xn.A.t("Do you want to continue tracking measurements for this study?"),ns=Xn.A.t("Do you want to open this Segmentation?"),ss=Xn.A.t("Do you want to open this Segmentation?"),rs=Xn.A.t("There are unsaved measurements. Do you want to save it?"),is={"ui.notificationComponent":we.Tqg,"viewportNotification.beginTrackingMessage":Kn,"viewportNotification.trackNewSeriesMessage":Qn,"viewportNotification.discardSeriesMessage":Zn,"viewportNotification.trackNewStudyMessage":es,"viewportNotification.discardStudyMessage":ts,"viewportNotification.hydrateSRMessage":as,"viewportNotification.hydrateRTMessage":ns,"viewportNotification.hydrateSEGMessage":ss,"viewportNotification.discardDirtyMessage":rs};var os=a(88123);const cs={"ohif.aboutModal":function(){const{os:e,version:t,name:a}=(0,os.A)(),n=`${a[0].toUpperCase()}${a.substr(1)} ${t}`,[s,r]="3.10.1".split("-");return ve.createElement(we.VTU,{className:"w-[400px]"},ve.createElement(we.VTU.ProductName,null,"OHIF Viewer"),ve.createElement(we.VTU.ProductVersion,null,s),r&&ve.createElement(we.VTU.ProductBeta,null,r),ve.createElement(we.VTU.Body,null,ve.createElement(we.VTU.DetailItem,{label:"Commit Hash",value:"aaba8bf1b04be6c00a88f1f5f29cb24133b0c39e"}),ve.createElement(we.VTU.DetailItem,{label:"Current Browser & OS",value:`${n}, ${e}`}),ve.createElement(we.VTU.SocialItem,{icon:"SocialGithub",url:"OHIF/Viewers",text:"github.com/OHIF/Viewers"})))}},{availableLanguages:ls,defaultLanguage:us,currentLanguage:ds}=Xn.A;const ms={"ohif.userPreferencesModal":function({hide:e}){const{hotkeysManager:t}=(0,o.Jg)(),{t:a}=(0,Me.Bd)("UserPreferencesModal"),{hotkeyDefinitions:n={},hotkeyDefaults:s={}}=t,r=ds(),[i,c]=(0,ve.useState)({hotkeyDefinitions:n,languageValue:r.value});return ve.createElement(we.xMy,null,ve.createElement(we.xMy.Body,null,ve.createElement("div",{className:"mb-3 flex items-center space-x-14"},ve.createElement(we.xMy.SubHeading,null,a("Language")),ve.createElement(we.l6P,{defaultValue:i.languageValue,onValueChange:e=>{c((t=>({...t,languageValue:e})))}},ve.createElement(we.bqE,{className:"w-60","aria-label":"Language"},ve.createElement(we.yvm,{placeholder:a("Select language")})),ve.createElement(we.gCo,null,ls.map((e=>ve.createElement(we.ebT,{key:e.value,value:e.value},e.label)))))),ve.createElement(we.xMy.SubHeading,null,a("Hotkeys")),ve.createElement(we.xMy.HotkeysGrid,null,Object.entries(i.hotkeyDefinitions).map((([e,t])=>ve.createElement(we.xMy.Hotkey,{key:e,label:a(t.label),value:t.keys,onChange:t=>((e,t)=>{c((a=>({...a,hotkeyDefinitions:{...a.hotkeyDefinitions,[e]:{...a.hotkeyDefinitions[e],keys:t}}})))})(e,t),placeholder:t.keys,hotkeys:o.ot}))))),ve.createElement(we.esu,null,ve.createElement(we.esu.Left,null,ve.createElement(we.esu.Auxiliary,{onClick:()=>{c((e=>({...e,languageValue:us.value,hotkeyDefinitions:s}))),t.restoreDefaultBindings()}},a("Reset to defaults"))),ve.createElement(we.esu.Right,null,ve.createElement(we.esu.Secondary,{onClick:()=>{o.ot.stopRecord(),o.ot.unpause(),e()}},a("Cancel")),ve.createElement(we.esu.Primary,{onClick:()=>{i.languageValue!==r.value&&Xn.A.changeLanguage(i.languageValue),t.setHotkeys(i.hotkeyDefinitions),o.ot.stopRecord(),o.ot.unpause(),e()}},a("Save")))))}};const ps={"ohif.createReportDialog":function({dataSources:e,hide:t,onSave:a,onCancel:n}){const{servicesManager:s}=(0,o.Jg)(),[r,i]=(0,ve.useState)(e?.[0]?.value??null),[c,l]=(0,ve.useState)(null),[u,d]=(0,ve.useState)(""),{displaySetService:m}=s.services,p=(0,ve.useMemo)((()=>{const e=m.getDisplaySetCache();return[{value:null,description:null,label:"Create new series"},...Array.from(e.values()).filter((e=>"SR"===e.Modality)).map((e=>({value:e.SeriesInstanceUID,description:e.SeriesDescription,label:`${e.SeriesDescription} ${e.SeriesDate}/${e.SeriesTime} ${e.SeriesNumber}`})))]}),[m]);(0,ve.useEffect)((()=>{const e=p.find((e=>e.value===c)),t=c&&e?.description?e.description:"";d(t)}),[c,p]);const g=(0,ve.useCallback)((()=>{a({reportName:u,dataSource:r,series:c}),t()}),[r,c,u,t,a]),f=(0,ve.useCallback)((()=>{n(),t()}),[n,t]),S=e?.length>1;return ve.createElement("div",{className:"text-foreground flex min-w-[400px] max-w-md flex-col"},ve.createElement("div",{className:"flex flex-col gap-4"},ve.createElement("div",{className:"flex gap-4"},S&&ve.createElement(ve.Fragment,null,ve.createElement("div",{className:"mt-1 w-1/2"},ve.createElement("div",{className:"mb-1 pl-1 text-base"},"Data source"),ve.createElement(we.l6P,{value:r,onValueChange:i},ve.createElement(we.bqE,null,ve.createElement(we.yvm,{placeholder:"Select a data source"})),ve.createElement(we.gCo,null,e.map((e=>ve.createElement(we.ebT,{key:e.value,value:e.value},e.label)))))),ve.createElement("div",{className:S?"mt-1 w-1/2":"mt-1 w-full"},ve.createElement("div",{className:"mb-1 pl-1 text-base"},"Series"),ve.createElement(we.l6P,{value:c,onValueChange:l},ve.createElement(we.bqE,null,ve.createElement(we.yvm,{placeholder:"Select a series"})),ve.createElement(we.gCo,null,p.map((e=>ve.createElement(we.ebT,{key:e.value,value:e.value},e.label)))))))),ve.createElement("div",{className:"flex items-end gap-4"},!S&&ve.createElement("div",{className:"w-1/3"},ve.createElement("div",{className:"mb-1 pl-1 text-base"},"Series"),ve.createElement(we.l6P,{value:c,onValueChange:l},ve.createElement(we.bqE,null,ve.createElement(we.yvm,{placeholder:"Select a series"})),ve.createElement(we.gCo,null,p.map((e=>ve.createElement(we.ebT,{key:e.value,value:e.value},e.label)))))),ve.createElement(we.fa0,{value:u,onChange:d,submitOnEnter:!0,className:"flex-1"},ve.createElement(we.fa0.Field,{className:"mb-0"},ve.createElement(we.fa0.Input,{placeholder:"Report name",disabled:!!c})))),ve.createElement("div",{className:"flex justify-end gap-2"},ve.createElement(we.fa0,null,ve.createElement(we.fa0.Actions,null,ve.createElement(we.fa0.ActionsSecondary,{onClick:f},"Cancel"),ve.createElement(we.fa0.ActionsPrimary,{onClick:g},"Save"))))))}},gs={"ohif.hotkeyBindings":o.NT.hotkeyBindings};function fs(e,t=20,a=25){return new Promise((n=>{let s=0;const r=setInterval((()=>{(document.querySelector(e)||s>=t)&&(clearInterval(r),n()),s++}),a)}))}const Ss={"ohif.tours":[{id:"basicViewerTour",route:"/viewer",steps:[{id:"scroll",title:"Scrolling Through Images",text:"You can scroll through the images using the mouse wheel or scrollbar.",attachTo:{element:".viewport-element",on:"top"},advanceOn:{selector:".cornerstone-viewport-element",event:"CORNERSTONE_TOOLS_MOUSE_WHEEL"},beforeShowPromise:()=>fs(".viewport-element")},{id:"zoom",title:"Zooming In and Out",text:"You can zoom the images using the right click.",attachTo:{element:".viewport-element",on:"left"},advanceOn:{selector:".cornerstone-viewport-element",event:"CORNERSTONE_TOOLS_MOUSE_UP"},beforeShowPromise:()=>fs(".viewport-element")},{id:"pan",title:"Panning the Image",text:"You can pan the images using the middle click.",attachTo:{element:".viewport-element",on:"top"},advanceOn:{selector:".cornerstone-viewport-element",event:"CORNERSTONE_TOOLS_MOUSE_UP"},beforeShowPromise:()=>fs(".viewport-element")},{id:"windowing",title:"Adjusting Window Level",text:"You can modify the window level using the left click.",attachTo:{element:".viewport-element",on:"left"},advanceOn:{selector:".cornerstone-viewport-element",event:"CORNERSTONE_TOOLS_MOUSE_UP"},beforeShowPromise:()=>fs(".viewport-element")},{id:"length",title:"Using the Measurement Tools",text:"You can measure the length of a region using the Length tool.",attachTo:{element:'[data-cy="MeasurementTools-split-button-primary"]',on:"bottom"},advanceOn:{selector:'[data-cy="MeasurementTools-split-button-primary"]',event:"click"},beforeShowPromise:()=>fs('[data-cy="MeasurementTools-split-button-primary]')},{id:"drawAnnotation",title:"Drawing Length Annotations",text:"Use the length tool on the viewport to measure the length of a region.",attachTo:{element:".viewport-element",on:"right"},advanceOn:{selector:"body",event:"event::measurement_added"},beforeShowPromise:()=>fs(".viewport-element")},{id:"trackMeasurement",title:"Tracking Measurements in the Panel",text:"Click yes to track the measurements in the measurement panel.",attachTo:{element:'[data-cy="prompt-begin-tracking-yes-btn"]',on:"bottom"},advanceOn:{selector:'[data-cy="prompt-begin-tracking-yes-btn"]',event:"click"},beforeShowPromise:()=>fs('[data-cy="prompt-begin-tracking-yes-btn"]')},{id:"openMeasurementPanel",title:"Opening the Measurements Panel",text:"Click the measurements button to open the measurements panel.",attachTo:{element:"#trackedMeasurements-btn",on:"left-start"},advanceOn:{selector:"#trackedMeasurements-btn",event:"click"},beforeShowPromise:()=>fs("#trackedMeasurements-btn")},{id:"scrollAwayFromMeasurement",title:"Scrolling Away from a Measurement",text:"Scroll the images using the mouse wheel away from the measurement.",attachTo:{element:".viewport-element",on:"left"},advanceOn:{selector:".cornerstone-viewport-element",event:"CORNERSTONE_TOOLS_MOUSE_WHEEL"},beforeShowPromise:()=>fs(".viewport-element")},{id:"jumpToMeasurement",title:"Jumping to Measurements in the Panel",text:"Click the measurement in the measurement panel to jump to it.",attachTo:{element:'[data-cy="data-row"]',on:"left-start"},advanceOn:{selector:'[data-cy="data-row"]',event:"click"},beforeShowPromise:()=>fs('[data-cy="data-row"]')},{id:"changeLayout",title:"Changing Layout",text:"You can change the layout of the viewer using the layout button.",attachTo:{element:'[data-cy="Layout"]',on:"bottom"},advanceOn:{selector:'[data-cy="Layout"]',event:"click"},beforeShowPromise:()=>fs('[data-cy="Layout"]')},{id:"selectLayout",title:"Selecting the MPR Layout",text:"Select the MPR layout to view the images in MPR mode.",attachTo:{element:'[data-cy="MPR"]',on:"left-start"},advanceOn:{selector:'[data-cy="MPR"]',event:"click"},beforeShowPromise:()=>fs('[data-cy="MPR"]')}],tourOptions:{useModalOverlay:!0,defaultStepOptions:{buttons:[{text:"Skip all",action(){this.complete()},secondary:!0}]}}}]};const ys=({displaySets:e})=>{const t=e[0],{axis:a,series:n}=t.instance.chartData;return ve.createElement(we.bl6,{showLegend:!0,legendWidth:150,axis:{x:{label:a.x.label,indexRef:0,type:"x",range:{min:0}},y:{label:a.y.label,indexRef:1,type:"y"}},series:n})};var hs=a(48405);const Is=o.Ay.classes.MetadataProvider;const vs=e=>{const t=e?.images[0]?.ViewCodeSequence[0];if(!t)return;const{CodingSchemeDesignator:a,CodeValue:n}=t;return a&&n?`${a}:${n}`:void 0},Ds=e=>{const t=e?.images?.[0]?.SharedFunctionalGroupsSequence?.[0]?.FrameAnatomySequence?.[0];if(!t)return;const a=t?.FrameLaterality;return a};const bs=o.Ly.MetadataProvider;const ws=({SeriesInstanceUID:e,StudyInstanceUID:t})=>{const{instances:a}=o.H8.getSeries(t,e);if(!a?.length)return;const n=a[0].Modality;if(!n||"PT"!==n)return;const s=a.map((e=>e.imageId)),r=[];try{if(s.forEach((e=>{const t=function(e){const t=Is.get("instance",e);if(!t)throw new Error("dicom metadata are required");if(void 0===t.SeriesDate||void 0===t.SeriesTime||void 0===t.CorrectedImage||void 0===t.Units||!t.RadiopharmaceuticalInformationSequence||void 0===t.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife||void 0===t.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose||void 0===t.DecayCorrection||void 0===t.AcquisitionDate||void 0===t.AcquisitionTime||void 0===t.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartDateTime&&void 0===t.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime)throw new Error("required metadata are missing");void 0===t.PatientWeight&&console.warn("PatientWeight missing from PT instance metadata");const a={CorrectedImage:t.CorrectedImage,Units:t.Units,RadionuclideHalfLife:t.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife,RadionuclideTotalDose:t.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose,RadiopharmaceuticalStartDateTime:t.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartDateTime,RadiopharmaceuticalStartTime:t.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime,DecayCorrection:t.DecayCorrection,PatientWeight:t.PatientWeight,SeriesDate:t.SeriesDate,SeriesTime:t.SeriesTime,AcquisitionDate:t.AcquisitionDate,AcquisitionTime:t.AcquisitionTime};if(t[70531e3]||void 0!==t[70531e3]||t[70531009]||void 0!==t[70531009]){const e={SUVScaleFactor:t[70531e3],ActivityConcentrationScaleFactor:t[70531009]};a.PhilipsPETPrivateGroup=e}return t["0009100d"]&&void 0!==t["0009100d"]&&(a.GEPrivatePostInjectionDateTime=t["0009100d"]),t.FrameReferenceTime&&void 0!==t.FrameReferenceTime&&(a.FrameReferenceTime=t.FrameReferenceTime),t.ActualFrameDuration&&void 0!==t.ActualFrameDuration&&(a.ActualFrameDuration=t.ActualFrameDuration),t.PatientSex&&void 0!==t.PatientSex&&(a.PatientSex=t.PatientSex),t.PatientSize&&void 0!==t.PatientSize&&(a.PatientSize=t.PatientSize),a}(e);t&&r.push(t)})),!r.length)return;const e=(0,hs.C)(r);r.forEach(((t,a)=>{bs.addCustomMetadata(s[a],"scalingModule",e[a])}))}catch(e){console.log(e)}};function Es(e){return!("object"==typeof e||Array.isArray(e))}const xs=new Set(["DS","FL","FD","IS","OD","OF","OL","OV","SL","SS","SV","UL","US","UV"]);function Ms(e,t){if(Array.isArray(e)){return e.map((e=>Es(e)?e:Ms(e,t)))}return Es(e)||Object.keys(e).forEach((a=>{null===e[a].Value&&e[a].vr?delete e[a].Value:Array.isArray(e[a].Value)&&e[a].vr&&(1===e[a].Value.length&&e[a].Value[0].BulkDataURI?(t?.dataSourceConfig&&L(e[a].Value[0],t,t.dataSourceConfig),e[a].BulkDataURI=e[a].Value[0].BulkDataURI,"https:"===window.location.protocol&&e[a].BulkDataURI.startsWith("http:")&&(e[a].BulkDataURI=e[a].BulkDataURI.replace("http:","https:")),delete e[a].Value):xs.has(e[a].vr)?e[a].Value=e[a].Value.map((e=>+e)):e[a].Value=e[a].Value.map((e=>Ms(e,t))))})),e}function Cs(e){const t=Ms(e);return JSON.parse(JSON.stringify(t))}function Ps(e,t=["ImageType"]){for(const a of t)"string"==typeof e[a]&&(e[a]=e[a].split("\\"));return e}const Ns=e=>({type:"uiStateId",uiState:{},setUIState:(t,a)=>e((e=>({uiState:{...e.uiState,[t]:a}})),!1,"setUIState"),clearUIState:()=>e({uiState:{}},!1,"clearUIState")}),Us=(0,Ca.vt)()(Ns);var Os=a(53860);function Rs({hide:e,onSave:t,placeholder:a="Enter value",defaultValue:n="",submitOnEnter:s}){return ve.createElement(we.fa0,{submitOnEnter:s,defaultValue:n},ve.createElement(we.fa0.Field,null,ve.createElement(we.fa0.Input,{placeholder:a})),ve.createElement(we.fa0.Actions,null,ve.createElement(we.fa0.ActionsSecondary,{onClick:e},"Cancel"),ve.createElement(we.fa0.ActionsPrimary,{onClick:a=>{t(a),e()}},"Save")))}async function Ts({uiDialogService:e,defaultValue:t="",title:a="Annotation",placeholder:n="",submitOnEnter:s=!0}){return await new Promise((r=>{e.show({id:"dialog-enter-annotation",content:Rs,title:a,shouldCloseOnEsc:!0,contentProps:{onSave:e=>{r(e)},placeholder:n,defaultValue:t,submitOnEnter:s}})}))}async function As({measurement:e,uiDialogService:t,labelConfig:a,renderContent:n=we.ndl,element:s}){const r=!!a&&a.exclusive,i=a?a.items:[];return await new Promise(((a,o)=>{t.show({id:"select-annotation",title:"Annotation",content:n,contentProps:{labellingDoneCallback:n=>{if(t.hide("select-annotation"),e&&"string"==typeof n){const t=ia.annotation.state.getAnnotation(e.uid);(0,Os.setAnnotationLabel)(t,s,n)}a(n)},measurementData:e,componentClassName:{},labelData:i,exclusive:r}})}))}var ks=a(69175);const Vs=function({value:e,hide:t,onSave:a}){const[n,s]=(0,ve.useState)(e);return ve.createElement("div",null,ve.createElement(ks.xk,{color:n,onChange:e=>{s(e.rgb)},presetColors:[],width:300}),ve.createElement(we.esu,null,ve.createElement(we.esu.Right,null,ve.createElement(we.esu.Secondary,{onClick:t},"Cancel"),ve.createElement(we.esu.Primary,{onClick:()=>{t(),a(n)}},"Save"))))};const Ls=function({servicesManager:e},t,a){const{measurementService:n,customizationService:s,toolGroupService:r,uiDialogService:i}=e.services,{viewportId:o,StudyInstanceUID:c,SeriesInstanceUID:l,measurementId:u,toolName:d}=a;return new Promise((e=>{(async()=>{if(r.getToolGroupForViewport(o).getToolConfiguration(d).getTextCallback)e({StudyInstanceUID:c,SeriesInstanceUID:l,viewportId:o});else{const t=s.getCustomization("measurementLabels"),a=n.getMeasurement(u),r=s.getCustomization("ui.labellingComponent"),d=await As({measurement:a,uiDialogService:i,labelConfig:t,renderContent:r});n.update(u,{...d},!0),e({StudyInstanceUID:c,SeriesInstanceUID:l,viewportId:o})}})()}))};var Fs=a(3329);function Bs(e,t){we.FI1.addIcon(e,t)}function $s(){return $s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},$s.apply(null,arguments)}function Hs({buttonSectionId:e,title:t}){const{servicesManager:a}=(0,o.Jg)(),{t:n}=(0,Me.Bd)(),{toolbarService:s,customizationService:r}=a.services,[i,c]=(0,ve.useState)(!1),{toolbarButtons:l,onInteraction:u}=(0,o.tR)({servicesManager:a,buttonSection:e});if(!l.length)return null;if(!l.every((e=>e.componentProps.buttonSection)))throw new Error("Toolbox accepts only button sections at the top level, not buttons. Create at least one button section.");const d=l.reduce(((e,t)=>{if(e)return e;const a=t.componentProps.buttonSection;return(e=>{for(const t of e){if(t.componentProps.isActive)return t.componentProps.options;if(t.componentProps.buttonSection){const e=s.getButtonPropsInButtonSection(t.componentProps.buttonSection).find((e=>e.isActive));if(e)return e.options}}return null})(s.getButtonSection(a))}),null),m=({itemId:e})=>{u?.({itemId:e})},p=r.getCustomization(`${e}.config`);return ve.createElement(we.aUM,null,ve.createElement(we.aUM.Header,{className:"flex items-center justify-between"},ve.createElement("span",null,n(t)),p&&ve.createElement("div",{className:"ml-auto mr-2"},ve.createElement(we.FI1.Settings,{className:"text-primary h-4 w-4",onClick:e=>{e.stopPropagation(),c(!i)}}))),ve.createElement(we.aUM.Content,{className:"bg-muted flex-shrink-0 border-none"},i&&ve.createElement(p,null),l.map((e=>{const t=e.componentProps.buttonSection,n=s.getButtonSection(t);return ve.createElement("div",{key:t,className:"bg-muted flex flex-wrap space-x-2 py-2 px-1"},n.map((e=>{if(!e)return null;const{id:t,Component:n,componentProps:s}=e;return ve.createElement("div",{key:t,className:Zt()("ml-1")},ve.createElement(n,$s({},s,{id:t,onInteraction:m,size:"toolbox",servicesManager:a})))})))})),d&&ve.createElement("div",{className:"bg-primary-dark mt-1 h-auto px-2"},ve.createElement(we.k_3,{options:d}))))}var zs=a(52675);const _s={id:nt,preRegistration:function({servicesManager:e,configuration:t={},commandsManager:a}){const{toolbarService:n,cineService:s,viewportGridService:r}=e.services;n.registerEventForToolbarUpdate(s,[s.EVENTS.CINE_STATE_CHANGED]),o.H8.subscribe(o.H8.EVENTS.INSTANCES_ADDED,ws),o.H8.subscribe(o.H8.EVENTS.SERIES_UPDATED,ws),function({servicesManager:e}){const{hangingProtocolService:t}=e.services;t.addCustomAttribute("ViewCode","View Code Designator:Value",vs),t.addCustomAttribute("Laterality","Laterality of object",Ds)}({servicesManager:e});const i=e=>{Object.entries(e).forEach((([e,t])=>{[r.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED,r.EVENTS.VIEWPORTS_READY].includes(e)&&r.subscribe(e,(e=>{const n=e?.viewportId??r.getActiveViewportId();a.run(t,{viewportId:n})}))}))};n.subscribe(n.EVENTS.TOOL_BAR_MODIFIED,(e=>{const{buttons:t}=e;for(const[e,a]of Object.entries(t)){const{groupId:e,items:t,listeners:n}=a.props||{};e&&t&&t.forEach((e=>{e.listeners&&i(e.listeners)})),n&&i(n)}}))},onModeExit(){Na.getState().clearViewportGridState(),Us.getState().clearUIState(),Oa.getState().clearDisplaySetSelectorMap(),Ta.getState().clearHangingProtocolStageIndexMap(),$a.getState().clearToggleHangingProtocol(),Va.getState().clearViewportsByPosition()},getDataSourcesModule:Ie,getViewportModule:({servicesManager:e,commandsManager:t,extensionManager:a})=>[{name:"chartViewport",component:ys,isReferenceViewable:()=>!1}],getLayoutTemplateModule:function({servicesManager:e,extensionManager:t,commandsManager:a,hotkeysManager:n}){return[{name:"viewerLayout",id:"viewerLayout",component:function(s){return je({servicesManager:e,extensionManager:t,commandsManager:a,hotkeysManager:n,...s})}}]},getPanelModule:at,getHangingProtocolModule:vn,getSopClassHandlerModule:Ut,getToolbarModule:function({commandsManager:e,servicesManager:t}){const{cineService:a}=t.services;return[{name:"ohif.toolButton",defaultComponent:we.T0e},{name:"ohif.toolButtonList",defaultComponent:Kt},{name:"ohif.toolBoxButtonGroup",defaultComponent:aa},{name:"ohif.toolBoxButton",defaultComponent:na},{name:"ohif.radioGroup",defaultComponent:Ot.IB},{name:"ohif.buttonGroup",defaultComponent:Gt},{name:"ohif.divider",defaultComponent:_t},{name:"ohif.splitButton",defaultComponent:jt},{name:"ohif.layoutSelector",defaultComponent:a=>zt({...a,commandsManager:e,servicesManager:t})},{name:"ohif.progressDropdown",defaultComponent:Jt},{name:"evaluate.cine",evaluate:()=>{const e=a.getState().isCineEnabled;return{className:we.WpD.getToggledClassName(e)}}}]},getCommandsModule:Ka,getUtilityModule:({servicesManager:e})=>[{name:"common",exports:{getStudiesForPatientByMRN:Je}}],getCustomizationModule:function({servicesManager:e,extensionManager:t}){return[{name:"helloPage",value:bn},{name:"datasources",value:wn},{name:"multimonitor",value:En},{name:"default",value:{...xn,...Cn,...Pn,...Nn,...On,...$n({servicesManager:e,extensionManager:t}),...Hn,..._n,...Dn,...qn,...Wn,...jn,...Gn,...Yn,...Jn,...Un,...is,...cs,...ms,...ps,...gs,...Ss}}]}},qs=_s},96357:(e,t,a)=>{a.d(t,{A:()=>n});const n={NO_NEVER:-1,CANCEL:0,CREATE_REPORT:1,ADD_SERIES:2,SET_STUDY_AND_SERIES:3,NO_NOT_FOR_SERIES:4}}}]);
//# sourceMappingURL=3984.bundle.64de2c086ed1310d937c.js.map