-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy path206.bundle.d299d5ccfd7ba2341ef3.js
2 lines (2 loc) · 99.5 KB
/
206.bundle.d299d5ccfd7ba2341ef3.js
1
2
"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([[206],{7206:(e,t,a)=>{a.r(t),a.d(t,{ContextMenuController:()=>Ht,CustomizableContextMenuTypes:()=>n,StaticWadoClient:()=>A,createReportAsync:()=>ze,createReportDialogPrompt:()=>Ge,default:()=>La,dicomWebUtils:()=>s,getStudiesForPatientByMRN:()=>Ve});var n={};a.r(n);var s={};a.r(s),a.d(s,{fixBulkDataURI:()=>O});var r=a(36922),i=a(55411),o=a(45476);const{getString:c,getName:l,getModalities:u}=i.DICOMWeb;function d(e){if(!e||!e.length)return[];const t=[];return e.forEach((e=>t.push({studyInstanceUid:c(e["0020000D"]),date:c(e["00080020"]),time:c(e["00080030"]),accession:c(e["00080050"])||"",mrn:c(e["00100020"])||"",patientName:i.utils.formatPN(l(e["00100010"]))||"",instances:Number(c(e["00201208"]))||0,description:c(e["00081030"])||"",modalities:c(u(e["00080060"],e["00080061"]))||""}))),t}async function m(e,t,a,n){return await e.searchForStudies({studyInstanceUid:void 0,queryParams:n})}function p(e,t={}){if(!e)return;const a=["00081030","00080060"].join(","),{supportsWildcard:n}=t,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 g({instance:e,frame:t,config:a,thumbnail:n=!1}){if(!e)return;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 f=a(31426);class S{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 I extends S{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 y=["00080021","00080031","0008103E","00200011"].join(",");class h{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 v extends S{*getPreLoaders(){const e=[],{studyInstanceUID:t,filters:{seriesInstanceUID:a}={},client:n}=this;let s={studyInstanceUID:t,queryParams:{includefield:y}};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}=f.Ay.data.DicomMetaDictionary,r=t.map(s);return(0,o.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 h;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 D=async function(e,t,a,n={},s,r){const i=new(!1!==a?v:I)(e,t,n,s,r);return await i.execLoad()};const b=function(e,t,a,n,s,r){const{SeriesInstanceUIDs:i}=n;return new Promise(((o,c)=>{const l=i.map((i=>{const o=Object.assign({},n,{seriesInstanceUID:i});return D(e,t,a,o,s,r)}));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)}))},w="RetrieveStudyMetadata",E=new Map;function M(e,t,a,n,s,r,i={}){if(!e)throw new Error(`${w}: Required 'dicomWebClient' parameter not provided.`);if(!t)throw new Error(`${w}: Required 'StudyInstanceUID' parameter not provided.`);const o=`${i.name}:${t}`;if(E.has(o))return E.get(o);let c;return c=n&&n.SeriesInstanceUIDs?b(e,t,a,n,s,r):new Promise(((i,o)=>{D(e,t,a,n,s,r).then((function(e){i(e)}),o)})),E.set(o,c),c}function x(e){E.has(e)&&E.delete(e)}function U(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]&&U(n,e,t))return t;return-1};function C(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:R}=r.FH,P=R;P._orig_buildMultipartAcceptHeaderFieldValue||(P._orig_buildMultipartAcceptHeaderFieldValue=P._buildMultipartAcceptHeaderFieldValue,P._buildMultipartAcceptHeaderFieldValue=function(e,t){return 1===e.length&&e[0].mediaType.endsWith("/*")?"*/*":P._orig_buildMultipartAcceptHeaderFieldValue(e,t)});class A extends r.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?C(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(A.studyFilterKeys))if(!this.filterItem(t,n,e,A.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(A.seriesFilterKeys))if(!this.filterItem(t,n,e,A.seriesFilterKeys))return!1;return!0}))}compareValues(e,t){if(Array.isArray(e))return e.find((e=>this.compareValues(e,t)));if(Array.isArray(t))return t.find((t=>this.compareValues(e,t)));if(t?.Alphabetic&&(t=t.Alphabetic),"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 s=n[e]||e;if(!t)return!0;const r=t[e]||t[s];if(!r)return!0;const i=a[e]||a[s];if(!i)return!1;if("DA"===i.vr&&i.Value?.[0])return this.compareDateRange(r,i.Value[0]);const o=i.Value;return this.compareValues(r,o)}toLowerParams(e){const t={};return Object.entries(e).forEach((([e,a])=>{t[e.toLowerCase()]=a})),t}}A.studyFilterKeys={studyinstanceuid:"0020000D",patientname:"00100010","00100020":"mrn",studydescription:"00081030",studydate:"00080020",modalitiesinstudy:"00080061",accessionnumber:"00080050"},A.seriesFilterKeys={seriesinstanceuid:"0020000E",seriesnumber:"00200011",modality:"00080060"};const T=(e,t)=>{const{wadoRoot:a,singlepart:n}=e,{instance:s,tag:r="PixelData",defaultPath:o="/pixeldata",defaultType:c="video/mp4",singlepart:l="video",url:u=null}=t;if(u)return u;const d=s[r];if(!d)return;if(d.DirectRetrieveURL)return d.DirectRetrieveURL;if(d.InlineBinary){const e=i.utils.b64toBlob(d.InlineBinary,c);return d.DirectRetrieveURL=URL.createObjectURL(e),d.DirectRetrieveURL}if(!n||!0!==n&&-1===n.indexOf(l)){if(d.retrieveBulkData){const e={mediaType:c};return d.retrieveBulkData(e).then((e=>(d.DirectRetrieveURL=URL.createObjectURL(new Blob([e],{type:c})),d.DirectRetrieveURL)))}return void console.warn("Unable to retrieve",r,"from",s)}const{StudyInstanceUID:m,SeriesInstanceUID:p,SOPInstanceUID:g}=s,f=d&&d.BulkDataURI||`series/${p}/instances/${g}${o}`,S=-1!==f.indexOf("?"),I=-1!==f.indexOf("accept=");return"PixelData"===r||"EncapsulatedDocument"===r?`${a}/studies/${m}/series/${p}/instances/${g}/rendered`:f+(I?"":(S?"&":"?")+`accept=${c}`)};function O(e,t,a){if(e.BulkDataURI.startsWith("http")||e.BulkDataURI.startsWith("/")){if("/"===e.BulkDataURI[0]&&a.wadoRoot.startsWith("http")){const t=new URL(a.wadoRoot);e.BulkDataURI=`${t.origin}${e.BulkDataURI}`}}else"studies"===a.bulkDataURI?.relativeResolution?e.BulkDataURI=`${a.wadoRoot}/studies/${t.StudyInstanceUID}/${e.BulkDataURI}`:"series"!==a.bulkDataURI?.relativeResolution&&a.bulkDataURI?.relativeResolution||(e.BulkDataURI=`${a.wadoRoot}/studies/${t.StudyInstanceUID}/series/${t.SeriesInstanceUID}/${e.BulkDataURI}`)}const{DicomMetaDictionary:F,DicomDict:k}=f.Ay.data,{naturalizeDataset:L,denaturalizeDataset:V}=F,$="2.25.270695996825855179949881587723571202391.2.0.0",_="OHIF-VIEWER-2.0.0",q="1.2.840.10008.1.2.1",j=i.classes.MetadataProvider;function H(e,t){const{userAuthenticationService:a,customizationService:n}=t.services;let s,l,u,f,S,I,y;const h={initialize:({params:t,query:n})=>{e.onConfiguration&&"function"==typeof e.onConfiguration&&(e=e.onConfiguration(e,{params:t,query:n})),s=JSON.parse(JSON.stringify(e)),I=()=>{const e={},t=a.getAuthorizationHeader();return t&&t.Authorization&&(e.Authorization=t.Authorization),e},y=()=>({...I(),Accept:i.utils.generateAcceptHeader(e.acceptHeader,e.requestTransferSyntaxUID,e.omitQuotationForMultipartRequest)}),l={url:e.qidoRoot,staticWado:e.staticWado,singlepart:e.singlepart,headers:a.getAuthorizationHeader(),errorInterceptor:i.r_.getHTTPErrorHandler()},u={url:e.wadoRoot,staticWado:e.staticWado,singlepart:e.singlepart,headers:a.getAuthorizationHeader(),errorInterceptor:i.r_.getHTTPErrorHandler()},f=e.staticWado?new A(l):new r.FH.DICOMwebClient(l),S=e.staticWado?new A(u):new r.FH.DICOMwebClient(u)},query:{studies:{mapParams:p.bind(),search:async function(t){f.headers=I();const{studyInstanceUid:a,seriesInstanceUid:n,...s}=p(t,{supportsFuzzyMatching:e.supportsFuzzyMatching,supportsWildcard:e.supportsWildcard})||{};return d(await m(f,0,0,s))},processResults:d.bind()},series:{search:async function(e){f.headers=I();return function(e){const t=[];return e&&e.length&&e.forEach((e=>t.push({studyInstanceUid:c(e["0020000D"]),seriesInstanceUid:c(e["0020000E"]),modality:c(e["00080060"]),seriesNumber:c(e["00200011"]),seriesDate:i.utils.formatDate(c(e["00080021"])),numSeriesInstances:Number(c(e["00201209"])),description:c(e["0008103E"])}))),(0,o.LM)(t),t}(await function(e,t){const a={includefield:["0008103E","00080021"].join(",")};return e.searchForSeries({studyInstanceUID:t,queryParams:a})}(f,e))}},instances:{search:(e,t)=>(f.headers=I(),m.call(void 0,f,e,null,t))}},retrieve:{directURL:t=>T({wadoRoot:e.wadoRoot,singlepart:e.singlepart},t),bulkDataURI:async({StudyInstanceUID:e,BulkDataURI:t})=>{f.headers=I();const a={multipart:!1,BulkDataURI:t,StudyInstanceUID:e};return f.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(S.headers=I(),e instanceof ArrayBuffer){const a={datasets:[e],request:t};await S.storeInstances(a)}else{let n=a;if(!a){const t={FileMetaInformationVersion:e._meta?.FileMetaInformationVersion?.Value,MediaStorageSOPClassUID:e.SOPClassUID,MediaStorageSOPInstanceUID:e.SOPInstanceUID,TransferSyntaxUID:q,ImplementationClassUID:$,ImplementationVersionName:_},a=V(t),s=new k(a);s.dict=V(e),n=s}const s={datasets:[n.write()],request:t};await S.storeInstances(s)}}},_retrieveSeriesMetadataSync:async(t,a,n,s,r)=>{S.headers=y();const o=(await M(S,t,!1,a,n,s,e)).map(L),c={},l={};o.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,j.addImageIdToUIDs(n,{StudyInstanceUID:t,SeriesInstanceUID:a.SeriesInstanceUID,SOPInstanceUID:a.SOPInstanceUID}),l[a.SeriesInstanceUID].push(a)}));const u=Object.values(c);return i.DicomMetadataStore.addSeriesMetadata(u,r),Object.keys(l).forEach((e=>i.DicomMetadataStore.addInstances(l[e],r))),c},_retrieveSeriesMetadataAsync:async(t,a,n,s,r=!1,o=!1)=>{S.headers=y();const{preLoadData:c,promises:l}=await M(S,t,!0,a,n,s,e),u=t=>{const a=L(t);return e.bulkDataURI?.enabled?(Object.keys(a).forEach((t=>{const n=a[t];n&&n.BulkDataURI&&!n.Value&&(n.retrieveBulkData=(t={})=>{O(n,a,e);const{mediaType:s}=t,r={multipart:!1,BulkDataURI:n.BulkDataURI,StudyInstanceUID:a.StudyInstanceUID,mediaTypes:s?[{mediaType:s},{mediaType:"application/octet-stream"}]:void 0,...t};return f.retrieveBulkData(r).then((e=>{const t=e instanceof Array&&e.find((e=>e?.byteLength))||void 0;return n.Value=t,t}))})})),a):a};function d(){const e=i.DicomMetadataStore.getStudy(t);e&&(e.isLoaded=!0)}c.forEach((e=>{e.StudyInstanceUID=t})),i.DicomMetadataStore.addSeriesMetadata(c,r);const m=l.map((a=>(o||a?.start(),a.then((a=>{!function(a){const n=a.map(u);n.forEach((a=>{a.wadoRoot=e.wadoRoot,a.wadoUri=e.wadoUri;const n=h.getImageIdsForInstance({instance:a});a.imageId=n,j.addImageIdToUIDs(n,{StudyInstanceUID:t,SeriesInstanceUID:a.SeriesInstanceUID,SOPInstanceUID:a.SOPInstanceUID})})),i.DicomMetadataStore.addInstances(n,r)}(a)})))));return o?(Promise.all(m).then((()=>d())),l):(await Promise.all(m),d(),c)},deleteStudyMetadataPromise:x,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})=>g({instance:t,frame:a,config:e}),getConfig:()=>s,getStudyInstanceUIDs({params:e,query:t}){const{StudyInstanceUIDs:a}=e,n=i.utils.splitComma(t.getAll("StudyInstanceUIDs")),s=n.length&&n||a;return s&&Array.isArray(s)?s:[s]}};var v;return e.supportsReject&&(h.reject=(v=e.wadoRoot,{series:(e,t)=>new Promise(((a,n)=>{const s=`${v}/studies/${e}/series/${t}/reject/113001%5EDCM`,r=new XMLHttpRequest;r.open("POST",s,!0),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()}))})),i.pt.create(h)}const B=i.Ay.classes.MetadataProvider,G={studyInstanceUid:"StudyInstanceUID",patientId:"PatientID"};let W={urls:[],studyInstanceUIDMap:new Map};function z(e){return Object.keys(e).reduce(((t,a)=>("object"==typeof e[a]&&null!==e[a]?t[a]=z(e[a]):t[a]=e[a],a.endsWith("Sequence")&&(t[a]=i.Ay.utils.addAccessors(t[a])),t)),Array.isArray(e)?[]:{})}const Y=e=>W.urls.find((t=>t.url===e)),X=(e,t)=>{let a=[];return W.urls.map((n=>{n.studies.map((n=>{n[e]===t&&a.push(n)}))})),a};function J(e){const{wadoRoot:t}=e,a={initialize:async({query:e,url:t})=>{t||(t=e.get("url"));let a=Y(t);if(a)return a.studies.map((e=>e.StudyInstanceUID));const n=await fetch(t),s=await n.json();let r,i;s.studies.forEach((e=>{r=e.StudyInstanceUID,e.series.forEach((e=>{i=e.SeriesInstanceUID,e.instances.forEach((e=>{const{url:t,metadata:a}=e;B.addImageIdToUIDs(t,{StudyInstanceUID:r,SeriesInstanceUID:i,SOPInstanceUID:a.SOPInstanceUID})}))}))})),W.urls.push({url:t,studies:[...s.studies]}),W.studyInstanceUIDMap.set(t,s.studies.map((e=>e.StudyInstanceUID)))},query:{studies:{mapParams:()=>{},search:async e=>{const[t,a]=Object.entries(e)[0],n=G[t];return X(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=>T(e,t),series:{metadata:async({StudyInstanceUID:e,madeInClient:t=!1,customSort:a}={})=>{if(!e)throw new Error("Unable to query for SeriesMetadata without StudyInstanceUID");const n=X("StudyInstanceUID",e)[0];let s;s=a?a(n.series):n.series;const r=s.map((e=>{const t={StudyInstanceUID:n.StudyInstanceUID,...e};return delete t.instances,t}));i.DicomMetadataStore.addSeriesMetadata(r,t);const o=s.length;s.forEach(((a,s)=>{const r=a.instances.map((e=>{const t={...z(e.metadata),url:e.url,imageId:e.url,...a,...n};return delete t.instances,delete t.series,t}));var c;c=r,i.DicomMetadataStore.addInstances(c,t),s===o-1&&(i.DicomMetadataStore.getStudy(e,t).isLoaded=!0)}))}}},store:{dicom:()=>{console.warn(" DICOMJson store dicom not implemented")}},getImageIdsForDisplaySet(t){const a=t.images,n=[];return a?(t.images.forEach((t=>{const a=t.NumberOfFrames;if(a>1)for(let s=0;s<a;s++){const a=g({instance:t,frame:s,config:e});n.push(a)}else{const a=g({instance:t,config:e});n.push(a)}})),n):n},getImageIdsForInstance:({instance:e,frame:t})=>g({instance:e,frame:t}),getStudyInstanceUIDs:({params:e,query:t})=>{const a=t.get("url");return W.studyInstanceUIDMap.get(a)}};return i.pt.create(a)}const K=i.Ay.classes.MetadataProvider,{EVENTS:Q}=i.DicomMetadataStore,Z={SR:!0,SEG:!0,DOC:!0},ee=(e,t,a=0)=>e===t?a:e<t?-1:1,te=(e,t)=>{const a=e.instances[0],n=t.instances[0],s=a.Modality,r=n.Modality,i=Z[s],o=Z[r];return i&&o?ee(a.SeriesNumber,n.SeriesNumber):i||o?i?-1:1:ee(n.SeriesNumber,a.SeriesNumber)};function ae(e){const{name:t}=e,a={initialize:({params:e,query:t})=>{},query:{studies:{mapParams:()=>{},search:e=>i.DicomMetadataStore.getStudyInstanceUIDs().map((e=>{let t=0;const a=new Set,n=i.DicomMetadataStore.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:i.utils.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=>i.DicomMetadataStore.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=i.DicomMetadataStore.getStudy(e,t);i.DicomMetadataStore._broadcastEvent(Q.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,K.addImageIdToUIDs(a,{StudyInstanceUID:n,SeriesInstanceUID:r,SOPInstanceUID:i,frameIndex:s?t:1})})),i.DicomMetadataStore._broadcastEvent(Q.INSTANCES_ADDED,{StudyInstanceUID:e,SeriesInstanceUID:n,madeInClient:t})}))}}},store:{dicom:e=>{const t=f.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,SOPInstanceUID:s}=e;let r=i.DicomMetadataStore.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=i.DicomMetadataStore.getStudy(e);t&&(t.series=t.series.sort(te),r=!0)})),r?s:[]}};return i.pt.create(a)}function ne(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);let i=await a.json();if(!i.servers?.dicomWeb?.[0])throw new Error("Invalid configuration returned by url");n=H(i.servers.dicomWeb[0].configuration,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 i.pt.create(s)}var se=a(5517);const re={"query.studies.search":{mergeKey:"studyInstanceUid",tagFunc:e=>e},"query.series.search":{mergeKey:"seriesInstanceUid",tagFunc:(e,t)=>(e.forEach((e=>{e.RetrieveAETitle=t,i.DicomMetadataStore.updateSeriesMetadata(e)})),e)}},ie=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=(0,se.get)(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?(0,se.uniqBy)(p.flat(),(e=>(0,se.get)(e,i))):p.flat(),g},oe=({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=(0,se.get)(n,e).apply(n,t);c.push(s)}}return c.flat()},ce=({path:e,args:t,defaultDataSourceName:a,extensionManager:n})=>{const[s]=n.getDataSources(a);return(0,se.get)(s,e).apply(s,t)},le=({path:e,args:t,defaultDataSourceName:a,extensionManager:n})=>{const[s]=t,r=i.DicomMetadataStore.getSeries(s.StudyInstanceUID,s.SeriesInstanceUID),[o]=n.getDataSources(r.RetrieveAETitle||a);return o[e](...t)};function ue(e,t,a){const{seriesMerge:n}=e,{dataSourceNames:s,defaultDataSourceName:r}=n,o={initialize:(...e)=>oe({path:"initialize",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r}),query:{studies:{search:(...e)=>ie({mergeMap:re,path:"query.studies.search",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r})},series:{search:(...e)=>ie({mergeMap:re,path:"query.series.search",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r})},instances:{search:(...e)=>ie({mergeMap:re,path:"query.instances.search",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r})}},retrieve:{bulkDataURI:(...e)=>ie({mergeMap:re,path:"retrieve.bulkDataURI",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r}),directURL:(...e)=>ce({path:"retrieve.directURL",args:e,defaultDataSourceName:r,extensionManager:a}),series:{metadata:(...e)=>ie({mergeMap:re,path:"retrieve.series.metadata",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r})}},store:{dicom:(...e)=>ce({path:"store.dicom",args:e,defaultDataSourceName:r,extensionManager:a})},deleteStudyMetadataPromise:(...e)=>oe({path:"deleteStudyMetadataPromise",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r}),getImageIdsForDisplaySet:(...e)=>le({path:"getImageIdsForDisplaySet",args:e,defaultDataSourceName:r,extensionManager:a}),getImageIdsForInstance:(...e)=>le({path:"getImageIdsForDisplaySet",args:e,defaultDataSourceName:r,extensionManager:a}),getStudyInstanceUIDs:(...e)=>oe({path:"getStudyInstanceUIDs",args:e,extensionManager:a,dataSourceNames:s,defaultDataSourceName:r})};return i.pt.create(o)}const de=function(){return[{name:"dicomweb",type:"webApi",createDataSource:H},{name:"dicomwebproxy",type:"webApi",createDataSource:ne},{name:"dicomjson",type:"jsonApi",createDataSource:J},{name:"dicomlocal",type:"localApi",createDataSource:ae},{name:"merge",type:"mergeApi",createDataSource:ue}]};var me=a(41766),pe=a(11374),ge=a.n(pe),fe=a(5085),Se=a(15575),Ie=a(37396),ye=a(80619),he=a(10971),ve=a(912);function De(){return De=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},De.apply(this,arguments)}function be({servicesManager:e,buttonSection:t="primary"}){const{toolbarButtons:a,onInteraction:n}=(0,i.tR)({servicesManager:e,buttonSection:t});return a.length?me.createElement(me.Fragment,null,a.map((t=>{if(!t)return null;const{id:a,Component:s,componentProps:r}=t,i=me.createElement(s,De({key:a,id:a,onInteraction:n,servicesManager:e},r));return me.createElement("div",{key:a},i)}))):null}const{availableLanguages:we,defaultLanguage:Ee,currentLanguage:Me}=ve.A;const xe=function({hotkeysManager:e,extensionManager:t,servicesManager:a,appConfig:n}){const s=(0,Ie.Zp)(),r=(0,he.zy)(),{FhircastService:o}=a.services,{t:c}=(0,ye.Bd)(),{show:l,hide:u}=(0,fe.hS)(),{hotkeyDefinitions:d,hotkeyDefaults:m}=e,p=[{title:c("Header:About"),icon:"info",onClick:()=>l({content:fe.VT,title:c("AboutModal:About OHIF Viewer"),contentProps:{versionNumber:"3.8.0-beta.81",commitHash:"f99a0bfb31434aa137bbb3ed1f9eef1dfcc09025"},containerDimensions:"max-w-4xl max-h-4xl"})},{title:c("Header:Preferences"),icon:"settings",onClick:()=>l({title:c("UserPreferencesModal:User preferences"),content:fe.im,contentProps:{hotkeyDefaults:e.getValidHotkeyDefinitions(m),hotkeyDefinitions:d,currentLanguage:Me(),availableLanguages:we,defaultLanguage:Ee,onCancel:()=>{i.ot.stopRecord(),i.ot.unpause(),u()},onSubmit:({hotkeyDefinitions:t,language:a})=>{a.value!==Me().value&&ve.A.changeLanguage(a.value),e.setHotkeys(t),u()},onReset:()=>e.restoreDefaultBindings(),hotkeysModule:i.ot}})}];if(n.oidc&&p.push({title:c("Header:Logout"),icon:"power-off",onClick:async()=>{s(`/logout?redirect_uri=${encodeURIComponent(window.location.href)}`)}}),n.fhircast){const e=o.getHub().hub_endpoint.replace("/api/hub","")+"/conference/manage?user="+o.getTopic();p.push({title:c("Header:Conferencing"),icon:"power-off",onClick:async()=>{window.open(e,"_blank")}})}return me.createElement(fe.Y9,{menuOptions:p,isReturnEnabled:!!n.showStudyList,onClickReturnButton:()=>{const{pathname:e}=r,a=e.indexOf("/",1),n=new URLSearchParams(window.location.search).get("configUrl"),i=e.substring(a+1),c=t.getDataSources(i),l=new URLSearchParams;-1!==a&&c&&l.append("datasources",e.substring(a+1)),n&&l.append("configUrl",n),o.fhircastPublish({timestamp:"",id:"",event:{"hub.topic":"","hub.event":"imagingstudy-close",context:[]}}),s({pathname:"/",search:decodeURIComponent(l.toString())})},WhiteLabeling:n.whiteLabeling,showPatientInfo:n.showPatientInfo,servicesManager:a,Secondary:me.createElement(be,{servicesManager:a,buttonSection:"secondary"}),appConfig:n},me.createElement(fe.tH,{context:"Primary Toolbar"},me.createElement("div",{className:"relative flex justify-center gap-[4px]"},me.createElement(be,{servicesManager:a}))))};function Ue(){return Ue=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},Ue.apply(this,arguments)}const Ne=({servicesManager:e,side:t,activeTabIndex:a,tabs:n,expandedWidth:s,...r})=>{const i=e?.services?.panelService,[o,c]=(0,me.useState)(!1),[l,u]=(0,me.useState)(a),[d,m]=(0,me.useState)(n??i.getPanels(t)),p=(0,me.useCallback)((()=>{c(!0)}),[]),g=(0,me.useCallback)((({activeTabIndex:e})=>{u(e)}),[]);return(0,me.useEffect)((()=>{u(a)}),[a]),(0,me.useEffect)((()=>{const{unsubscribe:e}=i.subscribe(i.EVENTS.PANELS_CHANGED,(e=>{e.position===t&&m(i.getPanels(t))}));return()=>{e()}}),[i,t]),(0,me.useEffect)((()=>{const e=i.subscribe(i.EVENTS.ACTIVATE_PANEL,(e=>{if(!o||e.forceActive){const t=d.findIndex((t=>t.id===e.panelId));-1!==t&&u(t)}}));return()=>{e.unsubscribe()}}),[d,o,i]),me.createElement(fe.wv,Ue({},r,{side:t,tabs:d,activeTabIndex:l,onOpen:p,onActiveTabIndexChange:g,expandedWidth:s}))};function Ce({extensionManager:e,servicesManager:t,hotkeysManager:a,commandsManager:n,viewports:s,ViewportGridComp:r,leftPanelClosed:o=!1,rightPanelClosed:c=!1}){const[l]=(0,Se.r)(),{panelService:u,hangingProtocolService:d}=t.services,[m,p]=(0,me.useState)(l.showLoadingIndicator),g=(0,me.useCallback)((e=>!!u.getPanels(e).length),[u]),[f,S]=(0,me.useState)(g("right")),[I,y]=(0,me.useState)(g("left")),[h,v]=(0,me.useState)(o),[D,b]=(0,me.useState)(c);(0,me.useEffect)((()=>(document.body.classList.add("bg-black"),document.body.classList.add("overflow-hidden"),()=>{document.body.classList.remove("bg-black"),document.body.classList.remove("overflow-hidden")})),[]);(0,me.useEffect)((()=>{const{unsubscribe:e}=d.subscribe(i.Qe.EVENTS.PROTOCOL_CHANGED,(()=>{p(!1)}));return()=>{e()}}),[d]);(0,me.useEffect)((()=>{const{unsubscribe:e}=u.subscribe(u.EVENTS.PANELS_CHANGED,(({options:e})=>{y(g("left")),S(g("right")),void 0!==e?.leftPanelClosed&&v(e.leftPanelClosed),void 0!==e?.rightPanelClosed&&b(e.rightPanelClosed)}));return()=>{e()}}),[u,g]);const w=s.map((t=>{const{entry:a}=(t=>{const a=e.getModuleEntry(t);if(!a||!a.component)throw new Error(`${t} is not valid for an extension module or no component found from extension ${t}. Please verify your configuration or ensure that the extension is properly registered. It's also possible that your mode is utilizing a module from an extension that hasn't been included in its dependencies (add the extension to the "extensionDependencies" array in your mode's index.js file). Check the reference string to the extension in your Mode configuration`);return{entry:a,content:a.component}})(t.namespace);return{component:a.component,displaySetsToDisplay:t.displaySetsToDisplay}}));return me.createElement("div",null,me.createElement(xe,{hotkeysManager:a,extensionManager:e,servicesManager:t,appConfig:l}),me.createElement("div",{className:"relative flex w-full flex-row flex-nowrap items-stretch overflow-hidden bg-black",style:{height:"calc(100vh - 52px"}},me.createElement(me.Fragment,null,m&&me.createElement(fe.Jx,{className:"h-full w-full bg-black"}),I?me.createElement(fe.tH,{context:"Left Panel"},me.createElement(Ne,{side:"left",activeTabIndex:h?null:0,servicesManager:t})):null,me.createElement("div",{className:"flex h-full flex-1 flex-col"},me.createElement("div",{className:"relative flex h-full flex-1 items-center justify-center overflow-hidden bg-black"},me.createElement(fe.tH,{context:"Grid"},me.createElement(r,{servicesManager:t,viewportComponents:w,commandsManager:n})))),f?me.createElement(fe.tH,{context:"Right Panel"},me.createElement(Ne,{side:"right",activeTabIndex:D?null:0,servicesManager:t})):null)),me.createElement(fe.j,{dialogConfiguration:l?.investigationalUseDialog}))}Ce.propTypes={extensionManager:ge().shape({getModuleEntry:ge().func.isRequired}).isRequired,commandsManager:ge().instanceOf(i.Sp),servicesManager:ge().instanceOf(i.CS),leftPanels:ge().array,rightPanels:ge().array,leftPanelClosed:ge().bool.isRequired,rightPanelClosed:ge().bool.isRequired,children:ge().oneOfType([ge().node,ge().func]).isRequired,viewports:ge().array};const Re=Ce;const{sortStudyInstances:Pe,formatDate:Ae}=i.utils;function Te({servicesManager:e,getImageSrc:t,getStudiesForPatientByMRN:a,requestDisplaySetCreationForStudy:n,dataSource:s}){const{hangingProtocolService:r,displaySetService:i,uiNotificationService:o}=e.services,c=(0,Ie.Zp)(),{StudyInstanceUIDs:l}=(0,fe.Bz)(),[{activeViewportId:u,viewports:d},m]=(0,fe.ih)(),[p,g]=(0,me.useState)("primary"),[f,S]=(0,me.useState)([...l]),[I,y]=(0,me.useState)([]),[h,v]=(0,me.useState)([]),[D,b]=(0,me.useState)({});(0,me.useEffect)((()=>{l.forEach((e=>async function(e){const t=await s.query.studies.search({studyInstanceUid:e});if(!t?.length)throw c("/notfoundstudy","_self"),new Error("Invalid study URL");let n=t;try{n=await a(t)}catch(e){console.warn(e)}const r=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:Ae(e.StudyDate),description:e.StudyDescription,modalities:e.ModalitiesInStudy,numInstances:e.NumInstances})));y((e=>{const t=[...e];for(const a of r)e.find((e=>e.studyInstanceUid===a.studyInstanceUid))||t.push(a);return t}))}(e)))}),[l,s,a,c]),(0,me.useEffect)((()=>{i.activeDisplaySets.forEach((async e=>{const a={},n=i.getDisplaySetByUID(e.displaySetInstanceUID),r=s.getImageIdsForDisplaySet(n),o=r[Math.floor(r.length/2)];o&&!n?.unsupported&&(a[e.displaySetInstanceUID]=await t(o),b((e=>({...e,...a}))))}))}),[l,s,i,t]),(0,me.useEffect)((()=>{const e=Fe(i.activeDisplaySets,D);Pe(e),v(e)}),[l,D,i]),(0,me.useEffect)((()=>{const e=i.subscribe(i.EVENTS.DISPLAY_SETS_ADDED,(e=>{const{displaySetsAdded:a,options:n}=e;a.forEach((async e=>{const a={},n=i.getDisplaySetByUID(e.displaySetInstanceUID);if(n?.unsupported)return;const r=s.getImageIdsForDisplaySet(n),o=r[Math.floor(r.length/2)];o&&(a[e.displaySetInstanceUID]=await t(o,e.initialViewport),b((e=>({...e,...a}))))}))}));return()=>{e.unsubscribe()}}),[t,s,i]),(0,me.useEffect)((()=>{const e=i.subscribe(i.EVENTS.DISPLAY_SETS_CHANGED,(e=>{const t=Fe(e,D);v(t)})),t=i.subscribe(i.EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED,(()=>{const e=Fe(i.getActiveDisplaySets(),D);v(e)}));return()=>{e.unsubscribe(),t.unsubscribe()}}),[l,D,i]);const w=function(e,t,a){const n=[],s=[],r=[];t.forEach((t=>{const i=a.filter((e=>e.StudyInstanceUID===t.studyInstanceUid)),o=Object.assign({},t,{displaySets:i});e.includes(t.studyInstanceUid)?n.push(o):(s.push(o),r.push(o))}));const i=[{name:"primary",label:"Primary",studies:n},{name:"recent",label:"Recent",studies:s},{name:"all",label:"All",studies:r}];return i}(l,I,h);const E=d.get(u)?.displaySetInstanceUIDs;return me.createElement(fe.M4,{tabs:w,servicesManager:e,activeTabName:p,onDoubleClickThumbnail:e=>{let t=[];const a=u;try{t=r.getViewportsRequireUpdate(a,e)}catch(e){console.warn(e),o.show({title:"Thumbnail Double Click",message:"The selected display sets could not be added to the viewport.",type:"info",duration:3e3})}m.setDisplaySetsForViewports(t)},activeDisplaySetInstanceUIDs:E,expandedStudyInstanceUIDs:f,onClickStudy:function(e){const t=f.includes(e),a=t?[...f.filter((t=>t!==e))]:[...f,e];if(S(a),!t){n(i,e,!0)}},onClickTab:e=>{g(e)}})}Te.propTypes={servicesManager:ge().object.isRequired,dataSource:ge().shape({getImageIdsForDisplaySet:ge().func.isRequired}).isRequired,getImageSrc:ge().func.isRequired,getStudiesForPatientByMRN:ge().func.isRequired,requestDisplaySetCreationForStudy:ge().func.isRequired};const Oe=Te;function Fe(e,t){const a=[],n=[];return e.filter((e=>!e.excludeFromThumbnailBrowser)).forEach((e=>{const s=t[e.displaySetInstanceUID],r=function(e){if(ke.includes(e.Modality)||e?.unsupported)return"thumbnailNoImage";return"thumbnail"}(e);("thumbnail"===r?a:n).push({displaySetInstanceUID:e.displaySetInstanceUID,description:e.SeriesDescription||"",seriesNumber:e.SeriesNumber,modality:e.Modality,seriesDate:e.SeriesDate,seriesTime:e.SeriesTime,numInstances:e.numImageFrames,countIcon:e.countIcon,StudyInstanceUID:e.StudyInstanceUID,messages:e.messages,componentType:r,imageSrc:s,dragData:{type:"displayset",displaySetInstanceUID:e.displaySetInstanceUID},isHydratedForDerivedDisplaySet:e.isHydrated})})),[...a,...n]}const ke=["SR","SEG","SM","RTSTRUCT","RTPLAN","RTDOSE"];const Le=function(e,t){return new Promise(((a,n)=>{const s=document.createElement("canvas");e.utilities.loadImageToCanvas({canvas:s,imageId:t,thumbnail:!0}).then((e=>{a(s.toDataURL())})).catch(n)}))};const Ve=async function(e,t){return t&&t.length&&t[0].mrn?e.query.studies.search({patientId:t[0].mrn}):(console.log("No mrn found for",t),t)};const $e=function(e,t,a,n){t.activeDisplaySets.some((e=>e.StudyInstanceUID===a))||e.retrieve.series.metadata({StudyInstanceUID:a,madeInClient:n})};function _e({commandsManager:e,extensionManager:t,servicesManager:a}){const n=t.getDataSources()[0],s=Ve.bind(null,n),r=(0,me.useCallback)(function(e){const t=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common");try{const{cornerstone:e}=t.exports.getCornerstoneLibraries();return Le.bind(null,e)}catch(e){throw new Error("Required command not found")}}(t),[]),i=$e.bind(null,n);return me.createElement(Oe,{servicesManager:a,dataSource:n,getImageSrc:r,getStudiesForPatientByMRN:s,requestDisplaySetCreationForStudy:i})}_e.propTypes={commandsManager:ge().object.isRequired,extensionManager:ge().object.isRequired,servicesManager:ge().object.isRequired};const qe=_e;var je=a(14771),He=a.n(je);const Be={CANCEL:0,CREATE_REPORT:1};function Ge(e,{extensionManager:t}){return new Promise((function(a,n){let s;const r=Object.keys(t.dataSourceMap).filter((e=>{const a=t.dataSourceDefs[e]?.configuration;return a?.supportsStow??a?.wadoRoot})).map((e=>({value:e,label:e,placeHolder:e})));s=e.create({centralize:!0,isDraggable:!1,content:fe.lG,useLastPosition:!1,showOverlay:!0,contentProps:{title:"Create Report",value:{label:"",dataSourceName:t.activeDataSource},noCloseButton:!0,onClose:()=>{e.dismiss({id:s}),a({action:Be.CANCEL,value:void 0,dataSourceName:void 0})},actions:[{id:"cancel",text:"Cancel",type:fe.Ny.NW.secondary},{id:"save",text:"Save",type:fe.Ny.NW.primary}],onSubmit:({action:t,value:n})=>{switch(e.dismiss({id:s}),t.id){case"save":a({action:Be.CREATE_REPORT,value:n.label,dataSourceName:n.dataSourceName});break;case"cancel":a({action:Be.CANCEL,value:void 0,dataSourceName:void 0})}},body:({value:t,setValue:n})=>me.createElement(me.Fragment,null,r.length>1&&window.config?.allowMultiSelectExport&&me.createElement("div",null,me.createElement("label",{className:"text-[14px] leading-[1.2] text-white"},"Data Source"),me.createElement(fe.l6,{closeMenuOnSelect:!0,className:"border-primary-main mt-2 bg-black",options:r,placeholder:r.find((e=>e.value===t.dataSourceName)).placeHolder,value:t.dataSourceName,onChange:e=>{n((t=>({...t,dataSourceName:e.value})))},isClearable:!1})),me.createElement("div",{className:"mt-3"},me.createElement(fe.pd,{autoFocus:!0,label:"Enter the report name",labelClassName:"text-white text-[14px] leading-[1.2]",className:"border-primary-main bg-black",type:"text",value:t.label,onChange:e=>{e.persist(),n((t=>({...t,label:e.target.value})))},onKeyPress:n=>{"Enter"===n.key&&(e.dismiss({id:s}),a({action:Be.CREATE_REPORT,value:t.label}))},required:!0})))}})}))}function We(){return me.createElement("div",{className:"text-primary-active"},"Loading...")}const ze=async function({servicesManager:e,getReport:t,reportType:a="measurement"}){const{displaySetService:n,uiNotificationService:s,uiDialogService:r}=e.services,o=r.create({showOverlay:!0,isDraggable:!1,centralize:!0,content:We});try{const e=await t();i.DicomMetadataStore.addInstances([e],!0);const r=n.getMostRecentDisplaySet().displaySetInstanceUID;return s.show({title:"Create Report",message:`${a} saved successfully`,type:"success"}),[r]}catch(e){s.show({title:"Create Report",message:e.message||`Failed to store ${a}`,type:"error"})}finally{r.dismiss({id:o})}},Ye=4700;function Xe(e,t){const a=t.getActiveDisplaySets().filter((e=>"SR"===e.Modality)).find((t=>t.SeriesDescription===e));if(a){console.log("Storing to same series",a);const{instance:e}=a,{SeriesInstanceUID:t,SeriesDescription:n,SeriesDate:s,SeriesTime:r,SeriesNumber:i,Modality:o}=e;return{SeriesInstanceUID:t,SeriesDescription:n,SeriesDate:s,SeriesTime:r,SeriesNumber:i,Modality:o,InstanceNumber:a.instances.length+1}}const n=function(e){const t=e.getActiveDisplaySets().filter((e=>"SR"===e.Modality)).map((e=>e.SeriesNumber));return Math.max(...t,Ye)+1}(t);return{SeriesDescription:e,SeriesNumber:n}}const{downloadCSVReport:Je}=i.utils;function Ke({servicesManager:e,commandsManager:t,extensionManager:a}){const{t:n}=(0,ye.Bd)("MeasurementTable"),[s,r]=(0,fe.ih)(),{activeViewportId:i,viewports:o}=s,{measurementService:c,uiDialogService:l,uiNotificationService:u,displaySetService:d}=e.services,[m,p]=(0,me.useState)([]);(0,me.useEffect)((()=>{const e=He()(p,100);p(Qe(c));const t=c.EVENTS.MEASUREMENT_ADDED,a=c.EVENTS.RAW_MEASUREMENT_ADDED,n=c.EVENTS.MEASUREMENT_UPDATED,s=c.EVENTS.MEASUREMENT_REMOVED,r=c.EVENTS.MEASUREMENTS_CLEARED,i=[];return[t,a,n,s,r].forEach((t=>{i.push(c.subscribe(t,(()=>{e(Qe(c))})).unsubscribe)})),()=>{i.forEach((e=>{e()})),e.cancel()}}),[]);const g=({uid:e,isActive:t})=>{if(!t){const t=[...m],a=t.find((t=>t.uid===e));t.forEach((t=>t.isActive=t.uid===e)),a.isActive=!0,p(t)}};return me.createElement(me.Fragment,null,me.createElement("div",{className:"ohif-scrollbar overflow-y-auto overflow-x-hidden","data-cy":"measurements-panel"},me.createElement(fe.V,{title:n("Measurements"),servicesManager:e,data:m,onClick:({uid:e,isActive:t})=>{c.jumpToMeasurement(s.activeViewportId,e),g({uid:e,isActive:t})},onEdit:({uid:e,isActive:t})=>{const a=c.getMeasurement(e),n=({action:t,value:n})=>{if("save"===t.id)c.update(e,{...a,...n},!0);l.dismiss({id:"enter-annotation"})};l.create({id:"enter-annotation",centralize:!0,isDraggable:!1,showOverlay:!0,content:fe.lG,contentProps:{title:"Annotation",noCloseButton:!0,value:{label:a.label||""},body:({value:e,setValue:t})=>me.createElement(fe.pd,{label:"Enter your annotation",labelClassName:"text-white text-[14px] leading-[1.2]",autoFocus:!0,id:"annotation",className:"border-primary-main bg-black",type:"text",value:e.label,onChange:e=>{e.persist(),t((t=>({...t,label:e.target.value})))},onKeyPress:t=>{"Enter"===t.key&&n({value:e,action:{id:"save"}})}}),actions:[{id:"cancel",text:"Cancel",type:fe.Ny.NW.secondary},{id:"save",text:"Save",type:fe.Ny.NW.primary}],onSubmit:n}})}})),me.createElement("div",{className:"flex justify-center p-4"},me.createElement(fe.wr,{t:n,actions:[{label:"Export",onClick:async function(){const e=c.getMeasurements();Je(e,c)}},{label:"Create Report",onClick:async function(){const n=o.get(i),s=c.getMeasurements(),r=d.getDisplaySetByUID(n.displaySetInstanceUIDs[0]),m=s.filter((e=>r.StudyInstanceUID===e.referenceStudyUID));if(m.length<=0)return void u.show({title:"No Measurements",message:"No Measurements are added to the current Study.",type:"info",duration:3e3});const p=await Ge(l,{extensionManager:a});if(p.action===Be.CREATE_REPORT){const n=a.getDataSources(p.dataSourceName)[0],s=Xe(void 0===p.value||""===p.value?"Research Derived Series":p.value,d);return ze({servicesManager:e,getReport:async()=>t.runCommand("storeMeasurements",{measurementData:m,dataSource:n,additionalFindingTypes:["ArrowAnnotate"],options:s},"CORNERSTONE_STRUCTURED_REPORT")})}}}]})))}function Qe(e){return e.getMeasurements().map(((t,a)=>function(e,t,a){const{displayText:n,uid:s,label:r,type:i,selected:o,findingSites:c,finding:l}=e,u=c?.[0],d=r||l?.text||u?.text||"(empty)";let m=n||[];if(c){const e=[];c.forEach((t=>{t?.text!==d&&e.push(t.text)})),m=[...e,...m]}l&&l?.text!==d&&(m=[l.text,...m]);return{uid:s,label:d,baseLabel:r,measurementType:i,displayText:m,baseDisplayText:n,isActive:o,finding:l,findingSites:c}}(t,0,e.VALUE_TYPES)))}Ke.propTypes={servicesManager:ge().instanceOf(i.CS).isRequired};var Ze=a(92344);const et=function({commandsManager:e,extensionManager:t,servicesManager:a}){return[{name:"seriesList",iconName:"tab-studies",iconLabel:"Studies",label:Ze.A.t("SidePanel:Studies"),component:qe.bind(null,{commandsManager:e,extensionManager:t,servicesManager:a})},{name:"measure",iconName:"tab-linear",iconLabel:"Measure",label:Ze.A.t("SidePanel:Measurements"),secondaryLabel:Ze.A.t("SidePanel:Measurements"),component:()=>me.createElement(Ke,{commandsManager:e,servicesManager:a,extensionManager:t})}]};var tt=a(8094),at=a(48085),nt=a(14169),st=a(13835);const rt=JSON.parse('{"UU":"@ohif/extension-default"}').UU;var it=a(44563);var ot=a(58099);var ct=a(44753);function lt(e,t,a,n){const s=ct.eR.scaleAndAdd(ct.eR.create(),e,a,n);return ct.eR.distance(t,s)>n}function ut(e){if(!e?.length)return!1;const t=(0,ot.A)(e[0].ImageOrientationPatient);if(!t)return!1;const a=function(e){const t=ct.eR.fromValues(e[0],e[1],e[2]),a=ct.eR.fromValues(e[3],e[4],e[5]);return ct.eR.cross(ct.eR.create(),t,a)}(t),n=(0,ot.A)(e[0].ImagePositionPatient),s=(0,ot.A)(e[e.length-1].ImagePositionPatient),r=(0,st.jj)(n,s)/(e.length-1);let i=n;for(let t=1;t<e.length;t++){const n=e[t],s=(0,ot.A)(n.ImagePositionPatient);if(lt(i,s,a,r))return!1;i=s}return!0}function dt(e,t){e.length>2&&(function(e){if(!e?.length)return!1;const t=e[0],a=(0,ot.A)(t.Rows),n=(0,ot.A)(t.Columns);for(let t=1;t<e.length;t++){const s=e[t],{Rows:r,Columns:i}=s;if(r!==a||i!==n)return!1}return!0}(e)||t.addMessage(i.Ob.CODES.INCONSISTENT_DIMENSIONS),function(e){if(!e?.length)return!1;const t=e[0],a=(0,ot.A)(t.SamplesPerPixel);for(let t=1;t<e.length;t++){const n=e[t],{SamplesPerPixel:s}=n;if(s!==a)return!1}return!0}(e)||t.addMessage(i.Ob.CODES.INCONSISTENT_COMPONENTS),function(e){if(!e?.length)return!1;const t=e[0],a=(0,ot.A)(t.ImageOrientationPatient);for(let t=1;t<e.length;t++){const n=e[t],s=(0,ot.A)(n.ImageOrientationPatient);if(!(0,st.sW)(s,a))return!1}return!0}(e)||t.addMessage(i.Ob.CODES.INCONSISTENT_ORIENTATIONS),ut(e)||t.addMessage(i.Ob.CODES.INCONSISTENT_POSITION_INFORMATION),function(e,t){if(!e?.length)return;const a=(0,ot.A)(e[0].ImagePositionPatient);if(!a)return;const n=(0,ot.A)(e[e.length-1].ImagePositionPatient),s=(0,st.jj)(a,n)/(e.length-1);let r=a;const o=[];for(let a=1;a<e.length;a++){const n=e[a],c=(0,ot.A)(n.ImagePositionPatient),l=(0,st.jj)(c,r),u=(0,st.Op)(l,s);if(u){const e=u.issue;if(o.includes(e)||(o.push(e),e===st.JG.MISSING_FRAMES?t.addMessage(i.Ob.CODES.MISSING_FRAMES):e===st.JG.IRREGULAR_SPACING&&t.addMessage(i.Ob.CODES.IRREGULAR_SPACING)),o.length>1)break}r=c}}(e,t))}function mt(e,t,a){const n=new i.WZ;if(a)return n;if(!e.length)return void n.addMessage(i.Ob.CODES.NO_VALID_INSTANCES);const s=e[0],{Modality:r,ImageType:o,NumberOfFrames:c}=s;if(o?.includes("LOCALIZER"))return n;if(!st.Hf.includes(r))return n;const l=c>1;l||e.every((e=>e.ImagePositionPatient))||n.addMessage(i.Ob.CODES.NO_POSITION_INFORMATION);const u=(0,it.A)(e);return l?function(e,t){(0,st.Yt)(e)||t.addMessage(i.Ob.CODES.MULTIFRAME_NO_PIXEL_MEASUREMENTS),(0,st.VX)(e)||t.addMessage(i.Ob.CODES.MULTIFRAME_NO_ORIENTATION),(0,st.sL)(e)||t.addMessage(i.Ob.CODES.MULTIFRAME_NO_POSITION_INFORMATION)}(u[0],n):dt(u,n),t||n.addMessage(i.Ob.CODES.NOT_RECONSTRUCTABLE),n}function pt(e){const t=new nt.A(e),a=new i.WZ;a.addMessage(i.Ob.CODES.UNSUPPORTED_DISPLAYSET);const n=e[0];return t.setAttributes({displaySetInstanceUID:t.uid,SeriesDate:n.SeriesDate,SeriesTime:n.SeriesTime,SeriesInstanceUID:n.SeriesInstanceUID,StudyInstanceUID:n.StudyInstanceUID,SeriesNumber:n.SeriesNumber||0,FrameRate:n.FrameTime,SOPClassUID:n.SOPClassUID,SeriesDescription:n.SeriesDescription||"",Modality:n.Modality,numImageFrames:e.length,unsupported:!0,SOPClassHandlerId:"unsupported",isReconstructable:!1,messages:a}),[t]}const gt="chart",ft=(e,t)=>{const{StudyInstanceUID:a,SeriesInstanceUID:n,SOPInstanceUID:s,SeriesDescription:r,SeriesNumber:o,SeriesDate:c,SOPClassUID:l}=e;return{Modality:"CHT",loading:!1,isReconstructable:!1,displaySetInstanceUID:i.utils.guid(),SeriesDescription:r,SeriesNumber:o,SeriesDate:c,SOPInstanceUID:s,SeriesInstanceUID:n,StudyInstanceUID:a,SOPClassHandlerId:`${rt}.sopClassHandlerModule.${gt}`,SOPClassUID:l,isDerivedDisplaySet:!0,isLoaded:!0,sopClassUids:t,instance:e,instances:[e],addInstances:function(e,t){return this.instances.push(...e),this.instance=this.instances[this.instances.length-1],this}}};function St(e){if(!e||!e.length)throw new Error("No instances were provided");const t=function(e){const t=new Set;return e.forEach((e=>{t.add(e.SOPClassUID)})),Array.from(t)}(e);return e.map((e=>{if("CHT"===e.Modality)return ft(e,t);throw new Error("Unsupported modality")}))}const It={name:gt,sopClassUids:["1.9.451.13215.7.3.2.7.6.1"],getDisplaySetsFromSeries:e=>St(e)},yt="stack";let ht={};const vt=e=>e.NumberOfFrames>1;function Dt(e){const t=(e=>{const{extensionManager:t}=ht;if(!t)throw new Error("extensionManager is not available");const a=e.map((({imageId:e})=>e)),n=t.getModuleEntry("@ohif/extension-cornerstone.utilityModule.volumeLoader"),{getDynamicVolumeInfo:s}=n.exports;return s(a)})(e),{isDynamicVolume:a,timePoints:n}=t;let s;if(a){const t=n[0],a=new Map;e.forEach((e=>a.set(e.imageId,e)));const r=t.map((e=>a.get(e)));s=(0,st.Ay)(r)}else s=(0,st.Ay)(e);return{isDynamicVolume:a,...s,dynamicVolumeInfo:t}}const bt=e=>{const t=e[0],a=new nt.A(e),{isDynamicVolume:n,value:s,averageSpacingBetweenFrames:r,dynamicVolumeInfo:i}=Dt(e),o=n?"cornerstoneStreamingDynamicImageVolume":"cornerstoneStreamingImageVolume",c=mt(e,s,n);a.setAttributes({volumeLoaderSchema:o,displaySetInstanceUID:a.uid,SeriesDate:t.SeriesDate,SeriesTime:t.SeriesTime,SeriesInstanceUID:t.SeriesInstanceUID,StudyInstanceUID:t.StudyInstanceUID,SeriesNumber:t.SeriesNumber||0,FrameRate:t.FrameTime,SOPClassUID:t.SOPClassUID,SeriesDescription:t.SeriesDescription||"",Modality:t.Modality,isMultiFrame:vt(t),countIcon:s?"icon-mpr":void 0,numImageFrames:e.length,SOPClassHandlerId:`${rt}.sopClassHandlerModule.${yt}`,isReconstructable:s,messages:c,averageSpacingBetweenFrames:r||null,isDynamicVolume:n,dynamicVolumeInfo:i});return a.sortBy(((e,t)=>(parseInt(e.InstanceNumber)||0)-(parseInt(t.InstanceNumber)||0))),a},wt=e=>"CR"===e||"MG"===e||"DX"===e;function Et(e){if(!e||!e.length)throw new Error("No instances were provided");const t=[],a=function(e){const t=new Set;return e.forEach((e=>{t.add(e.SOPClassUID)})),Array.from(t)}(e),n=[];if(e.forEach((e=>{if(!(0,tt.w)(e.SOPClassUID)&&!e.Rows)return;let s;vt(e)?(s=bt([e]),s.setAttributes({sopClassUids:a,isClip:!0,numImageFrames:e.NumberOfFrames,instanceNumber:e.InstanceNumber,acquisitionDatetime:e.AcquisitionDateTime}),t.push(s)):wt(e.Modality)?(s=bt([e]),s.setAttributes({sopClassUids:a,instanceNumber:e.InstanceNumber,acquisitionDatetime:e.AcquisitionDateTime}),t.push(s)):n.push(e)})),n.length){const s=bt(n);s.setAttribute("studyInstanceUid",e[0].StudyInstanceUID),s.setAttributes({sopClassUids:a}),t.push(s)}return t}const Mt=[at.A.ComputedRadiographyImageStorage,at.A.DigitalXRayImageStorageForPresentation,at.A.DigitalXRayImageStorageForProcessing,at.A.DigitalMammographyXRayImageStorageForPresentation,at.A.DigitalMammographyXRayImageStorageForProcessing,at.A.DigitalIntraOralXRayImageStorageForPresentation,at.A.DigitalIntraOralXRayImageStorageForProcessing,at.A.CTImageStorage,at.A.EnhancedCTImageStorage,at.A.LegacyConvertedEnhancedCTImageStorage,at.A.UltrasoundMultiframeImageStorage,at.A.MRImageStorage,at.A.EnhancedMRImageStorage,at.A.EnhancedMRColorImageStorage,at.A.LegacyConvertedEnhancedMRImageStorage,at.A.UltrasoundImageStorage,at.A.UltrasoundImageStorageRET,at.A.SecondaryCaptureImageStorage,at.A.MultiframeSingleBitSecondaryCaptureImageStorage,at.A.MultiframeGrayscaleByteSecondaryCaptureImageStorage,at.A.MultiframeGrayscaleWordSecondaryCaptureImageStorage,at.A.MultiframeTrueColorSecondaryCaptureImageStorage,at.A.XRayAngiographicImageStorage,at.A.EnhancedXAImageStorage,at.A.XRayRadiofluoroscopicImageStorage,at.A.EnhancedXRFImageStorage,at.A.XRay3DAngiographicImageStorage,at.A.XRay3DCraniofacialImageStorage,at.A.BreastTomosynthesisImageStorage,at.A.BreastProjectionXRayImageStorageForPresentation,at.A.BreastProjectionXRayImageStorageForProcessing,at.A.IntravascularOpticalCoherenceTomographyImageStorageForPresentation,at.A.IntravascularOpticalCoherenceTomographyImageStorageForProcessing,at.A.NuclearMedicineImageStorage,at.A.VLEndoscopicImageStorage,at.A.VideoEndoscopicImageStorage,at.A.VLMicroscopicImageStorage,at.A.VideoMicroscopicImageStorage,at.A.VLSlideCoordinatesMicroscopicImageStorage,at.A.VLPhotographicImageStorage,at.A.VideoPhotographicImageStorage,at.A.OphthalmicPhotography8BitImageStorage,at.A.OphthalmicPhotography16BitImageStorage,at.A.OphthalmicTomographyImageStorage,at.A.VLWholeSlideMicroscopyImageStorage,at.A.PositronEmissionTomographyImageStorage,at.A.EnhancedPETImageStorage,at.A.LegacyConvertedEnhancedPETImageStorage,at.A.RTImageStorage,at.A.EnhancedUSVolumeStorage];const xt=function(e){return ht=e,[{name:yt,sopClassUids:Mt,getDisplaySetsFromSeries:Et},{name:"not-supported-display-sets-handler",sopClassUids:[],getDisplaySetsFromSeries:pt},{name:It.name,sopClassUids:It.sopClassUids,getDisplaySetsFromSeries:It.getDisplaySetsFromSeries}]};function Ut(){return me.createElement("span",{className:"border-common-dark mx-2 h-8 w-4 self-center border-l"})}function Nt(){return Nt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},Nt.apply(this,arguments)}const Ct=[{icon:"layout-common-1x1",commandOptions:{numRows:1,numCols:1}},{icon:"layout-common-1x2",commandOptions:{numRows:1,numCols:2}},{icon:"layout-common-2x2",commandOptions:{numRows:2,numCols:2}},{icon:"layout-common-2x3",commandOptions:{numRows:2,numCols:3}}],Rt=({servicesManager:e})=>{const{hangingProtocolService:t,viewportGridService:a,displaySetService:n}=e.services,s=Array.from(t.protocols.values()),r=a.getActiveViewportId();if(!r)return[];const i=a.getDisplaySetsUIDsForViewport(r).map((e=>n.getDisplaySetByUID(e)));return s.map((e=>{if(!e.isPreset)return null;const a=((e,t,a)=>!e.displaySetSelectors||0===Object.values(e.displaySetSelectors).length||a.areRequiredSelectorsValid(Object.values(e.displaySetSelectors),t[0]))(e,i,t);return{icon:e.icon,title:e.name,commandOptions:{protocolId:e.id},disabled:!a}})).filter((e=>null!==e))};function Pt({rows:e,columns:t,className:a,onSelection:n,onSelectionPreset:s,servicesManager:r,tooltipDisabled:i,...o}){const[c,l]=(0,me.useState)(!1),{customizationService:u}=r.services,d=u.get("commonPresets")||Ct,m=u.get("advancedPresets")||Rt({servicesManager:r}),p=()=>{c&&l(!1)};(0,me.useEffect)((()=>(window.addEventListener("click",p),()=>{window.removeEventListener("click",p)})),[c]);const g=c?fe.sG:null;return me.createElement(fe.IB,{id:"Layout",label:"Layout",icon:"tool-layout",onInteraction:()=>{l(!c)},className:a,rounded:o.rounded,disableToolTip:i,dropdownContent:null!==g&&me.createElement("div",{className:"flex "},me.createElement("div",{className:"bg-secondary-dark flex flex-col gap-2.5 p-2"},me.createElement("div",{className:"text-aqua-pale text-xs"},"Common"),me.createElement("div",{className:"flex gap-4"},d.map(((e,t)=>me.createElement(fe.qu,{key:t,classNames:"hover:bg-primary-dark group p-1 cursor-pointer",icon:e.icon,commandOptions:e.commandOptions,onSelection:n})))),me.createElement("div",{className:"h-[2px] bg-black"}),me.createElement("div",{className:"text-aqua-pale text-xs"},"Advanced"),me.createElement("div",{className:"flex flex-col gap-2.5"},m.map(((e,t)=>me.createElement(fe.qu,{key:t+d.length,classNames:"hover:bg-primary-dark group flex gap-2 p-1 cursor-pointer",icon:e.icon,title:e.title,disabled:e.disabled,commandOptions:e.commandOptions,onSelection:s}))))),me.createElement("div",{className:"bg-primary-dark flex flex-col gap-2.5 border-l-2 border-solid border-black p-2"},me.createElement("div",{className:"text-aqua-pale text-xs"},"Custom"),me.createElement(g,{rows:e,columns:t,onSelection:n}),me.createElement("p",{className:"text-aqua-pale text-xs leading-tight"},"Hover to select ",me.createElement("br",null),"rows and columns ",me.createElement("br",null)," Click to apply"))),isActive:c,type:"toggle"})}Pt.propTypes={rows:ge().number,columns:ge().number,onLayoutChange:ge().func,servicesManager:ge().instanceOf(i.CS)},Pt.defaultProps={columns:4,rows:3,onLayoutChange:()=>{}};const At=function({commandsManager:e,servicesManager:t,...a}){const[n,s]=(0,me.useState)(!1),r=(0,me.useCallback)((t=>{e.run({commandName:"setViewportGridLayout",commandOptions:{...t}}),s(!0)}),[]),i=(0,me.useCallback)((t=>{e.run({commandName:"setHangingProtocol",commandOptions:{...t}}),s(!0)}),[]);return me.createElement("div",{onMouseEnter:()=>{s(!1)}},me.createElement(Pt,Nt({},a,{onSelection:r,onSelectionPreset:i,servicesManager:t,tooltipDisabled:n})))};function Tt(){return Tt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},Tt.apply(this,arguments)}function Ot({groupId:e,primary:t,secondary:a,items:n,renderer:s,onInteraction:r,servicesManager:i}){const{toolbarService:o}=i?.services,c=(0,me.useCallback)((t=>t.map(((t,a)=>({...t,index:a,onClick:()=>{r({groupId:e,itemId:t.id,commands:t.commands})}})))),[]),l=o?.getButtonComponentForUIType(t.uiType)??fe.IB,u=s;return me.createElement(fe.fk,{primary:t,secondary:a,items:c(n),groupId:e,renderer:u,onInteraction:r,Component:e=>me.createElement(l,Tt({},e,{servicesManager:i}))})}Ot.propTypes={isRadio:ge().bool,groupId:ge().string,primary:ge().shape({id:ge().string.isRequired,uiType:ge().string}),secondary:ge().shape({id:ge().string,icon:ge().string.isRequired,label:ge().string,tooltip:ge().string.isRequired,disabled:ge().bool,className:ge().string}),items:ge().arrayOf(ge().shape({id:ge().string.isRequired,icon:ge().string,label:ge().string,tooltip:ge().string,disabled:ge().bool,className:ge().string})),renderer:ge().func,onInteraction:ge().func.isRequired,servicesManager:ge().shape({services:ge().shape({toolbarService:ge().object})})},Ot.defaultProps={isRadio:!1,isAction:!1};const Ft=Ot;const kt=function({groupId:e,items:t,onInteraction:a,size:n}){const s=(0,me.useCallback)((t=>t.map(((t,s)=>me.createElement(fe.IB,{key:t.id,icon:t.icon,label:t.label,disabled:t.disabled,className:t.className,id:t.id,size:n,onClick:()=>{a({groupId:e,itemId:t.id,commands:t.commands})},toolTipClassName:""})))),[a,e]);return me.createElement(fe.e2,null,s(t))},Lt=(e=[])=>e.map((e=>({label:e.name,value:e.id,info:e.info,activated:!1,completed:!1})));const Vt=function({servicesManager:e}){const{workflowStepsService:t}=e.services,[a,n]=(0,me.useState)(t.activeWorkflowStep?.id),[s,r]=(0,me.useState)(Lt(t.workflowSteps)),i=(0,me.useCallback)((e=>{e.completed||r((t=>{const a=[...t];for(let t=a.findIndex((t=>t.value===e.value));t>=0;t--){const e=a[t];if(e.completed)break;a[t]={...e,completed:!0}}return a}))}),[]),o=(0,me.useCallback)((({selectedOption:e})=>{e&&(i(e),n(e.value))}),[i]);return(0,me.useEffect)((()=>(a&&t.setActiveWorkflowStep(a),()=>clearTimeout(undefined))),[a,t]),(0,me.useEffect)((()=>{const{unsubscribe:e}=t.subscribe(t.EVENTS.STEPS_CHANGED,(()=>r(Lt(t.workflowSteps)))),{unsubscribe:a}=t.subscribe(t.EVENTS.ACTIVE_STEP_CHANGED,(()=>n(t.activeWorkflowStep.id)));return()=>{e(),a()}}),[e,t]),me.createElement(fe.LW,{options:s,value:a,onChange:o})};function $t(e,t,a,n){const s={selectorProps:e,event:t},r=function(e,t,a){const{subMenu:n}=t,s=function*(){yield function(e,t){if(t)return e.find((e=>e.id===t))}(e,a||n),yield function(e,t){return e?e.find((e=>!e.selector||e.selector(t.selectorProps))):null}(e,t)}();let r=s.next(),i=r.value;for(;!r.done;)i=r.value,i&&s.return(),r=s.next();return i}(a,s,n);if(!r)return;if(!r.items)return console.warn("Must define items in menu",r),[];let i=[];return r.items.forEach((n=>{const{delegating:r,selector:o,subMenu:c}=n;if(!o||o(e))if(r)i=[...i,...$t(e,t,a,c)];else{const e=function(e,t){const a={...e,value:t.selectorProps?.value};"ShowSubMenu"!==e.actionType||a.iconRight||(a.iconRight="chevron-menu");e.action||(a.action=(e,n)=>{const{event:s={}}=n,{detail:r={}}=s;a.element=r.element,n.onClose();const i=n[`on${e.actionType||"Default"}`];i?i.call(n,a,e,t):console.warn("No action defined for",e)});return a}(n,s);i.push(e)}})),i}var _t,qt=a(59852),jt=a(24542);class Ht{constructor(e,t){this.commandsManager=void 0,this.services=void 0,this.menuItems=void 0,this.services=e.services,this.commandsManager=t}closeContextMenu(){this.services.uiDialogService.dismiss({id:"context-menu"})}showContextMenu(e,t,a){if(!this.services.uiDialogService)return void console.warn("Unable to show dialog; no UI Dialog Service available.");const{event:n,subMenu:s,menuId:r,menus:i,selectorProps:o}=e,c=jt.annotation.state.getAnnotationManager(),{locking:l}=jt.annotation,u=o?.nearbyToolData?.annotationUID;if(l.isAnnotationLocked(c.getAnnotation(u)))return void console.warn("Annotation is locked.");const d=$t(o||e,n,i,r);this.services.uiDialogService.dismiss({id:"context-menu"}),this.services.uiDialogService.create({id:"context-menu",isDraggable:!1,preservePosition:!1,preventCutOf:!0,defaultPosition:Ht._getDefaultPosition(a,n?.detail,t),event:n,content:qt.A,onClickOutside:()=>this.services.uiDialogService.dismiss({id:"context-menu"}),contentProps:{items:d,selectorProps:o,menus:i,event:n,subMenu:s,eventData:n?.detail,onClose:()=>{this.services.uiDialogService.dismiss({id:"context-menu"})},onShowSubMenu:(n,s,r)=>{s.subMenu?this.showContextMenu({...e,menuId:s.subMenu},t,a):console.warn("No submenu defined for",n,s,r)},onDefault:(e,t,a)=>{this.commandsManager.run(e,{...o,...t,subProps:a})}}})}}_t=Ht,Ht.getDefaultPosition=()=>({x:0,y:0}),Ht._getEventDefaultPosition=e=>({x:e&&e.currentPoints.client[0],y:e&&e.currentPoints.client[1]}),Ht._getElementDefaultPosition=e=>{if(e){const t=e.getBoundingClientRect();return{x:t.x,y:t.y}}return{x:void 0,y:void 0}},Ht._getCanvasPointsPosition=(e=[],t)=>{const a=_t._getElementDefaultPosition(t);for(let t=0;t<e.length;t++){const n={x:e[t][0]||e[t].x,y:e[t][1]||e[t].y};if(_t._isValidPosition(n)&&_t._isValidPosition(a))return{x:n.x+a.x,y:n.y+a.y}}},Ht._isValidPosition=e=>e&&"number"==typeof e.x&&"number"==typeof e.y,Ht._getDefaultPosition=(e,t,a)=>{const n=function*(){yield _t._getCanvasPointsPosition(e,a),yield _t._getEventDefaultPosition(t),yield _t._getElementDefaultPosition(a),yield _t.getDefaultPosition()}();let s=n.next(),r=s.value;for(;!s.done;)r=s.value,_t._isValidPosition(r)&&n.return(),s=n.next();return r};const Bt={id:"measurementsContextMenu",customizationType:"ohif.contextMenu",menus:[{id:"forExistingMeasurement",selector:({nearbyToolData:e})=>!!e,items:[{label:"Delete measurement",commands:[{commandName:"deleteMeasurement",context:"CORNERSTONE"}]},{label:"Add Label",commands:[{commandName:"setMeasurementLabel"}]}]}]};var Gt=a(8291),Wt=a.n(Gt),zt=a(6943),Yt=a(61466),Xt=a.n(Yt);const Jt={padding:"10px 0"},Kt={borderBottomWidth:"1px",...Jt};function Qt({tagRef:e,vrRef:t,keywordRef:a,valueRef:n}){return me.createElement("div",{className:Xt()("bg-secondary-dark ohif-scrollbar flex w-full flex-row overflow-y-scroll"),style:Jt},me.createElement("div",{className:"w-4/24 px-3"},me.createElement("label",{ref:e,className:"flex flex-1 select-none flex-col pl-1 text-lg text-white"},me.createElement("span",{className:"flex flex-row items-center focus:outline-none"},"Tag"))),me.createElement("div",{className:"w-2/24 px-3"},me.createElement("label",{ref:t,className:"flex flex-1 select-none flex-col pl-1 text-lg text-white"},me.createElement("span",{className:"flex flex-row items-center focus:outline-none"},"VR"))),me.createElement("div",{className:"w-6/24 px-3"},me.createElement("label",{ref:a,className:"flex flex-1 select-none flex-col pl-1 text-lg text-white"},me.createElement("span",{className:"flex flex-row items-center focus:outline-none"},"Keyword"))),me.createElement("div",{className:"w-5/24 grow px-3"},me.createElement("label",{ref:n,className:"flex flex-1 select-none flex-col pl-1 text-lg text-white"},me.createElement("span",{className:"flex flex-row items-center focus:outline-none"},"Value"))))}const Zt=function({rows:e}){const t=(0,me.useRef)(),a=(0,me.useRef)(),[n,s]=(0,me.useState)(null),[r,i]=(0,me.useState)(null),[o,c]=(0,me.useState)(null),[l,u]=(0,me.useState)(null);(0,me.useEffect)((()=>{t?.current&&(t.current.scrollTo(0),t.current.resetAfterIndex(0))}),[e]),(0,me.useEffect)((()=>{const e=He()((()=>t.current.resetAfterIndex(0)),100);return window.addEventListener("resize",e),()=>{e.cancel(),window.removeEventListener("resize",e)}}),[]);const d=(0,me.useCallback)((({index:t,style:a})=>{const n=e[t];return me.createElement("div",{style:{...a,...Kt},className:Xt()("hover:bg-secondary-main border-secondary-light flex w-full flex-row items-center break-all bg-black text-base transition duration-300","leading-[20px]"),key:`DICOMTagRow-${t}`},me.createElement("div",{className:"w-4/24 px-3"},n[0]),me.createElement("div",{className:"w-2/24 px-3"},n[1]),me.createElement("div",{className:"w-6/24 px-3"},n[2]),me.createElement("div",{className:"w-5/24 grow px-3"},n[3]))}),[e]),m=(0,me.useCallback)((()=>null!==n),[n]),p=(0,me.useCallback)((t=>{const s=[n.offsetWidth,r.offsetWidth,o.offsetWidth,l.offsetWidth],i=a.current.getContext("2d");return i.font=getComputedStyle(a.current).font,e[t].map(((e,t)=>{const a=i.measureText(e).width;return 20*Math.ceil(a/s[t])+20+1})).reduce(((e,t)=>Math.max(e,t)))}),[e,o,n,l,r]);return me.createElement("div",null,me.createElement("canvas",{style:{visibility:"hidden",position:"absolute"},className:"text-base",ref:a}),me.createElement(Qt,{tagRef:e=>{e&&s(e)},vrRef:e=>{e&&i(e)},keywordRef:e=>{e&&c(e)},valueRef:e=>{e&&u(e)}}),me.createElement("div",{className:"relative m-auto border-2 border-black bg-black",style:{height:"32rem"}},m()&&me.createElement(zt._m,{ref:t,height:500,itemCount:e.length,itemSize:p,width:"100%",className:"ohif-scrollbar"},d)))},{ImageSet:ea}=i.classes,{DicomMetaDictionary:ta}=f.Ay.data,{nameMap:aa}=ta;function na(e,t){const a=[];return e.forEach((e=>{if("SQ"===e.vr){a.push([`${e.tagIndent}${e.tag}`,e.vr,e.keyword,""]);const{values:n}=e;n.forEach(((e,n)=>{const s=na(e,t);a.push([`${e[0].tagIndent}(FFFE,E000)`,"",`Item #${n}`,""]),a.push(...s)}))}else{if("xs"===e.vr)try{const a=f.Ay.data.Tag.fromPString(e.tag).toCleanString(),n=t[a];e.vr=n.vr}catch(t){console.error(`Failed to parse value representation for tag '${e.keyword}'`)}a.push([`${e.tagIndent}${e.tag}`,e.vr,e.keyword,e.value])}})),a}function sa(e,t=0){const a=Object.keys(e);let n="";for(let e=0;e<t;e++)n+=">";t>0&&(n+=" ");const s=[];for(let i=0;i<a.length;i++){let o=a[i];if("_vrMap"===o)continue;const c=aa[o];let l=e[o];if(c&&"SQ"===c.vr){const e=(r=l,Array.isArray(r)?r:[r]),a={tag:c.tag,tagIndent:n,vr:c.vr,keyword:o,values:[]};if(s.push(a),null===l)continue;e.forEach((e=>{const n=sa(e,t+1);n.length&&(ra(n),a.values.push(n))}))}else if(Array.isArray(l)&&l.length>0&&"object"!=typeof l[0]&&(l=l.join("\\")),"number"==typeof l&&(l=l.toString()),"string"!=typeof l&&(null===l?l=" ":"object"==typeof l?l.InlineBinary?l="Inline Binary":l.BulkDataURI?l="Bulk Data URI":l.Alphabetic?l=l.Alphabetic:(console.warn(`Unrecognised Value: ${l} for ${o}:`),console.warn(l),l=" "):(console.warn(`Unrecognised Value: ${l} for ${o}:`),l=" ")),o=o.replace("RETIRED_",""),c)s.push({tag:c.tag,tagIndent:n,vr:c.vr,keyword:o,value:l});else{const e=/[0-9A-Fa-f]{6}/g;if(o.match(e)){const e=`(${o.substring(0,4)},${o.substring(4,8)})`;s.push({tag:e,tagIndent:n,vr:"",keyword:"Private Tag",value:l})}}}var r;return s}function ra(e){e.sort(((e,t)=>e.tag<t.tag?-1:1))}const ia=({displaySets:e,displaySetInstanceUID:t})=>{const a=new Set([1]),[n,s]=(0,me.useState)(t),[r,i]=(0,me.useState)(1),[o,c]=(0,me.useState)(""),l=e.find((e=>e.displaySetInstanceUID===n)),u=l instanceof ea;const d=u&&l.images.length>1,m=(0,me.useMemo)((()=>(e.sort(((e,t)=>e.SeriesNumber-t.SeriesNumber)),e.map((e=>{const{displaySetInstanceUID:t,SeriesDate:a,SeriesTime:n,SeriesNumber:s,SeriesDescription:r,Modality:i}=e,o=`${a}:${n}`.split(".")[0];return{value:t,label:`${s} (${i}): ${r}`,description:Wt()(o,"YYYYMMDD:HHmmss").format("ddd, MMM Do YYYY")}})))),[e]),p=(0,me.useMemo)((()=>{let e;e=u?l.images[r-1]:l.instance||l;const t=function(e){const t=sa(e);return ra(t),t}(e);return na(t,e)}),[r,n]),g=(0,me.useMemo)((()=>{if(!o)return p;const e=o.toLowerCase();return p.filter((t=>t.reduce(((t,n,s)=>t||(a.has(s)?t:t||n.toLowerCase().includes(e))),!1)))}),[p,o]),f=(0,me.useMemo)((()=>He()(c,200)),[]);return(0,me.useEffect)((()=>()=>{f?.cancel()}),[]),me.createElement("div",{className:"dicom-tag-browser-content"},me.createElement("div",{className:"mb-6 flex flex-row items-center pl-1"},me.createElement("div",{className:"flex w-1/2 flex-row items-center"},me.createElement(fe.o5,{variant:"subtitle",className:"mr-4"},"Series"),me.createElement("div",{className:"mr-8 grow"},me.createElement(fe.l6,{id:"display-set-selector",isClearable:!1,onChange:e=>{s(e.value),i(1)},options:m,value:m.find((e=>e.value===n)),className:"text-white"}))),me.createElement("div",{className:"flex w-1/2 flex-row items-center"},d&&me.createElement(fe.o5,{variant:"subtitle",className:"mr-4"},"Instance Number"),d&&me.createElement("div",{className:"grow"},me.createElement(fe.Qr,{value:r,key:n,onChange:e=>{i(parseInt(e))},minValue:1,maxValue:l.images.length,step:1,inputClassName:"w-full",labelPosition:"left",trackColor:"#3a3f99"})))),me.createElement("div",{className:"h-1 w-full bg-black"}),me.createElement("div",{className:"my-3 flex w-1/2 flex-row"},me.createElement(fe.Cv,{className:"mr-8 block w-full",placeholder:"Search metadata...",onDebounceChange:c})),me.createElement(Zt,{rows:g}))},oa=(e,t,a)=>{const{activeViewportId:n}=e,{protocol:s}=t.getActiveProtocol();if(!s)return;const r=t.getState(),{protocolId:i,stageIndex:o,activeStudyUID:c}=r,l=a.getState(),u={...l.viewportGridStore},d={...l.displaySetSelectorMap},m=s.stages[o],p=`${c}:${i}:${o}`,g=`${c}:${i}`,f={...l.hangingProtocolStageIndexMap},{rows:S,columns:I}=m.viewportStructure.properties,y=m.viewports.length!==e.viewports.size||e.layout.numRows!==S||e.layout.numCols!==I;return f[g]=r,p&&y&&(u[p]={...e}),e.viewports.forEach(((e,t)=>{const{displaySetOptions:a,displaySetInstanceUIDs:s}=e;if(a)for(let e=0;e<a.length;e++){const r=s[e];r&&(t===n&&0===e&&(d[`${c}:activeDisplaySet:0`]=r),a[e]?.id&&(d[`${c}:${a[e].id}:${a[e].matchedDisplaySetsIndex||0}`]=r))}})),{hangingProtocolStageIndexMap:f,viewportGridStore:u,displaySetSelectorMap:d}},ca=(e,t,a,n,s)=>{const r=t?.[n];if(r)return{...r};const{protocolId:i,stageIndex:o}=e.getState();s.inDisplay||(s.inDisplay=[...t.initialInDisplay]);const c=e.getMissingViewport(i,o,s);if(c){const e=c.displaySetsInfo.map((e=>e.displaySetInstanceUID));return s.inDisplay.push(...e),{displaySetInstanceUIDs:e,displaySetOptions:c.displaySetsInfo.map((e=>e.displaySetOptions)),viewportOptions:{...c.viewportOptions}}}return{}},la=(e,{numRows:t,numCols:a},n)=>{const{viewports:s}=e,r={...n.getState().viewportsByPosition},i=[];s.forEach((e=>{if(e.positionId){const t={...e,viewportOptions:{...e.viewportOptions}};r[e.positionId]=t}}));for(let e=0;e<t;e++)for(let t=0;t<a;t++){const a=r[`${t}-${e}`];a?.displaySetInstanceUIDs&&i.push(...a.displaySetInstanceUIDs)}return r.initialInDisplay=i,{viewportsByPosition:r}};var ua=a(68870);const{subscribeToNextViewportGridChange:da}=i.utils,ma=({servicesManager:e,commandsManager:t})=>{const{customizationService:a,measurementService:n,hangingProtocolService:s,uiNotificationService:r,viewportGridService:i,displaySetService:o,stateSyncService:c}=e.services,l=new Ht(e,t),u={showContextMenu:e=>{const{menuCustomizationId:t,element:n,event:r,selectorProps:i,defaultPointsPosition:o=[]}=e,c={...e};t&&Object.assign(c,a.get(t,Bt));const{protocol:u,stage:d}=s.getActiveProtocol();c.selectorProps={event:r,protocol:u,stage:d,...i},l.showContextMenu(c,n,o)},closeContextMenu:()=>{l.closeContextMenu()},displayNotification:({text:e,title:t,type:a})=>{r.show({title:t,message:e,type:a})},clearMeasurements:()=>{n.clear()},setHangingProtocol:({activeStudyUID:e="",protocolId:t,stageId:a,stageIndex:n,reset:o=!1})=>{try{const r=i.getState(),l=s.getState(),u=oa(r,s,c),{hangingProtocolStageIndexMap:d,viewportGridStore:m,displaySetSelectorMap:p}=u;if(t){if(void 0===n&&void 0===a){const a=`${e||l.activeStudyUID}:${t}`;n=d[a]?.stageIndex}}else t=l.protocolId,void 0===a&&void 0===n&&(n=l.stageIndex);const g=n??s.getStageIndex(t,{stageId:a,stageIndex:n});e&&s.setActiveStudyUID(e);const f=`${s.getState().activeStudyUID}:${t}:${g||0}`,S=!o&&m[f];return t!==l.protocolId||g!==l.stageIndex||e?(s.setProtocol(t,{displaySetSelectorMap:p,stageId:a,stageIndex:g,restoreProtocol:S}),S&&i.set(m[f])):s.setProtocol(t,{stageId:a,stageIndex:g}),delete p[`${e||l.activeStudyUID}:activeDisplaySet:0`],c.store(u),!0}catch(e){return console.error(e),r.show({title:"Apply Hanging Protocol",message:"The hanging protocol could not be applied.",type:"error",duration:3e3}),!1}},toggleHangingProtocol:({protocolId:e,stageIndex:t})=>{const{protocol:a,stageIndex:n,activeStudy:r}=s.getActiveProtocol(),{toggleHangingProtocol:i}=c.getState(),o=`${r.StudyInstanceUID}:${e}:${0|t}`;if(a.id!==e||void 0!==t&&t!==n)return c.store({toggleHangingProtocol:{...i,[o]:{protocolId:a.id,stageIndex:n}}}),u.setHangingProtocol({protocolId:e,stageIndex:t,reset:!0});{const e=i[o]||{protocolId:"default"};return u.setHangingProtocol(e)}},deltaStage:({direction:e})=>{const{protocolId:t,stageIndex:a}=s.getState(),{protocol:n}=s.getActiveProtocol();for(let s=a+e;s>=0&&s<n.stages.length;s+=e)if("disabled"!==n.stages[s].status)return u.setHangingProtocol({protocolId:t,stageIndex:s});r.show({title:"Change Stage",message:"The hanging protocol has no more applicable stages",type:"info",duration:3e3})},setViewportGridLayout:({numRows:e,numCols:a,isHangingProtocolLayout:n=!1})=>{const{protocol:r}=s.getActiveProtocol(),o=r.callbacks?.onLayoutChange;if(!1===t.run(o,{numRows:e,numCols:a}))return void console.log("setViewportGridLayout running",o,e,a);window.setTimeout((()=>{const t=i.getState(),r=la(t,{numRows:e,numCols:a},c),o=ca.bind(null,s,r.viewportsByPosition);i.setLayout({numRows:e,numCols:a,findOrCreateViewport:o,isHangingProtocolLayout:n}),c.store(r)}),0)},toggleOneUp(){const e=i.getState(),{activeViewportId:t,viewports:a,layout:n}=e,{displaySetInstanceUIDs:r,displaySetOptions:o,viewportOptions:l}=a.get(t);if(1===n.numCols&&1===n.numRows){const{toggleOneUpViewportGridStore:e}=c.getState();if(!e.layout)return;const t=e.activeViewportId,a=r.length>1?[]:r.map((e=>s.getViewportsRequireUpdate(t,e))).flat(),n=(t,n)=>{const s=Array.from(e.viewports.values()).find((e=>e.positionId===n)),r=a.find((e=>e.viewportId===s.viewportId));return r?{viewportOptions:l,displaySetOptions:o,...r}:s},u=i.getLayoutOptionsFromState(e);i.setLayout({numRows:e.layout.numRows,numCols:e.layout.numCols,activeViewportId:t,layoutOptions:u,findOrCreateViewport:n,isHangingProtocolLayout:!0})}else{c.store({toggleOneUpViewportGridStore:e});const t=()=>({displaySetInstanceUIDs:r,displaySetOptions:o,viewportOptions:l});i.setLayout({numRows:1,numCols:1,findOrCreateViewport:t,isHangingProtocolLayout:!0});da(i,(()=>{c.store({toggleOneUpViewportGridStore:{}})}))}},navigateHistory(e){ua.b.navigate(e.to,e.options)},openDICOMTagViewer(){const{activeViewportId:t,viewports:a}=i.getState(),n=a.get(t),{displaySetInstanceUIDs:s}=n,r=o.activeDisplaySets,{UIModalService:c}=e.services,l=s[0];c.show({content:ia,contentProps:{displaySets:r,displaySetInstanceUID:l,onClose:c.hide},containerDimensions:"max-w-4xl max-h-4xl",title:"DICOM Tag Browser"})},toggleOverlays:()=>{const e=document.getElementsByClassName("viewport-overlay");for(let t=0;t<e.length;t++)e.item(t).classList.toggle("hidden")},scrollActiveThumbnailIntoView:()=>{const{activeViewportId:e,viewports:t}=i.getState(),a=t.get(e).displaySetInstanceUIDs[0],n=document.querySelector("#ohif-thumbnail-list");if(!n)return;const s=n.getBoundingClientRect(),r=document.querySelector(`#thumbnail-${a}`);if(!r)return;const o=r.getBoundingClientRect();o.top>=s.top&&o.top<=s.bottom||r.scrollIntoView({behavior:"smooth"})},updateViewportDisplaySet:({direction:e,excludeNonImageModalities:t})=>{const a=["SR","SEG","SM","RTSTRUCT","RTPLAN","RTDOSE"],n=s.getDisplaySetSortFunction(),c=[...o.activeDisplaySets];c.sort(n);const{activeViewportId:l,viewports:d}=i.getState(),{displaySetInstanceUIDs:m}=d.get(l);let p;for(p=c.findIndex((e=>m.includes(e.displaySetInstanceUID)))+e;p>-1&&p<c.length&&(t&&a.includes(c[p].Modality));p+=e);if(p<0||p>=c.length)return;const{displaySetInstanceUID:g}=c[p];let f=[];try{f=s.getViewportsRequireUpdate(l,g)}catch(e){console.warn(e),r.show({title:"Navigate Viewport Display Set",message:"The requested display sets could not be added to the viewport due to a mismatch in the Hanging Protocol rules.",type:"info",duration:3e3})}i.setDisplaySetsForViewports(f),setTimeout((()=>u.scrollActiveThumbnailIntoView()),0)}},d={showContextMenu:{commandFn:u.showContextMenu},closeContextMenu:{commandFn:u.closeContextMenu},clearMeasurements:{commandFn:u.clearMeasurements},displayNotification:{commandFn:u.displayNotification},setHangingProtocol:{commandFn:u.setHangingProtocol},toggleHangingProtocol:{commandFn:u.toggleHangingProtocol},navigateHistory:{commandFn:u.navigateHistory},nextStage:{commandFn:u.deltaStage,options:{direction:1}},previousStage:{commandFn:u.deltaStage,options:{direction:-1}},setViewportGridLayout:{commandFn:u.setViewportGridLayout},toggleOneUp:{commandFn:u.toggleOneUp},openDICOMTagViewer:{commandFn:u.openDICOMTagViewer},updateViewportDisplaySet:{commandFn:u.updateViewportDisplaySet}};return{actions:u,definitions:d,defaultContext:"DEFAULT"}},pa={id:"@ohif/mnGrid",description:"Has various hanging protocol grid layouts",name:"2x2",protocolMatchingRules:[{id:"OneOrMoreSeries",weight:25,attribute:"numberOfDisplaySetsWithImages",constraint:{greaterThan:0}}],toolGroupIds:["default"],displaySetSelectors:{defaultDisplaySetId:{seriesMatchingRules:[{attribute:"numImageFrames",constraint:{greaterThan:{value:0}},required:!0},{attribute:"isDisplaySetFromUrl",weight:10,constraint:{equals:!0}}]}},defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"defaultDisplaySetId",matchedDisplaySetsIndex:-1}]},stages:[{id:"2x2",stageActivation:{enabled:{minViewportsMatched:4}},viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[{viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{matchedDisplaySetsIndex:1,id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{matchedDisplaySetsIndex:2,id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{matchedDisplaySetsIndex:3,id:"defaultDisplaySetId"}]}]},{id:"3x1",requiredViewports:1,preferredViewports:3,stageActivation:{enabled:{minViewportsMatched:3}},viewportStructure:{layoutType:"grid",properties:{rows:1,columns:3}},viewports:[{viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"defaultDisplaySetId",matchedDisplaySetsIndex:1}]},{viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"defaultDisplaySetId",matchedDisplaySetsIndex:2}]}]},{id:"2x1",requiredViewports:1,preferredViewports:2,stageActivation:{enabled:{minViewportsMatched:2}},viewportStructure:{layoutType:"grid",properties:{rows:1,columns:2}},viewports:[{viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{matchedDisplaySetsIndex:1,id:"defaultDisplaySetId"}]}]},{id:"1x1",requiredViewports:1,preferredViewports:1,stageActivation:{enabled:{minViewportsMatched:1}},viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"defaultDisplaySetId"}]}]}],numberOfPriorsReferenced:-1},ga={id:"defaultDisplaySetId"},fa={id:"priorDisplaySetId"},Sa={viewportOptions:{toolGroupId:"default",allowUnmatchedView:!0},displaySets:[ga]},Ia={...Sa,displaySets:[{...ga,matchedDisplaySetsIndex:1}]},ya={...Sa,displaySets:[fa]},ha={id:"@ohif/hpCompare",description:"Compare two studies in various layouts",name:"Compare Two Studies",numberOfPriorsReferenced:1,protocolMatchingRules:[{id:"Two Studies",weight:1e3,attribute:"StudyInstanceUID",from:"prior",required:!0,constraint:{notNull:!0}}],toolGroupIds:["default"],displaySetSelectors:{defaultDisplaySetId:{studyMatchingRules:[{attribute:"studyInstanceUIDsIndex",from:"options",required:!0,constraint:{equals:{value:0}}}],seriesMatchingRules:[{attribute:"numImageFrames",constraint:{greaterThan:{value:0}}},{attribute:"isDisplaySetFromUrl",weight:10,constraint:{equals:!0}}]},priorDisplaySetId:{studyMatchingRules:[{attribute:"studyInstanceUIDsIndex",from:"options",required:!0,constraint:{equals:{value:1}}}],seriesMatchingRules:[{attribute:"numImageFrames",constraint:{greaterThan:{value:0}}},{attribute:"isDisplaySetFromUrl",weight:10,constraint:{equals:!0}}]}},defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"defaultDisplaySetId",matchedDisplaySetsIndex:-1}]},stages:[{name:"2x2",stageActivation:{enabled:{minViewportsMatched:4}},viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[Sa,ya,Ia,{...ya,displaySets:[{...fa,matchedDisplaySetsIndex:1}]}]},{name:"2x1",stageActivation:{enabled:{minViewportsMatched:2}},viewportStructure:{layoutType:"grid",properties:{rows:1,columns:2}},viewports:[Sa,ya]}]},va={id:"default",locked:!0,name:"Default",createdDate:"2021-02-23T19:22:08.894Z",modifiedDate:"2023-04-01",availableTo:{},editableBy:{},protocolMatchingRules:[],toolGroupIds:["default"],hpInitiationCriteria:{minSeriesLoaded:1},numberOfPriorsReferenced:0,defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"defaultDisplaySetId",matchedDisplaySetsIndex:-1}]},displaySetSelectors:{defaultDisplaySetId:{seriesMatchingRules:[{attribute:"numImageFrames",constraint:{greaterThan:{value:0}}},{attribute:"isDisplaySetFromUrl",weight:10,constraint:{equals:!0}}]}},stages:[{name:"default",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{viewportType:"stack",viewportId:"default",toolGroupId:"default",initialImageOptions:{custom:"sopInstanceLocation"}},displaySets:[{id:"defaultDisplaySetId"}]}],createdDate:"2021-02-23T18:32:42.850Z"}]};const Da=function(){return[{name:va.id,protocol:va},{name:pa.id,protocol:pa},{name:ha.id,protocol:ha}]};const ba=function(){const[e]=(0,Se.r)(),t=(0,Ie.Zp)(),a=e.dataSources;return me.createElement("div",{style:{width:"100%",height:"100%"}},me.createElement("div",{className:"flex h-screen w-screen items-center justify-center "},me.createElement("div",{className:"bg-secondary-dark mx-auto space-y-2 rounded-lg py-8 px-8 drop-shadow-md"},me.createElement("img",{className:"mx-auto block h-14",src:"./ohif-logo.svg",alt:"OHIF"}),me.createElement("div",{className:"space-y-2 pt-4 text-center"},a.filter((e=>"dicomjson"!==e.sourceName&&"dicomlocal"!==e.sourceName)).map((e=>me.createElement("div",{key:e.sourceName},me.createElement("h1",{className:"text-white"},e.configuration?.friendlyName||e.friendlyName),me.createElement(fe.$n,{type:fe.Ny.NW.primary,className:Xt()("ml-2"),onClick:()=>{t({pathname:"/",search:`datasources=${e.sourceName}`})}},e.sourceName),me.createElement("br",null))))))))};const wa=function({itemLabel:e,itemList:t,onItemClicked:a}){const{t:n}=(0,ye.Bd)("DataSourceConfiguration"),[s,r]=(0,me.useState)("");return(0,me.useEffect)((()=>{r("")}),[t]),me.createElement("div",{className:"flex min-h-[1px] grow flex-col gap-4"},me.createElement("div",{className:"flex items-center justify-between"},me.createElement("div",{className:"text-primary-light text-[20px]"},n(`Select ${e}`)),me.createElement(fe.Cv,{className:"max-w-[40%] grow",value:s,onDebounceChange:r,placeholder:n(`Search ${e} list`)})),me.createElement("div",{className:"relative flex min-h-[1px] grow flex-col bg-black text-[14px]"},null==t?me.createElement(fe.Jx,{className:"h-full w-full"}):0===t.length?me.createElement("div",{className:"text-primary-light flex h-full flex-col items-center justify-center px-6 py-4"},me.createElement(fe.In,{name:"magnifier",className:"mb-4"}),me.createElement("span",null,n(`No ${e} available`))):me.createElement(me.Fragment,null,me.createElement("div",{className:"bg-secondary-dark px-3 py-1.5 text-white"},n(e)),me.createElement("div",{className:"ohif-scrollbar overflow-auto"},t.filter((e=>!s||e.name.toLowerCase().includes(s.toLowerCase()))).map((e=>me.createElement("div",{className:Xt()("hover:text-primary-light hover:bg-primary-dark group mx-2 flex items-center justify-between px-6 py-2","rounded border-transparent border-b-secondary-light border-[1px] hover:border-primary-light"),key:e.id},me.createElement("div",null,e.name),me.createElement(fe.$n,{onClick:()=>a(e),className:"invisible group-hover:visible",endIcon:me.createElement(fe.In,{name:"arrow-left"})},n("Select")))))))))},Ea="text-ellipsis whitespace-nowrap overflow-hidden";const Ma=function({configurationAPI:e,configuredItems:t,onHide:a}){const{t:n}=(0,ye.Bd)("DataSourceConfiguration"),[s,r]=(0,me.useState)(),[i,o]=(0,me.useState)(t),[c,l]=(0,me.useState)(),[u]=(0,me.useState)(e.getItemLabels()),[d,m]=(0,me.useState)(u.length===t.length),p=d?i.length-2:i.length-1;(0,me.useEffect)((()=>{let t=!0;return l(null),r(null),0===i.length?e.initialize().then((e=>{t&&r(e)})).catch((e=>l(e.message))):d||i.length!==u.length?e.setCurrentItem(i[p]).then((e=>{t&&r(e)})).catch((e=>l(e.message))):(e.setCurrentItem(i[i.length-1]),a()),()=>{t=!1}}),[i,e,a,u,d,p]);const g=e=>e<i.length?Xt()("bg-black/[.4]",e!==u.length-1?"hover:bg-transparent active:bg-secondary-dark":""):"bg-transparent",f=e=>e===p+1?Xt()("border-2","border-solid","border-primary-light"):e<i.length?"border border-solid border-primary-active hover:border-primary-light active:border-white":"border border-dashed border-secondary-light",S=e=>e<=i.length?"text-primary-light":"text-primary-active";return me.createElement("div",{className:"flex h-[calc(100vh-300px)] select-none flex-col gap-4 pt-0.5"},me.createElement("div",{className:"flex gap-4"},u.map(((e,t)=>{return me.createElement("div",{key:e,className:Xt()("flex min-w-[1px] shrink basis-[200px] flex-col gap-1 rounded-md p-3.5",(a=t,a!==u.length-1&&a<i.length?"cursor-pointer":"cursor-auto"),g(t),f(t),S(t)),onClick:d&&t<p||t<=p?()=>{m(!1),o((e=>e.slice(0,t)))}:void 0},me.createElement("div",{className:"text- flex items-center gap-2"},t<i.length?me.createElement(fe.In,{name:"status-tracked"}):me.createElement(fe.In,{name:"status-untracked"}),me.createElement("div",{className:Xt()(Ea)},n(e))),t<i.length?me.createElement("div",{className:Xt()("text-[14px] text-white",Ea)},i[t].name):me.createElement("br",null));var a}))),me.createElement("div",{className:"h-0.5 w-full shrink-0 bg-black"}),c?me.createElement("div",{className:"flex min-h-[1px] grow flex-col gap-4"},me.createElement("div",{className:"text-primary-light text-[20px]"},n(`Error fetching ${u[i.length]} list`)),me.createElement("div",{className:"grow bg-black p-4 text-[14px]"},c)):me.createElement(wa,{itemLabel:u[p+1],itemList:s,onItemClicked:e=>{m(!1),o((t=>[...t.slice(0,p+1),e]))}}))};const xa=function({servicesManager:e,extensionManager:t}){const{t:a}=(0,ye.Bd)("DataSourceConfiguration"),{show:n,hide:s}=(0,fe.hS)(),{customizationService:r}=e.services,[i,o]=(0,me.useState)(),[c,l]=(0,me.useState)();(0,me.useEffect)((()=>{let e=!0;const a=async()=>{const a=t.getActiveDataSourceDefinition();if(!a.configuration.configurationAPI)return;const{factory:n}=r.get(a.configuration.configurationAPI)??{};if(!n)return;const s=n(a.sourceName);o(s),l(null),s.getConfiguredItems().then((t=>{e&&l(t)}))},n=t.subscribe(t.EVENTS.ACTIVE_DATA_SOURCE_CHANGED,a);return a(),()=>{e=!1,n.unsubscribe()}}),[]);const u=(0,me.useCallback)((()=>{n({content:Ma,title:a("Configure Data Source"),contentProps:{configurationAPI:i,configuredItems:c,onHide:s}})}),[i,c]);return(0,me.useEffect)((()=>{i&&c&&c.length!==i.getItemLabels().length&&u()}),[i,c,u]),c?me.createElement("div",{className:"text-aqua-pale flex items-center overflow-hidden"},me.createElement(fe.In,{name:"settings",className:"mr-2.5 h-3.5 w-3.5 shrink-0 cursor-pointer",onClick:u}),c.map(((e,t)=>me.createElement("div",{key:t,className:"flex overflow-hidden"},me.createElement("div",{key:t,className:"overflow-hidden text-ellipsis whitespace-nowrap"},e.name),t!==c.length-1&&me.createElement("div",{className:"px-2.5"},"|"))))):me.createElement(me.Fragment,null)};var Ua=function(e){return e[e.projects=0]="projects",e[e.locations=1]="locations",e[e.datasets=2]="datasets",e[e.dicomStores=3]="dicomStores",e}(Ua||{});const Na="https://cloudresourcemanager.googleapis.com/v1",Ca="https://healthcare.googleapis.com/v1";class Ra{constructor(e,t,a){this._extensionManager=void 0,this._fetchOptions=void 0,this._dataSourceName=void 0,this.getItemLabels=()=>["Project","Location","Data set","DICOM store"],this._dataSourceName=e,this._extensionManager=a;const n=t.services.userAuthenticationService;this._fetchOptions={method:"GET",headers:n.getAuthorizationHeader()}}async initialize(){const e=`${Na}/projects`,t=await Ra._doFetch(e,Ua.projects,this._fetchOptions);if(!t?.length)return[];return t.map((e=>({id:e.projectId,name:e.name,itemType:Ua.projects,url:`${Ca}/projects/${e.projectId}`})))}async setCurrentItem(e){const t=e;if(t.itemType===Ua.dicomStores){const e=`${t.url}/dicomWeb`,a=JSON.parse(JSON.stringify(this._extensionManager.getDataSourceDefinition(this._dataSourceName)));return a.configuration={...a.configuration,wadoUriRoot:e,qidoRoot:e,wadoRoot:e},this._extensionManager.updateDataSourceConfiguration(a.sourceName,a.configuration),[]}const a=t.itemType+1,n=`${Ua[a]}`,s=`${t.url}/${n}`,r=await Ra._doFetch(s,a,this._fetchOptions);if(!r?.length)return[];return r.map((e=>{const t=e.name.split("/");return{id:e.name,name:t[t.length-1],itemType:a,url:`${Ca}/${e.name}`}}))}async getConfiguredItems(){const e=this._extensionManager.getDataSourceDefinition(this._dataSourceName).configuration.wadoUriRoot,t=e.indexOf("projects"),a=e.substring(t).split("/"),n=[];for(let e=0;e<4&&2*(e+1)<a.length;e+=1)if(e===Ua.projects){const t=a[1],s=`${Na}/projects/${t}`,r=(await Ra._doFetch(s,Ua.projects,this._fetchOptions))[0];n.push({id:r.projectId,name:r.name,itemType:e,url:`${Ca}/projects/${r.projectId}`})}else{const t=a.slice(0,2*e+2).join("/");n.push({id:t,name:a[2*e+1],itemType:e,url:`${Ca}/${t}`})}return n}static async _doFetch(e,t,a={},n={}){try{const s=new URL(e);s.search=new URLSearchParams(n).toString();const r=await fetch(s,a),i=await r.json();if(r.status>=200&&r.status<300&&null!=i){if(null!=i.nextPageToken){n.pageToken=i.nextPageToken;const s=await this._doFetch(e,t,a,n);i[Ua[t]]=i[Ua[t]].concat(s)}return i[Ua[t]]?i[Ua[t]]:i.name?[i]:[]}{const e=i?.error?.message||`Error returned from Google Cloud Healthcare: ${r.status} - ${r.statusText}`;throw new Error(e)}}catch(e){throw new Error(e?.message||"Error occurred during fetch request.")}}}const Pa=({displaySets:e})=>{const t=e[0],{axis:a,series:n}=t.instance.chartData;return me.createElement(fe.bl,{showLegend:!0,legendWidth:150,axis:{x:{label:a.x.label,indexRef:0,type:"x",range:{min:0}},y:{label:a.y.label,indexRef:1,type:"y"}},series:n})};var Aa=a(79717);const Ta=i.Ay.classes.MetadataProvider;const Oa=i.classes.MetadataProvider;const Fa=({SeriesInstanceUID:e,StudyInstanceUID:t})=>{const{instances:a}=i.DicomMetadataStore.getSeries(t,e);if(!a?.length)return;const n=a[0].Modality;if(!n||"PT"!==n)return;const s=a.map((e=>e.imageId)),r=[];try{if(s.forEach((e=>{const t=function(e){const t=Ta.get("instance",e);if(!t)throw new Error("dicom metadata are required");if(void 0===t.SeriesDate||void 0===t.SeriesTime||void 0===t.CorrectedImage||void 0===t.Units||!t.RadiopharmaceuticalInformationSequence||void 0===t.RadiopharmaceuticalInformationSequence[0].RadionuclideHalfLife||void 0===t.RadiopharmaceuticalInformationSequence[0].RadionuclideTotalDose||void 0===t.DecayCorrection||void 0===t.AcquisitionDate||void 0===t.AcquisitionTime||void 0===t.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartDateTime&&void 0===t.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartTime)throw new Error("required metadata are missing");void 0===t.PatientWeight&&console.warn("PatientWeight missing from PT instance metadata");const a={CorrectedImage:t.CorrectedImage,Units:t.Units,RadionuclideHalfLife:t.RadiopharmaceuticalInformationSequence[0].RadionuclideHalfLife,RadionuclideTotalDose:t.RadiopharmaceuticalInformationSequence[0].RadionuclideTotalDose,RadiopharmaceuticalStartDateTime:t.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartDateTime,RadiopharmaceuticalStartTime:t.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartTime,DecayCorrection:t.DecayCorrection,PatientWeight:t.PatientWeight,SeriesDate:t.SeriesDate,SeriesTime:t.SeriesTime,AcquisitionDate:t.AcquisitionDate,AcquisitionTime:t.AcquisitionTime};if(t[70531e3]||void 0!==t[70531e3]||t[70531009]||void 0!==t[70531009]){const e={SUVScaleFactor:t[70531e3],ActivityConcentrationScaleFactor:t[70531009]};a.PhilipsPETPrivateGroup=e}return t["0009100d"]&&void 0!==t["0009100d"]&&(a.GEPrivatePostInjectionDateTime=t["0009100d"]),t.FrameReferenceTime&&void 0!==t.FrameReferenceTime&&(a.FrameReferenceTime=t.FrameReferenceTime),t.ActualFrameDuration&&void 0!==t.ActualFrameDuration&&(a.ActualFrameDuration=t.ActualFrameDuration),t.PatientSex&&void 0!==t.PatientSex&&(a.PatientSex=t.PatientSex),t.PatientSize&&void 0!==t.PatientSize&&(a.PatientSize=t.PatientSize),a}(e);t&&r.push(t)})),!r.length)return;const e=(0,Aa.C)(r);r.forEach(((t,a)=>{Oa.addCustomMetadata(s[a],"scalingModule",e[a])}))}catch(e){console.log(e)}},ka={id:rt,preRegistration:function({servicesManager:e,configuration:t={},commandsManager:a}){const{stateSyncService:n,toolbarService:s,cineService:r,viewportGridService:o}=e.services;s.registerEventForToolbarUpdate(r,[r.EVENTS.CINE_STATE_CHANGED]),i.DicomMetadataStore.subscribe(i.DicomMetadataStore.EVENTS.INSTANCES_ADDED,Fa),i.DicomMetadataStore.subscribe(i.DicomMetadataStore.EVENTS.SERIES_UPDATED,Fa),n.register("viewportGridStore",{clearOnModeExit:!0}),n.register("uiStateStore",{clearOnModeExit:!0}),n.register("displaySetSelectorMap",{clearOnModeExit:!0}),n.register("hangingProtocolStageIndexMap",{clearOnModeExit:!0}),n.register("toggleHangingProtocol",{clearOnModeExit:!0}),n.register("viewportsByPosition",{clearOnModeExit:!0});const c=e=>{Object.entries(e).forEach((([e,t])=>{[o.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED,o.EVENTS.VIEWPORTS_READY].includes(e)&&o.subscribe(e,(e=>{const n=e?.viewportId??o.getActiveViewportId();a.run(t,{viewportId:n})}))}))};s.subscribe(s.EVENTS.TOOL_BAR_MODIFIED,(e=>{const{buttons:t}=e;for(const[e,a]of Object.entries(t)){const{groupId:e,items:t,listeners:n}=a.props||{};e&&t&&t.forEach((e=>{e.listeners&&c(e.listeners)})),n&&c(n)}}))},getDataSourcesModule:de,getViewportModule:({servicesManager:e,commandsManager:t,extensionManager:a})=>[{name:"chartViewport",component:Pa}],getLayoutTemplateModule:function({servicesManager:e,extensionManager:t,commandsManager:a,hotkeysManager:n}){return[{name:"viewerLayout",id:"viewerLayout",component:function(s){return Re({servicesManager:e,extensionManager:t,commandsManager:a,hotkeysManager:n,...s})}}]},getPanelModule:et,getHangingProtocolModule:Da,getSopClassHandlerModule:xt,getToolbarModule:function({commandsManager:e,servicesManager:t}){const{cineService:a}=t.services;return[{name:"ohif.radioGroup",defaultComponent:fe.IB},{name:"ohif.divider",defaultComponent:Ut},{name:"ohif.splitButton",defaultComponent:Ft},{name:"ohif.layoutSelector",defaultComponent:a=>At({...a,commandsManager:e,servicesManager:t})},{name:"ohif.buttonGroup",defaultComponent:kt},{name:"ohif.progressDropdown",defaultComponent:Vt},{name:"evaluate.group.promoteToPrimary",evaluate:({viewportId:e,button:t,itemId:a})=>{const{items:n}=t.props;if(!a)return{primary:t.props.primary,items:n};return{primary:n.find((e=>e.id===a||e.itemId===a)),items:n}}},{name:"evaluate.cine",evaluate:()=>(e=>({className:e?"!text-primary-active":"!text-common-bright hover:!bg-primary-dark hover:text-primary-light"}))(a.getState().isCineEnabled)}]},getCommandsModule:ma,getUtilityModule:({servicesManager:e})=>[{name:"common",exports:{getStudiesForPatientByMRN:Ve}}],getCustomizationModule:function({servicesManager:e,extensionManager:t}){return[{name:"helloPage",value:{id:"customRoutes",routes:[{path:"/custom",children:()=>me.createElement("h1",{style:{color:"white"}},"Hello Custom Route")}]}},{name:"datasources",value:{id:"customRoutes",routes:[{path:"/datasources",children:ba}]}},{name:"default",value:[{id:"ohif.overlayItem",content:function(e){if(this.condition&&!this.condition(e))return null;const{instance:t}=e,a=t&&this.attribute?t[this.attribute]:this.contentF&&"function"==typeof this.contentF?this.contentF(e):null;return a?me.createElement("span",{className:"overlay-item flex flex-row",style:{color:this.color||void 0},title:this.title||""},this.label&&me.createElement("span",{className:"mr-1 shrink-0"},this.label),me.createElement("span",{className:"font-light"},a)):null}},{id:"ohif.contextMenu",transform:function(e){const t={...this};t.menus=this.menus.map((e=>({...e})));for(const a of t.menus){const{items:t}=a;a.items=[];for(const n of t)a.items.push(e.transform(n))}return t}},{id:"ohif.dataSourceConfigurationComponent",component:xa.bind(null,{servicesManager:e,extensionManager:t})},{id:"ohif.dataSourceConfigurationAPI.google",factory:a=>new Ra(a,e,t)},{id:"progressDropdownWithServiceComponent",component:Vt}]}]}},La=ka}}]);
//# sourceMappingURL=206.bundle.d299d5ccfd7ba2341ef3.js.map