UNPKG

dicomweb-proxy

Version:

A proxy to translate between dicomweb and dimse

1 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,customizationSer