celldega 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "celldega",
3
- "version": "0.8.1",
3
+ "version": "0.8.2",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "dev": "npm run build -- --sourcemap=inline --watch",
@@ -1722,7 +1722,7 @@ ${g.stack}`:B}var HE=0,wM=new TextEncoder("utf-8"),gaA=typeof wM.encodeInto=="fu
1722
1722
  if(bool(picking.isActive)){
1723
1723
  widthPixels.xy += pickingLineWidthExtraPixels;
1724
1724
  }
1725
- `),{...A,inject:{...A.inject||{},"vs:#decl":(A.inject?.["vs:#decl"]||"").concat("uniform float pickingLineWidthExtraPixels;")}}}draw(A){super.draw({...A,uniforms:{...A.uniforms,pickingLineWidthExtraPixels:this.props.pickingLineWidthExtraPixels}})}};_n.defaultProps=CnA;_n.layerName="EditablePathLayer";var EnA=[0,0,0,153],inA=[0,0,0,144],onA=[0,0,0,255],tnA=[0,0,144,144],enA=[144,144,144,255],anA=[144,144,144,144],DnA=[192,0,0,255],snA=[0,0,0,128],rnA=[124,0,192,255],nnA=[255,255,255,255],cnA=5,GnA=3,wnA=7,hnA=32*$0,BV=fE;function wt(g){return!g||typeof g!="function"?g:A=>g(NnA(A))}function NnA(g){return g.__source?g.__source.object:g.sourceFeature?g.sourceFeature.feature:g}function IV(g){switch(g.properties.editHandleType){case"existing":return DnA;case"snap-source":return rnA;case"intermediate":default:return snA}}function knA(g){return nnA}function ynA(g){switch(g.properties.editHandleType){case"existing":return cnA;case"snap":return wnA;case"intermediate":default:return GnA}}var FnA={mode:BV,onEdit:()=>{},pickable:!0,pickingRadius:10,pickingDepth:5,fp64:!1,filled:!0,stroked:!0,lineWidthScale:$0,lineWidthMinPixels:1,lineWidthMaxPixels:Number.MAX_SAFE_INTEGER,pickingLineWidthExtraPixels:0,lineWidthUnits:"pixels",lineJointRounded:!1,lineCapRounded:!1,lineMiterLimit:4,pointRadiusScale:1,pointRadiusMinPixels:2,pointRadiusMaxPixels:Number.MAX_SAFE_INTEGER,getLineColor:(g,A,I)=>A?onA:EnA,getFillColor:(g,A,I)=>A?tnA:inA,getRadius:g=>g&&g.properties&&g.properties.radius||g&&g.properties&&g.properties.size||1,getLineWidth:g=>g&&g.properties&&g.properties.lineWidth||3,getTentativeLineColor:g=>enA,getTentativeFillColor:g=>anA,getTentativeLineWidth:g=>g&&g.properties&&g.properties.lineWidth||3,editHandleType:"point",editHandlePointRadiusScale:1,editHandlePointOutline:!0,editHandlePointStrokeWidth:2,editHandlePointRadiusUnits:"pixels",editHandlePointRadiusMinPixels:4,editHandlePointRadiusMaxPixels:8,getEditHandlePointColor:IV,getEditHandlePointOutlineColor:knA,getEditHandlePointRadius:ynA,editHandleIconAtlas:null,editHandleIconMapping:null,editHandleIconSizeScale:1,editHandleIconSizeUnits:"pixels",getEditHandleIcon:g=>g.properties.editHandleType,getEditHandleIconSize:10,getEditHandleIconColor:IV,getEditHandleIconAngle:0,billboard:!0},RnA={view:qC,modify:ho,translate:new Xn(new nt),transform:new Xn(new _0),scale:fe,rotate:ue,duplicate:Y0,split:S0,extrude:L0,elevation:H0,drawPoint:f0,drawLineString:u0,drawPolygon:fE,drawRectangle:Ks,drawSquare:x0,drawRectangleFromCenter:b0,drawSquareFromCenter:T0,drawCircleFromCenter:Z0,drawCircleByBoundingBox:P0,drawEllipseByBoundingBox:O0,drawRectangleUsing3Points:V0,drawEllipseUsing3Points:v0,draw90DegreePolygon:j0,drawPolygonByDragging:X0},ht=class extends zn{constructor(){super(...arguments);p(this,"state")}renderLayers(){let I=this.getSubLayerProps({id:"geojson",data:this.props.data,fp64:this.props.fp64,filled:this.props.filled,stroked:this.props.stroked,lineWidthScale:this.props.lineWidthScale,lineWidthMinPixels:this.props.lineWidthMinPixels,lineWidthMaxPixels:this.props.lineWidthMaxPixels,lineWidthUnits:this.props.lineWidthUnits,lineJointRounded:this.props.lineJointRounded,lineCapRounded:this.props.lineCapRounded,lineMiterLimit:this.props.lineMiterLimit,pointRadiusScale:this.props.pointRadiusScale,pointRadiusMinPixels:this.props.pointRadiusMinPixels,pointRadiusMaxPixels:this.props.pointRadiusMaxPixels,getLineColor:this.selectionAwareAccessor(this.props.getLineColor),getFillColor:this.selectionAwareAccessor(this.props.getFillColor),getPointRadius:this.selectionAwareAccessor(this.props.getRadius),getLineWidth:this.selectionAwareAccessor(this.props.getLineWidth),_subLayerProps:{linestrings:{billboard:this.props.billboard,updateTriggers:{all:[this.props.selectedFeatureIndexes,this.props.mode]}},"polygons-stroke":{billboard:this.props.billboard,pickingLineWidthExtraPixels:this.props.pickingLineWidthExtraPixels,type:_n,updateTriggers:{all:[this.props.selectedFeatureIndexes,this.props.mode]}}},updateTriggers:{getLineColor:[this.props.selectedFeatureIndexes,this.props.mode],getFillColor:[this.props.selectedFeatureIndexes,this.props.mode],getPointRadius:[this.props.selectedFeatureIndexes,this.props.mode],getLineWidth:[this.props.selectedFeatureIndexes,this.props.mode]}}),B=[new $t(I)];return B=B.concat(this.createGuidesLayers(),this.createTooltipsLayers()),B}initializeState(){super.initializeState(),this.setState({selectedFeatures:[],editHandles:[]})}shouldUpdateState(I){return super.shouldUpdateState(I)||I.changeFlags.stateChanged}updateState({props:I,oldProps:B,changeFlags:Q,context:C}){if(super.updateState({oldProps:B,props:I,changeFlags:Q,context:C}),Q.propsOrDataChanged&&(Object.keys(B).length===0||I.mode!==B.mode)){let e;if(typeof I.mode=="function"){let D=I.mode;e=new D}else typeof I.mode=="string"?(e=RnA[I.mode],console.warn("Deprecated use of passing `mode` as a string. Pass the mode's class constructor instead.")):e=I.mode;e||(console.warn(`No mode configured for ${String(I.mode)}`),e=new BV),e!==this.state.mode&&this.setState({mode:e,cursor:null})}let E=[];if(Array.isArray(I.selectedFeatureIndexes)&&typeof I.data=="object"&&"features"in I.data){let o=I.data;E=I.selectedFeatureIndexes.map(e=>o.features[e])}this.setState({selectedFeatures:E})}getModeProps(I){return{modeConfig:I.modeConfig,data:I.data,selectedIndexes:I.selectedFeatureIndexes,lastPointerMoveEvent:this.state.lastPointerMoveEvent,cursor:this.state.cursor,onEdit:B=>{this.setNeedsUpdate(),I.onEdit(B)},onUpdateCursor:B=>{this.setState({cursor:B})}}}selectionAwareAccessor(I){return typeof I!="function"?I:B=>I(B,this.isFeatureSelected(B),this.props.mode)}isFeatureSelected(I){return!this.props.data||!this.props.selectedFeatureIndexes||!this.props.selectedFeatureIndexes.length?!1:this.state.selectedFeatures.includes(I)}getPickingInfo({info:I,sourceLayer:B}){return B.id.endsWith("guides")&&(I.isGuide=!0),I}_updateAutoHighlight(I){if(I?.sourceLayer)if(I.isGuide)for(let B of I.sourceLayer.getSubLayers())B.updateAutoHighlight(I);else I.sourceLayer.updateAutoHighlight(I)}createGuidesLayers(){let B=this.getActiveMode().getGuides(this.getModeProps(this.props));if(!B||!B.features.length)return[];let Q={linestrings:{billboard:this.props.billboard,autoHighlight:!1},"polygons-fill":{autoHighlight:!1},"polygons-stroke":{billboard:this.props.billboard}};return this.props.editHandleType==="icon"?Q["points-icon"]={type:Fa,iconAtlas:this.props.editHandleIconAtlas,iconMapping:this.props.editHandleIconMapping,sizeUnits:this.props.editHandleIconSizeUnits,sizeScale:this.props.editHandleIconSizeScale,getIcon:wt(this.props.getEditHandleIcon),getSize:wt(this.props.getEditHandleIconSize),getColor:wt(this.props.getEditHandleIconColor),getAngle:wt(this.props.getEditHandleIconAngle),billboard:this.props.billboard}:Q["points-circle"]={type:BQ,radiusScale:this.props.editHandlePointRadiusScale,stroked:this.props.editHandlePointOutline,getLineWidth:this.props.editHandlePointStrokeWidth,radiusUnits:this.props.editHandlePointRadiusUnits,radiusMinPixels:this.props.editHandlePointRadiusMinPixels,radiusMaxPixels:this.props.editHandlePointRadiusMaxPixels,getRadius:wt(this.props.getEditHandlePointRadius),getFillColor:wt(this.props.getEditHandlePointColor),getLineColor:wt(this.props.getEditHandlePointOutlineColor),billboard:this.props.billboard},[new $t(this.getSubLayerProps({id:"guides",data:B,fp64:this.props.fp64,_subLayerProps:Q,lineWidthScale:this.props.lineWidthScale,lineWidthMinPixels:this.props.lineWidthMinPixels,lineWidthMaxPixels:this.props.lineWidthMaxPixels,lineWidthUnits:this.props.lineWidthUnits,lineJointRounded:this.props.lineJointRounded,lineCapRounded:this.props.lineCapRounded,lineMiterLimit:this.props.lineMiterLimit,getLineColor:wt(this.props.getTentativeLineColor),getLineWidth:wt(this.props.getTentativeLineWidth),getFillColor:wt(this.props.getTentativeFillColor),pointType:this.props.editHandleType==="icon"?"icon":"circle",iconAtlas:this.props.editHandleIconAtlas}))]}createTooltipsLayers(){let B=this.getActiveMode().getTooltips(this.getModeProps(this.props));return[new _t({getSize:hnA,...this.getSubLayerProps({id:"tooltips",data:B})})]}onLayerClick(I){this.getActiveMode().handleClick(I,this.getModeProps(this.props))}onLayerKeyUp(I){this.getActiveMode().handleKeyUp(I,this.getModeProps(this.props))}onStartDragging(I){this.getActiveMode().handleStartDragging(I,this.getModeProps(this.props))}onDragging(I){this.getActiveMode().handleDragging(I,this.getModeProps(this.props))}onStopDragging(I){this.getActiveMode().handleStopDragging(I,this.getModeProps(this.props))}onPointerMove(I){this.setState({lastPointerMoveEvent:I}),this.getActiveMode().handlePointerMove(I,this.getModeProps(this.props))}getCursor({isDragging:I}){if(this.state===null||this.state===void 0)return null;let{cursor:B}=this.state;return B||(B=I?"grabbing":"grab"),B}getActiveMode(){return this.state.mode}};p(ht,"layerName","EditableGeoJsonLayer"),p(ht,"defaultProps",FnA);var MnA=qC,lnA=9;var nwg={mode:MnA,...ht.defaultProps,data:[],selectedIndexes:[],filled:!1,stroked:!0,lineWidthScale:$0,lineWidthMinPixels:1,lineWidthMaxPixels:Number.MAX_SAFE_INTEGER,lineWidthUnits:"pixels",getHexagons:g=>g.hexIds,getEditedCluster:(g,A)=>A?{...A,hexIds:g}:{hexIds:g},resolution:lnA};var Tl={NONE:null,RECTANGLE:"rectangle",POLYGON:"polygon"},Mwg={[Tl.RECTANGLE]:Ks,[Tl.POLYGON]:fE},lwg={[Tl.RECTANGLE]:{dragToDraw:!0}},Jwg={selectionType:Tl.RECTANGLE,layerIds:[],onSelect:()=>{}};var JnA=g=>(g.features.forEach((A,I)=>{if(A.geometry.type==="Polygon"){let B=A.geometry.coordinates[0],Q=Math.abs(dJ(B));A.properties={...A.properties,area:Q,name:A.properties.name||`Feature ${I+1}`,color:A.properties.color||[Math.random()*255,Math.random()*255,Math.random()*255]}}else console.warn(`Feature ${I} is not a Polygon.`)}),g),Wl=g=>{Object.keys(g.model).length>0&&(g.model.set("region",{}),g.model.set("region",g.edit.feature_collection),g.model.save_changes())},Zl=(g,A,I)=>{g.edit.feature_collection=JnA(g.edit.feature_collection),g.edit.rgn_areas=g.edit.feature_collection.features.map((B,Q)=>({name:(Q+1).toString(),value:B.properties.area})).sort((B,Q)=>Q.value-B.value),g.edit.color_dict_rgn=g.edit.feature_collection.features.reduce((B,Q,C)=>(B[(C+1).toString()]=Q.properties.color,B),{}),ni(g.edit.svg_bar_rgn,g.edit.rgn_areas,g.edit.color_dict_rgn,Q0,[],A,I,g)},YnA=(g,A,I,B)=>{let{updatedData:Q,editType:C}=B;I.edit.feature_collection=Q,A.edit_layer=A.edit_layer.clone({data:I.edit.feature_collection}),C==="addFeature"&&(Pl(A,qC),LA(I.edit.buttons.sktch).style("color","gray").classed("active",!1),I.edit.mode="view",Ac(A,!0),$n(A,!0),A0(A,!0),Zl(I,g,A),Wl(I));let E=Qg(A,I.close_up);g.setProps({layers:E}),Zl(I,g,A),Wl(I)},KnA=(g,A,I,B)=>{if(g.featureType==="polygons"&&B.edit.mode==="view"){I.edit_layer=I.edit_layer.clone({id:"edit-layer-modify",mode:ho,selectedFeatureIndexes:[g.index],modeConfig:{dragToAddNew:!0,enableSnapping:!1}});let Q=Qg(I,B.close_up);A.setProps({layers:Q}),B.edit.mode="modify",B.edit.modify_index=g.index,LA(B.edit.buttons.del).classed("active",!0).style("display","inline-flex"),LA(B.edit.buttons.rgn).style("display","none"),LA(B.edit.buttons.sktch).style("display","none")}else if(g.featureType==="polygons"&&B.edit.mode==="modify"){I.edit_layer=I.edit_layer.clone({id:"edit-layer-view",mode:qC,selectedFeatureIndexes:[]});let Q=Qg(I,B.close_up);A.setProps({layers:Q}),B.edit.mode="view",B.edit.modify_index=null,LA(B.edit.buttons.del).classed("active",!1).style("display","none"),LA(B.edit.buttons.rgn).style("display","inline-flex"),LA(B.edit.buttons.sktch).style("display","inline-flex")}},QV=g=>new ht({id:"edit-layer",data:g.edit.feature_collection,selectedFeatureIndexes:[],mode:qC,filled:!0,pointRadiusMinPixels:2,pointRadiusScale:2e3,extruded:!0,getElevation:1e3,getFillColor:I=>I.properties.color,pickable:!0,autoHighlight:!0,modeConfig:{preventOverlappingLines:!0},visible:!1}),CV=(g,A,I)=>{A.edit_layer=A.edit_layer.clone({onEdit:B=>YnA(g,A,I,B)})},EV=(g,A,I)=>{A.edit_layer=A.edit_layer.clone({onClick:B=>KnA(B,g,A,I)})},Pl=(g,A)=>{g.edit_layer=g.edit_layer.clone({mode:A})},$S=(g,A)=>{g.edit_layer=g.edit_layer.clone({visible:A})};var iV=(g,A)=>new $t({id:"nbhd-layer",data:g.nbhd.feature_collection,pickable:!0,stroked:!1,filled:!0,getLineWidth:1,getFillColor:B=>Et(B.properties.color),opacity:.5,visible:A}),pnA=async(g,A,I,B,Q)=>{let C=g.object.properties.cat;AI(Q.cats,"cluster"),DI(Q.cats,[C]),CB(Q.genes,[]);let E=Q.cats.selected_cats.join("-");if(Q.genes.svg_bar_gene.selectAll("g").attr("font-weight","normal").attr("opacity",1),Q.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",Q.cats.reset_cat?1:.25),Q.cats.reset_cat)Q.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"});else{let e=Q.cats.svg_bar_cluster.selectAll("g").filter(function(){return LA(this).select("text").text()===C}).attr("opacity",1);if(!e.empty()){let D=e.node().getBoundingClientRect().top,r=Q.containers.bar_cluster.getBoundingClientRect().top,n=D-r+Q.containers.bar_cluster.scrollTop;Q.containers.bar_cluster.scrollTo({top:n,behavior:"smooth"})}}EB(B,E),dB(B,E),AL(Q),gL(Q,B);let o=Qg(B,Q.close_up);I.setProps({layers:o})},oV=(g,A,I)=>{A.nbhd_layer=A.nbhd_layer.clone({onClick:(B,Q)=>pnA(B,Q,g,A,I)})},AL=g=>{let A;g.cats.selected_cats.length===0?A=g.nbhd.ini_feature_collection.features.filter(I=>I.properties.inv_alpha===g.nbhd.inst_alpha):A=g.nbhd.ini_feature_collection.features.filter(I=>g.cats.selected_cats.includes(I.properties.cat)).filter(I=>I.properties.inv_alpha===g.nbhd.inst_alpha),g.nbhd.feature_collection={type:"FeatureCollection",features:A}},gL=(g,A)=>{console.log("update_nbhd_layer_data!!"),A.nbhd_layer=A.nbhd_layer.clone({data:g.nbhd.feature_collection})},tV=(g,A)=>{g.nbhd_layer=g.nbhd_layer.clone({visible:A})};var TB=(g,A,I)=>{LA(A.containers.image).selectAll(".img_layer_button").style("color",I?"blue":"gray"),A.img.image_layer_sliders.map(B=>Pa(B,I)),de(g,I)},IL=()=>{let g=document.createElement("div");return g.style.display="flex",g.style.flexDirection="row",g.style.border="1px solid #d3d3d3",g.className="ui_container",g.style.height="100px",g},eV=()=>{let g=document.createElement("div");return g.style.display="flex",g.style.flexDirection="row",g.className="ctrl_container",g.style.width="100%",g},ZC=(g,A,I=null)=>{let B=document.createElement("div");return B.className=g,B.style.display="flex",B.style.flexDirection=A,I!==null&&(B.style.height=I+"px",B.style.overflow="scroll"),B},AN=g=>{let A=document.createElement("div");return A.className=g,A.style.width="100%",A.style.marginLeft="2px",A.style.marginTop="2px",A},aV=(g,A,I)=>{let B=IL(),Q=ZC("button_container","column"),C=ZC("slider_container","column"),E=33,o=["col","row"],e=["clust","sum","var","ini"];o.forEach(r=>{let n=ZC(r,"row");LA(n).append("div").text(r.toUpperCase()).style("width",E+"px").style("height","20px").style("display","inline-flex").style("align-items","center").style("justify-content","center").style("text-align","center").style("cursor","pointer").style("font-size","12px").style("font-weight","bold").style("color","#47515b").style("border","3px solid").style("border-color","white").style("border-radius","12px").style("margin-top","5px").style("margin-left","5px").style("padding","4px 10px").style("user-select","none").style("font-family",'-apple-system, BlinkMacSystemFont, "San Francisco", "Helvetica Neue", Helvetica, Arial, sans-serif'),e.forEach(G=>{T8(n,G,G==="clust",E,r,g,A,I)}),Q.appendChild(n)}),I.dendro.sliders={},o.forEach(r=>{I.dendro.sliders[r]=document.createElement("input"),I.dendro.sliders[r].type="range",I.dendro.sliders[r].min="0",I.dendro.sliders[r].max="100",I.dendro.sliders[r].value=50,I.dendro.sliders[r].className="slider",I.dendro.sliders[r].style.width="75px"});let D=(r,n,G,w)=>{n.dendro.sliders[G+"_value"]=n.dendro.max_linkage_dist[G]*w.target.value/100,aU(n,G,n.dendro.sliders[G+"_value"]),DU(n,G),C0(n,G),x8(A,n,G),r.setProps({layers:tt(A)})};return o.forEach(r=>{I.dendro.sliders[r].addEventListener("input",n=>D(g,I,r,n))}),I.dendro.sliders.col.style.marginTop="5px",I.dendro.sliders.row.style.marginTop="20px",LA(C).append("div").text("DENDRO").style("width",E+"px").style("height","20px").style("display","inline-flex").style("align-items","center").style("justify-content","center").style("text-align","center").style("cursor","pointer").style("font-size","12px").style("font-weight","bold").style("color","#47515b").style("border","3px solid").style("border-color","white").style("border-radius","12px").style("margin-left","20px").style("user-select","none").style("font-family",'-apple-system, BlinkMacSystemFont, "San Francisco", "Helvetica Neue", Helvetica, Arial, sans-serif'),C.appendChild(I.dendro.sliders.col),C.appendChild(I.dendro.sliders.row),Q.style.marginTop="15px",C.style.marginTop="0px",C.style.marginLeft="10px",B.appendChild(Q),B.appendChild(C),B},DV=(g,A,I)=>{let B=IL(),Q=eV(),C=ZC("image_container","row"),E=ZC("tile_container","row"),o=AN("tile_slider_container");return Ue(C,"sst","IMG","blue",50,"button",g,A,I),Ue(E,"sst","TILE","blue",50,"button",g,A,I),I.sliders={},LM("tile",g,A,I),o.appendChild(I.sliders.tile),B.appendChild(Q),E.appendChild(o),EU("sst",g,A,I),Q.appendChild(C),Q.appendChild(E),Q.appendChild(I.genes.gene_search),B},sV=(g,A,I,B)=>{let Q=IL(),C=eV();B.containers.image=ZC("image_container","column");let E=ZC("img_layers_container","column",72);E.style.width="135px",E.style.border="1px solid #d3d3d3",E.style.marginTop="3px",E.style.marginLeft="2px",E.addEventListener("wheel",L=>{let{scrollTop:j,scrollHeight:m,clientHeight:$}=E,NA=j===0,wA=j+$===m;(NA&&L.deltaY<0||wA&&L.deltaY>0)&&L.preventDefault()});let o="115px",e=ZC("cell_container","column");e.style.width=o;let D=ZC("cell_ctrl_container","row");D.style.marginLeft="0px";let r=ZC("gene_container","column");r.style.marginTop="0px",r.style.width=o;let n=ZC("trx_container","row"),G=ZC("rgn_container","column");G.style.width=o;let w=ZC("rgn_ctrl_container","row");w.style.marginLeft="0px",w.style.height="22.5px";let k=AN("cell_slider_container"),F=AN("trx_slider_container"),h=ZC("image_layer_container","row");if(B.umap.has_umap===!0){let L,j;B.umap.state===!0?(L="blue",j="gray"):(L="gray",j="blue"),Ue(h,"ist","UMAP",L,35,"button",A,I,B),Ue(h,"ist","SPATIAL",j,50,"button",A,I,B)}Ue(h,"ist","IMG","blue",30,"button",A,I,B),B.containers.image.appendChild(h);let N=(L,j)=>L.image_layer_sliders.filter(m=>m.name===j),Y=(L,j)=>{let m=j.button_name,$=ZC("image_layer_container","row");$.style.height="21px",Ue($,"ist",m,"blue",75,"img_layer_button",A,I,B);let NA=AN(m),wA=N(L,m)[0],FA=f8(m,A,I,B),z=HM(FA,100);iU(wA,50,z),NA.appendChild(wA),$.appendChild(NA),E.appendChild($)};B.img.image_info.map(L=>Y(B.img,L)),Ue(D,"ist","CELL","blue",40,"button",A,I,B),Ue(n,"ist","TRX","blue",40,"button",A,I,B),B.containers.image.appendChild(E),B.sliders={},LM("cell",A,I,B),k.appendChild(B.sliders.cell),D.appendChild(k),B.containers.bar_cluster=fM(),uM(B.containers.bar_cluster,ls,B.cats.svg_bar_cluster,B.cats.cluster_counts,B.cats.color_dict_cluster,A,I,B),B.containers.bar_gene=fM(),uM(B.containers.bar_gene,B0,B.genes.svg_bar_gene,B.genes.gene_counts,B.genes.color_dict_gene,A,I,B),e.appendChild(D),e.appendChild(B.containers.bar_cluster),LM("trx",A,I,B),n.appendChild(F),F.appendChild(B.sliders.trx),r.appendChild(n),r.appendChild(B.containers.bar_gene),EU("ist",A,I,B),B.genes.gene_search.style.marginLeft="0px",Q.appendChild(C),C.appendChild(B.containers.image),C.appendChild(e),C.appendChild(r),B.genes.gene_search.style.width="160px",B.genes.gene_search.style.marginLeft="5px";let M=(L,j,m,$)=>{let NA=LA(L.currentTarget),wA=NA.classed("active");if($.edit.visible=!0,NA.classed("active",$.edit.visible).style("color","blue"),LA($.edit.buttons.rgn).style("color","blue").classed("active",!0),$S(m,$.edit.visible),wA===!1){NA.classed("active",!0).style("color","blue"),$.edit.mode="sktch",Pl(m,fE),Ac(m,!1),$n(m,!1),A0(m,!1);let FA=Qg(m,$.close_up);j.setProps({layers:FA})}else if(wA===!0){$.edit.mode="view",NA.classed("active",!1).style("color","gray"),Pl(m,qC),Ac(m,!0),$n(m,!0),A0(m,!0);let FA=Qg(m,$.close_up);j.setProps({layers:FA})}},l=(L,j,m,$)=>{let NA=LA(L.currentTarget);NA.classed("active")===!1?($.edit.visible=!0,NA.classed("active",$.edit.visible).style("color","blue"),LA($.edit.buttons.alph).style("display","none"),LA($.edit.buttons.sktch).style("display","inline-flex")):($.edit.visible=!1,NA.classed("active",$.edit.visible).style("color","gray"),LA($.edit.buttons.alph).style("display","inline-flex"),LA($.edit.buttons.sktch).style("display","none")),$S(m,$.edit.visible);let FA=Qg(m,$.close_up);j.setProps({layers:FA}),$.edit.rgn_areas=$.edit.feature_collection.features.map((JA,z)=>({name:(z+1).toString(),value:JA.properties.area})),$.edit.color_dict_rgn=$.edit.feature_collection.features.reduce((JA,z,kg)=>(JA[(kg+1).toString()]=z.properties.color,JA),{}),ni($.edit.svg_bar_rgn,$.edit.rgn_areas,$.edit.color_dict_rgn,Q0,[],j,m,$)},J=(L,j)=>(j>=0&&j<L.features.length&&L.features.splice(j,1),L),U=(L,j,m,$)=>{$.edit.feature_collection=J($.edit.feature_collection,$.edit.modify_index),m.edit_layer=m.edit_layer.clone({id:"edit-layer-delete",data:$.edit.feature_collection,mode:qC,selectedFeatureIndexes:[]});let NA=Qg(m,$.close_up);j.setProps({layers:NA}),LA($.edit.buttons.del).classed("active",!1).style("display","none"),LA($.edit.buttons.rgn).style("display","inline-flex"),LA($.edit.buttons.sktch).style("display","inline-flex"),Zl($,j,m),Wl($)},x=L=>{console.log("clicking nbhd bar",L)},q=(L,j,m,$)=>{let NA=LA(L.currentTarget);$.nbhd.visible===!0?($.nbhd.visible=!1,LA($.edit.buttons.alph).style("color","gray"),LA($.edit.buttons.rgn).style("display","inline-flex"),$.sliders.alph.style.display="none"):($.nbhd.visible=!0,LA($.edit.buttons.alph).style("color","blue"),LA($.edit.buttons.rgn).style("display","none"),$.sliders.alph.style.display="block"),tV(m,$.nbhd.visible),Za(m,$.nbhd.visible!==!0),de(m,$.nbhd.visible!==!0),Wa(m,$.nbhd.visible!==!0),Ac(m,$.nbhd.visible!==!0),$n(m,$.nbhd.visible!==!0);let wA=Qg(m,$.close_up,$.nbhd.visible);j.setProps({layers:wA}),$.nbhd.nbhd_areas=$.nbhd.feature_collection.features.map((FA,JA)=>({name:(JA+1).toString(),value:FA.properties.area})),console.log($.nbhd.color_dict_nbhd),ni($.edit.svg_bar_rgn,$.nbhd.nbhd_areas,$.cats.color_dict_cluster,x,[],j,m,$)};B.edit.buttons={},B.edit.mode="view",I0(A,I,B,w,"RGN",30,l),B.nbhd.alpha_nbhd===!0&&I0(A,I,B,w,"ALPH",30,q),I0(A,I,B,w,"SKTCH",40,M),LA(B.edit.buttons.sktch).style("display","none"),I0(A,I,B,w,"DEL",30,U);let P=AN("alph_slider_container"),Z=(L,j,m,$)=>{let NA=L.target.value/100,wA=Array.from(new Set($.nbhd.ini_feature_collection.features.map(JA=>JA.properties.inv_alpha))).sort((JA,z)=>JA-z),FA=wA[Math.round(NA*(wA.length-1))];if(FA!==$.nbhd.inst_alpha){console.log("Mapped inv_alpha:",FA),$.nbhd.inst_alpha=FA,AL($),gL($,m);let JA=Qg(m,$.close_up);j.setProps({layers:JA})}},X=Array.from(new Set(B.nbhd.ini_feature_collection.features.map(L=>L.properties.inv_alpha))).sort((L,j)=>L-j);return B.sliders.alph=document.createElement("input"),B.sliders.alph.type="range",B.sliders.alph.min="0",B.sliders.alph.max="100",B.sliders.alph.value=50,B.sliders.alph.className="slider",B.sliders.alph.style.width="75px",B.sliders.alph.addEventListener("input",L=>Z(L,A,I,B)),B.sliders.alph.style.display="none",w.appendChild(P),P.appendChild(B.sliders.alph),LA(B.edit.buttons.del).style("color","red").style("display","none"),B.containers.bar_rgn=fM(),B.containers.bar_rgn.style.marginLeft="0px",G.appendChild(w),G.appendChild(B.containers.bar_rgn),C.appendChild(G),C.appendChild(B.genes.gene_search),uM(B.containers.bar_rgn,Q0,B.edit.svg_bar_rgn,B.edit.rgn_areas,B.edit.color_dict_rgn,A,I,B),Q};var qnA=(g,A,I)=>{let B=g.polygon_cell_names[I.index],Q=g.dict_cell_cats[B],C;Q in g.color_dict_cluster?C=g.color_dict_cluster[Q]:C=[0,0,255];let E=g.selected_cats.length===0||g.selected_cats.includes(Q)?255:50;return[...C,E]},rV=g=>new Pi({id:"path-layer",data:[],pickable:!0,widthScale:3,widthMinPixels:1,getPath:I=>I,getColor:(I,B)=>qnA(g.cats,I,B),widthUnits:"pixels"}),dnA=(g,A,I,B,Q)=>{let C=Q.cats.polygon_cell_names[g.index],E=Q.cats.dict_cell_cats[C];AI(Q.cats,"cluster"),DI(Q.cats,[E]),CB(Q.genes,[]),TB(B,Q,!Q.cats.selected_cats.length>0);let o=Q.cats.selected_cats.join("-");EB(B,o),dB(B,o),CQ(Q.genes,B);let e=Qg(B,Q.close_up);I.setProps({layers:e})},nV=async(g,A,I,B)=>{let Q=await g8(g,A,B);I.path_layer=I.path_layer.clone({data:Q})},cV=(g,A,I)=>{A.path_layer=A.path_layer.clone({onClick:(B,Q)=>dnA(B,Q,g,A,I)})},Un=(g,A)=>{g.path_layer=g.path_layer.clone({visible:A})},dB=(g,A)=>{g.path_layer=g.path_layer.clone({id:"path-layer-"+A})},$n=(g,A)=>{g.path_layer=g.path_layer.clone({pickable:A})};var GV=(g,A)=>{let I=g.spatial.x_min,B=g.spatial.x_max,Q=g.spatial.y_min,C=g.spatial.y_max,E=B-I,o=C-Q,e=Math.min(E,o),D=(B-I)/2,r=(C-Q)/2,n=jE(A.map(J=>J.umap[0])),G=QC(A.map(J=>J.umap[0])),w=jE(A.map(J=>J.umap[1])),k=QC(A.map(J=>J.umap[1])),F=G-n,h=k-w;A.forEach(J=>{J.umap[0]=(J.umap[0]-n)/F*e,J.umap[1]=(J.umap[1]-w)/h*e}),n=jE(A.map(J=>J.umap[0])),G=QC(A.map(J=>J.umap[0])),w=jE(A.map(J=>J.umap[1])),k=QC(A.map(J=>J.umap[1]));let N=(G-n)/2,Y=(k-w)/2,M=D-N,l=r-Y;return A.forEach(J=>{J.umap[0]=J.umap[0]+M,J.umap[1]=J.umap[1]+l}),A};var UnA=async(g,A,I,B,Q)=>{let C="ontouchstart"in window||navigator.maxTouchPoints>0,E;C?E=Q.cats.cell_cats[g.index]:E=Q.tooltip_cat_cell,AI(Q.cats,"cluster"),DI(Q.cats,[E]),CB(Q.genes,[]);let o=Q.cats.selected_cats.join("-");if(Q.genes.svg_bar_gene.selectAll("g").attr("font-weight","normal").attr("opacity",1),Q.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",Q.cats.reset_cat?1:.25),Q.cats.reset_cat)Q.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"});else{let D=Q.cats.svg_bar_cluster.selectAll("g").filter(function(){return LA(this).select("text").text()===E}).attr("opacity",1);if(!D.empty()){let r=D.node().getBoundingClientRect().top,n=Q.containers.bar_cluster.getBoundingClientRect().top,G=r-n+Q.containers.bar_cluster.scrollTop;Q.containers.bar_cluster.scrollTo({top:G,behavior:"smooth"})}}EB(B,o),Q.umap.state===!1&&(TB(B,Q,!Q.cats.selected_cats.length>0),dB(B,o),CQ(Q.genes,B));let e=Qg(B,Q.close_up);I.setProps({layers:e}),Q.genes.gene_search_input.value="",WQ(Q.genes,"")},wV=async(g,A)=>{let I=g+"/cell_metadata.parquet";var B=await FQ(I,zg.fetch);if(Z4(A.cats,B),A.spatial.cell_scatter_data=qn(B),await W4(A.genes,g),P4(A.cats),A.cats.has_meta_cell)A.cats.cell_cats=A.cats.cell_names_array.map(k=>A.cats.meta_cell[k]);else{var Q=await FQ(g+"/cell_clusters/cluster.parquet",zg.fetch);O4(A.cats,Q,"cluster")}v4(A.cats);let C=B.getChild("name").toArray(),E=A.spatial.cell_scatter_data.attributes.getPosition.value;A.combo_data.cell=C.map((k,F)=>({name:k,cat:A.cats.dict_cell_cats[k],x:E[F*2],y:E[F*2+1]}));let o;if(A.umap.has_umap){let k;k=new Float64Array(A.cats.cell_names_array.flatMap(h=>{let N;return A.umap.umap[h]?N=A.umap.umap[h]:N=[0,0],N}));let F=A.spatial.cell_scatter_data.length;o=Array.from({length:F},(h,N)=>({position:[E[N*2],E[N*2+1]],umap:[k[N*2],k[N*2+1]]})),A.spatial.x_min=jE(o.map(h=>h.position[0])),A.spatial.x_max=QC(o.map(h=>h.position[0])),A.spatial.y_min=jE(o.map(h=>h.position[1])),A.spatial.y_max=QC(o.map(h=>h.position[1])),o=GV(A,o)}else{let k=A.spatial.cell_scatter_data.length;o=Array.from({length:k},(F,h)=>({position:[E[h*2],E[h*2+1]]})),A.spatial.x_min=jE(o.map(F=>F.position[0])),A.spatial.x_max=QC(o.map(F=>F.position[0])),A.spatial.y_min=jE(o.map(F=>F.position[1])),A.spatial.y_max=QC(o.map(F=>F.position[1]))}A.spatial.center_x=(A.spatial.x_max+A.spatial.x_min)/2,A.spatial.center_y=(A.spatial.y_max+A.spatial.y_min)/2,A.spatial.data_width=A.spatial.x_max-A.spatial.x_min,A.spatial.data_height=A.spatial.y_max-A.spatial.y_min;let e=A.root.clientWidth,D=A.root.clientHeight,r=A.root.clientWidth,n=A.containers.root_dim.height;A.spatial.scale_x=r/A.spatial.data_width,A.spatial.scale_y=n/A.spatial.data_height,A.spatial.scale=Math.min(A.spatial.scale_x,A.spatial.scale_y),A.spatial.ini_zoom=Math.log2(A.spatial.scale)*1.01,A.spatial.ini_x=A.spatial.center_x,A.spatial.ini_y=A.spatial.center_y,A.spatial.cell_scatter_data_objects=o;let G={getPosition:{duration:3e3,easing:qi}};return new BQ({id:"cell-layer",radiusMinPixels:1,getRadius:5,pickable:!0,getColor:(k,F)=>j4(A.cats,k,F),data:A.spatial.cell_scatter_data_objects,transitions:G,getPosition:k=>A.umap.state?k.umap:k.position,updateTriggers:{getPosition:[A.umap.state]}})},hV=(g,A,I)=>{A.cell_layer=A.cell_layer.clone({onClick:(B,Q)=>UnA(B,Q,g,A,I)})},W8=(g,A)=>{g.cell_layer=g.cell_layer.clone({visible:A})},u8=(g,A)=>{g.cell_layer=g.cell_layer.clone({getRadius:A})},EB=(g,A)=>{g.cell_layer=g.cell_layer.clone({id:"cell-layer-"+A})},Ac=(g,A)=>{g.cell_layer=g.cell_layer.clone({pickable:A})},eU=(g,A,I)=>{A.cell_layer=A.cell_layer.clone({updateTriggers:{getPosition:[I.umap.state]}});let B=Qg(A,I.close_up);g.setProps({layers:B})};var Ol=()=>[new oi({id:"ortho"})];var NV=(g,A,I,B,Q)=>{let C=Math.floor(g/Q),E=Math.floor(A/Q),o=Math.floor(I/Q),e=Math.floor(B/Q),D=[];for(let r=C;r<=E;r++)for(let n=o;n<=e;n++)D.push({tileX:r,tileY:n,name:r+"_"+n});return D};var Vl=async({height:g,width:A,zoom:I,target:B},Q,C,E)=>{let o=E.img.landscape_parameters.tile_size,e=50,D=Math.pow(2,I),[r,n]=B,G=A/(2*D),w=g/(2*D);E.bounds={},E.bounds.min_x=r-G,E.bounds.max_x=r+G,E.bounds.min_y=n-w,E.bounds.max_y=n+w;let k=Q.viewManager.getViewports();if(!k||k.length===0){console.error("No viewports available");return}let F=NV(E.bounds.min_x,E.bounds.max_x,E.bounds.min_y,E.bounds.max_y,o);if(F.length<e){await L8(E.global_base_url,F,C,E),await nV(E.global_base_url,F,C,E),E.close_up=!0;let M=E.combo_data.trx.filter(x=>x.x>=E.bounds.min_x&&x.x<=E.bounds.max_x&&x.y>=E.bounds.min_y&&x.y<=E.bounds.max_y).map(x=>x.name).reduce((x,q)=>{let P=x.find(Z=>Z.name===q);return P?P.value+=1:x.push({name:q,value:1}),x},[]).filter(x=>x.value>0).sort((x,q)=>q.value-x.value);ni(E.genes.svg_bar_gene,M,E.genes.color_dict_gene,B0,E.genes.selected_genes,Q,C,E),E.containers.bar_gene.scrollTo({top:0,behavior:"smooth"});let U=E.combo_data.cell.filter(x=>x.x>=E.bounds.min_x&&x.x<=E.bounds.max_x&&x.y>=E.bounds.min_y&&x.y<=E.bounds.max_y).map(x=>x.cat).reduce((x,q)=>{let P=x.find(Z=>Z.name===q);return P?P.value+=1:x.push({name:q,value:1}),x},[]).filter(x=>x.value>0).sort((x,q)=>q.value-x.value);ni(E.cats.svg_bar_cluster,U,E.cats.color_dict_cluster,ls,E.cats.selected_cats,Q,C,E),E.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"})}else E.close_up&&(E.close_up=!1,ni(E.genes.svg_bar_gene,E.genes.gene_counts,E.genes.color_dict_gene,B0,E.genes.selected_genes,Q,C,E),ni(E.cats.svg_bar_cluster,E.cats.cluster_counts,E.cats.color_dict_cluster,ls,E.cats.selected_cats,Q,C,E),E.containers.bar_gene.scrollTo({top:0,behavior:"smooth"}),E.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"}));let h=Qg(C,E.close_up);Q.setProps({layers:h})};var SnA=200,kV=HM(({viewState:g},A,I,B)=>(B.umap.state===!1&&Vl(g,A,I,B),typeof B.custom_callbacks.view_change=="function"&&B.custom_callbacks.view_change(g,B.close_up,I.trx_layer),g),SnA);var yV=(g,A)=>{if(A.index===-1||!A.layer)return null;let I="",B="",Q="";A.layer.id.startsWith("cell-layer")||A.layer.id.startsWith("path-layer")?(B=A.layer.id.startsWith("cell-layer")?g.cats.cell_names_array[A.index]:g.cats.polygon_cell_names[A.index],Q=g.cats.dict_cell_cats[B],I=`<div>cell: ${B}</div><div>cluster: ${Q}</div>`,g.tooltip_cat_cell=Q):A.layer.id.startsWith("trx-layer")?(B=g.genes.trx_names_array[A.index],I=`<div>transcript: ${B}</div>`):A.layer.id.startsWith("nbhd-layer")&&(B=g.nbhd.feature_collection.features[A.index].properties.name,Q=g.nbhd.feature_collection.features[A.index].properties.cat,I=`<div>neighborhood: ${B}</div><div>cluster: ${Q}</div>`);let C=g.root.querySelector(".deck-tooltip");C.style.marginTop="50px";let E=C.parentElement.parentElement;return E.style.position="unset",{html:I}};var LnA=({isDragging:g})=>g?"grabbing":"pointer",FV=(g,A,I)=>new Na({parent:g,controller:{doubleClickZoom:!1},getCursor:LnA,width:A,height:I}),RV=(g,A)=>{g.setProps({views:A})},MV=(g,A)=>{g.setProps({getTooltip:I=>yV(A,I)})},lV=(g,A,I)=>{g.setProps({onViewStateChange:B=>{kV(B,g,A,I)}})},JV=(g,A,I,B,Q,C)=>{A===0&&I===0&&Q===0&&(A=C.spatial.center_x,I=C.spatial.center_y,Q=C.spatial.ini_zoom);let E={target:[A,I,B],zoom:Q};g.setProps({initialViewState:E})};var YV=(g,A)=>{g.image_format=A},KV=(g,A)=>{g.image_info=A},pV=(g,A)=>{A.forEach(I=>{g[I.button_name]=I.color})};var vl=async(g,A)=>{let I=await FQ(A+"/meta_gene.parquet",zg.fetch),B=I.getChild("__index_level_0__").toArray(),Q=I.getChild("mean").toArray(),C=I.getChild("std").toArray(),E=I.getChild("max").toArray();B.forEach((o,e)=>{g.meta_gene[o]={mean:Q[e],std:C[e],max:E[e]},g.gene_counts.push({name:o,value:Number(Q[e])})}),g.gene_counts.sort((o,e)=>e.value-o.value),g.gene_names=g.gene_counts.map(o=>o.name)};var qV=(g,A)=>{g.color_dict_cluster=A.color;for(let B in g.color_dict_cluster)g.color_dict_cluster[B]=Et(g.color_dict_cluster[B]);var I=A.count;g.cluster_counts=[];for(let B in I)g.cluster_counts.push({name:B,value:I[B]});g.cluster_counts.sort((B,Q)=>Q.value-B.value)},dV=async g=>{if(g.cats.has_meta_cluster){for(let I in g.cats.meta_cluster)g.cats.color_dict_cluster[I]=Et(g.cats.meta_cluster[I].color);for(let I in g.cats.meta_cluster)g.cats.cluster_counts.push({name:I,value:g.cats.meta_cluster[I].count})}else{let I=g.global_base_url+"/cell_clusters/meta_cluster.parquet";var A=await FQ(I,zg.fetch);let B=[],Q=[],C=[],E=A.getChild("__index_level_0__"),o=A.getChild("color"),e=A.getChild("count"),D=[];for(let r of A.schema.fields)D.push(r.name);E&&o&&(B=E.toArray(),Q=o.toArray(),C=e.toArray()),B.forEach((r,n)=>{g.cats.color_dict_cluster[r]=Et(Q[n]),g.cats.cluster_counts.push({name:r,value:Number(C[n])})})}g.cats.cluster_counts.sort((I,B)=>B.value-I.value)};var UV=async(g,A,I)=>{let B=I.model.get("update_trigger"),Q,C;try{if(B.type==="row_label"){Q=B.value.name;let E=Q===I.cats.cat?"cluster":Q;I.umap.state===!1&&TB(A,I,I.cats.cat===Q),AI(I.cats,E),CB(I.genes,[Q]),DI(I.cats,[]),await ot(I.cats,I.genes,I.global_base_url,Q),EB(A,E),dB(A,E),CQ(I.genes,A);let o=Qg(A,I.close_up);g.setProps({layers:o});let e=!1;if(I.genes.svg_bar_gene.selectAll("g").attr("font-weight","normal").attr("opacity",e?1:.25),!e){let D=I.genes.svg_bar_gene.selectAll("g").filter(function(){return LA(this).select("text").text()===Q}).attr("opacity",1);if(!D.empty()){let r=D.node().getBoundingClientRect().top,n=I.containers.bar_gene.getBoundingClientRect().top,G=r-n+I.containers.bar_gene.scrollTop;I.containers.bar_gene.scrollTo({top:G,behavior:"smooth"})}}I.genes.gene_search_input.value=I.genes.gene_search_input.value!==Q?Q:"",WQ(I.genes,Q)}else if(B.type==="col_label"){Q="cluster",C=B.value.name,AI(I.cats,"cluster"),DI(I.cats,[C]),CB(I.genes,[]),I.umap.state===!1&&TB(A,I,!I.cats.selected_cats.length>0);let E=I.cats.selected_cats.join("-");EB(A,E),dB(A,E),CQ(I.genes,A);let o=Qg(A,I.close_up);g.setProps({layers:o}),I.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",I.cats.reset_cat?1:.25);let e=C;if(!I.cats.reset_cat){let D=I.cats.svg_bar_cluster.selectAll("g").filter(function(){return LA(this).select("text").text()===e}).attr("opacity",1);if(!D.empty()){let r=D.node().getBoundingClientRect().top,n=I.containers.bar_cluster.getBoundingClientRect().top,G=r-n+I.containers.bar_cluster.scrollTop;I.containers.bar_cluster.scrollTo({top:G,behavior:"smooth"})}}}else if(B.type==="col_dendro"){Q="cluster",Q="cluster";let E=B.value.selected_names;AI(I.cats,"cluster"),DI(I.cats,E),CB(I.genes,[]),I.umap.state===!1&&TB(A,I,!I.cats.selected_cats.length>0);let o=I.cats.selected_cats.join("-");EB(A,o),dB(A,o),CQ(I.genes,A);let e=Qg(A,I.close_up);g.setProps({layers:e}),I.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",I.cats.reset_cat?1:.25);let D=E;if(!I.cats.reset_cat){let r=I.cats.svg_bar_cluster.selectAll("g").filter(function(){return LA(this).select("text").text()===D}).attr("opacity",1);if(!r.empty()){let n=r.node().getBoundingClientRect().top,G=I.containers.bar_cluster.getBoundingClientRect().top,w=n-G+I.containers.bar_cluster.scrollTop;I.containers.bar_cluster.scrollTo({top:w,behavior:"smooth"})}}AI(I.cats,Q),DI(I.cats,B.click_value)}}catch(E){console.error(E)}};var SV=(g,A,I)=>{let B=I.model.get("cell_clusters");qV(I.cats,B.meta_cluster),V4(I.cats,B.new_clusters),EB(A,"cluster");let Q=Qg(A,I.close_up);g.setProps({layers:Q}),I.combo_data.cell=I.combo_data.cell.map(C=>({...C,cat:I.cats.dict_cell_cats[C.name]})),ni(I.cats.svg_bar_cluster,I.cats.cluster_counts,I.cats.color_dict_cluster,ls,[],g,A,I)};var HnA=(g,A,I)=>{if(g.size>=20){let Q=g.keys().next().value;g.delete(Q)}g.set(A,I)},fnA=(g,A)=>{let I=g.get(A);return I&&(g.delete(A),g.set(A,I)),I},unA=g=>{g.clear()},BL=()=>{let g=new Map;return{set:(A,I)=>HnA(g,A,I),get:A=>fnA(g,A),clear:()=>unA(g)}};var QL=async(g,A,I,B,Q,C,E,o,e="",D=.25,r=0,n=800,G={},w={},k={},F="spatial",h=null)=>{r===0&&(r="100%");let N={};if(N.root=g,N.buttons={},N.buttons.blue="#8797ff",N.buttons.gray="gray",N.buttons.light_gray="#EEEEEE",N.buttons.buttons={},mN(N,o),N.close_up=!1,N.model=A,N.nbhd={},N.nbhd.visible=!1,N.spatial={},Object.keys(N.model).length!==0)if(Object.keys(N.model.get("nbhd")).length===0)N.nbhd.alpha_nbhd=!1,N.nbhd.ini_feature_collection={type:"FeatureCollection",features:[],inst_alpha:null},N.nbhd.feature_collection=N.nbhd.ini_feature_collection;else{N.nbhd.alpha_nbhd=!0,N.nbhd.ini_feature_collection=N.model.get("nbhd"),N.nbhd.inst_alpha=N.nbhd.ini_feature_collection.inst_alpha;let wA=N.nbhd.ini_feature_collection.features.filter(FA=>FA.properties.inv_alpha===N.nbhd.inst_alpha);N.nbhd.feature_collection={type:"FeatureCollection",features:wA}}else N.nbhd.alpha_nbhd=!1,N.nbhd.ini_feature_collection={type:"FeatureCollection",features:[],inst_alpha:null},N.nbhd.feature_collection=N.nbhd.ini_feature_collection;N.containers={},N.containers.root_dim={},N.containers.root_dim.width=r,N.containers.root_dim.height=n,N.custom_callbacks={},N.custom_callbacks.view_change=h,N.cats={},N.cats.cat,N.cats.reset_cat=!1,N.cats.selected_cats=[],N.cats.cell_cats=[],N.cats.dict_cell_cats={},N.cats.color_dict_cluster={},N.cats.cluster_counts=[],N.cats.polygon_cell_names=[],N.cats.svg_bar_cluster=ze("svg"),Object.keys(G).length===0?N.cats.has_meta_cell=!1:N.cats.has_meta_cell=!0,N.cats.meta_cell=G,Object.keys(w).length===0?N.cats.has_meta_cluster=!1:N.cats.has_meta_cluster=!0,N.cats.meta_cluster=w,N.umap={},Object.keys(k).length===0?N.umap.has_umap=!1:N.umap.has_umap=!0,N.umap.umap=k,F==="spatial"?N.umap.state=!1:F==="umap"&&(N.umap.state=!0),console.log(F),console.log("viz_state.umap.state",N.umap.state),N.genes={},N.genes.color_dict_gene={},N.genes.gene_names=[],N.genes.meta_gene={},N.genes.gene_counts=[],N.genes.selected_genes=[],N.genes.trx_ini_radius=D,N.genes.trx_names_array=[],N.genes.trx_data=[],N.genes.gene_text_box="",N.genes.trx_slider=document.createElement("input"),N.genes.gene_search=document.createElement("div"),N.genes.svg_bar_gene=ze("svg"),N.cats.cell_exp_array=[],N.cats.cell_names_array=[],N.cats.cell_name_to_index_map=new Map,N.img={},N.img.image_layer_colors={},N.img.image_layer_sliders={},uN(I);let Y="dapi";await xN(N.img,o);let M=N.img.landscape_parameters.image_info;YV(N.img,N.img.landscape_parameters.image_format),KV(N.img,M),H8(N.img),pV(N.img.image_layer_colors,N.img.image_info);let l=document.createElement("div");l.style.height=n+"px",l.style.border="1px solid #d3d3d3",await bN(N,o,Y),await vl(N.genes,o),await dV(N),N.views=Ol();let J=await FV(l,r,n);RV(J,N.views),N.cache={},N.cache.cell=await BL(),N.cache.trx=await BL(),N.combo_data={},N.tooltip_cat_cell="",MV(J,N),N.edit={},N.edit.svg_bar_rgn=ze("svg"),N.edit.rgn_areas=[],N.edit.color_dict_rgn={},N.edit.rgn_opacity=.75,N.edit.visible=!1,N.edit.modify_index=null,Object.keys(N.model).length!==0?Object.keys(N.model.get("region")).length===0?N.edit.feature_collection={type:"FeatureCollection",features:[]}:N.edit.feature_collection=N.model.get("region"):N.edit.feature_collection={type:"FeatureCollection",features:[]};let U=K8(N),x=await l8(N),q=await wV(o,N),P=await rV(N),Z=U8(N.genes),X=QV(N),L=iV(N,!1),j={background_layer:U,image_layers:x,cell_layer:q,path_layer:P,trx_layer:Z,edit_layer:X,nbhd_layer:L};hV(J,j,N),cV(J,j,N),S8(J,j,N),CV(J,j,N),EV(J,j,N),oV(J,j,N),SM(j,D),N.umap.state===!0&&(Wa(j,!1),de(j,!1),Za(j,!1),Un(j,!1));let m=Qg(j,N.close_up);JV(J,B,Q,C,E,N),J.setProps({layers:m}),lV(J,j,N),Object.keys(N.model).length>0&&(N.model.on("change:update_trigger",()=>UV(J,j,N)),N.model.on("change:cell_clusters",()=>SV(J,j,N)));let $=sV(e,J,j,N);return g.appendChild($),g.appendChild(l),{update_matrix_gene:async wA=>{let FA=wA===N.cats.cat,JA=FA?"cluster":wA;if(FA)N.containers.bar_gene.scrollTo({top:0,behavior:"smooth"});else{let kg=N.genes.svg_bar_gene.selectAll("g").filter(function(){let Yg=LA(this).select("text").node();return Yg&&Yg.textContent===wA}).attr("opacity",1);if(!kg.empty()){let Yg=kg.node().getBoundingClientRect().top,sI=N.containers.bar_gene.getBoundingClientRect().top,bA=Yg-sI+N.containers.bar_gene.scrollTop;N.genes.svg_bar_gene.attr("opacity",1),N.containers.bar_gene.scrollTo({top:bA,behavior:"smooth"})}}N.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",1),TB(j,N,N.cats.cat===wA),AI(N.cats,JA),CB(N.genes,[wA]),DI(N.cats,[]),await ot(N.cats,N.genes,N.global_base_url,wA),EB(j,JA),dB(j,JA),CQ(N.genes,j);let z=Qg(j,N.close_up);J.setProps({layers:z}),N.genes.gene_search_input.value=N.genes.gene_search_input.value!==wA?wA:"",WQ(N.genes,FA?"":wA)},update_matrix_col:async wA=>{if(N.genes.svg_bar_gene.selectAll("g").attr("font-weight","normal").attr("opacity",1),N.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",N.cats.reset_cat?1:.25),N.cats.reset_cat)N.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"});else{let z=N.cats.svg_bar_cluster.selectAll("g").filter(function(){return LA(this).select("text").text()===wA}).attr("opacity",1);if(!z.empty()){let kg=z.node().getBoundingClientRect().top,Yg=N.containers.bar_cluster.getBoundingClientRect().top,sI=kg-Yg+N.containers.bar_cluster.scrollTop;N.containers.bar_cluster.scrollTo({top:sI,behavior:"smooth"})}}AI(N.cats,"cluster"),DI(N.cats,[wA]),CB(N.genes,[]),TB(j,N,!N.cats.selected_cats.length>0);let FA=N.cats.selected_cats.join("-");EB(j,FA),dB(j,FA),CQ(N.genes,j);let JA=Qg(j,N.close_up);J.setProps({layers:JA}),N.genes.gene_search_input.value="",WQ(N.genes,"")},update_matrix_dendro_col:async wA=>{let FA=wA;AI(N.cats,"cluster"),DI(N.cats,FA),CB(N.genes,[]),TB(j,N,!N.cats.selected_cats.length>0);let JA=N.cats.selected_cats.join("-");EB(j,JA),dB(j,JA),CQ(N.genes,j);let z=Qg(j,N.close_up);J.setProps({layers:z}),N.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",N.cats.reset_cat?1:.25);let kg=FA;if(!N.cats.reset_cat){let Yg=N.cats.svg_bar_cluster.selectAll("g").filter(function(){return LA(this).select("text").text()===kg}).attr("opacity",1);if(!Yg.empty()){let sI=Yg.node().getBoundingClientRect().top,bA=N.containers.bar_cluster.getBoundingClientRect().top,SB=sI-bA+N.containers.bar_cluster.scrollTop;N.containers.bar_cluster.scrollTo({top:SB,behavior:"smooth"})}}},update_view_state:async(wA,FA,JA)=>{N.close_up=FA,Vl(wA,J,j,N);let z=Qg(j,N.close_up);J.setProps({controller:{doubleClickZoom:!1},initialViewState:wA,views:N.views,layers:z})},update_layers:()=>{console.log("update_layers")},finalize:()=>{J.finalize()}}};var LV=(g,A)=>{g.tile_scatter_data=A};var HV=(g,A)=>{g.tile_names_array=A},fV=g=>{g.tile_name_to_index_map=new Map,g.tile_names_array.forEach((A,I)=>{g.tile_name_to_index_map.set(A,I)})};var uV=async g=>{let A={},I=g+"/df_colors.parquet";var B=await FQ(I,zg.fetch);let Q=[],C=[],E=B.getChild("__index_level_0__"),o=B.getChild("color");return E&&o&&(Q=E.toArray(),C=o.toArray()),Q.forEach((e,D)=>{A[String(e)]=Et(C[D])}),A};var mV=async(g,A,I)=>{let B=I.model.get("update_trigger"),Q;B.click_type==="row-label"?(Q=B.click_value,AI(I.cats,Q),await dM(I,Q)):B.click_type==="col-label"?(AI(I.cats,"cluster"),DI(I.cats,[B.click_value])):B.click_type==="col-dendro"?(AI(I.cats,"cluster"),DI(I.cats,B.click_value)):AI("cluster"),$h(I,A),g.setProps({layers:[A.simple_image_layer,A.square_scatter_layer]}),Q&&Q!=="cluster"&&(I.genes.gene_search_input.value=I.genes.gene_search_input.value!==Q?Q:"",await WQ(I.genes,Q))};var xV=(g,A)=>{if(g.index===-1||!g.layer)return null;let I=A.cats.tile_cats_array[g.index];return A.tooltip_cat_cell=I,DJ(".deck-tooltip").style("margin-top","75px"),{html:`<div>${I}</div?`}};var CL=async(g,A,I,B,Q,C,E,o,e=1.4,D="",r=0,n=800)=>{r===0&&(r="100%");let G=document.createElement("div");G.style.height=" 800px";let w={};uN(B),mN(w,I),w.model=g,w.img={},w.img.image_layer_colors={},w.img.image_layer_sliders={},await xN(w.img,I),await bN(w,I,"cells"),w.genes={},w.genes.color_dict_gene={},w.genes.gene_names=[],w.genes.meta_gene={},w.genes.gene_counts=[],w.genes.selected_genes=[],w.genes.trx_ini_radius=1,w.genes.trx_names_array=[],w.genes.trx_data=[],w.genes.gene_text_box="",w.genes.trx_slider=document.createElement("input"),w.genes.gene_search=document.createElement("div"),w.genes.svg_bar_gene=ze("svg"),w.cats={},w.cats.cat="cluster",w.cats.reset_cat=!1,w.cats.selected_cats=[],w.cats.cell_cats=[],w.cats.dict_cell_cats={},w.cats.color_dict_cluster={},w.cats.cluster_counts=[],w.cats.polygon_cell_names=[],w.cats.svg_bar_cluster=ze("svg"),w.tooltip_cat_tile="",w.cats.square_tile_size=e,await vl(w.genes,I);let k={name:"cells",color:[0,0,255]},F=I+"/tile_geometries.parquet";var h=await FQ(F,zg.fetch);w.cats.tile_cats_array=h.getChild("cluster").toArray(),w.cats.tile_exp_array=[],w.cats.tile_names_array=[],w.cats.tile_scatter_data=[],LV(w.cats,qn(h)),HV(w.cats,h.getChild("name").toArray()),fV(w.cats),w.cats.tile_color_dict=await uV(I);let N=await h8(w,k),Y=y8(w.cats),M={simple_image_layer:N,square_scatter_layer:Y};w.views=Ol();let l=k8(G,r,n),J={target:[Q,C,E],zoom:o};l.setProps({views:w.views,layers:[M.simple_image_layer,M.square_scatter_layer],getTooltip:x=>xV(x,w),initialViewState:J}),Object.keys(w.model).length>0&&w.model.on("change:update_trigger",()=>mV(l,M,w)),M8(l,M,w);let U=DV(l,M,w);return A.appendChild(U),A.appendChild(G),()=>l.finalize()};var mnA=({isDragging:g})=>g?"grabbing":"pointer",bV=(g,A,I)=>(typeof A=="number"&&(A=A+100,I=I+100),new Na({parent:g,getCursor:mnA,width:A,height:I}));var TV=(g,A)=>{let I;g.mat.forEach((B,Q)=>{B.forEach((C,E)=>{C>=0?I=[255,0,0]:I=[0,0,255];let o={position:[A.viz.col_offset*(E+.5),A.viz.row_offset*(Q+1.5)],color:[I[0],I[1],I[2],255*Math.abs(C)/A.mat.max_abs_value],value:C,row:Q,col:E};A.mat.mat_data.push(o)})})};var WV=(g,A,I,B,Q,C,E,o)=>{let e={};return e.root=I,e.model=g,e.custom_callbacks={},e.custom_callbacks.row=C,e.custom_callbacks.col=E,e.custom_callbacks.col_dendro=o,e.viz={},e.viz.height_margin=100,e.cats={},e.cats.num_cats={},e.cats.num_cats.row=0,e.cats.num_cats.col=0,e.root.style.height=Q+e.viz.height_margin+"px",e.viz.mat_width=B,e.viz.mat_height=Q,e.mat={},e.mat.num_rows=A.mat.length,e.mat.num_cols=A.mat[0].length,e.row_nodes=A.row_nodes,e.col_nodes=A.col_nodes,e.mat.net_mat=A.mat,e.linkage=A.linkage,e.viz.base_font_size=125,e.viz.col_label=75,e.viz.row_label=75,e.viz.extra_space={},e.viz.extra_space.row=10,e.viz.extra_space.col=10,e.zoom={},e.zoom.ini_zoom_x=0,e.zoom.ini_zoom_y=0,e.viz.row_cat_width=9,e.viz.col_cat_height=9,e.viz.row_cat_offset=10,e.viz.col_cat_offset=10,e.viz.label_row_x=15,e.viz.label_col_y=25,e.viz.cat_shift_row=30,e.viz.label_buffer=1,e.animate={},e.animate.duration=2500,e.viz.dendrogram_width=15,e.viz.font_size={},e.viz.font_size.rows=e.viz.base_font_size/e.mat.num_rows,e.viz.font_size.cols=e.viz.base_font_size/e.mat.num_cols,e.viz.col_region=(e.viz.col_cat_height+e.viz.extra_space.col)*e.cats.num_cats.col+e.viz.col_label,e.viz.row_region=(e.viz.row_cat_width+e.viz.extra_space.row)*e.cats.num_cats.row+e.viz.row_label,e.viz.col_width=e.viz.mat_width/e.mat.num_cols,e.viz.row_offset=e.viz.mat_height/e.mat.num_rows,e.viz.col_offset=e.viz.mat_width/e.mat.num_cols,e.viz.cat_shift_col=e.viz.col_label,e.zoom.ini_pan_x=e.viz.mat_width/2,e.zoom.ini_pan_y=e.viz.mat_height/2+e.viz.row_offset,e.mat.mat_data=[],e.mat.num_rows=A.mat.length,e.mat.num_cols=A.mat[0].length,e.mat.max_abs_value=A.mat.flat().reduce((D,r)=>Math.max(D,Math.abs(r)),-1/0),e.order={},e.order.current={},e.order.current.row="clust",e.order.current.col="clust",e.order.new="ini",e.buttons={},e.buttons.blue="#8797ff",e.buttons.gray="#EEEEEE",e.click={},e.click.type,e.click.value,e};var ZV=(g,A)=>{let I=[];g.col_nodes.forEach((B,Q)=>{let C={name:B.name,ini:B.ini,clust:B.clust,rank:B.rank,rankvar:B.rankvar,index:Q};I.push(C)}),A.labels.col_label_data=I,A.labels.clicks.col=0,A.mat.orders.col={},A.mat.orders.col.ini=I.map(B=>B.ini),A.mat.orders.col.clust=I.map(B=>B.clust+1),A.mat.orders.col.rank=I.map(B=>B.rank+1),A.mat.orders.col.rankvar=I.map(B=>B.rankvar+1)},PV=(g,A)=>{let I=[];g.row_nodes.forEach((B,Q)=>{let C={name:B.name,ini:B.ini,clust:B.clust,rank:B.rank,rankvar:B.rankvar,index:Q};I.push(C)}),A.labels.row_label_data=I,A.labels.clicks.row=0,A.mat.orders.row={},A.mat.orders.row.ini=I.map(B=>B.ini),A.mat.orders.row.clust=I.map(B=>B.clust+1),A.mat.orders.row.rank=I.map(B=>B.rank+1),A.mat.orders.row.rankvar=I.map(B=>B.rankvar+1)};var OV=(g,A)=>{var I=0;let B=0;var Q=A.mat.num_rows*A.cats.num_cats.row;return new Array(Q).fill(0).map(()=>{var E=B%A.cats.num_cats.row;B%A.cats.num_cats.row===0&&(I+=1);let o={position:[A.viz.row_cat_offset*(E+.5)+20,A.viz.row_offset*(I+.5)],color:[0,255,0,255],name:"something "+I};return B+=1,o})},VV=(g,A)=>{var I=A.mat.num_cols*A.cats.num_cats.col,B=0;let Q=0;return new Array(I).fill(0).map(()=>{var E=Q%A.mat.num_cols;Q%A.mat.num_cols===0&&(B+=1);let o={position:[A.viz.col_offset*(E+.5),A.viz.col_cat_offset*(B+1.5)-35],color:[0,255,0,150],name:"some column "+E};return Q+=1,o})};var vV=`#version 300 es
1725
+ `),{...A,inject:{...A.inject||{},"vs:#decl":(A.inject?.["vs:#decl"]||"").concat("uniform float pickingLineWidthExtraPixels;")}}}draw(A){super.draw({...A,uniforms:{...A.uniforms,pickingLineWidthExtraPixels:this.props.pickingLineWidthExtraPixels}})}};_n.defaultProps=CnA;_n.layerName="EditablePathLayer";var EnA=[0,0,0,153],inA=[0,0,0,144],onA=[0,0,0,255],tnA=[0,0,144,144],enA=[144,144,144,255],anA=[144,144,144,144],DnA=[192,0,0,255],snA=[0,0,0,128],rnA=[124,0,192,255],nnA=[255,255,255,255],cnA=5,GnA=3,wnA=7,hnA=32*$0,BV=fE;function wt(g){return!g||typeof g!="function"?g:A=>g(NnA(A))}function NnA(g){return g.__source?g.__source.object:g.sourceFeature?g.sourceFeature.feature:g}function IV(g){switch(g.properties.editHandleType){case"existing":return DnA;case"snap-source":return rnA;case"intermediate":default:return snA}}function knA(g){return nnA}function ynA(g){switch(g.properties.editHandleType){case"existing":return cnA;case"snap":return wnA;case"intermediate":default:return GnA}}var FnA={mode:BV,onEdit:()=>{},pickable:!0,pickingRadius:10,pickingDepth:5,fp64:!1,filled:!0,stroked:!0,lineWidthScale:$0,lineWidthMinPixels:1,lineWidthMaxPixels:Number.MAX_SAFE_INTEGER,pickingLineWidthExtraPixels:0,lineWidthUnits:"pixels",lineJointRounded:!1,lineCapRounded:!1,lineMiterLimit:4,pointRadiusScale:1,pointRadiusMinPixels:2,pointRadiusMaxPixels:Number.MAX_SAFE_INTEGER,getLineColor:(g,A,I)=>A?onA:EnA,getFillColor:(g,A,I)=>A?tnA:inA,getRadius:g=>g&&g.properties&&g.properties.radius||g&&g.properties&&g.properties.size||1,getLineWidth:g=>g&&g.properties&&g.properties.lineWidth||3,getTentativeLineColor:g=>enA,getTentativeFillColor:g=>anA,getTentativeLineWidth:g=>g&&g.properties&&g.properties.lineWidth||3,editHandleType:"point",editHandlePointRadiusScale:1,editHandlePointOutline:!0,editHandlePointStrokeWidth:2,editHandlePointRadiusUnits:"pixels",editHandlePointRadiusMinPixels:4,editHandlePointRadiusMaxPixels:8,getEditHandlePointColor:IV,getEditHandlePointOutlineColor:knA,getEditHandlePointRadius:ynA,editHandleIconAtlas:null,editHandleIconMapping:null,editHandleIconSizeScale:1,editHandleIconSizeUnits:"pixels",getEditHandleIcon:g=>g.properties.editHandleType,getEditHandleIconSize:10,getEditHandleIconColor:IV,getEditHandleIconAngle:0,billboard:!0},RnA={view:qC,modify:ho,translate:new Xn(new nt),transform:new Xn(new _0),scale:fe,rotate:ue,duplicate:Y0,split:S0,extrude:L0,elevation:H0,drawPoint:f0,drawLineString:u0,drawPolygon:fE,drawRectangle:Ks,drawSquare:x0,drawRectangleFromCenter:b0,drawSquareFromCenter:T0,drawCircleFromCenter:Z0,drawCircleByBoundingBox:P0,drawEllipseByBoundingBox:O0,drawRectangleUsing3Points:V0,drawEllipseUsing3Points:v0,draw90DegreePolygon:j0,drawPolygonByDragging:X0},ht=class extends zn{constructor(){super(...arguments);p(this,"state")}renderLayers(){let I=this.getSubLayerProps({id:"geojson",data:this.props.data,fp64:this.props.fp64,filled:this.props.filled,stroked:this.props.stroked,lineWidthScale:this.props.lineWidthScale,lineWidthMinPixels:this.props.lineWidthMinPixels,lineWidthMaxPixels:this.props.lineWidthMaxPixels,lineWidthUnits:this.props.lineWidthUnits,lineJointRounded:this.props.lineJointRounded,lineCapRounded:this.props.lineCapRounded,lineMiterLimit:this.props.lineMiterLimit,pointRadiusScale:this.props.pointRadiusScale,pointRadiusMinPixels:this.props.pointRadiusMinPixels,pointRadiusMaxPixels:this.props.pointRadiusMaxPixels,getLineColor:this.selectionAwareAccessor(this.props.getLineColor),getFillColor:this.selectionAwareAccessor(this.props.getFillColor),getPointRadius:this.selectionAwareAccessor(this.props.getRadius),getLineWidth:this.selectionAwareAccessor(this.props.getLineWidth),_subLayerProps:{linestrings:{billboard:this.props.billboard,updateTriggers:{all:[this.props.selectedFeatureIndexes,this.props.mode]}},"polygons-stroke":{billboard:this.props.billboard,pickingLineWidthExtraPixels:this.props.pickingLineWidthExtraPixels,type:_n,updateTriggers:{all:[this.props.selectedFeatureIndexes,this.props.mode]}}},updateTriggers:{getLineColor:[this.props.selectedFeatureIndexes,this.props.mode],getFillColor:[this.props.selectedFeatureIndexes,this.props.mode],getPointRadius:[this.props.selectedFeatureIndexes,this.props.mode],getLineWidth:[this.props.selectedFeatureIndexes,this.props.mode]}}),B=[new $t(I)];return B=B.concat(this.createGuidesLayers(),this.createTooltipsLayers()),B}initializeState(){super.initializeState(),this.setState({selectedFeatures:[],editHandles:[]})}shouldUpdateState(I){return super.shouldUpdateState(I)||I.changeFlags.stateChanged}updateState({props:I,oldProps:B,changeFlags:Q,context:C}){if(super.updateState({oldProps:B,props:I,changeFlags:Q,context:C}),Q.propsOrDataChanged&&(Object.keys(B).length===0||I.mode!==B.mode)){let e;if(typeof I.mode=="function"){let D=I.mode;e=new D}else typeof I.mode=="string"?(e=RnA[I.mode],console.warn("Deprecated use of passing `mode` as a string. Pass the mode's class constructor instead.")):e=I.mode;e||(console.warn(`No mode configured for ${String(I.mode)}`),e=new BV),e!==this.state.mode&&this.setState({mode:e,cursor:null})}let E=[];if(Array.isArray(I.selectedFeatureIndexes)&&typeof I.data=="object"&&"features"in I.data){let o=I.data;E=I.selectedFeatureIndexes.map(e=>o.features[e])}this.setState({selectedFeatures:E})}getModeProps(I){return{modeConfig:I.modeConfig,data:I.data,selectedIndexes:I.selectedFeatureIndexes,lastPointerMoveEvent:this.state.lastPointerMoveEvent,cursor:this.state.cursor,onEdit:B=>{this.setNeedsUpdate(),I.onEdit(B)},onUpdateCursor:B=>{this.setState({cursor:B})}}}selectionAwareAccessor(I){return typeof I!="function"?I:B=>I(B,this.isFeatureSelected(B),this.props.mode)}isFeatureSelected(I){return!this.props.data||!this.props.selectedFeatureIndexes||!this.props.selectedFeatureIndexes.length?!1:this.state.selectedFeatures.includes(I)}getPickingInfo({info:I,sourceLayer:B}){return B.id.endsWith("guides")&&(I.isGuide=!0),I}_updateAutoHighlight(I){if(I?.sourceLayer)if(I.isGuide)for(let B of I.sourceLayer.getSubLayers())B.updateAutoHighlight(I);else I.sourceLayer.updateAutoHighlight(I)}createGuidesLayers(){let B=this.getActiveMode().getGuides(this.getModeProps(this.props));if(!B||!B.features.length)return[];let Q={linestrings:{billboard:this.props.billboard,autoHighlight:!1},"polygons-fill":{autoHighlight:!1},"polygons-stroke":{billboard:this.props.billboard}};return this.props.editHandleType==="icon"?Q["points-icon"]={type:Fa,iconAtlas:this.props.editHandleIconAtlas,iconMapping:this.props.editHandleIconMapping,sizeUnits:this.props.editHandleIconSizeUnits,sizeScale:this.props.editHandleIconSizeScale,getIcon:wt(this.props.getEditHandleIcon),getSize:wt(this.props.getEditHandleIconSize),getColor:wt(this.props.getEditHandleIconColor),getAngle:wt(this.props.getEditHandleIconAngle),billboard:this.props.billboard}:Q["points-circle"]={type:BQ,radiusScale:this.props.editHandlePointRadiusScale,stroked:this.props.editHandlePointOutline,getLineWidth:this.props.editHandlePointStrokeWidth,radiusUnits:this.props.editHandlePointRadiusUnits,radiusMinPixels:this.props.editHandlePointRadiusMinPixels,radiusMaxPixels:this.props.editHandlePointRadiusMaxPixels,getRadius:wt(this.props.getEditHandlePointRadius),getFillColor:wt(this.props.getEditHandlePointColor),getLineColor:wt(this.props.getEditHandlePointOutlineColor),billboard:this.props.billboard},[new $t(this.getSubLayerProps({id:"guides",data:B,fp64:this.props.fp64,_subLayerProps:Q,lineWidthScale:this.props.lineWidthScale,lineWidthMinPixels:this.props.lineWidthMinPixels,lineWidthMaxPixels:this.props.lineWidthMaxPixels,lineWidthUnits:this.props.lineWidthUnits,lineJointRounded:this.props.lineJointRounded,lineCapRounded:this.props.lineCapRounded,lineMiterLimit:this.props.lineMiterLimit,getLineColor:wt(this.props.getTentativeLineColor),getLineWidth:wt(this.props.getTentativeLineWidth),getFillColor:wt(this.props.getTentativeFillColor),pointType:this.props.editHandleType==="icon"?"icon":"circle",iconAtlas:this.props.editHandleIconAtlas}))]}createTooltipsLayers(){let B=this.getActiveMode().getTooltips(this.getModeProps(this.props));return[new _t({getSize:hnA,...this.getSubLayerProps({id:"tooltips",data:B})})]}onLayerClick(I){this.getActiveMode().handleClick(I,this.getModeProps(this.props))}onLayerKeyUp(I){this.getActiveMode().handleKeyUp(I,this.getModeProps(this.props))}onStartDragging(I){this.getActiveMode().handleStartDragging(I,this.getModeProps(this.props))}onDragging(I){this.getActiveMode().handleDragging(I,this.getModeProps(this.props))}onStopDragging(I){this.getActiveMode().handleStopDragging(I,this.getModeProps(this.props))}onPointerMove(I){this.setState({lastPointerMoveEvent:I}),this.getActiveMode().handlePointerMove(I,this.getModeProps(this.props))}getCursor({isDragging:I}){if(this.state===null||this.state===void 0)return null;let{cursor:B}=this.state;return B||(B=I?"grabbing":"grab"),B}getActiveMode(){return this.state.mode}};p(ht,"layerName","EditableGeoJsonLayer"),p(ht,"defaultProps",FnA);var MnA=qC,lnA=9;var nwg={mode:MnA,...ht.defaultProps,data:[],selectedIndexes:[],filled:!1,stroked:!0,lineWidthScale:$0,lineWidthMinPixels:1,lineWidthMaxPixels:Number.MAX_SAFE_INTEGER,lineWidthUnits:"pixels",getHexagons:g=>g.hexIds,getEditedCluster:(g,A)=>A?{...A,hexIds:g}:{hexIds:g},resolution:lnA};var Tl={NONE:null,RECTANGLE:"rectangle",POLYGON:"polygon"},Mwg={[Tl.RECTANGLE]:Ks,[Tl.POLYGON]:fE},lwg={[Tl.RECTANGLE]:{dragToDraw:!0}},Jwg={selectionType:Tl.RECTANGLE,layerIds:[],onSelect:()=>{}};var JnA=g=>(g.features.forEach((A,I)=>{if(A.geometry.type==="Polygon"){let B=A.geometry.coordinates[0],Q=Math.abs(dJ(B));A.properties={...A.properties,area:Q,name:A.properties.name||`Feature ${I+1}`,color:A.properties.color||[Math.random()*255,Math.random()*255,Math.random()*255]}}else console.warn(`Feature ${I} is not a Polygon.`)}),g),Wl=g=>{Object.keys(g.model).length>0&&(g.model.set("region",{}),g.model.set("region",g.edit.feature_collection),g.model.save_changes())},Zl=(g,A,I)=>{g.edit.feature_collection=JnA(g.edit.feature_collection),g.edit.rgn_areas=g.edit.feature_collection.features.map((B,Q)=>({name:(Q+1).toString(),value:B.properties.area})).sort((B,Q)=>Q.value-B.value),g.edit.color_dict_rgn=g.edit.feature_collection.features.reduce((B,Q,C)=>(B[(C+1).toString()]=Q.properties.color,B),{}),ni(g.edit.svg_bar_rgn,g.edit.rgn_areas,g.edit.color_dict_rgn,Q0,[],A,I,g)},YnA=(g,A,I,B)=>{let{updatedData:Q,editType:C}=B;I.edit.feature_collection=Q,A.edit_layer=A.edit_layer.clone({data:I.edit.feature_collection}),C==="addFeature"&&(Pl(A,qC),LA(I.edit.buttons.sktch).style("color","gray").classed("active",!1),I.edit.mode="view",Ac(A,!0),$n(A,!0),A0(A,!0),Zl(I,g,A),Wl(I));let E=Qg(A,I.close_up);g.setProps({layers:E}),Zl(I,g,A),Wl(I)},KnA=(g,A,I,B)=>{if(g.featureType==="polygons"&&B.edit.mode==="view"){I.edit_layer=I.edit_layer.clone({id:"edit-layer-modify",mode:ho,selectedFeatureIndexes:[g.index],modeConfig:{dragToAddNew:!0,enableSnapping:!1}});let Q=Qg(I,B.close_up);A.setProps({layers:Q}),B.edit.mode="modify",B.edit.modify_index=g.index,LA(B.edit.buttons.del).classed("active",!0).style("display","inline-flex"),LA(B.edit.buttons.rgn).style("display","none"),LA(B.edit.buttons.sktch).style("display","none")}else if(g.featureType==="polygons"&&B.edit.mode==="modify"){I.edit_layer=I.edit_layer.clone({id:"edit-layer-view",mode:qC,selectedFeatureIndexes:[]});let Q=Qg(I,B.close_up);A.setProps({layers:Q}),B.edit.mode="view",B.edit.modify_index=null,LA(B.edit.buttons.del).classed("active",!1).style("display","none"),LA(B.edit.buttons.rgn).style("display","inline-flex"),LA(B.edit.buttons.sktch).style("display","inline-flex")}},QV=g=>new ht({id:"edit-layer",data:g.edit.feature_collection,selectedFeatureIndexes:[],mode:qC,filled:!0,pointRadiusMinPixels:2,pointRadiusScale:2e3,extruded:!0,getElevation:1e3,getFillColor:I=>I.properties.color,pickable:!0,autoHighlight:!0,modeConfig:{preventOverlappingLines:!0},visible:!1}),CV=(g,A,I)=>{A.edit_layer=A.edit_layer.clone({onEdit:B=>YnA(g,A,I,B)})},EV=(g,A,I)=>{A.edit_layer=A.edit_layer.clone({onClick:B=>KnA(B,g,A,I)})},Pl=(g,A)=>{g.edit_layer=g.edit_layer.clone({mode:A})},$S=(g,A)=>{g.edit_layer=g.edit_layer.clone({visible:A})};var iV=(g,A)=>new $t({id:"nbhd-layer",data:g.nbhd.feature_collection,pickable:!0,stroked:!1,filled:!0,getLineWidth:1,getFillColor:B=>Et(B.properties.color),opacity:.5,visible:A}),pnA=async(g,A,I,B,Q)=>{let C=g.object.properties.cat;AI(Q.cats,"cluster"),DI(Q.cats,[C]),CB(Q.genes,[]);let E=Q.cats.selected_cats.join("-");if(Q.genes.svg_bar_gene.selectAll("g").attr("font-weight","normal").attr("opacity",1),Q.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",Q.cats.reset_cat?1:.25),Q.cats.reset_cat)Q.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"});else{let e=Q.cats.svg_bar_cluster.selectAll("g").filter(function(){return LA(this).select("text").text()===C}).attr("opacity",1);if(!e.empty()){let D=e.node().getBoundingClientRect().top,r=Q.containers.bar_cluster.getBoundingClientRect().top,n=D-r+Q.containers.bar_cluster.scrollTop;Q.containers.bar_cluster.scrollTo({top:n,behavior:"smooth"})}}EB(B,E),dB(B,E),AL(Q),gL(Q,B);let o=Qg(B,Q.close_up);I.setProps({layers:o})},oV=(g,A,I)=>{A.nbhd_layer=A.nbhd_layer.clone({onClick:(B,Q)=>pnA(B,Q,g,A,I)})},AL=g=>{let A;g.cats.selected_cats.length===0?A=g.nbhd.ini_feature_collection.features.filter(I=>I.properties.inv_alpha===g.nbhd.inst_alpha):A=g.nbhd.ini_feature_collection.features.filter(I=>g.cats.selected_cats.includes(I.properties.cat)).filter(I=>I.properties.inv_alpha===g.nbhd.inst_alpha),g.nbhd.feature_collection={type:"FeatureCollection",features:A}},gL=(g,A)=>{console.log("update_nbhd_layer_data!!"),A.nbhd_layer=A.nbhd_layer.clone({data:g.nbhd.feature_collection})},tV=(g,A)=>{g.nbhd_layer=g.nbhd_layer.clone({visible:A})};var TB=(g,A,I)=>{LA(A.containers.image).selectAll(".img_layer_button").style("color",I?"blue":"gray"),A.img.image_layer_sliders.map(B=>Pa(B,I)),de(g,I)},IL=()=>{let g=document.createElement("div");return g.style.display="flex",g.style.flexDirection="row",g.style.border="1px solid #d3d3d3",g.className="ui_container",g.style.height="100px",g},eV=()=>{let g=document.createElement("div");return g.style.display="flex",g.style.flexDirection="row",g.className="ctrl_container",g.style.width="100%",g},ZC=(g,A,I=null)=>{let B=document.createElement("div");return B.className=g,B.style.display="flex",B.style.flexDirection=A,I!==null&&(B.style.height=I+"px",B.style.overflow="scroll"),B},AN=g=>{let A=document.createElement("div");return A.className=g,A.style.width="100%",A.style.marginLeft="2px",A.style.marginTop="2px",A},aV=(g,A,I)=>{let B=IL(),Q=ZC("button_container","column"),C=ZC("slider_container","column"),E=33,o=["col","row"],e=["clust","sum","var","ini"];o.forEach(r=>{let n=ZC(r,"row");LA(n).append("div").text(r.toUpperCase()).style("width",E+"px").style("height","20px").style("display","inline-flex").style("align-items","center").style("justify-content","center").style("text-align","center").style("cursor","pointer").style("font-size","12px").style("font-weight","bold").style("color","#47515b").style("border","3px solid").style("border-color","white").style("border-radius","12px").style("margin-top","5px").style("margin-left","5px").style("padding","4px 10px").style("user-select","none").style("font-family",'-apple-system, BlinkMacSystemFont, "San Francisco", "Helvetica Neue", Helvetica, Arial, sans-serif'),e.forEach(G=>{T8(n,G,G==="clust",E,r,g,A,I)}),Q.appendChild(n)}),I.dendro.sliders={},o.forEach(r=>{I.dendro.sliders[r]=document.createElement("input"),I.dendro.sliders[r].type="range",I.dendro.sliders[r].min="0",I.dendro.sliders[r].max="100",I.dendro.sliders[r].value=50,I.dendro.sliders[r].className="slider",I.dendro.sliders[r].style.width="75px"});let D=(r,n,G,w)=>{n.dendro.sliders[G+"_value"]=n.dendro.max_linkage_dist[G]*w.target.value/100,aU(n,G,n.dendro.sliders[G+"_value"]),DU(n,G),C0(n,G),x8(A,n,G),r.setProps({layers:tt(A)})};return o.forEach(r=>{I.dendro.sliders[r].addEventListener("input",n=>D(g,I,r,n))}),I.dendro.sliders.col.style.marginTop="5px",I.dendro.sliders.row.style.marginTop="20px",LA(C).append("div").text("DENDRO").style("width",E+"px").style("height","20px").style("display","inline-flex").style("align-items","center").style("justify-content","center").style("text-align","center").style("cursor","pointer").style("font-size","12px").style("font-weight","bold").style("color","#47515b").style("border","3px solid").style("border-color","white").style("border-radius","12px").style("margin-left","20px").style("user-select","none").style("font-family",'-apple-system, BlinkMacSystemFont, "San Francisco", "Helvetica Neue", Helvetica, Arial, sans-serif'),C.appendChild(I.dendro.sliders.col),C.appendChild(I.dendro.sliders.row),Q.style.marginTop="15px",C.style.marginTop="0px",C.style.marginLeft="10px",B.appendChild(Q),B.appendChild(C),B},DV=(g,A,I)=>{let B=IL(),Q=eV(),C=ZC("image_container","row"),E=ZC("tile_container","row"),o=AN("tile_slider_container");return Ue(C,"sst","IMG","blue",50,"button",g,A,I),Ue(E,"sst","TILE","blue",50,"button",g,A,I),I.sliders={},LM("tile",g,A,I),o.appendChild(I.sliders.tile),B.appendChild(Q),E.appendChild(o),EU("sst",g,A,I),Q.appendChild(C),Q.appendChild(E),Q.appendChild(I.genes.gene_search),B},sV=(g,A,I,B)=>{let Q=IL(),C=eV();B.containers.image=ZC("image_container","column");let E=ZC("img_layers_container","column",72);E.style.width="135px",E.style.border="1px solid #d3d3d3",E.style.marginTop="3px",E.style.marginLeft="2px",E.addEventListener("wheel",L=>{let{scrollTop:j,scrollHeight:m,clientHeight:$}=E,NA=j===0,wA=j+$===m;(NA&&L.deltaY<0||wA&&L.deltaY>0)&&L.preventDefault()});let o="115px",e=ZC("cell_container","column");e.style.width=o;let D=ZC("cell_ctrl_container","row");D.style.marginLeft="0px";let r=ZC("gene_container","column");r.style.marginTop="0px",r.style.width=o;let n=ZC("trx_container","row"),G=ZC("rgn_container","column");G.style.width=o;let w=ZC("rgn_ctrl_container","row");w.style.marginLeft="0px",w.style.height="22.5px";let k=AN("cell_slider_container"),F=AN("trx_slider_container"),h=ZC("image_layer_container","row");if(B.umap.has_umap===!0){let L,j;B.umap.state===!0?(L="blue",j="gray"):(L="gray",j="blue"),Ue(h,"ist","UMAP",L,35,"button",A,I,B),Ue(h,"ist","SPATIAL",j,50,"button",A,I,B)}Ue(h,"ist","IMG","blue",30,"button",A,I,B),B.containers.image.appendChild(h);let N=(L,j)=>L.image_layer_sliders.filter(m=>m.name===j),Y=(L,j)=>{let m=j.button_name,$=ZC("image_layer_container","row");$.style.height="21px",Ue($,"ist",m,"blue",75,"img_layer_button",A,I,B);let NA=AN(m),wA=N(L,m)[0],FA=f8(m,A,I,B),z=HM(FA,100);iU(wA,50,z),NA.appendChild(wA),$.appendChild(NA),E.appendChild($)};B.img.image_info.map(L=>Y(B.img,L)),Ue(D,"ist","CELL","blue",40,"button",A,I,B),Ue(n,"ist","TRX","blue",40,"button",A,I,B),B.containers.image.appendChild(E),B.sliders={},LM("cell",A,I,B),k.appendChild(B.sliders.cell),D.appendChild(k),B.containers.bar_cluster=fM(),uM(B.containers.bar_cluster,ls,B.cats.svg_bar_cluster,B.cats.cluster_counts,B.cats.color_dict_cluster,A,I,B),B.containers.bar_gene=fM(),uM(B.containers.bar_gene,B0,B.genes.svg_bar_gene,B.genes.gene_counts,B.genes.color_dict_gene,A,I,B),e.appendChild(D),e.appendChild(B.containers.bar_cluster),LM("trx",A,I,B),n.appendChild(F),F.appendChild(B.sliders.trx),r.appendChild(n),r.appendChild(B.containers.bar_gene),EU("ist",A,I,B),B.genes.gene_search.style.marginLeft="0px",Q.appendChild(C),C.appendChild(B.containers.image),C.appendChild(e),C.appendChild(r),B.genes.gene_search.style.width="160px",B.genes.gene_search.style.marginLeft="5px";let M=(L,j,m,$)=>{let NA=LA(L.currentTarget),wA=NA.classed("active");if($.edit.visible=!0,NA.classed("active",$.edit.visible).style("color","blue"),LA($.edit.buttons.rgn).style("color","blue").classed("active",!0),$S(m,$.edit.visible),wA===!1){NA.classed("active",!0).style("color","blue"),$.edit.mode="sktch",Pl(m,fE),Ac(m,!1),$n(m,!1),A0(m,!1);let FA=Qg(m,$.close_up);j.setProps({layers:FA})}else if(wA===!0){$.edit.mode="view",NA.classed("active",!1).style("color","gray"),Pl(m,qC),Ac(m,!0),$n(m,!0),A0(m,!0);let FA=Qg(m,$.close_up);j.setProps({layers:FA})}},l=(L,j,m,$)=>{let NA=LA(L.currentTarget);NA.classed("active")===!1?($.edit.visible=!0,NA.classed("active",$.edit.visible).style("color","blue"),LA($.edit.buttons.alph).style("display","none"),LA($.edit.buttons.sktch).style("display","inline-flex")):($.edit.visible=!1,NA.classed("active",$.edit.visible).style("color","gray"),LA($.edit.buttons.alph).style("display","inline-flex"),LA($.edit.buttons.sktch).style("display","none")),$S(m,$.edit.visible);let FA=Qg(m,$.close_up);j.setProps({layers:FA}),$.edit.rgn_areas=$.edit.feature_collection.features.map((JA,z)=>({name:(z+1).toString(),value:JA.properties.area})),$.edit.color_dict_rgn=$.edit.feature_collection.features.reduce((JA,z,kg)=>(JA[(kg+1).toString()]=z.properties.color,JA),{}),ni($.edit.svg_bar_rgn,$.edit.rgn_areas,$.edit.color_dict_rgn,Q0,[],j,m,$)},J=(L,j)=>(j>=0&&j<L.features.length&&L.features.splice(j,1),L),U=(L,j,m,$)=>{$.edit.feature_collection=J($.edit.feature_collection,$.edit.modify_index),m.edit_layer=m.edit_layer.clone({id:"edit-layer-delete",data:$.edit.feature_collection,mode:qC,selectedFeatureIndexes:[]});let NA=Qg(m,$.close_up);j.setProps({layers:NA}),LA($.edit.buttons.del).classed("active",!1).style("display","none"),LA($.edit.buttons.rgn).style("display","inline-flex"),LA($.edit.buttons.sktch).style("display","inline-flex"),Zl($,j,m),Wl($)},x=L=>{console.log("clicking nbhd bar",L)},q=(L,j,m,$)=>{let NA=LA(L.currentTarget);$.nbhd.visible===!0?($.nbhd.visible=!1,LA($.edit.buttons.alph).style("color","gray"),LA($.edit.buttons.rgn).style("display","inline-flex"),$.sliders.alph.style.display="none"):($.nbhd.visible=!0,LA($.edit.buttons.alph).style("color","blue"),LA($.edit.buttons.rgn).style("display","none"),$.sliders.alph.style.display="block"),tV(m,$.nbhd.visible),Za(m,$.nbhd.visible!==!0),de(m,$.nbhd.visible!==!0),Wa(m,$.nbhd.visible!==!0),Ac(m,$.nbhd.visible!==!0),$n(m,$.nbhd.visible!==!0);let wA=Qg(m,$.close_up,$.nbhd.visible);j.setProps({layers:wA}),$.nbhd.nbhd_areas=$.nbhd.feature_collection.features.map((FA,JA)=>({name:(JA+1).toString(),value:FA.properties.area})),console.log($.nbhd.color_dict_nbhd),ni($.edit.svg_bar_rgn,$.nbhd.nbhd_areas,$.cats.color_dict_cluster,x,[],j,m,$)};B.edit.buttons={},B.edit.mode="view",I0(A,I,B,w,"RGN",30,l),B.nbhd.alpha_nbhd===!0&&I0(A,I,B,w,"ALPH",30,q),I0(A,I,B,w,"SKTCH",40,M),LA(B.edit.buttons.sktch).style("display","none"),I0(A,I,B,w,"DEL",30,U);let P=AN("alph_slider_container"),Z=(L,j,m,$)=>{let NA=L.target.value/100,wA=Array.from(new Set($.nbhd.ini_feature_collection.features.map(JA=>JA.properties.inv_alpha))).sort((JA,z)=>JA-z),FA=wA[Math.round(NA*(wA.length-1))];if(FA!==$.nbhd.inst_alpha){console.log("Mapped inv_alpha:",FA),$.nbhd.inst_alpha=FA,AL($),gL($,m);let JA=Qg(m,$.close_up);j.setProps({layers:JA})}},X=Array.from(new Set(B.nbhd.ini_feature_collection.features.map(L=>L.properties.inv_alpha))).sort((L,j)=>L-j);return B.sliders.alph=document.createElement("input"),B.sliders.alph.type="range",B.sliders.alph.min="0",B.sliders.alph.max="100",B.sliders.alph.value=50,B.sliders.alph.className="slider",B.sliders.alph.style.width="75px",B.sliders.alph.addEventListener("input",L=>Z(L,A,I,B)),B.sliders.alph.style.display="none",w.appendChild(P),P.appendChild(B.sliders.alph),LA(B.edit.buttons.del).style("color","red").style("display","none"),B.containers.bar_rgn=fM(),B.containers.bar_rgn.style.marginLeft="0px",G.appendChild(w),G.appendChild(B.containers.bar_rgn),C.appendChild(G),C.appendChild(B.genes.gene_search),uM(B.containers.bar_rgn,Q0,B.edit.svg_bar_rgn,B.edit.rgn_areas,B.edit.color_dict_rgn,A,I,B),Q};var qnA=(g,A,I)=>{let B=g.polygon_cell_names[I.index],Q=g.dict_cell_cats[B],C;Q in g.color_dict_cluster?C=g.color_dict_cluster[Q]:C=[0,0,255];let E=g.selected_cats.length===0||g.selected_cats.includes(Q)?255:50;return[...C,E]},rV=g=>new Pi({id:"path-layer",data:[],pickable:!0,widthScale:3,widthMinPixels:1,getPath:I=>I,getColor:(I,B)=>qnA(g.cats,I,B),widthUnits:"pixels"}),dnA=(g,A,I,B,Q)=>{let C=Q.cats.polygon_cell_names[g.index],E=Q.cats.dict_cell_cats[C];AI(Q.cats,"cluster"),DI(Q.cats,[E]),CB(Q.genes,[]),TB(B,Q,!Q.cats.selected_cats.length>0);let o=Q.cats.selected_cats.join("-");EB(B,o),dB(B,o),CQ(Q.genes,B);let e=Qg(B,Q.close_up);I.setProps({layers:e})},nV=async(g,A,I,B)=>{let Q=await g8(g,A,B);I.path_layer=I.path_layer.clone({data:Q})},cV=(g,A,I)=>{A.path_layer=A.path_layer.clone({onClick:(B,Q)=>dnA(B,Q,g,A,I)})},Un=(g,A)=>{g.path_layer=g.path_layer.clone({visible:A})},dB=(g,A)=>{g.path_layer=g.path_layer.clone({id:"path-layer-"+A})},$n=(g,A)=>{g.path_layer=g.path_layer.clone({pickable:A})};var GV=(g,A)=>{let I=g.spatial.x_min,B=g.spatial.x_max,Q=g.spatial.y_min,C=g.spatial.y_max,E=B-I,o=C-Q,e=Math.min(E,o),D=(B-I)/2,r=(C-Q)/2,n=jE(A.map(J=>J.umap[0])),G=QC(A.map(J=>J.umap[0])),w=jE(A.map(J=>J.umap[1])),k=QC(A.map(J=>J.umap[1])),F=G-n,h=k-w;A.forEach(J=>{J.umap[0]=(J.umap[0]-n)/F*e,J.umap[1]=(J.umap[1]-w)/h*e}),n=jE(A.map(J=>J.umap[0])),G=QC(A.map(J=>J.umap[0])),w=jE(A.map(J=>J.umap[1])),k=QC(A.map(J=>J.umap[1]));let N=(G-n)/2,Y=(k-w)/2,M=D-N,l=r-Y;return A.forEach(J=>{J.umap[0]=J.umap[0]+M,J.umap[1]=J.umap[1]+l}),A};var UnA=async(g,A,I,B,Q)=>{let C="ontouchstart"in window||navigator.maxTouchPoints>0,E;C?E=Q.cats.cell_cats[g.index]:E=Q.tooltip_cat_cell,AI(Q.cats,"cluster"),DI(Q.cats,[E]),CB(Q.genes,[]);let o=Q.cats.selected_cats.join("-");if(Q.genes.svg_bar_gene.selectAll("g").attr("font-weight","normal").attr("opacity",1),Q.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",Q.cats.reset_cat?1:.25),Q.cats.reset_cat)Q.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"});else{let D=Q.cats.svg_bar_cluster.selectAll("g").filter(function(){return LA(this).select("text").text()===E}).attr("opacity",1);if(!D.empty()){let r=D.node().getBoundingClientRect().top,n=Q.containers.bar_cluster.getBoundingClientRect().top,G=r-n+Q.containers.bar_cluster.scrollTop;Q.containers.bar_cluster.scrollTo({top:G,behavior:"smooth"})}}EB(B,o),Q.umap.state===!1&&(TB(B,Q,!Q.cats.selected_cats.length>0),dB(B,o),CQ(Q.genes,B));let e=Qg(B,Q.close_up);I.setProps({layers:e}),Q.genes.gene_search_input.value="",WQ(Q.genes,"")},wV=async(g,A)=>{let I=g+"/cell_metadata.parquet";var B=await FQ(I,zg.fetch);if(Z4(A.cats,B),A.spatial.cell_scatter_data=qn(B),await W4(A.genes,g),P4(A.cats),A.cats.has_meta_cell)A.cats.cell_cats=A.cats.cell_names_array.map(k=>A.cats.meta_cell[k]);else{var Q=await FQ(g+"/cell_clusters/cluster.parquet",zg.fetch);O4(A.cats,Q,"cluster")}v4(A.cats);let C=B.getChild("name").toArray(),E=A.spatial.cell_scatter_data.attributes.getPosition.value;A.combo_data.cell=C.map((k,F)=>({name:k,cat:A.cats.dict_cell_cats[k],x:E[F*2],y:E[F*2+1]}));let o;if(A.umap.has_umap){let k;k=new Float64Array(A.cats.cell_names_array.flatMap(h=>{let N;return A.umap.umap[h]?N=A.umap.umap[h]:N=[0,0],N}));let F=A.spatial.cell_scatter_data.length;o=Array.from({length:F},(h,N)=>({position:[E[N*2],E[N*2+1]],umap:[k[N*2],k[N*2+1]]})),A.spatial.x_min=jE(o.map(h=>h.position[0])),A.spatial.x_max=QC(o.map(h=>h.position[0])),A.spatial.y_min=jE(o.map(h=>h.position[1])),A.spatial.y_max=QC(o.map(h=>h.position[1])),o=GV(A,o)}else{let k=A.spatial.cell_scatter_data.length;o=Array.from({length:k},(F,h)=>({position:[E[h*2],E[h*2+1]]})),A.spatial.x_min=jE(o.map(F=>F.position[0])),A.spatial.x_max=QC(o.map(F=>F.position[0])),A.spatial.y_min=jE(o.map(F=>F.position[1])),A.spatial.y_max=QC(o.map(F=>F.position[1]))}A.spatial.center_x=(A.spatial.x_max+A.spatial.x_min)/2,A.spatial.center_y=(A.spatial.y_max+A.spatial.y_min)/2,A.spatial.data_width=A.spatial.x_max-A.spatial.x_min,A.spatial.data_height=A.spatial.y_max-A.spatial.y_min;let e=A.root.clientWidth,D=A.root.clientHeight,r=A.root.clientWidth,n=A.containers.root_dim.height;A.spatial.scale_x=r/A.spatial.data_width,A.spatial.scale_y=n/A.spatial.data_height,A.spatial.scale=Math.min(A.spatial.scale_x,A.spatial.scale_y),A.spatial.ini_zoom=Math.log2(A.spatial.scale)*1.01,A.spatial.ini_x=A.spatial.center_x,A.spatial.ini_y=A.spatial.center_y,A.spatial.cell_scatter_data_objects=o;let G={getPosition:{duration:3e3,easing:qi}};return new BQ({id:"cell-layer",radiusMinPixels:1,getRadius:5,pickable:!0,getColor:(k,F)=>j4(A.cats,k,F),data:A.spatial.cell_scatter_data_objects,transitions:G,getPosition:k=>A.umap.state?k.umap:k.position,updateTriggers:{getPosition:[A.umap.state]}})},hV=(g,A,I)=>{A.cell_layer=A.cell_layer.clone({onClick:(B,Q)=>UnA(B,Q,g,A,I)})},W8=(g,A)=>{g.cell_layer=g.cell_layer.clone({visible:A})},u8=(g,A)=>{g.cell_layer=g.cell_layer.clone({getRadius:A})},EB=(g,A)=>{g.cell_layer=g.cell_layer.clone({id:"cell-layer-"+A})},Ac=(g,A)=>{g.cell_layer=g.cell_layer.clone({pickable:A})},eU=(g,A,I)=>{A.cell_layer=A.cell_layer.clone({updateTriggers:{getPosition:[I.umap.state]}});let B=Qg(A,I.close_up);g.setProps({layers:B})};var Ol=()=>[new oi({id:"ortho"})];var NV=(g,A,I,B,Q)=>{let C=Math.floor(g/Q),E=Math.floor(A/Q),o=Math.floor(I/Q),e=Math.floor(B/Q),D=[];for(let r=C;r<=E;r++)for(let n=o;n<=e;n++)D.push({tileX:r,tileY:n,name:r+"_"+n});return D};var Vl=async({height:g,width:A,zoom:I,target:B},Q,C,E)=>{let o=E.img.landscape_parameters.tile_size,e=50,D=Math.pow(2,I),[r,n]=B,G=A/(2*D),w=g/(2*D);E.bounds={},E.bounds.min_x=r-G,E.bounds.max_x=r+G,E.bounds.min_y=n-w,E.bounds.max_y=n+w;let k=Q.viewManager.getViewports();if(!k||k.length===0){console.error("No viewports available");return}let F=NV(E.bounds.min_x,E.bounds.max_x,E.bounds.min_y,E.bounds.max_y,o);if(F.length<e){await L8(E.global_base_url,F,C,E),await nV(E.global_base_url,F,C,E),E.close_up=!0;let M=E.combo_data.trx.filter(x=>x.x>=E.bounds.min_x&&x.x<=E.bounds.max_x&&x.y>=E.bounds.min_y&&x.y<=E.bounds.max_y).map(x=>x.name).reduce((x,q)=>{let P=x.find(Z=>Z.name===q);return P?P.value+=1:x.push({name:q,value:1}),x},[]).filter(x=>x.value>0).sort((x,q)=>q.value-x.value);ni(E.genes.svg_bar_gene,M,E.genes.color_dict_gene,B0,E.genes.selected_genes,Q,C,E),E.containers.bar_gene.scrollTo({top:0,behavior:"smooth"});let U=E.combo_data.cell.filter(x=>x.x>=E.bounds.min_x&&x.x<=E.bounds.max_x&&x.y>=E.bounds.min_y&&x.y<=E.bounds.max_y).map(x=>x.cat).reduce((x,q)=>{let P=x.find(Z=>Z.name===q);return P?P.value+=1:x.push({name:q,value:1}),x},[]).filter(x=>x.value>0).sort((x,q)=>q.value-x.value);ni(E.cats.svg_bar_cluster,U,E.cats.color_dict_cluster,ls,E.cats.selected_cats,Q,C,E),E.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"})}else E.close_up&&(E.close_up=!1,ni(E.genes.svg_bar_gene,E.genes.gene_counts,E.genes.color_dict_gene,B0,E.genes.selected_genes,Q,C,E),ni(E.cats.svg_bar_cluster,E.cats.cluster_counts,E.cats.color_dict_cluster,ls,E.cats.selected_cats,Q,C,E),E.containers.bar_gene.scrollTo({top:0,behavior:"smooth"}),E.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"}));let h=Qg(C,E.close_up);Q.setProps({layers:h})};var SnA=200,kV=HM(({viewState:g},A,I,B)=>(B.umap.state===!1&&Vl(g,A,I,B),typeof B.custom_callbacks.view_change=="function"&&B.custom_callbacks.view_change(g,B.close_up,I.trx_layer),g),SnA);var yV=(g,A)=>{if(A.index===-1||!A.layer)return null;let I="",B="",Q="";A.layer.id.startsWith("cell-layer")||A.layer.id.startsWith("path-layer")?(B=A.layer.id.startsWith("cell-layer")?g.cats.cell_names_array[A.index]:g.cats.polygon_cell_names[A.index],Q=g.cats.dict_cell_cats[B],I=`<div>cell: ${B}</div><div>cluster: ${Q}</div>`,g.tooltip_cat_cell=Q):A.layer.id.startsWith("trx-layer")?(B=g.genes.trx_names_array[A.index],I=`<div>transcript: ${B}</div>`):A.layer.id.startsWith("nbhd-layer")&&(B=g.nbhd.feature_collection.features[A.index].properties.name,Q=g.nbhd.feature_collection.features[A.index].properties.cat,I=`<div>neighborhood: ${B}</div><div>cluster: ${Q}</div>`);let C=g.root.querySelector(".deck-tooltip");C.style.marginTop="50px";let E=C.parentElement.parentElement;return E.style.position="unset",{html:I}};var LnA=({isDragging:g})=>g?"grabbing":"pointer",FV=(g,A,I)=>new Na({parent:g,controller:{doubleClickZoom:!1},getCursor:LnA,width:A,height:I}),RV=(g,A)=>{g.setProps({views:A})},MV=(g,A)=>{g.setProps({getTooltip:I=>yV(A,I)})},lV=(g,A,I)=>{g.setProps({onViewStateChange:B=>{kV(B,g,A,I)}})},JV=(g,A,I,B,Q,C)=>{A===0&&I===0&&Q===0&&(A=C.spatial.center_x,I=C.spatial.center_y,Q=C.spatial.ini_zoom);let E={target:[A,I,B],zoom:Q};g.setProps({initialViewState:E})};var YV=(g,A)=>{g.image_format=A},KV=(g,A)=>{g.image_info=A},pV=(g,A)=>{A.forEach(I=>{g[I.button_name]=I.color})};var vl=async(g,A)=>{let I=await FQ(A+"/meta_gene.parquet",zg.fetch),B=I.getChild("__index_level_0__").toArray(),Q=I.getChild("mean").toArray(),C=I.getChild("std").toArray(),E=I.getChild("max").toArray();B.forEach((o,e)=>{g.meta_gene[o]={mean:Q[e],std:C[e],max:E[e]},g.gene_counts.push({name:o,value:Number(Q[e])})}),g.gene_counts.sort((o,e)=>e.value-o.value),g.gene_names=g.gene_counts.map(o=>o.name)};var qV=(g,A)=>{g.color_dict_cluster=A.color;for(let B in g.color_dict_cluster)g.color_dict_cluster[B]=Et(g.color_dict_cluster[B]);var I=A.count;g.cluster_counts=[];for(let B in I)g.cluster_counts.push({name:B,value:I[B]});g.cluster_counts.sort((B,Q)=>Q.value-B.value)},dV=async g=>{if(g.cats.has_meta_cluster){for(let I in g.cats.meta_cluster)g.cats.color_dict_cluster[I]=Et(g.cats.meta_cluster[I].color);for(let I in g.cats.meta_cluster)g.cats.cluster_counts.push({name:I,value:g.cats.meta_cluster[I].count})}else{let I=g.global_base_url+"/cell_clusters/meta_cluster.parquet";var A=await FQ(I,zg.fetch);let B=[],Q=[],C=[],E=A.getChild("__index_level_0__"),o=A.getChild("color"),e=A.getChild("count"),D=[];for(let r of A.schema.fields)D.push(r.name);E&&o&&(B=E.toArray(),Q=o.toArray(),C=e.toArray()),B.forEach((r,n)=>{g.cats.color_dict_cluster[r]=Et(Q[n]),g.cats.cluster_counts.push({name:r,value:Number(C[n])})})}g.cats.cluster_counts.sort((I,B)=>B.value-I.value)};var UV=async(g,A,I)=>{let B=I.model.get("update_trigger"),Q,C;try{if(B.type==="row_label"){Q=B.value.name;let E=Q===I.cats.cat?"cluster":Q;I.umap.state===!1&&TB(A,I,I.cats.cat===Q),AI(I.cats,E),CB(I.genes,[Q]),DI(I.cats,[]),await ot(I.cats,I.genes,I.global_base_url,Q),EB(A,E),dB(A,E),CQ(I.genes,A);let o=Qg(A,I.close_up);g.setProps({layers:o});let e=!1;if(I.genes.svg_bar_gene.selectAll("g").attr("font-weight","normal").attr("opacity",e?1:.25),!e){let D=I.genes.svg_bar_gene.selectAll("g").filter(function(){return LA(this).select("text").text()===Q}).attr("opacity",1);if(!D.empty()){let r=D.node().getBoundingClientRect().top,n=I.containers.bar_gene.getBoundingClientRect().top,G=r-n+I.containers.bar_gene.scrollTop;I.containers.bar_gene.scrollTo({top:G,behavior:"smooth"})}}I.genes.gene_search_input.value=I.genes.gene_search_input.value!==Q?Q:"",WQ(I.genes,Q)}else if(B.type==="col_label"){Q="cluster",C=B.value.name,AI(I.cats,"cluster"),DI(I.cats,[C]),CB(I.genes,[]),I.umap.state===!1&&TB(A,I,!I.cats.selected_cats.length>0);let E=I.cats.selected_cats.join("-");EB(A,E),dB(A,E),CQ(I.genes,A);let o=Qg(A,I.close_up);g.setProps({layers:o}),I.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",I.cats.reset_cat?1:.25);let e=C;if(!I.cats.reset_cat){let D=I.cats.svg_bar_cluster.selectAll("g").filter(function(){return LA(this).select("text").text()===e}).attr("opacity",1);if(!D.empty()){let r=D.node().getBoundingClientRect().top,n=I.containers.bar_cluster.getBoundingClientRect().top,G=r-n+I.containers.bar_cluster.scrollTop;I.containers.bar_cluster.scrollTo({top:G,behavior:"smooth"})}}}else if(B.type==="col_dendro"){Q="cluster",Q="cluster";let E=B.value.selected_names;AI(I.cats,"cluster"),DI(I.cats,E),CB(I.genes,[]),I.umap.state===!1&&TB(A,I,!I.cats.selected_cats.length>0);let o=I.cats.selected_cats.join("-");EB(A,o),dB(A,o),CQ(I.genes,A);let e=Qg(A,I.close_up);g.setProps({layers:e}),I.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",I.cats.reset_cat?1:.25);let D=E;if(!I.cats.reset_cat){let r=I.cats.svg_bar_cluster.selectAll("g").filter(function(){return LA(this).select("text").text()===D}).attr("opacity",1);if(!r.empty()){let n=r.node().getBoundingClientRect().top,G=I.containers.bar_cluster.getBoundingClientRect().top,w=n-G+I.containers.bar_cluster.scrollTop;I.containers.bar_cluster.scrollTo({top:w,behavior:"smooth"})}}AI(I.cats,Q),DI(I.cats,B.click_value)}}catch(E){console.error(E)}};var SV=(g,A,I)=>{let B=I.model.get("cell_clusters");qV(I.cats,B.meta_cluster),V4(I.cats,B.new_clusters),EB(A,"cluster");let Q=Qg(A,I.close_up);g.setProps({layers:Q}),I.combo_data.cell=I.combo_data.cell.map(C=>({...C,cat:I.cats.dict_cell_cats[C.name]})),ni(I.cats.svg_bar_cluster,I.cats.cluster_counts,I.cats.color_dict_cluster,ls,[],g,A,I)};var HnA=(g,A,I)=>{if(g.size>=20){let Q=g.keys().next().value;g.delete(Q)}g.set(A,I)},fnA=(g,A)=>{let I=g.get(A);return I&&(g.delete(A),g.set(A,I)),I},unA=g=>{g.clear()},BL=()=>{let g=new Map;return{set:(A,I)=>HnA(g,A,I),get:A=>fnA(g,A),clear:()=>unA(g)}};var QL=async(g,A,I,B,Q,C,E,o,e="",D=.25,r=0,n=800,G={},w={},k={},F="spatial",h=null)=>{r===0&&(r="100%");let N={};if(N.root=g,N.buttons={},N.buttons.blue="#8797ff",N.buttons.gray="gray",N.buttons.light_gray="#EEEEEE",N.buttons.buttons={},mN(N,o),N.close_up=!1,N.model=A,N.nbhd={},N.nbhd.visible=!1,N.spatial={},Object.keys(N.model).length!==0)if(Object.keys(N.model.get("nbhd")).length===0)N.nbhd.alpha_nbhd=!1,N.nbhd.ini_feature_collection={type:"FeatureCollection",features:[],inst_alpha:null},N.nbhd.feature_collection=N.nbhd.ini_feature_collection;else{N.nbhd.alpha_nbhd=!0,N.nbhd.ini_feature_collection=N.model.get("nbhd"),N.nbhd.inst_alpha=N.nbhd.ini_feature_collection.inst_alpha;let wA=N.nbhd.ini_feature_collection.features.filter(FA=>FA.properties.inv_alpha===N.nbhd.inst_alpha);N.nbhd.feature_collection={type:"FeatureCollection",features:wA}}else N.nbhd.alpha_nbhd=!1,N.nbhd.ini_feature_collection={type:"FeatureCollection",features:[],inst_alpha:null},N.nbhd.feature_collection=N.nbhd.ini_feature_collection;N.containers={},N.containers.root_dim={},N.containers.root_dim.width=r,N.containers.root_dim.height=n,N.custom_callbacks={},N.custom_callbacks.view_change=h,N.cats={},N.cats.cat,N.cats.reset_cat=!1,N.cats.selected_cats=[],N.cats.cell_cats=[],N.cats.dict_cell_cats={},N.cats.color_dict_cluster={},N.cats.cluster_counts=[],N.cats.polygon_cell_names=[],N.cats.svg_bar_cluster=ze("svg"),Object.keys(G).length===0?N.cats.has_meta_cell=!1:N.cats.has_meta_cell=!0,N.cats.meta_cell=G,Object.keys(w).length===0?N.cats.has_meta_cluster=!1:N.cats.has_meta_cluster=!0,N.cats.meta_cluster=w,N.umap={},Object.keys(k).length===0?N.umap.has_umap=!1:N.umap.has_umap=!0,N.umap.umap=k,F==="spatial"?N.umap.state=!1:F==="umap"&&(N.umap.state=!0),console.log(F),console.log("viz_state.umap.state",N.umap.state),N.genes={},N.genes.color_dict_gene={},N.genes.gene_names=[],N.genes.meta_gene={},N.genes.gene_counts=[],N.genes.selected_genes=[],N.genes.trx_ini_radius=D,N.genes.trx_names_array=[],N.genes.trx_data=[],N.genes.gene_text_box="",N.genes.trx_slider=document.createElement("input"),N.genes.gene_search=document.createElement("div"),N.genes.svg_bar_gene=ze("svg"),N.cats.cell_exp_array=[],N.cats.cell_names_array=[],N.cats.cell_name_to_index_map=new Map,N.img={},N.img.image_layer_colors={},N.img.image_layer_sliders={},uN(I);let Y="dapi";await xN(N.img,o);let M=N.img.landscape_parameters.image_info;YV(N.img,N.img.landscape_parameters.image_format),KV(N.img,M),H8(N.img),pV(N.img.image_layer_colors,N.img.image_info);let l=document.createElement("div");l.style.height=n+"px",l.style.border="1px solid #d3d3d3",await bN(N,o,Y),await vl(N.genes,o),await dV(N),N.views=Ol();let J=await FV(l,r,n);RV(J,N.views),N.cache={},N.cache.cell=await BL(),N.cache.trx=await BL(),N.combo_data={},N.tooltip_cat_cell="",MV(J,N),N.edit={},N.edit.svg_bar_rgn=ze("svg"),N.edit.rgn_areas=[],N.edit.color_dict_rgn={},N.edit.rgn_opacity=.75,N.edit.visible=!1,N.edit.modify_index=null,Object.keys(N.model).length!==0?Object.keys(N.model.get("region")).length===0?N.edit.feature_collection={type:"FeatureCollection",features:[]}:N.edit.feature_collection=N.model.get("region"):N.edit.feature_collection={type:"FeatureCollection",features:[]};let U=K8(N),x=await l8(N),q=await wV(o,N),P=await rV(N),Z=U8(N.genes),X=QV(N),L=iV(N,!1),j={background_layer:U,image_layers:x,cell_layer:q,path_layer:P,trx_layer:Z,edit_layer:X,nbhd_layer:L};hV(J,j,N),cV(J,j,N),S8(J,j,N),CV(J,j,N),EV(J,j,N),oV(J,j,N),SM(j,D),N.umap.state===!0&&(Wa(j,!1),de(j,!1),Za(j,!1),Un(j,!1));let m=Qg(j,N.close_up);JV(J,B,Q,C,E,N),J.setProps({layers:m}),lV(J,j,N),Object.keys(N.model).length>0&&(N.model.on("change:update_trigger",()=>UV(J,j,N)),N.model.on("change:cell_clusters",()=>SV(J,j,N)));let $=sV(e,J,j,N);return g.appendChild($),g.appendChild(l),{update_matrix_gene:async wA=>{let FA=wA===N.cats.cat,JA=FA?"cluster":wA;if(FA)N.containers.bar_gene.scrollTo({top:0,behavior:"smooth"});else{let kg=N.genes.svg_bar_gene.selectAll("g").filter(function(){let Yg=LA(this).select("text").node();return Yg&&Yg.textContent===wA}).attr("opacity",1);if(!kg.empty()){let Yg=kg.node().getBoundingClientRect().top,sI=N.containers.bar_gene.getBoundingClientRect().top,bA=Yg-sI+N.containers.bar_gene.scrollTop;N.genes.svg_bar_gene.attr("opacity",1),N.containers.bar_gene.scrollTo({top:bA,behavior:"smooth"})}}N.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",1),TB(j,N,N.cats.cat===wA),AI(N.cats,JA),CB(N.genes,[wA]),DI(N.cats,[]),await ot(N.cats,N.genes,N.global_base_url,wA),EB(j,JA),dB(j,JA),CQ(N.genes,j);let z=Qg(j,N.close_up);J.setProps({layers:z}),N.genes.gene_search_input.value=N.genes.gene_search_input.value!==wA?wA:"",WQ(N.genes,FA?"":wA)},update_matrix_col:async wA=>{if(N.genes.svg_bar_gene.selectAll("g").attr("font-weight","normal").attr("opacity",1),N.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",N.cats.reset_cat?1:.25),N.cats.reset_cat)N.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"});else{let z=N.cats.svg_bar_cluster.selectAll("g").filter(function(){return LA(this).select("text").text()===wA}).attr("opacity",1);if(!z.empty()){let kg=z.node().getBoundingClientRect().top,Yg=N.containers.bar_cluster.getBoundingClientRect().top,sI=kg-Yg+N.containers.bar_cluster.scrollTop;N.containers.bar_cluster.scrollTo({top:sI,behavior:"smooth"})}}AI(N.cats,"cluster"),DI(N.cats,[wA]),CB(N.genes,[]),TB(j,N,!N.cats.selected_cats.length>0);let FA=N.cats.selected_cats.join("-");EB(j,FA),dB(j,FA),CQ(N.genes,j);let JA=Qg(j,N.close_up);J.setProps({layers:JA}),N.genes.gene_search_input.value="",WQ(N.genes,"")},update_matrix_dendro_col:async wA=>{let FA=wA;AI(N.cats,"cluster"),DI(N.cats,FA),CB(N.genes,[]),TB(j,N,!N.cats.selected_cats.length>0);let JA=N.cats.selected_cats.join("-");EB(j,JA),dB(j,JA),CQ(N.genes,j);let z=Qg(j,N.close_up);J.setProps({layers:z}),N.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",N.cats.reset_cat?1:.25);let kg=FA;if(!N.cats.reset_cat){let Yg=N.cats.svg_bar_cluster.selectAll("g").filter(function(){return LA(this).select("text").text()===kg}).attr("opacity",1);if(!Yg.empty()){let sI=Yg.node().getBoundingClientRect().top,bA=N.containers.bar_cluster.getBoundingClientRect().top,SB=sI-bA+N.containers.bar_cluster.scrollTop;N.containers.bar_cluster.scrollTo({top:SB,behavior:"smooth"})}}},update_view_state:async(wA,FA,JA)=>{N.close_up=FA,Vl(wA,J,j,N);let z=Qg(j,N.close_up);J.setProps({controller:{doubleClickZoom:!1},initialViewState:wA,views:N.views,layers:z})},update_layers:()=>{console.log("update_layers")},finalize:()=>{J.finalize()}}};var LV=(g,A)=>{g.tile_scatter_data=A};var HV=(g,A)=>{g.tile_names_array=A},fV=g=>{g.tile_name_to_index_map=new Map,g.tile_names_array.forEach((A,I)=>{g.tile_name_to_index_map.set(A,I)})};var uV=async g=>{let A={},I=g+"/df_colors.parquet";var B=await FQ(I,zg.fetch);let Q=[],C=[],E=B.getChild("__index_level_0__"),o=B.getChild("color");return E&&o&&(Q=E.toArray(),C=o.toArray()),Q.forEach((e,D)=>{A[String(e)]=Et(C[D])}),A};var mV=async(g,A,I)=>{let B=I.model.get("update_trigger"),Q;B.click_type==="row-label"?(Q=B.click_value,AI(I.cats,Q),await dM(I,Q)):B.click_type==="col-label"?(AI(I.cats,"cluster"),DI(I.cats,[B.click_value])):B.click_type==="col-dendro"?(AI(I.cats,"cluster"),DI(I.cats,B.click_value)):AI("cluster"),$h(I,A),g.setProps({layers:[A.simple_image_layer,A.square_scatter_layer]}),Q&&Q!=="cluster"&&(I.genes.gene_search_input.value=I.genes.gene_search_input.value!==Q?Q:"",await WQ(I.genes,Q))};var xV=(g,A)=>{if(g.index===-1||!g.layer)return null;let I=A.cats.tile_cats_array[g.index];return A.tooltip_cat_cell=I,DJ(".deck-tooltip").style("margin-top","75px"),{html:`<div>${I}</div?`}};var CL=async(g,A,I,B,Q,C,E,o,e=1.4,D="",r=0,n=800)=>{r===0&&(r="100%");let G=document.createElement("div");G.style.height=" 800px";let w={};uN(B),mN(w,I),w.model=g,w.img={},w.img.image_layer_colors={},w.img.image_layer_sliders={},await xN(w.img,I),await bN(w,I,"cells"),w.buttons={},w.buttons.blue="#8797ff",w.buttons.gray="gray",w.buttons.light_gray="#EEEEEE",w.buttons.buttons={},w.genes={},w.genes.color_dict_gene={},w.genes.gene_names=[],w.genes.meta_gene={},w.genes.gene_counts=[],w.genes.selected_genes=[],w.genes.trx_ini_radius=1,w.genes.trx_names_array=[],w.genes.trx_data=[],w.genes.gene_text_box="",w.genes.trx_slider=document.createElement("input"),w.genes.gene_search=document.createElement("div"),w.genes.svg_bar_gene=ze("svg"),w.cats={},w.cats.cat="cluster",w.cats.reset_cat=!1,w.cats.selected_cats=[],w.cats.cell_cats=[],w.cats.dict_cell_cats={},w.cats.color_dict_cluster={},w.cats.cluster_counts=[],w.cats.polygon_cell_names=[],w.cats.svg_bar_cluster=ze("svg"),w.tooltip_cat_tile="",w.cats.square_tile_size=e,await vl(w.genes,I);let k={name:"cells",color:[0,0,255]},F=I+"/tile_geometries.parquet";var h=await FQ(F,zg.fetch);w.cats.tile_cats_array=h.getChild("cluster").toArray(),w.cats.tile_exp_array=[],w.cats.tile_names_array=[],w.cats.tile_scatter_data=[],LV(w.cats,qn(h)),HV(w.cats,h.getChild("name").toArray()),fV(w.cats),w.cats.tile_color_dict=await uV(I);let N=await h8(w,k),Y=y8(w.cats),M={simple_image_layer:N,square_scatter_layer:Y};w.views=Ol();let l=k8(G,r,n),J={target:[Q,C,E],zoom:o};l.setProps({views:w.views,layers:[M.simple_image_layer,M.square_scatter_layer],getTooltip:x=>xV(x,w),initialViewState:J}),Object.keys(w.model).length>0&&w.model.on("change:update_trigger",()=>mV(l,M,w)),M8(l,M,w);let U=DV(l,M,w);return A.appendChild(U),A.appendChild(G),()=>l.finalize()};var mnA=({isDragging:g})=>g?"grabbing":"pointer",bV=(g,A,I)=>(typeof A=="number"&&(A=A+100,I=I+100),new Na({parent:g,getCursor:mnA,width:A,height:I}));var TV=(g,A)=>{let I;g.mat.forEach((B,Q)=>{B.forEach((C,E)=>{C>=0?I=[255,0,0]:I=[0,0,255];let o={position:[A.viz.col_offset*(E+.5),A.viz.row_offset*(Q+1.5)],color:[I[0],I[1],I[2],255*Math.abs(C)/A.mat.max_abs_value],value:C,row:Q,col:E};A.mat.mat_data.push(o)})})};var WV=(g,A,I,B,Q,C,E,o)=>{let e={};return e.root=I,e.model=g,e.custom_callbacks={},e.custom_callbacks.row=C,e.custom_callbacks.col=E,e.custom_callbacks.col_dendro=o,e.viz={},e.viz.height_margin=100,e.cats={},e.cats.num_cats={},e.cats.num_cats.row=0,e.cats.num_cats.col=0,e.root.style.height=Q+e.viz.height_margin+"px",e.viz.mat_width=B,e.viz.mat_height=Q,e.mat={},e.mat.num_rows=A.mat.length,e.mat.num_cols=A.mat[0].length,e.row_nodes=A.row_nodes,e.col_nodes=A.col_nodes,e.mat.net_mat=A.mat,e.linkage=A.linkage,e.viz.base_font_size=125,e.viz.col_label=75,e.viz.row_label=75,e.viz.extra_space={},e.viz.extra_space.row=10,e.viz.extra_space.col=10,e.zoom={},e.zoom.ini_zoom_x=0,e.zoom.ini_zoom_y=0,e.viz.row_cat_width=9,e.viz.col_cat_height=9,e.viz.row_cat_offset=10,e.viz.col_cat_offset=10,e.viz.label_row_x=15,e.viz.label_col_y=25,e.viz.cat_shift_row=30,e.viz.label_buffer=1,e.animate={},e.animate.duration=2500,e.viz.dendrogram_width=15,e.viz.font_size={},e.viz.font_size.rows=e.viz.base_font_size/e.mat.num_rows,e.viz.font_size.cols=e.viz.base_font_size/e.mat.num_cols,e.viz.col_region=(e.viz.col_cat_height+e.viz.extra_space.col)*e.cats.num_cats.col+e.viz.col_label,e.viz.row_region=(e.viz.row_cat_width+e.viz.extra_space.row)*e.cats.num_cats.row+e.viz.row_label,e.viz.col_width=e.viz.mat_width/e.mat.num_cols,e.viz.row_offset=e.viz.mat_height/e.mat.num_rows,e.viz.col_offset=e.viz.mat_width/e.mat.num_cols,e.viz.cat_shift_col=e.viz.col_label,e.zoom.ini_pan_x=e.viz.mat_width/2,e.zoom.ini_pan_y=e.viz.mat_height/2+e.viz.row_offset,e.mat.mat_data=[],e.mat.num_rows=A.mat.length,e.mat.num_cols=A.mat[0].length,e.mat.max_abs_value=A.mat.flat().reduce((D,r)=>Math.max(D,Math.abs(r)),-1/0),e.order={},e.order.current={},e.order.current.row="clust",e.order.current.col="clust",e.order.new="ini",e.buttons={},e.buttons.blue="#8797ff",e.buttons.gray="#EEEEEE",e.click={},e.click.type,e.click.value,e};var ZV=(g,A)=>{let I=[];g.col_nodes.forEach((B,Q)=>{let C={name:B.name,ini:B.ini,clust:B.clust,rank:B.rank,rankvar:B.rankvar,index:Q};I.push(C)}),A.labels.col_label_data=I,A.labels.clicks.col=0,A.mat.orders.col={},A.mat.orders.col.ini=I.map(B=>B.ini),A.mat.orders.col.clust=I.map(B=>B.clust+1),A.mat.orders.col.rank=I.map(B=>B.rank+1),A.mat.orders.col.rankvar=I.map(B=>B.rankvar+1)},PV=(g,A)=>{let I=[];g.row_nodes.forEach((B,Q)=>{let C={name:B.name,ini:B.ini,clust:B.clust,rank:B.rank,rankvar:B.rankvar,index:Q};I.push(C)}),A.labels.row_label_data=I,A.labels.clicks.row=0,A.mat.orders.row={},A.mat.orders.row.ini=I.map(B=>B.ini),A.mat.orders.row.clust=I.map(B=>B.clust+1),A.mat.orders.row.rank=I.map(B=>B.rank+1),A.mat.orders.row.rankvar=I.map(B=>B.rankvar+1)};var OV=(g,A)=>{var I=0;let B=0;var Q=A.mat.num_rows*A.cats.num_cats.row;return new Array(Q).fill(0).map(()=>{var E=B%A.cats.num_cats.row;B%A.cats.num_cats.row===0&&(I+=1);let o={position:[A.viz.row_cat_offset*(E+.5)+20,A.viz.row_offset*(I+.5)],color:[0,255,0,255],name:"something "+I};return B+=1,o})},VV=(g,A)=>{var I=A.mat.num_cols*A.cats.num_cats.col,B=0;let Q=0;return new Array(I).fill(0).map(()=>{var E=Q%A.mat.num_cols;Q%A.mat.num_cols===0&&(B+=1);let o={position:[A.viz.col_offset*(E+.5),A.viz.col_cat_offset*(B+1.5)-35],color:[0,255,0,150],name:"some column "+E};return Q+=1,o})};var vV=`#version 300 es
1726
1726
  #define SHADER_NAME scatterplot-layer-vertex-shader
1727
1727
 
1728
1728
  // customize the vertex shader to allow for x and y scaling and zooming