jbrowse-plugin-graphgenomeviewer 6.0.0 → 6.0.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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import{a as Sr,b as Rr,c as Mr,d as Lr,e as Gr,n as it}from"./chunks/chunk-FNHKEAKB.js";import{a as ud}from"./chunks/chunk-KWAXLUPQ.js";import{a as md,d as Tr,g as Ar,h as Nr}from"./chunks/chunk-4T7DPQTR.js";import{a as oe}from"./chunks/chunk-J4OLMLS5.js";import{A as Zr,B as Qr,Ba as Ao,C as cn,Da as No,E as kt,Ea as Po,F as xt,Fa as vo,G as St,Ga as Co,H as ao,Ha as Io,I as Rt,Ja as Bo,K as io,Ka as Eo,L as Mt,La as Fo,M as fe,Ma as $o,Na as Gt,P as so,Pa as Do,S as un,Sa as Vo,T as co,Ta as $e,U as mn,Ua as _o,Va as De,W as ln,Wa as Wo,X as gn,Xa as Tt,Y as po,Ya as Ve,Z as uo,_ as Lt,_a as Oo,a as gr,ab as Ho,b as st,ba as mo,c as ld,ca as lo,d as dt,da as hn,e as Me,ea as go,f as vr,fa as ho,g as Wr,ha as fo,j as Or,k as mt,ka as Te,l as sn,m as lt,ma as bo,n as Hr,na as yo,o as gt,oa as fd,p as jr,pa as wo,q as _,qa as ko,r as Yr,ra as xo,sa as So,t as Ge,ta as Ro,u as Ur,ua as Mo,v as Kr,w as yt,x as qr,xa as Lo,y as Jr,ya as Go,z as dn,za as To}from"./chunks/chunk-NWJN4C4V.js";import{I as an,K as _r,L as Fe,M as Xr,N as ht,O as ft,Q as zr,T as bt,U as wt,V as pn,W as eo,Y as to,Z as no,_ as bd,a as Z,b as Cr,c as Ir,d as ct,e as Br,f as pt,g as ut,r as Le,s as Er,t as Fr,u as on,v as $r,w as Dr,x as Vr}from"./chunks/chunk-K5Z47YVI.js";import{b as ro,d as oo}from"./chunks/chunk-UQEPPJEO.js";import"./chunks/chunk-SCMIJAAX.js";import{a as br,b as D,d as yr,e as wr,g as kr,h as xr}from"./chunks/chunk-7BKUWQE5.js";import{a as hr,d as fr}from"./chunks/chunk-KULNKXPT.js";import{a as re}from"./chunks/chunk-FCWXYIFC.js";import{a as Ee}from"./chunks/chunk-J6KYLXRD.js";import{a as Be,b as Pr,c as gd,d as hd}from"./chunks/chunk-TYJTJGPO.js";import{a as ne,b as w}from"./chunks/chunk-FY3BTKY4.js";var Xo=ne((tp,jo)=>{jo.exports=JBrowseExports["@jbrowse/core/Plugin"]});var Pt=ne((op,zo)=>{zo.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var U=ne((ap,Yo)=>{Yo.exports=JBrowseExports["@jbrowse/core/configuration"]});var wn=ne((pp,qo)=>{qo.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var le=ne((up,Jo)=>{Jo.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var da=ne((yp,sa)=>{sa.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var pa=ne((wp,ca)=>{ca.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var ma=ne((kp,ua)=>{ua.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var va=ne((Up,Pa)=>{Pa.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var Li=ne((pm,Mi)=>{Mi.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/renderers/util/serializableFilterChain"]});var Ss=ne((eh,xs)=>{xs.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"]});var Ms=ne((th,Rs)=>{Rs.exports=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"]});var Ns=ne((ah,As)=>{As.exports=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"]});var vs=ne((ih,Ps)=>{Ps.exports=JBrowseExports["@jbrowse/render-core/displayPhase"]});var id=w(Xo(),1),sd=w(oe(),1);var At=w(Be(),1),Nt=(0,gr.createSvgIcon)([(0,At.jsx)("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),(0,At.jsx)("circle",{cx:"14.8",cy:"18",r:"2"},"1"),(0,At.jsx)("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var Ko=w(Pt(),1);var fn=w(U(),1),bn=w(re(),1),yd=(0,fn.ConfigurationSchema)("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.gbz.db",locationType:"UriLocation"}},haplotypeIndexLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},readsLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},readsIndex:(0,fn.ConfigurationSchema)("GbzBaseReadsIndex",{indexType:{model:bn.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}}}),subgraphSnarls:{type:"stringEnum",model:bn.types.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:it.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:it.context,advanced:!0},nodeLimit:{type:"number",defaultValue:it.limit,advanced:!0}},{explicitlyTyped:!0,preProcessSnapshot:e=>{let{uri:t,baseUri:n,reads:r}=e;return{...e,...t?{gbzDbLocation:{uri:t,baseUri:n}}:{},...typeof r=="string"?{readsLocation:{uri:r,baseUri:n},...r.endsWith(".gz")?{readsIndex:{location:{uri:`${r}.tbi`,baseUri:n}}}:{}}:{}}}}),Uo=yd;function yn(e){e.addAdapterType(()=>new Ko.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:Uo,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-TQVDD3OC.js").then(t=>t.default)}))}var Zo=w(wn(),1),Qo=w(le(),1);function wd(e){return"getReads"in e&&typeof e.getReads=="function"}var kd=e=>typeof e=="object"&&e!==null&&Object.entries(e).some(([t,n])=>["uri","localPath","blobId"].includes(t)&&typeof n=="string"&&n!=="");function ea(e){return typeof e.reads=="string"&&e.reads!==""||kd(e.readsLocation)}var _e=class extends Qo.RpcMethodType{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(n){let{adapterConfig:r,nodeNames:o,sessionId:a,signal:i}=n,{dataAdapter:s}=await(0,Zo.getAdapter)(this.pluginManager,a,r);return wd(s)?s.getReads(o,{signal:i}):{records:[],total:0}}};var ta=w(wn(),1),na=w(le(),1);function xd(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var We=class extends na.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:r,region:o,sessionId:a,opts:i,signal:s}=n,{dataAdapter:d}=await(0,ta.getAdapter)(this.pluginManager,a,r);return xd(d)?d.getSubgraph(o,{...i,signal:s}):(console.warn(`[GetSubgraph] ${d.constructor.name} does not implement getSubgraph`),"")}};var ra=w(Ee(),1),oa=w(le(),1),aa=w(re(),1),Sd=(0,ra.lazy)(()=>import("./chunks/AddTrackWorkflow-U3UNCVXJ.js"));function kn(e){e.addAddTrackWorkflowType(()=>new oa.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:Sd,stateModel:aa.types.model({})}))}var xn;function Sn(){return xn??=import("./chunks/bandage-layout-UCRW4G4J.js").then(e=>e.default()).catch(e=>{throw xn=void 0,e}),xn}var ia=w(le(),1),Oe=class extends ia.RpcMethodType{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(n){let{graph:r,options:o,statusCallback:a}=n;a?.("Loading layout engine");let i=await Sn();a?.("Computing layout");let s=performance.now(),d=i.computeLayout(r,o),c=performance.now()-s;return{result:d,duration:c}}};var bs=w(Ee(),1),ys=w(da(),1),ws=w(pa(),1);var gs=w(ma(),1),hs=w(oe(),1),X=w(re(),1),fs=w(st(),1);var ps=w(Pr(),1),Se=w(oe(),1);var Ba=w(Ee(),1);function Rd(e,t){let n=e.indexOf(":"),r=e.indexOf(":",n+1);if(n!==-1&&r!==-1){let o=e.slice(0,n),a=e.slice(n+1,r),i=e.slice(r+1);a==="i"||a==="f"?t[o]=+i:a==="Z"&&(t[o]=i)}}function He(e){let t={};for(let n of e)Rd(n,t);return t}function Rn(e){let{SN:t,SO:n,SR:r}=e.tags;return typeof t=="string"&&typeof n=="number"&&typeof r=="number"?{refName:t,start:n,rank:r}:void 0}var la=62,Md=60;function Ld(e){let t=[],n="+",r=0;function o(a){a>r&&t.push({id:e.slice(r,a),strand:n})}for(let a=0;a<e.length;a++){let i=e.charCodeAt(a);(i===la||i===Md)&&(o(a),n=i===la?"+":"-",r=a+1)}return o(e.length),t}function Mn(e){let t={nodes:[],links:[],paths:[],walks:[],header:[],id:""};for(let n of e.split(`
|
|
2
|
-
`)){let r=n.endsWith("\r")?n.slice(0,-1):n;if(r.startsWith("H")){let[,...o]=r.split(" ");t.header.push(He(o))}else if(r.startsWith("S")){let[,o,...a]=r.split(" "),i,s,d,c=!1,m=a[0]??"*";/^\d+$/.test(m)?(i=+m,s=a[1]??"*",d=a.slice(2)):(c=!0,s=m,i=s==="*"?0:s.length,d=a.slice(1));let g=He(d);c&&"LN"in g&&(i=+g.LN),t.nodes.push({id:o,length:i,sequence:s,tags:g})}else if(r.startsWith("E")){let[,,o,a,,,,,i,...s]=r.split(" ");o&&a&&t.links.push({source:o.slice(0,-1),target:a.slice(0,-1),strand1:o.at(-1),strand2:a.at(-1),cigar:i??"*",tags:He(s)})}else if(r.startsWith("L")){let[,o,a,i,s,d,...c]=r.split(" ");o&&i&&s&&t.links.push({source:o,target:i,strand1:a,strand2:s,cigar:d??"*",tags:He(c)})}else if(r.startsWith("W")){let[,o,a,i,s,d,c,...m]=r.split(" ");o&&a&&i&&s&&d&&c&&t.walks.push({sample:o,haplotype:+a,contig:i,start:s==="*"?-1:+s,end:d==="*"?-1:+d,segments:Ld(c),tags:He(m)})}else if(r.startsWith("P")){let[,o,a,...i]=r.split(" ");o&&a&&t.paths.push({name:o,path:a,rest:i})}}return t}function Gd(e){let t=new Map,n=new Map;function r(a,i){t.has(a)||t.set(a,i)}function o(a,i){r(a,i),n.set(a,(n.get(a)??0)+1)}for(let a of e.links)r(a.source,a.strand1==="-"?"-":"+"),r(a.target,a.strand2==="-"?"-":"+");for(let a of e.paths)for(let i of a.path.split(","))o(i.slice(0,-1),i.endsWith("-")?"-":"+");for(let a of e.walks)for(let i of a.segments)o(i.id,i.strand==="-"?"-":"+");return{canonical:t,traversals:n}}var ga=e=>e.start===-1?0:e.start;function Td(e){return[...e.paths.map(t=>({...Z(t.name),steps:t.path.split(",").map(n=>({id:n.slice(0,-1),strand:n.endsWith("-")?"-":"+"}))})),...e.walks.map(t=>({name:`${t.sample}#${t.haplotype}#${t.contig}`,start:ga(t),steps:t.segments.map(n=>({id:n.id,strand:n.strand==="-"?"-":"+"}))}))]}function Ad(e){let t=e.tags.SM;if(typeof t!="string")return;let n=t.split(",").map(r=>r.trim()).filter(Boolean);return n.length>0?n:void 0}var je=e=>typeof e=="number"&&e>0?e:void 0;function Nd({tags:e,length:t}){let n=je(e.RC)??je(e.FC)??je(e.KC);return je(e.dp)??je(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function Pd(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:Rn(e),samples:Ad(e)}}function ha(e,t="Imported GFA"){let n=[],r=[],{canonical:o,traversals:a}=Gd(e),i=u=>`${u}${o.get(u)??"+"}`;for(let u of e.nodes){let y=Nd(u)??Math.max(a.get(u.id)??1,1);n.push(Pd(u,o.get(u.id)??"+",y))}for(let u of e.links)r.push({from:i(u.source),to:i(u.target),fromStrand:u.strand1==="-"?"-":"+",toStrand:u.strand2==="-"?"-":"+"});let s=[],d=new Map,c=(u,y)=>[u,y].sort().join("--");function m(u,y){for(let x=0;x<u.length-1;x++){let k=c(u[x],u[x+1]);d.has(k)||d.set(k,new Set),d.get(k).add(y)}}for(let u of e.paths){let y=u.path.split(",").map(x=>i(x.slice(0,-1)));s.push({name:u.name,nodeIds:y,start:Z(u.name).start}),m(y,u.name)}for(let u of e.walks){let y=u.segments.map(k=>i(k.id)),x=`${u.sample}#${u.haplotype}#${u.contig}`;s.push({name:x,nodeIds:y,start:ga(u),sample:u.sample,haplotype:u.haplotype,contig:u.contig}),m(y,x)}for(let u of r){let y=d.get(c(u.from,u.to));y&&y.size>0&&(u.pathIds=[...y])}let g=new Map(e.nodes.map(u=>[u.id,u.length])),p=e.paths.length>0||e.walks.length>0?Cr(Td(e),u=>g.get(u)??0):void 0;return{name:t,nodes:n,edges:r,paths:s.length>0?s:void 0,anchorPaths:p?.anchorPaths,pathVisits:p?.pathVisits,anchoredBy:n.some(u=>u.stable)?"tags":void 0}}var vd="\0deletion:";function fa(e,t){let n=new Map(t.map(o=>[o.edgeIndex,`${vd}${o.edgeIndex}`])),r=[];return e.edges.forEach((o,a)=>{let i=n.get(a);if(i===void 0)r.push(o);else{let{fromStrand:s,toStrand:d}=o;r.push({from:o.from,to:i,...s?{fromStrand:s}:{}},{from:i,to:o.to,...d?{toStrand:d}:{}})}}),{graph:{...e,nodes:[...e.nodes,...[...n.values()].map(o=>({id:o,name:o,length:0,depth:0}))],edges:r},routes:n,ids:new Set(n.values())}}function ba(e,t,n,r,o){let a=new Map(e.nodes.map(i=>[i.id,i.length]));return t.map(i=>{let s=i.bypassed.reduce((m,g)=>m+(a.get(g)??0),0),d=Math.max(o.minimumNodeLength,r(s)*.5),c=n.get(i.edgeIndex);return{id:c,name:c,length:Math.round(d*1e6/o.nodeLengthPerMegabase),depth:0}})}function ya(e,t){let n={...e},r={};for(let[o,a]of t){let i=n[a];delete n[a],i?.length&&(r[o]=i)}return{nodePositions:n,deletionRoutes:r}}function wa(e,t){let n=e.nodes.filter(k=>D(k)&&(t[k.id]?.length??0)>0);if(n.length<2)return t;let r=n.map(k=>{let h=t[k.id],R=h[Math.floor(h.length/2)];return{x:R.x,y:R.y,r:k.stable.start+k.length/2,w:k.length}}),o=r.reduce((k,h)=>k+h.w,0),a=r.reduce((k,h)=>k+h.x*h.w,0)/o,i=r.reduce((k,h)=>k+h.y*h.w,0)/o,s=r.reduce((k,h)=>k+h.r*h.w,0)/o,d=0,c=0;for(let k of r)d+=k.w*(k.x-a)*(k.r-s),c+=k.w*(k.y-i)*(k.r-s);let m=-Math.atan2(c,d),g=Math.cos(m),p=Math.sin(m),u={};for(let[k,h]of Object.entries(t))u[k]=h.map(R=>{let l=R.x-a,b=R.y-i;return{x:a+g*l-p*b,y:i+p*l+g*b}});let y=0,x=0;for(let k of e.nodes)if(!D(k))for(let h of u[k.id]??[])h.y>i?y++:x++;if(x>y)for(let k of Object.values(u))for(let h of k)h.y=2*i-h.y;return u}var ka=30;function Cd(e,t){let{opts:n}=t,r=new Map(t.nodes.map(p=>[p.id,wt(n,p.length)])),o=p=>r.get(p)??n.minimumNodeLength,a=e.nodes.filter(D).sort((p,u)=>p.stable.start-u.stable.start),i=new Map,s=0;for(let p of a)i.set(p.id,{x:s,y:0}),s+=o(p.id)+n.edgeLength;let d=dt(e),c=new Map(a.map(p=>[p.id,0])),m=a.map(p=>p.id);for(let p of m){let u=i.get(p),y=c.get(p)+1;for(let x of d.get(p)??[])c.has(x)||(c.set(x,y),i.set(x,{x:u.x+o(p)/2,y:ka*y}),m.push(x))}let g=0;for(let p of e.nodes)i.has(p.id)||i.set(p.id,{x:g++*s/e.nodes.length,y:ka*3});return i}function xa(e,t){let n=Cd(e,t);return t.nodes.map(r=>({...r,...n.get(r.id)}))}function Sa(e,t,n={}){let r=Br(ha(Mn(e),t),n.referencePath);if(r.nodes.length===0)throw new Error(`No graph segments in ${t}`);if(n.maxNodes!==void 0&&r.nodes.length>n.maxNodes)throw new Error(`Graph too large to draw: ${r.nodes.length.toLocaleString()} nodes (limit ${n.maxNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);return r}var Id=15;function Bd(e,t,n){let r=e.nodes.some(D),o={...t,opts:{...t.opts,edgeLength:t.opts.edgeLength*(n.spacing??1)}};return{graph:{nodes:r?xa(e,o):o.nodes,edges:e.edges},options:{quality:n.quality,linearLayout:n.linearLayout,...o.opts,componentSeparation:Id*(n.componentSeparation??1),...r?{rotateComponents:!1}:{}}}}function Ra(e,t){let n=e.nodes.some(D);return`${t.quality}|${t.linearLayout}|${t.bubbleSpread}|${t.spacing??1}|${t.componentSeparation??1}|${n}|${e.referencePath??""}`}async function Ma(e,t,n){let r=no(t.bubbleSpread),o=Le(e),a=fa(e,o),i=Er(a.graph,a.ids),s={...i.graph,nodes:i.graph.nodes.filter(k=>!a.ids.has(k.id))},d=pn(s,r),{result:c,duration:m}=await n(Bd(i.graph,{...d,nodes:[...d.nodes,...ba(e,o,a.routes,eo(s,r),d.opts)]},t)),g=pn(e,r),p=new Map(g.nodes.map(k=>[k.id,wt(g.opts,k.length)])),u=Fr(c.nodePositions,i.runs,k=>p.get(k)??0),{nodePositions:y,deletionRoutes:x}=ya(e.nodes.some(D)?wa(e,u):u,a.routes);return{result:{...c,nodePositions:y,stranded:!0,...o.length?{deletionRoutes:x,extent:La(x)}:{}},duration:m}}function La(e){let t=1/0,n=1/0,r=-1/0,o=-1/0;for(let a of Object.values(e))for(let i of a)t=Math.min(t,i.x),n=Math.min(n,i.y),r=Math.max(r,i.x),o=Math.max(o,i.y);return{minX:t,minY:n,maxX:r,maxY:o}}var $=40,Ed=1e-6,Fd=100;function Xe(e){return Math.max(Ed,Math.min(Fd,e))}function Ln(e,t,n,r=$){let o=t-e.h*n;return r-e.minY*n+Math.max(0,o)/2}function ze(e,t,n,r,{minScale:o=0,padLeft:a=$,padTop:i=$,padRight:s=$,padBottom:d=$}={}){let c=t-a-s,m=n-i-d;if(c<=0||m<=0||!(e.w>0||!r&&e.h>0))return;let g=e.w>0?c/e.w:1/0,p=e.h>0?m/e.h:1/0,u=Xe(Math.max(o,r?g:Math.min(g,p))),y=c-e.w*u;return{scale:u,translateX:a-e.minX*u+Math.max(0,y)/2,translateY:Ln(e,m,r?1:u,i)}}function vt(e,t={}){let{minX:n,minY:r,maxX:o,maxY:a}=La(e.nodePositions),{region:i}=t;e.referenceAxis&&i&&i.end>i.start&&(n=i.start,o=i.end);let s=t.extent??e.extent;return s&&(n=Math.min(n,s.minX??n),r=Math.min(r,s.minY??r),o=Math.max(o,s.maxX??o),a=Math.max(a,s.maxY??a)),{minX:n,minY:r,w:o-n,h:a-r}}function Ae(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function Ga(e,t,n,r){return{minX:-e.translateX/t.scaleX,minY:-e.translateY/t.scaleY,maxX:(n-e.translateX)/t.scaleX,maxY:(r-e.translateY)/t.scaleY}}function Ta(e,t){let n=(e.maxX-e.minX)*t,r=(e.maxY-e.minY)*t;return{minX:e.minX-n,minY:e.minY-r,maxX:e.maxX+n,maxY:e.maxY+r}}function Aa(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}function Na(e,t,n,r,o){let a=Xe(e.scale*t),i=a/e.scale;return{scale:a,translateX:n-(n-e.translateX)*i,translateY:o?e.translateY:r-(r-e.translateY)*i}}var M=w(re(),1),Ea=w(va(),1);var be=w(re(),1);function Ca(e){return t=>e.includes(t)?t:void 0}function Gn(e){return be.types.snapshotProcessor(be.types.maybe(be.types.enumeration(e)),{preProcessor:Ca(e)})}function Tn(e,t){return be.types.snapshotProcessor(be.types.optional(be.types.enumeration(e),t),{preProcessor:Ca(e)})}var Fa=600,It=160,Bt=[1,1,1,1],Et=[.12,.12,.12,1],$a=([e,t,n])=>`rgb(${[e,t,n].map(r=>Math.round(r*255)).join(", ")})`,Da=5,Ne=new Set(["tubemap","tubemapref"]),Va=(0,Ba.lazy)(()=>import("./chunks/ChooseWalksDialog-GVQLSGHX.js")),An=12,_a=[{value:"",label:"Off"},{value:"walk",label:"A panel per walk"},{value:"sample",label:"A row per sample, a column per haplotype"}],$d=M.types.snapshotProcessor(M.types.model("GraphFacet",{field:M.types.optional(M.types.enumeration(["","walk","sample"]),""),domain:M.types.optional(M.types.frozen(),[]),columns:M.types.maybe(M.types.number)}),{preProcessor:e=>xt(e)}),Wa=[{bp:0,label:"None"},{bp:3,label:"Under 3 bp"},{bp:10,label:"Under 10 bp"},{bp:50,label:"Under 50 bp, leaving structural variants"},{bp:1e3,label:"Under 1 kb"}],Ia=".segs.bed.gz";function Oa(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(Ia)?n.slice(0,-Ia.length):void 0}var Nn=1.4,Ha=1.6,ja=150,Xa=1,Pn=40,vn={nodeStrokes:[],nodeStrokeRuns:new Map,arrows:[],arrowRuns:new Map,edgeCurves:[],edgeCurveRuns:new Map};function ue(...e){}var Ye=5e6;function ye(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var za=2e4;function Pe(e){return e&&"uri"in e&&e.uri?new URL(e.uri,e.baseUri??window.location.href).href:void 0}function Cn(e){return e.builtViewport!==void 0&&e.paintedViewport===e.builtViewport&&e.builtViewport.viewportDirty===e.viewportDirty&&!e.viewportRebuildPending}function Ue(e){let{width:t,height:n}=e.viewBox;return Ga(e,e.axisScale,t,n)}var Ct=new WeakMap,Dd=4;function Ya(e){let t=Ct.get(e);return t||(t=new Map,Ct.set(e,t)),t}function Ua(e,t){let n=Ct.get(e);n&&e!==t&&Ct.set(t,n)}function Ka(e,t,n){e.size>=Dd&&e.delete(e.keys().next().value),e.set(t,n)}var qa=M.types.compose("GraphPane",(0,Ea.RenderLifecycleMixin)(),M.types.model({layoutQuality:M.types.optional(M.types.number,2),linearLayout:M.types.optional(M.types.boolean,!1),layoutMode:Gn(gt),colorScheme:Gn(ht),bubbleSpread:Tn(to,"auto"),nodeWidth:Tn(zr,"depth"),showBubbles:M.types.optional(M.types.boolean,!1),showDeletionEdges:M.types.optional(M.types.boolean,!0),showGenes:M.types.optional(M.types.boolean,!0),showReferenceStrip:M.types.optional(M.types.boolean,!0),tubeMapFold:M.types.optional(M.types.number,0),geneTrackId:M.types.optional(M.types.string,""),repeatTrackId:M.types.optional(M.types.string,""),repeatKey:M.types.optional(M.types.string,""),walkRowSamples:M.types.maybe(M.types.frozen()),walkStrip:M.types.optional(M.types.boolean,!1),walkLayers:M.types.optional(M.types.frozen(),[]),facet:M.types.optional($d,{}),referencePath:M.types.optional(M.types.string,""),showPerf:M.types.optional(M.types.boolean,!1),contigThickness:M.types.optional(M.types.number,6),connectorThickness:M.types.optional(M.types.number,2),darkMode:M.types.optional(M.types.boolean,!1),scale:M.types.optional(M.types.number,1),translateX:M.types.optional(M.types.number,0),translateY:M.types.optional(M.types.number,0),drawPaths:M.types.optional(M.types.boolean,!1),paneHeight:M.types.maybe(M.types.number),maxGraphNodes:M.types.optional(M.types.number,za),colorDomain:M.types.maybe(M.types.frozen()),connectedViewId:M.types.maybe(M.types.string)})).volatile(()=>({graph:void 0,graphRegion:void 0,loadedReferencePath:void 0,layoutResult:void 0,legendSize:{width:0,height:0},indexBubbles:void 0,geneTrackFeatures:void 0,walkGeneFeatures:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredRowWalks:[],hoveredBubble:null,pointerInPane:!1,stripHover:null,hoveredEdge:null,selectedNode:null,viewportDirty:0,positionsVersion:0,geometryVersion:0,builtViewport:void 0,paintedViewport:void 0,draggingNode:null,isPanning:!1,viewportOwner:"fit",viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,readsShown:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0,viewportRebuildPending:!1}));var os=w(oe(),1),me=w(re(),1),W=w(st(),1);function Ja(e,t){let n=new Set(t),r=e.nodes.filter(d=>n.has(d.name)),o=new Set(r.map(d=>d.id)),a=new Map(e.nodes.map(d=>[d.id,d.length])),i=new Map,s=e.paths?.flatMap(d=>{let c=d.nodeIds.findIndex(p=>o.has(p));if(c<0)return[];let m=d.nodeIds.filter(p=>o.has(p));i.set(d.name,{first:c,nodeIds:m});let g=d.nodeIds.slice(0,c).reduce((p,u)=>p+(a.get(u)??0),0);return[{...d,nodeIds:m,...d.start===void 0?{}:{start:d.start+g}}]});return{name:e.name,nodes:r,edges:e.edges.filter(d=>o.has(d.from)&&o.has(d.to)),...s?.length?{paths:s}:{},anchorPaths:pt(e,i),pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}function Za(e,t){let n=new Set(e.nodes.filter(d=>D(d)&&wr(d,t)).map(d=>d.id)),r=e.paths??[];if(n.size===0||r.length===0)return e;let o=r.map(d=>{let c=-1,m=-1;return d.nodeIds.forEach((g,p)=>{n.has(g)&&(c<0&&(c=p),m=p)}),c<0?void 0:{first:c,last:m}});if(o.every((d,c)=>d?.first===0&&d.last===r[c].nodeIds.length-1))return e;let a=new Set,i=[],s=new Map;return r.forEach((d,c)=>{let m=o[c];if(m){let g=d.nodeIds.slice(m.first,m.last+1);for(let p of g)a.add(p);i.push({...d,nodeIds:g}),s.set(d.name,{first:m.first,nodeIds:g})}}),{...e,nodes:e.nodes.filter(d=>a.has(d.id)),edges:e.edges.filter(d=>a.has(d.from)&&a.has(d.to)),paths:i,pathVisits:e.pathVisits&&Vd(e.pathVisits,r,o,new Map(e.nodes.map(d=>[d.id,d.name]))),anchorPaths:pt(e,s)}}function Vd(e,t,n,r){let o=new Map,a=new Map;return t.forEach((i,s)=>{let d=Z(i.name).name,c=n[s];i.nodeIds.forEach((m,g)=>{let p=r.get(m)??m,u=e.get(p);if(!u)return;let y=`${d} ${p}`,x=o.get(y)??0;for(;x<u.length&&u[x].path!==d;)x++;let k=u[x];if(o.set(y,x+1),k&&c&&g>=c.first&&g<=c.last){let h=a.get(p);h?h.push(k):a.set(p,[k])}})}),a}function _d(e,t,n){let r=Z(e.name).name,o=new Map,a=[],i=()=>({a:-1/0,b:1/0,detour:[],bp:0}),s=[i()];for(let d of e.nodeIds){let c=t.get(d);if(!c)continue;let m=o.get(c.name)??0;o.set(c.name,m+1);let g=n.get(`${r} ${c.name}`)?.[m]??Wr(c),p=s.at(-1),u=a.at(-1);if(D(c)){let y=c.stable.start,x=y+c.length,k=g!==(c.stable.strand??"+"),h=u!==void 0&&p.detour.length===0;h&&!u.inverted&&!k&&u.end===y?u.end=x:h&&u.inverted&&k&&u.start===x?u.start=y:(a.push({start:y,end:x,inverted:k}),s.push(i()))}else p.detour.push({node:c,strand:g}),p.bp+=c.length}return a.forEach((d,c)=>{s[c].b=d.start,s[c+1].a=d.end}),{path:e,runs:a,gaps:s}}function In(e,t){return Number.isFinite(e.a)&&Number.isFinite(e.b)&&e.b>=e.a&&Math.max(e.b-e.a,e.bp)<t}function Qa(e,t,n){let r=0,o=e.length;for(;r<o;){let a=r+o>>1;e[a]<=t?r=a+1:o=a}return r<e.length&&e[r]<n}function Wd(e){let t=new Map;for(let n=1;n<e.length;n++){let r=e[n-1],o=e[n],a=r.stable.start+r.length;a!==o.stable.start&&(t.set(a,"reference-gap"),t.set(o.stable.start,"reference-gap"))}return t}function Od(e,t,n){let r=(o,a)=>{Number.isFinite(o)&&!n.has(o)&&n.set(o,a)};for(let{runs:o,gaps:a}of e){let i=o[0],s=o.at(-1);i&&s&&(r(i.start,"walk-end"),r(s.end,"walk-end"));for(let d of o)d.inverted&&d.end-d.start>=t&&(r(d.start,"inversion"),r(d.end,"inversion"));for(let d of a)d.b<d.a?(r(d.a,"backward"),r(d.b,"backward")):In(d,t)||(r(d.a,"variant"),r(d.b,"variant"))}for(let o=!0;o;){o=!1;let a=[...n.keys()].sort((s,d)=>s-d),i=e.flatMap(({runs:s,gaps:d})=>[...d.filter(c=>In(c,t)).map(c=>[c.a,c.b]),...s.filter(c=>c.inverted&&c.end-c.start<t).map(c=>[c.start,c.end])]);for(let[s,d]of i)Qa(a,s,d)&&(o||=!n.has(s)||!n.has(d),r(s,"overlap"),r(d,"overlap"))}return n}function Hd(e,t){let n=[],r=[],o=()=>{let a=r[0],i=r.at(-1);if(a&&i){let s=a.stable.start,d=i.stable.start+i.length,c=`${s}-${d}`;n.push({node:{id:`${c}+`,name:c,length:d-s,depth:0,stable:{refName:a.stable.refName,start:s,rank:0,strand:"+"}},members:r})}r=[]};for(let a of e)t.has(a.stable.start)&&o(),r.push(a);return o(),n}function ei(e,t){let n=e.nodes.filter(D).sort((f,G)=>f.stable.start-G.stable.start),r=e.paths??[];if(n.length===0||r.length===0)return;let o=new Map(e.nodes.map(f=>[f.id,f])),a=Or(e),i=r.map(f=>_d(f,o,a)),s=Od(i,t,Wd(n)),d=[...s.keys()].sort((f,G)=>f-G),c=Hd(n,s),m=c.map(f=>f.node.stable.start),g=f=>{let G=0,S=m.length-1;for(;G<S;){let N=G+S+1>>1;m[N]<=f?G=N:S=N-1}return G},p=new Map,u=new Map;for(let f of c){p.set(f.node.id,f.members.map(G=>G.id));for(let G of f.members)u.set(G.id,f.node.id)}let y=new Map,x=f=>{let G=`${f.a} ${f.b} ${f.detour.map(N=>N.node.id+N.strand).join(",")}`,S=y.get(G);if(!S){let N=`r${y.size}`;S={id:`${N}+`,name:N,length:f.bp,depth:0,stable:{refName:n[0].stable.refName,start:Number.isFinite(f.a)?f.a:f.b,rank:1,strand:"+"}},y.set(G,S),p.set(S.id,f.detour.map(v=>v.node.id));for(let v of f.detour)u.has(v.node.id)||u.set(v.node.id,S.id)}return S},k=new Map,h=[],R=new Map,l=new Map,b=new Map;for(let{path:f,runs:G,gaps:S}of i){let N=[],v=[],C=!1,O=(T,z)=>{let A=N.at(-1);C&&A?.node===T&&A.strand===z||N.push({node:T,strand:z}),C=!0},E=T=>{C=!1,T.detour.length>0&&(O(x(T),"+"),C=!1)},q=T=>{(T.bp>0||T.b>T.a)&&v.push({start:T.a,end:T.b,bp:T.bp});let z=c[g(T.b>T.a?T.a:T.a-1)];for(let A of T.detour)u.has(A.node.id)||(u.set(A.node.id,z.node.id),p.get(z.node.id).push(A.node.id))};G.forEach((T,z)=>{let A=S[z];In(A,t)&&!Qa(d,A.a,A.b)?q(A):E(A);let P=g(T.start),B=g(T.end-1),V=T.end-T.start<t;if(T.inverted&&!V){C=!1;for(let F=B;F>=P;F--)O(c[F].node,"-");C=!1}else{T.inverted&&v.push({start:T.start,end:T.end,bp:T.end-T.start,inverted:!0});for(let F=P;F<=B;F++)O(c[F].node,"+")}}),E(S.at(-1));let J=Z(f.name).name,te=0;N.forEach(({node:T,strand:z},A)=>{b.set(T.id,(b.get(T.id)??0)+1);let P=R.get(T.name)??[];P.push({path:J,sample:f.sample??J,start:te,strand:z}),R.set(T.name,P),te+=T.length;let B=N[A+1];if(B){let V=`${T.id}${z} ${B.node.id}${B.strand}`,F=l.get(V);F?F.pathIds.push(f.name):l.set(V,{from:T.id,to:B.node.id,fromStrand:z,toStrand:B.strand,pathIds:[f.name]})}}),h.push({...f,nodeIds:N.map(T=>T.node.id)}),k.set(f.name,v)}let L=[...c.map(f=>f.node),...y.values()].filter(f=>b.has(f.id)).map(f=>({...f,depth:b.get(f.id)}));return{graph:{...e,nodes:L,edges:[...l.values()],paths:h,pathVisits:R,reads:void 0},members:p,coarseOf:u,deviations:k,cuts:s}}var Ji=w(U(),1),ee=w(oe(),1),Zi=w(ud(),1),K=w(re(),1);var nt=w(oe(),1),Un=w(re(),1);function Ft(e,t,n){let r=new Map;for(let a of e.nodes)if(br(a)){let{refName:i}=a.stable;if(n[a.id]?.length){let s=r.get(i)??r.set(i,{nodes:[],reach:0}).get(i);s.nodes.push(a),s.reach=Math.max(s.reach,a.length)}}for(let{nodes:a}of r.values())a.sort((i,s)=>i.stable.start-s.stable.start);let o=[];for(let a of t){let i=r.get(a.refName);if(!i)continue;let s=[],d=[],c=new Set,m,g=1/0,p=0,u=(a.start+a.end)/2,{nodes:y,reach:x}=i;for(let k=kr(y,a.start-x);k<y.length&&y[k].stable.start<a.end;k++){let h=y[k],R=h.stable.start,l=R+h.length;if(l<=a.start)continue;let b=n[h.id];c.add(h.id),p+=Math.min(l,a.end)-Math.max(R,a.start);let L=[];for(let S of a.exons){let N=Math.max(S.start,R),v=Math.min(S.end,l);if(v<=N)continue;let C=on(b,(N-R)/h.length,(v-R)/h.length);C.length===1&&C.push({...C[0]}),L.push(ut(C))}L.length>0&&(s.push(...L),d.push({nodeId:h.id,d:L.join("")}));let f=Math.min(Math.max(u,R),l),G=Math.abs(f-u);if(G<g){g=G;let[S]=on(b,(f-R)/h.length,(f-R)/h.length);m=S}}m&&o.push({gene:a,exons:s.join(""),exonsByNode:d,nodeIds:c,at:m,covered:p/(a.end-a.start)})}return o}var j=e=>+e.toFixed(1);function jd(e){let t=/^rgba?\(([^,]+),([^,]+),([^,)]+)(?:,([^)]+))?\)$/.exec(e.replaceAll(" ",""));if(!t)return{color:e,opacity:1};let n=t[4]===void 0?1:Number(t[4]);return{color:`rgb(${t[1]},${t[2]},${t[3]})`,opacity:n}}function Bn(e,t){let{color:n,opacity:r}=jd(t);return`${e}="${n}"${r<1?` ${e}-opacity="${j(r)}"`:""}`}var ti=.5,ni=.25;function ri(e,t){let n=[],r=[],o=(c,m)=>{let g={d:`M${j(c)} ${j(m)}`,segments:0,x0:c,x1:c,y0:m,y1:m};return r.push(g),g},a=c=>{let m=r.at(-1)??o(c[0],c[1]);for(let g=0;g<c.length;g+=2)m.x0=Math.min(m.x0,c[g]),m.x1=Math.max(m.x1,c[g]),m.y0=Math.min(m.y0,c[g+1]),m.y1=Math.max(m.y1,c[g+1]);return m.segments++,m},i=c=>{let m=new Set;return r.map(g=>{if(!c||g.x1-g.x0>=ti||g.y1-g.y0>=ti)return g.d;let p=(g.x0+g.x1)/2,u=(g.y0+g.y1)/2,y=`${Math.round(p/ni)} ${Math.round(u/ni)}`;return g.segments===0||m.has(y)?"":(m.add(y),`M${j(p)} ${j(u)}h0`)}).join("")},s={canvas:void 0,fillStyle:"#000",strokeStyle:"#000",lineWidth:1,lineCap:"butt",lineJoin:"miter",beginPath(){r=[]},moveTo(c,m){o(c,m)},lineTo(c,m){a([c,m]).d+=`L${j(c)} ${j(m)}`},bezierCurveTo(c,m,g,p,u,y){a([c,m,g,p,u,y]).d+=`C${j(c)} ${j(m)} ${j(g)} ${j(p)} ${j(u)} ${j(y)}`},closePath(){let c=r.at(-1);c&&(c.d+="Z")},stroke(){let c=i(s.lineCap!=="butt");c&&n.push(`<path d="${c}" fill="none" ${Bn("stroke",s.strokeStyle)} stroke-width="${j(s.lineWidth)}" stroke-linecap="${s.lineCap}" stroke-linejoin="${s.lineJoin}"/>`)},fill(){let c=i(!1);c&&n.push(`<path d="${c}" ${Bn("fill",s.fillStyle)}/>`)},fillRect(c,m,g,p){n.push(`<rect x="${j(c)}" y="${j(m)}" width="${j(g)}" height="${j(p)}" ${Bn("fill",s.fillStyle)}/>`)}},d={width:e,height:t,style:{},getContext:()=>s};return s.canvas=d,{canvas:d,markup:()=>n.join("")}}var oi="6.0.0";var ai=(e,t)=>!!e.referencePath&&Z(t).name===e.referencePath;function Xd(e,t){return(e.paths??[]).filter(n=>n.name===t).sort((n,r)=>(n.start??0)-(r.start??0))}function zd(e,t){let n=Xd(e,t),r=n[0];if(!r)return;let o=new Map(e.nodes.map(h=>[h.id,h])),a=new Map;e.edges.forEach((h,R)=>{a.set(`${h.from}>${h.to}`,R)});let i=h=>o.get(h)?.length??0,s=h=>h.nodeIds.reduce((R,l)=>R+i(l),0),d=n.reduce((h,R)=>h+s(R),0),c=r.start===void 0?void 0:{contig:r.contig??fr(Z(t).name),start:r.start,end:Math.max(...n.map(h=>(h.start??0)+s(h)))},m=c?c.end-c.start:d,g=new Set,p=new Set,u=new Map,y=0;for(let h of n)c&&(y=Math.max(y,(h.start??0)-c.start)),h.nodeIds.forEach((R,l)=>{if(g.add(R),l>0){let L=h.nodeIds[l-1],f=a.get(`${L}>${R}`)??a.get(`${R}>${L}`);f!==void 0&&p.add(f)}let b=i(R);u.has(R)||u.set(R,m>0?(y+b/2)/m:0),y+=b});let x=ai(e,t),k=x?[]:(e.paths??[]).filter(h=>ai(e,h.name));return{name:t,reference:x,range:c,nodeIds:g,edgeIndexes:p,progress:u,steps:n.reduce((h,R)=>h+R.nodeIds.length,0),bp:d,referenceBp:k.length>0?k.reduce((h,R)=>h+s(R),0):void 0}}function ii(e,t,n,r){let o=new Map(e.nodes.map(i=>[i.id,i])),a=new Map;for(let[i,s]of t.progress){let d=o.get(i),c=r?.midpoints.get(i),m=n.field==="progress"?s:r&&c!==void 0&&!(d?.stable&&d.stable.rank>0)?(c-r.start)/r.span:void 0;a.set(i,Zr(n,m))}return a}function Yd(e,t){let n=new Set,r=0,o=e.referencePath;if(!o||t.reference)return{reversed:n,bp:r};let a=Z(t.name).name,i=new Map(e.nodes.map(s=>[s.id,s]));for(let s of t.progress.keys()){let d=i.get(s),c=d?e.pathVisits?.get(d.name):void 0,m=c?.find(p=>p.path===a)?.strand,g=c?.find(p=>p.path===o)?.strand;m&&g&&m!==g&&(n.add(s),r+=d.length)}return{reversed:n,bp:r}}function $t(e,t,n){let r=new Set,o=t.filter(s=>!r.has(s.walk)&&r.add(s.walk)).flatMap(s=>{let d=zd(e,s.walk);return d?[{walk:d,layer:s}]:[]}).sort((s,d)=>Number(d.walk.reference)-Number(s.walk.reference));if(o.length===0)return;let a=0,i=o.map(({walk:s,layer:d})=>{let c=dn(d,s.reference,s.reference?0:a++,o.length===1),{reversed:m,bp:g}=Yd(e,s);return{...s,encoding:c,colors:ii(e,s,c,n),reversed:m,reversedBp:g}});return si(i,n)}var Ud={field:"progress",scheme:"red"};function Dt(e,t,n,r){return t.walks.map(o=>{let a=n.find(s=>s.walk===o.name)?.color,i=dn({walk:o.name,color:{...Ud,...a}},o.reference,0);return si([{...o,encoding:i,colors:ii(e,o,i,r)}],r)})}function si(e,t){return{walks:e,referenceDomain:t?{start:t.start,end:t.start+t.span}:void 0,nodeIds:new Set(e.flatMap(n=>[...n.nodeIds])),edgeIndexes:new Set(e.flatMap(n=>[...n.edgeIndexes])),names:new Set(e.map(n=>n.name))}}var Dn='font-family="Helvetica, Arial, sans-serif" font-size="11"',Kd=48,_t=18,qd=16,Jd=22,Zd="rgb(160,160,160)",ui="#1c1c22";function we(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function $n(e,t,n,r,o,a,i,s=1){let d=r.length>1?Kd:_t,c=r.length>1?`fill="url(#${e})"`:`fill="${r[0].color}"${s<1?` fill-opacity="${s}"`:""}`,m=r.length>1?`<linearGradient id="${e}">${r.map(p=>`<stop offset="${p.offset}" stop-color="${p.color}"/>`).join("")}</linearGradient>`:"";return{width:Math.max(d+5+(o.length+a.length)*6.2,(i?.length??0)*6.2),markup:`${m}<g transform="translate(${t} ${n})" ${Dn}><rect y="5" width="${d}" height="8" rx="2" ${c}/><text x="${d+5}" y="13"><tspan font-weight="bold">${we(o)}</tspan>${we(a)}</text>${i?`<text y="28">${we(i)}</text>`:""}</g>`}}function Qd(e,t){return{width:_t+5+4*6.2,markup:`<g transform="translate(${e} ${t})" ${Dn}><rect x="1" y="4" width="${_t-2}" height="10" rx="4" fill="none" stroke="${hn}" stroke-width="2"/><text x="${_t+5}" y="13">exon</text></g>`}}function pi(e,t,n,r,o,a){let i=xo(r,a);return $n(e,t,n,cn(r.encoding),o,i.delta+i.outside+i.reversed,i.scale)}function ec(e,t){return e.replaceAll(/([ML])(-?[\d.e-]+),(-?[\d.e-]+)/g,(n,r,o,a)=>`${r}${+(Number(o)*t.scaleX+t.translateX).toFixed(1)},${+(Number(a)*t.scaleY+t.translateY).toFixed(1)}`)}function tc(e,t,n,r,o){return`<rect x="${e-n/2}" y="${t-11-4+2}" width="${n}" height="${17}" rx="3" fill="#fff" fill-opacity="0.85" stroke="${hn}"/><text x="${e}" y="${t}" font-family="Helvetica, Arial, sans-serif" font-size="${11}" fill="${ui}" text-anchor="middle"><tspan font-style="italic" font-weight="600">${we(r)}</tspan>${o?we(o):""}</text>`}function mi(e,t,n={}){let r=n.width??1200,o=n.height??800,a=n.region,i=n.colorDomain??a,s=n.walkRows,d=vt(t,{region:n.fitToDrawing?void 0:a,extent:s&&t.extent?lt(s):void 0}),c=t.pixelRows??!1,m=new Map(e.nodes.map(A=>[A.id,A])),g=ft(n.colorScheme??"auto",e),p=g==="reference-position"&&!t.tubeMap?Ge(e,i):void 0,u=p&&{start:p.start,end:p.start+p.span},y=t.tubeMap?[]:Le(e),x=n.walks??[],k=x.some(A=>A.color?.field==="reference")?p??Ge(e,i):void 0,h=x.length>0&&!t.tubeMap?$t(e,x,k):void 0,R=xt(n.facet),l=R.field&&h&&h.walks.length>1?Dt(e,h,x,k):void 0,b=new Map((e.paths?.length?Fe(e.paths):[]).map(A=>[A.name,A.label])),L=A=>b.get(A)??A,f=n.referenceName??Rr(e,a),G=h?.referenceDomain&&{...h.referenceDomain,name:f},S=n.contigThickness??6,N=n.nodeWidth??"depth",v=n.genes?.length&&!t.tubeMap&&!s?Ft(e,n.genes,t.nodePositions):[],C=bt(e,m,S,N),O=0;function E(A,P,B,V){let F=[],se=ho(go(v,C.halfWidthPx,A,Y=>ec(Y,P)),{id:`exons${O++}`,width:B,height:V});se&&F.push(fe(se));let H=Y=>({x:Y.x*P.scaleX+P.translateX,y:Y.y*P.scaleY+P.translateY}),de={width:B,height:V};for(let{item:Y,x:he,y:Re,w:dd,text:cd}of Dr(bo(v,H,S,fo(t.nodePositions,P)),de,$r(de))){let pd=H(Y.at).y+S/2;F.push(`<line x1="${he}" x2="${he}" y1="${Re-11-2}" y2="${pd}" stroke="${ui}" stroke-width="0.8" stroke-opacity="0.6"/>`,tc(he,Re,dd,Y.gene.name,cd.slice(Y.gene.name.length)))}s&&F.push(fe(gn(s,{...P,width:B,height:V},{ramp:u,rowGenes:n.rowGenes})));let at=s?[s.reference,...s.rows].map((Y,he)=>({label:Y.label,y:he*20})):t.rowLabels??[];for(let{label:Y,y:he}of at){let Re=he*P.scaleY+P.translateY;Re>=0&&Re<=V&&F.push(`<text x="6" y="${Re+4}" ${Dn} stroke="#fff" stroke-width="3" paint-order="stroke">${we(Y)}</text>`)}return F.join("")}function q(A,P,B){let V=ze(d,P,B,c,l?{padLeft:12,padTop:12,padRight:12,padBottom:12}:{});if(!V)return"";let F=Ae(V.scale,c),{canvas:se,markup:H}=ri(P,B),de=new wo(se);de.uploadGeometry(yt({nodePositions:s?{}:t.nodePositions,graph:e,nodeById:m,colorScheme:g,contigThickness:S,connectorThickness:n.connectorThickness??2,drawPaths:!1,nodeWidth:N,highlight:A,axis:F,referenceRamp:p,deletions:new Map(y.map(Y=>[Y.edgeIndex,Y.bypassed])),deletionRoutes:t.deletionRoutes,stranded:t.stranded,hiddenEdges:new Set(n.showDeletionEdges?[]:y.map(Y=>Y.edgeIndex))}));let at={scaleX:F.scaleX,scaleY:F.scaleY,translateX:V.translateX,translateY:V.translateY};return de.updateTransform({...at,dpr:1}),de.render([1,1,1,1]),H()+E(A,at,P,B)}let J=[],te;if(l){let A=St(l.map(B=>B.walks[0].name),R.field||"walk",R.domain),P=kt({count:A.count,bounds:d,pixelRows:c,width:r,room:o,columns:A.columns??R.columns});l.forEach((B,V)=>{let F=A.cells[V],se=F%P.columns*(P.width+8),H=Math.floor(F/P.columns)*(P.height+34+8),de=B.walks[0];J.push(pi(`key${V}`,se+6,H+2,de,L(de.name),G).markup,`<svg x="${se}" y="${H+34}" width="${P.width}" height="${P.height}">${q(B,P.width,P.height)}</svg>`)}),te=P.total}else{let A=6,P=H=>{J.push(H.markup),A+=H.width+qd};if(h&&(h.walks.forEach((H,de)=>{P(pi(`key${de}`,A,2,H,L(H.name),G))}),P($n("faded",A,2,[{offset:0,color:Zd}],"",`not on ${h.walks.length===1?L(h.walks[0].name):"these walks"}`,void 0,.3))),s){let H=ln(mn(s,{ramp:u,genes:n.rowGenes?.size?n.rowGeneGaps:void 0}),A,2,"rows-key");P({width:H.width,markup:fe(H.tree)})}else!h&&p&&P($n("ramp",A,2,cn({field:"reference",scheme:"rainbow"}),f?`${f} position`:"Reference position","",ko(f,p.start,p.start+p.span)));v.some(H=>H.exonsByNode.length>0)&&P(Qd(A,2));let B=J.length>0?34:0,V=r-2*$,F=c||!(d.w>0)?d.h:d.h*V/d.w,se=Math.max(160,Math.min(o-B,Math.ceil(F+2*$)));J.push(`<svg y="${B}" width="${r}" height="${se}">${q(h,r,se)}</svg>`),te=B+se}let T=n.walkStrip;if(T&&!s&&!t.tubeMap){let A=Lt(T.rows,{width:r}),P=ln(mn(T.rows,{ramp:u,genes:lo(A,T.rowGenes,T.rowGeneGaps)}),6,te+A.height,"strip-key");J.push(`<line x1="0" x2="${r}" y1="${te+.5}" y2="${te+.5}" stroke="#ddd"/>`,`<svg y="${te}" width="${r}" height="${A.height}">${fe(gn(T.rows,A,{ramp:u,rowGenes:T.rowGenes,idPrefix:"strip"}))}${fe(mo(T.rows,A,new Set(x.map(B=>B.walk))))}</svg>`,fe(P.tree)),te+=A.height+Jd}let z=JSON.stringify({generator:`@jbrowse/bandage-core@${oi}`,...n.spec===void 0?{}:{spec:n.spec}});return`<svg xmlns="http://www.w3.org/2000/svg" width="${r}" height="${te}" viewBox="0 0 ${r} ${te}"><metadata>${we(z)}</metadata><rect width="${r}" height="${te}" fill="#fff"/>${J.join("")}</svg>
|
|
2
|
+
`)){let r=n.endsWith("\r")?n.slice(0,-1):n;if(r.startsWith("H")){let[,...o]=r.split(" ");t.header.push(He(o))}else if(r.startsWith("S")){let[,o,...a]=r.split(" "),i,s,d,c=!1,m=a[0]??"*";/^\d+$/.test(m)?(i=+m,s=a[1]??"*",d=a.slice(2)):(c=!0,s=m,i=s==="*"?0:s.length,d=a.slice(1));let g=He(d);c&&"LN"in g&&(i=+g.LN),t.nodes.push({id:o,length:i,sequence:s,tags:g})}else if(r.startsWith("E")){let[,,o,a,,,,,i,...s]=r.split(" ");o&&a&&t.links.push({source:o.slice(0,-1),target:a.slice(0,-1),strand1:o.at(-1),strand2:a.at(-1),cigar:i??"*",tags:He(s)})}else if(r.startsWith("L")){let[,o,a,i,s,d,...c]=r.split(" ");o&&i&&s&&t.links.push({source:o,target:i,strand1:a,strand2:s,cigar:d??"*",tags:He(c)})}else if(r.startsWith("W")){let[,o,a,i,s,d,c,...m]=r.split(" ");o&&a&&i&&s&&d&&c&&t.walks.push({sample:o,haplotype:+a,contig:i,start:s==="*"?-1:+s,end:d==="*"?-1:+d,segments:Ld(c),tags:He(m)})}else if(r.startsWith("P")){let[,o,a,...i]=r.split(" ");o&&a&&t.paths.push({name:o,path:a,rest:i})}}return t}function Gd(e){let t=new Map,n=new Map;function r(a,i){t.has(a)||t.set(a,i)}function o(a,i){r(a,i),n.set(a,(n.get(a)??0)+1)}for(let a of e.links)r(a.source,a.strand1==="-"?"-":"+"),r(a.target,a.strand2==="-"?"-":"+");for(let a of e.paths)for(let i of a.path.split(","))o(i.slice(0,-1),i.endsWith("-")?"-":"+");for(let a of e.walks)for(let i of a.segments)o(i.id,i.strand==="-"?"-":"+");return{canonical:t,traversals:n}}var ga=e=>e.start===-1?0:e.start;function Td(e){return[...e.paths.map(t=>({...Z(t.name),steps:t.path.split(",").map(n=>({id:n.slice(0,-1),strand:n.endsWith("-")?"-":"+"}))})),...e.walks.map(t=>({name:`${t.sample}#${t.haplotype}#${t.contig}`,start:ga(t),steps:t.segments.map(n=>({id:n.id,strand:n.strand==="-"?"-":"+"}))}))]}function Ad(e){let t=e.tags.SM;if(typeof t!="string")return;let n=t.split(",").map(r=>r.trim()).filter(Boolean);return n.length>0?n:void 0}var je=e=>typeof e=="number"&&e>0?e:void 0;function Nd({tags:e,length:t}){let n=je(e.RC)??je(e.FC)??je(e.KC);return je(e.dp)??je(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function Pd(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:Rn(e),samples:Ad(e)}}function ha(e,t="Imported GFA"){let n=[],r=[],{canonical:o,traversals:a}=Gd(e),i=u=>`${u}${o.get(u)??"+"}`;for(let u of e.nodes){let y=Nd(u)??Math.max(a.get(u.id)??1,1);n.push(Pd(u,o.get(u.id)??"+",y))}for(let u of e.links)r.push({from:i(u.source),to:i(u.target),fromStrand:u.strand1==="-"?"-":"+",toStrand:u.strand2==="-"?"-":"+"});let s=[],d=new Map,c=(u,y)=>[u,y].sort().join("--");function m(u,y){for(let x=0;x<u.length-1;x++){let k=c(u[x],u[x+1]);d.has(k)||d.set(k,new Set),d.get(k).add(y)}}for(let u of e.paths){let y=u.path.split(",").map(x=>i(x.slice(0,-1)));s.push({name:u.name,nodeIds:y,start:Z(u.name).start}),m(y,u.name)}for(let u of e.walks){let y=u.segments.map(k=>i(k.id)),x=`${u.sample}#${u.haplotype}#${u.contig}`;s.push({name:x,nodeIds:y,start:ga(u),sample:u.sample,haplotype:u.haplotype,contig:u.contig}),m(y,x)}for(let u of r){let y=d.get(c(u.from,u.to));y&&y.size>0&&(u.pathIds=[...y])}let g=new Map(e.nodes.map(u=>[u.id,u.length])),p=e.paths.length>0||e.walks.length>0?Cr(Td(e),u=>g.get(u)??0):void 0;return{name:t,nodes:n,edges:r,paths:s.length>0?s:void 0,anchorPaths:p?.anchorPaths,pathVisits:p?.pathVisits,anchoredBy:n.some(u=>u.stable)?"tags":void 0}}var vd="\0deletion:";function fa(e,t){let n=new Map(t.map(o=>[o.edgeIndex,`${vd}${o.edgeIndex}`])),r=[];return e.edges.forEach((o,a)=>{let i=n.get(a);if(i===void 0)r.push(o);else{let{fromStrand:s,toStrand:d}=o;r.push({from:o.from,to:i,...s?{fromStrand:s}:{}},{from:i,to:o.to,...d?{toStrand:d}:{}})}}),{graph:{...e,nodes:[...e.nodes,...[...n.values()].map(o=>({id:o,name:o,length:0,depth:0}))],edges:r},routes:n,ids:new Set(n.values())}}function ba(e,t,n,r,o){let a=new Map(e.nodes.map(i=>[i.id,i.length]));return t.map(i=>{let s=i.bypassed.reduce((m,g)=>m+(a.get(g)??0),0),d=Math.max(o.minimumNodeLength,r(s)*.5),c=n.get(i.edgeIndex);return{id:c,name:c,length:Math.round(d*1e6/o.nodeLengthPerMegabase),depth:0}})}function ya(e,t){let n={...e},r={};for(let[o,a]of t){let i=n[a];delete n[a],i?.length&&(r[o]=i)}return{nodePositions:n,deletionRoutes:r}}function wa(e,t){let n=e.nodes.filter(k=>D(k)&&(t[k.id]?.length??0)>0);if(n.length<2)return t;let r=n.map(k=>{let h=t[k.id],R=h[Math.floor(h.length/2)];return{x:R.x,y:R.y,r:k.stable.start+k.length/2,w:k.length}}),o=r.reduce((k,h)=>k+h.w,0),a=r.reduce((k,h)=>k+h.x*h.w,0)/o,i=r.reduce((k,h)=>k+h.y*h.w,0)/o,s=r.reduce((k,h)=>k+h.r*h.w,0)/o,d=0,c=0;for(let k of r)d+=k.w*(k.x-a)*(k.r-s),c+=k.w*(k.y-i)*(k.r-s);let m=-Math.atan2(c,d),g=Math.cos(m),p=Math.sin(m),u={};for(let[k,h]of Object.entries(t))u[k]=h.map(R=>{let l=R.x-a,b=R.y-i;return{x:a+g*l-p*b,y:i+p*l+g*b}});let y=0,x=0;for(let k of e.nodes)if(!D(k))for(let h of u[k.id]??[])h.y>i?y++:x++;if(x>y)for(let k of Object.values(u))for(let h of k)h.y=2*i-h.y;return u}var ka=30;function Cd(e,t){let{opts:n}=t,r=new Map(t.nodes.map(p=>[p.id,wt(n,p.length)])),o=p=>r.get(p)??n.minimumNodeLength,a=e.nodes.filter(D).sort((p,u)=>p.stable.start-u.stable.start),i=new Map,s=0;for(let p of a)i.set(p.id,{x:s,y:0}),s+=o(p.id)+n.edgeLength;let d=dt(e),c=new Map(a.map(p=>[p.id,0])),m=a.map(p=>p.id);for(let p of m){let u=i.get(p),y=c.get(p)+1;for(let x of d.get(p)??[])c.has(x)||(c.set(x,y),i.set(x,{x:u.x+o(p)/2,y:ka*y}),m.push(x))}let g=0;for(let p of e.nodes)i.has(p.id)||i.set(p.id,{x:g++*s/e.nodes.length,y:ka*3});return i}function xa(e,t){let n=Cd(e,t);return t.nodes.map(r=>({...r,...n.get(r.id)}))}function Sa(e,t,n={}){let r=Br(ha(Mn(e),t),n.referencePath);if(r.nodes.length===0)throw new Error(`No graph segments in ${t}`);if(n.maxNodes!==void 0&&r.nodes.length>n.maxNodes)throw new Error(`Graph too large to draw: ${r.nodes.length.toLocaleString()} nodes (limit ${n.maxNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);return r}var Id=15;function Bd(e,t,n){let r=e.nodes.some(D),o={...t,opts:{...t.opts,edgeLength:t.opts.edgeLength*(n.spacing??1)}};return{graph:{nodes:r?xa(e,o):o.nodes,edges:e.edges},options:{quality:n.quality,linearLayout:n.linearLayout,...o.opts,componentSeparation:Id*(n.componentSeparation??1),...r?{rotateComponents:!1}:{}}}}function Ra(e,t){let n=e.nodes.some(D);return`${t.quality}|${t.linearLayout}|${t.bubbleSpread}|${t.spacing??1}|${t.componentSeparation??1}|${n}|${e.referencePath??""}`}async function Ma(e,t,n){let r=no(t.bubbleSpread),o=Le(e),a=fa(e,o),i=Er(a.graph,a.ids),s={...i.graph,nodes:i.graph.nodes.filter(k=>!a.ids.has(k.id))},d=pn(s,r),{result:c,duration:m}=await n(Bd(i.graph,{...d,nodes:[...d.nodes,...ba(e,o,a.routes,eo(s,r),d.opts)]},t)),g=pn(e,r),p=new Map(g.nodes.map(k=>[k.id,wt(g.opts,k.length)])),u=Fr(c.nodePositions,i.runs,k=>p.get(k)??0),{nodePositions:y,deletionRoutes:x}=ya(e.nodes.some(D)?wa(e,u):u,a.routes);return{result:{...c,nodePositions:y,stranded:!0,...o.length?{deletionRoutes:x,extent:La(x)}:{}},duration:m}}function La(e){let t=1/0,n=1/0,r=-1/0,o=-1/0;for(let a of Object.values(e))for(let i of a)t=Math.min(t,i.x),n=Math.min(n,i.y),r=Math.max(r,i.x),o=Math.max(o,i.y);return{minX:t,minY:n,maxX:r,maxY:o}}var $=40,Ed=1e-6,Fd=100;function Xe(e){return Math.max(Ed,Math.min(Fd,e))}function Ln(e,t,n,r=$){let o=t-e.h*n;return r-e.minY*n+Math.max(0,o)/2}function ze(e,t,n,r,{minScale:o=0,padLeft:a=$,padTop:i=$,padRight:s=$,padBottom:d=$}={}){let c=t-a-s,m=n-i-d;if(c<=0||m<=0||!(e.w>0||!r&&e.h>0))return;let g=e.w>0?c/e.w:1/0,p=e.h>0?m/e.h:1/0,u=Xe(Math.max(o,r?g:Math.min(g,p))),y=c-e.w*u;return{scale:u,translateX:a-e.minX*u+Math.max(0,y)/2,translateY:Ln(e,m,r?1:u,i)}}function vt(e,t={}){let{minX:n,minY:r,maxX:o,maxY:a}=La(e.nodePositions),{region:i}=t;e.referenceAxis&&i&&i.end>i.start&&(n=i.start,o=i.end);let s=t.extent??e.extent;return s&&(n=Math.min(n,s.minX??n),r=Math.min(r,s.minY??r),o=Math.max(o,s.maxX??o),a=Math.max(a,s.maxY??a)),{minX:n,minY:r,w:o-n,h:a-r}}function Ae(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function Ga(e,t,n,r){return{minX:-e.translateX/t.scaleX,minY:-e.translateY/t.scaleY,maxX:(n-e.translateX)/t.scaleX,maxY:(r-e.translateY)/t.scaleY}}function Ta(e,t){let n=(e.maxX-e.minX)*t,r=(e.maxY-e.minY)*t;return{minX:e.minX-n,minY:e.minY-r,maxX:e.maxX+n,maxY:e.maxY+r}}function Aa(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}function Na(e,t,n,r,o){let a=Xe(e.scale*t),i=a/e.scale;return{scale:a,translateX:n-(n-e.translateX)*i,translateY:o?e.translateY:r-(r-e.translateY)*i}}var M=w(re(),1),Ea=w(va(),1);var be=w(re(),1);function Ca(e){return t=>e.includes(t)?t:void 0}function Gn(e){return be.types.snapshotProcessor(be.types.maybe(be.types.enumeration(e)),{preProcessor:Ca(e)})}function Tn(e,t){return be.types.snapshotProcessor(be.types.optional(be.types.enumeration(e),t),{preProcessor:Ca(e)})}var Fa=600,It=160,Bt=[1,1,1,1],Et=[.12,.12,.12,1],$a=([e,t,n])=>`rgb(${[e,t,n].map(r=>Math.round(r*255)).join(", ")})`,Da=5,Ne=new Set(["tubemap","tubemapref"]),Va=(0,Ba.lazy)(()=>import("./chunks/ChooseWalksDialog-GVQLSGHX.js")),An=12,_a=[{value:"",label:"Off"},{value:"walk",label:"A panel per walk"},{value:"sample",label:"A row per sample, a column per haplotype"}],$d=M.types.snapshotProcessor(M.types.model("GraphFacet",{field:M.types.optional(M.types.enumeration(["","walk","sample"]),""),domain:M.types.optional(M.types.frozen(),[]),columns:M.types.maybe(M.types.number)}),{preProcessor:e=>xt(e)}),Wa=[{bp:0,label:"None"},{bp:3,label:"Under 3 bp"},{bp:10,label:"Under 10 bp"},{bp:50,label:"Under 50 bp, leaving structural variants"},{bp:1e3,label:"Under 1 kb"}],Ia=".segs.bed.gz";function Oa(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(Ia)?n.slice(0,-Ia.length):void 0}var Nn=1.4,Ha=1.6,ja=150,Xa=1,Pn=40,vn={nodeStrokes:[],nodeStrokeRuns:new Map,arrows:[],arrowRuns:new Map,edgeCurves:[],edgeCurveRuns:new Map};function ue(...e){}var Ye=5e6;function ye(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var za=2e4;function Pe(e){return e&&"uri"in e&&e.uri?new URL(e.uri,e.baseUri??window.location.href).href:void 0}function Cn(e){return e.builtViewport!==void 0&&e.paintedViewport===e.builtViewport&&e.builtViewport.viewportDirty===e.viewportDirty&&!e.viewportRebuildPending}function Ue(e){let{width:t,height:n}=e.viewBox;return Ga(e,e.axisScale,t,n)}var Ct=new WeakMap,Dd=4;function Ya(e){let t=Ct.get(e);return t||(t=new Map,Ct.set(e,t)),t}function Ua(e,t){let n=Ct.get(e);n&&e!==t&&Ct.set(t,n)}function Ka(e,t,n){e.size>=Dd&&e.delete(e.keys().next().value),e.set(t,n)}var qa=M.types.compose("GraphPane",(0,Ea.RenderLifecycleMixin)(),M.types.model({layoutQuality:M.types.optional(M.types.number,2),linearLayout:M.types.optional(M.types.boolean,!1),layoutMode:Gn(gt),colorScheme:Gn(ht),bubbleSpread:Tn(to,"auto"),nodeWidth:Tn(zr,"depth"),showBubbles:M.types.optional(M.types.boolean,!1),showDeletionEdges:M.types.optional(M.types.boolean,!0),showGenes:M.types.optional(M.types.boolean,!0),showReferenceStrip:M.types.optional(M.types.boolean,!0),tubeMapFold:M.types.optional(M.types.number,0),geneTrackId:M.types.optional(M.types.string,""),repeatTrackId:M.types.optional(M.types.string,""),repeatKey:M.types.optional(M.types.string,""),walkRowSamples:M.types.maybe(M.types.frozen()),walkStrip:M.types.optional(M.types.boolean,!1),walkLayers:M.types.optional(M.types.frozen(),[]),facet:M.types.optional($d,{}),referencePath:M.types.optional(M.types.string,""),showPerf:M.types.optional(M.types.boolean,!1),contigThickness:M.types.optional(M.types.number,6),connectorThickness:M.types.optional(M.types.number,2),darkMode:M.types.optional(M.types.boolean,!1),scale:M.types.optional(M.types.number,1),translateX:M.types.optional(M.types.number,0),translateY:M.types.optional(M.types.number,0),drawPaths:M.types.optional(M.types.boolean,!1),paneHeight:M.types.maybe(M.types.number),maxGraphNodes:M.types.optional(M.types.number,za),colorDomain:M.types.maybe(M.types.frozen()),connectedViewId:M.types.maybe(M.types.string)})).volatile(()=>({graph:void 0,graphRegion:void 0,loadedReferencePath:void 0,layoutResult:void 0,legendSize:{width:0,height:0},indexBubbles:void 0,geneTrackFeatures:void 0,walkGeneFeatures:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredRowWalks:[],hoveredBubble:null,pointerInPane:!1,stripHover:null,hoveredEdge:null,selectedNode:null,viewportDirty:0,positionsVersion:0,geometryVersion:0,builtViewport:void 0,paintedViewport:void 0,draggingNode:null,isPanning:!1,viewportOwner:"fit",viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,readsShown:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0,viewportRebuildPending:!1}));var os=w(oe(),1),me=w(re(),1),W=w(st(),1);function Ja(e,t){let n=new Set(t),r=e.nodes.filter(d=>n.has(d.name)),o=new Set(r.map(d=>d.id)),a=new Map(e.nodes.map(d=>[d.id,d.length])),i=new Map,s=e.paths?.flatMap(d=>{let c=d.nodeIds.findIndex(p=>o.has(p));if(c<0)return[];let m=d.nodeIds.filter(p=>o.has(p));i.set(d.name,{first:c,nodeIds:m});let g=d.nodeIds.slice(0,c).reduce((p,u)=>p+(a.get(u)??0),0);return[{...d,nodeIds:m,...d.start===void 0?{}:{start:d.start+g}}]});return{name:e.name,nodes:r,edges:e.edges.filter(d=>o.has(d.from)&&o.has(d.to)),...s?.length?{paths:s}:{},anchorPaths:pt(e,i),pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}function Za(e,t){let n=new Set(e.nodes.filter(d=>D(d)&&wr(d,t)).map(d=>d.id)),r=e.paths??[];if(n.size===0||r.length===0)return e;let o=r.map(d=>{let c=-1,m=-1;return d.nodeIds.forEach((g,p)=>{n.has(g)&&(c<0&&(c=p),m=p)}),c<0?void 0:{first:c,last:m}});if(o.every((d,c)=>d?.first===0&&d.last===r[c].nodeIds.length-1))return e;let a=new Set,i=[],s=new Map;return r.forEach((d,c)=>{let m=o[c];if(m){let g=d.nodeIds.slice(m.first,m.last+1);for(let p of g)a.add(p);i.push({...d,nodeIds:g}),s.set(d.name,{first:m.first,nodeIds:g})}}),{...e,nodes:e.nodes.filter(d=>a.has(d.id)),edges:e.edges.filter(d=>a.has(d.from)&&a.has(d.to)),paths:i,pathVisits:e.pathVisits&&Vd(e.pathVisits,r,o,new Map(e.nodes.map(d=>[d.id,d.name]))),anchorPaths:pt(e,s)}}function Vd(e,t,n,r){let o=new Map,a=new Map;return t.forEach((i,s)=>{let d=Z(i.name).name,c=n[s];i.nodeIds.forEach((m,g)=>{let p=r.get(m)??m,u=e.get(p);if(!u)return;let y=`${d} ${p}`,x=o.get(y)??0;for(;x<u.length&&u[x].path!==d;)x++;let k=u[x];if(o.set(y,x+1),k&&c&&g>=c.first&&g<=c.last){let h=a.get(p);h?h.push(k):a.set(p,[k])}})}),a}function _d(e,t,n){let r=Z(e.name).name,o=new Map,a=[],i=()=>({a:-1/0,b:1/0,detour:[],bp:0}),s=[i()];for(let d of e.nodeIds){let c=t.get(d);if(!c)continue;let m=o.get(c.name)??0;o.set(c.name,m+1);let g=n.get(`${r} ${c.name}`)?.[m]??Wr(c),p=s.at(-1),u=a.at(-1);if(D(c)){let y=c.stable.start,x=y+c.length,k=g!==(c.stable.strand??"+"),h=u!==void 0&&p.detour.length===0;h&&!u.inverted&&!k&&u.end===y?u.end=x:h&&u.inverted&&k&&u.start===x?u.start=y:(a.push({start:y,end:x,inverted:k}),s.push(i()))}else p.detour.push({node:c,strand:g}),p.bp+=c.length}return a.forEach((d,c)=>{s[c].b=d.start,s[c+1].a=d.end}),{path:e,runs:a,gaps:s}}function In(e,t){return Number.isFinite(e.a)&&Number.isFinite(e.b)&&e.b>=e.a&&Math.max(e.b-e.a,e.bp)<t}function Qa(e,t,n){let r=0,o=e.length;for(;r<o;){let a=r+o>>1;e[a]<=t?r=a+1:o=a}return r<e.length&&e[r]<n}function Wd(e){let t=new Map;for(let n=1;n<e.length;n++){let r=e[n-1],o=e[n],a=r.stable.start+r.length;a!==o.stable.start&&(t.set(a,"reference-gap"),t.set(o.stable.start,"reference-gap"))}return t}function Od(e,t,n){let r=(o,a)=>{Number.isFinite(o)&&!n.has(o)&&n.set(o,a)};for(let{runs:o,gaps:a}of e){let i=o[0],s=o.at(-1);i&&s&&(r(i.start,"walk-end"),r(s.end,"walk-end"));for(let d of o)d.inverted&&d.end-d.start>=t&&(r(d.start,"inversion"),r(d.end,"inversion"));for(let d of a)d.b<d.a?(r(d.a,"backward"),r(d.b,"backward")):In(d,t)||(r(d.a,"variant"),r(d.b,"variant"))}for(let o=!0;o;){o=!1;let a=[...n.keys()].sort((s,d)=>s-d),i=e.flatMap(({runs:s,gaps:d})=>[...d.filter(c=>In(c,t)).map(c=>[c.a,c.b]),...s.filter(c=>c.inverted&&c.end-c.start<t).map(c=>[c.start,c.end])]);for(let[s,d]of i)Qa(a,s,d)&&(o||=!n.has(s)||!n.has(d),r(s,"overlap"),r(d,"overlap"))}return n}function Hd(e,t){let n=[],r=[],o=()=>{let a=r[0],i=r.at(-1);if(a&&i){let s=a.stable.start,d=i.stable.start+i.length,c=`${s}-${d}`;n.push({node:{id:`${c}+`,name:c,length:d-s,depth:0,stable:{refName:a.stable.refName,start:s,rank:0,strand:"+"}},members:r})}r=[]};for(let a of e)t.has(a.stable.start)&&o(),r.push(a);return o(),n}function ei(e,t){let n=e.nodes.filter(D).sort((f,G)=>f.stable.start-G.stable.start),r=e.paths??[];if(n.length===0||r.length===0)return;let o=new Map(e.nodes.map(f=>[f.id,f])),a=Or(e),i=r.map(f=>_d(f,o,a)),s=Od(i,t,Wd(n)),d=[...s.keys()].sort((f,G)=>f-G),c=Hd(n,s),m=c.map(f=>f.node.stable.start),g=f=>{let G=0,S=m.length-1;for(;G<S;){let N=G+S+1>>1;m[N]<=f?G=N:S=N-1}return G},p=new Map,u=new Map;for(let f of c){p.set(f.node.id,f.members.map(G=>G.id));for(let G of f.members)u.set(G.id,f.node.id)}let y=new Map,x=f=>{let G=`${f.a} ${f.b} ${f.detour.map(N=>N.node.id+N.strand).join(",")}`,S=y.get(G);if(!S){let N=`r${y.size}`;S={id:`${N}+`,name:N,length:f.bp,depth:0,stable:{refName:n[0].stable.refName,start:Number.isFinite(f.a)?f.a:f.b,rank:1,strand:"+"}},y.set(G,S),p.set(S.id,f.detour.map(v=>v.node.id));for(let v of f.detour)u.has(v.node.id)||u.set(v.node.id,S.id)}return S},k=new Map,h=[],R=new Map,l=new Map,b=new Map;for(let{path:f,runs:G,gaps:S}of i){let N=[],v=[],C=!1,O=(T,z)=>{let A=N.at(-1);C&&A?.node===T&&A.strand===z||N.push({node:T,strand:z}),C=!0},E=T=>{C=!1,T.detour.length>0&&(O(x(T),"+"),C=!1)},q=T=>{(T.bp>0||T.b>T.a)&&v.push({start:T.a,end:T.b,bp:T.bp});let z=c[g(T.b>T.a?T.a:T.a-1)];for(let A of T.detour)u.has(A.node.id)||(u.set(A.node.id,z.node.id),p.get(z.node.id).push(A.node.id))};G.forEach((T,z)=>{let A=S[z];In(A,t)&&!Qa(d,A.a,A.b)?q(A):E(A);let P=g(T.start),B=g(T.end-1),V=T.end-T.start<t;if(T.inverted&&!V){C=!1;for(let F=B;F>=P;F--)O(c[F].node,"-");C=!1}else{T.inverted&&v.push({start:T.start,end:T.end,bp:T.end-T.start,inverted:!0});for(let F=P;F<=B;F++)O(c[F].node,"+")}}),E(S.at(-1));let J=Z(f.name).name,te=0;N.forEach(({node:T,strand:z},A)=>{b.set(T.id,(b.get(T.id)??0)+1);let P=R.get(T.name)??[];P.push({path:J,sample:f.sample??J,start:te,strand:z}),R.set(T.name,P),te+=T.length;let B=N[A+1];if(B){let V=`${T.id}${z} ${B.node.id}${B.strand}`,F=l.get(V);F?F.pathIds.push(f.name):l.set(V,{from:T.id,to:B.node.id,fromStrand:z,toStrand:B.strand,pathIds:[f.name]})}}),h.push({...f,nodeIds:N.map(T=>T.node.id)}),k.set(f.name,v)}let L=[...c.map(f=>f.node),...y.values()].filter(f=>b.has(f.id)).map(f=>({...f,depth:b.get(f.id)}));return{graph:{...e,nodes:L,edges:[...l.values()],paths:h,pathVisits:R,reads:void 0},members:p,coarseOf:u,deviations:k,cuts:s}}var Ji=w(U(),1),ee=w(oe(),1),Zi=w(ud(),1),K=w(re(),1);var nt=w(oe(),1),Un=w(re(),1);function Ft(e,t,n){let r=new Map;for(let a of e.nodes)if(br(a)){let{refName:i}=a.stable;if(n[a.id]?.length){let s=r.get(i)??r.set(i,{nodes:[],reach:0}).get(i);s.nodes.push(a),s.reach=Math.max(s.reach,a.length)}}for(let{nodes:a}of r.values())a.sort((i,s)=>i.stable.start-s.stable.start);let o=[];for(let a of t){let i=r.get(a.refName);if(!i)continue;let s=[],d=[],c=new Set,m,g=1/0,p=0,u=(a.start+a.end)/2,{nodes:y,reach:x}=i;for(let k=kr(y,a.start-x);k<y.length&&y[k].stable.start<a.end;k++){let h=y[k],R=h.stable.start,l=R+h.length;if(l<=a.start)continue;let b=n[h.id];c.add(h.id),p+=Math.min(l,a.end)-Math.max(R,a.start);let L=[];for(let S of a.exons){let N=Math.max(S.start,R),v=Math.min(S.end,l);if(v<=N)continue;let C=on(b,(N-R)/h.length,(v-R)/h.length);C.length===1&&C.push({...C[0]}),L.push(ut(C))}L.length>0&&(s.push(...L),d.push({nodeId:h.id,d:L.join("")}));let f=Math.min(Math.max(u,R),l),G=Math.abs(f-u);if(G<g){g=G;let[S]=on(b,(f-R)/h.length,(f-R)/h.length);m=S}}m&&o.push({gene:a,exons:s.join(""),exonsByNode:d,nodeIds:c,at:m,covered:p/(a.end-a.start)})}return o}var j=e=>+e.toFixed(1);function jd(e){let t=/^rgba?\(([^,]+),([^,]+),([^,)]+)(?:,([^)]+))?\)$/.exec(e.replaceAll(" ",""));if(!t)return{color:e,opacity:1};let n=t[4]===void 0?1:Number(t[4]);return{color:`rgb(${t[1]},${t[2]},${t[3]})`,opacity:n}}function Bn(e,t){let{color:n,opacity:r}=jd(t);return`${e}="${n}"${r<1?` ${e}-opacity="${j(r)}"`:""}`}var ti=.5,ni=.25;function ri(e,t){let n=[],r=[],o=(c,m)=>{let g={d:`M${j(c)} ${j(m)}`,segments:0,x0:c,x1:c,y0:m,y1:m};return r.push(g),g},a=c=>{let m=r.at(-1)??o(c[0],c[1]);for(let g=0;g<c.length;g+=2)m.x0=Math.min(m.x0,c[g]),m.x1=Math.max(m.x1,c[g]),m.y0=Math.min(m.y0,c[g+1]),m.y1=Math.max(m.y1,c[g+1]);return m.segments++,m},i=c=>{let m=new Set;return r.map(g=>{if(!c||g.x1-g.x0>=ti||g.y1-g.y0>=ti)return g.d;let p=(g.x0+g.x1)/2,u=(g.y0+g.y1)/2,y=`${Math.round(p/ni)} ${Math.round(u/ni)}`;return g.segments===0||m.has(y)?"":(m.add(y),`M${j(p)} ${j(u)}h0`)}).join("")},s={canvas:void 0,fillStyle:"#000",strokeStyle:"#000",lineWidth:1,lineCap:"butt",lineJoin:"miter",beginPath(){r=[]},moveTo(c,m){o(c,m)},lineTo(c,m){a([c,m]).d+=`L${j(c)} ${j(m)}`},bezierCurveTo(c,m,g,p,u,y){a([c,m,g,p,u,y]).d+=`C${j(c)} ${j(m)} ${j(g)} ${j(p)} ${j(u)} ${j(y)}`},closePath(){let c=r.at(-1);c&&(c.d+="Z")},stroke(){let c=i(s.lineCap!=="butt");c&&n.push(`<path d="${c}" fill="none" ${Bn("stroke",s.strokeStyle)} stroke-width="${j(s.lineWidth)}" stroke-linecap="${s.lineCap}" stroke-linejoin="${s.lineJoin}"/>`)},fill(){let c=i(!1);c&&n.push(`<path d="${c}" ${Bn("fill",s.fillStyle)}/>`)},fillRect(c,m,g,p){n.push(`<rect x="${j(c)}" y="${j(m)}" width="${j(g)}" height="${j(p)}" ${Bn("fill",s.fillStyle)}/>`)}},d={width:e,height:t,style:{},getContext:()=>s};return s.canvas=d,{canvas:d,markup:()=>n.join("")}}var oi="6.0.1";var ai=(e,t)=>!!e.referencePath&&Z(t).name===e.referencePath;function Xd(e,t){return(e.paths??[]).filter(n=>n.name===t).sort((n,r)=>(n.start??0)-(r.start??0))}function zd(e,t){let n=Xd(e,t),r=n[0];if(!r)return;let o=new Map(e.nodes.map(h=>[h.id,h])),a=new Map;e.edges.forEach((h,R)=>{a.set(`${h.from}>${h.to}`,R)});let i=h=>o.get(h)?.length??0,s=h=>h.nodeIds.reduce((R,l)=>R+i(l),0),d=n.reduce((h,R)=>h+s(R),0),c=r.start===void 0?void 0:{contig:r.contig??fr(Z(t).name),start:r.start,end:Math.max(...n.map(h=>(h.start??0)+s(h)))},m=c?c.end-c.start:d,g=new Set,p=new Set,u=new Map,y=0;for(let h of n)c&&(y=Math.max(y,(h.start??0)-c.start)),h.nodeIds.forEach((R,l)=>{if(g.add(R),l>0){let L=h.nodeIds[l-1],f=a.get(`${L}>${R}`)??a.get(`${R}>${L}`);f!==void 0&&p.add(f)}let b=i(R);u.has(R)||u.set(R,m>0?(y+b/2)/m:0),y+=b});let x=ai(e,t),k=x?[]:(e.paths??[]).filter(h=>ai(e,h.name));return{name:t,reference:x,range:c,nodeIds:g,edgeIndexes:p,progress:u,steps:n.reduce((h,R)=>h+R.nodeIds.length,0),bp:d,referenceBp:k.length>0?k.reduce((h,R)=>h+s(R),0):void 0}}function ii(e,t,n,r){let o=new Map(e.nodes.map(i=>[i.id,i])),a=new Map;for(let[i,s]of t.progress){let d=o.get(i),c=r?.midpoints.get(i),m=n.field==="progress"?s:r&&c!==void 0&&!(d?.stable&&d.stable.rank>0)?(c-r.start)/r.span:void 0;a.set(i,Zr(n,m))}return a}function Yd(e,t){let n=new Set,r=0,o=e.referencePath;if(!o||t.reference)return{reversed:n,bp:r};let a=Z(t.name).name,i=new Map(e.nodes.map(s=>[s.id,s]));for(let s of t.progress.keys()){let d=i.get(s),c=d?e.pathVisits?.get(d.name):void 0,m=c?.find(p=>p.path===a)?.strand,g=c?.find(p=>p.path===o)?.strand;m&&g&&m!==g&&(n.add(s),r+=d.length)}return{reversed:n,bp:r}}function $t(e,t,n){let r=new Set,o=t.filter(s=>!r.has(s.walk)&&r.add(s.walk)).flatMap(s=>{let d=zd(e,s.walk);return d?[{walk:d,layer:s}]:[]}).sort((s,d)=>Number(d.walk.reference)-Number(s.walk.reference));if(o.length===0)return;let a=0,i=o.map(({walk:s,layer:d})=>{let c=dn(d,s.reference,s.reference?0:a++,o.length===1),{reversed:m,bp:g}=Yd(e,s);return{...s,encoding:c,colors:ii(e,s,c,n),reversed:m,reversedBp:g}});return si(i,n)}var Ud={field:"progress",scheme:"red"};function Dt(e,t,n,r){return t.walks.map(o=>{let a=n.find(s=>s.walk===o.name)?.color,i=dn({walk:o.name,color:{...Ud,...a}},o.reference,0);return si([{...o,encoding:i,colors:ii(e,o,i,r)}],r)})}function si(e,t){return{walks:e,referenceDomain:t?{start:t.start,end:t.start+t.span}:void 0,nodeIds:new Set(e.flatMap(n=>[...n.nodeIds])),edgeIndexes:new Set(e.flatMap(n=>[...n.edgeIndexes])),names:new Set(e.map(n=>n.name))}}var Dn='font-family="Helvetica, Arial, sans-serif" font-size="11"',Kd=48,_t=18,qd=16,Jd=22,Zd="rgb(160,160,160)",ui="#1c1c22";function we(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function $n(e,t,n,r,o,a,i,s=1){let d=r.length>1?Kd:_t,c=r.length>1?`fill="url(#${e})"`:`fill="${r[0].color}"${s<1?` fill-opacity="${s}"`:""}`,m=r.length>1?`<linearGradient id="${e}">${r.map(p=>`<stop offset="${p.offset}" stop-color="${p.color}"/>`).join("")}</linearGradient>`:"";return{width:Math.max(d+5+(o.length+a.length)*6.2,(i?.length??0)*6.2),markup:`${m}<g transform="translate(${t} ${n})" ${Dn}><rect y="5" width="${d}" height="8" rx="2" ${c}/><text x="${d+5}" y="13"><tspan font-weight="bold">${we(o)}</tspan>${we(a)}</text>${i?`<text y="28">${we(i)}</text>`:""}</g>`}}function Qd(e,t){return{width:_t+5+4*6.2,markup:`<g transform="translate(${e} ${t})" ${Dn}><rect x="1" y="4" width="${_t-2}" height="10" rx="4" fill="none" stroke="${hn}" stroke-width="2"/><text x="${_t+5}" y="13">exon</text></g>`}}function pi(e,t,n,r,o,a){let i=xo(r,a);return $n(e,t,n,cn(r.encoding),o,i.delta+i.outside+i.reversed,i.scale)}function ec(e,t){return e.replaceAll(/([ML])(-?[\d.e-]+),(-?[\d.e-]+)/g,(n,r,o,a)=>`${r}${+(Number(o)*t.scaleX+t.translateX).toFixed(1)},${+(Number(a)*t.scaleY+t.translateY).toFixed(1)}`)}function tc(e,t,n,r,o){return`<rect x="${e-n/2}" y="${t-11-4+2}" width="${n}" height="${17}" rx="3" fill="#fff" fill-opacity="0.85" stroke="${hn}"/><text x="${e}" y="${t}" font-family="Helvetica, Arial, sans-serif" font-size="${11}" fill="${ui}" text-anchor="middle"><tspan font-style="italic" font-weight="600">${we(r)}</tspan>${o?we(o):""}</text>`}function mi(e,t,n={}){let r=n.width??1200,o=n.height??800,a=n.region,i=n.colorDomain??a,s=n.walkRows,d=vt(t,{region:n.fitToDrawing?void 0:a,extent:s&&t.extent?lt(s):void 0}),c=t.pixelRows??!1,m=new Map(e.nodes.map(A=>[A.id,A])),g=ft(n.colorScheme??"auto",e),p=g==="reference-position"&&!t.tubeMap?Ge(e,i):void 0,u=p&&{start:p.start,end:p.start+p.span},y=t.tubeMap?[]:Le(e),x=n.walks??[],k=x.some(A=>A.color?.field==="reference")?p??Ge(e,i):void 0,h=x.length>0&&!t.tubeMap?$t(e,x,k):void 0,R=xt(n.facet),l=R.field&&h&&h.walks.length>1?Dt(e,h,x,k):void 0,b=new Map((e.paths?.length?Fe(e.paths):[]).map(A=>[A.name,A.label])),L=A=>b.get(A)??A,f=n.referenceName??Rr(e,a),G=h?.referenceDomain&&{...h.referenceDomain,name:f},S=n.contigThickness??6,N=n.nodeWidth??"depth",v=n.genes?.length&&!t.tubeMap&&!s?Ft(e,n.genes,t.nodePositions):[],C=bt(e,m,S,N),O=0;function E(A,P,B,V){let F=[],se=ho(go(v,C.halfWidthPx,A,Y=>ec(Y,P)),{id:`exons${O++}`,width:B,height:V});se&&F.push(fe(se));let H=Y=>({x:Y.x*P.scaleX+P.translateX,y:Y.y*P.scaleY+P.translateY}),de={width:B,height:V};for(let{item:Y,x:he,y:Re,w:dd,text:cd}of Dr(bo(v,H,S,fo(t.nodePositions,P)),de,$r(de))){let pd=H(Y.at).y+S/2;F.push(`<line x1="${he}" x2="${he}" y1="${Re-11-2}" y2="${pd}" stroke="${ui}" stroke-width="0.8" stroke-opacity="0.6"/>`,tc(he,Re,dd,Y.gene.name,cd.slice(Y.gene.name.length)))}s&&F.push(fe(gn(s,{...P,width:B,height:V},{ramp:u,rowGenes:n.rowGenes})));let at=s?[s.reference,...s.rows].map((Y,he)=>({label:Y.label,y:he*20})):t.rowLabels??[];for(let{label:Y,y:he}of at){let Re=he*P.scaleY+P.translateY;Re>=0&&Re<=V&&F.push(`<text x="6" y="${Re+4}" ${Dn} stroke="#fff" stroke-width="3" paint-order="stroke">${we(Y)}</text>`)}return F.join("")}function q(A,P,B){let V=ze(d,P,B,c,l?{padLeft:12,padTop:12,padRight:12,padBottom:12}:{});if(!V)return"";let F=Ae(V.scale,c),{canvas:se,markup:H}=ri(P,B),de=new wo(se);de.uploadGeometry(yt({nodePositions:s?{}:t.nodePositions,graph:e,nodeById:m,colorScheme:g,contigThickness:S,connectorThickness:n.connectorThickness??2,drawPaths:!1,nodeWidth:N,highlight:A,axis:F,referenceRamp:p,deletions:new Map(y.map(Y=>[Y.edgeIndex,Y.bypassed])),deletionRoutes:t.deletionRoutes,stranded:t.stranded,hiddenEdges:new Set(n.showDeletionEdges?[]:y.map(Y=>Y.edgeIndex))}));let at={scaleX:F.scaleX,scaleY:F.scaleY,translateX:V.translateX,translateY:V.translateY};return de.updateTransform({...at,dpr:1}),de.render([1,1,1,1]),H()+E(A,at,P,B)}let J=[],te;if(l){let A=St(l.map(B=>B.walks[0].name),R.field||"walk",R.domain),P=kt({count:A.count,bounds:d,pixelRows:c,width:r,room:o,columns:A.columns??R.columns});l.forEach((B,V)=>{let F=A.cells[V],se=F%P.columns*(P.width+8),H=Math.floor(F/P.columns)*(P.height+34+8),de=B.walks[0];J.push(pi(`key${V}`,se+6,H+2,de,L(de.name),G).markup,`<svg x="${se}" y="${H+34}" width="${P.width}" height="${P.height}">${q(B,P.width,P.height)}</svg>`)}),te=P.total}else{let A=6,P=H=>{J.push(H.markup),A+=H.width+qd};if(h&&(h.walks.forEach((H,de)=>{P(pi(`key${de}`,A,2,H,L(H.name),G))}),P($n("faded",A,2,[{offset:0,color:Zd}],"",`not on ${h.walks.length===1?L(h.walks[0].name):"these walks"}`,void 0,.3))),s){let H=ln(mn(s,{ramp:u,genes:n.rowGenes?.size?n.rowGeneGaps:void 0}),A,2,"rows-key");P({width:H.width,markup:fe(H.tree)})}else!h&&p&&P($n("ramp",A,2,cn({field:"reference",scheme:"rainbow"}),f?`${f} position`:"Reference position","",ko(f,p.start,p.start+p.span)));v.some(H=>H.exonsByNode.length>0)&&P(Qd(A,2));let B=J.length>0?34:0,V=r-2*$,F=c||!(d.w>0)?d.h:d.h*V/d.w,se=Math.max(160,Math.min(o-B,Math.ceil(F+2*$)));J.push(`<svg y="${B}" width="${r}" height="${se}">${q(h,r,se)}</svg>`),te=B+se}let T=n.walkStrip;if(T&&!s&&!t.tubeMap){let A=Lt(T.rows,{width:r}),P=ln(mn(T.rows,{ramp:u,genes:lo(A,T.rowGenes,T.rowGeneGaps)}),6,te+A.height,"strip-key");J.push(`<line x1="0" x2="${r}" y1="${te+.5}" y2="${te+.5}" stroke="#ddd"/>`,`<svg y="${te}" width="${r}" height="${A.height}">${fe(gn(T.rows,A,{ramp:u,rowGenes:T.rowGenes,idPrefix:"strip"}))}${fe(mo(T.rows,A,new Set(x.map(B=>B.walk))))}</svg>`,fe(P.tree)),te+=A.height+Jd}let z=JSON.stringify({generator:`@jbrowse/bandage-core@${oi}`,...n.spec===void 0?{}:{spec:n.spec}});return`<svg xmlns="http://www.w3.org/2000/svg" width="${r}" height="${te}" viewBox="0 0 ${r} ${te}"><metadata>${we(z)}</metadata><rect width="${r}" height="${te}" fill="#fff"/>${J.join("")}</svg>
|
|
3
3
|
`}var nc=e=>e.bp1>e.bp0;function li(e,t){let n=e.filter(nc);if(n.length===0){let a=e[0];return a?[{tx:a.x0,sx:t(a.bp0)}]:[]}let r=n.map(a=>({c:a,s0:t(a.bp0),s1:t(a.bp1),trimLeft:0,trimRight:0}));for(let a=0;a+1<r.length;a++){let i=r[a],s=r[a+1],c=Math.min(s.c.x0-i.c.x1,24)-(s.s0-i.s1);if(c>0){let m=(i.s1-i.s0)/2,g=(s.s1-s.s0)/2,p=Math.min(c/2,m),u=Math.min(c-p,g);p=Math.min(c-u,m),i.trimRight=p,s.trimLeft=u}}let o=[];for(let{c:a,s0:i,s1:s,trimLeft:d,trimRight:c}of r)o.push({tx:a.x0,sx:i+d},{tx:a.x1,sx:s-c});return o}function gi(e,t){let n=e.length;if(n===0)return t;let r=e[0],o=e[n-1];if(t<=r.tx)return r.sx+(t-r.tx);if(t>=o.tx)return o.sx+(t-o.tx);let a=0,i=n-1;for(;i-a>1;){let m=a+i>>1;e[m].tx<=t?a=m:i=m}let s=e[a],d=e[i],c=d.tx-s.tx;return c>0?s.sx+(t-s.tx)/c*(d.sx-s.sx):s.sx}var rc=.05,Wt=9;function oc(e,t){let{minY:n,maxY:r}=e.layout.bounds,o=r-n;return e.columns&&o>0?Math.max(rc,Math.min(1,t/o)):1}function hi(e,t){let{scaleX:n,translateX:r,translateY:o}=t,a=t.scaleY*oc(e,t.usableHeight),i=d=>(d-e.yOffset)*a+o,{columns:s}=e;if(s){let d=li(s,c=>c*n+r);return{x:c=>gi(d,c),y:i,yScale:a}}return{x:d=>d*n+r,y:i,yScale:a}}function fi(e,{x:t,y:n},r,o){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-Wt)<=r&&r<=t(i.x+i.pixelWidth+Wt)&&n(i.y-Wt)<=o&&o<=n(i.y+i.contentHeight+Wt)&&(a=i.name)}),a}var Ut=w(U(),1),Yi=w(oe(),1),Ui=w(fd(),1),Yn=w(st(),1);function bi(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.horizontalScroll=="function"&&typeof t.zoomTo=="function"&&"coarseDynamicBlocks"in t&&"dynamicBlocks"in t}function yi(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function Ke(e,t){let n=yi(e.dynamicBlocks.contentBlocks.filter(a=>a.refName===t.refName&&a.assemblyName===t.assemblyName)),{bpPerPx:r}=e;if(!n||!(r>0))return;let o=n.offsetPx-e.offsetPx;return n.reversed?{scale:-1/r,translateX:o+n.end/r}:{scale:1/r,translateX:o-n.start/r}}function Ot(e){let t=yi(e.dynamicBlocks.contentBlocks),n=t?.displayedRegionIndex===void 0?void 0:e.displayedRegions[t.displayedRegionIndex];return t&&e.bpPerPx>0?{refName:t.refName,assemblyName:t.assemblyName,start:t.start,end:t.end,bpPerPx:e.bpPerPx,span:e.bpPerPx*e.width,regionStart:n?.start??t.start,regionEnd:n?.end??t.end}:void 0}function Vn(e,t,n=!0){let r=e.end-e.start,o=n?Math.max(0,Math.min(e.span,(t-r)/2)):0,a=Math.max(e.regionStart,Math.floor(e.start-o)),i=Math.min(e.regionEnd,Math.ceil(e.end+o)),s=i-a-t;return s>0&&(a+=Math.floor(s/2),i-=Math.ceil(s/2)),{refName:e.refName,assemblyName:e.assemblyName,start:a,end:i}}function wi(e,t,n=!0){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;if(n)return e.start<=t.start+1&&t.end<=e.end+1;let r=Vn(t,1/0,!1);return Math.abs(e.start-r.start)<1&&Math.abs(e.end-r.end)<1}var Yt=w(U(),1),xe=w(oe(),1);var ac=.9,_n=2,ic=1e3;function ki(e,t,n,r=a=>a,o=[]){let a=new Map(e.nodes.map(s=>[s.name,s])),i=[];for(let s of t){let d=[],c=1/0,m=-1/0,g=1/0,p=[],u=[];for(let R of Mt(s)){let l=a.get(R),b=l&&n[l.id];if(!(!l||!b?.length)){if(D(l)&&(l.stable.start<s.start||l.stable.start>=s.end)){u.push(b[Math.floor(b.length/2)]);continue}p.push(l.id),d.push(ut(b.length===1?[b[0],b[0]]:b));for(let L of b)c=Math.min(c,L.x),m=Math.max(m,L.x),g=Math.min(g,L.y)}}if(p.length===0)continue;let y={x:(c+m)/2,y:g},x=u.length?{x:u.reduce((R,l)=>R+l.x,0)/u.length,y:u.reduce((R,l)=>R+l.y,0)/u.length}:y,k=new Map;for(let R of s.routes??[])for(let l of new Set(R.steps))k.set(l,(k.get(l)??0)+1);let h=[];for(let R of s.routes??[]){if(s.longestAlleleLength<ic)break;if(R.steps.length===0)continue;let l=Math.min(...R.steps.map(f=>k.get(f))),b,L=-1;for(let f of R.steps)if(k.get(f)===l)for(let G of n[f]??[]){let S=Math.hypot(G.x-x.x,G.y-x.y);S>L&&(L=S,b=G)}b&&h.push({route:R,at:b,text:sc(R,r)})}i.push({bubble:s,...Rt(s,o),path:d.join(""),labelAt:y,members:p.length,nodeIds:p,whole:p.length>=ac*e.nodes.length,routes:h})}return i}function sc(e,t){let n=[...new Set(e.walks.map(t))].sort(),r=n.slice(0,_n).join(", "),o=n.length>_n?` +${n.length-_n}`:"";return`${r}${o} \xB7 ${ao(e.bp)}`}function xi(e){if(!e.nodes.some(D))return[];let t=new Map(e.nodes.map(p=>[p.id,p])),n=vr(e),r=new Map(n.map((p,u)=>[p,u])),o=new Int32Array(n.length+1),a=new Map,i=new Set;for(let p of e.edges){let u=r.get(p.from),y=r.get(p.to);if(u===void 0||y===void 0||u===y)continue;i.add(`${p.from}>${p.to}`).add(`${p.to}>${p.from}`);let[x,k]=u<y?[u,y]:[y,u];o[x+1]++,o[k]--;let[h,R]=u<y?[p.from,p.to]:[p.to,p.from];(a.get(h)??a.set(h,new Set).get(h)).add(R)}for(let p=1;p<o.length;p++)o[p]+=o[p-1];let s=e.nodes.filter(D).sort((p,u)=>p.stable.start-u.stable.start),d=new Set([s[0].id,s.at(-1).id]),c=s.map(p=>[p,r.get(p.id)]).filter(([p,u])=>d.has(p.id)||o[u]===0).sort(([p,u],[y,x])=>u-x||p.stable.start-y.stable.start),m=e.paths?.map(p=>{let u=new Map;return p.nodeIds.forEach((y,x)=>{u.has(y)||u.set(y,x)}),u}),g=[];for(let p=0;p+1<c.length;p++){let[u,y]=c[p],[x,k]=c[p+1],h=n.slice(y+1,k);if(h.length===0)continue;let R=new Map([[u.id,{min:0,max:0,n:1}]]);for(let E of[u.id,...h]){let q=R.get(E);if(q)for(let J of a.get(E)??[]){if(r.get(J)>k)continue;let T=J===x.id?0:t.get(J).length,z=R.get(J);R.set(J,{min:Math.min(z?.min??1/0,q.min+T),max:Math.max(z?.max??-1/0,q.max+T),n:Math.min(oo,q.n+(z?.n??0))})}}let l=m&&dc(e,t,m,u.id,x.id),b=l?.n?l:void 0,L=b??R.get(x.id)??{min:0,max:0,n:0},f=l!==void 0&&l.left>0,G=u.stable.start+u.length,S=x.stable.start,N=[u.id,...h.filter(E=>D(t.get(E))),x.id],v=N.some((E,q)=>q>0&&!i.has(`${N[q-1]}>${E}`)),C=v||f,O=v&&!b;g.push({refName:u.stable.refName,start:G,end:S,segmentCount:h.length+2,pathCount:L.n,inversion:!1,shortestAlleleLength:O?S-G:L.min,longestAlleleLength:O?S-G:L.max,segments:[u,...h.map(E=>t.get(E)),x].map(E=>E.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:C,routes:b?.routes})}return g}function dc(e,t,n,r,o){let a=new Map,i=1/0,s=-1/0,d=0;return e.paths.forEach((c,m)=>{let g=n[m].get(r),p=n[m].get(o);if(g===void 0||p===void 0){(g!==void 0||p!==void 0)&&d++;return}let u=c.nodeIds.slice(Math.min(g,p)+1,Math.max(g,p));p<g&&u.reverse();let y=0;for(let h of u)y+=t.get(h)?.length??0;let x=u.join(","),k=a.get(x)??{steps:u,bp:y,walks:[]};k.walks.push(c.name),a.set(x,k),i=Math.min(i,y),s=Math.max(s,y)}),a.size||d?{min:i,max:s,n:a.size,left:d,routes:[...a.values()]}:void 0}var Si=w(ld(),1);function Ri(e,t,n){if(t==="uniform"||t==="grey")return;let r={...Ur(e),referenceRamp:n};return new Map(e.nodes.map((o,a)=>[o.id,(0,Si.abgrToCssRgba)(Kr(o,a,t,r))]))}var Ze=w(U(),1),Fi=w(Li(),1),pe=w(oe(),1);var Ht=w(U(),1),Gi=w(oe(),1),cc=/^[^#]+#\d+$/;function pc(e,t){let n=e.assemblyNameToPanSN??{},r=new Set(Object.values(n)),o={};for(let{name:a,aliases:i}of t){let s=i.find(d=>cc.test(d));s!==void 0&&!r.has(s)&&(o[a]=s)}return Object.keys(o).length===0?e:{...e,assemblyNameToPanSN:{...o,...n}}}function ge(e,t){let n=(0,Ht.readConfObject)(t,"adapter");return n.type==="GbzBaseSyntenyAdapter"?pc(n,(0,Gi.getSession)(e).assemblyManager.assemblyList.map(r=>({name:(0,Ht.readConfObject)(r,"name"),aliases:(0,Ht.readConfObject)(r,"aliases")??[]}))):n}function Ti(e){let t=[];for(let n of[...e].sort((r,o)=>r.start-o.start)){let r=t.at(-1);r&&n.start<=r.end?r.end=Math.max(r.end,n.end):t.push({...n})}return t}function Ai(e){let t=[],n=new Map;for(let r of[...e].sort((o,a)=>o.start-a.start)){let o=`${r.refName} ${r.strand} ${r.name}`,a=n.get(o);if(a&&r.start<a.end)a.end=Math.max(a.end,r.end),a.exons=Ti([...a.exons,...r.exons]);else{let i={...r,exons:Ti(r.exons)};t.push(i),n.set(o,i)}}return t}var Wn=w(U(),1),qe=new Set(["Gff3TabixAdapter","Gff3Adapter","BedTabixAdapter","BedAdapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),uc=/gene|refseq|gencode|ensembl|annotation/i,mc=new Set(["BedTabixAdapter","BedAdapter"]);function jt(e,t){if(t)return e.find(r=>r.trackId===t);let n=e.filter(r=>qe.has(r.adapterType));return n.find(r=>uc.test(`${r.trackId} ${r.name??""}`))??n.find(r=>!mc.has(r.adapterType))}function Ni(e,t){let n=e.tracks?.find(r=>(0,Wn.readConfObject)(r.configuration,"trackId")===t)?.displays[0];return n?(0,Wn.readConfObject)(n.configuration,"filter")??[]:[]}var lc=new Set(["chromosome","region","contig","supercontig","scaffold"]);function ie(e,t){return typeof e.get=="function"?e.get(t):e[t]}var gc=new Set(["exon","CDS","five_prime_UTR","three_prime_UTR","UTR"]);function Pi(e,t){let n=ie(e,"type");typeof n=="string"&&gc.has(n)&&t.push({start:ie(e,"start"),end:ie(e,"end")});let r=ie(e,"subfeatures");for(let o of r??[])Pi(o,t)}function hc(e){let t=[...e].sort((r,o)=>r.start-o.start),n=[];for(let r of t){let o=n.at(-1);o&&r.start<=o.end?o.end=Math.max(o.end,r.end):n.push({...r})}return n}function Xt(e){let t=[];for(let n of e){let r=ie(n,"gene_name")??ie(n,"name")??ie(n,"gene"),o=ie(n,"start"),a=ie(n,"end");if(!r||!(a>o)||lc.has(ie(n,"type")))continue;let i=[];Pi(n,i),t.push({name:r,refName:ie(n,"refName"),start:o,end:a,strand:ie(n,"strand")??0,exons:i.length?hc(i):[{start:o,end:a}]})}return Ai(t)}var jn=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),fc=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function vi(e,t){return t?e.find(r=>r.trackId===t):e.filter(r=>jn.has(r.adapterType)).find(r=>fc.test(`${r.trackId} ${r.name??""}`))}function Je(e,t){return typeof e.get=="function"?e.get(t):e[t]}var Ci=/^\w+=[^;]*(;\w+=[^;]*)*$/;function bc(e){let t=Je(e,"name");if(!(typeof t!="string"||!Ci.test(t)))return Object.fromEntries(t.split(";").map(n=>{let r=n.indexOf("=");return[n.slice(0,r),n.slice(r+1)]}))}function ce(e,t){let n=Je(e,t);return n!==void 0?n:Je(e,"INFO")?.[t]??bc(e)?.[t]}var Ii=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],yc=["RUL","period","PERIOD","consensusSize","unit","unitLength"],wc=["TRID","REPID","VARID","ID","name","id"];function zt(e,t){for(let n of t){let r=ce(e,n),o=String((Array.isArray(r)?r[0]:r)??"").split(",")[0].trim();if(o!==""&&o!==".")return o}}var Bi=/^[ACGTURYSWKMBDHVN]+$/i;function kc(e){let t=Number(zt(e,yc));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=zt(e,Ii);return n&&Bi.test(n)?n.length:void 0}function ke(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let r=n===""||n===null||n===void 0?NaN:Number(n);return Number.isFinite(r)?r:void 0})}function Hn(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let r=String(n??"").trim();return r===""||r==="."?void 0:r})}var On="<CNV:TR>";function xc(e){let t=Hn(Je(e,"ALT"));if(!t.includes(On))return;let n=ke(ce(e,"RN")),r=Hn(ce(e,"RUS")),o=ke(ce(e,"RUL")),a=ke(ce(e,"RUC")),i=ke(ce(e,"RB")),s=0;return t.map((d,c)=>{let m=n[c]??(d===On?1:0),g=0,p=0;for(let u=0;u<m;u++,s++){let y=r[s],x=o[s]??(y&&Bi.test(y)?y.length:void 0),k=a[s],h=i[s]??(x&&k!==void 0?Math.round(x*k):void 0);h!==void 0&&(g+=h,p++)}return d===On&&m>0&&p===m?g:void 0})}function Sc(e,t,n){let r=e?.includes("|");return(e??"").split(/[/|]/).flatMap((o,a)=>{let i=Number(o),s=i>0?t[i-1]:n;return!Number.isInteger(i)||s===void 0?[]:[{bp:s,...r?{haplotype:a+1}:{}}]})}function Rc(e,t,n){let r=Je(e,"samples"),o={};for(let[a,i]of Object.entries(r??{})){let s=ke(i.SD),d=ke(i.AL).flatMap((m,g)=>m!==void 0&&m>0?[s[g]===void 0?{bp:m}:{bp:m,spanningReads:s[g]}]:[]),c=d.length>0||!t?d:Sc(Hn(i.GT)[0],t,n);c.length>0&&(o[a]=c)}return Object.keys(o).length>0?o:void 0}function Mc(e,t){let n=ce(e,"start"),r=ce(e,"end"),o=ke(ce(e,"SVLEN"))[0];return t&&o!==void 0?{start:n+1,end:n+1+o}:{start:n,end:r}}function Ei(e){let t=[];for(let n of e){let r=xc(n),{start:o,end:a}=Mc(n,r!==void 0),i=kc(n);if(!(a>o)||i===void 0)continue;let s=ce(n,"refName"),d=zt(n,Ii),c=zt(n,wc);t.push({key:`${s}:${o}-${a}`,name:(c&&!Ci.test(c)?c:void 0)??(d&&d.length<=12?`(${d})n`:`${s}:${(o+1).toLocaleString()}-${a.toLocaleString()}`),refName:s,start:o,end:a,unit:i,motif:d,calls:Rc(n,r,a-o)})}return t.sort((n,r)=>n.start-r.start)}var $i=qa.views(e=>({get defaultLayoutMode(){return"force"},get defaultColorScheme(){return"auto"},get hasPendingSource(){return!1},get canRetryLoad(){return!1},get sourceTrack(){try{return(0,pe.getContainingTrack)(e).configuration}catch{return}}})).views(e=>({get chosenLayoutMode(){return e.layoutMode??e.defaultLayoutMode},get chosenColorScheme(){return e.colorScheme??e.defaultColorScheme}})).views(e=>({get paneWidth(){return(0,pe.getContainingView)(e).width},get drawnGraph(){return e.layoutResult?.tubeMap?.coarse?.graph??e.graph}})).views(e=>({get nodeById(){if(e.drawnGraph){let t=new Map;for(let n of e.drawnGraph.nodes)t.set(n.id,n);return t}},get nodeLengths(){let t=new Map;for(let n of e.drawnGraph?.nodes??[])t.set(n.id,n.length);return t},get nodeCount(){return e.graph?.nodes.length??0},get edgeCount(){return e.graph?.edges.length??0},get pathCount(){return e.graph?.paths?.length??0},get hasGraph(){return e.graph!==void 0},get geometryPainted(){return Cn(e)},get showLoading(){return e.error===void 0&&(e.isLoading||e.hasPendingSource||e.graph!==void 0&&!Cn(e))},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?jr(e.chosenLayoutMode,e.graph):!1},get canAnchorLayout(){return e.graph?.nodes.some(t=>t.stable?.rank===0)??!1},get anchorPaths(){return e.graph?.anchorPaths??[]},get walkChoices(){let t=e.graph?.paths;return t?.length?Fe(t):[]},get effectiveDrawPaths(){return e.drawPaths&&an(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get rampDomain(){return e.colorDomain??e.graphRegion},get walkRamp(){let{graph:t}=e;return t&&e.walkLayers.some(n=>n.color?.field==="reference")?Ge(t,this.rampDomain):void 0},get modeDrawsNodes(){return _(e.chosenLayoutMode).drawsNodes},get liftedWalkLayers(){return e.walkLayers.length>0||!this.modeDrawsNodes?e.walkLayers:e.hoveredRowWalks.map(t=>({walk:t}))},get walkLift(){let{graph:t}=e,n=this.liftedWalkLayers;return t&&n.length>0&&!e.layoutResult?.tubeMap?$t(t,n,this.walkRamp):void 0},get facetPanels(){let{graph:t}=e,n=this.walkLift;return e.facet.field!==""&&this.modeDrawsNodes&&t&&n&&e.walkLayers.length>1&&n.walks.length>1?Dt(t,n,e.walkLayers,this.walkRamp):void 0},get drawnWalks(){return this.facetPanels?.map(t=>t.walks[0])??this.walkLift?.walks??[]},get liftsWalks(){return!Ne.has(e.chosenLayoutMode)},get walkReference(){let t=this.walkLift?.referenceDomain;return t&&{...t,name:e.graphRegion?.refName}},walkLabel(t){return this.walkChoices.find(n=>n.name===t)?.label??t},get liftPaintsOffReference(){for(let t of this.walkLift?.walks??[])if(t.encoding.field!=="walk"){for(let n of t.colors.values())if(n===Qr)return!0}return!1},get liftedWalksLabel(){let t=this.walkLift?.walks??[];return t.length===1?this.walkLabel(t[0].name):"these walks"},get effectiveColorScheme(){return e.layoutResult?.tubeMap&&(this.tubeMapReads||e.chosenColorScheme==="auto")?"uniform":ft(e.chosenColorScheme,e.graph)},get tubeMapReads(){return(e.layoutResult?.tubeMap?.layout.reads.length??0)>0},get colorSchemeLock(){return this.walkLift?{value:"By walk",why:"Each lifted walk colours its own lane: set it under the menu, Walk, Colour"}:this.tubeMapReads?{value:"By strand",why:"Reads take the reds and blues, so the tube map leaves its nodes clear"}:void 0},get nodePositions(){return e.layoutResult?.nodePositions},get labelsNodeSizes(){return!e.layoutResult?.tubeMap&&!this.walkLift},get rowLabels(){return e.layoutResult?.rowLabels??[]},get alleleDeletions(){return e.layoutResult?.alleleDeletions??[]},get deletionRoutes(){return e.layoutResult?.deletionRoutes},get stranded(){return e.layoutResult?.stranded},get pixelRows(){return e.layoutResult?.pixelRows??!1},get zoomPercent(){return`${(e.scale*100).toFixed(1)}%`},get isDefaultViewport(){return e.scale===1&&e.translateX===0&&e.translateY===0}})).views(e=>({get poppedFrom(){return e.popStack.at(-1)},get derivedBubbles(){return e.graph?xi(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get cutHaplotypes(){},get sourceGfaLocation(){},get sourceAdapter(){let t=e.sourceTrack;return t?ge(e,t):void 0},get sourceTrackId(){let t=e.sourceTrack;return t?(0,Ze.readConfObject)(t,"trackId"):void 0},get assemblyTrackChoices(){let t=e.graphRegion;return t?(0,pe.getSession)(e).tracks.filter(n=>(0,Ze.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,Ze.readConfObject)(n,"name"),adapterType:(0,Ze.readConfObject)(n,"adapter").type})):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>qe.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>jn.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return vi(e.repeatTrackChoices,e.repeatTrackId)},get geneTrack(){return jt(e.geneTrackChoices,e.geneTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)},get backbone(){return e.graph?Sr(e.graph):void 0},get cutWalkRows(){return e.graph?sn(e.graph,e.graphRegion):void 0},assemblySpellings(t){let{assemblyManager:n}=(0,pe.getSession)(e),r=n.has(t)?n.get(t):void 0,o=e.sourceAdapter?.assemblyNameToPanSN??{},a=[t,...r?[r.name,...r.aliases]:[]];return{name:t,aliases:[...a,...a.flatMap(i=>o[i]??[])]}},get drawsLoadedReference(){let t=e.graph;return t?.anchoredBy==="tags"||t?.referencePath!==void 0&&t.referencePath===e.loadedReferencePath}})).views(e=>({get geneAssembly(){let t=e.graphRegion;return t?e.assemblySpellings(t.assemblyName):void 0},get geneLaneFilter(){let t;try{t=(0,pe.getContainingView)(e)}catch{return}let n=Ni(t,e.geneTrack?.trackId);return n.length?new Fi.default({filters:n,jexl:(0,pe.getEnv)(e).pluginManager.jexl}):void 0},get geneFeatures(){let t=e.geneTrackFeatures,n=this.geneLaneFilter;return t?Xt(n?t.filter(r=>n.passes(r)):t):void 0}})).views(e=>({get backboneGenes(){let{backbone:t,geneAssembly:n,geneFeatures:r}=e,o=e.drawsLoadedReference||n!==void 0&&Mr(t,[n])!==void 0;return t&&r&&o?Gr(r,t):void 0}})).views(e=>({get nodeNeighbors(){return e.drawnGraph?dt(e.drawnGraph):void 0},get nodeInk(){return bt(e.drawnGraph,e.nodeById,e.contigThickness,e.nodeWidth)},get deletions(){return e.graph&&this.drawsNodes?Le(e.graph):[]},get walkRowBars(){if(e.chosenLayoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?sn(e.graph,t,t.unit):e.cutWalkRows;if(!n)return;let r=mt(n.rows,e.walkRowSamples),[o,...a]=Vo([n.reference,...r],t?.calls);return{...n,reference:o,rows:a}},get drawsNodes(){return!e.layoutResult?.tubeMap&&!this.walkRowBars},get drawnRowLabels(){let t=this.walkRowBars;return t?[t.reference,...t.rows].map((n,r)=>({label:n.label,y:r*20})):e.rowLabels},get fitPadLeft(){return Math.max($,...this.drawnRowLabels.map(t=>Vr(t.label,0).x1+6))},get genePins(){ue(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&this.drawsNodes&&e.graph&&e.backboneGenes&&t?Ft(e.graph,e.backboneGenes,t):[]},get bubbleHalos(){ue(e.positionsVersion);let t=e.layoutResult?.nodePositions;if(!e.showBubbles||!this.drawsNodes||!e.graph||!t)return[];let n=new Map(e.walkChoices.map(r=>[r.name,r.label]));return ki(e.graph,e.bubbles,t,r=>n.get(r)??r,e.repeatArrays)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.drawnGraph?Ge(e.drawnGraph,e.rampDomain):void 0},get assemblyNames(){let t=e.graphRegion;return t?[t.assemblyName]:[]},get scaleX(){return Ae(e.scale,e.pixelRows).scaleX},get scaleY(){return Ae(e.scale,e.pixelRows).scaleY},get axisScale(){return Ae(e.scale,e.pixelRows)},get layoutBounds(){let t=e.layoutResult,n=this.walkRowBars;return t?vt(t,{region:e.popStack.length===0?e.graphRegion:void 0,extent:n&&t.extent?lt(n):void 0}):void 0}})).views(e=>({get deletionEdgeIndexes(){return new Map(e.deletions.map(t=>[t.edgeIndex,t.bypassed]))},get hiddenEdgeIndexes(){return new Set(e.showDeletionEdges?[]:e.deletions.map(t=>t.edgeIndex))},get referenceRampDomain(){let t=e.referenceRamp;return t?{start:t.start,end:t.start+t.span}:void 0},get referenceRampOffKeys(){let t=e.referenceRamp,n=e.layoutResult,r=n?.tubeMap?n.nodePositions:void 0,o=!1,a=!1;if(t&&e.drawnGraph)for(let i of e.drawnGraph.nodes)r&&!r[i.id]||(t.midpoints.has(i.id)?i.stable&&i.stable.rank>0&&(o=!0):a=!0);return{offReference:o,unplaced:a}},get tubeMapNodeColors(){let t=e.drawnGraph;return e.layoutResult?.tubeMap&&t?Ri(t,e.effectiveColorScheme,e.referenceRamp):void 0},get tubeMapTubeColors(){let t=e.layoutResult?.tubeMap?.pathColors,n=t&&this.tubeMapNodeColors?t.map((a,i)=>_r(i,t.length)):t,r=new Set(e.hoveredRowWalks),o=e.drawnGraph?.paths;return n&&o&&r.size>0?n.map((a,i)=>r.has(o[i]?.name??"")?a:Yr):n},nodeSpan(t){let{nodeById:n,nodeNeighbors:r}=e;return n&&r?Me({nodeId:t,nodeById:n,neighbors:r}):void 0}})).views(e=>({get pathLegend(){let t=e.graph?.paths,n=e.layoutResult?.tubeMap;return(e.drawPaths||n)&&t&&an(t.length)?Fe(t,e.tubeMapTubeColors):[]},get hoveredSpan(){let t=e.hoveredNode,n=e.hoveredBubble;return t!==null?e.nodeSpan(t):n?{start:n.start,end:n.end}:void 0}})).views(e=>({get hoverHighlight(){let t=e.graphRegion,n=e.hoveredSpan;return t&&n?{refName:t.refName,assemblyName:t.assemblyName,...n}:void 0}}));var Xn=w(U(),1);function Q(e){return typeof e=="object"&&e!==null}function Lc(e){return Q(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function Qe(e){return e.flatMap(t=>Q(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function et({views:e,connectedViewId:t,assemblyName:n}){let r=Qe(e).filter(a=>Lc(a)).filter(a=>a.assemblyNames.includes(n));return r.find(a=>a.id===t)??(r.length===1?r[0]:void 0)}function tt(e,t){let n=e.assemblyManager;return n?.has(t)?n.get(t)?.name??t:t}function Vi(e,t,n){n.catch(r=>{console.error(`[GraphGenomeView] ${t}`,r),e.notifyError?.(`${t}: ${r}`,r)})}var Gc=1e3;function zn(e,t=Gc){let n=Math.max(0,Math.ceil((t-(e.end-e.start))/2));return{...e,start:Math.max(0,e.start-n),end:e.end+n}}function _i(e,t){return t?e.map(n=>n.rank===0?{...n,sample:t.assemblyName,haplotype:void 0,refName:t.refName,start:t.start,end:t.end}:n):e}function Wi({session:e,location:t,assembly:n,connectedViewId:r,tracks:o=[]}){let a=et({views:e.views,connectedViewId:r,assemblyName:n}),i;return a?(Vi(e,`Could not show ${n} ${Ve(t)}`,Promise.resolve(a.navToLocString(Tt(t),n))),i=a.id):i=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${Ve(t)}`,init:{assembly:n,loc:Tt(t),tracks:o}}).id,i}function Oi({session:e,location:t,assembly:n,connectedViewId:r}){let o=et({views:e.views,connectedViewId:r,assemblyName:n});return o&&e.addHighlight?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),o!==void 0}function Di(e,t){if(t===void 0)return[];let n=e.tracks.find(o=>(0,Xn.readConfObject)(o,"trackId")===t),r=n?(0,Xn.readConfObject)(n,"assemblyNames"):[];return Array.isArray(r)?r.filter(o=>typeof o=="string").map(o=>tt(e,o)):[]}function Hi({session:e,contributors:t,trackId:n,graphTrackId:r}){let o=Di(e,r),a=Di(e,n),i=t.filter(c=>a.includes(c.sample)),s=i.length>=2?i:t,d={init:{views:s.map(c=>({assembly:c.sample,loc:Tt(c),...r!==void 0&&o.includes(c.sample)?{tracks:[r]}:{}})),tracks:n?s.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?Vi(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",d)):e.addView("LinearSyntenyView",d)}var ji=$i.views(e=>({get contributingAssemblies(){let t=e.graph,n=t?yr(t):[];return t?_o(t,{maxGap:n.length>0?xr(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,xe.getSession)(e),n=e.sourceAdapter?.assemblyNameToPanSN,r=new Map(Object.entries(n??{}).map(([a,i])=>[i,a])),o=a=>a!==void 0&&t.has(a)?t.get(a)?.name??a:void 0;return a=>o(r.get(a))??o(a)},get geneTracksByAssembly(){let t=new Map;for(let n of(0,xe.getSession)(e).tracks){let r=(0,Yt.readConfObject)(n,"adapter").type;if(!qe.has(r))continue;let o={trackId:n.trackId,name:(0,Yt.readConfObject)(n,"name"),adapterType:r};for(let a of(0,Yt.readConfObject)(n,"assemblyNames")){let i=tt((0,xe.getSession)(e),a);t.set(i,[...t.get(i)??[],o])}}return new Map([...t].flatMap(([n,r])=>{let o=jt(r,"");return o?[[n,o]]:[]}))}})).views(e=>({get launchableAssemblies(){return Wo(_i(e.contributingAssemblies,e.graphRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.graphRegion;return t!==void 0&&et({views:[...(0,xe.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),r=n?$e(n):void 0,o=r?De(e.assemblyResolver,r):void 0,a=e.graphRegion,i=e.nodeById,s=e.nodeNeighbors,d=a&&i&&s?Me({nodeId:t,nodeById:i,neighbors:s}):void 0,c=a&&d?{sample:a.assemblyName,haplotype:void 0,refName:a.refName,...d}:void 0;return{own:r&&o?{location:zn(r),assembly:o}:void 0,reference:a&&c?{location:zn(c),assembly:a.assemblyName}:void 0,highlight:a&&c?{location:c,assembly:a.assemblyName}:void 0}}})).views(e=>({get host(){let t;try{t=(0,xe.getContainingView)(e)}catch{return}return bi(t)?t:void 0}}));var Xi=ji.views(e=>({get walkStripShown(){return e.walkStrip&&!e.host&&e.modeDrawsNodes&&!e.layoutResult?.tubeMap&&!e.walkRowBars&&e.popStack.length===0&&(e.graph?.paths?.length??0)>1},get walkStripRows(){let t=this.walkStripShown?e.cutWalkRows:void 0;return t?{...t,rows:mt(t.rows,e.walkRowSamples)}:void 0},get walkStripFrame(){let t=this.walkStripRows;if(t)return Lt(t,{width:e.paneWidth})},get cutsWholeWalks(){return _(e.chosenLayoutMode).wholeWalks||e.walkStrip&&!e.host},get walkStripMarks(){let t=this.walkStripRows,n=e.hoveredNode??e.selectedNode,r=n===null?void 0:e.nodeById?.get(n);return t&&r&&e.graph?po(e.graph,[t.reference,...t.rows],r):[]},get walkStripLocator(){let t=e.stripHover?e.hoveredNode:null;return t===null?void 0:Gt(e.nodePositions?.[t],n=>({x:n.x*e.scaleX+e.translateX,y:n.y*e.scaleY+e.translateY}))}})).views(e=>({get walkGeneReads(){let t=e.walkRowBars??e.walkStripRows;if(!t||!e.showGenes)return;let n=[],r=0,o=0;for(let a of t.rows){if(!a.axis){o++;continue}let i=De(e.assemblyResolver,{sample:a.sample,haplotype:a.haplotype===void 0?void 0:`${a.sample}#${a.haplotype}`}),s=i?e.geneTracksByAssembly.get(i):void 0;if(!i||!s){r++;continue}n.push({row:a.name,trackId:s.trackId,region:{assemblyName:i,refName:a.axis.contig,...un(a.axis,a.bp)}})}return{reads:n.slice(0,Pn),gaps:{untracked:r,unplaced:o,unread:Math.max(0,n.length-Pn)}}},get walkRowGeneGaps(){return this.walkGeneReads?.gaps},walkRowAt(t,n){let r=e.walkRowBars;if(!r)return;let o=Math.round((n-e.translateY)/(20*e.scaleY)),a=[r.reference,...r.rows][o],i=o*20*e.scaleY+e.translateY,s=(t-e.translateX)/e.scaleX-r.origin;return a&&Math.abs(n-i)<=so/2+2&&s>=0&&s<=a.bp?o:void 0},walkRowLaunchTarget(t,n=e.walkRowBars){let r=n?[n.reference,...n.rows][t]:void 0;if(!r?.axis)return;let o=r.haplotype===void 0?void 0:`${r.sample}#${r.haplotype}`,a=t===0?e.graphRegion?.assemblyName:De(e.assemblyResolver,{sample:r.sample,haplotype:o});return{label:r.label,assembly:a,location:{sample:r.sample,haplotype:o,refName:r.axis.contig,...un(r.axis,r.bp)}}},get walkRowGenes(){let t=e.walkRowBars??e.walkStripRows;if(!t||!e.showGenes)return;let n=new Map(e.walkGeneFeatures??[]);return e.geneFeatures&&n.set(t.reference.name,e.geneFeatures),n.size?co([t.reference,...t.rows],n):void 0}}));var zi=Xi.views(e=>({get xIsReferenceBp(){return e.layoutResult?.referenceAxis===!0&&_(e.chosenLayoutMode).cutMargins}})).views(e=>({get hostPlacesX(){let{host:t,graphRegion:n}=e;return t!==void 0&&t.initialized&&n!==void 0&&e.xIsReferenceBp&&e.popStack.length===0&&!t.dynamicBlocks.contentBlocks.some(r=>r.refName===n.refName&&r.reversed)}})).views(e=>({get hostFrame(){let{host:t,graphRegion:n}=e;return e.hostPlacesX&&t&&n?Ke(t,n):void 0},get tubeMapPicture(){let t=e.layoutResult?.tubeMap;return t?Ao(t.layout):void 0},get tubeMapReference(){let t=e.layoutResult?.tubeMap;return t&&e.drawnGraph?Ro(e.drawnGraph,t.layout):void 0},get tubeMapDeviations(){let t=e.layoutResult?.tubeMap?.coarse,n=e.layoutResult?.tubeMap?.layout;return t&&n?Do(t.graph,n,t.deviations):[]},get tubeMapReferenceNodes(){let t=e.layoutResult;return t?.tubeMap&&!t.referenceAxis&&e.drawnGraph?Lo(e.drawnGraph,t.tubeMap.layout):void 0}})).views(e=>({get tubeMapGenes(){let t=e.tubeMapReference;return e.showGenes&&!e.host&&t&&e.backboneGenes?vo(t,e.backboneGenes):[]},get referenceStripApplies(){return!!e.host?.initialized&&!!e.layoutResult&&e.drawsNodes&&!e.hostPlacesX&&!e.facetPanels}})).views(e=>({get referenceStripBlocks(){let{graph:t}=e;return e.showReferenceStrip&&e.referenceStripApplies&&t?Eo(t,{colorScheme:e.effectiveColorScheme,referenceRamp:e.referenceRamp,walks:e.walkLift?.walks}):[]},get referenceStripFrame(){let{host:t,graphRegion:n}=e;return t?.initialized&&n?Ke(t,n):void 0}})).views(e=>({get referenceStripShown(){return e.referenceStripBlocks.length>0&&e.referenceStripFrame!==void 0},get referenceStripOverhangs(){let t=e.referenceStripFrame;if(!t||e.referenceStripBlocks.length===0)return!1;let{left:n,right:r}=Fo(e.referenceStripBlocks,t,e.paneWidth);return n>0||r>0},get referenceStripFaded(){return e.referenceStripBlocks.some(t=>t.faded)}})).views(e=>({get referenceStripLit(){if(!e.referenceStripShown)return;let t=a=>({x:a.x*e.scaleX+e.translateX,y:a.y*e.scaleY+e.translateY}),n=e.hoveredNode===null?e.hoveredBubble:null;if(n){let a=e.bubbleHalos.find(i=>ro(i.bubble,n));return{start:n.start,end:n.end,anchor:a?t(a.labelAt):void 0}}let r=e.hoveredNode??e.selectedNode,o=r===null?void 0:e.nodeSpan(r);return o&&r!==null?{...o,anchor:Gt(e.nodePositions?.[r],t)}:void 0},referenceStripNodeAt(t,n){let r=e.referenceStripFrame;return e.referenceStripShown&&r?$o(e.referenceStripBlocks,r,t,n):void 0},get paperCss(){return $a(e.darkMode?Et:Bt)},get referenceStripZonePx(){return e.referenceStripShown?Bo:0}}));var Ki=zi.views(e=>({get paneCeiling(){return Math.max(It,e.paneHeight??Fa)},get fitPadTopBase(){let t=Io(e.tubeMapGenes);return $+Math.max(0,t-1)*Co+e.referenceStripZonePx},get legendRoom(){let t=e.layoutBounds,{width:n,height:r}=e.legendSize;if(!t||t.w<=0||n===0||e.facetPanels||e.tubeMapReads)return;if(e.hostPlacesX)return"top";let o=this.fitPadTopBase,a=e.host?this.canvasHeight:this.paneCeiling,i=m=>(e.paneWidth-e.fitPadLeft-m)/t.w,s=m=>e.pixelRows?t.h+m+$<=a?1/0:0:(a-m-$)/t.h,d=Math.min(i(n+2*Te),s(o));return Math.min(i($),s(o+r+Te))>=d?"top":"right"},get fitPadTop(){return this.fitPadTopBase+(this.legendRoom==="top"?e.legendSize.height+Te:0)},get fitPadRight(){return this.legendRoom==="right"?Math.max($,e.legendSize.width+2*Te):$},get minFitScale(){let t=e.layoutBounds,n=e.layoutResult,r=n?.tubeMap?.layout.tracks[0]?.width;return t&&t.h>0&&r&&!n.referenceAxis?Math.min(Da/r,(this.paneCeiling-this.fitPadTop-$)/t.h):0},get facetSpec(){let{field:t,domain:n,columns:r}=e.facet;return t===""?void 0:n.length===0&&r===void 0?t:{field:t,domain:[...n],...r===void 0?{}:{columns:r}}},get facetPlacement(){let t=e.facetPanels,{field:n,domain:r}=e.facet;return t?St(t.map(o=>o.walks[0].name),e.hostPlacesX||n===""?"walk":n,r):void 0},facetGridIn(t){let n=this.facetPlacement,r=e.layoutBounds;return n&&r&&r.w>0?kt({count:n.count,bounds:r,pixelRows:e.pixelRows,width:e.paneWidth,room:t,columns:e.hostPlacesX?1:n.columns??e.facet.columns}):void 0},get facetGrid(){return this.facetGridIn(e.host?this.canvasHeight:this.paneCeiling)},get canvasHeight(){let t=e.layoutBounds,n=e.paneWidth-$-this.fitPadRight,r=this.paneCeiling;if(!t)return r;let o=this.facetGrid;if(o)return Math.max(It,o.total);let a=Math.max(It,e.legendSize.height+2*Te+e.referenceStripZonePx);return e.pixelRows?Math.min(r,Math.max(a,t.h+this.fitPadTop+$)):t.w>0&&n>0?Math.min(r,Math.max(a,t.h*Math.max(n/t.w,this.minFitScale)+this.fitPadTop+$)):r},get viewBox(){let t=this.facetGrid;return t?{width:t.width,height:t.height}:{width:e.paneWidth,height:this.canvasHeight}},get fittedTransform(){let t=e.layoutBounds,n=this.facetGrid;return t?n?ze(t,n.width,n.height,e.pixelRows,{padLeft:12,padTop:12,padRight:12,padBottom:12}):ze(t,e.paneWidth,this.canvasHeight,e.pixelRows,{minScale:this.minFitScale,padLeft:e.fitPadLeft,padTop:this.fitPadTop,padRight:this.fitPadRight}):void 0}})).views(e=>({viewportToBuild(){return Ta(Ue(e),Xa)},applyHighlights(t){let{hoveredNode:n,hoveredEdge:r,selectedNode:o}=e,a=new Map;o!==null&&a.set(o,Ha),n!==null&&n!==o&&a.set(n,Nn),t.setNodeHighlights(a),t.setEdgeHighlight(r,Nn)},paint(t){let n=(0,Ui.getDpr)();t.updateTransform({scaleX:e.scaleX*n,scaleY:e.scaleY*n,translateX:e.translateX*n,translateY:e.translateY*n,dpr:n}),t.render(e.referenceStripShown?[0,0,0,0]:e.darkMode?Et:Bt)}})).views(e=>({buildDrawing(t,n){let{nodePositions:r,graph:o,nodeById:a}=e;if(!r||!o||!a)return;ue(e.viewportDirty,e.positionsVersion);let i=(0,Yn.untracked)(()=>e.viewportToBuild());return{batch:yt({nodePositions:e.walkRowBars?{}:r,graph:o,nodeById:a,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:n,nodeWidth:e.nodeWidth,highlight:t,axis:(0,Yn.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:i,referenceRamp:e.referenceRamp,deletions:e.deletionEdgeIndexes,deletionRoutes:e.deletionRoutes,stranded:e.stranded,hiddenEdges:e.hiddenEdgeIndexes,version:e.positionsVersion}),viewportBounds:i}},get overlayLabels(){return yo(e)},hoveredOn(t){let n=e.hoveredNode,r=n?e.nodeById?.get(n):void 0;return r?So(t,r.id,r.length)??"not on this walk":void 0},figureSpec(){let t=e.graphRegion,n=e.sourceAdapter,r=n?.assemblyNameToPanSN,o=t&&`${t.refName}:${t.start}-${t.end}`,a=Pe(e.sourceGfaLocation),i=n?.type==="GbzBaseSyntenyAdapter"?Pe(n.gbzDbLocation):void 0,s=a?{gfa:a,region:o}:i&&t&&o?{gbz:{db:i,index:Pe(n.haplotypeIndexLocation),region:o,haplotypes:e.cutHaplotypes?.map(p=>r?.[p]??p),referenceSample:n.referenceSample||r?.[t.assemblyName]||t.assemblyName,context:n.context,snarls:e.cutsWholeWalks?"overlapping":n.subgraphSnarls}}:void 0;if(!s)return;let d=e.showGenes?e.geneTrack:void 0,c=d?(0,Yi.getSession)(e).tracks.find(p=>p.trackId===d.trackId):void 0,m=c?(0,Ut.expandTabixShorthand)((0,Ut.readConfObject)(c,"adapter"),"gffGzLocation"):void 0,g=m?.type==="Gff3TabixAdapter"?{file:Pe(m.gffGzLocation),index:Pe(m.index?.location),format:"gff3"}:void 0;return JSON.parse(JSON.stringify({...s,genes:g?.file&&g.index?g:void 0,referencePath:e.referencePath||void 0,layout:e.chosenLayoutMode,quality:e.layoutQuality,bubbleSpread:e.bubbleSpread,walks:e.walkLayers.length?e.walkLayers.map(p=>p.color?p:p.walk):void 0,facet:e.walkLayers.length>1?e.facetSpec:void 0,walkStrip:e.walkStripShown||void 0,walkRowSamples:e.walkStripShown?e.walkRowSamples:void 0,width:e.paneWidth,height:e.paneCeiling,colorScheme:e.chosenColorScheme,nodeWidth:e.nodeWidth,showDeletionEdges:e.showDeletionEdges||void 0}))},get figureUnavailable(){return e.layoutResult?e.drawsNodes||e.walkRowBars?void 0:`${_(e.chosenLayoutMode).label} draws a picture of its own, which the SVG export does not`:"Nothing is drawn yet"},get figureSpecUnavailable(){return e.drawsNodes?this.figureSpec()?void 0:"bandage-figure reads a graph cut from a gbz-base track or a GFA url":`bandage-figure draws no ${_(e.chosenLayoutMode).label} layout`},figure(){let{graph:t,layoutResult:n}=e;return t&&n&&!this.figureUnavailable?mi(t,n,{width:e.paneWidth,height:e.paneCeiling,walks:e.walkLayers,facet:e.facetSpec,colorScheme:e.effectiveColorScheme,nodeWidth:e.nodeWidth,showDeletionEdges:e.showDeletionEdges,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,region:e.graphRegion,colorDomain:e.colorDomain,fitToDrawing:e.popStack.length>0,genes:e.showGenes?e.backboneGenes:void 0,walkRows:e.walkRowBars,rowGenes:e.walkRowGenes,rowGeneGaps:e.walkRowGeneGaps,walkStrip:e.walkStripRows&&{rows:e.walkStripRows,rowGenes:e.walkRowGenes,rowGeneGaps:e.walkRowGeneGaps},spec:this.figureSpec()}):void 0},get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?hi(t,{scaleX:e.scaleX,translateX:e.translateX,scaleY:e.scaleY,translateY:e.translateY,usableHeight:e.canvasHeight-e.fitPadTop-$}):void 0}})).views(e=>({get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX?Mo(t):void 0},get connectorZoneBottom(){let t=e.tubeMapPicture,n=e.tubeMapFrame;return t&&n?n.y(t.bounds.minY)-2:0},get tubeMapConnectors(){let t=e.tubeMapReferenceNodes,n=e.tubeMapFrame,{host:r,graphRegion:o}=e,a=t&&n&&r?.initialized&&o?Ke(r,o):void 0;return t&&n&&a?Go(t,i=>i*a.scale+a.translateX,n.x,e.paneWidth):[]}})).views(e=>({get tubeMapKeys(){let t=e.layoutResult,n=t?.tubeMap?.layout.reads??[],r=e.tubeMapPicture,o=e.tubeMapFrame,a=r&&o&&No(o.yScale)?r.mismatches.filter(i=>Po(i,{x:o.x,width:e.paneWidth})):[];return{logWidths:t?.tubeMap!==void 0&&!t.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:n.some(i=>!i.is_reverse),reverseReads:n.some(i=>i.is_reverse),mismatches:new Set(a.map(i=>i.kind))}},tubeMapNodeAt(t,n){let r=e.layoutResult?.tubeMap,o=e.tubeMapFrame;return(r&&o?fi(r,o,t,n):null)??To(e.tubeMapConnectors,e.connectorZoneBottom,t,n)??null}}));var qi=Ki.actions(e=>({setError(t){e.error=t,e.isLoading=!1,e.statusMessage=""},finishLoading(){e.isLoading=!1,e.statusMessage=""},setStatusMessage(t){e.statusMessage=t},setFetchMs(t){e.lastFetchMs=t},setLayoutMs(t){e.lastLayoutMs=t},setGeometryMetrics(t,n,r){e.lastGeometryMs=t,e.lastGeometryStrokeCount=n,e.builtViewport={...r,viewportDirty:e.viewportDirty},e.geometryVersion++},markPainted(){e.paintedViewport=e.builtViewport},setLayoutQuality(t){e.layoutQuality=t},setLinearLayout(t){e.linearLayout=t},setLayoutMode(t){e.layoutMode=t},setReferencePath(t){e.referencePath=t;let n=e.graph;if(n?.anchoredBy==="paths"){let r=ct(n,t);Ua(n,r),e.graph=r}},setDrawPaths(t){e.drawPaths=t},setShowPerf(t){e.showPerf=t},setColorScheme(t){e.colorScheme=t},setBubbleSpread(t){e.bubbleSpread=t},setNodeWidth(t){e.nodeWidth=t},setShowBubbles(t){e.showBubbles=t},setShowDeletionEdges(t){e.showDeletionEdges=t},setShowGenes(t){e.showGenes=t},setShowReferenceStrip(t){e.showReferenceStrip=t},setTubeMapFold(t){e.tubeMapFold=t},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setWalkLayers(t){e.walkLayers=t},liftWalks(t){let n=new Map(e.walkLayers.map(r=>[r.walk,r]));e.walkLayers=t.map(r=>n.get(r)??{walk:r})},setFacet(t){t!==e.facet.field&&(e.facet.domain=[]),e.facet.field=t},setFacetColumns(t){e.facet.columns=t},toggleWalk(t){let n=e.walkLayers;e.walkLayers=n.some(r=>r.walk===t)?n.filter(r=>r.walk!==t):[...n,{walk:t}]},setWalkColor(t,n){e.walkLayers=e.walkLayers.map(r=>r.walk===t?{...r,color:{...r.color,...n}}:r)},setPaneHeight(t){e.paneHeight=t},setWalkRowSamples(t){e.walkRowSamples=t},pairWithLinearView(t){let n=e.connectedViewId;n!==void 0&&Qe([...(0,nt.getSession)(e).views]).some(o=>o.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=t},setHoveredRowWalks(t){t.join(`
|
|
4
4
|
`)!==e.hoveredRowWalks.join(`
|
|
5
5
|
`)&&(e.hoveredRowWalks=t)},setHoveredBubble(t){e.hoveredBubble=t},setPointerInPane(t){e.pointerInPane=t},setWalkStrip(t){e.walkStrip=t,e.stripHover=null},setStripHover(t){e.stripHover=t;let n=e.walkStripRows,r=e.walkStripFrame,o=t&&n?[n.reference,...n.rows].find(i=>i.name===t.row):void 0,a=o&&r&&e.graph?uo(e.graph,o,t.offset,r.scaleX):void 0;e.hoveredNode=a??null},setLegendSize(t){e.legendSize=t},setHoveredEdge(t){e.hoveredEdge=t},setSelectedNode(t){e.selectedNode=t},setDraggingNode(t){e.draggingNode=t},setPanning(t){e.isPanning=t},stopDragging(){e.draggingNode=null,e.isPanning=!1},clearInteractionState(){e.hoveredNode=null,e.hoveredBubble=null,e.hoveredEdge=null,e.selectedNode=null,e.draggingNode=null,e.isPanning=!1},showNodeDetails(t){let n=e.nodeById?.get(t),r=e.nodeById,o=e.nodeNeighbors;if(n&&r&&o){let a=(0,nt.getSession)(e),i=e.graphRegion,s=i?Me({nodeId:t,nodeById:r,neighbors:o}):void 0;(0,nt.isSessionModelWithWidgets)(a)&&a.showWidget(a.addWidget("BaseFeatureWidget","baseFeature",{featureData:{id:n.id,name:n.name,length:n.length,depth:n.depth,rank:n.stable?.rank,stableName:n.stable?.refName,contributingAssembly:$e(n)?.sample,contributingHaplotype:$e(n)?.haplotype,sampleCount:n.samples?.length,samples:n.samples,...i&&s?{refName:i.refName,assemblyName:i.assemblyName,start:s.start,end:s.end}:{}}}))}},setTransform(t,n,r){let{host:o}=e;e.viewportOwner==="host"&&o?o.horizontalScroll(e.translateX-n):(e.viewportOwner="user",e.scale=Xe(t),e.translateX=n),e.translateY=r},zoom(t,n,r){let{host:o}=e;if(e.viewportOwner==="host"&&o){o.zoomTo(o.bpPerPx/t,n);return}e.viewportOwner="user";let a=Na(e,t,n,r,e.pixelRows);e.scale=a.scale,e.translateX=a.translateX,e.translateY=a.translateY},setViewportDirty(){e.viewportRebuildPending=!1,e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){if(e.viewportOwner==="host"){let n=e.layoutBounds,r=e.facetGrid!==void 0,o=r?12:$,a=r?12:e.fitPadTop,i=e.viewBox.height-a-o;n&&i>0&&(e.translateY=Ln(n,i,e.scaleY,a));return}let t=e.fittedTransform;t&&(e.scale=t.scale,e.translateX=t.translateX,e.translateY=t.translateY)},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>({hostTransform(t,n){let r=e.viewportOwner!=="host";r&&(e.viewportOwner="host"),e.scale=t,e.translateX=n,r&&e.zoomToFit()},refitView(){e.viewportOwner==="user"&&(e.viewportOwner="fit"),e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.xIsReferenceBp?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportRebuildPending=!0,e.viewportDirtyTimer=setTimeout(()=>{(0,Un.isAlive)(e)&&e.setViewportDirty()},ja)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,Un.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(r,o,a){let i=e.layoutResult?.nodePositions;if(i?.[r]){for(let s of i[r])s.x+=o,s.y+=a;n()}},scheduleViewportDirty:t}});var Qi=qi.actions(e=>{let t;function n(l){let{rpcManager:b}=(0,ee.getSession)(e);return b.call((0,ee.getRpcSessionId)(e),"GraphComputeLayout",{...l,signal:t?.signal,statusCallback:L=>{e.setStatusMessage((0,ee.statusMessageText)(L)??"")}})}function r(l){return Ra(l,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread})}function*o(l){let b=performance.now(),L=Ne.has(e.chosenLayoutMode),f=e.graphRegion,G=L&&f?Za(l,f):l,S=L&&e.tubeMapFold>0&&!G.reads?ei(G,e.tubeMapFold):void 0,N=_(e.chosenLayoutMode).run(S?.graph??G,e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(N)return{result:S&&N.tubeMap?{...N,tubeMap:{...N.tubeMap,coarse:S}}:N,duration:performance.now()-b};let v=Ya(l),C=r(l),O=v.get(C);if(O)return{result:O,duration:performance.now()-b};let E=yield Ma(l,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread},n);return Ka(v,C,E.result),E}let a=0,i=new Map;function*s(l){let b=++a,L=()=>e.graph===l&&b===a,f=t?.signal,G;try{G=yield*o(l)}catch(N){if(!L()||f?.aborted)return!1;throw N}let S=L();return S&&(e.layoutResult=G.result,e.setLayoutMs(G.duration)),S}function d(l,b){let L=l.anchorPaths;return l.anchoredBy==="paths"&&L?(Lr(l,e.assemblySpellings(b.assemblyName))??Ir(L,b.assemblyName))?.name:void 0}function*c(l,b,L,f=!1,G){let S=t?.signal;e.setStatusMessage("Parsing GFA");let N=Sa(l,b,{referencePath:e.referencePath||L?.assemblyName,maxNodes:e.maxGraphNodes}),v=L?d(N,L):void 0,C=!e.referencePath&&v!==void 0&&v!==N.referencePath?ct(N,v):N;if(G){e.setStatusMessage("Reading alignments");try{let{records:E,total:q}=yield G(C);C.reads=E,e.readsShown={shown:E.length,total:q}}catch(E){if(S?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",E),e.readsShown=void 0}if(S?.aborted)return}else e.readsShown=void 0;let O=f?e.selectedNode:null;e.graph=C,e.graphRegion=L,e.loadedReferencePath=v,e.indexBubbles=void 0,e.geneTrackFeatures=void 0,e.walkGeneFeatures=void 0,i.clear(),e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),O!==null&&e.nodeById?.has(O)&&(e.selectedNode=O),e.setStatusMessage("Computing layout"),yield*s(C)}let m=0;function g(){let l=++m;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>l===m,signal:t.signal}}function*p(l,b,L){let f=Oa(l);if(!(l.type!=="RgfaTabixAdapter"||f===void 0))try{let G=yield(0,ee.getSession)(e).rpcManager.call((0,ee.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${f}.bubbles.bed.gz`,baseUri:l.baseUri,assemblyNameToPanSN:l.assemblyNameToPanSN},regions:[b]});L()&&(e.indexBubbles=G.map(S=>({refName:b.refName,start:S.get("start"),end:S.get("end"),segmentCount:S.get("segmentCount"),pathCount:S.get("pathCount")??0,inversion:S.get("inversion"),shortestAlleleLength:S.get("shortestAlleleLength"),longestAlleleLength:S.get("longestAlleleLength"),segments:S.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(G){console.warn("[GraphGenomeView] no bubble index for this graph",G)}}function*u(l,b,L){let f=(0,ee.getSession)(e),G=l?f.tracks.find(S=>S.trackId===l):void 0;if(G)try{return yield f.rpcManager.call((0,ee.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:(0,Ji.readConfObject)(G,"adapter"),regions:[b]})}catch(S){console.warn(`[GraphGenomeView] no ${L} for this graph`,S);return}}function*y(l,b){let L=yield*u(e.geneTrack?.trackId,l,"genes");L&&b()&&(e.geneTrackFeatures=L)}function*x(l,b){let L=yield*u(e.repeatTrack?.trackId,l,"repeats");L&&b()&&(e.repeatArrays=Ei(L))}function*k(l,b,L){let{isLive:f,signal:G}=g();e.isLoading=!0,e.error=void 0;try{let S=typeof b=="string"?b:yield b(G);f()&&(yield*c(S,l,L))}catch(S){f()&&(console.error("[GraphGenomeView.loadWholeGFA]",S),e.error=S)}finally{f()&&e.finishLoading()}return f()}function h(){t?.abort(),t=void 0,m++,a++}function R(){h(),e.graph=void 0,e.graphRegion=void 0,e.loadedReferencePath=void 0,e.layoutResult=void 0,e.indexBubbles=void 0,e.geneTrackFeatures=void 0,e.walkGeneFeatures=void 0,i.clear(),e.repeatArrays=void 0,e.readsShown=void 0,e.popStack=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearInteractionState(),e.clearPerfMetrics()}return{clearGraph(){R()},cancelLoad(){e.canCancelLoad&&(R(),e.loadCanceled=!0)},stopLoad(){h(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){h()},loadGFA:(0,K.flow)(function*(l,b="Imported GFA"){yield*k(b,l)}),loadGFAFromLocation:(0,K.flow)(function*(l,b){e.setStatusMessage("Fetching GFA");let L=yield*k("uri"in l?l.uri.split("/").pop()??"GFA":"GFA",f=>(0,Zi.openLocation)(l).readFile({encoding:"utf8",signal:f}),b);b&&L&&e.graph&&(yield*x(b,()=>e.graphRegion===b))}),cutSubgraph:(0,K.flow)(function*(l,b,L={}){let{isLive:f,signal:G}=g();e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let S=performance.now(),N=yield(0,ee.getSession)(e).rpcManager.call((0,ee.getRpcSessionId)(e),"GetSubgraph",{adapterConfig:l,region:b,opts:L,signal:G});if(!f())return;if(e.setFetchMs(performance.now()-S),!N)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");if(yield*c(N,Ve(b),b,!0,ea(l)?v=>(0,ee.getSession)(e).rpcManager.call((0,ee.getRpcSessionId)(e),"GetGraphReads",{adapterConfig:l,nodeNames:v.nodes.map(C=>C.name),signal:G}):void 0),!f())return;e.setStatusMessage("Reading annotations"),yield Promise.all([L.tier==="coarse"?void 0:(0,K.flow)(p)(l,b,f),(0,K.flow)(y)(b,f),(0,K.flow)(x)(b,f)])}catch(S){f()&&(console.error("[GraphGenomeView.cutSubgraph]",S),e.error=S)}finally{f()&&e.finishLoading()}}),reloadRepeats:(0,K.flow)(function*(){let l=e.graphRegion,b=e.repeatTrack?.trackId;l&&(yield*x(l,()=>e.graphRegion===l&&e.repeatTrack?.trackId===b))}),loadWalkGenes:(0,K.flow)(function*(){let l=e.walkGeneReads?.reads??[],b=JSON.stringify(l),L=e.graph,f=new Map;yield Promise.all(l.map(({row:G,trackId:S,region:N})=>(0,K.flow)(function*(){let v=`${S} ${N.refName}:${N.start}-${N.end}`,C=i.get(v);if(!C){let O=yield*u(S,N,"haplotype genes");if(!O)return;C=Xt(O).map(E=>({...E,refName:N.refName})),i.set(v,C)}f.set(G,C)})())),(0,K.isAlive)(e)&&e.graph===L&&JSON.stringify(e.walkGeneReads?.reads??[])===b&&(e.walkGeneFeatures=l.length?f:void 0)}),reloadGenes:(0,K.flow)(function*(){i.clear();let l=e.graphRegion,b=e.geneTrack?.trackId;l&&(yield*y(l,()=>e.graphRegion===l&&e.geneTrack?.trackId===b))}),popBubble:(0,K.flow)(function*(l){let b=e.graph;if(!b)return;let L=Ja(b,Mt(l));if(L.nodes.length===0){(0,ee.getSession)(e).notify("None of the segments of this bubble are in the cut; widen the graph context to open it","info");return}let{isLive:f}=g();e.popStack=[...e.popStack,{graph:b,layoutMode:e.chosenLayoutMode,label:b.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let G=`${io[Rt(l,e.repeatArrays).kind]} at ${l.refName}:${l.start.toLocaleString()}`;e.graph={...L,name:G},e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*s(e.graph))&&e.finishLoading()}catch(S){f()&&(e.error=S,e.finishLoading())}}),unpopBubble:(0,K.flow)(function*(){let l=e.poppedFrom;if(l){e.popStack=e.popStack.slice(0,-1),e.graph=l.graph,e.layoutMode=l.layoutMode,e.indexBubbles=l.indexBubbles,e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*s(l.graph))&&e.finishLoading()}catch(b){e.error=b,e.finishLoading()}}}),recomputeLayout:(0,K.flow)(function*(){let l=e.graph;if(l){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*s(l))&&e.finishLoading()}catch(b){console.error("[GraphGenomeView.recomputeLayout]",b),e.error=b,e.finishLoading()}}})}});function Tc(e){return Q(e)&&typeof e.get=="function"}function Ac(e){let t=Tc(e)?e.get("name"):Q(e)?e.name:void 0;return typeof t=="string"?t:void 0}function es(e){let t;if(Q(e)&&Q(e.hoverPosition)){let{refName:n,coord:r,coord0:o,assemblyName:a}=e.hoverPosition;typeof n=="string"&&typeof r=="number"&&(t={refName:n,coord:typeof o=="number"?o:r-1,assemblyName:typeof a=="string"?a:void 0,featureName:Ac(e.hoverFeature)})}return t}function ts(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function ns({hover:e,nodes:t}){let n,r;for(let o of t)o.name===e.featureName?n=o.id:r===void 0&&D(o)&&e.coord>=o.stable.start&&e.coord<o.stable.start+o.length&&(r=o.id);return n??r??null}var Nc=/^(.+) HP(\d+)$/,Pc=/^(.+)\.(\d+)$/;function vc(e){let t=Nc.exec(e),n=Pc.exec(e);return[...t?[{sample:t[1],haplotype:String(Number(t[2])+1)}]:[],...n?[{sample:n[1],haplotype:n[2]}]:[],{sample:e,haplotype:void 0}]}function Cc(e){return Z(e).name.split("#")[1]}function rs(e,t){let n=t.map(r=>r.name);for(let{sample:r,haplotype:o}of vc(e)){let a=n.filter(i=>hr(Z(i).name)===r&&(o===void 0||Cc(i)===o));if(a.length>0)return a}return[]}var as=Qi.actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,me.addDisposer)(e,(0,W.autorun)(()=>{e.fittedTransform&&(0,W.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,me.addDisposer)(e,(0,W.reaction)(()=>{let r=e.facetGrid;return r?`${e.facet.field} ${e.facetPanels?.length} ${r.columns}`:""},()=>{e.refitView()})),(0,me.addDisposer)(e,(0,W.reaction)(()=>({graph:e.graph,reads:JSON.stringify(e.walkGeneReads?.reads??[])}),()=>{e.loadWalkGenes()},{fireImmediately:!0,equals:(r,o)=>r.graph===o.graph&&r.reads===o.reads})),(0,me.addDisposer)(e,(0,W.reaction)(()=>e.fitPadTop,()=>{e.viewportOwner==="host"&&e.zoomToFit()})),(0,me.addDisposer)(e,(0,W.autorun)(()=>{let r=es((0,os.getSession)(e).hovered);(0,W.untracked)(()=>{let o=e.graphRegion,a=e.graph,i=r&&o&&ts(r,o)?r:void 0,s=i?.featureName&&a?.paths?rs(i.featureName,a.paths):[];o&&a&&!e.pointerInPane&&e.setHoveredNode(i&&s.length===0?ns({hover:i,nodes:a.nodes}):null),e.setHoveredRowWalks(s)})})),(0,me.addDisposer)(e,(0,W.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredBubble(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,me.addDisposer)(e,(0,W.autorun)(()=>{let{scale:r}=e,o=Ue(e);if(n){n=!1;return}let a=(0,W.untracked)(()=>e.builtViewport);a?.scale===r&&Aa(a.bounds,o)||e.scheduleViewportDirty()})),(0,me.addDisposer)(e,(0,W.autorun)(()=>{let r=e.currentRenderingBackend;ue(e.geometryVersion),r&&(e.applyHighlights(r),e.renderNow())}))}e.attachRenderingBackend(t,()=>({upload:n=>{if(n.resize(e.paneWidth,e.canvasHeight),e.layoutResult?.tubeMap)return ue(e.viewportDirty),n.uploadGeometry(vn),e.setGeometryMetrics(0,0,{scale:(0,W.untracked)(()=>e.scale),bounds:(0,W.untracked)(()=>Ue(e))}),!0;if(e.facetPanels)return ue(e.viewportDirty),n.uploadGeometry(vn),e.setGeometryMetrics(0,0,{scale:(0,W.untracked)(()=>e.scale),bounds:(0,W.untracked)(()=>e.viewportToBuild())}),!0;let r=performance.now(),o=e.buildDrawing(e.walkLift,e.effectiveDrawPaths);return o?(n.uploadGeometry(o.batch),e.setGeometryMetrics(performance.now()-r,o.batch.nodeStrokes.length,{scale:(0,W.untracked)(()=>e.scale),bounds:o.viewportBounds}),!0):!1},render:n=>e.nodePositions?(e.paint(n),e.markPainted(),!0):!1,releaseTargets:n=>{n.releaseOffscreenTargets()}}))}})).actions(e=>({switchLayout(t){return e.setLayoutMode(t),e.recomputeLayout()},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user")}}));var Kt=w(U(),1),Ic="FeatureTrack";function is({session:e,assemblyName:t,first:n}){let r=[];for(let o of e.tracks){let a=(0,Kt.readConfObject)(o,"type"),i=(0,Kt.readConfObject)(o,"assemblyNames"),s=(0,Kt.readConfObject)(o,"trackId");a===Ic&&Array.isArray(i)&&i.includes(t)&&typeof s=="string"&&s!==n&&r.push(s)}return n?[n,...r]:r}var qt=w(U(),1),ss=w(md(),1),Jt=w(re(),1);var Bc="SyntenyTrack",Ec="Synteny adapters";function Fc(e){if((0,qt.readConfObject)(e,"type")===Bc)return!0;let t=e.adapter?.type;if(typeof t!="string"||!(0,Jt.isStateTreeNode)(e))return!1;let{pluginManager:n}=(0,Jt.getEnv)(e);return!!n?.hasAdapterType(t)&&n.getAdapterType(t).adapterMetadata?.category===Ec}function ds(e,t){let n=new Set(t),r=[];for(let o of e.tracks){let a=(0,qt.readConfObject)(o,"assemblyNames"),i=(0,qt.readConfObject)(o,"trackId");if(Fc(o)&&typeof i=="string"&&Array.isArray(a)){let s=a.filter(d=>typeof d=="string"&&n.has(tt(e,d))).length;s>=2&&r.push({trackId:i,name:(0,ss.getTrackName)(o,e),coverage:s})}}return r.sort((o,a)=>a.coverage-o.coverage)}function cs(e,t,n="image/svg+xml"){let r=URL.createObjectURL(new Blob([e],{type:n})),o=document.createElement("a");o.href=r,o.download=t,o.click(),setTimeout(()=>{URL.revokeObjectURL(r)},0)}var us=as.actions(e=>({showInLinearView(t){let n=(0,Se.getSession)(e),r=t.assembly===e.graphRegion?.assemblyName,o=Wi({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:is({session:n,assemblyName:t.assembly,first:r?e.sourceTrackId:void 0})});r&&e.pairWithLinearView(o)},highlightInLinearView(t){Oi({session:(0,Se.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){Hi({session:(0,Se.getSession)(e),contributors:e.launchableAssemblies,trackId:t,graphTrackId:e.sourceTrackId})}})).views(e=>({get syntenyLaunchTracks(){let t=e.launchableAssemblies.map(n=>n.sample);return t.length>=2?ds((0,Se.getSession)(e),t):[]}})).views(e=>({graphMenuItems(){let t=e.walkChoices;return[{label:"Layout",subMenu:Hr.map(n=>({type:"radio",label:n.label,checked:e.chosenLayoutMode===n.value,disabled:e.graph?!n.available(e.graph):!1,onClick:()=>{e.switchLayout(n.value)}}))},{label:"Color",subMenu:Xr.map(n=>({type:"radio",label:n.label,checked:e.chosenColorScheme===n.value,onClick:()=>{e.setColorScheme(n.value)}}))},...t.length>0&&e.liftsWalks?[{label:"Walk",subMenu:[{label:"None",onClick:()=>{e.setWalkLayers([])}},...e.walkLayers.length>1&&e.modeDrawsNodes?[{label:"Side by side",subMenu:_a.map(({value:n,label:r})=>({type:"radio",label:r,checked:e.facet.field===n,onClick:()=>{e.setFacet(n)}}))}]:[],...e.facetPanels&&e.facet.field==="walk"&&!e.hostPlacesX?[{label:"Columns",subMenu:[void 0,...e.facetPanels.map((n,r)=>r+1)].map(n=>({type:"radio",label:n===void 0?"Auto":`${n}`,checked:e.facet.columns===n,onClick:()=>{e.setFacetColumns(n)}}))}]:[],...t.length>An?[{label:"Choose walks...",onClick:()=>{(0,Se.getSession)(e).queueDialog(n=>[Va,{model:e,onClose:n}])}}]:[],...(t.length>An?t.filter(n=>e.walkLayers.some(r=>r.walk===n.name)):t).map(n=>({type:"checkbox",label:n.label,checked:e.walkLayers.some(r=>r.walk===n.name),onClick:()=>{e.toggleWalk(n.name)}})),...e.drawnWalks.map(n=>({label:`Colour ${e.walkLabel(n.name)}`,subMenu:[{type:"subHeader",label:"Colour by"},...qr.map(r=>({type:"radio",label:r.label,checked:n.encoding.field===r.value,onClick:()=>{e.setWalkColor(n.name,{field:r.value})}})),{type:"subHeader",label:"Palette"},...Jr.filter(r=>r.value!=="rainbow"||n.encoding.field==="reference").map(r=>({type:"radio",label:r.label,checked:n.encoding.scheme===r.value,onClick:()=>{e.setWalkColor(n.name,{scheme:r.value})}}))]}))]}]:[],...Ne.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:Wa.map(({bp:n,label:r})=>({type:"radio",label:r,checked:e.tubeMapFold===n,disabled:n>0&&e.graph?.reads!==void 0,onClick:()=>{e.setTubeMapFold(n),e.recomputeLayout()}}))}]:[],...e.chosenLayoutMode==="walkrows"&&e.repeatChoices.length>0?[{label:"Repeat",subMenu:[{type:"radio",label:"Whole window",checked:e.repeatKey==="",onClick:()=>{e.setRepeatKey("")}},...e.repeatChoices.map(({key:n,name:r,unit:o})=>({type:"radio",label:`${r} \xB7 ${o.toLocaleString()} bp unit`,checked:e.repeatKey===n,onClick:()=>{e.setRepeatKey(n)}}))]}]:[],...e.hostPlacesX?[]:[{label:"Zoom in",onClick:()=>{e.zoom(1.5,e.viewBox.width/2,e.viewBox.height/2)}},{label:"Zoom out",onClick:()=>{e.zoom(1/1.5,e.viewBox.width/2,e.viewBox.height/2)}},{label:"Zoom to fit",onClick:()=>{e.zoomToFit()}}],{type:"checkbox",label:"Mark bubbles",checked:e.showBubbles,onClick:()=>{e.setShowBubbles(!e.showBubbles)}},{type:"checkbox",label:"Show deletion edges",checked:e.showDeletionEdges,onClick:()=>{e.setShowDeletionEdges(!e.showDeletionEdges)}},{type:"checkbox",label:"Genes on the backbone",checked:e.showGenes,onClick:()=>{e.setShowGenes(!e.showGenes)}},...!e.host&&e.modeDrawsNodes&&(e.graph?.paths?.length??0)>1?[{type:"checkbox",label:"Walk rows under the graph",checked:e.walkStrip,onClick:()=>{e.setWalkStrip(!e.walkStrip)}}]:[],...e.referenceStripApplies?[{type:"checkbox",label:"Reference strip at bp",checked:e.showReferenceStrip,onClick:()=>{e.setShowReferenceStrip(!e.showReferenceStrip)}}]:[],{label:"Export SVG",disabled:e.figureUnavailable!==void 0,disabledHelpText:e.figureUnavailable,onClick:()=>{let n=e.figure();n&&cs(n,`${(e.graph?.name??"graph").replaceAll(/[^\w.-]+/g,"_")}.svg`)}},{label:"Copy figure spec",disabled:e.figureSpecUnavailable!==void 0,disabledHelpText:e.figureSpecUnavailable,onClick:()=>{let n=e.figureSpec(),r=(0,Se.getSession)(e);navigator.clipboard.writeText(`${JSON.stringify(n,null,2)}
|
|
6
|
-
`).then(()=>{r.notify("Figure spec copied. Save it as spec.json and run: npx -p @jbrowse/bandage-core bandage-figure spec.json -o figure.svg","info")}).catch(o=>{r.notify(`Could not copy the figure spec: ${String(o)}`)})}}]},launchMenuItems(){let t=[];for(let n of Oo({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:r=>{e.showInLinearView(r)},onShowSynteny:r=>{e.showSyntenyView(r)}}))(0,ps.pushLaunchViewMenuItem)(t,n);return t}}));function Zt(){return us}var Kn=w(U(),1);function ms(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function ls(e){let t=(0,Kn.readConfObject)(e,"assemblyNames"),n=ms(t)?t.slice(1):[];return n.length>0?n:void 0}function Qt(e){let t=(0,Kn.readConfObject)(e,"assemblyNames");return ms(t)?t[0]:void 0}function en(e,t){return e===void 0||e===t?void 0:`The graph is cut on its reference, ${e}: open it from a view of ${e}`}function $c(e){return("uri"in e?e.uri.split(/[?#]/)[0]:"localPath"in e?e.localPath:"name"in e?e.name:"").split(/[\\/]/).at(-1)??""}function qn(){return X.types.compose("GraphGenomeView",gs.BaseViewModel,Zt(),X.types.model({type:X.types.literal("GraphGenomeView"),gfaLocation:X.types.maybe(X.types.frozen()),loadedRegion:X.types.maybe(X.types.frozen()),loadedTrackId:X.types.optional(X.types.string,""),subgraphContext:X.types.optional(X.types.number,1),subgraphHaplotypes:X.types.maybe(X.types.frozen()),maxRegionBp:X.types.optional(X.types.number,Ye)})).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get cutHaplotypes(){return e.subgraphHaplotypes},get sourceGfaLocation(){return e.gfaLocation},get sourceTrack(){return e.loadedTrackId?(0,hs.getSession)(e).tracks.find(t=>t.trackId===e.loadedTrackId):void 0},get canRetryLoad(){return e.gfaLocation!==void 0||e.loadedTrackId!==""&&e.loadedRegion!==void 0}})).views(e=>({get hasPendingSource(){return e.canRetryLoad&&!e.graph&&!e.loadCanceled},menuItems(){return e.launchMenuItems()}})).actions(e=>{let t=e.clearGraph;return{clearGraph(){t(),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let n=e.loadedRegion;if(e.gfaLocation)return e.displayName||e.setDisplayName($c(e.gfaLocation)),e.loadGFAFromLocation(e.gfaLocation,n);if(!e.loadedTrackId||!n)return;let r=e.sourceTrack,o=n.end-n.start,a=r?en(Qt(r),n.assemblyName):void 0;if(!r)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(a)e.setError(new Error(a));else if(o>e.maxRegionBp)e.setError(new Error(`Region too large (${ye(o)}) \u2014 zoom in to view graph (max ${ye(e.maxRegionBp)})`));else return e.cutSubgraph(ge(e,r),n,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes,...e.cutsWholeWalks?{snarls:"overlapping"}:{}})}}}).actions(e=>({retryLoad(){e.load()},switchLayout(t){let n=e.cutsWholeWalks;return e.setLayoutMode(t),e.loadedTrackId&&e.cutsWholeWalks!==n?e.load():e.recomputeLayout()},afterAttach(){e.graph||e.load(),(0,X.addDisposer)(e,(0,fs.reaction)(()=>e.walkStrip,()=>{e.loadedTrackId&&!_(e.chosenLayoutMode).wholeWalks&&e.load()}))}}))}var Dc=(0,ws.defineLaunchKeys)()({});function Jn(e){e.addViewType(()=>new ys.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:qn(),launchKeys:Dc,ReactComponent:(0,bs.lazy)(()=>import("./chunks/GraphGenomeView-AY2FO4P2.js"))}))}var ks=w(U(),1),Ce=w(le(),1),Zn=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function Vc(e){let t=e.getElementTypesInGroup("display"),n=o=>t.find(a=>a.name===o),r=o=>o&&Object.assign(Object.create(o),{adapterCapabilities:["headerLanes"]});return[n("LinearGraphDisplay"),n("LinearBasicDisplay"),...Zn.map(o=>r(n(o)))].filter(o=>o!==void 0)}function Qn(e){e.addTrackType(()=>{let t=(0,ks.ConfigurationSchema)("GraphTrack",{},{baseConfiguration:(0,Ce.createBaseTrackConfig)(e),explicitIdentifier:"trackId"}),n=new Ce.TrackType({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:(0,Ce.createBaseTrackModel)(e,"GraphTrack",t)});for(let r of Vc(e))n.addDisplayType(r);return n})}function er(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...r}=t;return n.addView("GraphGenomeView",r),t})}var Vs=w(Ee(),1),_s=w(Ss(),1);var Ls=w(U(),1),Gs=w(Ms(),1),tr=w(re(),1);function Ts(){return(0,Ls.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:tr.types.enumeration("LayoutMode",gt),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:tr.types.enumeration("ColorScheme",ht),defaultValue:"auto"},...(0,Gs.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var Bs=w(Ee(),1);var ot=w(U(),1),Es=w(le(),1),Fs=w(Pr(),1),nr=w(oe(),1),$s=w(Ns(),1),I=w(re(),1),tn=w(vs(),1);var rt=w(st(),1);function Cs(e){return e instanceof Error&&(e.name==="NodeLimitError"||e.regionTooLarge===!0||/reads more than nodeLimit|^Subgraph size limit of \d+ nodes exceeded/.test(e.message))}function Is(e,t){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;let n=e.end-e.start;return t.end-t.start>=n&&t.end>e.start-n&&t.start<e.end+n}var _c=(0,Bs.lazy)(()=>import("./chunks/GraphTrackSettingsDialog-QJXPMWYG.js"));function Ds(e){return I.types.compose("LinearGraphDisplay",Es.BaseDisplay,(0,$s.default)(),Zt(),I.types.model({type:I.types.literal("LinearGraphDisplay"),configuration:(0,ot.ConfigurationReference)(e),pane:I.types.maybe(I.types.frozen()),overviewRowsChoice:I.types.maybe(I.types.frozen()),overviewRowOrder:I.types.maybe(I.types.frozen()),cutRegion:I.types.maybe(I.types.frozen()),coarseCut:I.types.optional(I.types.boolean,!1),maxRegionBp:I.types.optional(I.types.number,Ye),subgraphContext:I.types.optional(I.types.number,1),subgraphHaplotypes:I.types.maybe(I.types.frozen())})).preProcessSnapshot(t=>{let{pane:n,overviewRowsChoice:r,overviewRowOrder:o,...a}=t;if(!n)return a;let{type:i,...s}=n;return{...s,...a}}).volatile(()=>({recuts:0,settledWindow:void 0,dense:void 0})).views(t=>({get adapterConfig(){return ge(t,t.parentTrack.configuration)},get defaultLayoutMode(){return(0,ot.getConf)(t,"layoutMode")},get defaultColorScheme(){return(0,ot.getConf)(t,"colorScheme")},get drawsGenomicCoordinates(){return t.layoutResult===void 0||t.hostPlacesX},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get cutHaplotypes(){return this.chosenHaplotypes},get chosenHaplotypes(){return t.subgraphHaplotypes??ls(t.parentTrack.configuration)},get coarseAboveBpPerPx(){let r=t.adapterConfig.coarse?.aboveBpPerPx;return typeof r=="number"?r:void 0}})).views(t=>({tierAt(n){let r=t.coarseAboveBpPerPx;return r!==void 0&&n>r?"coarse":"fine"},capFor(n){return n==="coarse"?1/0:t.maxRegionBp},get cutTier(){return t.coarseCut&&t.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(t=>({get settledCapBp(){let n=t.settledWindow;return n?t.capFor(t.tierAt(n.bpPerPx)):1/0}})).views(t=>({get regionTooLarge(){let n=t.settledWindow;return n!==void 0&&n.end-n.start>t.settledCapBp},get regionTooLargeReason(){let n=t.settledWindow;return n?`Region too large for a graph cut (${ye(n.end-n.start)}, max ${ye(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get displayPhase(){return(0,tn.computeDisplayStatusPhase)({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>(0,tn.computeActivityPhase)({isMinimized:t.isMinimized,fetchInert:!1,viewportEmpty:t.host?.initialized===!0&&t.host.hasVisibleContent===!1,isLoading:t.isLoading||!t.hasGraph,fetchCanceled:t.loadCanceled,awaitingDependentData:!1,rendersCanvas:!0,canvasDrawn:t.painted&&t.geometryPainted},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({setSubgraphContext(n){t.subgraphContext=n},setSubgraphHaplotypes(n){t.subgraphHaplotypes=n,t.dense=void 0},setDense(n){t.dense=n},setMaxRegionBp(n){t.maxRegionBp=n},cut(){let n=t.cutRegion;if(!n)return;let r=en(Qt(t.parentTrack.configuration),n.assemblyName);if(r){t.clearGraph(),t.setError(new Error(r));return}let o=t.cutTier==="coarse";return t.cutSubgraph(t.adapterConfig,n,{hops:o?0:t.subgraphContext,haplotypes:t.chosenHaplotypes,tier:o?"coarse":void 0,..._(t.chosenLayoutMode).wholeWalks?{snarls:"overlapping"}:{}})}})).actions(t=>({recutAt(n){let r=t.tierAt(n.bpPerPx);return t.coarseCut=r==="coarse",t.cutRegion=Vn(n,t.capFor(r),_(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(n){t.settledWindow=n;let r=_(t.chosenLayoutMode).cutMargins;return t.regionTooLarge||Is(t.dense,n)||!t.loadCanceled&&t.tierAt(n.bpPerPx)===t.cutTier&&wi(t.cutRegion,n,r)?!1:(Promise.resolve(t.recutAt(n)).then(()=>{(0,I.isAlive)(t)&&Cs(t.error)&&this.refuseDenseCut(n)}),!0)},refuseDenseCut(n){t.setDense(n),t.cutRegion=void 0,this.settleOn(t.settledWindow??n)},switchLayout(n){let r=_(t.chosenLayoutMode);t.setLayoutMode(n);let o=_(n),a=t.host?Ot(t.host):void 0;return a&&!t.regionTooLarge&&(o.cutMargins!==r.cutMargins||o.wholeWalks!==r.wholeWalks)?t.recutAt(a):t.recomputeLayout()},retryLoad(){t.cut()},reload(){t.cut()},cancelFetchByUser(){t.stopLoad()}})).actions(t=>({forceLoad(){let n=t.settledWindow;n&&(t.setMaxRegionBp(Math.ceil(n.end-n.start)),t.settleOn(n))},afterAttach(){t.cutRegion&&!t.graph&&t.cut(),(0,I.addDisposer)(t,(0,rt.reaction)(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),(0,I.addDisposer)(t,(0,rt.reaction)(()=>t.hostFrame,n=>{n&&t.hostTransform(n.scale,n.translateX)},{equals:(n,r)=>n?.scale===r?.scale&&n?.translateX===r?.translateX,fireImmediately:!0,name:"GraphHostFrame"})),(0,I.addDisposer)(t,(0,rt.reaction)(()=>`${t.facet.field} ${t.facetPlacement?.count}`,()=>{let n=t.facetGridIn(t.paneCeiling)?.total??0;(t.facetGrid?.total??0)>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),(0,I.addDisposer)(t,(0,rt.reaction)(()=>t.host?.coarseDynamicBlocks,n=>{let{host:r}=t,o=n&&r?Ot(r):void 0;o&&t.settleOn(o)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let n=t.host?Ot(t.host):void 0,r=t.sourceTrackId;if(!n||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge)return;let o=Math.floor(n.start),a=Math.ceil(n.end);return{loadedTrackId:r,loadedRegion:{refName:n.refName,assemblyName:n.assemblyName,start:o,end:a},subgraphContext:t.subgraphContext,subgraphHaplotypes:t.chosenHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-o),layoutMode:t.chosenLayoutMode,colorScheme:t.chosenColorScheme,referencePath:t.referencePath,geneTrackId:t.geneTrackId,showGenes:t.showGenes,showBubbles:t.showBubbles,showDeletionEdges:t.showDeletionEdges,walkLayers:t.walkLayers,facet:(0,I.getSnapshot)(t.facet)}}})).actions(t=>({openGraphView(){let n=t.graphViewSpec;n&&(0,nr.getSession)(t).addView("GraphGenomeView",n)}})).views(t=>({trackMenuItems(){let n=t.launchMenuItems();return(0,Fs.pushLaunchViewMenuItem)(n,{label:"Graph genome view",icon:Nt,disabled:!t.graphViewSpec,disabledHelpText:"Zoom in until the track cuts a graph",onClick:()=>{t.openGraphView()}}),[...t.graphMenuItems(),{label:"Settings",icon:Ho,onClick:()=>{(0,nr.getSession)(t).queueDialog(r=>[_c,{model:t,open:!0,onClose:r}])}},...n]}}))}function rr(e){e.addDisplayType(()=>{let t=Ts();return Object.assign(new _s.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:Ds(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,Vs.lazy)(()=>import("./chunks/LinearGraphDisplay-GKVG72J4.js"))}),{adapterCapabilities:["getSubgraph"]})})}var Hs=w(Pt(),1);var or=w(U(),1),Ws=w(re(),1);function ar(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:n},index:{indexType:r?"CSI":"TBI",location:{uri:`${t}.${r?"csi":"tbi"}`,baseUri:n}}}:e}var Wc=(0,or.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,or.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:Ws.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz.tbi",locationType:"UriLocation"}}}),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:ar}),Os=Wc;function ir(e){e.addAdapterType(()=>new Hs.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:ar,configSchema:Os,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-CZYQROL2.js").then(t=>t.default)}))}var Us=w(Pt(),1);var rn=w(U(),1),zs=w(re(),1);function js(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function Xs(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:js(`${t}.segs.bed.gz`,n,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:js(`${t}.links.bed.gz`,n,r)}:e}function sr(e){let{coarse:t,baseUri:n}=e;return Xs(typeof t=="object"&&t!==null?{...e,coarse:Xs({baseUri:n,...t})}:e)}var nn=(e,t)=>(0,rn.ConfigurationSchema)(e,{indexType:{model:zs.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),Oc=(0,rn.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:nn("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:nn("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),Hc=(0,rn.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:nn("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:nn("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:Oc},{explicitlyTyped:!0,preProcessSnapshot:sr}),Ys=Hc;function dr(e){e.addAdapterType(()=>new Us.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:sr,configSchema:Ys,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-LQGQXCVO.js").then(t=>t.default)}))}var jc=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function Xc(e){return Tr(e).toLowerCase().endsWith(".gbz.db")}function zc(e){let t=e.adapter;return t?.type==="GbzBaseSyntenyAdapter"&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function Yc(e,t,n){if((!n||n==="GbzBaseSyntenyAdapter")&&Xc(e))return{type:"GbzBaseSyntenyAdapter",gbzDbLocation:e,...t?{haplotypeIndexLocation:t}:{}};if((!n||n==="RgfaTabixAdapter")&&Ar(e))return Nr({choice:"RgfaTabixAdapter",loc:e,indexLoc:t,assembly:"",sample:""})}function cr(e){e.addToExtensionPoint("Core-preProcessTrackConfig",zc),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(n,r,o)=>Yc(n,r,o)??t(n,r,o)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(n,r)=>jc.has(n)?"GraphTrack":t(n,r))}var Zs=w(oe(),1),Qs=w(hd(),1),pr=w(gd(),1),ed=w(bd(),1);function Ks(e){let t;if(Q(e)){let{refName:n,start:r,end:o,assemblyName:a}=e;typeof n=="string"&&typeof r=="number"&&typeof o=="number"&&(t={refName:n,start:r,end:o,assemblyName:typeof a=="string"?a:void 0})}return t}function Uc(e,t,n){let r=e.connectedViewId;return r===void 0||r===t||!n.has(r)}function qs(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Kc(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(n=>Q(n)&&Array.isArray(n.displays)?n.displays.filter(r=>Q(r)&&r.type==="LinearGraphDisplay"):[])}function Js(e,t,n){let r=[],o=Qe(e),a=new Set(o.map(i=>Q(i)?i.id:void 0));for(let i of o){if(Q(i)&&i.id===t)for(let s of Kc(i)){let d=Ks(s.hoverHighlight);d&&qs(d,n)&&r.push({key:typeof s.id=="string"?s.id:"graph-track",region:d})}if(Q(i)&&i.type==="GraphGenomeView"&&Uc(i,t,a)){let s=Ks(i.hoverHighlight);s&&qs(s,n)&&r.push({key:typeof i.id=="string"?i.id:"graph",region:s})}}return r}var Ie=w(Be(),1),qc=(0,ed.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,Qs.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),Jc=(0,pr.observer)(function({model:t,region:n}){let{classes:r}=qc(),o=t.getHighlightCoords(n);return o?(0,Ie.jsx)("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:o.left,width:o.width}}):null}),Zc=(0,pr.observer)(function({model:t}){let{views:n}=(0,Zs.getSession)(t);return(0,Ie.jsx)(Ie.Fragment,{children:Js([...n],t.id,t.assemblyNames).map(({key:r,region:o})=>(0,Ie.jsx)(Jc,{model:t,region:o},`graph-hover-${r}`))})}),td=Zc;var nd=w(Be(),1),Qc="LinearGenomeView-TracksContainerComponent";function ur(e){e.contributeToExtensionPoint(Qc,({model:t})=>(0,nd.jsx)(td,{model:t},"graphgenomeview-hover-highlight"))}var rd=w(le(),1);function ep(e){return e.views(t=>({get adapterConfig(){return ge(t,t.parentTrack.configuration)}}))}function mr(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof rd.DisplayType&&Zn.includes(t.name)&&t.extendStateModel(ep),t))}var od="GraphGenomeView";var ad="6.0.0";var lr=class extends id.default{constructor(){super(...arguments);this.name=od;this.version=ad}install(n){Jn(n),rr(n),Qn(n),er(n),ur(n),dr(n),ir(n),yn(n),kn(n),cr(n),mr(n),n.addRpcMethod(()=>new Oe(n)),n.addRpcMethod(()=>new We(n)),n.addRpcMethod(()=>new _e(n))}configure(n){try{(0,sd.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:Nt,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{lr as default};
|
|
6
|
+
`).then(()=>{r.notify("Figure spec copied. Save it as spec.json and run: npx -p @jbrowse/bandage-core bandage-figure spec.json -o figure.svg","info")}).catch(o=>{r.notify(`Could not copy the figure spec: ${String(o)}`)})}}]},launchMenuItems(){let t=[];for(let n of Oo({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:r=>{e.showInLinearView(r)},onShowSynteny:r=>{e.showSyntenyView(r)}}))(0,ps.pushLaunchViewMenuItem)(t,n);return t}}));function Zt(){return us}var Kn=w(U(),1);function ms(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function ls(e){let t=(0,Kn.readConfObject)(e,"assemblyNames"),n=ms(t)?t.slice(1):[];return n.length>0?n:void 0}function Qt(e){let t=(0,Kn.readConfObject)(e,"assemblyNames");return ms(t)?t[0]:void 0}function en(e,t){return e===void 0||e===t?void 0:`The graph is cut on its reference, ${e}: open it from a view of ${e}`}function $c(e){return("uri"in e?e.uri.split(/[?#]/)[0]:"localPath"in e?e.localPath:"name"in e?e.name:"").split(/[\\/]/).at(-1)??""}function qn(){return X.types.compose("GraphGenomeView",gs.BaseViewModel,Zt(),X.types.model({type:X.types.literal("GraphGenomeView"),gfaLocation:X.types.maybe(X.types.frozen()),loadedRegion:X.types.maybe(X.types.frozen()),loadedTrackId:X.types.optional(X.types.string,""),subgraphContext:X.types.optional(X.types.number,1),subgraphHaplotypes:X.types.maybe(X.types.frozen()),maxRegionBp:X.types.optional(X.types.number,Ye)})).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get cutHaplotypes(){return e.subgraphHaplotypes},get sourceGfaLocation(){return e.gfaLocation},get sourceTrack(){return e.loadedTrackId?(0,hs.getSession)(e).tracks.find(t=>t.trackId===e.loadedTrackId):void 0},get canRetryLoad(){return e.gfaLocation!==void 0||e.loadedTrackId!==""&&e.loadedRegion!==void 0}})).views(e=>({get hasPendingSource(){return e.canRetryLoad&&!e.graph&&!e.loadCanceled},menuItems(){return e.launchMenuItems()}})).actions(e=>{let t=e.clearGraph;return{clearGraph(){t(),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let n=e.loadedRegion;if(e.gfaLocation)return e.displayName||e.setDisplayName($c(e.gfaLocation)),e.loadGFAFromLocation(e.gfaLocation,n);if(!e.loadedTrackId||!n)return;let r=e.sourceTrack,o=n.end-n.start,a=r?en(Qt(r),n.assemblyName):void 0;if(!r)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(a)e.setError(new Error(a));else if(o>e.maxRegionBp)e.setError(new Error(`Region too large (${ye(o)}) \u2014 zoom in to view graph (max ${ye(e.maxRegionBp)})`));else return e.cutSubgraph(ge(e,r),n,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes,...e.cutsWholeWalks?{snarls:"overlapping"}:{}})}}}).actions(e=>({retryLoad(){e.load()},switchLayout(t){let n=e.cutsWholeWalks;return e.setLayoutMode(t),e.loadedTrackId&&e.cutsWholeWalks!==n?e.load():e.recomputeLayout()},afterAttach(){e.graph||e.load(),(0,X.addDisposer)(e,(0,fs.reaction)(()=>e.walkStrip,()=>{e.loadedTrackId&&!_(e.chosenLayoutMode).wholeWalks&&e.load()}))}}))}var Dc=(0,ws.defineLaunchKeys)()({});function Jn(e){e.addViewType(()=>new ys.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:qn(),launchKeys:Dc,ReactComponent:(0,bs.lazy)(()=>import("./chunks/GraphGenomeView-AY2FO4P2.js"))}))}var ks=w(U(),1),Ce=w(le(),1),Zn=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function Vc(e){let t=e.getElementTypesInGroup("display"),n=o=>t.find(a=>a.name===o),r=o=>o&&Object.assign(Object.create(o),{adapterCapabilities:["headerLanes"]});return[n("LinearGraphDisplay"),n("LinearBasicDisplay"),...Zn.map(o=>r(n(o)))].filter(o=>o!==void 0)}function Qn(e){e.addTrackType(()=>{let t=(0,ks.ConfigurationSchema)("GraphTrack",{},{baseConfiguration:(0,Ce.createBaseTrackConfig)(e),explicitIdentifier:"trackId"}),n=new Ce.TrackType({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:(0,Ce.createBaseTrackModel)(e,"GraphTrack",t)});for(let r of Vc(e))n.addDisplayType(r);return n})}function er(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...r}=t;return n.addView("GraphGenomeView",r),t})}var Vs=w(Ee(),1),_s=w(Ss(),1);var Ls=w(U(),1),Gs=w(Ms(),1),tr=w(re(),1);function Ts(){return(0,Ls.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:tr.types.enumeration("LayoutMode",gt),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:tr.types.enumeration("ColorScheme",ht),defaultValue:"auto"},...(0,Gs.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var Bs=w(Ee(),1);var ot=w(U(),1),Es=w(le(),1),Fs=w(Pr(),1),nr=w(oe(),1),$s=w(Ns(),1),I=w(re(),1),tn=w(vs(),1);var rt=w(st(),1);function Cs(e){return e instanceof Error&&(e.name==="NodeLimitError"||e.regionTooLarge===!0||/reads more than nodeLimit|^Subgraph size limit of \d+ nodes exceeded/.test(e.message))}function Is(e,t){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;let n=e.end-e.start;return t.end-t.start>=n&&t.end>e.start-n&&t.start<e.end+n}var _c=(0,Bs.lazy)(()=>import("./chunks/GraphTrackSettingsDialog-QJXPMWYG.js"));function Ds(e){return I.types.compose("LinearGraphDisplay",Es.BaseDisplay,(0,$s.default)(),Zt(),I.types.model({type:I.types.literal("LinearGraphDisplay"),configuration:(0,ot.ConfigurationReference)(e),pane:I.types.maybe(I.types.frozen()),overviewRowsChoice:I.types.maybe(I.types.frozen()),overviewRowOrder:I.types.maybe(I.types.frozen()),cutRegion:I.types.maybe(I.types.frozen()),coarseCut:I.types.optional(I.types.boolean,!1),maxRegionBp:I.types.optional(I.types.number,Ye),subgraphContext:I.types.optional(I.types.number,1),subgraphHaplotypes:I.types.maybe(I.types.frozen())})).preProcessSnapshot(t=>{let{pane:n,overviewRowsChoice:r,overviewRowOrder:o,...a}=t;if(!n)return a;let{type:i,...s}=n;return{...s,...a}}).volatile(()=>({recuts:0,settledWindow:void 0,dense:void 0})).views(t=>({get adapterConfig(){return ge(t,t.parentTrack.configuration)},get defaultLayoutMode(){return(0,ot.getConf)(t,"layoutMode")},get defaultColorScheme(){return(0,ot.getConf)(t,"colorScheme")},get drawsGenomicCoordinates(){return t.layoutResult===void 0||t.hostPlacesX},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get cutHaplotypes(){return this.chosenHaplotypes},get chosenHaplotypes(){return t.subgraphHaplotypes??ls(t.parentTrack.configuration)},get coarseAboveBpPerPx(){let r=t.adapterConfig.coarse?.aboveBpPerPx;return typeof r=="number"?r:void 0}})).views(t=>({tierAt(n){let r=t.coarseAboveBpPerPx;return r!==void 0&&n>r?"coarse":"fine"},capFor(n){return n==="coarse"?1/0:t.maxRegionBp},get cutTier(){return t.coarseCut&&t.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(t=>({get settledCapBp(){let n=t.settledWindow;return n?t.capFor(t.tierAt(n.bpPerPx)):1/0}})).views(t=>({get regionTooLarge(){let n=t.settledWindow;return n!==void 0&&n.end-n.start>t.settledCapBp},get regionTooLargeReason(){let n=t.settledWindow;return n?`Region too large for a graph cut (${ye(n.end-n.start)}, max ${ye(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get displayPhase(){return(0,tn.computeDisplayStatusPhase)({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>(0,tn.computeActivityPhase)({isMinimized:t.isMinimized,fetchInert:!1,viewportEmpty:t.host?.initialized===!0&&t.host.hasVisibleContent===!1,isLoading:t.isLoading||!t.hasGraph,fetchCanceled:t.loadCanceled,awaitingDependentData:!1,rendersCanvas:!0,canvasDrawn:t.painted&&t.geometryPainted},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({setSubgraphContext(n){t.subgraphContext=n},setSubgraphHaplotypes(n){t.subgraphHaplotypes=n,t.dense=void 0},setDense(n){t.dense=n},setMaxRegionBp(n){t.maxRegionBp=n},cut(){let n=t.cutRegion;if(!n)return;let r=en(Qt(t.parentTrack.configuration),n.assemblyName);if(r){t.clearGraph(),t.setError(new Error(r));return}let o=t.cutTier==="coarse";return t.cutSubgraph(t.adapterConfig,n,{hops:o?0:t.subgraphContext,haplotypes:t.chosenHaplotypes,tier:o?"coarse":void 0,..._(t.chosenLayoutMode).wholeWalks?{snarls:"overlapping"}:{}})}})).actions(t=>({recutAt(n){let r=t.tierAt(n.bpPerPx);return t.coarseCut=r==="coarse",t.cutRegion=Vn(n,t.capFor(r),_(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(n){t.settledWindow=n;let r=_(t.chosenLayoutMode).cutMargins;return t.regionTooLarge||Is(t.dense,n)||!t.loadCanceled&&t.tierAt(n.bpPerPx)===t.cutTier&&wi(t.cutRegion,n,r)?!1:(Promise.resolve(t.recutAt(n)).then(()=>{(0,I.isAlive)(t)&&Cs(t.error)&&this.refuseDenseCut(n)}),!0)},refuseDenseCut(n){t.setDense(n),t.cutRegion=void 0,this.settleOn(t.settledWindow??n)},switchLayout(n){let r=_(t.chosenLayoutMode);t.setLayoutMode(n);let o=_(n),a=t.host?Ot(t.host):void 0;return a&&!t.regionTooLarge&&(o.cutMargins!==r.cutMargins||o.wholeWalks!==r.wholeWalks)?t.recutAt(a):t.recomputeLayout()},retryLoad(){t.cut()},reload(){t.cut()},cancelFetchByUser(){t.stopLoad()}})).actions(t=>({forceLoad(){let n=t.settledWindow;n&&(t.setMaxRegionBp(Math.ceil(n.end-n.start)),t.settleOn(n))},afterAttach(){t.cutRegion&&!t.graph&&t.cut(),(0,I.addDisposer)(t,(0,rt.reaction)(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),(0,I.addDisposer)(t,(0,rt.reaction)(()=>t.hostFrame,n=>{n&&t.hostTransform(n.scale,n.translateX)},{equals:(n,r)=>n?.scale===r?.scale&&n?.translateX===r?.translateX,fireImmediately:!0,name:"GraphHostFrame"})),(0,I.addDisposer)(t,(0,rt.reaction)(()=>`${t.facet.field} ${t.facetPlacement?.count}`,()=>{let n=t.facetGridIn(t.paneCeiling)?.total??0;(t.facetGrid?.total??0)>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),(0,I.addDisposer)(t,(0,rt.reaction)(()=>t.host?.coarseDynamicBlocks,n=>{let{host:r}=t,o=n&&r?Ot(r):void 0;o&&t.settleOn(o)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let n=t.host?Ot(t.host):void 0,r=t.sourceTrackId;if(!n||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge)return;let o=Math.floor(n.start),a=Math.ceil(n.end);return{loadedTrackId:r,loadedRegion:{refName:n.refName,assemblyName:n.assemblyName,start:o,end:a},subgraphContext:t.subgraphContext,subgraphHaplotypes:t.chosenHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-o),layoutMode:t.chosenLayoutMode,colorScheme:t.chosenColorScheme,referencePath:t.referencePath,geneTrackId:t.geneTrackId,showGenes:t.showGenes,showBubbles:t.showBubbles,showDeletionEdges:t.showDeletionEdges,walkLayers:t.walkLayers,facet:(0,I.getSnapshot)(t.facet)}}})).actions(t=>({openGraphView(){let n=t.graphViewSpec;n&&(0,nr.getSession)(t).addView("GraphGenomeView",n)}})).views(t=>({trackMenuItems(){let n=t.launchMenuItems();return(0,Fs.pushLaunchViewMenuItem)(n,{label:"Graph genome view",icon:Nt,disabled:!t.graphViewSpec,disabledHelpText:"Zoom in until the track cuts a graph",onClick:()=>{t.openGraphView()}}),[...t.graphMenuItems(),{label:"Settings",icon:Ho,onClick:()=>{(0,nr.getSession)(t).queueDialog(r=>[_c,{model:t,open:!0,onClose:r}])}},...n]}}))}function rr(e){e.addDisplayType(()=>{let t=Ts();return Object.assign(new _s.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:Ds(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,Vs.lazy)(()=>import("./chunks/LinearGraphDisplay-GKVG72J4.js"))}),{adapterCapabilities:["getSubgraph"]})})}var Hs=w(Pt(),1);var or=w(U(),1),Ws=w(re(),1);function ar(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:n},index:{indexType:r?"CSI":"TBI",location:{uri:`${t}.${r?"csi":"tbi"}`,baseUri:n}}}:e}var Wc=(0,or.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,or.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:Ws.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz.tbi",locationType:"UriLocation"}}}),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:ar}),Os=Wc;function ir(e){e.addAdapterType(()=>new Hs.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:ar,configSchema:Os,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-CZYQROL2.js").then(t=>t.default)}))}var Us=w(Pt(),1);var rn=w(U(),1),zs=w(re(),1);function js(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function Xs(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:js(`${t}.segs.bed.gz`,n,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:js(`${t}.links.bed.gz`,n,r)}:e}function sr(e){let{coarse:t,baseUri:n}=e;return Xs(typeof t=="object"&&t!==null?{...e,coarse:Xs({baseUri:n,...t})}:e)}var nn=(e,t)=>(0,rn.ConfigurationSchema)(e,{indexType:{model:zs.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),Oc=(0,rn.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:nn("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:nn("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),Hc=(0,rn.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:nn("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:nn("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:Oc},{explicitlyTyped:!0,preProcessSnapshot:sr}),Ys=Hc;function dr(e){e.addAdapterType(()=>new Us.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:sr,configSchema:Ys,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-LQGQXCVO.js").then(t=>t.default)}))}var jc=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function Xc(e){return Tr(e).toLowerCase().endsWith(".gbz.db")}function zc(e){let t=e.adapter;return t?.type==="GbzBaseSyntenyAdapter"&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function Yc(e,t,n){if((!n||n==="GbzBaseSyntenyAdapter")&&Xc(e))return{type:"GbzBaseSyntenyAdapter",gbzDbLocation:e,...t?{haplotypeIndexLocation:t}:{}};if((!n||n==="RgfaTabixAdapter")&&Ar(e))return Nr({choice:"RgfaTabixAdapter",loc:e,indexLoc:t,assembly:"",sample:""})}function cr(e){e.addToExtensionPoint("Core-preProcessTrackConfig",zc),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(n,r,o)=>Yc(n,r,o)??t(n,r,o)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(n,r)=>jc.has(n)?"GraphTrack":t(n,r))}var Zs=w(oe(),1),Qs=w(hd(),1),pr=w(gd(),1),ed=w(bd(),1);function Ks(e){let t;if(Q(e)){let{refName:n,start:r,end:o,assemblyName:a}=e;typeof n=="string"&&typeof r=="number"&&typeof o=="number"&&(t={refName:n,start:r,end:o,assemblyName:typeof a=="string"?a:void 0})}return t}function Uc(e,t,n){let r=e.connectedViewId;return r===void 0||r===t||!n.has(r)}function qs(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Kc(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(n=>Q(n)&&Array.isArray(n.displays)?n.displays.filter(r=>Q(r)&&r.type==="LinearGraphDisplay"):[])}function Js(e,t,n){let r=[],o=Qe(e),a=new Set(o.map(i=>Q(i)?i.id:void 0));for(let i of o){if(Q(i)&&i.id===t)for(let s of Kc(i)){let d=Ks(s.hoverHighlight);d&&qs(d,n)&&r.push({key:typeof s.id=="string"?s.id:"graph-track",region:d})}if(Q(i)&&i.type==="GraphGenomeView"&&Uc(i,t,a)){let s=Ks(i.hoverHighlight);s&&qs(s,n)&&r.push({key:typeof i.id=="string"?i.id:"graph",region:s})}}return r}var Ie=w(Be(),1),qc=(0,ed.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,Qs.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),Jc=(0,pr.observer)(function({model:t,region:n}){let{classes:r}=qc(),o=t.getHighlightCoords(n);return o?(0,Ie.jsx)("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:o.left,width:o.width}}):null}),Zc=(0,pr.observer)(function({model:t}){let{views:n}=(0,Zs.getSession)(t);return(0,Ie.jsx)(Ie.Fragment,{children:Js([...n],t.id,t.assemblyNames).map(({key:r,region:o})=>(0,Ie.jsx)(Jc,{model:t,region:o},`graph-hover-${r}`))})}),td=Zc;var nd=w(Be(),1),Qc="LinearGenomeView-TracksContainerComponent";function ur(e){e.contributeToExtensionPoint(Qc,({model:t})=>(0,nd.jsx)(td,{model:t},"graphgenomeview-hover-highlight"))}var rd=w(le(),1);function ep(e){return e.views(t=>({get adapterConfig(){return ge(t,t.parentTrack.configuration)}}))}function mr(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof rd.DisplayType&&Zn.includes(t.name)&&t.extendStateModel(ep),t))}var od="GraphGenomeView";var ad="6.0.1";var lr=class extends id.default{constructor(){super(...arguments);this.name=od;this.version=ad}install(n){Jn(n),rr(n),Qn(n),er(n),ur(n),dr(n),ir(n),yn(n),kn(n),cr(n),mr(n),n.addRpcMethod(()=>new Oe(n)),n.addRpcMethod(()=>new We(n)),n.addRpcMethod(()=>new _e(n))}configure(n){try{(0,sd.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:Nt,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{lr as default};
|
|
7
7
|
//# sourceMappingURL=jbrowse-plugin-graphgenomeviewer.esm.js.map
|