celldega 0.6.0 → 0.6.1
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
|
@@ -1722,7 +1722,7 @@ ${g.stack}`:B}var LE=0,nM=new TextEncoder("utf-8"),_eA=typeof nM.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}})}};Vn.defaultProps=AnA;Vn.layerName="EditablePathLayer";var gnA=[0,0,0,153],InA=[0,0,0,144],BnA=[0,0,0,255],QnA=[0,0,144,144],CnA=[144,144,144,255],EnA=[144,144,144,144],inA=[192,0,0,255],onA=[0,0,0,128],tnA=[124,0,192,255],enA=[255,255,255,255],anA=5,DnA=3,snA=7,rnA=32*X0,gV=HE;function rt(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 AV(g){switch(g.properties.editHandleType){case"existing":return inA;case"snap-source":return tnA;case"intermediate":default:return onA}}function cnA(g){return enA}function GnA(g){switch(g.properties.editHandleType){case"existing":return anA;case"snap":return snA;case"intermediate":default:return DnA}}var wnA={mode:gV,onEdit:()=>{},pickable:!0,pickingRadius:10,pickingDepth:5,fp64:!1,filled:!0,stroked:!0,lineWidthScale:X0,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?BnA:gnA,getFillColor:(g,A,I)=>A?QnA: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=>CnA,getTentativeFillColor:g=>EnA,getTentativeLineWidth:g=>g&&g.properties&&g.properties.lineWidth||3,editHandleType:"point",editHandlePointRadiusScale:1,editHandlePointOutline:!0,editHandlePointStrokeWidth:2,editHandlePointRadiusUnits:"pixels",editHandlePointRadiusMinPixels:4,editHandlePointRadiusMaxPixels:8,getEditHandlePointColor:AV,getEditHandlePointOutlineColor:cnA,getEditHandlePointRadius:GnA,editHandleIconAtlas:null,editHandleIconMapping:null,editHandleIconSizeScale:1,editHandleIconSizeUnits:"pixels",getEditHandleIcon:g=>g.properties.editHandleType,getEditHandleIconSize:10,getEditHandleIconColor:AV,getEditHandleIconAngle:0,billboard:!0},hnA={view:pC,modify:Go,translate:new Pn(new at),transform:new Pn(new j0),scale:Ue,rotate:Se,duplicate:M0,split:q0,extrude:d0,elevation:U0,drawPoint:S0,drawLineString:L0,drawPolygon:HE,drawRectangle:Ms,drawSquare:f0,drawRectangleFromCenter:u0,drawSquareFromCenter:m0,drawCircleFromCenter:b0,drawCircleByBoundingBox:T0,drawEllipseByBoundingBox:W0,drawRectangleUsing3Points:Z0,drawEllipseUsing3Points:P0,draw90DegreePolygon:O0,drawPolygonByDragging:V0},nt=class extends On{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:Vn,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 Xt(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=hnA[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 gV),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:ha,iconAtlas:this.props.editHandleIconAtlas,iconMapping:this.props.editHandleIconMapping,sizeUnits:this.props.editHandleIconSizeUnits,sizeScale:this.props.editHandleIconSizeScale,getIcon:rt(this.props.getEditHandleIcon),getSize:rt(this.props.getEditHandleIconSize),getColor:rt(this.props.getEditHandleIconColor),getAngle:rt(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:rt(this.props.getEditHandlePointRadius),getFillColor:rt(this.props.getEditHandlePointColor),getLineColor:rt(this.props.getEditHandlePointOutlineColor),billboard:this.props.billboard},[new Xt(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:rt(this.props.getTentativeLineColor),getLineWidth:rt(this.props.getTentativeLineWidth),getFillColor:rt(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 jt({getSize:rnA,...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(nt,"layerName","EditableGeoJsonLayer"),p(nt,"defaultProps",wnA);var NnA=pC,knA=9;var owg={mode:NnA,...nt.defaultProps,data:[],selectedIndexes:[],filled:!1,stroked:!0,lineWidthScale:X0,lineWidthMinPixels:1,lineWidthMaxPixels:Number.MAX_SAFE_INTEGER,lineWidthUnits:"pixels",getHexagons:g=>g.hexIds,getEditedCluster:(g,A)=>A?{...A,hexIds:g}:{hexIds:g},resolution:knA};var bl={NONE:null,RECTANGLE:"rectangle",POLYGON:"polygon"},wwg={[bl.RECTANGLE]:Ms,[bl.POLYGON]:HE},hwg={[bl.RECTANGLE]:{dragToDraw:!0}},Nwg={selectionType:bl.RECTANGLE,layerIds:[],onSelect:()=>{}};var ynA=g=>(g.features.forEach((A,I)=>{if(A.geometry.type==="Polygon"){let B=A.geometry.coordinates[0],Q=Math.abs(pJ(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),Tl=g=>{Object.keys(g.model).length>0&&(g.model.set("region",{}),g.model.set("region",g.edit.feature_collection),g.model.save_changes())},Wl=(g,A,I)=>{g.edit.feature_collection=ynA(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),{}),si(g.edit.svg_bar_rgn,g.edit.rgn_areas,g.edit.color_dict_rgn,g0,[],A,I,g)},FnA=(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"&&(Zl(A,pC),qA(I.edit.buttons.sktch).style("color","gray").classed("active",!1),I.edit.mode="view",jn(A,!0),vn(A,!0),zh(A,!0),Wl(I,g,A),Tl(I));let E=Qg(A,I.close_up);g.setProps({layers:E}),Wl(I,g,A),Tl(I)},RnA=(g,A,I,B)=>{if(g.featureType==="polygons"&&B.edit.mode==="view"){I.edit_layer=I.edit_layer.clone({id:"edit-layer-modify",mode:Go,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,qA(B.edit.buttons.del).classed("active",!0).style("display","inline-flex"),qA(B.edit.buttons.rgn).style("display","none"),qA(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:pC,selectedFeatureIndexes:[]});let Q=Qg(I,B.close_up);A.setProps({layers:Q}),B.edit.mode="view",B.edit.modify_index=null,qA(B.edit.buttons.del).classed("active",!1).style("display","none"),qA(B.edit.buttons.rgn).style("display","inline-flex"),qA(B.edit.buttons.sktch).style("display","inline-flex")}},IV=g=>new nt({id:"edit-layer",data:g.edit.feature_collection,selectedFeatureIndexes:[],mode:pC,filled:!0,pointRadiusMinPixels:2,pointRadiusScale:2e3,extruded:!0,getElevation:1e3,getFillColor:I=>I.properties.color,pickable:!0,autoHighlight:!0,modeConfig:{preventOverlappingLines:!0},visible:!1}),BV=(g,A,I)=>{A.edit_layer=A.edit_layer.clone({onEdit:B=>FnA(g,A,I,B)})},QV=(g,A,I)=>{A.edit_layer=A.edit_layer.clone({onClick:B=>RnA(B,g,A,I)})},Zl=(g,A)=>{g.edit_layer=g.edit_layer.clone({mode:A})},XS=(g,A)=>{g.edit_layer=g.edit_layer.clone({visible:A})};var CV=(g,A)=>new Xt({id:"nbhd-layer",data:g.nbhd.feature_collection,pickable:!0,stroked:!1,filled:!0,getLineWidth:1,getFillColor:B=>Ke(B.properties.color),opacity:.5,visible:A}),MnA=async(g,A,I,B,Q)=>{let C=g.object.properties.cat;ug(Q.cats,"cluster"),Vg(Q.cats,[C]),HI(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 qA(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"})}}fI(B,E),$I(B,E),zS(Q),_S(Q,B);let o=Qg(B,Q.close_up);I.setProps({layers:o})},EV=(g,A,I)=>{A.nbhd_layer=A.nbhd_layer.clone({onClick:(B,Q)=>MnA(B,Q,g,A,I)})},zS=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}},_S=(g,A)=>{console.log("update_nbhd_layer_data!!"),A.nbhd_layer=A.nbhd_layer.clone({data:g.nbhd.feature_collection})},iV=(g,A)=>{g.nbhd_layer=g.nbhd_layer.clone({visible:A})};var iB=(g,A,I)=>{qA(A.containers.image).selectAll(".img_layer_button").style("color",I?"blue":"gray"),A.img.image_layer_sliders.map(B=>ma(B,I)),Xh(g,I)},$S=()=>{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},oV=()=>{let g=document.createElement("div");return g.style.display="flex",g.style.flexDirection="row",g.className="ctrl_container",g.style.width="535px",g},rE=(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},z0=g=>{let A=document.createElement("div");return A.className=g,A.style.width="100%",A.style.marginLeft="2px",A.style.marginTop="2px",A},tV=(g,A,I)=>{let B=$S(),Q=rE("button_container","column"),C=rE("slider_container","column"),E=33,o=["col","row"],e=["clust","sum","var","ini"];o.forEach(r=>{let n=rE(r,"row");qA(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=>{m8(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,oU(n,G,n.dendro.sliders[G+"_value"]),tU(n,G),I0(n,G),f8(A,n,G),r.setProps({layers:Ct(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",qA(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},eV=(g,A,I)=>{let B=$S(),Q=oV(),C=rE("image_container","row"),E=rE("tile_container","row"),o=z0("tile_slider_container");return ks(C,"sst","IMG","blue",50,"button",g,A,I),ks(E,"sst","TILE","blue",50,"button",g,A,I),I.sliders={},SM("tile",g,A,I),o.appendChild(I.sliders.tile),B.appendChild(Q),E.appendChild(o),QU("sst",g,A,I),Q.appendChild(C),Q.appendChild(E),Q.appendChild(I.genes.gene_search),B},aV=(g,A,I,B)=>{let Q=$S(),C=oV();B.containers.image=rE("image_container","column");let E=rE("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",v=>{let{scrollTop:H,scrollHeight:X,clientHeight:L}=E,aA=H===0,wA=H+L===X;(aA&&v.deltaY<0||wA&&v.deltaY>0)&&v.preventDefault()});let o="115px",e=rE("cell_container","column");e.style.width=o;let D=rE("cell_ctrl_container","row");D.style.marginLeft="0px";let r=rE("gene_container","column");r.style.marginTop="0px",r.style.width=o;let n=rE("trx_container","row"),G=rE("rgn_container","column");G.style.width=o;let w=rE("rgn_ctrl_container","row");w.style.marginLeft="0px",w.style.height="22.5px";let k=z0("cell_slider_container"),F=z0("trx_slider_container");ks(B.containers.image,"ist","IMG","blue",30,"button",A,I,B);let h=(v,H)=>v.image_layer_sliders.filter(X=>X.name===H),y=(v,H)=>{let X=H.button_name,L=rE("image_layer_container","row");L.style.height="21px",ks(L,"ist",X,"blue",75,"img_layer_button",A,I,B);let aA=z0(X),wA=h(v,X)[0],yA=S8(X,A,I,B),UA=LM(yA,100);CU(wA,50,UA),aA.appendChild(wA),L.appendChild(aA),E.appendChild(L)};B.img.image_info.map(v=>y(B.img,v)),ks(D,"ist","CELL","blue",40,"button",A,I,B),ks(n,"ist","TRX","blue",40,"button",A,I,B),B.containers.image.appendChild(E),B.sliders={},SM("cell",A,I,B),k.appendChild(B.sliders.cell),D.appendChild(k),B.containers.bar_cluster=HM(),fM(B.containers.bar_cluster,ys,B.cats.svg_bar_cluster,B.cats.cluster_counts,B.cats.color_dict_cluster,A,I,B),B.containers.bar_gene=HM(),fM(B.containers.bar_gene,A0,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),SM("trx",A,I,B),n.appendChild(F),F.appendChild(B.sliders.trx),r.appendChild(n),r.appendChild(B.containers.bar_gene),QU("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 J=(v,H,X,L)=>{let aA=qA(v.currentTarget),wA=aA.classed("active");if(L.edit.visible=!0,aA.classed("active",L.edit.visible).style("color","blue"),qA(L.edit.buttons.rgn).style("color","blue").classed("active",!0),XS(X,L.edit.visible),wA===!1){aA.classed("active",!0).style("color","blue"),L.edit.mode="sktch",Zl(X,HE),jn(X,!1),vn(X,!1),zh(X,!1);let yA=Qg(X,L.close_up);H.setProps({layers:yA})}else if(wA===!0){L.edit.mode="view",aA.classed("active",!1).style("color","gray"),Zl(X,pC),jn(X,!0),vn(X,!0),zh(X,!0);let yA=Qg(X,L.close_up);H.setProps({layers:yA})}},M=(v,H,X,L)=>{let aA=qA(v.currentTarget);aA.classed("active")===!1?(L.edit.visible=!0,aA.classed("active",L.edit.visible).style("color","blue"),qA(L.edit.buttons.alph).style("display","none"),qA(L.edit.buttons.sktch).style("display","inline-flex")):(L.edit.visible=!1,aA.classed("active",L.edit.visible).style("color","gray"),qA(L.edit.buttons.alph).style("display","inline-flex"),qA(L.edit.buttons.sktch).style("display","none")),XS(X,L.edit.visible);let yA=Qg(X,L.close_up);H.setProps({layers:yA}),L.edit.rgn_areas=L.edit.feature_collection.features.map((RA,UA)=>({name:(UA+1).toString(),value:RA.properties.area})),L.edit.color_dict_rgn=L.edit.feature_collection.features.reduce((RA,UA,$)=>(RA[($+1).toString()]=UA.properties.color,RA),{}),si(L.edit.svg_bar_rgn,L.edit.rgn_areas,L.edit.color_dict_rgn,g0,[],H,X,L)},l=(v,H)=>(H>=0&&H<v.features.length&&v.features.splice(H,1),v),Y=(v,H,X,L)=>{L.edit.feature_collection=l(L.edit.feature_collection,L.edit.modify_index),X.edit_layer=X.edit_layer.clone({id:"edit-layer-delete",data:L.edit.feature_collection,mode:pC,selectedFeatureIndexes:[]});let aA=Qg(X,L.close_up);H.setProps({layers:aA}),qA(L.edit.buttons.del).classed("active",!1).style("display","none"),qA(L.edit.buttons.rgn).style("display","inline-flex"),qA(L.edit.buttons.sktch).style("display","inline-flex"),Wl(L,H,X),Tl(L)},U=v=>{console.log("clicking nbhd bar",v)},x=(v,H,X,L)=>{let aA=qA(v.currentTarget);L.nbhd.visible===!0?(L.nbhd.visible=!1,qA(L.edit.buttons.alph).style("color","gray"),qA(L.edit.buttons.rgn).style("display","inline-flex"),L.sliders.alph.style.display="none"):(L.nbhd.visible=!0,qA(L.edit.buttons.alph).style("color","blue"),qA(L.edit.buttons.rgn).style("display","none"),L.sliders.alph.style.display="block"),iV(X,L.nbhd.visible),dM(X,L.nbhd.visible!==!0),Xh(X,L.nbhd.visible!==!0),KM(X,L.nbhd.visible!==!0),jn(X,L.nbhd.visible!==!0),vn(X,L.nbhd.visible!==!0);let wA=Qg(X,L.close_up,L.nbhd.visible);H.setProps({layers:wA}),L.nbhd.nbhd_areas=L.nbhd.feature_collection.features.map((yA,RA)=>({name:(RA+1).toString(),value:yA.properties.area})),console.log(L.nbhd.color_dict_nbhd),si(L.edit.svg_bar_rgn,L.nbhd.nbhd_areas,L.cats.color_dict_cluster,U,[],H,X,L)};B.edit.buttons={},B.edit.mode="view",$h(A,I,B,w,"RGN",30,M),B.nbhd.alpha_nbhd===!0&&$h(A,I,B,w,"ALPH",30,x),$h(A,I,B,w,"SKTCH",40,J),qA(B.edit.buttons.sktch).style("display","none"),$h(A,I,B,w,"DEL",30,Y);let q=z0("alph_slider_container"),W=(v,H,X,L)=>{let aA=v.target.value/100,wA=Array.from(new Set(L.nbhd.ini_feature_collection.features.map(RA=>RA.properties.inv_alpha))).sort((RA,UA)=>RA-UA),yA=wA[Math.round(aA*(wA.length-1))];if(yA!==L.nbhd.inst_alpha){console.log("Mapped inv_alpha:",yA),L.nbhd.inst_alpha=yA,zS(L),_S(L,X);let RA=Qg(X,L.close_up);H.setProps({layers:RA})}},P=Array.from(new Set(B.nbhd.ini_feature_collection.features.map(v=>v.properties.inv_alpha))).sort((v,H)=>v-H);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",v=>W(v,A,I,B)),B.sliders.alph.style.display="none",w.appendChild(q),q.appendChild(B.sliders.alph),qA(B.edit.buttons.del).style("color","red").style("display","none"),B.containers.bar_rgn=HM(),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),fM(B.containers.bar_rgn,g0,B.edit.svg_bar_rgn,B.edit.rgn_areas,B.edit.color_dict_rgn,A,I,B),Q};var lnA=(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]},DV=g=>new Ti({id:"path-layer",data:[],pickable:!0,widthScale:3,widthMinPixels:1,getPath:I=>I,getColor:(I,B)=>lnA(g.cats,I,B),widthUnits:"pixels"}),JnA=(g,A,I,B,Q)=>{let C=Q.cats.polygon_cell_names[g.index],E=Q.cats.dict_cell_cats[C];ug(Q.cats,"cluster"),Vg(Q.cats,[E]),HI(Q.genes,[]),iB(B,Q,!Q.cats.selected_cats.length>0);let o=Q.cats.selected_cats.join("-");fI(B,o),$I(B,o),GB(Q.genes,B);let e=Qg(B,Q.close_up);I.setProps({layers:e})},sV=async(g,A,I,B)=>{let Q=await _4(g,A,B);I.path_layer=I.path_layer.clone({data:Q})},rV=(g,A,I)=>{A.path_layer=A.path_layer.clone({onClick:(B,Q)=>JnA(B,Q,g,A,I)})},x8=(g,A)=>{g.path_layer=g.path_layer.clone({visible:A})},$I=(g,A)=>{g.path_layer=g.path_layer.clone({id:"path-layer-"+A})},vn=(g,A)=>{g.path_layer=g.path_layer.clone({pickable:A})};var YnA=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,ug(Q.cats,"cluster"),Vg(Q.cats,[E]),HI(Q.genes,[]),iB(B,Q,!Q.cats.selected_cats.length>0);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 qA(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"})}}fI(B,o),$I(B,o),GB(Q.genes,B);let e=Qg(B,Q.close_up);I.setProps({layers:e}),Q.genes.gene_search_input.value="",RQ(Q.genes,"")},nV=async(g,A)=>{let I=g+"/cell_metadata.parquet";var B=await FQ(I,_g.fetch);let Q=Jn(B);await x4(A.genes,g),b4(A.cats,B),T4(A.cats);var C=await FQ(g+"/cell_clusters/cluster.parquet",_g.fetch);W4(A.cats,C,"cluster"),P4(A.cats);let E=B.getChild("name").toArray(),o=Q.attributes.getPosition.value;return A.combo_data.cell=E.map((D,r)=>({name:D,cat:A.cats.dict_cell_cats[D],x:o[r*2],y:o[r*2+1]})),new BQ({id:"cell-layer",radiusMinPixels:1,getRadius:5,pickable:!0,getColor:(D,r)=>O4(A.cats,D,r),data:Q})},cV=(g,A,I)=>{A.cell_layer=A.cell_layer.clone({onClick:(B,Q)=>YnA(B,Q,g,A,I)})},b8=(g,A)=>{g.cell_layer=g.cell_layer.clone({visible:A})},L8=(g,A)=>{g.cell_layer=g.cell_layer.clone({getRadius:A})},fI=(g,A)=>{g.cell_layer=g.cell_layer.clone({id:"cell-layer-"+A})},jn=(g,A)=>{g.cell_layer=g.cell_layer.clone({pickable:A})};var Pl=()=>[new Ei({id:"ortho"})];var GV=(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 Ol=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=GV(E.bounds.min_x,E.bounds.max_x,E.bounds.min_y,E.bounds.max_y,o);if(F.length<e){await d8(E.global_base_url,F,C,E),await sV(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 W=x.find(P=>P.name===q);return W?W.value+=1:x.push({name:q,value:1}),x},[]).filter(x=>x.value>0).sort((x,q)=>q.value-x.value);si(E.genes.svg_bar_gene,M,E.genes.color_dict_gene,A0,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 W=x.find(P=>P.name===q);return W?W.value+=1:x.push({name:q,value:1}),x},[]).filter(x=>x.value>0).sort((x,q)=>q.value-x.value);si(E.cats.svg_bar_cluster,U,E.cats.color_dict_cluster,ys,E.cats.selected_cats,Q,C,E),E.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"})}else E.close_up&&(E.close_up=!1,si(E.genes.svg_bar_gene,E.genes.gene_counts,E.genes.color_dict_gene,A0,E.genes.selected_genes,Q,C,E),si(E.cats.svg_bar_cluster,E.cats.cluster_counts,E.cats.color_dict_cluster,ys,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 KnA=200,wV=LM(({viewState:g},A,I,B)=>(Ol(g,A,I,B),typeof B.custom_callbacks.view_change=="function"&&B.custom_callbacks.view_change(g,B.close_up,I.trx_layer),g),KnA);var hV=(g,A)=>{if(A.index===-1||!A.layer)return null;let I="",B="",Q="";return console.log(A.layer.id),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>`),cD(".deck-tooltip").style("margin-top","75px"),{html:I}};var pnA=({isDragging:g})=>g?"grabbing":"pointer",NV=(g,A,I)=>new ca({parent:g,controller:{doubleClickZoom:!1},getCursor:pnA,width:A,height:I}),kV=(g,A)=>{g.setProps({views:A})},yV=(g,A)=>{g.setProps({getTooltip:I=>hV(A,I)})},FV=(g,A,I)=>{g.setProps({onViewStateChange:B=>{wV(B,g,A,I)}})},RV=(g,A,I,B,Q)=>{let C={target:[A,I,B],zoom:Q};g.setProps({initialViewState:C})};var MV=(g,A)=>{g.image_format=A},lV=(g,A)=>{g.image_info=A},JV=(g,A)=>{A.forEach(I=>{g[I.button_name]=I.color})};var Vl=async(g,A)=>{let I=await FQ(A+"/meta_gene.parquet",_g.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 YV=(g,A)=>{g.color_dict_cluster=A.color;for(let B in g.color_dict_cluster)g.color_dict_cluster[B]=Ke(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)},KV=async g=>{let A=g.global_base_url+"/cell_clusters/meta_cluster.parquet";var I=await FQ(A,_g.fetch);let B=[],Q=[],C=[],E=I.getChild("__index_level_0__"),o=I.getChild("color"),e=I.getChild("count"),D=[];for(let r of I.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]=Ke(Q[n]),g.cats.cluster_counts.push({name:r,value:Number(C[n])})}),g.cats.cluster_counts.sort((r,n)=>n.value-r.value)};var pV=async(g,A,I)=>{let B=I.model.get("update_trigger"),Q,C;if(!("click_type"in B)||!("click_value"in B)){if(B.type==="row_label"){Q=B.value.name;let E=Q===I.cats.cat?"cluster":Q;iB(A,I,I.cats.cat===Q),ug(I.cats,E),HI(I.genes,[Q]),Vg(I.cats,[]),await to(I.cats,I.genes,I.global_base_url,Q),fI(A,E),$I(A,E),GB(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 qA(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:"",RQ(I.genes,Q)}else if(B.type==="col_label"){Q="cluster",C=B.value.name,ug(I.cats,"cluster"),Vg(I.cats,[C]),HI(I.genes,[]),iB(A,I,!I.cats.selected_cats.length>0);let E=I.cats.selected_cats.join("-");fI(A,E),$I(A,E),GB(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 qA(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;ug(I.cats,"cluster"),Vg(I.cats,E),HI(I.genes,[]),iB(A,I,!I.cats.selected_cats.length>0);let o=I.cats.selected_cats.join("-");fI(A,o),$I(A,o),GB(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 qA(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"})}}ug(I.cats,Q),Vg(I.cats,B.click_value)}}else if(B.click_type==="row-label"){Q=B.click_value;let E=Q===I.cats.cat?"cluster":Q;iB(A,I,I.cats.cat===Q),ug(I.cats,E),HI(I.genes,[Q]),Vg(I.cats,[]),await to(I.cats,I.genes,I.global_base_url,Q),fI(A,E),$I(A,E),GB(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 qA(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:"",RQ(I.genes,Q)}else if(B.click_type==="col-label"){Q="cluster",C=B.click_value,ug(I.cats,"cluster"),Vg(I.cats,[C]),HI(I.genes,[]),iB(A,I,!I.cats.selected_cats.length>0);let E=I.cats.selected_cats.join("-");fI(A,E),$I(A,E),GB(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 qA(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.click_type==="col-dendro"){Q="cluster",Q="cluster";let E=B.click_value;ug(I.cats,"cluster"),Vg(I.cats,E),HI(I.genes,[]),iB(A,I,!I.cats.selected_cats.length>0);let o=I.cats.selected_cats.join("-");fI(A,o),$I(A,o),GB(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 qA(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"})}}ug(I.cats,Q),Vg(I.cats,B.click_value)}else Q="cluster"};var qV=(g,A,I)=>{let B=I.model.get("cell_clusters");YV(I.cats,B.meta_cluster),Z4(I.cats,B.new_clusters),fI(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]})),si(I.cats.svg_bar_cluster,I.cats.cluster_counts,I.cats.color_dict_cluster,ys,[],g,A,I)};var qnA=(g,A,I)=>{if(g.size>=20){let Q=g.keys().next().value;g.delete(Q)}g.set(A,I)},dnA=(g,A)=>{let I=g.get(A);return I&&(g.delete(A),g.set(A,I)),I},UnA=g=>{g.clear()},AL=()=>{let g=new Map;return{set:(A,I)=>qnA(g,A,I),get:A=>dnA(g,A),clear:()=>UnA(g)}};var gL=async(g,A,I,B,Q,C,E,o,e="",D=.25,r=0,n=800,G=null)=>{r===0&&(r="100%");let w={};if(w.buttons={},w.buttons.blue="#8797ff",w.buttons.gray="gray",w.buttons.light_gray="#EEEEEE",HN(w,o),w.close_up=!1,w.model=A,w.nbhd={},w.nbhd.visible=!1,Object.keys(w.model.get("nbhd")).length===0)w.nbhd.alpha_nbhd=!1,w.nbhd.ini_feature_collection={type:"FeatureCollection",features:[],inst_alpha:null},w.nbhd.feature_collection=w.nbhd.ini_feature_collection;else{w.nbhd.alpha_nbhd=!0,w.nbhd.ini_feature_collection=w.model.get("nbhd"),w.nbhd.inst_alpha=w.nbhd.ini_feature_collection.inst_alpha;let X=w.nbhd.ini_feature_collection.features.filter(L=>L.properties.inv_alpha===w.nbhd.inst_alpha);w.nbhd.feature_collection={type:"FeatureCollection",features:X}}w.containers={},w.custom_callbacks={},w.custom_callbacks.view_change=G,w.cats={},w.cats.cat,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=Ve("svg"),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=D,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=Ve("svg"),w.cats.cell_exp_array=[],w.cats.cell_names_array=[],w.cats.cell_name_to_index_map=new Map,w.img={},w.img.image_layer_colors={},w.img.image_layer_sliders={},LN(I);let k="dapi";await fN(w.img,o);let F=w.img.landscape_parameters.image_info;MV(w.img,w.img.landscape_parameters.image_format),lV(w.img,F),U8(w.img),JV(w.img.image_layer_colors,w.img.image_info);let h=document.createElement("div");h.style.height=n+"px",h.style.border="1px solid #d3d3d3",await uN(w,o,k),await Vl(w.genes,o),await KV(w),w.views=Pl();let y=await NV(h,r,n);RV(y,B,Q,C,E),kV(y,w.views),w.cache={},w.cache.cell=await AL(),w.cache.trx=await AL(),w.combo_data={},w.tooltip_cat_cell="",yV(y,w),w.edit={},w.edit.svg_bar_rgn=Ve("svg"),w.edit.rgn_areas=[],w.edit.color_dict_rgn={},w.edit.rgn_opacity=.75,w.edit.visible=!1,w.edit.modify_index=null,Object.keys(w.model).length!==0?Object.keys(w.model.get("region")).length===0?w.edit.feature_collection={type:"FeatureCollection",features:[]}:w.edit.feature_collection=w.model.get("region"):w.edit.feature_collection={type:"FeatureCollection",features:[]};let J=l8(w),M=await F8(w),l=await nV(o,w),Y=await DV(w),U=p8(w.genes),x=IV(w),q=CV(w,!1),W={background_layer:J,image_layers:M,cell_layer:l,path_layer:Y,trx_layer:U,edit_layer:x,nbhd_layer:q};cV(y,W,w),rV(y,W,w),q8(y,W,w),BV(y,W,w),QV(y,W,w),EV(y,W,w),UM(W,D);let P=Qg(W,w.close_up);y.setProps({layers:P}),FV(y,W,w),Object.keys(w.model).length>0&&(w.model.on("change:update_trigger",()=>pV(y,W,w)),w.model.on("change:cell_clusters",()=>qV(y,W,w)));let v=aV(e,y,W,w);return g.appendChild(v),g.appendChild(h),{update_matrix_gene:async X=>{let L=X===w.cats.cat,aA=L?"cluster":X;if(L)w.containers.bar_gene.scrollTo({top:0,behavior:"smooth"});else{let yA=w.genes.svg_bar_gene.selectAll("g").filter(function(){let RA=qA(this).select("text").node();return RA&&RA.textContent===X}).attr("opacity",1);if(!yA.empty()){let RA=yA.node().getBoundingClientRect().top,UA=w.containers.bar_gene.getBoundingClientRect().top,$=RA-UA+w.containers.bar_gene.scrollTop;w.genes.svg_bar_gene.attr("opacity",1),w.containers.bar_gene.scrollTo({top:$,behavior:"smooth"})}}w.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",1),iB(W,w,w.cats.cat===X),ug(w.cats,aA),HI(w.genes,[X]),Vg(w.cats,[]),await to(w.cats,w.genes,w.global_base_url,X),fI(W,aA),$I(W,aA),GB(w.genes,W);let wA=Qg(W,w.close_up);y.setProps({layers:wA}),w.genes.gene_search_input.value=w.genes.gene_search_input.value!==X?X:"",RQ(w.genes,L?"":X)},update_matrix_col:async X=>{if(w.genes.svg_bar_gene.selectAll("g").attr("font-weight","normal").attr("opacity",1),w.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",w.cats.reset_cat?1:.25),w.cats.reset_cat)w.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"});else{let wA=w.cats.svg_bar_cluster.selectAll("g").filter(function(){return qA(this).select("text").text()===X}).attr("opacity",1);if(!wA.empty()){let yA=wA.node().getBoundingClientRect().top,RA=w.containers.bar_cluster.getBoundingClientRect().top,UA=yA-RA+w.containers.bar_cluster.scrollTop;w.containers.bar_cluster.scrollTo({top:UA,behavior:"smooth"})}}ug(w.cats,"cluster"),Vg(w.cats,[X]),HI(w.genes,[]),iB(W,w,!w.cats.selected_cats.length>0);let L=w.cats.selected_cats.join("-");fI(W,L),$I(W,L),GB(w.genes,W);let aA=Qg(W,w.close_up);y.setProps({layers:aA}),w.genes.gene_search_input.value="",RQ(w.genes,"")},update_matrix_dendro_col:async X=>{let L=X;ug(w.cats,"cluster"),Vg(w.cats,L),HI(w.genes,[]),iB(W,w,!w.cats.selected_cats.length>0);let aA=w.cats.selected_cats.join("-");fI(W,aA),$I(W,aA),GB(w.genes,W);let wA=Qg(W,w.close_up);y.setProps({layers:wA}),w.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",w.cats.reset_cat?1:.25);let yA=L;if(!w.cats.reset_cat){let RA=w.cats.svg_bar_cluster.selectAll("g").filter(function(){return qA(this).select("text").text()===yA}).attr("opacity",1);if(!RA.empty()){let UA=RA.node().getBoundingClientRect().top,$=w.containers.bar_cluster.getBoundingClientRect().top,bg=UA-$+w.containers.bar_cluster.scrollTop;w.containers.bar_cluster.scrollTo({top:bg,behavior:"smooth"})}}},update_view_state:async(X,L,aA)=>{w.close_up=L,Ol(X,y,W,w);let wA=Qg(W,w.close_up);y.setProps({controller:{doubleClickZoom:!1},initialViewState:X,views:w.views,layers:wA})},update_layers:()=>{console.log("update_layers")},finalize:()=>{y.finalize()}}};var dV=(g,A)=>{g.tile_scatter_data=A};var UV=(g,A)=>{g.tile_names_array=A},SV=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 LV=async g=>{let A={},I=g+"/df_colors.parquet";var B=await FQ(I,_g.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)]=Ke(C[D])}),A};var HV=async(g,A,I)=>{let B=I.model.get("update_trigger"),Q;B.click_type==="row-label"?(Q=B.click_value,ug(I.cats,Q),await pM(I,Q)):B.click_type==="col-label"?(ug(I.cats,"cluster"),Vg(I.cats,[B.click_value])):B.click_type==="col-dendro"?(ug(I.cats,"cluster"),Vg(I.cats,B.click_value)):ug("cluster"),jh(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 RQ(I.genes,Q))};var fV=(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,cD(".deck-tooltip").style("margin-top","75px"),{html:`<div>${I}</div?`}};var IL=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={};LN(B),HN(w,I),w.model=g,w.img={},w.img.image_layer_colors={},w.img.image_layer_sliders={},await fN(w.img,I),await uN(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=Ve("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=Ve("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,_g.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=[],dV(w.cats,Jn(h)),UV(w.cats,h.getChild("name").toArray()),SV(w.cats),w.cats.tile_color_dict=await LV(I);let y=await c8(w,k),J=h8(w.cats),M={simple_image_layer:y,square_scatter_layer:J};w.views=Pl();let l=w8(G,r,n),Y={target:[Q,C,E],zoom:o};l.setProps({views:w.views,layers:[M.simple_image_layer,M.square_scatter_layer],getTooltip:x=>fV(x,w),initialViewState:Y}),Object.keys(w.model).length>0&&w.model.on("change:update_trigger",()=>HV(l,M,w)),y8(l,M,w);let U=eV(l,M,w);return A.appendChild(U),A.appendChild(G),()=>l.finalize()};var SnA=({isDragging:g})=>g?"grabbing":"pointer",uV=(g,A,I)=>(typeof A=="number"&&(A=A+100,I=I+100),new ca({parent:g,getCursor:SnA,width:A,height:I}));var mV=(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 xV=(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 bV=(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)},TV=(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 WV=(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})},ZV=(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 PV=`#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}})}};Vn.defaultProps=AnA;Vn.layerName="EditablePathLayer";var gnA=[0,0,0,153],InA=[0,0,0,144],BnA=[0,0,0,255],QnA=[0,0,144,144],CnA=[144,144,144,255],EnA=[144,144,144,144],inA=[192,0,0,255],onA=[0,0,0,128],tnA=[124,0,192,255],enA=[255,255,255,255],anA=5,DnA=3,snA=7,rnA=32*X0,gV=HE;function rt(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 AV(g){switch(g.properties.editHandleType){case"existing":return inA;case"snap-source":return tnA;case"intermediate":default:return onA}}function cnA(g){return enA}function GnA(g){switch(g.properties.editHandleType){case"existing":return anA;case"snap":return snA;case"intermediate":default:return DnA}}var wnA={mode:gV,onEdit:()=>{},pickable:!0,pickingRadius:10,pickingDepth:5,fp64:!1,filled:!0,stroked:!0,lineWidthScale:X0,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?BnA:gnA,getFillColor:(g,A,I)=>A?QnA: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=>CnA,getTentativeFillColor:g=>EnA,getTentativeLineWidth:g=>g&&g.properties&&g.properties.lineWidth||3,editHandleType:"point",editHandlePointRadiusScale:1,editHandlePointOutline:!0,editHandlePointStrokeWidth:2,editHandlePointRadiusUnits:"pixels",editHandlePointRadiusMinPixels:4,editHandlePointRadiusMaxPixels:8,getEditHandlePointColor:AV,getEditHandlePointOutlineColor:cnA,getEditHandlePointRadius:GnA,editHandleIconAtlas:null,editHandleIconMapping:null,editHandleIconSizeScale:1,editHandleIconSizeUnits:"pixels",getEditHandleIcon:g=>g.properties.editHandleType,getEditHandleIconSize:10,getEditHandleIconColor:AV,getEditHandleIconAngle:0,billboard:!0},hnA={view:pC,modify:Go,translate:new Pn(new at),transform:new Pn(new j0),scale:Ue,rotate:Se,duplicate:M0,split:q0,extrude:d0,elevation:U0,drawPoint:S0,drawLineString:L0,drawPolygon:HE,drawRectangle:Ms,drawSquare:f0,drawRectangleFromCenter:u0,drawSquareFromCenter:m0,drawCircleFromCenter:b0,drawCircleByBoundingBox:T0,drawEllipseByBoundingBox:W0,drawRectangleUsing3Points:Z0,drawEllipseUsing3Points:P0,draw90DegreePolygon:O0,drawPolygonByDragging:V0},nt=class extends On{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:Vn,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 Xt(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=hnA[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 gV),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:ha,iconAtlas:this.props.editHandleIconAtlas,iconMapping:this.props.editHandleIconMapping,sizeUnits:this.props.editHandleIconSizeUnits,sizeScale:this.props.editHandleIconSizeScale,getIcon:rt(this.props.getEditHandleIcon),getSize:rt(this.props.getEditHandleIconSize),getColor:rt(this.props.getEditHandleIconColor),getAngle:rt(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:rt(this.props.getEditHandlePointRadius),getFillColor:rt(this.props.getEditHandlePointColor),getLineColor:rt(this.props.getEditHandlePointOutlineColor),billboard:this.props.billboard},[new Xt(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:rt(this.props.getTentativeLineColor),getLineWidth:rt(this.props.getTentativeLineWidth),getFillColor:rt(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 jt({getSize:rnA,...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(nt,"layerName","EditableGeoJsonLayer"),p(nt,"defaultProps",wnA);var NnA=pC,knA=9;var owg={mode:NnA,...nt.defaultProps,data:[],selectedIndexes:[],filled:!1,stroked:!0,lineWidthScale:X0,lineWidthMinPixels:1,lineWidthMaxPixels:Number.MAX_SAFE_INTEGER,lineWidthUnits:"pixels",getHexagons:g=>g.hexIds,getEditedCluster:(g,A)=>A?{...A,hexIds:g}:{hexIds:g},resolution:knA};var bl={NONE:null,RECTANGLE:"rectangle",POLYGON:"polygon"},wwg={[bl.RECTANGLE]:Ms,[bl.POLYGON]:HE},hwg={[bl.RECTANGLE]:{dragToDraw:!0}},Nwg={selectionType:bl.RECTANGLE,layerIds:[],onSelect:()=>{}};var ynA=g=>(g.features.forEach((A,I)=>{if(A.geometry.type==="Polygon"){let B=A.geometry.coordinates[0],Q=Math.abs(pJ(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),Tl=g=>{Object.keys(g.model).length>0&&(g.model.set("region",{}),g.model.set("region",g.edit.feature_collection),g.model.save_changes())},Wl=(g,A,I)=>{g.edit.feature_collection=ynA(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),{}),si(g.edit.svg_bar_rgn,g.edit.rgn_areas,g.edit.color_dict_rgn,g0,[],A,I,g)},FnA=(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"&&(Zl(A,pC),qA(I.edit.buttons.sktch).style("color","gray").classed("active",!1),I.edit.mode="view",jn(A,!0),vn(A,!0),zh(A,!0),Wl(I,g,A),Tl(I));let E=Qg(A,I.close_up);g.setProps({layers:E}),Wl(I,g,A),Tl(I)},RnA=(g,A,I,B)=>{if(g.featureType==="polygons"&&B.edit.mode==="view"){I.edit_layer=I.edit_layer.clone({id:"edit-layer-modify",mode:Go,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,qA(B.edit.buttons.del).classed("active",!0).style("display","inline-flex"),qA(B.edit.buttons.rgn).style("display","none"),qA(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:pC,selectedFeatureIndexes:[]});let Q=Qg(I,B.close_up);A.setProps({layers:Q}),B.edit.mode="view",B.edit.modify_index=null,qA(B.edit.buttons.del).classed("active",!1).style("display","none"),qA(B.edit.buttons.rgn).style("display","inline-flex"),qA(B.edit.buttons.sktch).style("display","inline-flex")}},IV=g=>new nt({id:"edit-layer",data:g.edit.feature_collection,selectedFeatureIndexes:[],mode:pC,filled:!0,pointRadiusMinPixels:2,pointRadiusScale:2e3,extruded:!0,getElevation:1e3,getFillColor:I=>I.properties.color,pickable:!0,autoHighlight:!0,modeConfig:{preventOverlappingLines:!0},visible:!1}),BV=(g,A,I)=>{A.edit_layer=A.edit_layer.clone({onEdit:B=>FnA(g,A,I,B)})},QV=(g,A,I)=>{A.edit_layer=A.edit_layer.clone({onClick:B=>RnA(B,g,A,I)})},Zl=(g,A)=>{g.edit_layer=g.edit_layer.clone({mode:A})},XS=(g,A)=>{g.edit_layer=g.edit_layer.clone({visible:A})};var CV=(g,A)=>new Xt({id:"nbhd-layer",data:g.nbhd.feature_collection,pickable:!0,stroked:!1,filled:!0,getLineWidth:1,getFillColor:B=>Ke(B.properties.color),opacity:.5,visible:A}),MnA=async(g,A,I,B,Q)=>{let C=g.object.properties.cat;ug(Q.cats,"cluster"),Vg(Q.cats,[C]),HI(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 qA(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"})}}fI(B,E),$I(B,E),zS(Q),_S(Q,B);let o=Qg(B,Q.close_up);I.setProps({layers:o})},EV=(g,A,I)=>{A.nbhd_layer=A.nbhd_layer.clone({onClick:(B,Q)=>MnA(B,Q,g,A,I)})},zS=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}},_S=(g,A)=>{console.log("update_nbhd_layer_data!!"),A.nbhd_layer=A.nbhd_layer.clone({data:g.nbhd.feature_collection})},iV=(g,A)=>{g.nbhd_layer=g.nbhd_layer.clone({visible:A})};var iB=(g,A,I)=>{qA(A.containers.image).selectAll(".img_layer_button").style("color",I?"blue":"gray"),A.img.image_layer_sliders.map(B=>ma(B,I)),Xh(g,I)},$S=()=>{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},oV=()=>{let g=document.createElement("div");return g.style.display="flex",g.style.flexDirection="row",g.className="ctrl_container",g.style.width="535px",g},rE=(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},z0=g=>{let A=document.createElement("div");return A.className=g,A.style.width="100%",A.style.marginLeft="2px",A.style.marginTop="2px",A},tV=(g,A,I)=>{let B=$S(),Q=rE("button_container","column"),C=rE("slider_container","column"),E=33,o=["col","row"],e=["clust","sum","var","ini"];o.forEach(r=>{let n=rE(r,"row");qA(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=>{m8(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,oU(n,G,n.dendro.sliders[G+"_value"]),tU(n,G),I0(n,G),f8(A,n,G),r.setProps({layers:Ct(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",qA(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},eV=(g,A,I)=>{let B=$S(),Q=oV(),C=rE("image_container","row"),E=rE("tile_container","row"),o=z0("tile_slider_container");return ks(C,"sst","IMG","blue",50,"button",g,A,I),ks(E,"sst","TILE","blue",50,"button",g,A,I),I.sliders={},SM("tile",g,A,I),o.appendChild(I.sliders.tile),B.appendChild(Q),E.appendChild(o),QU("sst",g,A,I),Q.appendChild(C),Q.appendChild(E),Q.appendChild(I.genes.gene_search),B},aV=(g,A,I,B)=>{let Q=$S(),C=oV();B.containers.image=rE("image_container","column");let E=rE("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",v=>{let{scrollTop:H,scrollHeight:X,clientHeight:L}=E,aA=H===0,wA=H+L===X;(aA&&v.deltaY<0||wA&&v.deltaY>0)&&v.preventDefault()});let o="115px",e=rE("cell_container","column");e.style.width=o;let D=rE("cell_ctrl_container","row");D.style.marginLeft="0px";let r=rE("gene_container","column");r.style.marginTop="0px",r.style.width=o;let n=rE("trx_container","row"),G=rE("rgn_container","column");G.style.width=o;let w=rE("rgn_ctrl_container","row");w.style.marginLeft="0px",w.style.height="22.5px";let k=z0("cell_slider_container"),F=z0("trx_slider_container");ks(B.containers.image,"ist","IMG","blue",30,"button",A,I,B);let h=(v,H)=>v.image_layer_sliders.filter(X=>X.name===H),y=(v,H)=>{let X=H.button_name,L=rE("image_layer_container","row");L.style.height="21px",ks(L,"ist",X,"blue",75,"img_layer_button",A,I,B);let aA=z0(X),wA=h(v,X)[0],yA=S8(X,A,I,B),UA=LM(yA,100);CU(wA,50,UA),aA.appendChild(wA),L.appendChild(aA),E.appendChild(L)};B.img.image_info.map(v=>y(B.img,v)),ks(D,"ist","CELL","blue",40,"button",A,I,B),ks(n,"ist","TRX","blue",40,"button",A,I,B),B.containers.image.appendChild(E),B.sliders={},SM("cell",A,I,B),k.appendChild(B.sliders.cell),D.appendChild(k),B.containers.bar_cluster=HM(),fM(B.containers.bar_cluster,ys,B.cats.svg_bar_cluster,B.cats.cluster_counts,B.cats.color_dict_cluster,A,I,B),B.containers.bar_gene=HM(),fM(B.containers.bar_gene,A0,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),SM("trx",A,I,B),n.appendChild(F),F.appendChild(B.sliders.trx),r.appendChild(n),r.appendChild(B.containers.bar_gene),QU("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 J=(v,H,X,L)=>{let aA=qA(v.currentTarget),wA=aA.classed("active");if(L.edit.visible=!0,aA.classed("active",L.edit.visible).style("color","blue"),qA(L.edit.buttons.rgn).style("color","blue").classed("active",!0),XS(X,L.edit.visible),wA===!1){aA.classed("active",!0).style("color","blue"),L.edit.mode="sktch",Zl(X,HE),jn(X,!1),vn(X,!1),zh(X,!1);let yA=Qg(X,L.close_up);H.setProps({layers:yA})}else if(wA===!0){L.edit.mode="view",aA.classed("active",!1).style("color","gray"),Zl(X,pC),jn(X,!0),vn(X,!0),zh(X,!0);let yA=Qg(X,L.close_up);H.setProps({layers:yA})}},M=(v,H,X,L)=>{let aA=qA(v.currentTarget);aA.classed("active")===!1?(L.edit.visible=!0,aA.classed("active",L.edit.visible).style("color","blue"),qA(L.edit.buttons.alph).style("display","none"),qA(L.edit.buttons.sktch).style("display","inline-flex")):(L.edit.visible=!1,aA.classed("active",L.edit.visible).style("color","gray"),qA(L.edit.buttons.alph).style("display","inline-flex"),qA(L.edit.buttons.sktch).style("display","none")),XS(X,L.edit.visible);let yA=Qg(X,L.close_up);H.setProps({layers:yA}),L.edit.rgn_areas=L.edit.feature_collection.features.map((RA,UA)=>({name:(UA+1).toString(),value:RA.properties.area})),L.edit.color_dict_rgn=L.edit.feature_collection.features.reduce((RA,UA,$)=>(RA[($+1).toString()]=UA.properties.color,RA),{}),si(L.edit.svg_bar_rgn,L.edit.rgn_areas,L.edit.color_dict_rgn,g0,[],H,X,L)},l=(v,H)=>(H>=0&&H<v.features.length&&v.features.splice(H,1),v),Y=(v,H,X,L)=>{L.edit.feature_collection=l(L.edit.feature_collection,L.edit.modify_index),X.edit_layer=X.edit_layer.clone({id:"edit-layer-delete",data:L.edit.feature_collection,mode:pC,selectedFeatureIndexes:[]});let aA=Qg(X,L.close_up);H.setProps({layers:aA}),qA(L.edit.buttons.del).classed("active",!1).style("display","none"),qA(L.edit.buttons.rgn).style("display","inline-flex"),qA(L.edit.buttons.sktch).style("display","inline-flex"),Wl(L,H,X),Tl(L)},U=v=>{console.log("clicking nbhd bar",v)},x=(v,H,X,L)=>{let aA=qA(v.currentTarget);L.nbhd.visible===!0?(L.nbhd.visible=!1,qA(L.edit.buttons.alph).style("color","gray"),qA(L.edit.buttons.rgn).style("display","inline-flex"),L.sliders.alph.style.display="none"):(L.nbhd.visible=!0,qA(L.edit.buttons.alph).style("color","blue"),qA(L.edit.buttons.rgn).style("display","none"),L.sliders.alph.style.display="block"),iV(X,L.nbhd.visible),dM(X,L.nbhd.visible!==!0),Xh(X,L.nbhd.visible!==!0),KM(X,L.nbhd.visible!==!0),jn(X,L.nbhd.visible!==!0),vn(X,L.nbhd.visible!==!0);let wA=Qg(X,L.close_up,L.nbhd.visible);H.setProps({layers:wA}),L.nbhd.nbhd_areas=L.nbhd.feature_collection.features.map((yA,RA)=>({name:(RA+1).toString(),value:yA.properties.area})),console.log(L.nbhd.color_dict_nbhd),si(L.edit.svg_bar_rgn,L.nbhd.nbhd_areas,L.cats.color_dict_cluster,U,[],H,X,L)};B.edit.buttons={},B.edit.mode="view",$h(A,I,B,w,"RGN",30,M),B.nbhd.alpha_nbhd===!0&&$h(A,I,B,w,"ALPH",30,x),$h(A,I,B,w,"SKTCH",40,J),qA(B.edit.buttons.sktch).style("display","none"),$h(A,I,B,w,"DEL",30,Y);let q=z0("alph_slider_container"),W=(v,H,X,L)=>{let aA=v.target.value/100,wA=Array.from(new Set(L.nbhd.ini_feature_collection.features.map(RA=>RA.properties.inv_alpha))).sort((RA,UA)=>RA-UA),yA=wA[Math.round(aA*(wA.length-1))];if(yA!==L.nbhd.inst_alpha){console.log("Mapped inv_alpha:",yA),L.nbhd.inst_alpha=yA,zS(L),_S(L,X);let RA=Qg(X,L.close_up);H.setProps({layers:RA})}},P=Array.from(new Set(B.nbhd.ini_feature_collection.features.map(v=>v.properties.inv_alpha))).sort((v,H)=>v-H);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",v=>W(v,A,I,B)),B.sliders.alph.style.display="none",w.appendChild(q),q.appendChild(B.sliders.alph),qA(B.edit.buttons.del).style("color","red").style("display","none"),B.containers.bar_rgn=HM(),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),fM(B.containers.bar_rgn,g0,B.edit.svg_bar_rgn,B.edit.rgn_areas,B.edit.color_dict_rgn,A,I,B),Q};var lnA=(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]},DV=g=>new Ti({id:"path-layer",data:[],pickable:!0,widthScale:3,widthMinPixels:1,getPath:I=>I,getColor:(I,B)=>lnA(g.cats,I,B),widthUnits:"pixels"}),JnA=(g,A,I,B,Q)=>{let C=Q.cats.polygon_cell_names[g.index],E=Q.cats.dict_cell_cats[C];ug(Q.cats,"cluster"),Vg(Q.cats,[E]),HI(Q.genes,[]),iB(B,Q,!Q.cats.selected_cats.length>0);let o=Q.cats.selected_cats.join("-");fI(B,o),$I(B,o),GB(Q.genes,B);let e=Qg(B,Q.close_up);I.setProps({layers:e})},sV=async(g,A,I,B)=>{let Q=await _4(g,A,B);I.path_layer=I.path_layer.clone({data:Q})},rV=(g,A,I)=>{A.path_layer=A.path_layer.clone({onClick:(B,Q)=>JnA(B,Q,g,A,I)})},x8=(g,A)=>{g.path_layer=g.path_layer.clone({visible:A})},$I=(g,A)=>{g.path_layer=g.path_layer.clone({id:"path-layer-"+A})},vn=(g,A)=>{g.path_layer=g.path_layer.clone({pickable:A})};var YnA=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,ug(Q.cats,"cluster"),Vg(Q.cats,[E]),HI(Q.genes,[]),iB(B,Q,!Q.cats.selected_cats.length>0);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 qA(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"})}}fI(B,o),$I(B,o),GB(Q.genes,B);let e=Qg(B,Q.close_up);I.setProps({layers:e}),Q.genes.gene_search_input.value="",RQ(Q.genes,"")},nV=async(g,A)=>{let I=g+"/cell_metadata.parquet";var B=await FQ(I,_g.fetch);let Q=Jn(B);await x4(A.genes,g),b4(A.cats,B),T4(A.cats);var C=await FQ(g+"/cell_clusters/cluster.parquet",_g.fetch);W4(A.cats,C,"cluster"),P4(A.cats);let E=B.getChild("name").toArray(),o=Q.attributes.getPosition.value;return A.combo_data.cell=E.map((D,r)=>({name:D,cat:A.cats.dict_cell_cats[D],x:o[r*2],y:o[r*2+1]})),new BQ({id:"cell-layer",radiusMinPixels:1,getRadius:5,pickable:!0,getColor:(D,r)=>O4(A.cats,D,r),data:Q})},cV=(g,A,I)=>{A.cell_layer=A.cell_layer.clone({onClick:(B,Q)=>YnA(B,Q,g,A,I)})},b8=(g,A)=>{g.cell_layer=g.cell_layer.clone({visible:A})},L8=(g,A)=>{g.cell_layer=g.cell_layer.clone({getRadius:A})},fI=(g,A)=>{g.cell_layer=g.cell_layer.clone({id:"cell-layer-"+A})},jn=(g,A)=>{g.cell_layer=g.cell_layer.clone({pickable:A})};var Pl=()=>[new Ei({id:"ortho"})];var GV=(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 Ol=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=GV(E.bounds.min_x,E.bounds.max_x,E.bounds.min_y,E.bounds.max_y,o);if(F.length<e){await d8(E.global_base_url,F,C,E),await sV(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 W=x.find(P=>P.name===q);return W?W.value+=1:x.push({name:q,value:1}),x},[]).filter(x=>x.value>0).sort((x,q)=>q.value-x.value);si(E.genes.svg_bar_gene,M,E.genes.color_dict_gene,A0,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 W=x.find(P=>P.name===q);return W?W.value+=1:x.push({name:q,value:1}),x},[]).filter(x=>x.value>0).sort((x,q)=>q.value-x.value);si(E.cats.svg_bar_cluster,U,E.cats.color_dict_cluster,ys,E.cats.selected_cats,Q,C,E),E.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"})}else E.close_up&&(E.close_up=!1,si(E.genes.svg_bar_gene,E.genes.gene_counts,E.genes.color_dict_gene,A0,E.genes.selected_genes,Q,C,E),si(E.cats.svg_bar_cluster,E.cats.cluster_counts,E.cats.color_dict_cluster,ys,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 KnA=200,wV=LM(({viewState:g},A,I,B)=>(Ol(g,A,I,B),typeof B.custom_callbacks.view_change=="function"&&B.custom_callbacks.view_change(g,B.close_up,I.trx_layer),g),KnA);var hV=(g,A)=>{if(A.index===-1||!A.layer)return null;let I="",B="",Q="";return console.log(A.layer.id),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>`),cD(".deck-tooltip").style("margin-top","75px"),{html:I}};var pnA=({isDragging:g})=>g?"grabbing":"pointer",NV=(g,A,I)=>new ca({parent:g,controller:{doubleClickZoom:!1},getCursor:pnA,width:A,height:I}),kV=(g,A)=>{g.setProps({views:A})},yV=(g,A)=>{g.setProps({getTooltip:I=>hV(A,I)})},FV=(g,A,I)=>{g.setProps({onViewStateChange:B=>{wV(B,g,A,I)}})},RV=(g,A,I,B,Q)=>{let C={target:[A,I,B],zoom:Q};g.setProps({initialViewState:C})};var MV=(g,A)=>{g.image_format=A},lV=(g,A)=>{g.image_info=A},JV=(g,A)=>{A.forEach(I=>{g[I.button_name]=I.color})};var Vl=async(g,A)=>{let I=await FQ(A+"/meta_gene.parquet",_g.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 YV=(g,A)=>{g.color_dict_cluster=A.color;for(let B in g.color_dict_cluster)g.color_dict_cluster[B]=Ke(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)},KV=async g=>{let A=g.global_base_url+"/cell_clusters/meta_cluster.parquet";var I=await FQ(A,_g.fetch);let B=[],Q=[],C=[],E=I.getChild("__index_level_0__"),o=I.getChild("color"),e=I.getChild("count"),D=[];for(let r of I.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]=Ke(Q[n]),g.cats.cluster_counts.push({name:r,value:Number(C[n])})}),g.cats.cluster_counts.sort((r,n)=>n.value-r.value)};var pV=async(g,A,I)=>{let B=I.model.get("update_trigger"),Q,C;if(!("click_type"in B)||!("click_value"in B)){if(B.type==="row_label"){Q=B.value.name;let E=Q===I.cats.cat?"cluster":Q;iB(A,I,I.cats.cat===Q),ug(I.cats,E),HI(I.genes,[Q]),Vg(I.cats,[]),await to(I.cats,I.genes,I.global_base_url,Q),fI(A,E),$I(A,E),GB(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 qA(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:"",RQ(I.genes,Q)}else if(B.type==="col_label"){Q="cluster",C=B.value.name,ug(I.cats,"cluster"),Vg(I.cats,[C]),HI(I.genes,[]),iB(A,I,!I.cats.selected_cats.length>0);let E=I.cats.selected_cats.join("-");fI(A,E),$I(A,E),GB(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 qA(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;ug(I.cats,"cluster"),Vg(I.cats,E),HI(I.genes,[]),iB(A,I,!I.cats.selected_cats.length>0);let o=I.cats.selected_cats.join("-");fI(A,o),$I(A,o),GB(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 qA(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"})}}ug(I.cats,Q),Vg(I.cats,B.click_value)}}else if(B.click_type==="row-label"){Q=B.click_value;let E=Q===I.cats.cat?"cluster":Q;iB(A,I,I.cats.cat===Q),ug(I.cats,E),HI(I.genes,[Q]),Vg(I.cats,[]),await to(I.cats,I.genes,I.global_base_url,Q),fI(A,E),$I(A,E),GB(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 qA(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:"",RQ(I.genes,Q)}else if(B.click_type==="col-label"){Q="cluster",C=B.click_value,ug(I.cats,"cluster"),Vg(I.cats,[C]),HI(I.genes,[]),iB(A,I,!I.cats.selected_cats.length>0);let E=I.cats.selected_cats.join("-");fI(A,E),$I(A,E),GB(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 qA(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.click_type==="col-dendro"){Q="cluster",Q="cluster";let E=B.click_value;ug(I.cats,"cluster"),Vg(I.cats,E),HI(I.genes,[]),iB(A,I,!I.cats.selected_cats.length>0);let o=I.cats.selected_cats.join("-");fI(A,o),$I(A,o),GB(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 qA(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"})}}ug(I.cats,Q),Vg(I.cats,B.click_value)}else Q="cluster"};var qV=(g,A,I)=>{let B=I.model.get("cell_clusters");YV(I.cats,B.meta_cluster),Z4(I.cats,B.new_clusters),fI(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]})),si(I.cats.svg_bar_cluster,I.cats.cluster_counts,I.cats.color_dict_cluster,ys,[],g,A,I)};var qnA=(g,A,I)=>{if(g.size>=20){let Q=g.keys().next().value;g.delete(Q)}g.set(A,I)},dnA=(g,A)=>{let I=g.get(A);return I&&(g.delete(A),g.set(A,I)),I},UnA=g=>{g.clear()},AL=()=>{let g=new Map;return{set:(A,I)=>qnA(g,A,I),get:A=>dnA(g,A),clear:()=>UnA(g)}};var gL=async(g,A,I,B,Q,C,E,o,e="",D=.25,r=0,n=800,G=null)=>{r===0&&(r="100%");let w={};if(w.buttons={},w.buttons.blue="#8797ff",w.buttons.gray="gray",w.buttons.light_gray="#EEEEEE",HN(w,o),w.close_up=!1,w.model=A,w.nbhd={},w.nbhd.visible=!1,Object.keys(w.model).length!==0)if(Object.keys(w.model.get("nbhd")).length===0)w.nbhd.alpha_nbhd=!1,w.nbhd.ini_feature_collection={type:"FeatureCollection",features:[],inst_alpha:null},w.nbhd.feature_collection=w.nbhd.ini_feature_collection;else{w.nbhd.alpha_nbhd=!0,w.nbhd.ini_feature_collection=w.model.get("nbhd"),w.nbhd.inst_alpha=w.nbhd.ini_feature_collection.inst_alpha;let X=w.nbhd.ini_feature_collection.features.filter(L=>L.properties.inv_alpha===w.nbhd.inst_alpha);w.nbhd.feature_collection={type:"FeatureCollection",features:X}}else w.nbhd.alpha_nbhd=!1,w.nbhd.ini_feature_collection={type:"FeatureCollection",features:[],inst_alpha:null},w.nbhd.feature_collection=w.nbhd.ini_feature_collection;w.containers={},w.custom_callbacks={},w.custom_callbacks.view_change=G,w.cats={},w.cats.cat,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=Ve("svg"),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=D,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=Ve("svg"),w.cats.cell_exp_array=[],w.cats.cell_names_array=[],w.cats.cell_name_to_index_map=new Map,w.img={},w.img.image_layer_colors={},w.img.image_layer_sliders={},LN(I);let k="dapi";await fN(w.img,o);let F=w.img.landscape_parameters.image_info;MV(w.img,w.img.landscape_parameters.image_format),lV(w.img,F),U8(w.img),JV(w.img.image_layer_colors,w.img.image_info);let h=document.createElement("div");h.style.height=n+"px",h.style.border="1px solid #d3d3d3",await uN(w,o,k),await Vl(w.genes,o),await KV(w),w.views=Pl();let y=await NV(h,r,n);RV(y,B,Q,C,E),kV(y,w.views),w.cache={},w.cache.cell=await AL(),w.cache.trx=await AL(),w.combo_data={},w.tooltip_cat_cell="",yV(y,w),w.edit={},w.edit.svg_bar_rgn=Ve("svg"),w.edit.rgn_areas=[],w.edit.color_dict_rgn={},w.edit.rgn_opacity=.75,w.edit.visible=!1,w.edit.modify_index=null,Object.keys(w.model).length!==0?Object.keys(w.model.get("region")).length===0?w.edit.feature_collection={type:"FeatureCollection",features:[]}:w.edit.feature_collection=w.model.get("region"):w.edit.feature_collection={type:"FeatureCollection",features:[]};let J=l8(w),M=await F8(w),l=await nV(o,w),Y=await DV(w),U=p8(w.genes),x=IV(w),q=CV(w,!1),W={background_layer:J,image_layers:M,cell_layer:l,path_layer:Y,trx_layer:U,edit_layer:x,nbhd_layer:q};cV(y,W,w),rV(y,W,w),q8(y,W,w),BV(y,W,w),QV(y,W,w),EV(y,W,w),UM(W,D);let P=Qg(W,w.close_up);y.setProps({layers:P}),FV(y,W,w),Object.keys(w.model).length>0&&(w.model.on("change:update_trigger",()=>pV(y,W,w)),w.model.on("change:cell_clusters",()=>qV(y,W,w)));let v=aV(e,y,W,w);return g.appendChild(v),g.appendChild(h),{update_matrix_gene:async X=>{let L=X===w.cats.cat,aA=L?"cluster":X;if(L)w.containers.bar_gene.scrollTo({top:0,behavior:"smooth"});else{let yA=w.genes.svg_bar_gene.selectAll("g").filter(function(){let RA=qA(this).select("text").node();return RA&&RA.textContent===X}).attr("opacity",1);if(!yA.empty()){let RA=yA.node().getBoundingClientRect().top,UA=w.containers.bar_gene.getBoundingClientRect().top,$=RA-UA+w.containers.bar_gene.scrollTop;w.genes.svg_bar_gene.attr("opacity",1),w.containers.bar_gene.scrollTo({top:$,behavior:"smooth"})}}w.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",1),iB(W,w,w.cats.cat===X),ug(w.cats,aA),HI(w.genes,[X]),Vg(w.cats,[]),await to(w.cats,w.genes,w.global_base_url,X),fI(W,aA),$I(W,aA),GB(w.genes,W);let wA=Qg(W,w.close_up);y.setProps({layers:wA}),w.genes.gene_search_input.value=w.genes.gene_search_input.value!==X?X:"",RQ(w.genes,L?"":X)},update_matrix_col:async X=>{if(w.genes.svg_bar_gene.selectAll("g").attr("font-weight","normal").attr("opacity",1),w.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",w.cats.reset_cat?1:.25),w.cats.reset_cat)w.containers.bar_cluster.scrollTo({top:0,behavior:"smooth"});else{let wA=w.cats.svg_bar_cluster.selectAll("g").filter(function(){return qA(this).select("text").text()===X}).attr("opacity",1);if(!wA.empty()){let yA=wA.node().getBoundingClientRect().top,RA=w.containers.bar_cluster.getBoundingClientRect().top,UA=yA-RA+w.containers.bar_cluster.scrollTop;w.containers.bar_cluster.scrollTo({top:UA,behavior:"smooth"})}}ug(w.cats,"cluster"),Vg(w.cats,[X]),HI(w.genes,[]),iB(W,w,!w.cats.selected_cats.length>0);let L=w.cats.selected_cats.join("-");fI(W,L),$I(W,L),GB(w.genes,W);let aA=Qg(W,w.close_up);y.setProps({layers:aA}),w.genes.gene_search_input.value="",RQ(w.genes,"")},update_matrix_dendro_col:async X=>{let L=X;ug(w.cats,"cluster"),Vg(w.cats,L),HI(w.genes,[]),iB(W,w,!w.cats.selected_cats.length>0);let aA=w.cats.selected_cats.join("-");fI(W,aA),$I(W,aA),GB(w.genes,W);let wA=Qg(W,w.close_up);y.setProps({layers:wA}),w.cats.svg_bar_cluster.selectAll("g").attr("font-weight","normal").attr("opacity",w.cats.reset_cat?1:.25);let yA=L;if(!w.cats.reset_cat){let RA=w.cats.svg_bar_cluster.selectAll("g").filter(function(){return qA(this).select("text").text()===yA}).attr("opacity",1);if(!RA.empty()){let UA=RA.node().getBoundingClientRect().top,$=w.containers.bar_cluster.getBoundingClientRect().top,bg=UA-$+w.containers.bar_cluster.scrollTop;w.containers.bar_cluster.scrollTo({top:bg,behavior:"smooth"})}}},update_view_state:async(X,L,aA)=>{w.close_up=L,Ol(X,y,W,w);let wA=Qg(W,w.close_up);y.setProps({controller:{doubleClickZoom:!1},initialViewState:X,views:w.views,layers:wA})},update_layers:()=>{console.log("update_layers")},finalize:()=>{y.finalize()}}};var dV=(g,A)=>{g.tile_scatter_data=A};var UV=(g,A)=>{g.tile_names_array=A},SV=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 LV=async g=>{let A={},I=g+"/df_colors.parquet";var B=await FQ(I,_g.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)]=Ke(C[D])}),A};var HV=async(g,A,I)=>{let B=I.model.get("update_trigger"),Q;B.click_type==="row-label"?(Q=B.click_value,ug(I.cats,Q),await pM(I,Q)):B.click_type==="col-label"?(ug(I.cats,"cluster"),Vg(I.cats,[B.click_value])):B.click_type==="col-dendro"?(ug(I.cats,"cluster"),Vg(I.cats,B.click_value)):ug("cluster"),jh(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 RQ(I.genes,Q))};var fV=(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,cD(".deck-tooltip").style("margin-top","75px"),{html:`<div>${I}</div?`}};var IL=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={};LN(B),HN(w,I),w.model=g,w.img={},w.img.image_layer_colors={},w.img.image_layer_sliders={},await fN(w.img,I),await uN(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=Ve("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=Ve("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,_g.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=[],dV(w.cats,Jn(h)),UV(w.cats,h.getChild("name").toArray()),SV(w.cats),w.cats.tile_color_dict=await LV(I);let y=await c8(w,k),J=h8(w.cats),M={simple_image_layer:y,square_scatter_layer:J};w.views=Pl();let l=w8(G,r,n),Y={target:[Q,C,E],zoom:o};l.setProps({views:w.views,layers:[M.simple_image_layer,M.square_scatter_layer],getTooltip:x=>fV(x,w),initialViewState:Y}),Object.keys(w.model).length>0&&w.model.on("change:update_trigger",()=>HV(l,M,w)),y8(l,M,w);let U=eV(l,M,w);return A.appendChild(U),A.appendChild(G),()=>l.finalize()};var SnA=({isDragging:g})=>g?"grabbing":"pointer",uV=(g,A,I)=>(typeof A=="number"&&(A=A+100,I=I+100),new ca({parent:g,getCursor:SnA,width:A,height:I}));var mV=(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 xV=(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 bV=(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)},TV=(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 WV=(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})},ZV=(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 PV=`#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
|