1"use strict";(self.webpackChunkng_ibdb=self.webpackChunkng_ibdb||[]).push([[952],{21500:(oe,Z,h)=>{h.d(Z,{A:()=>E,C:()=>w});class w{constructor(I,k){this.experiment=I,this.file=k}}var E=(()=>{return(x=E||(E={})).Other="",x.Skeletons="SKELETONS",x.CatmaidVolume="CATMAID_VOLUME",x.CatmaidVolumeArchive="CATMAID_VOLUME_ARCHIVE",x.ConfocalStack="CONFOCAL_STACK",x.Image="IMAGE",x.Neuropil="NEUROPIL",x.SurfaceData="SURFACE_DATA",x.Skeleton="SKELETON",E;var x})()},51988:(oe,Z,h)=>{h.d(Z,{g:()=>re});var w=h(80529),E=h(4128),x=h(39646),I=h(21500),k=h(54004),F=h(70262),Q=h(63900),C=h(39300),R=h(94650),U=h(55640);const y={headers:new w.WM({"Content-Type":"application/json"}),withCredentials:!0};let re=(()=>{class A{constructor(p,f){this.http=p,this.fileService=f,this.url="/api/experiment/",this.experimentFileUrl="/api/experiment/files/"}list(p,f){let v="";return p&&f&&(v+=`object_id=${p}&type=${f}`),this.http.get(`${this.url}?${v}`,y)}get(p){return this.http.get(`${this.url}${p}/`)}getAllVersions(p){return console.log("experimentID",p),(0,E.D)([this.get(p),this.getPublicExperiments(p)]).pipe((0,k.U)(f=>f[0]?[f[0]].concat(f[1]):f[1]))}searchByID(p,f,v=!1,D=!1){return this.http.get(`${this.url}search_by_id/?id=${p}&type=${f}&private=${v}&owner=${D}`)}search(p){return p.keys().length?this.http.get(`${this.url}search/`,{params:p}):(0,x.of)([])}getPublicExperiments(p){return this.http.get(`/archive/experiment/${p}/`)}getPublicExperiment(p){return this.http.get(`/api/v2/persistent/${p}/`).pipe((0,k.U)(f=>f.data))}listPublicExperiments(p,f,v,D){let V="";return p?V=`experiment=${p}`:v&&f&&(V+=`object_id=${v}&type=${f}`),D&&(V+=V.length?`&handle=${D}`:`handle=${D}`),this.http.get(`/archive/experiment/?${V}`)}listPublicExperimentsMeta(p){return this.http.get(`/archive/experiment/list_meta/?experiment=${p}`)}addExperiment(p){return this.http.post(this.url,p,y)}patchExperiment(p,f){return this.http.patch(`${this.url}${p}/`,f,y)}updateExperiment(p){return this.http.put(`${this.url}${p.id}/`,p,y)}addExperimentFile(p,f){const v=new I.C(p,f);return this.http.post(this.experimentFileUrl,v,y)}deletePersistentFile(p){return this.http.delete(`/filestore/persistent-file//${p}/`,y)}getDownloadURL(p,f){return this.http.get(`${this.url}${p}/get_file_download_url/?uuid=${f}`)}getDownloadURLs(p,f,v=!0){return this.http.post(`${this.url}${p}/get_download_urls/`,{uuids:f,log:v},y)}canEdit(p){return this.http.get(`${this.url}${p}/can_edit/`,y).pipe((0,k.U)(v=>v.can_edit),(0,F.K)(v=>(0,x.of)(!1)))}canDelete(p){return this.http.get(`${this.url}${p}/can_delete/`,y).pipe((0,k.U)(v=>v.can_delete),(0,F.K)(v=>(0,x.of)(!1)))}canView(p){return this.http.get(`${this.url}${p}/can_view/`,y).pipe((0,k.U)(v=>v.can_view),(0,F.K)(v=>(0,x.of)(!1)))}publishExperiment(p){return this.http.post("/archive/experiment/publish/",{experiment:p},y)}getRelatedObject(p){return this.http.get(`${this.url}${p}/related_object/`)}deletePersistentExperiment(p){return this.http.delete(`/archive/experiment/delete_persistent_experiment/?handle=${p}`,y)}delete(p){return this.http.delete(`${this.url}${p}/`,y)}downloadFile(p,f){f.downloading=!0,f.error=null;const v=this.getDownloadURL(p,f.uuid).pipe((0,Q.w)(D=>this.fileService.downloadFile(D.url)),(0,C.h)(D=>4===D.type)).subscribe(D=>{this.fileService.saveFile(D.body,f.file_name).catch(V=>{console.log(V),18===V.code&&(console.log("Try legacy file save"),this.fileService.legacySaveFile(D.body,{fileName:f.file_name}))}),f.downloading=!1,v.unsubscribe()},D=>{f.error=D.statusText,f.downloading=!1})}}return A.\u0275fac=function(p){return new(p||A)(R.LFG(w.eN),R.LFG(U.J))},A.\u0275prov=R.Yz7({token:A,factory:A.\u0275fac,providedIn:"any"}),A})()},81952:(oe,Z,h)=>{h.r(Z),h.d(Z,{SkeletonViewerModule:()=>oi});var w=h(36895),E=h(57023),x=h(15861),I=h(70262),k=h(49808),F=h(39646),Q=h(53654),C=h(86682),R=h(87099),U=h(21500),y=h(80529),t=h(94650),re=h(66375);new y.WM({"Content-Type":"application/json"});let p=(()=>{class r{constructor(e){this.http=e}}return r.\u0275fac=function(e){return new(e||r)(t.LFG(y.eN))},r.\u0275prov=t.Yz7({token:r,factory:r.\u0275fac}),r})();const f={headers:new y.WM({"Content-Type":"application/json"}),withCredentials:!0},v="/api/experiment/data/";let D=(()=>
1{class r{constructor(e){this.http=e}list(e){return this.http.get(`${v}?experiment=${e}`,f)}get(e){return this.http.get(`${v}${e}/`,f)}add(e){return this.http.post(`${v}`,e,f)}update(e,n){return this.http.patch(`${v}${e}/`,n,f)}delete(e){return this.http.delete(`${v}${e}/`,f)}}return r.\u0275fac=function(e){return new(e||r)(t.LFG(y.eN))},r.\u0275prov=t.Yz7({token:r,factory:r.\u0275fac,providedIn:"any"}),r})();var V=h(41353),M=h(77579),se=h(61135),lt=h(31509),G=(()=>{return(r=G||(G={})).CatmaidSkeletons="CATMAID_SKELETONS",r.ViewerConfiguration="VIEWER_CONFIGURATION",G;var r})();class xe{constructor(o,e,n,i,s=[],a=0,l=!0){this.id=o,this.uuid=e,this.name=n,this.color=i,this.annotations=s,this.order=a,this.visible=l}}class Y{constructor(o=0,e=.25,n=-1,i=0,s=1.4,a=!1,l=!0){this.colorMode=o,this.opacity=e,this.orientationUp=n,this.orientationFront=i,this.exposure=s,this.antialias=a,this.smoothVolumes=l}}class we{constructor(o=[],e){this.neuropils=o,this.view=e}}class ht extends class dt extends class ct{constructor(o,e,n,i){this.experiment=o,this.name=e,this.filename=n,this.data_type=i}}{constructor(o,e,n=null,i,s,a=[]){super(o,n,i,s),this.json=e,this.predefined_datasets=a}}{constructor(o,e,n=null,i,s,a=[]){super(o,e,n,i,s,a)}}var pt=h(15096),gt=h(5378);const ae=new C.Pa4,ke=new C.Pa4;class ut{modify(o,e){const n=(o=o.clone()).attributes;for(const m in n)"position"!==m&&o.deleteAttribute(m);const i=[],s=[],a=(o=gt.$1(o)).getAttribute("position");for(let m=0;m<a.count;m++){const g=(new C.Pa4).fromBufferAttribute(a,m),u=new vt(g);i.push(u)}let l=o.getIndex();if(null!==l)for(let m=0;m<l.count;m+=3){const g=l.getX(m),u=l.getX(m+1),T=l.getX(m+2),S=new ye(i[g],i[u],i[T],g,u,T);s.push(S)}else for(let m=0;m<a.count;m+=3){const u=m+1,T=m+2,S=new ye(i[m],i[u],i[T],m,u,T);s.push(S)}for(let m=0,g=i.length;m<g;m++)Me(i[m]);let c,d=e;for(;d--;){if(c=Ct(i),!c)throw console.log("THREE.SimplifyModifier: No next vertex"),new Error("THREE.SimplifyModifier: No next vertex");bt(i,s,c,c.collapseNeighbor)}const _=new C.u9r,b=[];l=[];for(let m=0;m<i.length;m++){const g=i[m].position;b.push(g.x,g.y,g.z),i[m].id=m}for(let m=0;m<s.length;m++){const g=s[m];l.push(g.v1.id,g.v2.id,g.v3.id)}return _.setAttribute("position",new C.a$l(b,3)),_.setIndex(l),_}}function z(r,o){const e=r.indexOf(o);e>-1&&r.splice(e,1)}function _t(r,o){const e=o.position.distanceTo(r.position);let n=0;const i=[];for(let l=0,c=r.faces.length;l<c;l++){const d=r.faces[l];d.hasVertex(o)&&i.push(d)}for(let l=0,c=r.faces.length;l<c;l++){let d=1;const _=r.faces[l];for(let b=0;b<i.length;b++){const g=_.normal.dot(i[b].normal);d=Math.min(d,(1.001-g)/2)}n=Math.max(n,d)}return i.length<2&&(n=1),e*n+0}function Me(r){if(0===r.neighbors.length)return r.collapseNeighbor=null,void(r.collapseCost=-.01);r.collapseCost=1e5,r.collapseNeighbor=null;for(let o=0;o<r.neighbors.length;o++){const e=_t(r,r.neighbors[o]);r.collapseNeighbor||(r.collapseNeighbor=r.neighbors[o],r.collapseCost=e,r.minCost=e,r.totalCost=0,r.costCount=0),r.costCount++,r.totalCost+=e,e<r.minCost&&(r.collapseNeighbor=r.neighbors[o],r.minCost=e)}r.collapseCost=r.totalCost/r.costCount}function Oe(r,o){for(console.assert(0===r.faces.length);r.neighbors.length;)z(r.neighbors.pop().neighbors,r);z(o,r)}function ft(r,o){z(o,r),r.v1&&z(r.v1.faces,r),r.v2&&z(r.v2.faces,r),r.v3&&z(r.v3.faces,r);const e=[r.v1,r.v2,r.v3];for(let n=0;n<3;n++){const i=e[n],s=e[(n+1)%3];!i||!s||(i.removeIfNonNeighbor(s),s.removeIfNonNeighbor(i))}}function bt(r,o,e,n){if(!n)return void Oe(e,r);const i=[];for(let s=0;s<e.neighbors.length;s++)i.push(e.neighbors[s]);for(let s=e.faces.length-1;s>=0;s--)e.faces[s].hasVertex(n)&&ft(e.faces[s],o);for(let s=e.faces.length-1;s>=0;s--)e.faces[s].replaceVertex(e,n);Oe(e,r);for(let s=0;s<i.length;s++)Me(i[s])}function Ct(r){let o=r[0];for(let e=0;e<r.length;e++)r[e].collapseCost<o.collapseCost&&(o=r[e]);return o}class ye{constructor(o,e,n,i,s,a){this.a=i,this.b=s,this.c=a,this.v1=o,this.v2=e,this.v3=n,this.normal=new C.Pa4,this.computeNormal(),o.faces.push(this),o.addUniqueNeighbor(e),o.addUniqueNeighbor(n),e.faces.push(this),e.addUniqueNeighbor(o),e.addUniqueNeighbor(n),n.faces.push(this),n.addUniqueNeighbor(o),n.addUniqueNeighbor(e)}computeNormal(){const o=this.v1.position,e=this.v2.position;ae.subVectors(this.v3.position,e),ke.subVectors(o,e),ae.cross(ke).normalize(),this.normal.copy(ae)}hasVertex(o){return o===this.v1||o===this.v2||o===this.v3}replaceVertex(o,e){o===this.v1?this.v1=e:o===this.v2?this.v2=e:o===this.v3&&(this.v3=e),z(o.faces,this),e.faces.push(this),o.removeIfNonNeighbor(this.v1),this.v1.removeIfNonNeighbor(o),o.removeIfNonNeighbor(this.v2),this.v2.removeIfNonNeighbor(o),o.removeIfNonNeighbor(this.v3),this.v3.removeIfNonNeighbor(o),this.v1.addUniqueNeighbor(this.v2),this.v1.addUniqueNeighbor(this.v3),this.v2.addUniqueNeighbor(this.v1),this.v2.addUniqueNeighbor(this.v3),this.v3.addUniqueNeighbor(this.v1),this.v3.addUniqueNeighbor(this.v2),this.computeNormal()}}class vt{constructor(o){this.minCost=0,this.totalCost=0,this.costCount=0,this.position=o,this.id=-1,this.faces=[],this.neighbors=[],this.collapseCost=0,this.collapseNeighbor=null}addUniqueNeighbor(o){!function mt(r,o){-1===r.indexOf(o)&&r.push(o)}(this.neighbors,o)}removeIfNonNeighbor(o){const e=this.neighbors,n=this.faces,i=e.indexOf(o);if(-1!==i){for(let s=0;s<n.length;s++)if(n[s].hasVertex(o))return;e.splice(i,1)}}}var De=h(50136);let N=(()=>
1{class r{constructor(e,n){this.colorService=e,this.experimentDataService=n,this.filteredExperimentData=new M.x,this.filteredExperimentData$=this.filteredExperimentData.asObservable(),this.neuropils=new se.X([]),this.neuropils$=this.neuropils.asObservable(),this.configuration=new se.X(null),this.configuration$=this.configuration.asObservable(),this.volumeLoadStatus=new M.x,this.volumeLoadStatus$=this.volumeLoadStatus.asObservable(),this.skeletonLoadStatus=new M.x,this.skeletonLoadStatus$=this.skeletonLoadStatus.asObservable(),this.canEdit=new se.X(!1),this.canEdit$=this.canEdit.asObservable()}updateConfiguration(e){this.configuration.next(e)}updateFilteredExperimentData(e){this.filteredExperimentData.next(e)}updateNeuropils(e){this.neuropils.next(e)}filterArborizedNeuropils(e,n,i){return null}loadVolumes(e){return console.log("loadVolumes",e),new Promise((n,i)=>{const s=[],a=e.length;let l=0;e.forEach(c=>{s.push(new Promise((d,_)=>{switch(c.file_name.split(".").pop()){case"obj":(new pt.L).load(c.url,u=>{u.userData.id=+c.file_name.substring(c.file_name.lastIndexOf("_")+1,c.file_name.lastIndexOf(".")),u.userData.uuid=c.uuid,u.userData.name=u.userData.name?u.userData.name:c.file_name.substring(7,c.file_name.lastIndexOf("_")),l+=1,this.volumeLoadStatus.next(Math.round(l/a*100)),d(u)},u=>{},u=>_(u));break;case"glb":(new lt.E).load(c.url,u=>{u.scene.userData.id=+c.file_name.substring(c.file_name.lastIndexOf("_")+1,c.file_name.lastIndexOf(".")),u.scene.userData.name=u.scene.userData.name?u.scene.userData.name:c.file_name.substring(7,c.file_name.lastIndexOf("_")),u.scene.userData.uuid=c.uuid,l+=1,this.volumeLoadStatus.next(Math.round(l/a*100)),d(u.scene)},u=>{},u=>_(u));break;default:_("Incompatible file type")}}))}),Promise.all(s).then(c=>{setTimeout(()=>this.volumeLoadStatus.next(null),1e3),n(c)}).catch(c=>i(c))})}assignMaterial(e,n,i=!0){if(e instanceof C.Kj0){if(i){const s=this.smoothOBJ(e.geometry);e.geometry=s||e.geometry}e.material=n}else e.children.length&&e.children.forEach(s=>this.assignMaterial(s,n,i))}centerInWorldSpace(e){const n=(new C.ZzF).setFromObject(e),i=new C.Pa4;return n.getCenter(i),i.negate(),e.translateX(i.x),e.translateY(i.y),e.translateZ(i.z),i}getViewerConfiguration(e){var n=this;return(0,x.Z)(function*(){const i=e.data.find(s=>s.data_type===G.ViewerConfiguration);if(i){const s=yield(0,k.n)(n.experimentDataService.get(i.id));return s.json?s.json.hasOwnProperty("view")||(s.json.view=new Y):s.json=new we([],new Y),s}return(0,k.n)(n.experimentDataService.add(new ht(e.id,new we([],new Y),null,null,G.ViewerConfiguration)))})()}smoothOBJ(e){try{const n=new ut,i=Math.floor(e.attributes.position.usage/3*.15);(e=n.modify(e,i)).computeVertexNormals(),e.computeBoundingBox()}catch(n){return console.log("Error smoothing geometry",n),null}return e}reCenter(e,n,i){const s=n.negate();e.translateX(s.x),e.translateY(s.y),e.translateZ(s.z),e.translateX(i.x),e.translateY(i.y),e.translateZ(i.z)}}return r.defaultUP=-1,r.defaultFRONT=0,r.\u0275fac=function(e){return new(e||r)(t.LFG(De.x),t.LFG(D))},r.\u0275prov=t.Yz7({token:r,factory:r.\u0275fac}),r})(),Se=(()=>{class r{constructor(){this.baseColor=new C.Ilk("hsl(0, 90%, 50%)"),this.colorIncrement=.05,this.maxValue=1,this.currentColor=new C.Ilk,this.currentColor.set(this.baseColor)}getNextColor(){const e=(new C.Ilk).set(this.currentColor);return this.incrementColor(),e}incrementColor(){const e={h:0,s:0,l:0};this.currentColor.getHSL(e),this.currentColor.setHSL(this.maxValue-e.h<this.colorIncrement?this.maxValue-e.h+.1:e.h+this.colorIncrement,.9,.5)}getComplementary(e){const n=new C.Ilk(1,1,1),i={h:0,s:0,l:0};e.getHSL(i);const s={h:0,s:0,l:0};return n.sub(e).getHSL(s),(new C.Ilk).setHSL(s.h,i.s,i.l)}changeLightness(e,n){const i={h:0,s:0,l:0};return e.getHSL(i),i.l=i.l+(n=i.h<.8&&i.h>.3?2*n:n),i.l>1?i.l=1:i.l<0&&(i.l=0),i.s=i.s+n,i.s>1?i.s=1:i.s<0&&(i.s=0),(new C.Ilk).setHSL(i.h,i.s,i.l)}}return r.\u0275fac=function(e){return new(e||r)},r.\u0275prov=t.Yz7({token:r,factory:r.\u0275fac,providedIn:"any"}),r})();var le=h(51988),K=h(4128),Te=h(55640);let W=(()=>{class r{constructor(e,n){this.colorService=e,this.fileService=n}downloadJSONSkeletonFiles(e){return(0,k.n)((0,K.D)(e.map(n=>this.fileService.downloadJSONFile(n,!0))))}processSkeletons(e){e.forEach(n=>{const i=new Set;n.data.forEach(s=>{try{const a=s.name.split("_");s.meta=4===a.length?{cell:a[0],hemisphere:a[2][0],column:parseInt(a[2].slice(1),10),index:parseInt(a[3],10),unknown:a[1]}:{cell:a[0],hemisphere:a[1][0],column:parseInt(a[1].slice(1),10),index:parseInt(a[2],10)},i.add(a[0])}catch{console.warn("Invalid neuron name",s),s.meta={cell:s.name,hemisphere:null,index:null,column:null}}}),this.assignColorToCells(i,n),n.cells=i})}
1assignColorToCells(e,n){for(const i of e){const s=new C.Ilk(this.colorService.getNextColor()),a=this.colorService.changeLightness(s,-.1),l=this.colorService.getComplementary(s),c=this.colorService.changeLightness(l,-.1);n.data.filter(d=>d.meta?.cell===i).forEach(d=>{d.color="L"===d.meta.hemisphere?d.meta.column%2==0?s.getStyle():a.getStyle():"R"===d.meta.hemisphere?d.meta.column%2==0?l.getStyle():c.getStyle():s.getStyle()}),console.log("cell")}}}return r.\u0275fac=function(e){return new(e||r)(t.LFG(Se),t.LFG(Te.J))},r.\u0275prov=t.Yz7({token:r,factory:r.\u0275fac}),r})();class Pt{constructor(o,e,n,i,s,a=!0,l=null,c=[]){this.id=o,this.uuid=e,this.name=n,this.mesh=i,this.color=s,this.visible=a,this.order=l,this.annotations=c}}var ce=h(69751),de=h(95698);let Ee=(()=>{class r{constructor(e,n,i,s,a){this.skeletonViewerService=e,this.experimentService=n,this.skeletonService=i,this.experimentDataService=s,this.colorService=a}loadCatmaidSkeletons(e){var n=this;return(0,x.Z)(function*(){const i=e.files.filter(s=>s.meta.file_type===U.A.Skeletons);if(i.length){n.skeletonViewerService.skeletonLoadStatus.next(5);const s=yield(0,k.n)((0,K.D)(i.map(a=>n.experimentService.getDownloadURL(e.id,a.uuid))));if(s){n.skeletonViewerService.skeletonLoadStatus.next(10);try{const a=yield n.skeletonService.downloadJSONSkeletonFiles(s.map(l=>l.url));return n.skeletonViewerService.skeletonLoadStatus.next(25),n.skeletonService.processSkeletons(a),n.skeletonViewerService.skeletonLoadStatus.next(50),a}catch(a){console.error(a),n.skeletonViewerService.skeletonLoadStatus.next(null)}}else console.warn("No skeleton files"),n.skeletonViewerService.skeletonLoadStatus.next(null)}return[]})()}setupNeurons(e,n,i,s){return new ce.y(a=>{if(e.length){const l=[];let c=0;e.forEach(_=>_.keywords.forEach(b=>c+=b.neurons.length));let d=0;for(const _ of e){for(const b of _.keywords)setTimeout(()=>{for(const m of b.neurons){d++;const g=m.skeletons.map(u=>u.data);l.push(new R.P(m.id,n,m.color,i,s,g,null,null))}d==c?(a.next(l),a.complete()):a.next(d/c)});0==_.keywords.length&&console.error("No keywords for dataset",_)}}else a.error("No experimental data.")})}setupVolumes(e,n,i,s){var a=this;return(0,x.Z)(function*(){const l=yield a.skeletonViewerService.loadVolumes(e);let c=!1;const d=[],_=s?.json?.view?.colorMode||0,b=s?.json?.view?.opacity||.25;let m=!1;for(const g of l){let u=s.json.neuropils.find(H=>H.uuid===g.userData.uuid);u=u||s.json.neuropils.find(H=>H.id===g.userData.id);const T=u?.color?u.color:a.colorService.getNextColor();u||(console.warn("neuropil config not found, creating new configuration entry",g.userData.name),c=!0,u=new xe(g.userData.id,g.userData.uuid,g.userData.name,T),s.json.neuropils.push(u)),u.order>0&&(m=!0),g.visible=u.visible,g.userData.order=u.order,g.userData.color=u.color?u.color:T;const S=new C.YBo({color:0===_?new C.Ilk(.8,.8,.8):T,transparent:!0,opacity:b,side:C.Wl3,blending:C.Xaj,blendDst:C.Wpd,dithering:!0});a.skeletonViewerService.assignMaterial(g,S,s?.json?.view?.smoothVolumes);const Ce=new Pt(g.userData.id,g.userData.uuid,g.userData.name,g,T,u.visible,u.order);d.push(Ce)}m&&(console.log("sort volumes"),d.sort((g,u)=>g.order<u.order?-1:g.order>u.order?1:0)),d.forEach(g=>g.mesh.renderOrder=Number.isInteger(g.order)&&g.order>=0?d.length-g.order:1);for(let g=d.length-1;g>=0;g--)n.add(d[g].mesh);return i||(console.log("Centering volumes..."),a.skeletonViewerService.centerInWorldSpace(n)),a.skeletonViewerService.updateNeuropils(d),console.log("volumes ready"),c&&a.experimentDataService.update(s.id,{json:s.json}).pipe((0,de.q)(1)).subscribe(g=>a.skeletonViewerService.updateConfiguration(g)),null})()}}return r.\u0275fac=function(e){return new(e||r)(t.LFG(N),t.LFG(le.g),t.LFG(W),t.LFG(D),t.LFG(De.x))},r.\u0275prov=t.Yz7({token:r,factory:r.\u0275fac}),r})(),Ie=(()=>{class r{constructor(){}}return r.\u0275fac=function(e){return new(e||r)},r.\u0275prov=t.Yz7({token:r,factory:r.\u0275fac}),r})();var xt=h(39300),wt=h(95577),Ve=h(54004);class kt{constructor(o,e,n=[],i){this.name=o,this.data=e,this.keywords=n,this.cells=i}}class Mt{constructor(o,e,n,i,s,a){this.name=e,this.skeletons=n,this.annotations=i,this.meta=s,this.color=a,this.type="neuron",this.id=o||Math.floor(1e6*Math.random())}}class Ot{constructor(o,e){this.id=o,this.data=e}}var yt=h(17601);let Dt=(()=>
1{class r{constructor(e,n,i,s,a){this.skeletonViewerService=e,this.experimentService=n,this.fileService=i,this.threeNeuronPathService=s,this.skeletonService=a}loadSWCFiles(e){var n=this;return(0,x.Z)(function*(){console.log("loadSWCFiles",e);const i=e.files.filter(s=>s.meta.file_type===U.A.Skeleton);if(i.length){n.skeletonViewerService.skeletonLoadStatus.next(5);const s=yield(0,k.n)((0,K.D)(i.map(a=>n.experimentService.getDownloadURL(e.id,a.uuid))));if(s){n.skeletonViewerService.skeletonLoadStatus.next(10);try{const a=yield(0,k.n)(n.getPathData(s));n.skeletonViewerService.skeletonLoadStatus.next(25);const l=n.convertToCatmaidFormat(a);return n.skeletonViewerService.skeletonLoadStatus.next(35),n.skeletonService.processSkeletons(l),n.skeletonViewerService.skeletonLoadStatus.next(50),l}catch(a){console.error(a),n.skeletonViewerService.skeletonLoadStatus.next(null)}}else console.warn("No skeleton files"),n.skeletonViewerService.skeletonLoadStatus.next(null)}else console.log("No SWC skeleton files associated with this experiment.");return[]})()}getPathData(e){const n=[];for(const i of e)n.push(this.fileService.downloadTextFile(i.url,!1).pipe((0,xt.h)(s=>s.type===y.dt.Response),(0,wt.z)(s=>this.threeNeuronPathService.translatePoints([s.body])),(0,Ve.U)(s=>({data:s,file_name:i.file_name})),(0,I.K)(s=>(console.error(s),(0,F.of)(null)))));return(0,K.D)(n)}convertToCatmaidFormat(e){const n=[];for(const i of e){const s=i.data.map(c=>new Ot(null,c)),a=new Mt(null,i.file_name,s,[{name:"default"}],null),l=new kt(i.file_name,[a],["default"]);n.push(l)}return n}}return r.\u0275fac=function(e){return new(e||r)(t.LFG(N),t.LFG(le.g),t.LFG(Te.J),t.LFG(yt.r),t.LFG(W))},r.\u0275prov=t.Yz7({token:r,factory:r.\u0275fac,providedIn:"any"}),r})();var P=h(24006),Re=h(78372),Ne=h(71884);function St(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div")(1,"div",4)(2,"label"),t._uU(3,"Threshold"),t.qZA(),t.TgZ(4,"div",5)(5,"input",6),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw(2);return t.KtG(s.bloomThreshold=i)})("ngModelChange",function(){t.CHM(e);const i=t.oxw(2);return t.KtG(i.updateBloom())}),t.qZA(),t.TgZ(6,"span",7),t._uU(7),t.qZA()()(),t.TgZ(8,"div",4)(9,"label"),t._uU(10,"Strength"),t.qZA(),t.TgZ(11,"div",5)(12,"input",8),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw(2);return t.KtG(s.bloomStrength=i)})("ngModelChange",function(){t.CHM(e);const i=t.oxw(2);return t.KtG(i.updateBloom())}),t.qZA(),t.TgZ(13,"span",7),t._uU(14),t.qZA()()(),t.TgZ(15,"div",4)(16,"label"),t._uU(17,"Radius"),t.qZA(),t.TgZ(18,"div",5)(19,"input",8),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw(2);return t.KtG(s.bloomRadius=i)})("ngModelChange",function(){t.CHM(e);const i=t.oxw(2);return t.KtG(i.updateBloom())}),t.qZA(),t.TgZ(20,"span",7),t._uU(21),t.qZA()()()()}if(2&r){const e=t.oxw(2);t.xp6(5),t.Q6J("ngModel",e.bloomThreshold)("disabled",!e.enabled),t.xp6(2),t.Oqu(e.bloomThreshold),t.xp6(5),t.Q6J("ngModel",e.bloomStrength)("disabled",!e.enabled),t.xp6(2),t.Oqu(e.bloomStrength),t.xp6(5),t.Q6J("ngModel",e.bloomRadius)("disabled",!e.enabled),t.xp6(2),t.Oqu(e.bloomRadius)}}function Tt(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div")(1,"h4",1),t._uU(2,"Bloom Effect"),t.qZA(),t.TgZ(3,"div",2)(4,"input",3),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw();return t.KtG(s.enabled=i)}),t.qZA(),t.TgZ(5,"label"),t._uU(6,"Enabled"),t.qZA()(),t.YNc(7,St,22,9,"div",0),t.qZA()}if(2&r){const e=t.oxw();
1t.xp6(4),t.Q6J("ngModel",e.enabled),t.xp6(3),t.Q6J("ngIf",e.enabled)}}let Et=(()=>{class r{constructor(){}get enabled(){return this.threeViewer.bloom}set enabled(e){this.threeViewer.toggleBloom(e),this.threeViewer.render()}set bloomThreshold(e){this.threeViewer.bloomPass.threshold=e,this.threeViewer.render()}get bloomThreshold(){return this.threeViewer.bloomPass.threshold}set bloomStrength(e){this.threeViewer.bloomPass.strength=e,this.threeViewer.render()}get bloomStrength(){return this.threeViewer.bloomPass.strength}set bloomRadius(e){this.threeViewer.bloomPass.radius=e,this.threeViewer.render()}get bloomRadius(){return this.threeViewer.bloomPass.radius}ngOnInit(){}updateBloom(){this.threeViewer.render()}}return r.\u0275fac=function(e){return new(e||r)},r.\u0275cmp=t.Xpm({type:r,selectors:[["app-three-bloom-settings"]],inputs:{threeViewer:"threeViewer"},decls:1,vars:1,consts:[[4,"ngIf"],[2,"margin-bottom",".75em"],[1,"inline-form-group"],["type","checkbox",3,"ngModel","ngModelChange"],[1,"form-group"],[1,"slider-container"],["id","bloom-exposure","type","range","min","0","max","1","step",".01",3,"ngModel","disabled","ngModelChange"],[2,"margin-left",".5em","width","3em"],["id","bloom-exposure","type","range","min","0","max","2","step",".05",3,"ngModel","disabled","ngModelChange"]],template:function(e,n){1&e&&t.YNc(0,Tt,8,2,"div",0),2&e&&t.Q6J("ngIf",(null==n.threeViewer?null:n.threeViewer.renderer)&&(null==n.threeViewer?null:n.threeViewer.bloomPass))},dependencies:[w.O5,P.Fj,P.eT,P.Wl,P.JJ,P.On],styles:[".text-button[_ngcontent-%COMP%]{cursor:pointer;pointer-events:auto;display:flex;align-items:center;justify-content:space-between}#status-text[_ngcontent-%COMP%]{font-size:1rem;text-transform:uppercase}figure[_ngcontent-%COMP%] three-viewer[_ngcontent-%COMP%] #three-container[_ngcontent-%COMP%]{width:inherit;height:inherit}ul[_ngcontent-%COMP%]{transition:none;padding:0;margin:0}ul[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:inherit}h4[_ngcontent-%COMP%]{text-transform:uppercase}select[_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;background:url(dropdown-arrow-light.e2f3d5a6f78e4d74.svg) no-repeat right transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:14em;padding:2px 1em;outline:none;display:inline-block;pointer-events:auto}select[_ngcontent-%COMP%]:disabled{background-image:none}select[_ngcontent-%COMP%]:focus{border:1px solid rgba(255,255,255,.5)}select[_ngcontent-%COMP%] option[_ngcontent-%COMP%], select[_ngcontent-%COMP%] optgroup[_ngcontent-%COMP%]{background:rgb(51,61,72);color:#fff}input[_ngcontent-%COMP%]{margin:1em;font-size:.85em;pointer-events:auto}input[type=checkbox][_ngcontent-%COMP%], input[type=radio][_ngcontent-%COMP%]{margin:0 .5em 0 0}input[type=range][_ngcontent-%COMP%]{background-color:transparent;padding:0;margin:0}.absolute-center[_ngcontent-%COMP%]{margin:auto;position:absolute;inset:0}.color-input-box[_ngcontent-%COMP%]{width:1em;height:1em;display:inline-block;margin:-.15em .5em;cursor:pointer;border:none}.color-input[_ngcontent-%COMP%]{border:none;height:1em;width:1em;padding:0;margin:0 1em 0 .75em;cursor:pointer}a[_ngcontent-%COMP%]{cursor:pointer}.togglelink[_ngcontent-%COMP%]{margin-left:1em}.btn[_ngcontent-%COMP%]:focus{color:#fff}.unavailable[_ngcontent-%COMP%]{color:#969696}label[_ngcontent-%COMP%]{text-transform:none;letter-spacing:0;font-weight:700;display:block;margin:.5em 0}.arrow[_ngcontent-%COMP%]{display:flex}.dark-font[_ngcontent-%COMP%]{color:#3c3c3c!important}.dark-font[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .dark-font[_ngcontent-%COMP%] #background-color-input[_ngcontent-%COMP%]{color:#3c3c3c!important;border:solid 1px rgba(60,60,60,.15)}.slider-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%}.menu-open[_ngcontent-%COMP%]{opacity:.5}.clickable[_ngcontent-%COMP%]{cursor:pointer}.inline-form-group[_ngcontent-%COMP%]{display:flex;align-items:baseline;margin-bottom:.5em}.inline-form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .inline-form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{display:inline-block;margin:0}.inline-form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{margin-right:.5em}.form-group[_ngcontent-%COMP%]{margin-bottom:.5em}.slider-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center}input[type=range][_ngcontent-%COMP%]{flex:1}hr[_ngcontent-%COMP%]{border:0;height:1px;background-image:linear-gradient(to right,rgba(255,255,255,.15),rgba(255,255,255,.5) 25%,rgba(255,255,255,.5) 75%,rgba(255,255,255,.15));margin:.75em 0}","input[type=range][_ngcontent-%COMP%]{-webkit-appearance:none;appearance:none;background-color:transparent}input[type=range][_ngcontent-%COMP%]::-webkit-slider-runnable-track{width:100px;height:2px;background:#ddd;border:none;border-radius:1px}input[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:12px;width:12px;border-radius:12px;background:rgb(245,245,245);margin-top:-5px}input[type=range][_ngcontent-%COMP%]:focus{outline:none}input[type=range][_ngcontent-%COMP%]:focus::-webkit-slider-runnable-track{background:#ccc}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-webkit-slider-runnable-track{background:rgb(90,90,90)}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb{background:rgb(90,90,90)}input[type=range][_ngcontent-%COMP%]::-moz-range-track{height:2px;background-color:#fff}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-moz-range-track{background-color:#5a5a5a}input[type=range][_ngcontent-%COMP%]::-moz-range-thumb{border:none;height:12px;width:12px;border-radius:12px;background:rgb(245,245,245);margin-top:-5px}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-moz-range-thumb{background-color:#5a5a5a}","h4[_ngcontent-%COMP%]{margin:0}"]}),r})();function It(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div")(1,"label"),t._uU(2,"Point Scale"),t.qZA(),t.TgZ(3,"div",12)(4,"input",13),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw(2);return t.KtG(s.diameterScale=i)}),t.qZA(),t.TgZ(5,"span",14),t._uU(6),t.ALo(7,"percent"),t.qZA()(),t.TgZ(8,"label"),t._uU(9,"Default Point Diameter"),t.qZA(),t.TgZ(10,"div",12)(11,"input",15),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw(2);return t.KtG(s.defaultDiameter=i)}),t.qZA(),t.TgZ(12,"span",14),t._uU(13),t.qZA()()()}if(2&r){const e=t.oxw(2);t.xp6(4),t.Q6J("ngModel",e.diameterScale),t.xp6(2),t.Oqu(t.lcZ(7,4,e.diameterScale)),t.xp6(5),t.Q6J("ngModel",e.defaultDiameter),t.xp6(2),t.Oqu(e.defaultDiameter)}}function Vt(r,o){1&r&&t._UZ(0,"hr")}function Rt(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div",7)(1,"h4",8),t._uU(2,"Skeleton Settings"),t.qZA(),t.TgZ(3,"div",9)(4,"input",10),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw();return t.KtG(s.showPoints=i)}),t.qZA(),t.TgZ(5,"label"),t._uU(6,"Points Enabled"),t.qZA()(),t.YNc(7,It,14,6,"div",6),t.YNc(8,Vt,1,0,"hr",6),t._UZ(9,"app-three-bloom-settings",11)(10,"hr"),t.qZA()}if(2&r){const e=t.oxw();
1t.xp6(4),t.Q6J("ngModel",e.showPoints),t.xp6(3),t.Q6J("ngIf",e.showPoints),t.xp6(1),t.Q6J("ngIf",(null==e.threeViewer?null:e.threeViewer.renderer)&&(null==e.threeViewer?null:e.threeViewer.bloomPass)),t.xp6(1),t.Q6J("threeViewer",e.threeViewer)}}function Nt(r,o){1&r&&(t.TgZ(0,"span",5),t._uU(1,"expand_more"),t.qZA())}function Lt(r,o){1&r&&(t.TgZ(0,"span",5),t._uU(1,"chevron_left"),t.qZA())}function Zt(r,o){if(1&r&&(t.TgZ(0,"span",16),t._uU(1),t.qZA()),2&r){const e=o.ngIf;t.xp6(1),t.hij("Loading ",e,"%")}}function At(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"form")(1,"div",19)(2,"input",20,21),t.NdJ("input",function(){t.CHM(e);const i=t.MAs(3),s=t.oxw(2);return t.KtG(s.updateSearchTerm(i.value))}),t.qZA()()()}}function zt(r,o){1&r&&(t.TgZ(0,"span",5),t._uU(1,"visibility"),t.qZA())}function Ft(r,o){1&r&&(t.TgZ(0,"span",5),t._uU(1,"visibility_off"),t.qZA())}function Ut(r,o){1&r&&(t.TgZ(0,"span",5),t._uU(1,"expand_more"),t.qZA())}function Jt(r,o){1&r&&(t.TgZ(0,"span",5),t._uU(1,"chevron_left"),t.qZA())}function Ht(r,o){1&r&&(t.TgZ(0,"span",5),t._uU(1,"visibility"),t.qZA())}function Gt(r,o){1&r&&(t.TgZ(0,"span",5),t._uU(1,"visibility_off"),t.qZA())}function Yt(r,o){1&r&&(t.TgZ(0,"span",5),t._uU(1,"expand_more"),t.qZA())}function $t(r,o){1&r&&(t.TgZ(0,"span",5),t._uU(1,"chevron_left"),t.qZA())}const qt=function(r){return{backgroundColor:r}};function Bt(r,o){if(1&r&&(t.TgZ(0,"li"),t._UZ(1,"span",32),t._uU(2),t.qZA()),2&r){const e=o.$implicit;t.xp6(1),t.Akn(t.VKq(3,qt,e.color)),t.xp6(1),t.hij("",e.name," ")}}function jt(r,o){if(1&r&&(t.TgZ(0,"ul",31),t.YNc(1,Bt,3,5,"li",18),t.qZA()),2&r){const e=t.oxw().$implicit;t.xp6(1),t.Q6J("ngForOf",e.neurons)}}function Qt(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"li",28)(1,"span",29)(2,"button",23),t.NdJ("click",function(){const s=t.CHM(e).$implicit,a=t.oxw(4);return t.KtG(a.toggleVisibility(s))}),t.YNc(3,Ht,2,0,"span",3),t.YNc(4,Gt,2,0,"span",3),t.qZA(),t.TgZ(5,"button",24),t.NdJ("click",function(){const s=t.CHM(e).$implicit;return t.KtG(s.expanded=!s.expanded)}),t.TgZ(6,"span"),t._uU(7),t.qZA(),t.YNc(8,Yt,2,0,"span",3),t.YNc(9,$t,2,0,"span",3),t.qZA()(),t.YNc(10,jt,2,1,"ul",30),t.qZA()}if(2&r){const e=o.$implicit;t.xp6(3),t.Q6J("ngIf",e.visible),t.xp6(1),t.Q6J("ngIf",!e.visible),t.xp6(3),t.AsE("Neuron Set: ",e.keyword," (",e.neurons.length,")"),t.xp6(1),t.Q6J("ngIf",e.expanded),t.xp6(1),t.Q6J("ngIf",!e.expanded),t.xp6(1),t.Q6J("ngIf",e.expanded)}}function Kt(r,o){if(1&r&&(t.TgZ(0,"ul",26),t.YNc(1,Qt,11,7,"li",27),t.qZA()),2&r){const e=t.oxw().$implicit;t.xp6(1),t.Q6J("ngForOf",e.keywords)}}function Wt(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"li")(1,"span",22)(2,"button",23),t.NdJ("click",function(){const s=t.CHM(e).$implicit,a=t.oxw(2);return t.KtG(a.toggleVisibility(s))}),t.YNc(3,zt,2,0,"span",3),t.YNc(4,Ft,2,0,"span",3),t.qZA(),t.TgZ(5,"button",24),t.NdJ("click",function(){const s=t.CHM(e).$implicit;return t.KtG(s.expanded=!s.expanded)}),t.TgZ(6,"span"),t._uU(7),t.qZA(),t.YNc(8,Ut,2,0,"span",3),t.YNc(9,Jt,2,0,"span",3),t.qZA()(),t.YNc(10,Kt,2,1,"ul",25),t.qZA()}if(2&r){const e=o.$implicit;t.xp6(3),t.Q6J("ngIf",e.visible),t.xp6(1),t.Q6J("ngIf",!e.visible),t.xp6(3),t.hij("Data Set: ",e.name,""),t.xp6(1),t.Q6J("ngIf",e.expanded),t.xp6(1),t.Q6J("ngIf",!e.expanded),t.xp6(1),t.Q6J("ngIf",e.expanded)}}function Xt(r,o){if(1&r&&(t.TgZ(0,"div"),t.YNc(1,At,4,0,"form",6),t.TgZ(2,"ul",17),t.YNc(3,Wt,11,6,"li",18),t.qZA()()),2&r){const e=t.oxw();
1t.xp6(1),t.Q6J("ngIf",e.filteredExperimentData),t.xp6(2),t.Q6J("ngForOf",e.filteredExperimentData)}}let en=(()=>{class r{constructor(e){this.skeletonViewerService=e,this.filtered=new t.vpe,this.updateSizeNormalizaton=new t.vpe,this.togglePoints=new t.vpe,this.updateDefaultPointDiameter=new t.vpe,this.sizeNormalization=new M.x,this.searchTerms=new M.x,this.listVisible=!1,this.settingsVisible=!1,this._showPoints=!1}set showPoints(e){this.togglePoints.emit(e),this._showPoints=e}get showPoints(){return this._showPoints}get diameterScale(){return 10*R.P.pointSizeNormalizaton}set diameterScale(e){this.updateSizeNormalizaton.next(e/10)}get defaultDiameter(){return R.P.defaultPointSize}set defaultDiameter(e){this.updateDefaultPointDiameter.emit(e)}ngOnInit(){this.loadProgress$=this.skeletonViewerService.skeletonLoadStatus$,this.searchTerms.pipe((0,Re.b)(500),(0,Ne.x)()).subscribe(e=>{this.filteredExperimentData=this.search(e.toUpperCase()),this.update3D()}),this.sizeNormalization.pipe((0,Re.b)(500),(0,Ne.x)()).subscribe(e=>this.updateSizeNormalizaton.emit(e))}ngOnChanges(e){"experimentData"in e&&this.experimentData&&(this.cachedFilteredExperimentData=this.sortExperimentData(this.experimentData),this.filteredExperimentData=this.search(null),this.update3D())}updateSearchTerm(e){this.searchTerms.next(e)}update3D(){console.log("update3D"),this.skeletonViewerService.updateFilteredExperimentData(this.filteredExperimentData)}toggleVisibility(e){e.visible=!e.visible,this.update3D()}search(e){if(e){if(this.cachedFilteredExperimentData){const n=JSON.parse(JSON.stringify(this.cachedFilteredExperimentData.filter(i=>i.visible)));return n.forEach(i=>{i.keywords&&i.keywords.forEach(s=>{s.neurons=s.neurons.filter(a=>a.name.toUpperCase().includes(e))})}),n}return[]}return this.cachedFilteredExperimentData}sortExperimentData(e){console.log("sortExperimentData",e);const n=[];return e.forEach((i,s)=>{const a={name:i.name||s.toString(10),keywords:[],expanded:!0,visible:!0};let l="";i.keywords.forEach(c=>{if(c){l=c.toUpperCase();const d=i.data.filter(_=>_.annotations.some(b=>b.name.toUpperCase()===l));d.sort((_,b)=>_.name<b.name?-1:_.name>b.name?1:0),a.keywords.push({keyword:c,neurons:d,expanded:!1,visible:!0})}}),n.push(a)}),n.sort((i,s)=>i.name<s.name?-1:i.name>s.name?1:0),n}}return r.\u0275fac=function(e){return new(e||r)(t.Y36(N))},r.\u0275cmp=t.Xpm({type:r,selectors:[["app-catmaid-experiment-data-list"]],inputs:{experimentData:"experimentData",threeViewer:"threeViewer"},outputs:{filtered:"filtered",updateSizeNormalizaton:"updateSizeNormalizaton",togglePoints:"togglePoints",updateDefaultPointDiameter:"updateDefaultPointDiameter"},features:[t.TTD],decls:14,vars:9,consts:[["class","settings-container",4,"ngIf"],[1,"header-setting-container"],[1,"btn-link",3,"disabled","click"],["class","material-icons",4,"ngIf"],["style","margin-left: 1.5em",4,"ngIf"],[1,"material-icons"],[4,"ngIf"],[1,"settings-container"],[2,"margin-bottom","1em"],["id","points-input-container",1,"inline-form-group"],["type","checkbox",3,"ngModel","ngModelChange"],[3,"threeViewer"],[1,"slider-container"],["id","skeleton-diameter","type","range","min",".005","max","1","step",".01",3,"ngModel","ngModelChange"],[2,"margin-left",".5em","width","3em"],["id","skeleton-diameter-default","type","range","min","1","max","10","step",".5",3,"ngModel","ngModelChange"],[2,"margin-left","1.5em"],["id","neuron-list-results"],[4,"ngFor","ngForOf"],["id","search-input-container"],["type","search","placeholder","Filter skeletons","spellcheck","false","autocomplete","false",3,"input"],["searchInput",""],[1,"category-title",2,"margin-bottom",".75em"],[1,"btn-link","visibility-icon",3,"click"],[1,"btn-link",3,"click"],["style","padding-left: 1em; padding-bottom: 1em",4,"ngIf"],[2,"padding-left","1em","padding-bottom","1em"],["style","padding-bottom: .25em",4,"ngFor","ngForOf"],[2,"padding-bottom",".25em"],[1,"category-title"],["style","padding-left: 1em",4,"ngIf"],[2,"padding-left","1em"],[1,"color-tile"]],template:function(e,n){1&e&&(t.YNc(0,Rt,11,4,"div",0),t.TgZ(1,"div",1)(2,"div")(3,"button",2),t.NdJ("click",function(){return n.listVisible=!n.listVisible}),t.TgZ(4,"h4"),t._uU(5,"Skeletons"),t.qZA(),t.YNc(6,Nt,2,0,"span",3),t.YNc(7,Lt,2,0,"span",3),t.qZA(),t.YNc(8,Zt,2,1,"span",4),t.ALo(9,"async"),t.qZA(),t.TgZ(10,"button",2),t.NdJ("click",function(){return n.settingsVisible=!n.settingsVisible}),t.TgZ(11,"span",5),t._uU(12,"settings"),t.qZA()()(),t.YNc(13,Xt,4,2,"div",6)),2&e&&(t.Q6J("ngIf",n.settingsVisible),t.xp6(3),t.Q6J("disabled",!(null!=n.filteredExperimentData&&n.filteredExperimentData.length)),t.xp6(3),t.Q6J("ngIf",n.listVisible),t.xp6(1),t.Q6J("ngIf",!n.listVisible),t.xp6(1),t.Q6J("ngIf",t.lcZ(9,7,n.loadProgress$)),t.xp6(2),t.Q6J("disabled",!(null!=n.filteredExperimentData&&n.filteredExperimentData.length)),t.xp6(3),t.Q6J("ngIf",n.listVisible))},dependencies:[w.sg,w.O5,P._Y,P.Fj,P.eT,P.Wl,P.JJ,P.JL,P.On,P.F,Et,w.Ov,w.Zx],styles:["input[type=range][_ngcontent-%COMP%]{appearance:none;-webkit-appearance:none;-moz-appearance:none;background:transparent}input[type=range][_ngcontent-%COMP%]::-webkit-slider-runnable-track{width:300px;height:2px;background:#ddd;border:none;border-radius:1px}input[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:12px;width:12px;border-radius:12px;background:rgb(245,245,245);margin-top:-5px}input[type=range][_ngcontent-%COMP%]:focus{outline:none}input[type=range][_ngcontent-%COMP%]:focus::-webkit-slider-runnable-track{background:#ccc}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-webkit-slider-runnable-track{background:rgb(90,90,90)}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb{background:rgb(90,90,90)}input[type=range][_ngcontent-%COMP%]::-moz-range-track{height:2px;background:#ddd;border:none;border-radius:1px}input[type=range][_ngcontent-%COMP%]::-moz-range-thumb{-moz-appearance:none;border:none;height:12px;width:12px;border-radius:12px;background:rgb(245,245,245);cursor:pointer}","[_ngcontent-%COMP%]::-webkit-scrollbar-track{border-radius:5px;background:rgba(240,240,240,.1)}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{border-radius:5px;background:rgba(240,240,240,.2);border-color:transparent}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:rgba(240,240,240,.4)}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:window-inactive{background:rgba(240,240,240,.05)}[_ngcontent-%COMP%]::-webkit-scrollbar{width:9px}.scroller[_ngcontent-%COMP%]{scrollbar-color:rgb(160,160,160) rgb(90,90,90);scrollbar-width:thin}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-track{background:rgba(240,240,240,.1)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:rgba(240,240,240,.2)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:rgba(240,240,240,.4)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb:window-inactive{background:rgba(240,240,240,.05)}",".color-tile[_ngcontent-%COMP%]{width:1em;height:1em;display:inline-block;margin-right:.5em}.category-title[_ngcontent-%COMP%]{font-weight:700;margin-bottom:.35em;display:flex}.header-setting-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;flex-grow:1}ul[_ngcontent-%COMP%]{margin:0;margin-block:0;margin-block-start:0;margin-block-end:0;padding-inline-start:0}ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{text-align:left;padding-bottom:.2em}h4[_ngcontent-%COMP%]{text-transform:uppercase;margin:0}.btn-link[_ngcontent-%COMP%]{margin:0;color:#c8c8c8;display:inline-flex;align-items:center}.btn-link[_ngcontent-%COMP%]:hover{color:#fff}.button[_ngcontent-%COMP%]{color:inherit;background:transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:100%;pointer-events:auto;height:3em;margin:0 0 1em}.button[_ngcontent-%COMP%]:hover{background-color:#ffffff26}input[type=search][_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;border-radius:4px;padding:.5em .25em;outline:none;display:inline-block;pointer-events:auto;background:rgba(255,255,255,.15);margin:.5em 0 1em}select[_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;background:url(/assets/dropdown-arrow-light.svg) no-repeat right transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:100%;padding:2px 1em;outline:none;display:inline-block;pointer-events:auto;margin-bottom:1em}.visibility-icon[_ngcontent-%COMP%]{margin:0 .25em}#skeleton-diameter[_ngcontent-%COMP%], #skeleton-diameter-default[_ngcontent-%COMP%]{flex:1}.slider-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin:0 0 .5em}.header-setting-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between}.header-setting-container.settings-open[_ngcontent-%COMP%]{margin-bottom:1em}.header-setting-container.settings-open[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]{opacity:.5}.settings-container[_ngcontent-%COMP%]{margin-bottom:1em}#points-input-container[_ngcontent-%COMP%]{display:flex;align-content:center;margin-bottom:1em}#points-input-container[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{margin:0 .25em 0 0}hr[_ngcontent-%COMP%]{border-top-style:none;opacity:.25;margin:1em 0}#config-status[_ngcontent-%COMP%]{background-color:#258618;border-radius:.5em;width:.7em;height:.7em;display:inline-block;margin-left:.5rem}#config-status.dirty[_ngcontent-%COMP%]{background-color:#c70000}#config-status.busy[_ngcontent-%COMP%]{animation:blinker .25s linear infinite}@keyframes blinker{50%{opacity:0}
1}","[_nghost-%COMP%]{max-height:100%;display:flex;flex-direction:column;flex-grow:1}"]}),r})();var he=h(41273),L=h(83353),O=h(21281),Le=h(3948),$=h(50727),tn=h(17445),nn=h(66406),Ze=h(56451),X=h(82722),pe=h(68675),on=h(18505),rn=h(63900),Ae=h(40445);function ge(r,o,e){for(let n in o)if(o.hasOwnProperty(n)){const i=o[n];i?r.setProperty(n,i,e?.has(n)?"important":""):r.removeProperty(n)}return r}function J(r,o){const e=o?"":"none";ge(r.style,{"touch-action":o?"":"none","-webkit-user-drag":o?"":"none","-webkit-tap-highlight-color":o?"":"transparent","user-select":e,"-ms-user-select":e,"-webkit-user-select":e,"-moz-user-select":e})}function ze(r,o,e){ge(r.style,{position:o?"":"fixed",top:o?"":"0",opacity:o?"":"0",left:o?"":"-999em"},e)}function ee(r,o){return o&&"none"!=o?r+" "+o:r}function Fe(r){const o=r.toLowerCase().indexOf("ms")>-1?1:1e3;return parseFloat(r)*o}function ue(r,o){return r.getPropertyValue(o).split(",").map(n=>n.trim())}function me(r){const o=r.getBoundingClientRect();return{top:o.top,right:o.right,bottom:o.bottom,left:o.left,width:o.width,height:o.height,x:o.x,y:o.y}}function _e(r,o,e){const{top:n,bottom:i,left:s,right:a}=r;return e>=n&&e<=i&&o>=s&&o<=a}function q(r,o,e){r.top+=o,r.bottom=r.top+r.height,r.left+=e,r.right=r.left+r.width}function Ue(r,o,e,n){const{top:i,right:s,bottom:a,left:l,width:c,height:d}=r,_=c*o,b=d*o;return n>i-b&&n<a+b&&e>l-_&&e<s+_}class Je{constructor(o){this._document=o,this.positions=new Map}clear(){this.positions.clear()}cache(o){this.clear(),this.positions.set(this._document,{scrollPosition:this.getViewportScrollPosition()}),o.forEach(e=>{this.positions.set(e,{scrollPosition:{top:e.scrollTop,left:e.scrollLeft},clientRect:me(e)})})}handleScroll(o){const e=(0,L.sA)(o),n=this.positions.get(e);if(!n)return null;const i=n.scrollPosition;let s,a;if(e===this._document){const d=this.getViewportScrollPosition();s=d.top,a=d.left}else s=e.scrollTop,a=e.scrollLeft;const l=i.top-s,c=i.left-a;return this.positions.forEach((d,_)=>{d.clientRect&&e!==_&&e.contains(_)&&q(d.clientRect,l,c)}),i.top=s,i.left=a,{top:l,left:c}}getViewportScrollPosition(){return{top:window.scrollY,left:window.scrollX}}}function He(r){const o=r.cloneNode(!0),e=o.querySelectorAll("[id]"),n=r.nodeName.toLowerCase();o.removeAttribute("id");for(let i=0;i<e.length;i++)e[i].removeAttribute("id");return"canvas"===n?$e(r,o):("input"===n||"select"===n||"textarea"===n)&&Ye(r,o),Ge("canvas",r,o,$e),Ge("input, textarea, select",r,o,Ye),o}function Ge(r,o,e,n){const i=o.querySelectorAll(r);if(i.length){const s=e.querySelectorAll(r);for(let a=0;a<i.length;a++)n(i[a],s[a])}}let an=0;function Ye(r,o){"file"!==o.type&&(o.value=r.value),"radio"===o.type&&o.name&&(o.name=`mat-clone-${o.name}-${an++}`)}function $e(r,o){const e=o.getContext("2d");if(e)try{e.drawImage(r,0,0)}catch{}}const qe=(0,L.i$)({passive:!0}),te=(0,L.i$)({passive:!1}),fe=new Set(["position"]);class cn{constructor(o,e,n,i,s,a){this._config=e,this._document=n,this._ngZone=i,this._viewportRuler=s,this._dragDropRegistry=a,this._passiveTransform={x:0,y:0},this._activeTransform={x:0,y:0},this._hasStartedDragging=!1,this._moveEvents=new M.x,this._pointerMoveSubscription=$.w0.EMPTY,this._pointerUpSubscription=$.w0.EMPTY,this._scrollSubscription=$.w0.EMPTY,this._resizeSubscription=$.w0.EMPTY,this._boundaryElement=null,this._nativeInteractionsEnabled=!0,this._handles=[],this._disabledHandles=new Set,this._direction="ltr",this.dragStartDelay=0,this._disabled=!1,this.beforeStarted=new M.x,this.started=new M.x,this.released=new M.x,this.ended=new M.x,this.entered=new M.x,this.exited=new M.x,this.dropped=new M.x,this.moved=this._moveEvents,this._pointerDown=l=>{if(this.beforeStarted.next(),this._handles.length){const c=this._getTargetHandle(l);c&&!this._disabledHandles.has(c)&&!this.disabled&&this._initializeDragSequence(c,l)}else this.disabled||this._initializeDragSequence(this._rootElement,l)},this._pointerMove=l=>{const c=this._getPointerPositionOnPage(l);if(!this._hasStartedDragging){if(Math.abs(c.x-this._pickupPositionOnPage.x)+Math.abs(c.y-this._pickupPositionOnPage.y)>=this._config.dragStartThreshold){const g=Date.now()>=this._dragStartTime+this._getDragStartDelay(l),u=this._dropContainer;if(!g)return void this._endDragSequence(l);
1(!u||!u.isDragging()&&!u.isReceiving())&&(l.preventDefault(),this._hasStartedDragging=!0,this._ngZone.run(()=>this._startDragSequence(l)))}return}l.preventDefault();const d=this._getConstrainedPointerPosition(c);if(this._hasMoved=!0,this._lastKnownPointerPosition=c,this._updatePointerDirectionDelta(d),this._dropContainer)this._updateActiveDropContainer(d,c);else{const _=this.constrainPosition?this._initialClientRect:this._pickupPositionOnPage,b=this._activeTransform;b.x=d.x-_.x+this._passiveTransform.x,b.y=d.y-_.y+this._passiveTransform.y,this._applyRootElementTransform(b.x,b.y)}this._moveEvents.observers.length&&this._ngZone.run(()=>{this._moveEvents.next({source:this,pointerPosition:d,event:l,distance:this._getDragDistance(d),delta:this._pointerDirectionDelta})})},this._pointerUp=l=>{this._endDragSequence(l)},this._nativeDragStart=l=>{if(this._handles.length){const c=this._getTargetHandle(l);c&&!this._disabledHandles.has(c)&&!this.disabled&&l.preventDefault()}else this.disabled||l.preventDefault()},this.withRootElement(o).withParent(e.parentDragRef||null),this._parentPositions=new Je(n),a.registerDragItem(this)}get disabled(){return this._disabled||!(!this._dropContainer||!this._dropContainer.disabled)}set disabled(o){const e=(0,O.Ig)(o);e!==this._disabled&&(this._disabled=e,this._toggleNativeDragInteractions(),this._handles.forEach(n=>J(n,e)))}getPlaceholderElement(){return this._placeholder}getRootElement(){return this._rootElement}getVisibleElement(){return this.isDragging()?this.getPlaceholderElement():this.getRootElement()}withHandles(o){this._handles=o.map(n=>(0,O.fI)(n)),this._handles.forEach(n=>J(n,this.disabled)),this._toggleNativeDragInteractions();const e=new Set;return this._disabledHandles.forEach(n=>{this._handles.indexOf(n)>-1&&e.add(n)}),this._disabledHandles=e,this}withPreviewTemplate(o){return this._previewTemplate=o,this}withPlaceholderTemplate(o){return this._placeholderTemplate=o,this}withRootElement(o){const e=(0,O.fI)(o);return e!==this._rootElement&&(this._rootElement&&this._removeRootElementListeners(this._rootElement),this._ngZone.runOutsideAngular(()=>{e.addEventListener("mousedown",this._pointerDown,te),e.addEventListener("touchstart",this._pointerDown,qe),e.addEventListener("dragstart",this._nativeDragStart,te)}),this._initialTransform=void 0,this._rootElement=e),typeof SVGElement<"u"&&this._rootElement instanceof SVGElement&&(this._ownerSVGElement=this._rootElement.ownerSVGElement),this}withBoundaryElement(o){return this._boundaryElement=o?(0,O.fI)(o):null,this._resizeSubscription.unsubscribe(),o&&(this._resizeSubscription=this._viewportRuler.change(10).subscribe(()=>this._containInsideBoundaryOnResize())),this}withParent(o){return this._parentDragRef=o,this}dispose(){this._removeRootElementListeners(this._rootElement),this.isDragging()&&this._rootElement?.remove(),this._anchor?.remove(),this._destroyPreview(),this._destroyPlaceholder(),this._dragDropRegistry.removeDragItem(this),this._removeSubscriptions(),this.beforeStarted.complete(),this.started.complete(),this.released.complete(),this.ended.complete(),this.entered.complete(),this.exited.complete(),this.dropped.complete(),this._moveEvents.complete(),this._handles=[],this._disabledHandles.clear(),this._dropContainer=void 0,this._resizeSubscription.unsubscribe(),this._parentPositions.clear(),this._boundaryElement=this._rootElement=this._ownerSVGElement=this._placeholderTemplate=this._previewTemplate=this._anchor=this._parentDragRef=null}isDragging(){return this._hasStartedDragging&&this._dragDropRegistry.isDragging(this)}reset(){this._rootElement.style.transform=this._initialTransform||"",this._activeTransform={x:0,y:0},this._passiveTransform={x:0,y:0}}disableHandle(o){!this._disabledHandles.has(o)&&this._handles.indexOf(o)>-1&&(this._disabledHandles.add(o),J(o,!0))}enableHandle(o){this._disabledHandles.has(o)&&(this._disabledHandles.delete(o),J(o,this.disabled))}withDirection(o){return this._direction=o,this}_withDropContainer(o){this._dropContainer=o}getFreeDragPosition(){const o=this.isDragging()?this._activeTransform:this._passiveTransform;return{x:o.x,y:o.y}}setFreeDragPosition(o){return this._activeTransform={x:0,y:0},this._passiveTransform.x=o.x,this._passiveTransform.y=o.y,this._dropContainer||this._applyRootElementTransform(o.x,o.y),this}withPreviewContainer(o){return this._previewContainer=o,this}_sortFromLastPointerPosition(){const o=this._lastKnownPointerPosition;o&&this._dropContainer&&this._updateActiveDropContainer(this._getConstrainedPointerPosition(o),o)}_removeSubscriptions(){this._pointerMoveSubscription.unsubscribe(),this._pointerUpSubscription.unsubscribe(),this._scrollSubscription.unsubscribe()}_destroyPreview(){this._preview?.remove(),this._previewRef?.destroy(),this._preview=this._previewRef=null}
1_destroyPlaceholder(){this._placeholder?.remove(),this._placeholderRef?.destroy(),this._placeholder=this._placeholderRef=null}_endDragSequence(o){if(this._dragDropRegistry.isDragging(this)&&(this._removeSubscriptions(),this._dragDropRegistry.stopDragging(this),this._toggleNativeDragInteractions(),this._handles&&(this._rootElement.style.webkitTapHighlightColor=this._rootElementTapHighlight),this._hasStartedDragging))if(this.released.next({source:this,event:o}),this._dropContainer)this._dropContainer._stopScrolling(),this._animatePreviewToPlaceholder().then(()=>{this._cleanupDragArtifacts(o),this._cleanupCachedDimensions(),this._dragDropRegistry.stopDragging(this)});else{this._passiveTransform.x=this._activeTransform.x;const e=this._getPointerPositionOnPage(o);this._passiveTransform.y=this._activeTransform.y,this._ngZone.run(()=>{this.ended.next({source:this,distance:this._getDragDistance(e),dropPoint:e,event:o})}),this._cleanupCachedDimensions(),this._dragDropRegistry.stopDragging(this)}}_startDragSequence(o){B(o)&&(this._lastTouchEventTime=Date.now()),this._toggleNativeDragInteractions();const e=this._dropContainer;if(e){const n=this._rootElement,i=n.parentNode,s=this._placeholder=this._createPlaceholderElement(),a=this._anchor=this._anchor||this._document.createComment(""),l=this._getShadowRoot();i.insertBefore(a,n),this._initialTransform=n.style.transform||"",this._preview=this._createPreviewElement(),ze(n,!1,fe),this._document.body.appendChild(i.replaceChild(s,n)),this._getPreviewInsertionPoint(i,l).appendChild(this._preview),this.started.next({source:this,event:o}),e.start(),this._initialContainer=e,this._initialIndex=e.getItemIndex(this)}else this.started.next({source:this,event:o}),this._initialContainer=this._initialIndex=void 0;this._parentPositions.cache(e?e.getScrollableParents():[])}_initializeDragSequence(o,e){this._parentDragRef&&e.stopPropagation();const n=this.isDragging(),i=B(e),s=!i&&0!==e.button,a=this._rootElement,l=(0,L.sA)(e),c=!i&&this._lastTouchEventTime&&this._lastTouchEventTime+800>Date.now(),d=i?(0,Le.yG)(e):(0,Le.X6)(e);if(l&&l.draggable&&"mousedown"===e.type&&e.preventDefault(),n||s||c||d)return;if(this._handles.length){const m=a.style;this._rootElementTapHighlight=m.webkitTapHighlightColor||"",m.webkitTapHighlightColor="transparent"}this._hasStartedDragging=this._hasMoved=!1,this._removeSubscriptions(),this._initialClientRect=this._rootElement.getBoundingClientRect(),this._pointerMoveSubscription=this._dragDropRegistry.pointerMove.subscribe(this._pointerMove),this._pointerUpSubscription=this._dragDropRegistry.pointerUp.subscribe(this._pointerUp),this._scrollSubscription=this._dragDropRegistry.scrolled(this._getShadowRoot()).subscribe(m=>this._updateOnScroll(m)),this._boundaryElement&&(this._boundaryRect=me(this._boundaryElement));const _=this._previewTemplate;this._pickupPositionInElement=_&&_.template&&!_.matchSize?{x:0,y:0}:this._getPointerPositionInElement(this._initialClientRect,o,e);const b=this._pickupPositionOnPage=this._lastKnownPointerPosition=this._getPointerPositionOnPage(e);this._pointerDirectionDelta={x:0,y:0},this._pointerPositionAtLastDirectionChange={x:b.x,y:b.y},this._dragStartTime=Date.now(),this._dragDropRegistry.startDragging(this,e)}_cleanupDragArtifacts(o){ze(this._rootElement,!0,fe),this._anchor.parentNode.replaceChild(this._rootElement,this._anchor),this._destroyPreview(),this._destroyPlaceholder(),this._initialClientRect=this._boundaryRect=this._previewRect=this._initialTransform=void 0,this._ngZone.run(()=>{const e=this._dropContainer,n=e.getItemIndex(this),i=this._getPointerPositionOnPage(o),s=this._getDragDistance(i),a=e._isOverContainer(i.x,i.y);this.ended.next({source:this,distance:s,dropPoint:i,event:o}),this.dropped.next({item:this,currentIndex:n,previousIndex:this._initialIndex,container:e,previousContainer:this._initialContainer,isPointerOverContainer:a,distance:s,dropPoint:i,event:o}),e.drop(this,n,this._initialIndex,this._initialContainer,a,s,i,o),this._dropContainer=this._initialContainer})}_updateActiveDropContainer({x:o,y:e},{x:n,y:i}){let s=this._initialContainer._getSiblingContainerFromPosition(this,o,e);!s&&this._dropContainer!==this._initialContainer&&this._initialContainer._isOverContainer(o,e)&&(s=this._initialContainer),s&&s!==this._dropContainer&&this._ngZone.run(()=>{this.exited.next({item:this,container:this._dropContainer}),this._dropContainer.exit(this),this._dropContainer=s,this._dropContainer.enter(this,o,e,s===this._initialContainer&&s.sortingDisabled?this._initialIndex:void 0),this.entered.next({item:this,container:s,currentIndex:s.getItemIndex(this)})}),this.isDragging()&&(this._dropContainer._startScrollingIfNecessary(n,i),this._dropContainer._sortItem(this,o,e,this._pointerDirectionDelta),this.constrainPosition?this._applyPreviewTransform(o,e):this._applyPreviewTransform(o-this._pickupPositionInElement.x,e-this._pickupPositionInElement.y))}_createPreviewElement(){const o=this._previewTemplate,e=this.previewClass,n=o?o.template:null;let i;if(n&&o){const s=o.matchSize?this._initialClientRect:null,a=o.viewContainer.createEmbeddedView(n,o.context);a.detectChanges(),i=je(a,this._document),this._previewRef=a,o.matchSize?Qe(i,s):i.style.transform=ne(this._pickupPositionOnPage.x,this._pickupPositionOnPage.y)}else i=He(this._rootElement),Qe(i,this._initialClientRect),this._initialTransform&&(i.style.transform=this._initialTransform);return ge(i.style,{"pointer-events":"none",margin:"0",position:"fixed",top:"0",left:"0","z-index":`${this._config.zIndex||1e3}`},fe),J(i,!1),i.classList.add("cdk-drag-preview"),i.setAttribute("dir",this._direction),e&&(Array.isArray(e)?e.forEach(s=>i.classList.add(s)):i.classList.add(e)),i}_animatePreviewToPlaceholder(){if(!this._hasMoved)return Promise.resolve();const o=this._placeholder.getBoundingClientRect();this._preview.classList.add("cdk-drag-animating"),this._applyPreviewTransform(o.left,o.top);const e=function sn(r){const o=getComputedStyle(r),e=ue(o,"transition-property"),n=e.find(l=>"transform"===l||"all"===l);if(!n)return 0;const i=e.indexOf(n),s=ue(o,"transition-duration"),a=ue(o,"transition-delay");return Fe(s[i])+Fe(a[i])}(this._preview);return 0===e?Promise.resolve():this._ngZone.runOutsideAngular(()=>new Promise(n=>{const i=a=>{(!a||(0,L.sA)(a)===this._preview&&"transform"===a.propertyName)&&(this._preview?.removeEventListener("transitionend",i),n(),clearTimeout(s))},s=setTimeout(i,1.5*e);this._preview.addEventListener("transitionend",i)}))}_createPlaceholderElement(){const o=this._placeholderTemplate,e=o?o.template:null;let n;return e?(this._placeholderRef=o.viewContainer.createEmbeddedView(e,o.context),this._placeholderRef.detectChanges(),n=je(this._placeholderRef,this._document)):n=He(this._rootElement),n.style.pointerEvents="none",n.classList.add("cdk-drag-placeholder"),n}_getPointerPositionInElement(o,e,n){const i=e===this._rootElement?null:e,s=i?i.getBoundingClientRect():o,a=B(n)?n.targetTouches[0]:n,l=this._getViewportScrollPosition();return{x:s.left-o.left+(a.pageX-s.left-l.left),y:s.top-o.top+(a.pageY-s.top-l.top)}}_getPointerPositionOnPage(o){const e=this._getViewportScrollPosition(),n=B(o)?o.touches[0]||o.changedTouches[0]||{pageX:0,pageY:0}:o,i=n.pageX-e.left,s=n.pageY-e.top;if(this._ownerSVGElement){const a=this._ownerSVGElement.getScreenCTM();if(a){const l=this._ownerSVGElement.createSVGPoint();return l.x=i,l.y=s,l.matrixTransform(a.inverse())}}return{x:i,y:s}}_getConstrainedPointerPosition(o){const e=this._dropContainer?this._dropContainer.lockAxis:null;let{x:n,y:i}=this.constrainPosition?this.constrainPosition(o,this,this._initialClientRect,this._pickupPositionInElement):o;if("x"===this.lockAxis||"x"===e?i=this._pickupPositionOnPage.y:("y"===this.lockAxis||"y"===e)&&(n=this._pickupPositionOnPage.x),this._boundaryRect){const{x:s,y:a}=this._pickupPositionInElement,l=this._boundaryRect,{width:c,height:d}=this._getPreviewRect(),_=l.top+a,b=l.bottom-(d-a);n=Be(n,l.left+s,l.right-(c-s)),i=Be(i,_,b)}return{x:n,y:i}}_updatePointerDirectionDelta(o){const{x:e,y:n}=o,i=this._pointerDirectionDelta,s=this._pointerPositionAtLastDirectionChange,a=Math.abs(e-s.x),l=Math.abs(n-s.y);return a>this._config.pointerDirectionChangeThreshold&&(i.x=e>s.x?1:-1,s.x=e),l>this._config.pointerDirectionChangeThreshold&&(i.y=n>s.y?1:-1,s.y=n),i}_toggleNativeDragInteractions(){if(!this._rootElement||!this._handles)return;const o=this._handles.length>0||!this.isDragging();o!==this._nativeInteractionsEnabled&&(this._nativeInteractionsEnabled=o,J(this._rootElement,o))}_removeRootElementListeners(o){o.removeEventListener("mousedown",this._pointerDown,te),o.removeEventListener("touchstart",this._pointerDown,qe),o.removeEventListener("dragstart",this._nativeDragStart,te)}_applyRootElementTransform(o,e){const n=ne(o,e),i=this._rootElement.style;null==this._initialTransform&&(this._initialTransform=i.transform&&"none"!=i.transform?i.transform:""),i.transform=ee(n,this._initialTransform)}_applyPreviewTransform(o,e){const n=this._previewTemplate?.template?void 0:this._initialTransform,i=ne(o,e);this._preview.style.transform=ee(i,n)}_getDragDistance(o){const e=this._pickupPositionOnPage;return e?{x:o.x-e.x,y:o.y-e.y}:{x:0,y:0}}_cleanupCachedDimensions(){this._boundaryRect=this._previewRect=void 0,this._parentPositions.clear()}_containInsideBoundaryOnResize(){let{x:o,y:e}=this._passiveTransform;if(0===o&&0===e||this.isDragging()||!this._boundaryElement)return;const n=this._rootElement.getBoundingClientRect(),i=this._boundaryElement.getBoundingClientRect();if(0===i.width&&0===i.height||0===n.width&&0===n.height)return;const s=i.left-n.left,a=n.right-i.right,l=i.top-n.top,c=n.bottom-i.bottom;i.width>n.width?(s>0&&(o+=s),a>0&&(o-=a)):o=0,i.height>n.height?(l>0&&(e+=l),c>0&&(e-=c)):e=0,(o!==this._passiveTransform.x||e!==this._passiveTransform.y)&&this.setFreeDragPosition({y:e,x:o})}_getDragStartDelay(o){const e=this.dragStartDelay;return"number"==typeof e?e:B(o)?e.touch:e?e.mouse:0}_updateOnScroll(o){const e=this._parentPositions.handleScroll(o);if(e){const n=(0,L.sA)(o);this._boundaryRect&&n!==this._boundaryElement&&n.contains(this._boundaryElement)&&q(this._boundaryRect,e.top,e.left),this._pickupPositionOnPage.x+=e.left,this._pickupPositionOnPage.y+=e.top,this._dropContainer||(this._activeTransform.x-=e.left,this._activeTransform.y-=e.top,this._applyRootElementTransform(this._activeTransform.x,this._activeTransform.y))}}_getViewportScrollPosition(){return this._parentPositions.positions.get(this._document)?.scrollPosition||this._parentPositions.getViewportScrollPosition()}_getShadowRoot(){return void 0===this._cachedShadowRoot&&(this._cachedShadowRoot=(0,L.kV)(this._rootElement)),this._cachedShadowRoot}_getPreviewInsertionPoint(o,e){const n=this._previewContainer||"global";if("parent"===n)return o;if("global"===n){const i=this._document;return e||i.fullscreenElement||i.webkitFullscreenElement||i.mozFullScreenElement||i.msFullscreenElement||i.body}return(0,O.fI)(n)}_getPreviewRect(){return(!this._previewRect||!this._previewRect.width&&!this._previewRect.height)&&(this._previewRect=this._preview?this._preview.getBoundingClientRect():this._initialClientRect),this._previewRect}_getTargetHandle(o){return this._handles.find(e=>o.target&&(o.target===e||e.contains(o.target)))}}function ne(r,o){return`translate3d(${Math.round(r)}px, ${Math.round(o)}px, 0)`}function Be(r,o,e){return Math.max(o,Math.min(e,r))}function B(r){return"t"===r.type[0]}function je(r,o){const e=r.rootNodes;if(1===e.length&&e[0].nodeType===o.ELEMENT_NODE)return e[0];const n=o.createElement("div");return e.forEach(i=>
1n.appendChild(i)),n}function Qe(r,o){r.style.width=`${o.width}px`,r.style.height=`${o.height}px`,r.style.transform=ne(o.left,o.top)}function Ke(r,o,e){const n=j(o,r.length-1),i=j(e,r.length-1);if(n===i)return;const s=r[n],a=i<n?-1:1;for(let l=n;l!==i;l+=a)r[l]=r[l+a];r[i]=s}function j(r,o){return Math.max(0,Math.min(o,r))}class dn{constructor(o,e){this._element=o,this._dragDropRegistry=e,this._itemPositions=[],this.orientation="vertical",this._previousSwap={drag:null,delta:0,overlaps:!1}}start(o){this.withItems(o)}sort(o,e,n,i){const s=this._itemPositions,a=this._getItemIndexFromPointerPosition(o,e,n,i);if(-1===a&&s.length>0)return null;const l="horizontal"===this.orientation,c=s.findIndex(S=>S.drag===o),d=s[a],b=d.clientRect,m=c>a?1:-1,g=this._getItemOffsetPx(s[c].clientRect,b,m),u=this._getSiblingOffsetPx(c,s,m),T=s.slice();return Ke(s,c,a),s.forEach((S,Ce)=>{if(T[Ce]===S)return;const H=S.drag===o,ve=H?g:u,at=H?o.getPlaceholderElement():S.drag.getRootElement();S.offset+=ve,l?(at.style.transform=ee(`translate3d(${Math.round(S.offset)}px, 0, 0)`,S.initialTransform),q(S.clientRect,0,ve)):(at.style.transform=ee(`translate3d(0, ${Math.round(S.offset)}px, 0)`,S.initialTransform),q(S.clientRect,ve,0))}),this._previousSwap.overlaps=_e(b,e,n),this._previousSwap.drag=d.drag,this._previousSwap.delta=l?i.x:i.y,{previousIndex:c,currentIndex:a}}enter(o,e,n,i){const s=null==i||i<0?this._getItemIndexFromPointerPosition(o,e,n):i,a=this._activeDraggables,l=a.indexOf(o),c=o.getPlaceholderElement();let d=a[s];if(d===o&&(d=a[s+1]),!d&&(null==s||-1===s||s<a.length-1)&&this._shouldEnterAsFirstChild(e,n)&&(d=a[0]),l>-1&&a.splice(l,1),d&&!this._dragDropRegistry.isDragging(d)){const _=d.getRootElement();_.parentElement.insertBefore(c,_),a.splice(s,0,o)}else(0,O.fI)(this._element).appendChild(c),a.push(o);c.style.transform="",this._cacheItemPositions()}withItems(o){this._activeDraggables=o.slice(),this._cacheItemPositions()}withSortPredicate(o){this._sortPredicate=o}reset(){this._activeDraggables.forEach(o=>{const e=o.getRootElement();if(e){const n=this._itemPositions.find(i=>i.drag===o)?.initialTransform;e.style.transform=n||""}}),this._itemPositions=[],this._activeDraggables=[],this._previousSwap.drag=null,this._previousSwap.delta=0,this._previousSwap.overlaps=!1}getActiveItemsSnapshot(){return this._activeDraggables}getItemIndex(o){return("horizontal"===this.orientation&&"rtl"===this.direction?this._itemPositions.slice().reverse():this._itemPositions).findIndex(n=>n.drag===o)}updateOnScroll(o,e){this._itemPositions.forEach(({clientRect:n})=>{q(n,o,e)}),this._itemPositions.forEach(({drag:n})=>{this._dragDropRegistry.isDragging(n)&&n._sortFromLastPointerPosition()})}_cacheItemPositions(){const o="horizontal"===this.orientation;this._itemPositions=this._activeDraggables.map(e=>{const n=e.getVisibleElement();return{drag:e,offset:0,initialTransform:n.style.transform||"",clientRect:me(n)}}).sort((e,n)=>o?e.clientRect.left-n.clientRect.left:e.clientRect.top-n.clientRect.top)}_getItemOffsetPx(o,e,n){const i="horizontal"===this.orientation;let s=i?e.left-o.left:e.top-o.top;return-1===n&&(s+=i?e.width-o.width:e.height-o.height),s}_getSiblingOffsetPx(o,e,n){const i="horizontal"===this.orientation,s=e[o].clientRect,a=e[o+-1*n];let l=s[i?"width":"height"]*n;if(a){const c=i?"left":"top",d=i?"right":"bottom";-1===n?l-=a.clientRect[c]-s[d]:l+=s[c]-a.clientRect[d]}return l}_shouldEnterAsFirstChild(o,e){if(!this._activeDraggables.length)return!1;const n=this._itemPositions,i="horizontal"===this.orientation;if(n[0].drag!==this._activeDraggables[0]){const a=n[n.length-1].clientRect;return i?o>=a.right:e>=a.bottom}{const a=n[0].clientRect;return i?o<=a.left:e<=a.top}}_getItemIndexFromPointerPosition(o,e,n,i){const s="horizontal"===this.orientation,a=this._itemPositions.findIndex(({drag:l,clientRect:c})=>{if(l===o)return!1;if(i){const d=s?i.x:i.y;if(l===this._previousSwap.drag&&this._previousSwap.overlaps&&d===this._previousSwap.delta)return!1}return s?e>=Math.floor(c.left)&&e<Math.floor(c.right):n>=Math.floor(c.top)&&n<Math.floor(c.bottom)});return-1!==a&&this._sortPredicate(a,o)?a:-1}}class hn{constructor(o,e,n,i,s){this._dragDropRegistry=e,this._ngZone=i,this._viewportRuler
1=s,this.disabled=!1,this.sortingDisabled=!1,this.autoScrollDisabled=!1,this.autoScrollStep=2,this.enterPredicate=()=>!0,this.sortPredicate=()=>!0,this.beforeStarted=new M.x,this.entered=new M.x,this.exited=new M.x,this.dropped=new M.x,this.sorted=new M.x,this._isDragging=!1,this._draggables=[],this._siblings=[],this._activeSiblings=new Set,this._viewportScrollSubscription=$.w0.EMPTY,this._verticalScrollDirection=0,this._horizontalScrollDirection=0,this._stopScrollTimers=new M.x,this._cachedShadowRoot=null,this._startScrollInterval=()=>{this._stopScrolling(),(0,tn.F)(0,nn.Z).pipe((0,X.R)(this._stopScrollTimers)).subscribe(()=>{const a=this._scrollNode,l=this.autoScrollStep;1===this._verticalScrollDirection?a.scrollBy(0,-l):2===this._verticalScrollDirection&&a.scrollBy(0,l),1===this._horizontalScrollDirection?a.scrollBy(-l,0):2===this._horizontalScrollDirection&&a.scrollBy(l,0)})},this.element=(0,O.fI)(o),this._document=n,this.withScrollableParents([this.element]),e.registerDropContainer(this),this._parentPositions=new Je(n),this._sortStrategy=new dn(this.element,e),this._sortStrategy.withSortPredicate((a,l)=>this.sortPredicate(a,l,this))}dispose(){this._stopScrolling(),this._stopScrollTimers.complete(),this._viewportScrollSubscription.unsubscribe(),this.beforeStarted.complete(),this.entered.complete(),this.exited.complete(),this.dropped.complete(),this.sorted.complete(),this._activeSiblings.clear(),this._scrollNode=null,this._parentPositions.clear(),this._dragDropRegistry.removeDropContainer(this)}isDragging(){return this._isDragging}start(){this._draggingStarted(),this._notifyReceivingSiblings()}enter(o,e,n,i){this._draggingStarted(),null==i&&this.sortingDisabled&&(i=this._draggables.indexOf(o)),this._sortStrategy.enter(o,e,n,i),this._cacheParentPositions(),this._notifyReceivingSiblings(),this.entered.next({item:o,container:this,currentIndex:this.getItemIndex(o)})}exit(o){this._reset(),this.exited.next({item:o,container:this})}drop(o,e,n,i,s,a,l,c={}){this._reset(),this.dropped.next({item:o,currentIndex:e,previousIndex:n,container:this,previousContainer:i,isPointerOverContainer:s,distance:a,dropPoint:l,event:c})}withItems(o){const e=this._draggables;return this._draggables=o,o.forEach(n=>n._withDropContainer(this)),this.isDragging()&&(e.filter(i=>i.isDragging()).every(i=>-1===o.indexOf(i))?this._reset():this._sortStrategy.withItems(this._draggables)),this}withDirection(o){return this._sortStrategy.direction=o,this}connectedTo(o){return this._siblings=o.slice(),this}withOrientation(o){return this._sortStrategy.orientation=o,this}withScrollableParents(o){const e=(0,O.fI)(this.element);return this._scrollableElements=-1===o.indexOf(e)?[e,...o]:o.slice(),this}getScrollableParents(){return this._scrollableElements}getItemIndex(o){return this._isDragging?this._sortStrategy.getItemIndex(o):this._draggables.indexOf(o)}isReceiving(){return this._activeSiblings.size>0}_sortItem(o,e,n,i){if(this.sortingDisabled||!this._clientRect||!Ue(this._clientRect,.05,e,n))return;const s=this._sortStrategy.sort(o,e,n,i);s&&this.sorted.next({previousIndex:s.previousIndex,currentIndex:s.currentIndex,container:this,item:o})}_startScrollingIfNecessary(o,e){if(this.autoScrollDisabled)return;let n,i=0,s=0;if(this._parentPositions.positions.forEach((a,l)=>
1{l===this._document||!a.clientRect||n||Ue(a.clientRect,.05,o,e)&&([i,s]=function pn(r,o,e,n){const i=et(o,n),s=tt(o,e);let a=0,l=0;if(i){const c=r.scrollTop;1===i?c>0&&(a=1):r.scrollHeight-c>r.clientHeight&&(a=2)}if(s){const c=r.scrollLeft;1===s?c>0&&(l=1):r.scrollWidth-c>r.clientWidth&&(l=2)}return[a,l]}(l,a.clientRect,o,e),(i||s)&&(n=l))}),!i&&!s){const{width:a,height:l}=this._viewportRuler.getViewportSize(),c={width:a,height:l,top:0,right:a,bottom:l,left:0};i=et(c,e),s=tt(c,o),n=window}n&&(i!==this._verticalScrollDirection||s!==this._horizontalScrollDirection||n!==this._scrollNode)&&(this._verticalScrollDirection=i,this._horizontalScrollDirection=s,this._scrollNode=n,(i||s)&&n?this._ngZone.runOutsideAngular(this._startScrollInterval):this._stopScrolling())}_stopScrolling(){this._stopScrollTimers.next()}_draggingStarted(){const o=(0,O.fI)(this.element).style;this.beforeStarted.next(),this._isDragging=!0,this._initialScrollSnap=o.msScrollSnapType||o.scrollSnapType||"",o.scrollSnapType=o.msScrollSnapType="none",this._sortStrategy.start(this._draggables),this._cacheParentPositions(),this._viewportScrollSubscription.unsubscribe(),this._listenToScrollEvents()}_cacheParentPositions(){const o=(0,O.fI)(this.element);this._parentPositions.cache(this._scrollableElements),this._clientRect=this._parentPositions.positions.get(o).clientRect}_reset(){this._isDragging=!1;const o=(0,O.fI)(this.element).style;o.scrollSnapType=o.msScrollSnapType=this._initialScrollSnap,this._siblings.forEach(e=>e._stopReceiving(this)),this._sortStrategy.reset(),this._stopScrolling(),this._viewportScrollSubscription.unsubscribe(),this._parentPositions.clear()}_isOverContainer(o,e){return null!=this._clientRect&&_e(this._clientRect,o,e)}_getSiblingContainerFromPosition(o,e,n){return this._siblings.find(i=>i._canReceive(o,e,n))}_canReceive(o,e,n){if(!this._clientRect||!_e(this._clientRect,e,n)||!this.enterPredicate(o,this))return!1;const i=this._getShadowRoot().elementFromPoint(e,n);if(!i)return!1;const s=(0,O.fI)(this.element);return i===s||s.contains(i)}_startReceiving(o,e){const n=this._activeSiblings;!n.has(o)&&e.every(i=>this.enterPredicate(i,this)||this._draggables.indexOf(i)>-1)&&(n.add(o),this._cacheParentPositions(),this._listenToScrollEvents())}_stopReceiving(o){this._activeSiblings.delete(o),this._viewportScrollSubscription.unsubscribe()}_listenToScrollEvents(){this._viewportScrollSubscription=this._dragDropRegistry.scrolled(this._getShadowRoot()).subscribe(o=>{if(this.isDragging()){const e=this._parentPositions.handleScroll(o);e&&this._sortStrategy.updateOnScroll(e.top,e.left)}else this.isReceiving()&&this._cacheParentPositions()})}_getShadowRoot(){if(!this._cachedShadowRoot){const o=(0,L.kV)((0,O.fI)(this.element));this._cachedShadowRoot=o||this._document}return this._cachedShadowRoot}_notifyReceivingSiblings(){const o=this._sortStrategy.getActiveItemsSnapshot().filter(e=>e.isDragging());this._siblings.forEach(e=>e._startReceiving(this,o))}}function et(r,o){const{top:e,bottom:n,height:i}=r,s=.05*i;return o>=e-s&&o<=e+s?1:o>=n-s&&o<=n+s?2:0}function tt(r,o){const{left:e,right:n,width:i}=r,s=.05*i;return o>=e-s&&o<=e+s?1:o>=n-s&&o<=n+s?2:0}const ie=(0,L.i$)({passive:!1,capture:!0});let gn=(()=>{class r{constructor(e,n){this._ngZone=e,this._dropInstances=new Set,this._dragInstances=new Set,this._activeDragInstances=[],this._globalListeners=new Map,this._draggingPredicate=i=>i.isDragging(),this.pointerMove=new M.x,this.pointerUp=new M.x,this.scroll=new M.x,this._preventDefaultWhileDragging=i=>{this._activeDragInstances.length>0&&i.preventDefault()},this._persistentTouchmoveListener=i=>{this._activeDragInstances.length>0&&(this._activeDragInstances.some(this._draggingPredicate)&&i.preventDefault(),this.pointerMove.next(i))},this._document=n}registerDropContainer(e){this._dropInstances.has(e)||this._dropInstances.add(e)}registerDragItem(e){this._dragInstances.add(e),1===this._dragInstances.size&&this._ngZone.runOutsideAngular(()=>{this._document.addEventListener("touchmove",this._persistentTouchmoveListener,ie)})}removeDropContainer(e){this._dropInstances.delete(e)}removeDragItem(e){this._dragInstances.delete(e),this.stopDragging(e),0===this._dragInstances.size&&this._document.removeEventListener("touchmove",this._persistentTouchmoveListener,ie)}startDragging(e,n){if(!(this._activeDragInstances.indexOf(e)>-1)&&(this._activeDragInstances.push(e),1===this._activeDragInstances.length)){const i=n.type.startsWith("touch");
1this._globalListeners.set(i?"touchend":"mouseup",{handler:s=>this.pointerUp.next(s),options:!0}).set("scroll",{handler:s=>this.scroll.next(s),options:!0}).set("selectstart",{handler:this._preventDefaultWhileDragging,options:ie}),i||this._globalListeners.set("mousemove",{handler:s=>this.pointerMove.next(s),options:ie}),this._ngZone.runOutsideAngular(()=>{this._globalListeners.forEach((s,a)=>{this._document.addEventListener(a,s.handler,s.options)})})}}stopDragging(e){const n=this._activeDragInstances.indexOf(e);n>-1&&(this._activeDragInstances.splice(n,1),0===this._activeDragInstances.length&&this._clearGlobalListeners())}isDragging(e){return this._activeDragInstances.indexOf(e)>-1}scrolled(e){const n=[this.scroll];return e&&e!==this._document&&n.push(new ce.y(i=>this._ngZone.runOutsideAngular(()=>{const a=l=>{this._activeDragInstances.length&&i.next(l)};return e.addEventListener("scroll",a,!0),()=>{e.removeEventListener("scroll",a,!0)}}))),(0,Ze.T)(...n)}ngOnDestroy(){this._dragInstances.forEach(e=>this.removeDragItem(e)),this._dropInstances.forEach(e=>this.removeDropContainer(e)),this._clearGlobalListeners(),this.pointerMove.complete(),this.pointerUp.complete()}_clearGlobalListeners(){this._globalListeners.forEach((e,n)=>{this._document.removeEventListener(n,e.handler,e.options)}),this._globalListeners.clear()}}return r.\u0275fac=function(e){return new(e||r)(t.LFG(t.R0b),t.LFG(w.K0))},r.\u0275prov=t.Yz7({token:r,factory:r.\u0275fac,providedIn:"root"}),r})();const un={dragStartThreshold:5,pointerDirectionChangeThreshold:5};let be=(()=>{class r{constructor(e,n,i,s){this._document=e,this._ngZone=n,this._viewportRuler=i,this._dragDropRegistry=s}createDrag(e,n=un){return new cn(e,n,this._document,this._ngZone,this._viewportRuler,this._dragDropRegistry)}createDropList(e){return new hn(e,this._dragDropRegistry,this._document,this._ngZone,this._viewportRuler)}}return r.\u0275fac=function(e){return new(e||r)(t.LFG(w.K0),t.LFG(t.R0b),t.LFG(he.rL),t.LFG(gn))},r.\u0275prov=t.Yz7({token:r,factory:r.\u0275fac,providedIn:"root"}),r})();const nt=new t.OlP("CDK_DRAG_PARENT"),it=new t.OlP("CdkDropListGroup"),ot=new t.OlP("CDK_DRAG_CONFIG");let mn=0;const rt=new t.OlP("CdkDropList");let _n=(()=>{class r{constructor(e,n,i,s,a,l,c){this.element=e,this._changeDetectorRef=i,this._scrollDispatcher=s,this._dir=a,this._group=l,this._destroyed=new M.x,this.connectedTo=[],this.id="cdk-drop-list-"+mn++,this.enterPredicate=()=>!0,this.sortPredicate=()=>!0,this.dropped=new t.vpe,this.entered=new t.vpe,this.exited=new t.vpe,this.sorted=new t.vpe,this._unsortedItems=new Set,this._dropListRef=n.createDropList(e),this._dropListRef.data=this,c&&this._assignDefaults(c),this._dropListRef.enterPredicate=(d,_)=>this.enterPredicate(d.data,_.data),this._dropListRef.sortPredicate=(d,_,b)=>this.sortPredicate(d,_.data,b.data),this._setupInputSyncSubscription(this._dropListRef),this._handleEvents(this._dropListRef),r._dropLists.push(this),l&&l._items.add(this)}get disabled(){return this._disabled||!!this._group&&this._group.disabled}set disabled(e){this._dropListRef.disabled=this._disabled=(0,O.Ig)(e)}addItem(e){this._unsortedItems.add(e),this._dropListRef.isDragging()&&this._syncItemsWithRef()}removeItem(e){this._unsortedItems.delete(e),this._dropListRef.isDragging()&&this._syncItemsWithRef()}getSortedItems(){return Array.from(this._unsortedItems).sort((e,n)=>e._dragRef.getVisibleElement().compareDocumentPosition(n._dragRef.getVisibleElement())&Node.DOCUMENT_POSITION_FOLLOWING?-1:1)}ngOnDestroy(){const e=r._dropLists.indexOf(this);e>-1&&r._dropLists.splice(e,1),this._group&&this._group._items.delete(this),this._unsortedItems.clear(),this._dropListRef.dispose(),this._destroyed.next(),this._destroyed.complete()}_setupInputSyncSubscription(e){this._dir&&this._dir.change.pipe((0,pe.O)(this._dir.value),(0,X.R)(this._destroyed)).subscribe(n=>e.withDirection(n)),e.beforeStarted.subscribe(()=>{const n=(0,O.Eq)(this.connectedTo).map(i=>"string"==typeof i?r._dropLists.find(a=>a.id===i):i);if(this._group&&this._group._items.forEach(i=>{-1===n.indexOf(i)&&n.push(i)}),!this._scrollableParentsResolved){const i=this._scrollDispatcher.getAncestorScrollContainers(this.element).map(s=>s.getElementRef().nativeElement);this._dropListRef.withScrollableParents(i),this._scrollableParentsResolved=!0}e.disabled=this.disabled,e.lockAxis=this.lockAxis,e.sortingDisabled=(0,O.Ig)(this.sortingDisabled),e.autoScrollDisabled=(0,O.Ig)(this.autoScrollDisabled),e.autoScrollStep=(0,O.su)(this.autoScrollStep,2),e.connectedTo(n.filter(i=>i&&i!==this).map(i=>i._dropListRef)).withOrientation(this.orientation)})}_handleEvents(e){e.beforeStarted.subscribe(()=>{this._syncItemsWithRef(),this._changeDetectorRef.markForCheck()}),e.entered.subscribe(n=>{this.entered.emit({container:this,item:n.item.data,currentIndex:n.currentIndex})}),e.exited.subscribe(n=>{this.exited.emit({container:this,item:n.item.data}),this._changeDetectorRef.markForCheck()}),e.sorted.subscribe(n=>{this.sorted.emit({previousIndex:n.previousIndex,currentIndex:n.currentIndex,container:this,item:n.item.data})}),e.dropped.subscribe(n=>{this.dropped.emit({previousIndex:n.previousIndex,currentIndex:n.currentIndex,previousContainer:n.previousContainer.data,container:n.container.data,item:n.item.data,isPointerOverContainer:n.isPointerOverContainer,distance:n.distance,dropPoint:n.dropPoint,event:n.event}),this._changeDetectorRef.markForCheck()})}_assignDefaults(e){const{lockAxis:n,draggingDisabled:i,sortingDisabled:s,listAutoScrollDisabled:a,listOrientation:l}=e;this.disabled=i??!1,this.sortingDisabled=s??!1,this.autoScrollDisabled=a??!1,this.orientation=l||"vertical",n&&(this.lockAxis=n)}_syncItemsWithRef(){this._dropListRef.withItems(this.getSortedItems().map(e=>e._dragRef))}}return r._dropLists=[],r.\u0275fac=function(e){return new(e||r)(t.Y36(t.SBq),t.Y36(be),t.Y36(t.sBO),t.Y36(he.mF),t.Y36(Ae.Is,8),t.Y36(it,12),t.Y36(ot,8))},r.\u0275dir=t.lG2({type:r,selectors:[["","cdkDropList",""],["cdk-drop-list"]],hostAttrs:[1,"cdk-drop-list"],hostVars:7,hostBindings:function(e,n){2&e&&(t.uIk("id",n.id),t.ekj("cdk-drop-list-disabled",n.disabled)("cdk-drop-list-dragging",n._dropListRef.isDragging())("cdk-drop-list-receiving",n._dropListRef.isReceiving()))},inputs:{connectedTo:["cdkDropListConnectedTo","connectedTo"],data:["cdkDropListData","data"],orientation:["cdkDropListOrientation","orientation"],id:"id",lockAxis:["cdkDropListLockAxis","lockAxis"],disabled:["cdkDropListDisabled","disabled"],sortingDisabled:["cdkDropListSortingDisabled","sortingDisabled"],enterPredicate:["cdkDropListEnterPredicate","enterPredicate"],sortPredicate:["cdkDropListSortPredicate","sortPredicate"],autoScrollDisabled:["cdkDropListAutoScrollDisabled","autoScrollDisabled"],autoScrollStep:["cdkDropListAutoScrollStep","autoScrollStep"]},outputs:{dropped:"cdkDropListDropped",entered:"cdkDropListEntered",exited:"cdkDropListExited",sorted:"cdkDropListSorted"},exportAs:["cdkDropList"],features:[t._Bn([{provide:it,useValue:void 0},{provide:rt,useExisting:r}])]}),r})();const st=new t.OlP("CdkDragHandle"),fn=new t.OlP("CdkDragPlaceholder"),bn=new t.OlP("CdkDragPreview");let vn=(()=>
1{class r{constructor(e,n,i,s,a,l,c,d,_,b,m){this.element=e,this.dropContainer=n,this._ngZone=s,this._viewContainerRef=a,this._dir=c,this._changeDetectorRef=_,this._selfHandle=b,this._parentDrag=m,this._destroyed=new M.x,this.started=new t.vpe,this.released=new t.vpe,this.ended=new t.vpe,this.entered=new t.vpe,this.exited=new t.vpe,this.dropped=new t.vpe,this.moved=new ce.y(g=>{const u=this._dragRef.moved.pipe((0,Ve.U)(T=>({source:this,pointerPosition:T.pointerPosition,event:T.event,delta:T.delta,distance:T.distance}))).subscribe(g);return()=>{u.unsubscribe()}}),this._dragRef=d.createDrag(e,{dragStartThreshold:l&&null!=l.dragStartThreshold?l.dragStartThreshold:5,pointerDirectionChangeThreshold:l&&null!=l.pointerDirectionChangeThreshold?l.pointerDirectionChangeThreshold:5,zIndex:l?.zIndex}),this._dragRef.data=this,r._dragInstances.push(this),l&&this._assignDefaults(l),n&&(this._dragRef._withDropContainer(n._dropListRef),n.addItem(this)),this._syncInputs(this._dragRef),this._handleEvents(this._dragRef)}get disabled(){return this._disabled||this.dropContainer&&this.dropContainer.disabled}set disabled(e){this._disabled=(0,O.Ig)(e),this._dragRef.disabled=this._disabled}getPlaceholderElement(){return this._dragRef.getPlaceholderElement()}getRootElement(){return this._dragRef.getRootElement()}reset(){this._dragRef.reset()}getFreeDragPosition(){return this._dragRef.getFreeDragPosition()}setFreeDragPosition(e){this._dragRef.setFreeDragPosition(e)}ngAfterViewInit(){this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.pipe((0,de.q)(1),(0,X.R)(this._destroyed)).subscribe(()=>{this._updateRootElement(),this._setupHandlesListener(),this.freeDragPosition&&this._dragRef.setFreeDragPosition(this.freeDragPosition)})})}ngOnChanges(e){const n=e.rootElementSelector,i=e.freeDragPosition;n&&!n.firstChange&&this._updateRootElement(),i&&!i.firstChange&&this.freeDragPosition&&this._dragRef.setFreeDragPosition(this.freeDragPosition)}ngOnDestroy(){this.dropContainer&&this.dropContainer.removeItem(this);const e=r._dragInstances.indexOf(this);e>-1&&r._dragInstances.splice(e,1),this._ngZone.runOutsideAngular(()=>{this._destroyed.next(),this._destroyed.complete(),this._dragRef.dispose()})}_updateRootElement(){const e=this.element.nativeElement;let n=e;this.rootElementSelector&&(n=void 0!==e.closest?e.closest(this.rootElementSelector):e.parentElement?.closest(this.rootElementSelector)),this._dragRef.withRootElement(n||e)}_getBoundaryElement(){const e=this.boundaryElement;return e?"string"==typeof e?this.element.nativeElement.closest(e):(0,O.fI)(e):null}_syncInputs(e){e.beforeStarted.subscribe(()=>{if(!e.isDragging()){const n=this._dir,i=this.dragStartDelay,s=this._placeholderTemplate?{template:this._placeholderTemplate.templateRef,context:this._placeholderTemplate.data,viewContainer:this._viewContainerRef}:null,a=this._previewTemplate?{template:this._previewTemplate.templateRef,context:this._previewTemplate.data,matchSize:this._previewTemplate.matchSize,viewContainer:this._viewContainerRef}:null;e.disabled=this.disabled,e.lockAxis=this.lockAxis,e.dragStartDelay="object"==typeof i&&i?i:(0,O.su)(i),e.constrainPosition=this.constrainPosition,e.previewClass=this.previewClass,e.withBoundaryElement(this._getBoundaryElement()).withPlaceholderTemplate(s).withPreviewTemplate(a).withPreviewContainer(this.previewContainer||"global"),n&&e.withDirection(n.value)}}),e.beforeStarted.pipe((0,de.q)(1)).subscribe(()=>{if(this._parentDrag)return void e.withParent(this._parentDrag._dragRef);let n=this.element.nativeElement.parentElement;for(;n;){if(n.classList.contains("cdk-drag")){e.withParent(r._dragInstances.find(i=>i.element.nativeElement===n)?._dragRef||null);break}n=n.parentElement}})}_handleEvents(e){e.started.subscribe(n=>{this.started.emit({source:this,event:n.event}),this._changeDetectorRef.markForCheck()}),e.released.subscribe(n=>{this.released.emit({source:this,event:n.event})}),e.ended.subscribe(n=>{this.ended.emit({source:this,distance:n.distance,dropPoint:n.dropPoint,event:n.event}),this._changeDetectorRef.markForCheck()}),e.entered.subscribe(n=>{this.entered.emit({container:n.container.data,item:this,currentIndex:n.currentIndex})}),e.exited.subscribe(n=>{this.exited.emit({container:n.container.data,item:this})}),e.dropped.subscribe(n=>{this.dropped.emit({previousIndex:n.previousIndex,currentIndex:n.currentIndex,previousContainer:n.previousContainer.data,container:n.container.data,isPointerOverContainer:n.isPointerOverContainer,item:this,distance:n.distance,dropPoint:n.dropPoint,event:n.event})})}_assignDefaults(e){const{lockAxis:n,dragStartDelay:i,constrainPosition:s,previewClass:a,boundaryElement:l,draggingDisabled:c,rootElementSelector:d,previewContainer:_}=e;this.disabled=c??!1,this.dragStartDelay=i||0,n&&(this.lockAxis=n),s&&(this.constrainPosition=s),a&&(this.previewClass=a),l&&(this.boundaryElement=l),d&&(this.rootElementSelector=d),_&&(this.previewContainer=_)}_setupHandlesListener(){this._handles.changes.pipe((0,pe.O)(this._handles),(0,on.b)(e=>{const n=e.filter(i=>i._parentDrag===this).map(i=>i.element);this._selfHandle&&this.rootElementSelector&&n.push(this.element),this._dragRef.withHandles(n)}),(0,rn.w)(e=>(0,Ze.T)(...e.map(n=>
1n._stateChanges.pipe((0,pe.O)(n))))),(0,X.R)(this._destroyed)).subscribe(e=>{const n=this._dragRef,i=e.element.nativeElement;e.disabled?n.disableHandle(i):n.enableHandle(i)})}}return r._dragInstances=[],r.\u0275fac=function(e){return new(e||r)(t.Y36(t.SBq),t.Y36(rt,12),t.Y36(w.K0),t.Y36(t.R0b),t.Y36(t.s_b),t.Y36(ot,8),t.Y36(Ae.Is,8),t.Y36(be),t.Y36(t.sBO),t.Y36(st,10),t.Y36(nt,12))},r.\u0275dir=t.lG2({type:r,selectors:[["","cdkDrag",""]],contentQueries:function(e,n,i){if(1&e&&(t.Suo(i,bn,5),t.Suo(i,fn,5),t.Suo(i,st,5)),2&e){let s;t.iGM(s=t.CRH())&&(n._previewTemplate=s.first),t.iGM(s=t.CRH())&&(n._placeholderTemplate=s.first),t.iGM(s=t.CRH())&&(n._handles=s)}},hostAttrs:[1,"cdk-drag"],hostVars:4,hostBindings:function(e,n){2&e&&t.ekj("cdk-drag-disabled",n.disabled)("cdk-drag-dragging",n._dragRef.isDragging())},inputs:{data:["cdkDragData","data"],lockAxis:["cdkDragLockAxis","lockAxis"],rootElementSelector:["cdkDragRootElement","rootElementSelector"],boundaryElement:["cdkDragBoundary","boundaryElement"],dragStartDelay:["cdkDragStartDelay","dragStartDelay"],freeDragPosition:["cdkDragFreeDragPosition","freeDragPosition"],disabled:["cdkDragDisabled","disabled"],constrainPosition:["cdkDragConstrainPosition","constrainPosition"],previewClass:["cdkDragPreviewClass","previewClass"],previewContainer:["cdkDragPreviewContainer","previewContainer"]},outputs:{started:"cdkDragStarted",released:"cdkDragReleased",ended:"cdkDragEnded",entered:"cdkDragEntered",exited:"cdkDragExited",dropped:"cdkDragDropped",moved:"cdkDragMoved"},exportAs:["cdkDrag"],features:[t._Bn([{provide:nt,useExisting:r}]),t.TTD]}),r})(),Pn=(()=>{class r{}return r.\u0275fac=function(e){return new(e||r)},r.\u0275mod=t.oAB({type:r}),r.\u0275inj=t.cJS({providers:[be],imports:[he.ZD]}),r})();var xn=h(42851);const wn=function(r,o){return{dirty:r,busy:o}};function kn(r,o){if(1&r&&t._UZ(0,"div",11),2&r){const e=t.oxw();t.Q6J("ngClass",t.WLB(1,wn,e.dirty,e.busy))}}function Mn(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div",12)(1,"button",13),t.NdJ("click",function(){t.CHM(e);const i=t.oxw();return t.KtG(i.saveVisibility())}),t._uU(2,"Save Configuration"),t.qZA()()}if(2&r){const e=t.oxw();
1t.xp6(1),t.Q6J("disabled",!e.canEdit)}}function On(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div")(1,"select",14),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw();return t.KtG(s.updateColor(i))}),t.TgZ(2,"option",15),t._uU(3,"All brain structures with color"),t.qZA(),t.TgZ(4,"option",15),t._uU(5,"All brain structures uniform"),t.qZA()(),t.TgZ(6,"div")(7,"label",16),t._uU(8,"Opacity"),t.qZA(),t.TgZ(9,"div",17)(10,"input",18),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw();return t.KtG(s.opacity=i)})("ngModelChange",function(i){t.CHM(e);const s=t.oxw();return t.KtG(s.setVolumeAlpha(i))}),t.qZA(),t.TgZ(11,"span",19),t._uU(12),t.ALo(13,"percent"),t.qZA()()(),t.TgZ(14,"div")(15,"input",20),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw();return t.KtG(s.smoothVolumes=i)})("ngModelChange",function(){t.CHM(e);const i=t.oxw();return t.KtG(i.dirty=!0)}),t.qZA(),t.TgZ(16,"label",21),t._uU(17,"Smooth Volumes (change applied after reload)"),t.qZA()()()}if(2&r){const e=t.oxw();t.xp6(1),t.Q6J("ngModel",e.colorMode),t.xp6(1),t.Q6J("value",1),t.xp6(2),t.Q6J("value",0),t.xp6(6),t.Q6J("ngModel",e.opacity),t.xp6(2),t.Oqu(t.lcZ(13,6,e.opacity)),t.xp6(3),t.Q6J("ngModel",e.smoothVolumes)}}function yn(r,o){1&r&&(t.TgZ(0,"span",9),t._uU(1,"expand_more"),t.qZA())}function Dn(r,o){1&r&&(t.TgZ(0,"span",9),t._uU(1,"chevron_left"),t.qZA())}function Sn(r,o){if(1&r&&(t.TgZ(0,"span",24),t._uU(1),t.qZA()),2&r){const e=t.oxw().ngIf;t.xp6(1),t.hij("Loading ",e,"%")}}function Tn(r,o){1&r&&(t.TgZ(0,"span",25)(1,"span",26),t._uU(2,"error"),t.qZA(),t._uU(3," Error"),t.qZA())}function En(r,o){if(1&r&&(t.TgZ(0,"div"),t.YNc(1,Sn,2,1,"span",22),t.YNc(2,Tn,4,0,"span",23),t.qZA()),2&r){const e=o.ngIf;t.xp6(1),t.Q6J("ngIf",e>-1),t.xp6(1),t.Q6J("ngIf",-1===e)}}function In(r,o){1&r&&(t.TgZ(0,"span",9),t._uU(1,"visibility"),t.qZA())}function Vn(r,o){1&r&&(t.TgZ(0,"span",9),t._uU(1,"visibility_off"),t.qZA())}function Rn(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div",30)(1,"button",31),t.NdJ("click",function(){const s=t.CHM(e).$implicit,a=t.oxw(2);return t.KtG(a.toggleVisibility(s))}),t.YNc(2,In,2,0,"span",8),t.YNc(3,Vn,2,0,"span",8),t.qZA(),t.TgZ(4,"input",32),t.NdJ("colorPickerChange",function(i){const a=t.CHM(e).$implicit;return t.KtG(a.color=i)})("colorPickerChange",function(i){const a=t.CHM(e).$implicit,l=t.oxw(2);return t.KtG(l.updateNeuropilColor(i,a))})("colorPickerOpen",function(){const s=t.CHM(e).$implicit,a=t.oxw(2);return t.KtG(a.colorPickerOpen(s))})("colorPickerClose",function(i){const a=t.CHM(e).$implicit,l=t.oxw(2);return t.KtG(l.colorPickerClose(i,a))}),t.qZA(),t.TgZ(5,"span"),t._uU(6),t.qZA()()}if(2&r){const e=o.$implicit;t.xp6(2),t.Q6J("ngIf",e.visible),t.xp6(1),t.Q6J("ngIf",!e.visible),t.xp6(1),t.Udp("background",e.color),t.Q6J("colorPicker",e.color)("cpPosition","auto")("cpDialogDisplay","popup")("cpOutputFormat","hex")("cpOKButton",!0)("cpUseRootViewContainer",!1),t.xp6(2),t.Oqu(e.name)}}function Nn(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div",27)(1,"div",28),t.NdJ("cdkDropListDropped",function(i){t.CHM(e);const s=t.oxw();return t.KtG(s.drop(i))}),t.YNc(2,Rn,7,11,"div",29),t.qZA()()}if(2&r){const e=t.oxw();t.Udp("padding-bottom",e.colorPickerVisible?"300px":"0"),t.xp6(2),t.Q6J("ngForOf",e.volumes)}}let Ln=(()=>{class r{constructor(e,n){this.skeletonViewerService=e,this.experimentDataService=n,this.volumes=[],this.settingsVisible=!1,this.listVisible=!1,this.canEdit=!1,this.dirty=!1,this.busy=!1,this.colorMode=0,this.opacity=.25,this.smoothVolumes=!0,this.colorPickerVisible=!1,this.subs=[],this.subs.push(this.skeletonViewerService.neuropils$.subscribe(i=>this.volumes=i)),this.loadStatus$=this.skeletonViewerService.volumeLoadStatus$,this.subs.push(this.skeletonViewerService.canEdit$.subscribe(i=>this.canEdit=i)),this.subs.push(this.skeletonViewerService.configuration$.subscribe(i=>{i&&(this.config=i,this.colorMode=i.json?.view?.colorMode||this.colorMode,this.opacity=i.json?.view?.opacity||this.opacity,this.smoothVolumes=i.json?.view?.smoothVolumes||this.smoothVolumes)}))}ngOnDestroy(){this.subs.forEach(e=>e.unsubscribe())}toggleVisibility(e){this.dirty=!0,e.mesh.visible=!e.mesh.visible,e.visible=e.mesh.visible,this.threeViewer.render()}saveVisibility(){var e=this;return(0,x.Z)(function*(){e.busy=!0;const n=e.volumes.map((i,s)=>new xe(i.id,i.uuid,i.name,i.color,i.annotations,s,i.visible));try{const i=yield(0,k.n)(e.experimentDataService.get(e.config.id)),s=i.json.view?i.json.view:new Y;s.colorMode=e.colorMode,s.opacity=e.opacity,s.smoothVolumes=e.smoothVolumes;const a=yield(0,k.n)(e.experimentDataService.update(e.config.id,{json:{neuropils:n,view:s}}));e.skeletonViewerService.updateConfiguration(a),e.dirty=!1}catch(i){console.error(i)}finally{e.busy=!1}})()}updateNeuropilColor(e,n){this.dirty=!0,n.color=e,n.mesh.userData.color=e,this.updateMaterial(n.mesh,e,this.colorMode,this.opacity),this.threeViewer.render()}updateColor(e){this.dirty=!0,this.colorMode=+e,this.volumes.forEac
1h(n=>{this.updateMaterial(n.mesh,n.mesh.userData.color,+e,null)}),this.threeViewer.render()}updateMaterial(e,n,i,s){e instanceof C.Kj0?(n&&(e.material.color=0===i?new C.Ilk(.8,.8,.8):(new C.Ilk).setStyle(n)),s&&(e.material.opacity=s,e.material.transparent=s<1,e.material.blending=C.Xaj,1===s&&(e.material.blending=C.bdR))):e.children.length&&e.children.forEach(a=>this.updateMaterial(a,n,i,s))}drop(e){this.dirty=!0,Ke(this.volumes,e.previousIndex,e.currentIndex)}setVolumeAlpha(e){this.dirty=!0;for(let n of this.volumes)n.mesh.userData.alpha=e,this.updateMaterial(n.mesh,null,this.colorMode,e);this.threeViewer.render()}colorPickerOpen(e){this.colorPickerVisible=!0,0===this.colorMode&&(this.settingsVisible=!0,this.updateColor(1))}colorPickerClose(e,n){this.colorPickerVisible=!1,this.updateNeuropilColor(e,n)}}return r.\u0275fac=function(e){return new(e||r)(t.Y36(N),t.Y36(D))},r.\u0275cmp=t.Xpm({type:r,selectors:[["app-catmaid-neuropil-list"]],inputs:{threeViewer:"threeViewer",experiment:"experiment"},decls:20,vars:12,consts:[[1,"settings-container",3,"hidden"],[2,"margin-bottom","2em"],["id","config-status",3,"ngClass",4,"ngIf"],["class","form-group",4,"ngIf"],[4,"ngIf"],[1,"header-setting-container"],[2,"display","flex","align-items","center"],[1,"btn-link",3,"disabled","click"],["class","material-icons",4,"ngIf"],[1,"material-icons"],["id","neuropil-list",3,"padding-bottom",4,"ngIf"],["id","config-status",3,"ngClass"],[1,"form-group"],[1,"button",3,"disabled","click"],[3,"ngModel","ngModelChange"],[3,"value"],["for","brain-alpha"],[1,"slider-container"],["id","brain-alpha","type","range","min","0","max","1","step","0.05",2,"width","100%",3,"ngModel","ngModelChange"],[2,"width","3em","text-align","right"],["type","checkbox","id","volume-smoothing",3,"ngModel","ngModelChange"],["for","volume-smoothing"],["style","margin-left: 1.5em",4,"ngIf"],["class","error","style","display: inline-flex; align-items: center; margin-left: 1em",4,"ngIf"],[2,"margin-left","1.5em"],[1,"error",2,"display","inline-flex","align-items","center","margin-left","1em"],[1,"material-icons",2,"margin-right",".25em"],["id","neuropil-list"],["cdkDropList","",3,"cdkDropListDropped"],["cdkDrag","","style","cursor: pointer;",4,"ngFor","ngForOf"],["cdkDrag","",2,"cursor","pointer"],[1,"btn-link","visibility-icon",3,"click"],["type","button",1,"color-input",3,"colorPicker","cpPosition","cpDialogDisplay","cpOutputFormat","cpOKButton","cpUseRootViewContainer","colorPickerChange","colorPickerOpen","colorPickerClose"]],template:function(e,n){1&e&&(t.TgZ(0,"div")(1,"div",0)(2,"h4",1),t._uU(3,"Brain Structure Settings "),t.YNc(4,kn,1,4,"div",2),t.qZA(),t.YNc(5,Mn,3,1,"div",3),t.YNc(6,On,18,8,"div",4),t.qZA(),t.TgZ(7,"div",5)(8,"div",6)(9,"button",7),t.NdJ("click",function(){return n.listVisible=!n.listVisible}),t.TgZ(10,"h4"),t._uU(11,"Brain structures"),t.qZA(),t.YNc(12,yn,2,0,"span",8),t.YNc(13,Dn,2,0,"span",8),t.qZA(),t.YNc(14,En,3,2,"div",4),t.ALo(15,"async"),t.qZA(),t.TgZ(16,"button",7),t.NdJ("click",function(){return n.settingsVisible=!n.settingsVisible}),t.TgZ(17,"span",9),t._uU(18,"settings"),t.qZA()()(),t.YNc(19,Nn,3,3,"div",10),t.qZA()),2&e&&(t.xp6(1),t.Q6J("hidden",!n.settingsVisible),t.xp6(3),t.Q6J("ngIf",n.canEdit),t.xp6(1),t.Q6J("ngIf",n.canEdit&&n.dirty),t.xp6(1),t.Q6J("ngIf",null==n.volumes?null:n.volumes.length),t.xp6(3),t.Q6J("disabled",!(null!=n.volumes&&n.volumes.length)),t.xp6(3),t.Q6J("ngIf",n.listVisible),t.xp6(1),t.Q6J("ngIf",!n.listVisible),t.xp6(1),t.Q6J("ngIf",t.lcZ(15,10,n.loadStatus$)),t.xp6(2),t.Q6J("disabled",!(null!=n.volumes&&n.volumes.length)),t.xp6(3),t.Q6J("ngIf",n.listVisible))},dependencies:[w.mk,w.sg,w.O5,P.YN,P.Kr,P.Fj,P.eT,P.Wl,P.EJ,P.JJ,P.On,xn.Kk,_n,vn,w.Ov,w.Zx],styles:["input[type=range][_ngcontent-%COMP%]{appearance:none;-webkit-appearance:none;-moz-appearance:none;background:transparent}input[type=range][_ngcontent-%COMP%]::-webkit-slider-runnable-track{width:300px;height:2px;background:#ddd;border:none;border-radius:1px}input[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:12px;width:12px;border-radius:12px;background:rgb(245,245,245);margin-top:-5px}input[type=range][_ngcontent-%COMP%]:focus{outline:none}input[type=range][_ngcontent-%COMP%]:focus::-webkit-slider-runnable-track{background:#ccc}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-webkit-slider-runnable-track{background:rgb(90,90,90)}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb{background:rgb(90,90,90)}input[type=range][_ngcontent-%COMP%]::-moz-range-track{height:2px;background:#ddd;border:none;border-radius:1px}input[type=range][_ngcontent-%COMP%]::-moz-range-thumb{-moz-appearance:none;border:none;height:12px;width:12px;border-radius:12px;background:rgb(245,245,245);cursor:pointer}","[_ngcontent-%COMP%]::-webkit-scrollbar-track{border-radius:5px;background:rgba(240,240,240,.1)}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{border-radius:5px;background:rgba(240,240,240,.2);border-color:transparent}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:rgba(240,240,240,.4)}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:window-inactive{background:rgba(240,240,240,.05)}[_ngcontent-%COMP%]::-webkit-scrollbar{width:9px}.scroller[_ngcontent-%COMP%]{scrollbar-color:rgb(160,160,160) rgb(90,90,90);scrollbar-width:thin}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-track{background:rgba(240,240,240,.1)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:rgba(240,240,240,.2)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:rgba(240,240,240,.4)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb:window-inactive{background:rgba(240,240,240,.05)}",".color-tile[_ngcontent-%COMP%]{width:1em;height:1em;display:inline-block;margin-right:.5em}.category-title[_ngcontent-%COMP%]{font-weight:700;margin-bottom:.35em;display:flex}.header-setting-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;flex-grow:1}ul[_ngcontent-%COMP%]{margin:0;margin-block:0;margin-block-start:0;margin-block-end:0;padding-inline-start:0}ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{text-align:left;padding-bottom:.2em}h4[_ngcontent-%COMP%]{text-transform:uppercase;margin:0}.btn-link[_ngcontent-%COMP%]{margin:0;color:#c8c8c8;display:inline-flex;align-items:center}.btn-link[_ngcontent-%COMP%]:hover{color:#fff}.button[_ngcontent-%COMP%]{color:inherit;background:transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:100%;pointer-events:auto;height:3em;margin:0 0 1em}.button[_ngcontent-%COMP%]:hover{background-color:#ffffff26}input[type=search][_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;border-radius:4px;padding:.5em .25em;outline:none;display:inline-block;pointer-events:auto;background:rgba(255,255,255,.15);margin:.5em 0 1em}select[_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;background:url(/assets/dropdown-arrow-light.svg) no-repeat right transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:100%;padding:2px 1em;outline:none;display:inline-block;pointer-events:auto;margin-bottom:1em}.visibility-icon[_ngcontent-%COMP%]{margin:0 .25em}#skeleton-diameter[_ngcontent-%COMP%], #skeleton-diameter-default[_ngcontent-%COMP%]{flex:1}.slider-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin:0 0 .5em}.header-setting-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between}.header-setting-container.settings-open[_ngcontent-%COMP%]{margin-bottom:1em}.header-setting-container.settings-open[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]{opacity:.5}.settings-container[_ngcontent-%COMP%]{margin-bottom:1em}#points-input-container[_ngcontent-%COMP%]{display:flex;align-content:center;margin-bottom:1em}#points-input-container[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{margin:0 .25em 0 0}hr[_ngcontent-%COMP%]{border-top-style:none;opacity:.25;margin:1em 0}#config-status[_ngcontent-%COMP%]{background-color:#258618;border-radius:.5em;width:.7em;height:.7em;display:inline-block;margin-left:.5rem}#config-status.dirty[_ngcontent-%COMP%]{background-color:#c70000}#config-status.busy[_ngcontent-%COMP%]{animation:blinker .25s linear infinite}@keyframes blinker{50%{opacity:0}
1}","[_nghost-%COMP%]{flex-grow:1}#neuropil-list[_ngcontent-%COMP%]{margin-top:1em}.color-input[_ngcontent-%COMP%]{border:none;height:1em;width:1em;padding:0;margin:0 1em 0 .75em;cursor:pointer}"]}),r})(),Zn=(()=>{class r{constructor(){}ngOnInit(){}}return r.\u0275fac=function(e){return new(e||r)},r.\u0275cmp=t.Xpm({type:r,selectors:[["app-skeleton-viewer-meta"]],decls:7,vars:0,template:function(e,n){1&e&&(t.TgZ(0,"h4"),t._uU(1,"Metadata"),t.qZA(),t.TgZ(2,"div")(3,"div")(4,"h4"),t._uU(5,"Figures"),t.qZA(),t._UZ(6,"div"),t.qZA()())},styles:["input[type=range][_ngcontent-%COMP%]{appearance:none;-webkit-appearance:none;-moz-appearance:none;background:transparent}input[type=range][_ngcontent-%COMP%]::-webkit-slider-runnable-track{width:300px;height:2px;background:#ddd;border:none;border-radius:1px}input[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:12px;width:12px;border-radius:12px;background:rgb(245,245,245);margin-top:-5px}input[type=range][_ngcontent-%COMP%]:focus{outline:none}input[type=range][_ngcontent-%COMP%]:focus::-webkit-slider-runnable-track{background:#ccc}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-webkit-slider-runnable-track{background:rgb(90,90,90)}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb{background:rgb(90,90,90)}input[type=range][_ngcontent-%COMP%]::-moz-range-track{height:2px;background:#ddd;border:none;border-radius:1px}input[type=range][_ngcontent-%COMP%]::-moz-range-thumb{-moz-appearance:none;border:none;height:12px;width:12px;border-radius:12px;background:rgb(245,245,245);cursor:pointer}","[_ngcontent-%COMP%]::-webkit-scrollbar-track{border-radius:5px;background:rgba(240,240,240,.1)}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{border-radius:5px;background:rgba(240,240,240,.2);border-color:transparent}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:rgba(240,240,240,.4)}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:window-inactive{background:rgba(240,240,240,.05)}[_ngcontent-%COMP%]::-webkit-scrollbar{width:9px}.scroller[_ngcontent-%COMP%]{scrollbar-color:rgb(160,160,160) rgb(90,90,90);scrollbar-width:thin}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-track{background:rgba(240,240,240,.1)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:rgba(240,240,240,.2)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:rgba(240,240,240,.4)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb:window-inactive{background:rgba(240,240,240,.05)}",".color-tile[_ngcontent-%COMP%]{width:1em;height:1em;display:inline-block;margin-right:.5em}.category-title[_ngcontent-%COMP%]{font-weight:700;margin-bottom:.35em;display:flex}.header-setting-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;flex-grow:1}ul[_ngcontent-%COMP%]{margin:0;margin-block:0;margin-block-start:0;margin-block-end:0;padding-inline-start:0}ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{text-align:left;padding-bottom:.2em}h4[_ngcontent-%COMP%]{text-transform:uppercase;margin:0}.btn-link[_ngcontent-%COMP%]{margin:0;color:#c8c8c8;display:inline-flex;align-items:center}.btn-link[_ngcontent-%COMP%]:hover{color:#fff}.button[_ngcontent-%COMP%]{color:inherit;background:transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:100%;pointer-events:auto;height:3em;margin:0 0 1em}.button[_ngcontent-%COMP%]:hover{background-color:#ffffff26}input[type=search][_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;border-radius:4px;padding:.5em .25em;outline:none;display:inline-block;pointer-events:auto;background:rgba(255,255,255,.15);margin:.5em 0 1em}select[_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;background:url(/assets/dropdown-arrow-light.svg) no-repeat right transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:100%;padding:2px 1em;outline:none;display:inline-block;pointer-events:auto;margin-bottom:1em}.visibility-icon[_ngcontent-%COMP%]{margin:0 .25em}#skeleton-diameter[_ngcontent-%COMP%], #skeleton-diameter-default[_ngcontent-%COMP%]{flex:1}.slider-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin:0 0 .5em}.header-setting-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between}.header-setting-container.settings-open[_ngcontent-%COMP%]{margin-bottom:1em}.header-setting-container.settings-open[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]{opacity:.5}.settings-container[_ngcontent-%COMP%]{margin-bottom:1em}#points-input-container[_ngcontent-%COMP%]{display:flex;align-content:center;margin-bottom:1em}#points-input-container[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{margin:0 .25em 0 0}hr[_ngcontent-%COMP%]{border-top-style:none;opacity:.25;margin:1em 0}#config-status[_ngcontent-%COMP%]{background-color:#258618;border-radius:.5em;width:.7em;height:.7em;display:inline-block;margin-left:.5rem}#config-status.dirty[_ngcontent-%COMP%]{background-color:#c70000}#config-status.busy[_ngcontent-%COMP%]{animation:blinker .25s linear infinite}@keyframes blinker{50%{opacity:0}
1}"]}),r})();var An=h(61073);const zn=function(r,o){return{dirty:r,busy:o}};function Fn(r,o){if(1&r&&t._UZ(0,"div",17),2&r){const e=t.oxw();t.Q6J("ngClass",t.WLB(1,zn,e.dirty,e.busy))}}function Un(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div",18)(1,"button",19),t.NdJ("click",function(){t.CHM(e);const i=t.oxw();return t.KtG(i.save())}),t._uU(2,"Save Configuration"),t.qZA()()}if(2&r){const e=t.oxw();t.xp6(1),t.Q6J("disabled",!e.canEdit)}}function Jn(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div",18)(1,"label"),t._uU(2,"Exposure"),t.qZA(),t.TgZ(3,"div",20)(4,"input",21),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw();return t.KtG(s.toneMappingExposure=i)}),t.qZA(),t.TgZ(5,"span",22),t._uU(6),t.qZA()()()}if(2&r){const e=t.oxw();t.xp6(4),t.Q6J("ngModel",e.toneMappingExposure),t.xp6(2),t.Oqu(e.toneMappingExposure)}}function Hn(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div",23)(1,"input",24),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw();return t.KtG(s.antialias=i)}),t.qZA(),t.TgZ(2,"label"),t._uU(3,"Anti-alias"),t.qZA()()}if(2&r){const e=t.oxw();
1t.xp6(1),t.Q6J("ngModel",e.antialias)}}function Gn(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div",18)(1,"label"),t._uU(2,"Up"),t.qZA(),t.TgZ(3,"select",26),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw(2);return t.KtG(s.updateViewUp(i))}),t.TgZ(4,"option",27),t._uU(5,"Default (-Y)"),t.qZA(),t.TgZ(6,"option",27),t._uU(7,"Reverse (Y)"),t.qZA()()()}if(2&r){const e=t.oxw(2);t.xp6(3),t.Q6J("ngModel",e.threeViewer.camera.up.y),t.xp6(1),t.Q6J("value",-1),t.xp6(2),t.Q6J("value",1)}}function Yn(r,o){if(1&r){const e=t.EpF();t.TgZ(0,"div",18)(1,"label"),t._uU(2,"Front"),t.qZA(),t.TgZ(3,"select",26),t.NdJ("ngModelChange",function(i){t.CHM(e);const s=t.oxw(2);return t.KtG(s.updateViewFront(i))}),t.TgZ(4,"option",27),t._uU(5,"0\xb0"),t.qZA(),t.TgZ(6,"option",27),t._uU(7,"90\xb0"),t.qZA(),t.TgZ(8,"option",27),t._uU(9,"180\xb0"),t.qZA(),t.TgZ(10,"option",27),t._uU(11,"-90\xb0"),t.qZA()()()}if(2&r){const e=t.oxw(2);t.xp6(3),t.Q6J("ngModel",e.front),t.xp6(1),t.Q6J("value",0),t.xp6(2),t.Q6J("value",e.PI/2),t.xp6(2),t.Q6J("value",e.PI),t.xp6(2),t.Q6J("value",-e.PI/2)}}function $n(r,o){if(1&r&&(t.TgZ(0,"div")(1,"h4",25),t._uU(2,"View Orientation"),t.qZA(),t.YNc(3,Gn,8,3,"div",10),t.YNc(4,Yn,12,5,"div",10),t.qZA()),2&r){const e=t.oxw();
1t.xp6(3),t.Q6J("ngIf",null==e.threeViewer?null:e.threeViewer.camera),t.xp6(1),t.Q6J("ngIf",null==e.threeViewer?null:e.threeViewer.camera)}}const qn=function(r){return{closed:r}},Bn=function(r){return{"settings-open":r}},jn=function(r){return{"margin-bottom":r}};let Qn=(()=>{class r{constructor(e,n,i){this.skeletonService=e,this.skeletonViewerService=n,this.experimentDataService=i,this.updateSizeNormalizaton=new t.vpe,this.updateDefaultPointDiameter=new t.vpe,this.togglePoints=new t.vpe,this.subs=[],this.searching=!0,this.sidebarVisible=!0,this.settingsVisible=!1,this.PI=Math.PI,this.front=N.defaultFRONT,this.dirty=!1,this.busy=!1,this.canEdit=!1,this.error=!1,this.skeletonViewerService.configuration$.subscribe(s=>{this.config=s;try{this.front=s.json.view.orientationFront}catch{this.front=N.defaultFRONT}}),this.subs.push(this.skeletonViewerService.canEdit$.subscribe(s=>this.canEdit=s))}set antialias(e){this.threeViewer.toggleAntialias(e),this.dirty=!0,this.threeViewer.render()}get antialias(){return this.threeViewer?.antialias}get toneMappingExposure(){return this.threeViewer.renderer.toneMappingExposure}set toneMappingExposure(e){this.threeViewer.renderer.toneMappingExposure=e,this.dirty=!0,this.threeViewer.render()}ngOnInit(){}ngOnDestroy(){this.subs.forEach(e=>e.unsubscribe())}updateViewUp(e){[-1,1].includes(+e)?(this.threeViewer.camera.up.set(0,+e,0),this.threeViewer.controls.update(),this.dirty=!0):console.warn("Invalid up value.")}updateViewFront(e){this.threeViewer.rotateCamera(e),this.dirty=!0,this.front=e}save(){var e=this;return(0,x.Z)(function*(){console.log("save",e.config),e.busy=!0;const n=yield(0,k.n)(e.experimentDataService.get(e.config.id));n.json.hasOwnProperty("view")||(n.json.view=new Y),n.json.view.orientationFront=e.front,n.json.view.orientationUp=e.threeViewer.camera.up.y,n.json.view.exposure=e.toneMappingExposure,n.json.view.antialias=e.antialias,console.log("save value:",n.json),yield(0,k.n)(e.experimentDataService.update(n.id,{json:n.json})),e.dirty=!1,e.busy=!1})()}}return r.\u0275fac=function(e){return new(e||r)(t.Y36(p),t.Y36(N),t.Y36(D))},r.\u0275cmp=t.Xpm({type:r,selectors:[["app-skeleton-three-side-panel"]],inputs:{experimentData:"experimentData",experiment:"experiment",threeViewer:"threeViewer"},outputs:{updateSizeNormalizaton:"updateSizeNormalizaton",updateDefaultPointDiameter:"updateDefaultPointDiameter",togglePoints:"togglePoints"},decls:28,vars:22,consts:[["id","side-panel-container",3,"ngClass"],["id","experiment-title",1,"side-panel-section"],[1,"header-setting-container"],[1,"btn-link",3,"click"],["id","close-icon",1,"material-icons"],[1,"side-panel-section"],[1,"header-setting-container",3,"ngClass","ngStyle"],["id","config-status",3,"ngClass",4,"ngIf"],[1,"material-icons"],[1,"settings-container",3,"hidden"],["class","form-group",4,"ngIf"],["class","inline-form-group",4,"ngIf"],[4,"ngIf"],["id","neuropil-list",1,"side-panel-section"],[3,"threeViewer","experiment"],["id","neuron-list",1,"side-panel-section"],[3,"experimentData","threeViewer","updateDefaultPointDiameter","updateSizeNormalizaton","togglePoints"],["id","config-status",3,"ngClass"],[1,"form-group"],[1,"button",2,"margin-top","1em",3,"disabled","click"],[1,"slider-container"],["id","bloom-exposure","type","range","min","0","max","3","step",".05",3,"ngModel","ngModelChange"],[2,"margin-left",".5em","width","3em"],[1,"inline-form-group"],["type","checkbox",3,"ngModel","ngModelChange"],[2,"margin-top","2em"],[3,"ngModel","ngModelChange"],[3,"value"]],template:function(e,n){1&e&&(t.TgZ(0,"div",0)(1,"div",1)(2,"div",2)(3,"h4"),t._uU(4),t.ALo(5,"EIN"),t.qZA(),t.TgZ(6,"button",3),t.NdJ("click",function(){return n.sidebarVisible=!n.sidebarVisible}),t.TgZ(7,"span",4),t._uU(8,"keyboard_arrow_left"),t.qZA()()()(),t.TgZ(9,"div",5)(10,"div",6)(11,"h4"),t._uU(12,"Viewer Settings "),t.YNc(13,Fn,1,4,"div",7),t.qZA(),t.TgZ(14,"button",3),t.NdJ("click",function(){return n.settingsVisible=!n.settingsVisible}),t.TgZ(15,"span",8),t._uU(16,"settings"),t.qZA()()(),t.TgZ(17,"div",9),t.YNc(18,Un,3,1,"div",10),t.YNc(19,Jn,7,2,"div",10),t.YNc(20,Hn,4,1,"div",11),t.YNc(21,$n,5,2,"div",12),t.qZA()(),t.TgZ(22,"div",5),t._UZ(23,"app-skeleton-viewer-meta"),t.qZA(),t.TgZ(24,"div",13),t._UZ(25,"app-catmaid-neuropil-list",14),t.qZA(),t.TgZ(26,"div",15)(27,"app-catmaid-experiment-data-list",16),t.NdJ("updateDefaultPointDiameter",function(s){return n.updateDefaultPointDiameter.emit(s)})("updateSizeNormalizaton",function(s){return n.updateSizeNormalizaton.emit(s)})("togglePoints",function(s){return n.togglePoints.emit(s)}),t.qZA()()()),2&e&&(t.Q6J("ngClass",t.VKq(16,qn,!n.sidebarVisible)),t.xp6(4),t.hij("Experiment ",t.lcZ(5,14,null==n.experiment?null:n.experiment.id)," data"),t.xp6(6),t.Q6J("ngClass",t.VKq(18,Bn,n.settingsVisible))("ngStyle",t.VKq(20,jn,n.settingsVisible)),t.xp6(3),t.Q6J("ngIf",n.canEdit),t.xp6(4),t.Q6J("hidden",!n.settingsVisible),t.xp6(1),t.Q6J("ngIf",n.canEdit&&n.dirty),t.xp6(1),t.Q6J("ngIf",null==n.threeViewer?null:n.threeViewer.renderer),t.xp6(1),t.Q6J("ngIf",null==n.threeViewer?null:n.threeViewer.bloomPass),t.xp6(1),t.Q6J("ngIf",n.canEdit),t.xp6(4),t.Q6J("threeViewer",n.threeViewer)("experiment",n.experiment),t.xp6(2),t.Q6J("experimentData",n.experimentData)("threeViewer",n.threeViewer))},dependencies:[w.mk,w.O5,w.PC,P.YN,P.Kr,P.Fj,P.eT,P.Wl,P.EJ,P.JJ,P.On,en,Ln,Zn,An.i],styles:[".text-button[_ngcontent-%COMP%]{cursor:pointer;pointer-events:auto;display:flex;align-items:center;justify-content:space-between}#status-text[_ngcontent-%COMP%]{font-size:1rem;text-transform:uppercase}figure[_ngcontent-%COMP%] three-viewer[_ngcontent-%COMP%] #three-container[_ngcontent-%COMP%]{width:inherit;height:inherit}ul[_ngcontent-%COMP%]{transition:none;padding:0;margin:0}ul[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:inherit}h4[_ngcontent-%COMP%]{text-transform:uppercase}select[_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;background:url(dropdown-arrow-light.e2f3d5a6f78e4d74.svg) no-repeat right transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:14em;padding:2px 1em;outline:none;display:inline-block;pointer-events:auto}select[_ngcontent-%COMP%]:disabled{background-image:none}select[_ngcontent-%COMP%]:focus{border:1px solid rgba(255,255,255,.5)}select[_ngcontent-%COMP%] option[_ngcontent-%COMP%], select[_ngcontent-%COMP%] optgroup[_ngcontent-%COMP%]{background:rgb(51,61,72);color:#fff}input[_ngcontent-%COMP%]{margin:1em;font-size:.85em;pointer-events:auto}input[type=checkbox][_ngcontent-%COMP%], input[type=radio][_ngcontent-%COMP%]{margin:0 .5em 0 0}input[type=range][_ngcontent-%COMP%]{background-color:transparent;padding:0;margin:0}.absolute-center[_ngcontent-%COMP%]{margin:auto;position:absolute;inset:0}.color-input-box[_ngcontent-%COMP%]{width:1em;height:1em;display:inline-block;margin:-.15em .5em;cursor:pointer;border:none}.color-input[_ngcontent-%COMP%]{border:none;height:1em;width:1em;padding:0;margin:0 1em 0 .75em;cursor:pointer}a[_ngcontent-%COMP%]{cursor:pointer}.togglelink[_ngcontent-%COMP%]{margin-left:1em}.btn[_ngcontent-%COMP%]:focus{color:#fff}.unavailable[_ngcontent-%COMP%]{color:#969696}label[_ngcontent-%COMP%]{text-transform:none;letter-spacing:0;font-weight:700;display:block;margin:.5em 0}.arrow[_ngcontent-%COMP%]{display:flex}.dark-font[_ngcontent-%COMP%]{color:#3c3c3c!important}.dark-font[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .dark-font[_ngcontent-%COMP%] #background-color-input[_ngcontent-%COMP%]{color:#3c3c3c!important;border:solid 1px rgba(60,60,60,.15)}.slider-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%}.menu-open[_ngcontent-%COMP%]{opacity:.5}.clickable[_ngcontent-%COMP%]{cursor:pointer}.inline-form-group[_ngcontent-%COMP%]{display:flex;align-items:baseline;margin-bottom:.5em}.inline-form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .inline-form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{display:inline-block;margin:0}.inline-form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{margin-right:.5em}.form-group[_ngcontent-%COMP%]{margin-bottom:.5em}.slider-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center}input[type=range][_ngcontent-%COMP%]{flex:1}hr[_ngcontent-%COMP%]{border:0;height:1px;background-image:linear-gradient(to right,rgba(255,255,255,.15),rgba(255,255,255,.5) 25%,rgba(255,255,255,.5) 75%,rgba(255,255,255,.15));margin:.75em 0}","input[type=range][_ngcontent-%COMP%]{-webkit-appearance:none;appearance:none;background-color:transparent}input[type=range][_ngcontent-%COMP%]::-webkit-slider-runnable-track{width:100px;height:2px;background:#ddd;border:none;border-radius:1px}input[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:12px;width:12px;border-radius:12px;background:rgb(245,245,245);margin-top:-5px}input[type=range][_ngcontent-%COMP%]:focus{outline:none}input[type=range][_ngcontent-%COMP%]:focus::-webkit-slider-runnable-track{background:#ccc}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-webkit-slider-runnable-track{background:rgb(90,90,90)}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb{background:rgb(90,90,90)}input[type=range][_ngcontent-%COMP%]::-moz-range-track{height:2px;background-color:#fff}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-moz-range-track{background-color:#5a5a5a}input[type=range][_ngcontent-%COMP%]::-moz-range-thumb{border:none;height:12px;width:12px;border-radius:12px;background:rgb(245,245,245);margin-top:-5px}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-moz-range-thumb{background-color:#5a5a5a}",".color-tile[_ngcontent-%COMP%]{width:1em;height:1em;display:inline-block;margin-right:.5em}.category-title[_ngcontent-%COMP%]{font-weight:700;margin-bottom:.35em;display:flex}.header-setting-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;flex-grow:1}ul[_ngcontent-%COMP%]{margin:0;margin-block:0;margin-block-start:0;margin-block-end:0;padding-inline-start:0}ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{text-align:left;padding-bottom:.2em}h4[_ngcontent-%COMP%]{text-transform:uppercase;margin:0}.btn-link[_ngcontent-%COMP%]{margin:0;color:#c8c8c8;display:inline-flex;align-items:center}.btn-link[_ngcontent-%COMP%]:hover{color:#fff}.button[_ngcontent-%COMP%]{color:inherit;background:transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:100%;pointer-events:auto;height:3em;margin:0 0 1em}.button[_ngcontent-%COMP%]:hover{background-color:#ffffff26}input[type=search][_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;border-radius:4px;padding:.5em .25em;outline:none;display:inline-block;pointer-events:auto;background:rgba(255,255,255,.15);margin:.5em 0 1em}select[_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;background:url(/assets/dropdown-arrow-light.svg) no-repeat right transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:100%;padding:2px 1em;outline:none;display:inline-block;pointer-events:auto;margin-bottom:1em}.visibility-icon[_ngcontent-%COMP%]{margin:0 .25em}#skeleton-diameter[_ngcontent-%COMP%], #skeleton-diameter-default[_ngcontent-%COMP%]{flex:1}.slider-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin:0 0 .5em}.header-setting-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between}.header-setting-container.settings-open[_ngcontent-%COMP%]{margin-bottom:1em}.header-setting-container.settings-open[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]{opacity:.5}.settings-container[_ngcontent-%COMP%]{margin-bottom:1em}#points-input-container[_ngcontent-%COMP%]{display:flex;align-content:center;margin-bottom:1em}#points-input-container[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{margin:0 .25em 0 0}hr[_ngcontent-%COMP%]{border-top-style:none;opacity:.25;margin:1em 0}#config-status[_ngcontent-%COMP%]{background-color:#258618;border-radius:.5em;width:.7em;height:.7em;display:inline-block;margin-left:.5rem}#config-status.dirty[_ngcontent-%COMP%]{background-color:#c70000}#config-status.busy[_ngcontent-%COMP%]{animation:blinker .25s linear infinite}@keyframes blinker{50%{opacity:0}
1}","[_nghost-%COMP%]{position:absolute;height:calc(100% - 6em);display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;top:6em;left:0;font-family:Roboto Condensed,sans-serif;color:#dcdcdc;pointer-events:auto}.side-panel-title[_ngcontent-%COMP%]{font-weight:700;text-transform:capitalize}#side-panel-container[_ngcontent-%COMP%]{position:absolute;display:flex;flex-direction:column;overflow-y:auto;padding-right:.5em;width:22em;left:0;transition:left .2s ease-in;max-height:100%}#side-panel-container[_ngcontent-%COMP%] .side-panel-section[_ngcontent-%COMP%]{background-color:#ffffff26;padding:1em .5em 1em 1em;display:inline-flex;flex-flow:column;margin-bottom:.15em;-webkit-backdrop-filter:blur(4px) brightness(.7);backdrop-filter:blur(4px) brightness(.7);position:relative}#side-panel-container[_ngcontent-%COMP%] .side-panel-section[_ngcontent-%COMP%]:first-child{border-radius:0 5px 0 0}#side-panel-container[_ngcontent-%COMP%] .side-panel-section[_ngcontent-%COMP%]:last-child{border-radius:0 0 5px}#side-panel-container.closed[_ngcontent-%COMP%]{left:-18em}#side-panel-container.closed[_ngcontent-%COMP%] .side-panel-section[_ngcontent-%COMP%]:not(#experiment-title){display:none}label[_ngcontent-%COMP%]{display:block}input[type=search][_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;border-radius:4px;padding:.75em;outline:none;display:inline-block;pointer-events:auto;background:rgba(255,255,255,.15)}.button[_ngcontent-%COMP%]{color:inherit;background:transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:100%;pointer-events:auto;height:3em;margin:0 0 1em}.button[_ngcontent-%COMP%]:hover{background-color:#ffffff26}.text-btn[_ngcontent-%COMP%]{height:unset;padding:0;border:none;text-transform:none;font-weight:400;text-align:left;width:auto}.text-btn[_ngcontent-%COMP%]:hover{background-color:inherit;text-decoration:underline}#search-input-container[_ngcontent-%COMP%]{display:flex}#neuron-list[_ngcontent-%COMP%]{pointer-events:all}#experiment-title[_ngcontent-%COMP%] .header-setting-container[_ngcontent-%COMP%]{margin:0;align-items:center}h4[_ngcontent-%COMP%]{margin:0 0 .25em;display:flex;align-items:center}#close-icon[_ngcontent-%COMP%]{position:relative;right:-.25em;font-size:2em}","[_ngcontent-%COMP%]::-webkit-scrollbar-track{border-radius:5px;background:rgba(240,240,240,.1)}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{border-radius:5px;background:rgba(240,240,240,.2);border-color:transparent}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:rgba(240,240,240,.4)}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:window-inactive{background:rgba(240,240,240,.05)}[_ngcontent-%COMP%]::-webkit-scrollbar{width:9px}.scroller[_ngcontent-%COMP%]{scrollbar-color:rgb(160,160,160) rgb(90,90,90);scrollbar-width:thin}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-track{background:rgba(240,240,240,.1)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:rgba(240,240,240,.2)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:rgba(240,240,240,.4)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb:window-inactive{background:rgba(240,240,240,.05)}"]}),r})();const Kn=["three_container"],Wn=["three_canvas"];function Xn(r,o){if(1&r&&(t.TgZ(0,"div",7)(1,"span",8),t._uU(2,"error"),t.qZA(),t._uU(3),t.qZA()),2&r){const e=t.oxw();
1t.xp6(3),t.hij(" ",e.error,"")}}const ei=[{path:"",component:(()=>{class r{constructor(e,n,i,s,a,l,c,d,_,b,m,g){this.navigationService=e,this.catmaidService=n,this.route=i,this.experimentDataService=s,this.resizeService=a,this.skeletonViewerService=l,this.colorService=c,this.experimentService=d,this.skeletonService=_,this.catmaidExperimentService=b,this.interactiveExperimentService=m,this.swcService=g,this.transparent=!0,this.cameraType="orthographic",this.lightType="1",this.precision="lowp",this.antialias=!1,this.resize=!0,this.renderType="low",this.fov=60,this.threeNeurons=[],this.offset=new C.Pa4(0,0,0),this.experimentData=[],this.error="",this.subscriptions=[],this.navigationService.setStatusMessage("3D")}ngOnInit(){var e=this;this.setupThreeViewer(),this.subscriptions.push(this.route.params.subscribe(function(){var n=(0,x.Z)(function*(i){if(e.error="",e.threeNeurons?.length&&(e.destroyNeurons(),e.destroyNeuronContainer()),e.neuropilContainer&&e.destroyNeuropilContainer(),e.experimentID=+i.experiment,e.handle=i.handle,e.experimentID||e.handle)try{const s=yield e.loadViewerData(e.experimentID,e.handle);e.experimentData=yield e.loadSkeletonData(e.experiment),e.experimentData.length?e.filteredExperimentDataSubscription=e.skeletonViewerService.filteredExperimentData$.subscribe(a=>{setTimeout(()=>{console.log("experimentData",a),e.updateScene(a,s).then(l=>e.onResize()).catch(l=>{console.error(l),e.error=l})},100)}):(yield e.updateScene([],s),e.onResize())}catch(s){e.error=s instanceof y.UA?401==s.status?"Please log in to view this experiment.":403==s.status?"You do not have permission to view this experiment.":404==s.status?"Experiment not found.":"Error loading experiment.":"Error loading experiment."}else console.warn("No experiment id provided"),e.error="No experiment ID provided"});return function(i){return n.apply(this,arguments)}}()))}ngOnDestroy(){this.subscriptions.forEach(e=>e.unsubscribe()),this.filteredExperimentDataSubscription?.unsubscribe()}loadViewerData(e,n){var i=this;return(0,x.Z)(function*(){console.log("Loading viewer data for experiment",e,n);const s=yield(0,k.n)(i.experimentService.canEdit(e).pipe((0,I.K)(a=>(0,F.of)(!1))));i.skeletonViewerService.canEdit.next(s),i.filteredExperimentDataSubscription?.unsubscribe();try{i.experiment=yield i.getExperiment(e,n),console.log("this.experiment",i.experiment);const a=yield i.skeletonViewerService.getViewerConfiguration(i.experiment);return i.skeletonViewerService.updateConfiguration(a),a}catch(a){return console.error(a),Promise.reject(a)}})()}loadSkeletonData(e){var n=this;return(0,x.Z)(function*(){const i=yield n.catmaidExperimentService.loadCatmaidSkeletons(e),s=yield n.swcService.loadSWCFiles(e);return i.concat(s)})()}orientCamera(e,n=-1,i=Math.PI){n=[-1,1].includes(n)?n:-1,e.camera.up.set(0,n,0),e.rotateCamera(i)}loadCatmaidVolumes(e,n){var i=this;return(0,x.Z)(function*(){console.log("loadCatmaidVolumes",e);const s=[U.A.SurfaceData,U.A.CatmaidVolumeArchive],a=e.files.filter(l=>s.includes(l.meta.file_type));try{if(!a.length)return i.experimentData.length?null:Promise.reject("No neuropil/volume files associated with this experiment.");{const l=a.map(d=>d.uuid);if(!l.length)return e.category.value in["Neuropil Archive","Interactive Neuropils"]?Promise.reject("No neuropil/volume files"):null;i.skeletonViewerService.volumeLoadStatus.next(1);const c=yield(0,k.n)(i.experimentService.getDownloadURLs(i.experimentID,l,!1));if(i.skeletonViewerService.volumeLoadStatus.next(5),!c)return Promise.reject(i.experimentData?"No neuropil/volume files found.":"No skeleton or neuropil/volume data.");i.setupNeuropilContainer(),yield i.catmaidExperimentService.setupVolumes(c,i.neuropilContainer,Boolean(i.neuronContainer),n)}}catch(l){return Promise.reject(l)}})()}getExperiment(e,n){return(0,k.n)(n?this.experimentService.getPublicExperiment(n):this.experimentService.get(e))}setupThreeViewer(){console.log("setupThreeViewer"),this.threeViewer=new Q.s(this.containerWidth?this.containerWidth:this.container.nativeElement.clientWidth,this.containerHeight?this.containerHeight:this.container.nativeElement.clientHeight,this.fov,this.container,this.transparent,this.autorotate,this.cameraType,this.lightType,this.background,this.canvas,this.precision,this.antialias,!1),this.threeViewer.renderer.toneMappingExposure=1.4,this.resize&&(this.subscriptions.push(this.resizeService.onResize$.subscribe(i=>{this.onResize(i)})),this.onResize())}onResize(e){if(this.resize&&this.threeViewer){const n=this.containerWidth?this.containerWidth:this.container.nativeElement.clientWidth,i=this.containerHeight?this.containerHeight:this.container.nativeElement.clientHeight;n&&i&&this.threeViewer.renderer&&this.threeViewer.camera?(this.threeViewer.aspect=n/i,this.threeViewer.viewHeight=i,this.threeViewer.viewWidth=n,this.threeViewer.perspectiveCamera.aspect=n/i,this.threeViewer.orthographicCamera.left=-n/2,this.threeViewer.orthographicCamera.right=n/2,this.threeViewer.orthographicCamera.top=i/2,this.threeViewer.orthographicCamera.bottom=-i/2,this.threeViewer.camera.updateProjectionMatrix(),this.threeViewer.renderer.setSize(n,i),this.threeViewer.render()):console.warn("not ready to RESIZE")}}createNeuronContainer(){console.log("createNeuronContainer"),this.neuronContainerPivot=new C.ZAu,this.neuronContainer=new C.ZAu,this.neuronContainer.layers.set(Q.s.bloomScene),this.neuronContainerPivot.add(this.neuronContainer),this.threeViewer.scene.add(this.neuronContainerPivot)}setupNeuropilContainer(){console.log("setupNeuropilContainer"),this.neuropilContainer=new C.ZAu,this.threeViewer.scene.add(this.neuropilContainer);const e=(new C.yGw).makeTranslation(this.offset.x,this.offset.y,this.offset.z);
1this.neuropilContainer.applyMatrix4(e),this.threeViewer.scene.add(new C.fQA(this.neuropilContainer))}destroyNeuronContainer(){for(let e=this.neuronContainer.children.length-1;e>=0;e--){const n=this.neuronContainer.children[e];n.geometry&&n.geometry.dispose(),n.material&&n.material.dispose(),this.neuronContainer.remove(n)}this.neuropilContainer.remove(this.neuronContainer),this.threeViewer.scene.remove(this.neuronContainerPivot),this.neuronContainerPivot=null,this.neuronContainer=null}destroyNeuropilContainer(){for(let e=this.neuropilContainer.children.length-1;e>=0;e--){const n=this.neuropilContainer.children[e];n.geometry&&n.geometry.dispose(),n.material&&n.material.dispose(),this.neuropilContainer.remove(n)}this.threeViewer.scene.remove(this.neuropilContainer),this.neuropilContainer=null}updateScene(e,n){var i=this;return new Promise(function(){var s=(0,x.Z)(function*(a,l){if(console.log("update scene",e),i.threeViewer.renderer.toneMappingExposure=n.json?.view?.exposure||1.4,i.neuronContainer)i.updateNeuronVisibility(e),a();else if(e.length)i.createNeuronContainer(),i.catmaidExperimentService.setupNeurons(e,i.renderType,i.threeViewer,i.neuronContainer).subscribe({next:c=>{if("number"==typeof c){const d=Math.round(50*c+50);console.log(d),i.skeletonViewerService.skeletonLoadStatus.next(d)}else Array.isArray(c)&&c.length?(i.threeNeurons=c,console.log("neurons complete"),i.offset=i.skeletonViewerService.centerInWorldSpace(i.neuronContainer),i.setupCameraAndControls(n.json?.view?.orientationUp,n.json?.view?.orientationFront),i.togglePoints(!1),i.threeViewer.render(),i.threeViewer.unregistered=!0,i.skeletonViewerService.skeletonLoadStatus.next(100),setTimeout(()=>i.skeletonViewerService.skeletonLoadStatus.next(null),2e3)):l("error loading neurons")},error:c=>{l(c)},complete:()=>{console.log("neuron setup complete, prepare volumes"),i.loadCatmaidVolumes(i.experiment,n).then(()=>a()).catch(c=>{i.skeletonViewerService.volumeLoadStatus.next(-1),l(c)})}});else{console.log("volume only scene");try{yield i.loadCatmaidVolumes(i.experiment,n),i.setupCameraAndControls(n.json?.view?.orientationUp,n.json?.view?.orientationFront),i.threeViewer.render(),a()}catch(c){i.skeletonViewerService.volumeLoadStatus.next(-1),l(c)}}});return function(a,l){return s.apply(this,arguments)}}())}setupCameraAndControls(e=-1,n){console.log("setup camera and controls");const i=new C.Pa4(0,0,0);this.neuronContainer&&(new C.ZzF).setFromObject(this.neuronContainer).getSize(i);const s=new C.Pa4(0,0,0);this.neuropilContainer&&(new C.ZzF).setFromObject(this.neuropilContainer).getSize(s);const a=i.length()>s.length()?this.neuronContainer:this.neuropilContainer;this.threeViewer.setupCameraAndControls(a,!0,this.cameraType,e),this.orientCamera(this.threeViewer,e,n)}updateNeuronVisibility(e){const n=[];e.forEach(i=>{i.visible&&i.keywords.forEach(s=>{s.visible&&n.push(...s.neurons.map(a=>a.id))})}),this.threeNeurons.forEach(n.length===this.threeNeurons.length?i=>i.visible=!0:i=>{i.visible=n.includes(i.neuronID)}),this.threeViewer.render()}updateNeuropilVisibility(){}destroyNeurons(){this.threeNeurons.forEach(e=>e.destroy(this.threeViewer))}updateSizeNormalizaton(e){R.P.pointSizeNormalizaton=e,this.threeNeurons.forEach(n=>n.updateSizeNormalizaton()),this.threeViewer.render()}updateDefaultPointDiameter(e){R.P.defaultPointSize=e,this.threeNeurons.forEach(n=>n.updateDefaultPoint()),this.threeViewer.render()}togglePoints(e){this.pointVisible=e,this.threeNeurons.forEach(n=>n.togglePoints(e)),this.threeViewer.render()}resetCamera(){this.threeViewer.controls.reset()}}return r.\u0275fac=function(e){return new(e||r)(t.Y36(re.f),t.Y36(p),t.Y36(E.gz),t.Y36(D),t.Y36(V._),t.Y36(N),t.Y36(Se),t.Y36(le.g),t.Y36(W),t.Y36(Ee),t.Y36(Ie),t.Y36(Dt))},r.\u0275cmp=t.Xpm({type:r,selectors:[["app-skeleton-three-viewer"]],viewQuery:function(e,n){if(1&e&&(t.Gf(Kn,7),t.Gf(Wn,7)),2&e){let i;t.iGM(i=t.CRH())&&(n.container=i.first),t.iGM(i=t.CRH())&&(n.canvas=i.first)}},inputs:{containerWidth:"containerWidth",containerHeight:"containerHeight",transparent:"transparent",autorotate:"autorotate",cameraType:"cameraType",lightType:"lightType",background:"background",precision:"precision",antialias:"antialias",resize:"resize",renderType:"renderType"},decls:9,vars:4,consts:[["id","three-container"],["three_container",""],["three_canvas",""],[3,"experimentData","experiment","threeViewer","updateSizeNormalizaton","togglePoints","updateDefaultPointDiameter"],["id","zoom-extents-btn",1,"btn-link",3,"click"],[1,"material-icons"],["class","error error-container","style","white-space: pre-line",4,"ngIf"],[1,"error","error-container",2,"white-space","pre-line"],[1,"material-icons",2,"margin-right",".5em","font-size","2em"]],template:function(e,n){1&e&&(t.TgZ(0,"div",0,1),t._UZ(2,"canvas",null,2),t.qZA(),t.TgZ(4,"app-skeleton-three-side-panel",3),t.NdJ("updateSizeNormalizaton",function(s){return n.updateSizeNormalizaton(s)})("togglePoints",function(s){return n.togglePoints(s)})("updateDefaultPointDiameter",function(s){return n.updateDefaultPointDiameter(s)}),t.qZA(),t.TgZ(5,"button",4),t.NdJ("click",function(){return n.resetCamera()}),t.TgZ(6,"span",5),t._uU(7,"\nzoom_out_map\n"),t.qZA()(),t.YNc(8,Xn,4,1,"div",6)),2&e&&(t.xp6(4),t.Q6J("experimentData",n.experimentData)("experiment",n.experiment)("threeViewer",n.threeViewer),t.xp6(4),t.Q6J("ngIf",n.error))},dependencies:[w.O5,Qn],styles:["input[type=range][_ngcontent-%COMP%]{-webkit-appearance:none;appearance:none;background-color:transparent}input[type=range][_ngcontent-%COMP%]::-webkit-slider-runnable-track{width:100px;height:2px;background:#ddd;border:none;border-radius:1px}input[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:12px;width:12px;border-radius:12px;background:rgb(245,245,245);margin-top:-5px}input[type=range][_ngcontent-%COMP%]:focus{outline:none}input[type=range][_ngcontent-%COMP%]:focus::-webkit-slider-runnable-track{background:#ccc}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-webkit-slider-runnable-track{background:rgb(90,90,90)}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb{background:rgb(90,90,90)}input[type=range][_ngcontent-%COMP%]::-moz-range-track{height:2px;background-color:#fff}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-moz-range-track{background-color:#5a5a5a}input[type=range][_ngcontent-%COMP%]::-moz-range-thumb{border:none;height:12px;width:12px;border-radius:12px;background:rgb(245,245,245);margin-top:-5px}.dark-font[_ngcontent-%COMP%] input[type=range][_ngcontent-%COMP%]::-moz-range-thumb{background-color:#5a5a5a}[_ngcontent-%COMP%]::-webkit-scrollbar-track{border-radius:5px;background:rgba(240,240,240,.1)}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{border-radius:5px;background:rgba(240,240,240,.2);border-color:transparent}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:rgba(240,240,240,.4)}[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:window-inactive{background:rgba(240,240,240,.05)}[_ngcontent-%COMP%]::-webkit-scrollbar{width:9px}.scroller[_ngcontent-%COMP%]{scrollbar-color:rgb(160,160,160) rgb(90,90,90);scrollbar-width:thin}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-track{background:rgba(240,240,240,.1)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:rgba(240,240,240,.2)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:rgba(240,240,240,.4)}.dark-font[_ngcontent-%COMP%] [_ngcontent-%COMP%]::-webkit-scrollbar-thumb:window-inactive{background:rgba(240,240,240,.05)}[_nghost-%COMP%]{font-family:Roboto Condensed,sans-serif;overflow:hidden;display:flex;flex-grow:1}#envelope[_ngcontent-%COMP%]{color:#dcdcdc;display:flex;flex-grow:1}canvas[_ngcontent-%COMP%]{display:flex;padding:0;margin:0;flex-grow:1}#side-panel[_ngcontent-%COMP%]{position:absolute;height:calc(100% - 12em);display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;top:6em;
1left:0}#side-panel-upper[_ngcontent-%COMP%]{flex-shrink:0;flex-direction:column}#display-controls-container[_ngcontent-%COMP%]{padding:1em 0}.side-panel-title[_ngcontent-%COMP%]{font-weight:700;text-transform:capitalize}#three-viewer-controls[_ngcontent-%COMP%]{position:absolute;top:50px;left:1em;padding:0;margin:0;overflow:hidden;z-index:100}#three-viewer-camera-type[_ngcontent-%COMP%]{position:absolute;bottom:2em;left:1em;z-index:100}#three-container[_ngcontent-%COMP%]{padding:0;margin:0;width:100%;height:100%;background-color:transparent;position:absolute}#three-container[_ngcontent-%COMP%] .show-hover[_ngcontent-%COMP%]{visibility:hidden}#three-container[_ngcontent-%COMP%]:hover .show-hover[_ngcontent-%COMP%]{visibility:visible}canvas[_ngcontent-%COMP%]{background-color:transparent;pointer-events:auto}.dark-font[_ngcontent-%COMP%] canvas[_ngcontent-%COMP%]{background-color:transparent}.dark-font.envelope[_ngcontent-%COMP%]{background-color:#000}.dark-font[_ngcontent-%COMP%] #screenshot[_ngcontent-%COMP%]{color:#5a5a5aa6}.dark-font[_ngcontent-%COMP%] #screenshot[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{color:#5a5a5aa6;background-color:#fff0}.dark-font[_ngcontent-%COMP%] #screenshot[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{color:#5a5a5a}.dark-font[_ngcontent-%COMP%] #preview-refresh-btn[_ngcontent-%COMP%]{color:#5a5a5aa6}.dark-font[_ngcontent-%COMP%] #preview-refresh-btn[_ngcontent-%COMP%]:hover{color:#5a5a5a}.dark-font[_ngcontent-%COMP%] #loader[_ngcontent-%COMP%]{color:#3c3c3c}#reconstruction[_ngcontent-%COMP%] three-viewer[_ngcontent-%COMP%] #three-container[_ngcontent-%COMP%]{height:inherit;width:inherit}#three-viewer-species[_ngcontent-%COMP%]{position:absolute;top:6em;right:2em;z-index:101}.three-viewer-loading-alert[_ngcontent-%COMP%]{color:#646464;font-weight:700;letter-spacing:1px;font-size:1em;z-index:100000;text-align:center}#loader[_ngcontent-%COMP%]{position:absolute;font-size:1.5em;margin:auto;inset:-2em 0 0;height:1.5em;text-align:center;color:#f5f5f5;z-index:100}#screenshot[_ngcontent-%COMP%]{position:absolute;bottom:2.25em;right:1.5em;z-index:100;color:#ffffffa6}#screenshot[_ngcontent-%COMP%]:hover{color:#fff}#screenshot[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{background-color:#fff0;padding:0;margin:0}#screenshot[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:active{color:#fff}#screenshot[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:focus{outline:0}#screenshot[_ngcontent-%COMP%] .glyphicon[_ngcontent-%COMP%]{top:auto}.upper-left[_ngcontent-%COMP%]{top:20px!important;left:20px!important;font-size:.75em}brain-alpha[_ngcontent-%COMP%] .jslider[_ngcontent-%COMP%]{width:200px;display:inline-block}brain-alpha-innervated[_ngcontent-%COMP%] .jslider[_ngcontent-%COMP%]{width:200px;display:inline-block}.jslider[_ngcontent-%COMP%] .jslider-label[_ngcontent-%COMP%]{display:none}#species-select[_ngcontent-%COMP%]{margin-right:.5em}.menu-open-toggle[_ngcontent-%COMP%]{right:0}#three-neuron-list[_ngcontent-%COMP%]{position:absolute;top:8em;right:1em;padding:0 1em;margin:0;z-index:100;font-weight:300;height:calc(100% - 12em)}#three-neuron-list[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{margin:.5em;pointer-events:auto}@media (max-width: 600px){#three-container[_ngcontent-%COMP%]{font-size:12px}}.wait[_ngcontent-%COMP%]{cursor:wait}#background-color-input[_ngcontent-%COMP%]{border-radius:5px;width:14em;height:2.5em;padding:0;margin:0}#species-label[_ngcontent-%COMP%]{font-weight:700;text-align:left}.no-navigation[_ngcontent-%COMP%]{top:0!important;height:100%!important}#side-panel-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;overflow-y:auto;padding-right:.5em;width:20em;max-height:100%}#side-panel-container[_ngcontent-%COMP%] .side-panel-section[_ngcontent-%COMP%]{pointer-events:auto;background-color:#37373780;padding:1em .5em 1em 1em;display:inline-flex;margin-bottom:.15em;flex:1;flex-direction:column}#side-panel-container[_ngcontent-%COMP%] .side-panel-section[_ngcontent-%COMP%]:first-child{border-radius:0 5px 0 0}#side-panel-container[_ngcontent-%COMP%] .side-panel-section[_ngcontent-%COMP%]:last-child{border-radius:0 0 5px}.dark-font[_ngcontent-%COMP%] .side-panel-section[_ngcontent-%COMP%]{background-color:#1e1e1e26}#side-panel-toggle[_ngcontent-%COMP%]{background:transparent;pointer-events:auto;padding-left:1em;padding-right:.5em;color:#ffffffbf}#side-panel-toggle[_ngcontent-%COMP%] .material-icons[_ngcontent-%COMP%]{font-size:1.5em}.menu-open-toggle[_ngcontent-%COMP%] > #side-panel-toggle[_ngcontent-%COMP%] > .material-icons[_ngcontent-%COMP%]{font-size:2em}#side-panel-toggle-container[_ngcontent-%COMP%]{position:absolute;top:.25em;z-index:100}.hidden[_ngcontent-%COMP%]{display:none}.invisible[_ngcontent-%COMP%]{visibility:hidden}#preview-image[_ngcontent-%COMP%]{cursor:pointer;max-width:100%;max-height:100%;
1min-width:200px;min-height:200px}#preview-image-message[_ngcontent-%COMP%]{position:absolute;opacity:.65;bottom:.25em;right:.25em;color:#afafaf}#preview-refresh-btn[_ngcontent-%COMP%]{position:absolute;z-index:100;top:0;right:0;background:transparent;color:#ffffffa6;padding:.75em .35em}#three-info[_ngcontent-%COMP%]{position:absolute;bottom:0;left:0;z-index:100}#three-scale[_ngcontent-%COMP%]{position:absolute;bottom:35px;left:100px;z-index:100}#three-scale.side-panel-hidden[_ngcontent-%COMP%]{bottom:5px;left:10px}#sources-container[_ngcontent-%COMP%]{display:flex;position:absolute;bottom:.5em;right:1.5em;font-size:.85em;opacity:.7;max-width:calc(100% - 3em);flex-wrap:wrap}#sources-container[_ngcontent-%COMP%] #publication-sources[_ngcontent-%COMP%], #sources-container[_ngcontent-%COMP%] #other-sources[_ngcontent-%COMP%]{display:flex}#sources-container[_ngcontent-%COMP%] #publication-sources[_ngcontent-%COMP%] a[_ngcontent-%COMP%], #sources-container[_ngcontent-%COMP%] #other-sources[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:inherit;text-decoration:none}button[_ngcontent-%COMP%]:disabled:not(.material-icons){background-color:transparent!important}#preview-container[_ngcontent-%COMP%]{display:flex;height:100%;width:100%;align-items:center;justify-content:center}",".text-button[_ngcontent-%COMP%]{cursor:pointer;pointer-events:auto;display:flex;align-items:center;justify-content:space-between}#status-text[_ngcontent-%COMP%]{font-size:1rem;text-transform:uppercase}figure[_ngcontent-%COMP%] three-viewer[_ngcontent-%COMP%] #three-container[_ngcontent-%COMP%]{width:inherit;height:inherit}ul[_ngcontent-%COMP%]{transition:none;padding:0;margin:0}ul[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:inherit}h4[_ngcontent-%COMP%]{text-transform:uppercase}select[_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;background:url(dropdown-arrow-light.e2f3d5a6f78e4d74.svg) no-repeat right transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:14em;padding:2px 1em;outline:none;display:inline-block;pointer-events:auto}select[_ngcontent-%COMP%]:disabled{background-image:none}select[_ngcontent-%COMP%]:focus{border:1px solid rgba(255,255,255,.5)}select[_ngcontent-%COMP%] option[_ngcontent-%COMP%], select[_ngcontent-%COMP%] optgroup[_ngcontent-%COMP%]{background:rgb(51,61,72);color:#fff}input[_ngcontent-%COMP%]{margin:1em;font-size:.85em;pointer-events:auto}input[type=checkbox][_ngcontent-%COMP%], input[type=radio][_ngcontent-%COMP%]{margin:0 .5em 0 0}input[type=range][_ngcontent-%COMP%]{background-color:transparent;padding:0;margin:0}.absolute-center[_ngcontent-%COMP%]{margin:auto;position:absolute;inset:0}.color-input-box[_ngcontent-%COMP%]{width:1em;height:1em;display:inline-block;margin:-.15em .5em;cursor:pointer;border:none}.color-input[_ngcontent-%COMP%]{border:none;height:1em;width:1em;padding:0;margin:0 1em 0 .75em;cursor:pointer}a[_ngcontent-%COMP%]{cursor:pointer}.togglelink[_ngcontent-%COMP%]{margin-left:1em}.btn[_ngcontent-%COMP%]:focus{color:#fff}.unavailable[_ngcontent-%COMP%]{color:#969696}label[_ngcontent-%COMP%]{text-transform:none;letter-spacing:0;font-weight:700;display:block;margin:.5em 0}.arrow[_ngcontent-%COMP%]{display:flex}.dark-font[_ngcontent-%COMP%]{color:#3c3c3c!important}.dark-font[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .dark-font[_ngcontent-%COMP%] #background-color-input[_ngcontent-%COMP%]{color:#3c3c3c!important;border:solid 1px rgba(60,60,60,.15)}.slider-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%}.menu-open[_ngcontent-%COMP%]{opacity:.5}.clickable[_ngcontent-%COMP%]{cursor:pointer}.inline-form-group[_ngcontent-%COMP%]{display:flex;align-items:baseline;margin-bottom:.5em}.inline-form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .inline-form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{display:inline-block;margin:0}.inline-form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{margin-right:.5em}.form-group[_ngcontent-%COMP%]{margin-bottom:.5em}.slider-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center}input[type=range][_ngcontent-%COMP%]{flex:1}hr[_ngcontent-%COMP%]{border:0;height:1px;background-image:linear-gradient(to right,rgba(255,255,255,.15),rgba(255,255,255,.5) 25%,rgba(255,255,255,.5) 75%,rgba(255,255,255,.15));margin:.75em 0}",".color-tile[_ngcontent-%COMP%]{width:1em;height:1em;display:inline-block;margin-right:.5em}.category-title[_ngcontent-%COMP%]{font-weight:700;margin-bottom:.35em;display:flex}.header-setting-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;flex-grow:1}ul[_ngcontent-%COMP%]{margin:0;margin-block:0;margin-block-start:0;margin-block-end:0;padding-inline-start:0}ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{text-align:left;padding-bottom:.2em}h4[_ngcontent-%COMP%]{text-transform:uppercase;margin:0}.btn-link[_ngcontent-%COMP%]{margin:0;color:#c8c8c8;display:inline-flex;align-items:center}.btn-link[_ngcontent-%COMP%]:hover{color:#fff}.button[_ngcontent-%COMP%]{color:inherit;background:transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:100%;pointer-events:auto;height:3em;margin:0 0 1em}.button[_ngcontent-%COMP%]:hover{background-color:#ffffff26}input[type=search][_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;border-radius:4px;padding:.5em .25em;outline:none;display:inline-block;pointer-events:auto;background:rgba(255,255,255,.15);margin:.5em 0 1em}select[_ngcontent-%COMP%]{-webkit-appearance:none;-moz-appearance:none;color:#dcdcdc;background:url(/assets/dropdown-arrow-light.svg) no-repeat right transparent;border:solid 1px rgba(255,255,255,.15);border-radius:4px;width:100%;padding:2px 1em;outline:none;display:inline-block;pointer-events:auto;margin-bottom:1em}.visibility-icon[_ngcontent-%COMP%]{margin:0 .25em}#skeleton-diameter[_ngcontent-%COMP%], #skeleton-diameter-default[_ngcontent-%COMP%]{flex:1}.slider-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin:0 0 .5em}.header-setting-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between}.header-setting-container.settings-open[_ngcontent-%COMP%]{margin-bottom:1em}.header-setting-container.settings-open[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]{opacity:.5}.settings-container[_ngcontent-%COMP%]{margin-bottom:1em}#points-input-container[_ngcontent-%COMP%]{display:flex;align-content:center;margin-bottom:1em}#points-input-container[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{margin:0 .25em 0 0}hr[_ngcontent-%COMP%]{border-top-style:none;opacity:.25;margin:1em 0}#config-status[_ngcontent-%COMP%]{background-color:#258618;border-radius:.5em;width:.7em;height:.7em;display:inline-block;margin-left:.5rem}#config-status.dirty[_ngcontent-%COMP%]{background-color:#c70000}#config-status.busy[_ngcontent-%COMP%]{animation:blinker .25s linear infinite}@keyframes blinker{50%{opacity:0}
1}","[_nghost-%COMP%]{background-color:#000;position:absolute;height:100%;width:100%;padding:0;margin:0}#zoom-extents-btn[_ngcontent-%COMP%]{position:absolute;right:1rem;bottom:1rem;font-size:1.5em;pointer-events:auto}.error-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin:auto;position:absolute;inset:0}"]}),r})()}];let ti=(()=>{class r{}return r.\u0275fac=function(e){return new(e||r)},r.\u0275mod=t.oAB({type:r}),r.\u0275inj=t.cJS({imports:[E.Bz.forChild(ei),E.Bz]}),r})();var ni=h(62559),ii=h(72407);let oi=(()=>{class r{}return r.\u0275fac=function(e){return new(e||r)},r.\u0275mod=t.oAB({type:r}),r.\u0275inj=t.cJS({providers:[N,W,p,Ee,Ie],imports:[w.ez,ti,P.u5,ni.m,ii.ThreeViewerModule,Pn]}),r})()},17445:(oe,Z,h)=>{h.d(Z,{F:()=>x});var w=h(34986),E=h(5963);function x(I=0,k=w.z){return I<0&&(I=0),(0,E.H)(I,I,k)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.