UNPKG

modified-dicom-pacs

Version:

A modified version of DICOM PACS implementation

2 lines 4.73 MB
/*! For license information please see app.bundle.cf93f0b365751d1a3c67.js.LICENSE.txt */ (()=>{var e,t,n,r,a={25103:(e,t,n)=>{"use strict";n.d(t,{d:()=>a,o:()=>i.A});var r=n(41766);function a(e,t){const[n,a]=(0,r.useState)(e);return(0,r.useEffect)((()=>{const n=setTimeout((()=>{a(e)}),t);return()=>{clearTimeout(n)}}),[e,t]),n}var i=n(86669)},68870:(e,t,n)=>{"use strict";n.d(t,{b:()=>ie});n(75210);var r=n(41766),a=n(11374),i=n.n(a),o=n(912),s=n(80619),l=n(37396);function c(e){const{components:t=[],children:n}=e;return r.createElement(r.Fragment,null,t.reduceRight(((e,t)=>{const[n,a]=Array.isArray(t)?[t[0],t[1]]:[t,{}];return r.createElement(n,a,e)}),n))}c.propTypes={components:i().array,children:i().node.isRequired};var u=n(5085),d=n(15575),m=n(55411),v=n(10971),f=n(86669);function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},g.apply(this,arguments)}function p(e){const t=(0,l.Zp)(),{children:n,...a}=e,i=(0,v.g)(),o=(0,v.zy)(),s=(0,f.A)({lowerCaseKeys:!0}),c=(0,f.A)(),u=101,d={studies:[],total:0,resultsPerPage:25,pageNumber:1,location:"Not a valid location, causes first load to occur"},p=(0,r.useCallback)((()=>{let e=s.get("datasources");if(!e&&window.config.defaultDataSourceName)return"";if(!e){e=ke.modules[m.rI.DATA_SOURCE].reduce(((e,t)=>{const n=[];return t.module.forEach((e=>{"webApi"===e.type&&n.push(e)})),e.concat(n)}),[]).map((e=>e.name)).find((e=>void 0!==ke.getDataSources(e)?.[0]))}return e}),[]),[h,S]=(0,r.useState)(!1),[y,I]=(0,r.useState)((()=>{const e=p();return e?`/${e}`:""})),[M,C]=(0,r.useState)((()=>{const e=p();if(!e)return ke.getActiveDataSource()[0];const t=ke.getDataSources(e)?.[0];if(!t)throw new Error(`No data source found for ${e}`);return t})),[b,D]=(0,r.useState)(d),[E,T]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{(async()=>{await M.initialize({params:i,query:c}),S(!0)})()}),[M]),(0,r.useEffect)((()=>{const e=ke.subscribe(m.nH.EVENTS.ACTIVE_DATA_SOURCE_CHANGED,(()=>{T(!1),S(!1),I(""),C(ke.getActiveDataSource()[0]),D(d)}));return()=>e.unsubscribe()}),[]),(0,r.useEffect)((()=>{if(!h)return;const e=function(e,t){e=new URLSearchParams(e);const n=i(e.get("pageNumber"),1),r=i(e.get("resultsPerPage"),25),a={patientId:e.get("mrn"),patientName:e.get("patientName"),studyDescription:e.get("description"),modalitiesInStudy:e.get("modalities")&&e.get("modalities").split(","),accessionNumber:e.get("accession"),startDate:e.get("startDate"),endDate:e.get("endDate"),page:i(e.get("page"),void 0),pageNumber:n,resultsPerPage:r,sortBy:e.get("sortBy"),sortDirection:e.get("sortDirection"),offset:Math.floor(n*r/t)*(t-1),config:e.get("configUrl")};return Object.keys(a).forEach((e=>null==a[e]&&delete a[e])),a;function i(e,t){let n=t;return null!==e&&e.length>0&&(isNaN(e)||(n=parseInt(e))),n}}(o.search,u);try{const a=b.pageNumber===e.pageNumber,i=100*Math.floor(b.pageNumber*b.resultsPerPage/u),s=100*Math.floor(e.pageNumber*e.resultsPerPage/u),l="string"==typeof b.location||(n=b.location,r=o,!(n.pathname===r.pathname&&n.search===r.search&&n.hash===r.hash));(!a||!E&&(s!==i||l))&&async function(){T(!0),m.Rm.time(m.Enums.TimingEnum.SEARCH_TO_LIST);const t=await M.query.studies.search(e);D({studies:t||[],total:t.length,resultsPerPage:e.resultsPerPage,pageNumber:e.pageNumber,location:o}),m.Rm.timeEnd(m.Enums.TimingEnum.SCRIPT_TO_VIEW),m.Rm.timeEnd(m.Enums.TimingEnum.SEARCH_TO_LIST),T(!1)}().catch((e=>{console.error(e),M.getConfig().configurationAPI||t("/notfoundserver","_self")}))}catch(e){console.warn(e)}var n,r}),[b,o,i,E,T,M,h]),r.createElement(n,g({},a,{data:b.studies,dataPath:y,dataTotal:b.total,dataSource:M,isLoadingData:E,onRefresh:()=>D(d)}))}p.propTypes={children:i().oneOfType([i().element,i().func]).isRequired};const h=p;var S=n(61466),y=n.n(S),I=n(8291),M=n.n(I),C=n(19033),b=n(71932),D=n.n(b),E=n(92344);const T=[{name:"patientName",displayName:E.A.t("StudyList:PatientName"),inputType:"Text",isSortable:!0,gridCol:4},{name:"mrn",displayName:E.A.t("StudyList:MRN"),inputType:"Text",isSortable:!0,gridCol:3},{name:"studyDate",displayName:E.A.t("StudyList:StudyDate"),inputType:"DateRange",isSortable:!0,gridCol:5},{name:"description",displayName:E.A.t("StudyList:Description"),inputType:"Text",isSortable:!0,gridCol:4},{name:"modalities",displayName:E.A.t("StudyList:Modality"),inputType:"MultiSelect",inputProps:{options:[{value:"AR",label:"AR"},{value:"ASMT",label:"ASMT"},{value:"AU",label:"AU"},{value:"BDUS",label:"BDUS"},{value:"BI",label:"BI"},{value:"BMD",label:"BMD"},{value:"CR",label:"CR"},{value:"CT",label:"CT"},{value:"CTPROTOCOL",label:"CTPROTOCOL"},{value:"DG",label:"DG"},{value:"DOC",label:"DOC"},{value:"DX",label:"DX"},{value:"ECG",label:"ECG"},{value:"EPS",label:"EPS"},{value:"ES",label:"ES"},{value:"FID",label:"FID"},{value:"GM",label:"GM"},{value:"HC",label:"HC"},{value:"HD",label:"HD"},{value:"IO",label:"IO"},{value:"IOL",label:"IOL"},{value:"IVOCT",label:"IVOCT"},{value:"IVUS",label:"IVUS"},{value:"KER",label:"KER"},{value:"KO",label:"KO"},{value:"LEN",label:"LEN"},{value:"LS",label:"LS"},{value:"MG",label:"MG"},{value:"MR",label:"MR"},{value:"M3D",label:"M3D"},{value:"NM",label:"NM"},{value:"OAM",label:"OAM"},{value:"OCT",label:"OCT"},{value:"OP",label:"OP"},{value:"OPM",label:"OPM"},{value:"OPT",label:"OPT"},{value:"OPTBSV",label:"OPTBSV"},{value:"OPTENF",label:"OPTENF"},{value:"OPV",label:"OPV"},{value:"OSS",label:"OSS"},{value:"OT",label:"OT"},{value:"PLAN",label:"PLAN"},{value:"PR",label:"PR"},{value:"PT",label:"PT"},{value:"PX",label:"PX"},{value:"REG",label:"REG"},{value:"RESP",label:"RESP"},{value:"RF",label:"RF"},{value:"RG",label:"RG"},{value:"RTDOSE",label:"RTDOSE"},{value:"RTIMAGE",label:"RTIMAGE"},{value:"RTINTENT",label:"RTINTENT"},{value:"RTPLAN",label:"RTPLAN"},{value:"RTRAD",label:"RTRAD"},{value:"RTRECORD",label:"RTRECORD"},{value:"RTSEGANN",label:"RTSEGANN"},{value:"RTSTRUCT",label:"RTSTRUCT"},{value:"RWV",label:"RWV"},{value:"SEG",label:"SEG"},{value:"SM",label:"SM"},{value:"SMR",label:"SMR"},{value:"SR",label:"SR"},{value:"SRF",label:"SRF"},{value:"STAIN",label:"STAIN"},{value:"TEXTUREMAP",label:"TEXTUREMAP"},{value:"TG",label:"TG"},{value:"US",label:"US"},{value:"VA",label:"VA"},{value:"XA",label:"XA"},{value:"XC",label:"XC"}]},isSortable:!0,gridCol:3},{name:"accession",displayName:E.A.t("StudyList:AccessionNumber"),inputType:"Text",isSortable:!0,gridCol:3},{name:"instances",displayName:E.A.t("StudyList:Instances"),inputType:"None",isSortable:!1,gridCol:2}];var _=n(25103);const P=u.Or.I0,{sortBySeriesDate:A}=m.utils,{availableLanguages:O,defaultLanguage:w,currentLanguage:R}=o.A,x=new Map;function L({data:e,dataTotal:t,isLoadingData:n,dataSource:a,hotkeysManager:i,dataPath:c,onRefresh:v,servicesManager:f}){const{hotkeyDefinitions:g,hotkeyDefaults:p}=i,{show:h,hide:S}=(0,u.hS)(),{t:I}=(0,s.Bd)(),[b]=(0,d.r)(),E=(0,_.o)(),L=(0,l.Zp)(),U=function(e){const t={patientName:e.get("patientname"),mrn:e.get("mrn"),studyDate:{startDate:e.get("startdate")||null,endDate:e.get("enddate")||null},description:e.get("description"),modalities:e.get("modalities")?e.get("modalities").split(","):[],accession:e.get("accession"),sortBy:e.get("sortby"),sortDirection:e.get("sortdirection"),pageNumber:k(e.get("pagenumber"),void 0),resultsPerPage:k(e.get("resultsperpage"),void 0),datasources:e.get("datasources"),configUrl:e.get("configurl")};return Object.keys(t).forEach((e=>null==t[e]&&delete t[e])),t}(E),[V,B]=(0,u.Fo)({key:"queryFilterValues",defaultValue:U,clearOnUnload:!0}),[G,j]=(0,r.useState)({...N,...V}),H=(0,_.d)(G,200),{resultsPerPage:Y,pageNumber:q,sortBy:z,sortDirection:W}=G,Q=t<101,K=""===z||!z,$="descending"===W?1:-1,X=K&&Q?{sortBy:"studyDate",sortDirection:"ascending"}:{},J=e;Q&&e.sort(((e,t)=>{if(K){return F(e,t,-1)}const n=e[z],r=t[z];return"string"==typeof n&&"string"==typeof r?n.localeCompare(r)*$:"number"==typeof n&&"number"==typeof r?(n>r?1:-1)*$:!n&&r?-1*$:!r&&n?1*$:"studyDate"===z?F(e,t,$):0}));const[Z,ee]=(0,r.useState)([]),[te,ne]=(0,r.useState)([]),re=t,ae=(0,r.useMemo)((()=>n||Z.length>0),[n,Z]),ie=e=>{G.pageNumber===e.pageNumber&&(e.pageNumber=1),j(e),B(e),ee([])};(0,r.useEffect)((()=>(document.body.classList.add("bg-black"),()=>{document.body.classList.remove("bg-black")})),[]),(0,r.useEffect)((()=>{if(!H)return;const e={};Object.keys(N).forEach((t=>{const n=N[t],r=H[t];"studyDate"===t?(r.startDate&&n.startDate!==r.startDate&&(e.startDate=r.startDate),r.endDate&&n.endDate!==r.endDate&&(e.endDate=r.endDate)):"modalities"===t&&r.length?e.modalities=r.join(","):r!==n&&(e[t]=r)}));const t=C.stringify(e,{skipNull:!0,skipEmptyString:!0});L({pathname:"/",search:t?`?${t}`:void 0})}),[H]),(0,r.useEffect)((()=>{const e=async e=>{try{const t=await a.query.series.search(e);x.set(e,A(t)),ne([...te,e])}catch(e){console.warn(e)}};for(let t=0;t<Z.length;t++){const n=Z[t]-1,r=J[n].studyInstanceUid;te.includes(r)||e(r)}}),[Z,e]);const oe=Math.floor(101/Y),se=Y*((q-1)%oe),le=se+Y,ce=J.map(((e,t)=>{const n=t+1,a=Z.some((e=>e===n)),{studyInstanceUid:i,accession:o,modalities:s,instances:d,description:m,mrn:v,patientName:f,date:g,time:p}=e,h=g&&M()(g,["YYYYMMDD","YYYY.MM.DD"],!0).isValid()&&M()(g,["YYYYMMDD","YYYY.MM.DD"]).format(I("Common:localDateFormat","MMM-DD-YYYY")),S=p&&M()(p,["HH","HHmm","HHmmss","HHmmss.SSS"]).isValid()&&M()(p,["HH","HHmm","HHmmss","HHmmss.SSS"]).format(I("Common:localTimeFormat","hh:mm A"));return{dataCY:`studyRow-${i}`,row:[{key:"patientName",content:f?r.createElement(u.ax,null,f):r.createElement("span",{className:"text-gray-700"},"(Empty)"),gridCol:4},{key:"mrn",content:r.createElement(u.ax,null,v),gridCol:3},{key:"studyDate",content:r.createElement(r.Fragment,null,h&&r.createElement("span",{className:"mr-4"},h),S&&r.createElement("span",null,S)),title:`${h||""} ${S||""}`,gridCol:5},{key:"description",content:r.createElement(u.ax,null,m),gridCol:4},{key:"modality",content:s,title:s,gridCol:3},{key:"accession",content:r.createElement(u.ax,null,o),gridCol:3},{key:"instances",content:r.createElement(r.Fragment,null,r.createElement(u.In,{name:"group-layers",className:y()("mr-2 inline-flex w-4",{"text-primary-active":a,"text-secondary-light":!a})}),d),title:(d||0).toString(),gridCol:2}],expandedContent:r.createElement(u.r5,{seriesTableColumns:{description:I("StudyList:Description"),seriesNumber:I("StudyList:Series"),modality:I("StudyList:Modality"),instances:I("StudyList:Instances")},seriesTableDataSource:x.has(i)?x.get(i).map((e=>({description:e.description||"(empty)",seriesNumber:e.seriesNumber??"",modality:e.modality||"",instances:e.numSeriesInstances||""}))):[]},r.createElement("div",{className:"flex flex-row gap-2"},(b.groupEnabledModesFirst?b.loadedModes.sort(((t,n)=>{const r=t.isValidMode({modalities:s.replaceAll("/","\\"),study:e}).valid;return n.isValidMode({modalities:s.replaceAll("/","\\"),study:e}).valid-r})):b.loadedModes).map(((t,n)=>{const a=s.replaceAll("/","\\"),{valid:o,description:d}=t.isValidMode({modalities:a,study:e}),m=new URLSearchParams;return G.configUrl&&m.append("configUrl",G.configUrl),m.append("StudyInstanceUIDs",i),t.displayName&&r.createElement(l.N_,{className:o?"":"cursor-not-allowed",key:n,to:`${c?"../../":""}${t.routeName}${c||""}?${m.toString()}`,onClick:e=>{o||e.preventDefault()}},r.createElement(u.$n,{type:u.Ny.NW.primary,size:u.Ny.Ej.medium,disabled:!o,startIconTooltip:o?null:r.createElement("div",{className:"font-inter flex w-[206px] whitespace-normal text-left text-xs font-normal text-white\t"},d),startIcon:r.createElement(u.In,{className:"!h-[20px] !w-[20px] text-black",name:o?"launch-arrow":"launch-info"}),onClick:()=>{},dataCY:`mode-${t.routeName}-${i}`,className:o?"text-[13px]":"bg-[#222d44] text-[13px]"},t.displayName))})))),onClickRow:()=>ee((e=>a?e.filter((e=>n!==e)):[...e,n])),isExpanded:a}})),ue=re>0,de=[{title:I("Header:About"),icon:"info",onClick:()=>h({content:u.VT,title:I("AboutModal:About OHIF Viewer"),contentProps:{versionNumber:"3.8.0",commitHash:"1dcdc9dabe9d4179f223912d6adc00bc95629a85"},containerDimensions:"max-w-4xl max-h-4xl"})},{title:I("Header:Preferences"),icon:"settings",onClick:()=>h({title:I("UserPreferencesModal:User preferences"),content:u.im,contentProps:{hotkeyDefaults:i.getValidHotkeyDefinitions(p),hotkeyDefinitions:g,onCancel:S,currentLanguage:R(),availableLanguages:O,defaultLanguage:w,onSubmit:e=>{e.language.value!==R().value&&o.A.changeLanguage(e.language.value),i.setHotkeys(e.hotkeyDefinitions),S()},onReset:()=>i.restoreDefaultBindings(),hotkeysModule:m.ot}})}];b.oidc&&de.push({icon:"power-off",title:I("Header:Logout"),onClick:()=>{L(`/logout?redirect_uri=${encodeURIComponent(window.location.href)}`)}});const{customizationService:me}=f.services,{component:ve}=me.get("dicomUploadComponent")??{},fe=ve&&a.getConfig()?.dicomUploadEnabled?{title:"Upload files",closeButton:!0,shouldCloseOnEsc:!1,shouldCloseOnOverlayClick:!1,content:ve.bind(null,{dataSource:a,onComplete:()=>{S(),v()},onStarted:()=>{h({...fe,closeButton:!1})}})}:void 0,{component:ge}=me.get("ohif.dataSourceConfigurationComponent")??{};return r.createElement("div",{className:"flex h-screen flex-col bg-black"},r.createElement(u.Y9,{isSticky:!0,menuOptions:de,isReturnEnabled:!1,WhiteLabeling:b.whiteLabeling,showPatientInfo:P.DISABLED}),r.createElement(u.j,{dialogConfiguration:b?.investigationalUseDialog}),r.createElement("div",{className:"ohif-scrollbar ohif-scrollbar-stable-gutter flex grow flex-col overflow-y-auto sm:px-5"},r.createElement(u.y_,{numOfStudies:q*Y>100?101:re,filtersMeta:T,filterValues:{...G,...X},onChange:ie,clearFilters:()=>ie(N),isFiltering:((e,t)=>!D()(e,t))(G,N),onUploadClick:fe?()=>h(fe):void 0,getDataSourceConfigurationComponent:ge?()=>ge():void 0}),ue?r.createElement("div",{className:"flex grow flex-col"},r.createElement(u.CD,{tableDataSource:ce.slice(se,le),numOfStudies:re,querying:ae,filtersMeta:T}),r.createElement("div",{className:"grow"},r.createElement(u.e$,{onChangePage:e=>{const t=G.pageNumber,n=t%Math.floor(101/G.resultsPerPage),r=e>t,a=Math.max(n,1)*Y<re;r&&!a||ie({...G,pageNumber:e})},onChangePerPage:e=>{ie({...G,pageNumber:1,resultsPerPage:Number(e)})},currentPage:q,perPage:Y}))):r.createElement("div",{className:"flex flex-col items-center justify-center pt-48"},b.showLoadingIndicator&&n?r.createElement(u.Jx,{className:"h-full w-full bg-black"}):r.createElement(u.p7,null))))}L.propTypes={data:i().array.isRequired,dataSource:i().shape({query:i().object.isRequired,getConfig:i().func}).isRequired,isLoadingData:i().bool.isRequired,servicesManager:i().instanceOf(m.CS)};const N={patientName:"",mrn:"",studyDate:{startDate:null,endDate:null},description:"",modalities:[],accession:"",sortBy:"",sortDirection:"none",pageNumber:1,resultsPerPage:25,datasources:"",configUrl:null};function k(e,t){let n=t;return e&&e.length>0&&(isNaN(e)||(n=parseInt(e))),n}function F(e,t,n){const r=M()(e.date,["YYYYMMDD","YYYY.MM.DD"],!0),a=M()(t.date,["YYYYMMDD","YYYY.MM.DD"],!0);return r.isValid()&&a.isValid()?(r.toISOString()>a.toISOString()?1:-1)*n:r.isValid()?n:a.isValid()?-1*n:void 0}const U=L;var V=n(5013),B=n(54578),G=n.n(B);class j{constructor(){this.fileType=void 0}loadFile(e,t){}getDataset(e,t){}getStudies(e,t){}}const H=new class extends j{constructor(...e){super(...e),this.fileType="application/pdf"}loadFile(e,t){return G().wadouri.loadFileRequest(t)}getDataset(e,t){const n={};return n.imageId=e.imageId||t,n}};var Y=n(31426);const q=new class extends j{constructor(...e){super(...e),this.fileType="application/dicom"}loadFile(e,t){return G().wadouri.loadFileRequest(t)}getDataset(e,t){const n=Y.Ay.data.DicomMessage.readFile(e),r=Y.Ay.data.DicomMetaDictionary.naturalizeDataset(n.dict);return r.url=t,r._meta=Y.Ay.data.DicomMetaDictionary.namifyDataset(n.meta),r.AvailableTransferSyntaxUID=r.AvailableTransferSyntaxUID||r._meta.TransferSyntaxUID?.Value?.[0],r}};const z=class extends j{constructor(e){super(),this.fileType=void 0,this.loader=void 0;const t=e&&e.type;this.loader=this.getLoader(t),this.fileType=this.loader.fileType}addFile(e){return G().wadouri.fileManager.add(e)}loadFile(e,t){return this.loader.loadFile(e,t)}getDataset(e,t){return this.loader.getDataset(e,t)}getLoader(e){return"application/pdf"===e?H:q}},W=async e=>{try{const t=new z(e),n=t.addFile(e),r=await t.loadFile(e,n),a=await t.getDataset(r,n);m.DicomMetadataStore.addInstance(a)}catch(e){console.log(e.name,":Error when trying to load and process local files:",e.message)}};function Q(){return Q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Q.apply(this,arguments)}const K=(e,t,n)=>r.createElement(V.A,{onDrop:e,noDrag:!0},(({getRootProps:e,getInputProps:a})=>r.createElement("div",e(),r.createElement(u.$n,{rounded:"full",variant:"contained",disabled:!1,endIcon:r.createElement(u.In,{name:"launch-arrow"}),className:y()("font-medium","ml-2"),onClick:()=>{}},t,n?r.createElement("input",Q({},a(),{webkitdirectory:"true",mozdirectory:"true"})):r.createElement("input",a())))));const $=function({modePath:e}){const t=(0,l.Zp)(),n=(0,r.useRef)(),[a,i]=r.useState(!1),o=(ke.modules[m.rI.DATA_SOURCE].reduce(((e,t)=>{const n=[];return t.module.forEach((e=>{"localApi"===e.type&&n.push(e)})),e.concat(n)}),[])[0].createDataSource({}),ke.registeredExtensionIds.includes("@ohif/extension-dicom-microscopy")),s=async n=>{const r=await async function(e){const t=e.map(W);return await Promise.all(t),m.DicomMetadataStore.getStudyInstanceUIDs()}(n),a=new URLSearchParams;if(o){const t=r.filter((e=>m.DicomMetadataStore.getStudy(e).series.findIndex((e=>"SM"===e.Modality||"SM"===e.instances[0].Modality))>=0));t.length>0&&(t.forEach((e=>a.append("StudyInstanceUIDs",e))),e="microscopy")}r.forEach((e=>a.append("StudyInstanceUIDs",e))),a.append("datasources","dicomlocal"),t(`/${e}?${decodeURIComponent(a.toString())}`)};return(0,r.useEffect)((()=>(document.body.classList.add("bg-black"),()=>{document.body.classList.remove("bg-black")})),[]),r.createElement(V.A,{ref:n,onDrop:e=>{i(!0),s(e)},noClick:!0},(({getRootProps:e})=>r.createElement("div",Q({},e(),{style:{width:"100%",height:"100%"}}),r.createElement("div",{className:"flex h-screen w-screen items-center justify-center "},r.createElement("div",{className:"bg-secondary-dark mx-auto space-y-2 rounded-lg py-8 px-8 drop-shadow-md"},r.createElement("div",{className:"flex items-center justify-center"},r.createElement(u.In,{name:"logo-dark-background",className:"h-28"})),r.createElement("div",{className:"space-y-2 pt-4 text-center"},a?r.createElement("div",{className:"flex flex-col items-center justify-center pt-48"},r.createElement(u.Jx,{className:"h-full w-full bg-black"})):r.createElement("div",{className:"space-y-2"},r.createElement("p",{className:"text-base text-blue-300"},"Note: You data is not uploaded to any server, it will stay in your local browser application"),r.createElement("p",{className:"text-xg text-primary-active pt-6 font-semibold"},"Drag and Drop DICOM files here to load them in the Viewer"),r.createElement("p",{className:"text-lg text-blue-300"},"Or click to "))),r.createElement("div",{className:"flex justify-around pt-4 "},K(s,"Load files",!1),K(s,"Load folders",!0)))))))};const X=function(){return r.createElement("div",{style:{width:"100%",height:"100%"}},r.createElement("div",{className:"flex h-screen w-screen items-center justify-center "},r.createElement("div",{className:"bg-secondary-dark mx-auto space-y-2 rounded-lg py-8 px-8 drop-shadow-md"},r.createElement("img",{className:"mx-auto block h-14",src:"./ohif-logo.svg",alt:"OHIF"}),r.createElement("div",{className:"space-y-2 pt-4 text-center"},r.createElement("div",{className:"flex flex-col items-center justify-center"},r.createElement("p",{className:"text-primary-active mt-4 text-xl font-semibold"},"Debug Information"),r.createElement("div",{className:"mt-4 flex items-center space-x-2"},r.createElement("p",{className:"text-md text-white"},"Cross Origin Isolated (COOP/COEP)"),r.createElement(u.In,{name:window.crossOriginIsolated?"notifications-success":"notifications-error",className:"h-5 w-5"}),!window.crossOriginIsolated&&r.createElement("div",{className:"text-md flex-1 text-white"},"We use SharedArrayBuffer to render volume data (e.g., MPR). If you are seeing this message, it means that your browser has not enabled COOP/COEP. Please see the following link for more information:"," ",r.createElement("a",{href:"https://web.dev/coop-coep/",target:"_blank",rel:"noopener noreferrer",className:"text-primary-active"},"Learn More"))))))))},J=({message:e="Sorry, this page does not exist.",showGoBackButton:t=!0})=>{const[n]=(0,d.r)(),{showStudyList:a}=n;return r.createElement("div",{className:"flex h-full w-full items-center justify-center text-white"},r.createElement("div",null,r.createElement("h4",null,e),t&&a&&r.createElement("h5",null,r.createElement(l.N_,{to:"/"},"Go back to the Study List"))))};J.propTypes={message:i().string,showGoBackButton:i().bool};const Z=J;var ee=n(78668);const te=function(){return r.createElement("div",null)};function ne(e){const{servicesManager:t,viewportComponents:n,dataSource:a}=e,[i,o]=(0,u.ih)(),[s]=(0,d.r)(),{layout:l,activeViewportId:c,viewports:v,isHangingProtocolLayout:f}=i,{numCols:g,numRows:p}=l,h=(0,r.useRef)(null),S=(0,r.useRef)(null),{displaySetService:I,measurementService:M,hangingProtocolService:C,uiNotificationService:b}=t.services,D=()=>`${g}-${p}`,E=(0,r.useCallback)(((e,t)=>{let n=[];try{n=C.getViewportsRequireUpdate(e,t,f)}catch(e){console.warn(e),b.show({title:"Drag and Drop",message:"The selected display sets could not be added to the viewport due to a mismatch in the Hanging Protocol rules.",type:"info",duration:3e3})}return n}),[C,b,f]);(0,r.useEffect)((()=>{const{unsubscribe:e}=C.subscribe(C.EVENTS.PROTOCOL_CHANGED,(({protocol:e,stage:t,activeStudyUID:n,viewportMatchDetails:r})=>{((e,t,n,r)=>{const a=I.getActiveDisplaySets();if(!a.length)return void console.log("No available display sets",a);const{layoutType:i}=t.viewportStructure,s=t.viewportStructure.properties,{columns:l,rows:c,layoutOptions:u=[]}=s;o.setLayout({numRows:c,numCols:l,layoutType:i,layoutOptions:u,findOrCreateViewport:e=>{const t=Array.from(r.keys())[e],n=r.get(t);if(!n)return void console.log("No match details for viewport",t);const{displaySetsInfo:a,viewportOptions:i}=n,o=[],s=[];a.forEach((({displaySetInstanceUID:e,displaySetOptions:t})=>{e&&o.push(e),s.push(t)}));const l=C.getComputedOptions(i,o),c=C.getComputedOptions(s,o);return{displaySetInstanceUIDs:o,displaySetOptions:c,viewportOptions:l}},isHangingProtocolLayout:!0})})(0,t,0,r)}));return()=>{e()}}),[]),(0,r.useEffect)((()=>{const e=o.getGridViewportsReady(),t=S.current===D();e&&!t&&(S.current=D(),o.publishViewportsReady())}),[o,D]),(0,r.useEffect)((()=>{const{unsubscribe:e}=M.subscribe(m.MeasurementService.EVENTS.JUMP_TO_MEASUREMENT_LAYOUT,(({viewportId:e,measurement:t,isConsumed:n})=>{if(n)return;const{displaySetInstanceUID:r}=t,a=E(e,r),i=a?.[0];if(!i)return void console.warn("ViewportGrid::Unable to navigate to viewport containing",r);i.viewportOptions||={},i.viewportOptions.orientation="acquisition";const s=I.getDisplaySetByUID(r);if(s.images&&t.SOPInstanceUID)for(let e=0;e<s.images.length;e++){if(s.images[e].SOPInstanceUID===t.SOPInstanceUID){i.viewportOptions.initialImageOptions={index:e};break}}o.setDisplaySetsForViewports(a)}));return()=>{e()}}),[v]);const T=(e,{displaySetInstanceUID:t})=>{const n=E(e,t);o.setDisplaySetsForViewports(n)},_=(0,r.useCallback)((()=>{const e=[],t=o.getNumViewportPanes();for(let i=0;i<t;i++){const t=Array.from(v.values())[i]||{},{displaySetInstanceUIDs:l,viewportOptions:d,displaySetOptions:m,x:g,y:p,width:h,height:S,viewportLabel:M}=t,C=d.viewportId,D=c===C,E=(l||[]).map((e=>I.getDisplaySetByUID(e)||{})).filter((e=>!e?.unsupported)),_=re(E,n,b),P=E.some((e=>e.needsRerendering)),A=e=>{D||(e&&(e.preventDefault(),e.stopPropagation()),o.setActiveViewportId(C))};e[i]=r.createElement(u.P5,{key:C,acceptDropsFor:"displayset",onDrop:T.bind(null,C),onInteraction:A,customStyle:{position:"absolute",top:100*p+.2+"%",left:100*g+.2+"%",width:100*h-.3+"%",height:100*S-.3+"%"},isActive:D},r.createElement("div",{"data-cy":"viewport-pane",className:y()("flex h-full w-full flex-col",{"pointer-events-none":!D&&(s?.activateViewportBeforeInteraction??!0)})},r.createElement(_,{displaySets:E,viewportLabel:v.size>1?M:"",viewportId:C,dataSource:a,viewportOptions:d,displaySetOptions:m,needsRerendering:P,isHangingProtocolLayout:f,onElementEnabled:()=>{o.setViewportIsReady(C,!0)}})))}return e}),[v,c,n,a]);return p&&g?r.createElement("div",{ref:h,className:"h-full w-full"},r.createElement(u.ci,{numRows:p,numCols:g},r.createElement(ee.Ay,{refreshMode:"debounce",refreshRate:7,onResize:()=>{o.setViewportGridSizeChanged()},targetRef:h.current}),_())):null}function re(e,t,n){if(!e||!e.length)return te;const r=e[0].SOPClassHandlerId;for(let e=0;e<t.length;e++){if(!t[e])throw new Error("viewport components not defined");if(!t[e].displaySetsToDisplay)throw new Error("displaySetsToDisplay is null");if(t[e].displaySetsToDisplay.includes(r)){const{component:n}=t[e];return n}}return console.log("Can't show displaySet",r,e[0]),n.show({title:"Viewport Not Supported Yet",message:`Cannot display SOPClassUID of ${e[0].SOPClassUID} yet`,type:"error"}),te}ne.propTypes={viewportComponents:i().array.isRequired,servicesManager:i().instanceOf(m.CS)},ne.defaultProps={viewportComponents:[]};const ae=ne,ie={navigate:null},oe=[],se=[];async function le(e){if("string"!=typeof e)return e;if("@ohif/extension-default"===e){return(await Promise.all([n.e(203),n.e(473),n.e(483),n.e(236),n.e(644),n.e(931),n.e(206),n.e(481)]).then(n.bind(n,7206))).default}if("@ohif/extension-cornerstone"===e){return(await Promise.all([n.e(203),n.e(473),n.e(483),n.e(236),n.e(644),n.e(722),n.e(445),n.e(321)]).then(n.bind(n,12702))).default}if("@ohif/extension-measurement-tracking"===e){return(await Promise.all([n.e(203),n.e(473),n.e(483),n.e(236),n.e(644),n.e(342),n.e(931),n.e(835),n.e(206),n.e(669),n.e(325)]).then(n.bind(n,84284))).default}if("@ohif/extension-cornerstone-dicom-sr"===e){return(await Promise.all([n.e(203),n.e(473),n.e(483),n.e(236),n.e(342),n.e(669)]).then(n.bind(n,61669))).default}if("@ohif/extension-cornerstone-dicom-seg"===e){return(await Promise.all([n.e(203),n.e(473),n.e(483),n.e(236),n.e(644),n.e(342),n.e(931),n.e(726),n.e(206),n.e(633)]).then(n.bind(n,27400))).default}if("@ohif/extension-cornerstone-dynamic-volume"===e){return(await Promise.all([n.e(203),n.e(473),n.e(483),n.e(236),n.e(722),n.e(487)]).then(n.bind(n,26487))).default}if("@ohif/extension-dicom-microscopy"===e){return(await Promise.all([n.e(109),n.e(889)]).then(n.bind(n,62889))).default}if("@ohif/extension-dicom-pdf"===e){return(await n.e(907).then(n.bind(n,55907))).default}if("@ohif/extension-dicom-video"===e){return(await n.e(961).then(n.bind(n,61342))).default}if("@ohif/extension-tmtv"===e){return(await Promise.all([n.e(203),n.e(473),n.e(483),n.e(236),n.e(342),n.e(7)]).then(n.bind(n,89007))).default}if("@ohif/extension-test"===e){return(await n.e(783).then(n.bind(n,164))).default}if("@ohif/extension-cornerstone-dicom-rt"===e){return(await n.e(188).then(n.bind(n,99188))).default}if("@ohif/mode-longitudinal"===e){return(await n.e(41).then(n.bind(n,97041))).default}if("@ohif/mode-segmentation"===e){return(await n.e(699).then(n.bind(n,40080))).default}if("@ohif/mode-tmtv"===e){return(await n.e(724).then(n.bind(n,28724))).default}if("@ohif/mode-microscopy"===e){return(await n.e(905).then(n.bind(n,81905))).default}if("@ohif/mode-preclinical-4d"===e){return(await n.e(94).then(n.bind(n,14094))).default}if("@ohif/mode-test"===e){return(await n.e(448).then(n.bind(n,14448))).default}if("@ohif/mode-basic-dev-mode"===e){return(await n.e(594).then(n.bind(n,26594))).default}return(await import(e)).default}function ce(e){return Promise.all(e.map(le))}window.extensions=oe,window.modes=se,oe.push("@ohif/extension-default"),oe.push("@ohif/extension-cornerstone"),se.push("@ohif/mode-longitudinal"),se.push("@ohif/mode-segmentation"),se.push("@ohif/mode-tmtv"),se.push("@ohif/mode-microscopy"),se.push("@ohif/mode-preclinical-4d");const ue=(e,t,n=0)=>e===t?n:e<t?1:-1,de=e=>{const t={},n=displaySets.reduce(((e,n)=>{const{StudyInstanceUID:r}=n;if(!t[r]){const n=m.DicomMetadataStore.getStudy(r);t[r]=n,e.push(n)}return e}),[]);return n.sort(((e,t)=>ue(e.StudyDate,t.StudyDate,ue(e.StudyInstanceUID,t.StudyInstanceUID)))),n},me=(e,t)=>(e=>{if(e?.length)return e.map((e=>m.DicomMetadataStore.getStudy(e)))})(e)||de();const{sortingCriteria:ve,getSplitParam:fe}=m.utils;const{getSplitParam:ge}=m.utils;function pe({mode:e,dataSourceName:t,extensionManager:n,servicesManager:a,commandsManager:i,hotkeysManager:o}){const[s]=(0,d.r)(),l=(0,v.zy)(),f=(0,v.g)(),g=(0,_.o)();e?.onModeInit?.({servicesManager:a,extensionManager:n,commandsManager:i,appConfig:s,query:g});const p=(0,_.o)({lowerCaseKeys:!0}),[h,S]=(0,r.useState)(null),[y,I]=(0,r.useState)(!1),[M,C]=(0,r.useState)(!1),b=(0,r.useRef)(!1),D=(0,r.useRef)(null),E=(0,r.useRef)(!1);ie.navigate=(0,v.Zp)(),l!==D.current&&(b.current=null,D.current=l);const{displaySetService:T,panelService:P,hangingProtocolService:A,userAuthenticationService:O}=a.services,{extensions:w,sopClassHandlers:R,hotkeys:x,hangingProtocol:L}=e,N=p.get("hangingprotocolid"),k=p.get("token");k&&function(e,t,n){if(!e)return;n.setServiceImplementation({getAuthorizationHeader:()=>({Authorization:"Bearer "+e})});const r=new URL(window.location.origin+window.location.pathname+t.search);r.searchParams.delete("token");const a=r.toString();window.history&&window.history.replaceState&&window.history.replaceState(null,"",a)}(k,l,O);const F=Array.isArray(x)?x:x?.hotkeys,U=x?.name||"hotkey-definitions";void 0!==t&&n.setActiveDataSource(t);const V=n.getActiveDataSource()[0],B=e.routes[0];if((0,r.useEffect)((()=>{(async()=>{const e=await ce(Object.keys(w));for(const t of e){const{id:e}=t;-1===n.registeredExtensionIds.indexOf(e)&&await n.registerExtension(t)}C(!0)})()}),[]),(0,r.useEffect)((()=>(E.current=!0,()=>{E.current=!1})),[]),(0,r.useEffect)((()=>{if(!M)return;return(async(e,t)=>{await V.initialize({params:e,query:t}),S(V.getStudyInstanceUIDs({params:e,query:t}))})(f,g),()=>{b.current=null}}),[l,M]),(0,r.useEffect)((()=>{if(!M||!h?.length)return;return Array.isArray(h)&&h[0]&&(async()=>{const e=await B.layoutTemplate({location:l,servicesManager:a,studyInstanceUIDs:h});if(E.current){const{leftPanels:t=[],rightPanels:n=[],...r}=e.props;P.reset(),P.addPanels(P.PanelPosition.Left,t),P.addPanels(P.PanelPosition.Right,n),e.props=r,b.current=e,I(!y)}})(),()=>{b.current=null}}),[h,M]),(0,r.useEffect)((()=>{if(!F||!M||!h?.length)return;o.setDefaultHotKeys(F);const e=JSON.parse(localStorage.getItem(U));return e?.length?o.setHotkeys(e,U):o.setHotkeys(F,U),()=>{o.destroy()}}),[M,F,h]),(0,r.useEffect)((()=>{if(!b.current||!M||!h?.length)return;let t;return(async()=>{T.init(n,R),n.onModeEnter({servicesManager:a,extensionManager:n,commandsManager:i,appConfig:s});const t=A.getProtocolById(N)?N:L;A.setActiveProtocolIds(t),e?.onModeEnter({servicesManager:a,extensionManager:n,commandsManager:i,appConfig:s});const r=Array.from(g.keys()).reduce(((e,t)=>{const n=t.toLowerCase();if("studyinstanceuids"!==n){if("seriesinstanceuids"===n){const t=ge(n,g);return{...e,seriesInstanceUID:t}}return{...e,[t]:ge(n,g)}}}),{})??{};let l;return B.init&&(l=await B.init({servicesManager:a,extensionManager:n,hotkeysManager:o,studyInstanceUIDs:h,dataSource:V,filters:r},t)),async function({servicesManager:e,studyInstanceUIDs:t,dataSource:n,filters:r,appConfig:a},i){const{displaySetService:o,hangingProtocolService:s,uiNotificationService:l,customizationService:c}=e.services;function u(){const e=o.getActiveDisplaySets();if(!e||!e.length)return;const n=me(t,e),r=n[0];s.run({studies:n,activeStudy:r,displaySets:e},i)}const d=[],v=[],{unsubscribe:f}=m.DicomMetadataStore.subscribe(m.DicomMetadataStore.EVENTS.INSTANCES_ADDED,(function({StudyInstanceUID:e,SeriesInstanceUID:t,madeInClient:n=!1}){const a=m.DicomMetadataStore.getSeries(e,t),i=r?.seriesInstanceUID;!i?.length||function(e,t){const n=t?.seriesInstanceUID;return!n||!!e.length&&n.includes(e[0].SeriesInstanceUID)}(a.instances,r)||v.includes(i[0])||(v.push(i[0]),l.show({title:"Series filter",message:`Each of the series in filter: ${i} are not part of the current study. The entire study is being displayed`,type:"error",duration:7e3})),o.makeDisplaySets(a.instances,n)}));d.push(f),m.Rm.time(m.Enums.TimingEnum.STUDY_TO_DISPLAY_SETS),m.Rm.time(m.Enums.TimingEnum.STUDY_TO_FIRST_IMAGE);const g=t.map((e=>n.retrieve.series.metadata({StudyInstanceUID:e,filters:r,returnPromises:!0,sortCriteria:c.get("sortingCriteria")||ve.seriesSortCriteria.seriesInfoSortingCriteria})));g.forEach((e=>{e.catch((e=>{console.error(e)}))}));const p=new URLSearchParams(window.location.search),h=fe("initialseriesinstanceuid",p),S=fe("initialsopinstanceuid",p);let y=!1;return(h||S)&&(y=!0),await Promise.allSettled(g).then((async e=>{m.Rm.timeEnd(m.Enums.TimingEnum.STUDY_TO_DISPLAY_SETS),m.Rm.time(m.Enums.TimingEnum.DISPLAY_SETS_TO_FIRST_IMAGE),m.Rm.time(m.Enums.TimingEnum.DISPLAY_SETS_TO_ALL_IMAGES);const t=[],n=[];e.forEach((e=>{const r=e.value;if(Array.isArray(r))if(y){const e=r.map((e=>e.start()));t.push(Promise.allSettled(e))}else{const{requiredSeries:e,remaining:a}=s.filterSeriesRequiredForRun(i,r),o=e.map((e=>e.start()));t.push(Promise.allSettled(o)),n.push(a)}})),await Promise.allSettled(t).then(u),function(e){e.forEach((e=>e.forEach((e=>e.start()))))}(n),u()})),d}({servicesManager:a,studyInstanceUIDs:h,dataSource:V,filters:r,appConfig:s},t)})().then((r=>{t=r,e?.onSetupRouteComplete?.({servicesManager:a,extensionManager:n,commandsManager:i})})),()=>{try{e?.onModeExit?.({servicesManager:a,extensionManager:n,appConfig:s})}catch(e){console.warn("mode exit failure",e)}t.forEach((e=>{e()})),n.onModeExit()}}),[e,t,l,M,B,a,n,o,h,y]),!h||!b.current||!M)return null;const G=function(e,t,n){const r=e.getModulesByType(e.constructor.MODULE_TYPES.CONTEXT);if(!r?.length)return;const a=r.flatMap((({module:e})=>e.map((e=>e.provider))));return({children:e})=>c({components:a,children:e})}(n),j=(e=>{const t=n.getModuleEntry(b.current.id).component;return r.createElement(t,e)})({...b.current.props,ViewportGridComp:e=>ae({...e,dataSource:V})});return r.createElement(u.xy,{StudyInstanceUIDs:h},G?r.createElement(G,null,r.createElement(u.G8,null,j)):r.createElement(u.G8,null,j))}pe.propTypes={mode:i().object.isRequired,dataSourceName:i().string,extensionManager:i().object,servicesManager:i().object,hotkeysManager:i().object,commandsManager:i().object};const he=({children:e,handleUnauthenticated:t})=>{const[{user:n,enabled:r}]=(0,u.fY)();return r&&!n?t():e};function Se(){return Se=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Se.apply(this,arguments)}const ye=({message:e="Unable to query for studies at this time. Check your data source configuration or network connection"})=>r.createElement("div",{className:"absolute flex h-full w-full items-center justify-center text-white"},r.createElement("div",null,r.createElement("h4",null,e)));ye.propTypes={message:i().string};const Ie=()=>r.createElement("div",{className:"absolute flex h-full w-full items-center justify-center text-white"},r.createElement("div",null,r.createElement("h4",null,"One or more of the requested studies are not available at this time. Return to the"," ",r.createElement(l.N_,{className:"text-primary-light",to:"/"},"study list")," ","to select a different study to view.")));Ie.propTypes={message:i().string};const Me=[{path:"/notfoundserver",children:ye},{path:"/notfoundstudy",children:Ie},{path:"/debug",children:X},{path:"/local",children:$.bind(null,{modePath:""})},{path:"/localbasic",children:$.bind(null,{modePath:"viewer/dicomlocal"})}],Ce={component:Z},be=({modes:e,dataSources:t,extensionManager:n,servicesManager:a,commandsManager:i,hotkeysManager:o,routerBasename:s,showStudyList:c})=>{const d=function({modes:e,dataSources:t,extensionManager:n,servicesManager:a,commandsManager:i,hotkeysManager:o}){const s=[],l=[];return t.forEach((e=>{const{sourceName:t}=e;l.includes(t)||l.push(t)})),e.forEach((e=>{l.forEach((t=>{const l=`/${e.routeName}/${t}`;s.push({path:l,children:()=>r.createElement(pe,{mode:e,dataSourceName:t,extensionManager:n,servicesManager:a,commandsManager:i,hotkeysManager:o}),private:!0})}));const t=`/${e.routeName}`;s.push({path:t,children:()=>r.createElement(pe,{mode:e,extensionManager:n,servicesManager:a,commandsManager:i,hotkeysManager:o}),private:!0})})),s}({modes:e,dataSources:t,extensionManager:n,servicesManager:a,commandsManager:i,hotkeysManager:o})||[],{customizationService:m}=a.services,v={path:"/",children:h,private:!0,props:{children:U,servicesManager:a,extensionManager:n}},f=m.getGlobalCustomization("customRoutes"),g=[...d,...c?[v]:[],...f?.routes||[],...Me,f?.notFoundRoute||Ce];function p({route:e,...t}){return r.createElement(u.tH,{context:`Route ${e.path}`,fallbackRoute:"/"},r.createElement(e.children,Se({},t,e.props,{route:e,servicesManager:a,extensionManager:n,hotkeysManager:o})))}const{userAuthenticationService:S}=a.services;return r.createElement(l.BV,null,g.map(((e,t)=>!0===e.private?r.createElement(l.qh,{key:t,exact:!0,path:e.path,element:r.createElement(he,{handleUnauthenticated:S.handleUnauthenticated},r.createElement(p,{route:e}))}):r.createElement(l.qh,{key:t,path:e.path,element:r.createElement(p,{route:e})}))))};const De=async function(e,t,n){const r=new m.Sp({getAppState:()=>{}}),a=new m.CS(r),i=new m.tk,o=new m.Lu(r,a),s={..."function"==typeof e?await e({servicesManager:a}):e},l=new m.nH({commandsManager:r,servicesManager:a,serviceProvidersManager:i,hotkeysManager:o,appConfig:s});a.setExtensionManager(l),a.registerServices([m.v4.REGISTRATION,m.zo.REGISTRATION,m.u$.REGISTRATION,m.A$.REGISTRATION,m.MeasurementService.REGISTRATION,m.IO.REGISTRATION,[m.V0.REGISTRATION,s.customizationService],m.ToolbarService.REGISTRATION,m.sI.REGISTRATION,m.Qe.REGISTRATION,m.xx.REGISTRATION,m.pS.REGISTRATION,m.Mr.REGISTRATION,m.Ai.REGISTRATION,m.wb.REGISTRATION]),m.r_.getHTTPErrorHandler=()=>{if("function"==typeof s.httpErrorHandler)return s.httpErrorHandler};const c=await ce([...t,...s.extensions]);if(await l.registerExtensions(c,s.dataSources),!s.modes)throw new Error("No modes are defined! Check your app-config.js");const u=await ce([...s.modes||[],...n]);s.loadedModes=[];const d=new Set;for(let e=0;e<u.length;e++){let t=u[e];if(!t)continue;const{id:n}=t;if(t.modeFactory){const e=s.modesConfiguration&&s.modesConfiguration[n]?s.modesConfiguration[n]:{};t=t.modeFactory({modeConfiguration:e})}d.has(n)||(d.add(n),t&&"object"==typeof t&&s.loadedModes.push(t))}return s.modes=s.loadedModes,{appConfig:s,commandsManager:r,extensionManager:l,servicesManager:a,serviceProvidersManager:i,hotkeysManager:o}};function Ee({userManager:e,onRedirectSuccess:t}){return e.signinRedirectCallback().then((e=>t(e))).catch((e=>(e=>{throw new Error(e)})(e))),null}Ee.propTypes={userManager:i().object.isRequired};const Te=Ee;function _e({userManager:e}){const t=(0,l.Zp)();return e.signoutRedirectCallback().then((e=>(()=>{const{pathname:e,search:n=""}=JSON.parse(sessionStorage.getItem("ohif-redirect-to"));t(`${e}?${n}`)})())).catch((e=>(e=>{throw new Error(e)})(e))),null}_e.propTypes={userManager:i().object.isRequired};const Pe=_e;var Ae=n(97387);function Oe(e,t){return function(e){return e.includes("http://")||e.includes("https://")}(e)?e:("/"===t[t.length-1]&&(t=t.slice(0,t.length-1)),t+e)}const we=(e,t)=>{if(!e||!e.length)return;const n=e[0],{protocol:r,host:a}=window.location,i=`${r}//${a}${t}`,o=n.redirect_uri||"/callback",s=n.silent_redirect_uri||"/silent-refresh.html",l=n.post_logout_redirect_uri||"/";return function(e){if(!e)return;const t={...e,automaticSilentRenew:!0,revokeAccessTokenOnSignout:!0,filterProtocolClaims:!0,loadUserInfo:!0};return new Ae.UserManager(t)}(Object.assign({},n,{redirect_uri:Oe(o,i),silent_redirect_uri:Oe(s,i),post_logout_redirect_uri:Oe(l,i)}))};function Re(e){const{userManager:t}=e;localStorage.setItem("signoutEvent","true");const n=(0,v.zy)(),r=new URLSearchParams(n.search);return t.signoutRedirect({post_logout_redirect_uri:r.get("redirect_uri")}),null}function xe(e){const t=new URLSearchParams(location.search),n=t.get("iss"),r=t.get("login_hint"),a=t.get("target_link_uri");return n!==oidcAuthority?(console.error("iss of /login does not match the oidc authority"),null):(e.removeUser().then((()=>{if(null!==a){const e={pathname:new URL(a).pathname};sessionStorage.setItem("ohif-redirect-to",JSON.stringify(e))}else{const e={pathname:"/"};sessionStorage.setItem("ohif-redirect-to",JSON.stringify(e))}null!==r?e.signinRedirect({login_hint:r}):e.signinRedirect()})),null)}const Le=function({oidc:e,routerBasename:t,userAuthenticationService:n}){const a=we(e,t),i=()=>{const e=n.getUser();if(e)return{Authorization:`Bearer ${e.access_token}`}},o=async()=>(await a.signinRedirect(),null),s=(0,v.Zp)();(0,r.useEffect)((()=>{localStorage.removeItem("signoutEvent");const e=e=>{localStorage.getItem("signoutEvent")&&s(`/logout?redirect_uri=${encodeURIComponent(window.location.href)}`)};return window.addEventListener("storage",e),()=>{window.removeEventListener("storage",e)}}),[]),(0,r.useEffect)((()=>{n.set({enabled:!0}),n.setServiceImplementation({getAuthorizationHeader:i,handleUnauthenticated:o})}),[]);const l=e[0].authority,c=(0,v.zy)(),{pathname:u,search:d}=c,m=new URL(a.settings._redirect_uri).pathname.replace("/"!==t?t:"",""),f=new URL(a.settings._silent_redirect_uri).pathname,g=new URL(a.settings._post_logout_redirect_uri).pathname;return u!==m&&sessionStorage.setItem("ohif-redirect-to",JSON.stringify({pathname:u,search:d})),r.createElement(v.BV,null,r.createElement(v.qh,{path:f,onEnter:window.location.reload}),r.createElement(v.qh,{path:g,element:r.createElement(Pe,{userManager:a,successCallback:()=>console.log("Signout successful"),errorCallback:e=>{console.warn(e),console.warn("Signout failed")}})}),r.createElement(v.qh,{path:m,element:r.createElement(Te,{userManager:a,onRedirectSuccess:e=>{const{pathname:t,search:r=""}=JSON.parse(sessionStorage.getItem("ohif-redirect-to"));n.setUser(e),s({pathname:t,search:r})}})}),r.createElement(v.qh,{path:"/login",element:r.createElement(xe,{userManager:a,oidcAuthority:l})}),r.createElement(v.qh,{path:"/logout",element:r.createElement(Re,{userManager:a})}))};let Ne,ke,Fe,Ue,Ve;function Be({config:e,defaultExtensions:t,defaultModes:n}){const[a,i]=(0,r.useState)(null);if((0,r.useEffect)((()=>{(async()=>{De(e,t,n).then(i).catch(console.error)})()}),[]),!a)return null;Ne=a.commandsManager,ke=a.extensionManager,Fe=a.servicesManager,Ue=a.serviceProvidersManager,Ve=a.hotkeysManager;const m=a.appConfig,{routerBasename:v,modes:f,dataSources:g,oidc:p,showStudyList:h}=m,S=document.createElement("canvas").getContext("webgl2"),y=S.getParameter(S.MAX_3D_TEXTURE_SIZE);m.max3DTextureSize=y;const{uiDialogService:I,uiModalService:M,uiNotificationService:C,uiViewportDialogService:b,viewportGridService:D,cineService:E,userAuthenticationService:T,customizationService:_}=Fe.services,P=[[d.X,{value:m}],[u.Ds,{service:T}],[s.xC,{i18n:o.A}],[u.cx],[u.nB],[u.ql,{service:D}],[u.cm,{service:b}],[u.p,{service:E}],[u.n,{service:C}],[u.Co,{service:I}],[u.Zn,{service:M,modal:u.aF}]],A=Object.entries(Ue.providers);A.length>0&&A.forEach((([e,t])=>{P.push([t,{service:Fe.services[e]}])}));const O=({children:e})=>c({components:P,children:e});let w=null;_.init(ke);const R=be({modes:f,dataSources:g,extensionManager:ke,servicesManager:Fe,commandsManager:Ne,hotkeysManager:Ve,routerBasename:v,showStudyList:h});return p&&(w=r.createElement(Le,{oidc:p,routerBasename:v,userAuthenticationService:T})),r.createElement(O,null,r.createElement(l.Kd,{basename:v},w,R))}Be.propTypes={config:i().oneOfType([i().func,i().shape({routerBasename:i().string.isRequired,oidc:i().array,whiteLabeling:i().object,extensions:i().array})]).isRequired,defaultExtensions:i().array},Be.defaultProps={config:{routerBaseName:"/",showLoadingIndicator:!0,showStudyList:!0,oidc:[],extensions:[]},defaultExtensions:[]};const Ge=Be;var je=n(72887);(async e=>{const t=e.dangerouslyUseDynamicConfig;if(t?.enabled){let e=new URLSearchParams(window.location.search).get("configUrl");if(e){const n=t.regex;if(e.match(n)){return(await fetch(e)).json()}return null}}return null})(window.config).then((e=>{null!==e&&(window.config=e);const t={config:window?window.config:{},defaultExtensions:oe,defaultModes:se},n=r.createElement(Ge,t,null);je.render(n,document.getElementById("root"))}))},15575:(e,t,n)=>{"use strict";n.d(t,{X:()=>c,r:()=>l});var r=n(41766),a=n(11374),i=n.n(a);const o=(0,r.createContext)(null),{Provider:s}=o,l=()=>(0,r.useContext)(o);function c({children:e,value:t}){const[n,a]=(0,r.useState)(t);return r.createElement(s,{value:[n]},e)}c.propTypes={children:i().any,value:i().any}},90942:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>{const e=()=>Math.floor(65536*(1+Math.random())).toString(16).substring(1);return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()}},17541:(e,t,n)=>{"use strict";n.d(t,{Vk:()=>c,Ay:()=>oe,yv:()=>ae,Os:()=>o.A,ot:()=>y,YF:()=>$});class r{static set(e,t,n){let a=r.getPathComponents(t),i=null!==a?a.length:0,o=!1;if(i>0&&r.isValidObject(e)){let t=0,s=i-1,l=e;for(;t<s;){let e=a[t];if(e in l){if(!r.isValidObject(l[e]))break}else l[e]={};l=l[e],t++}t===s&&(l[a[s]]=n,o=!0)}return o}static get(e,t){let n,a=r.getPathComponents(t),i=null!==a?a.length:0;if(i>0&&r.isValidObject(e)){let t=0,o=i-1,s=e;for(;t<o;){let e=a[t];const n=r.isValidObject(s[e]);if(!(e in s)||!n)break;s=s[e],t++}t===o&&a[o]in s&&(n=s[a[o]])}return n}static isValidObject(e){return"object"==typeof e&&null!==e&&e instanceof Object}static getPathComponents(e){return"string"==typeof e?e.split("."):null}}const a=r,i=e=>{let t="/";if(!e)return t;const n=window.location.origin,r=n.split("/");if(r.length>4){const a=n.indexOf(r[3]);t+=n.substring(a)+e}else t+=e;return t.replace(/\/\/+/g,"/")};var o=n(90942),s=n(20964),l=n(64522);const c=(e,t="",n=512)=>{const r=atob(e),a=[];for(let e=0;e<r.length;e+=n){const t=r.slice(e,e+n),i=new Array(t.length);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e);const o=new Uint8Array(i);a.push(o)}return new Blob(a,{type:t})};var u=n(19033);const d=e=>e?u.parse(e):{},m={getQueryFilters:(e={})=>{const{search:t}=e;if(!t)return;const n=d(t),r={};return Object.entries(n).forEach((([e,t])=>{var n;r[(n=e,n[0].toLowerCase()+n.slice(1))]=t})),r}},v={parse:d,queryString:m,paramString:{isValidPath:e=>e.indexOf("/:")<0,parseParam:e=>{const t=((e="")=>{try{return window.atob(e)}catch(t){return e}})(e);if(t&&"string"==typeof t)return t.split(";")},replaceParam:(e="",t,n)=>{const r=`:${t}`;return n?e.replace(r,n):e}}};function f(){let e,t,n=new Promise((function(n,r){t=n,e=r}));return Object.freeze({promise:n,resolve:t,reject:e})}var g,p,h=n(87641),S=n.n(h);!function(e,t={timeout:100}){var n=[],r=null,a=[],i=!1,o=null,s=e.prototype.handleKey;function l(e,t,n){if(this.recording)if("keydown"==n.type){1===e.length&&i&&u();for(let e=0;e<t.length;++e)c(t[e]);c(e)}else"keyup"==n.type&&a.length>0&&u();else s.apply(this,arguments)}function c(e){for(let t=0;t<a.length;++t)if(a[t]===e)return;a.push(e),1===e.length&&(i=!0)}function u(){n.push(a),a=[],i=!1,clearTimeout(o),o=setTimeout(d,t.timeout)}function d(){r&&(!function(e){for(let t=0;t<e.length;++t)e[t].sort((function(e,t){return e.length>1&&1===t.length?-1:1===e.length&&t.length>1||e>t?1:-1})),e[t]=e[t].join("+")}(n),r(n)),n=[],r=null,a=[]}e.prototype.record=function(e){var t=this;t.recording=!0,r=function(){t.recording=!1,e.apply(t,arguments)}},e.prototype.stopRecord=function(){this.recording=!1},e.prototype.startRecording=function(){this.recording=!0},e.prototype.handleKey=function(){l.apply(this,arguments)},e.init()}(S()),g=S(),p=g.prototype.stopCallback,g.prototype.stopCallback=function(e,t,n){return!!this.paused||p.call(this,e,t,n)},g.prototype.pause=function(){this.paused=!0},g.prototype.unpause=function(){this.paused=!1},g.init();const y=S();function I(e,t){const n=M.bind(null,e);return async function(...r){if(e.size>=e.limit)throw new Error("Queue limit reached");const a=async function(e,t,n){return await e,t(...n)}(e.awaiting,t,r);return e.awaiting=a.then(n,n),e.size++,a}}function M(e){e.size>0&&0==--e.size&&(e.awaiting=null)}var C=n(8291),b=n.n(C),D=n(92344);const E={"*":"application/octet-stream","1.2.840.10008.1.2.1":"application/octet-stream","1.2.840.10008.1.2":"application/octet-stream","1.2.840.10008.1.2.2":"application/octet-stream","1.2.840.10008.1.2.4.70":"image/jpeg","1.2.840.10008.1.2.4.50":"image/jpeg","1.2.840.10008.1.2.4.51":"image/dicom+jpeg","1.2.840.10008.1.2.4.57":"image/jpeg","1.2.840.10008.1.2.5":"image/dicom-rle","1.2.840.10008.1.2.4.80":"image/jls","1.2.840.10008.1.2.4.81":"image/jls","1.2.840.10008.1.2.4.90":"image/jp2","1.2.840.10008.1.2.4.91":"image/jp2","1.2.840.10008.1.2.4.92":"image/jpx","1.2.840.10008.1.2.4.93":"image/jpx"},T=(e=[],t="*",n=!1)=>{if(e.length>0)return e;let r=["multipart/related"];if(t&&E[t]){const e=E[t];r.push("type="+e),r.push("transfer-syntax="+t)}else r.push("type=application/octet-stream");return r.push("transfer-syntax=*"),n||(r=r.map((e=>{if(e.startsWith("type=")){return'type="'+e.substring(5,e.length)+'"'}if(e.startsWith("transfer-syntax=")){return'transfer-syntax="'+e.substring(16,e.length)+'"'}return e}))),[r.join("; ")]};function _(e,t){for(let n=0,r=e.length;n<r;++n){let r=e[n];if(A(r)){if(r[1].length>0){_(r[1],t.bind(null,r[0]));continue}r=r[0]}t(r)}}function P(e,t){let n=t.shift(),r=function(e,t){let n=function(e,t){if("string"==typeof t){for(let n=0,r=e.length;n<r;++n){let r=e[n];if(r===t||A(r)&&r[0]===