jbrowse-plugin-graphgenomeviewer 4.0.8 → 4.0.9

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,3 +1,3 @@
1
1
  import{a as Po}from"./chunks/chunk-KWAXLUPQ.js";import{c as Gt,d as Tt}from"./chunks/chunk-JVMMNMQG.js";import{a as Io}from"./chunks/chunk-D7XFR2IV.js";import{a as U}from"./chunks/chunk-J4OLMLS5.js";import{A as le,B as Yt,C as he,D as Ut,E as O,I as Jt,J as Zt,K as Qt,L as en,N as be,O as tn,P as nn,Q as rn,R as ye,S as J,T as on,V as an,a as Mt,b as Rt,d as Fo,e as vt,f as q,h as Ft,i as ce,j as de,o as Et,p as Dt,q as Ot,r as _t,s as De,w as zt,x as Oe,y as Xt,z as ge}from"./chunks/chunk-VXUVWSY5.js";import{c as Bt}from"./chunks/chunk-ZNGDWZ6Z.js";import{a as V}from"./chunks/chunk-FCWXYIFC.js";import{B as ze,D as Kt,G as qt,H as Eo,b as T,d as At,f as Nt,g as Pt,i as ue,j as He,l as It,m as Ct,n as Vt,o as pe,p as Ht,q as me,r as jt,s as $t,t as Wt,z as _e}from"./chunks/chunk-NBDRTXH2.js";import"./chunks/chunk-F4C3BEPV.js";import{a as K,b as Co,c as Bo,d as vo,e as se}from"./chunks/chunk-XEJ47DLD.js";import{a as P,b}from"./chunks/chunk-FY3BTKY4.js";var un=P((Za,sn)=>{sn.exports=JBrowseExports["@jbrowse/core/Plugin"]});var we=P((ti,dn)=>{dn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var I=P((ni,pn)=>{pn.exports=JBrowseExports["@jbrowse/core/configuration"]});var yn=P((ii,bn)=>{bn.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var z=P((si,fn)=>{fn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var Gn=P((gi,Rn)=>{Rn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var An=P((li,Tn)=>{Tn.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var Pn=P((hi,Nn)=>{Nn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var Cn=P((bi,In)=>{In.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var Wr=P((iu,$r)=>{$r.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"]});var Yr=P((su,Xr)=>{Xr.exports=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"]});var Zr=P((pu,Jr)=>{Jr.exports=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"]});var eo=P((mu,Qr)=>{Qr.exports=JBrowseExports["@jbrowse/render-core/displayPhase"]});var To=b(un(),1),Ao=b(U(),1);var fe=b(K(),1),cn=(0,Mt.createSvgIcon)([(0,fe.jsx)("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),(0,fe.jsx)("circle",{cx:"14.8",cy:"18",r:"2"},"1"),(0,fe.jsx)("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var hn=b(we(),1);var mn=b(I(),1),gn=b(V(),1),Vo=(0,mn.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"}},subgraphSnarls:{type:"stringEnum",model:gn.types.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:"contained"},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:1e3,advanced:!0},nodeLimit:{type:"number",defaultValue:1e5,advanced:!0}},{explicitlyTyped:!0,preProcessSnapshot:e=>e.uri?{...e,gbzDbLocation:{uri:e.uri,baseUri:e.baseUri}}:e}),ln=Vo;function je(e){e.addAdapterType(()=>new hn.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:ln,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-WI3VYEF2.js").then(t=>t.default)}))}var wn=b(yn(),1),xn=b(z(),1);function Ho(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var Z=class extends xn.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:r,region:o,sessionId:a,opts:i,signal:s}=n,{dataAdapter:g}=await(0,wn.getAdapter)(this.pluginManager,a,r);return Ho(g)?g.getSubgraph(o,{...i,signal:s}):(console.warn(`[GetSubgraph] ${g.constructor.name} does not implement getSubgraph`),"")}};var kn=b(se(),1),Sn=b(z(),1),Ln=b(V(),1),Do=(0,kn.lazy)(()=>import("./chunks/AddTrackWorkflow-LRRSAVSX.js"));function $e(e){e.addAddTrackWorkflowType(()=>new Sn.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:Do,stateModel:Ln.types.model({})}))}var Mn=b(z(),1);var We;function Xe(){return We??=import("./chunks/bandage-layout-FIOZ7B3E.js").then(e=>e.default()).catch(e=>{throw We=void 0,e}),We}var Q=class extends Mn.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 Xe();a?.("Computing layout");let s=performance.now(),g=i.computeLayout(r,o),p=performance.now()-s;return{result:g,duration:p}}};var Or=b(se(),1),_r=b(Gn(),1),zr=b(An(),1);var Vr=b(I(),1),Hr=b(Pn(),1),Dr=b(U(),1),N=b(V(),1);var _=b(I(),1),Ir=b(vo(),1),M=b(U(),1),Cr=b(Po(),1),l=b(V(),1),Br=b(Cn(),1),vr=b(Fo(),1),A=b(Rt(),1);var Oo=.9,Ye=2,_o=1e3;function Bn(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 g=[],p=1/0,f=-1/0,L=1/0,m=[],c=[];for(let h of ce(s)){let y=a.get(h),k=y&&n[y.id];if(!(!y||!k?.length)){if(T(y)&&(y.stable.start<s.start||y.stable.start>=s.end)){c.push(k[Math.floor(k.length/2)]);continue}m.push(y.id),g.push(de(k.length===1?[k[0],k[0]]:k));for(let x of k)p=Math.min(p,x.x),f=Math.max(f,x.x),L=Math.min(L,x.y)}}if(m.length===0)continue;let w={x:(p+f)/2,y:L},S=c.length?{x:c.reduce((h,y)=>h+y.x,0)/c.length,y:c.reduce((h,y)=>h+y.y,0)/c.length}:w,u=new Map;for(let h of s.routes??[])for(let y of new Set(h.steps))u.set(y,(u.get(y)??0)+1);let d=[];for(let h of s.routes??[]){if(s.longestAlleleLength<_o)break;if(h.steps.length===0)continue;let y=Math.min(...h.steps.map(G=>u.get(G))),k,x=-1;for(let G of h.steps)if(u.get(G)===y)for(let B of n[G]??[]){let E=Math.hypot(B.x-S.x,B.y-S.y);E>x&&(x=E,k=B)}k&&d.push({route:h,at:k,text:zo(h,r)})}i.push({bubble:s,...q(s,o),path:g.join(""),labelAt:w,members:m.length,nodeIds:m,whole:m.length>=Oo*e.nodes.length,routes:d})}return i}function zo(e,t){let n=[...new Set(e.walks.map(t))].sort(),r=n.slice(0,Ye).join(", "),o=n.length>Ye?` +${n.length-Ye}`:"";return`${r}${o} \xB7 ${vt(e.bp)}`}function vn(e){if(!e.nodes.some(T))return[];let t=new Map(e.nodes.map(m=>[m.id,m])),n=Et(e),r=new Map(n.map((m,c)=>[m,c])),o=new Int32Array(n.length+1),a=new Map,i=new Set;for(let m of e.edges){let c=r.get(m.from),w=r.get(m.to);if(c===void 0||w===void 0||c===w)continue;i.add(`${m.from}>${m.to}`).add(`${m.to}>${m.from}`);let[S,u]=c<w?[c,w]:[w,c];o[S+1]++,o[u]--;let[d,h]=c<w?[m.from,m.to]:[m.to,m.from];(a.get(d)??a.set(d,new Set).get(d)).add(h)}for(let m=1;m<o.length;m++)o[m]+=o[m-1];let s=e.nodes.filter(T).sort((m,c)=>m.stable.start-c.stable.start),g=new Set([s[0].id,s.at(-1).id]),p=s.map(m=>[m,r.get(m.id)]).filter(([m,c])=>g.has(m.id)||o[c]===0).sort(([m,c],[w,S])=>c-S||m.stable.start-w.stable.start),f=e.paths?.map(m=>{let c=new Map;return m.nodeIds.forEach((w,S)=>{c.has(w)||c.set(w,S)}),c}),L=[];for(let m=0;m+1<p.length;m++){let[c,w]=p[m],[S,u]=p[m+1],d=n.slice(w+1,u);if(d.length===0)continue;let h=new Map([[c.id,{min:0,max:0,n:1}]]);for(let v of[c.id,...d]){let D=h.get(v);if(D)for(let Y of a.get(v)??[]){if(r.get(Y)>u)continue;let Lt=Y===S.id?0:t.get(Y).length,Ve=h.get(Y);h.set(Y,{min:Math.min(Ve?.min??1/0,D.min+Lt),max:Math.max(Ve?.max??-1/0,D.max+Lt),n:Math.min(Bt,D.n+(Ve?.n??0))})}}let y=f&&jo(e,t,f,c.id,S.id),k=y?.n?y:void 0,x=k??h.get(S.id)??{min:0,max:0,n:0},G=y!==void 0&&y.left>0,B=c.stable.start+c.length,E=S.stable.start,H=[c.id,...d.filter(v=>T(t.get(v))),S.id],kt=H.some((v,D)=>D>0&&!i.has(`${H[D-1]}>${v}`)),No=kt||G,St=kt&&!k;L.push({refName:c.stable.refName,start:B,end:E,segmentCount:d.length+2,pathCount:x.n,inversion:!1,shortestAlleleLength:St?E-B:x.min,longestAlleleLength:St?E-B:x.max,segments:[c,...d.map(v=>t.get(v)),S].map(v=>v.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:No,routes:k?.routes})}return L}function jo(e,t,n,r,o){let a=new Map,i=1/0,s=-1/0,g=0;return e.paths.forEach((p,f)=>{let L=n[f].get(r),m=n[f].get(o);if(L===void 0||m===void 0){(L!==void 0||m!==void 0)&&g++;return}let c=p.nodeIds.slice(Math.min(L,m)+1,Math.max(L,m));m<L&&c.reverse();let w=0;for(let d of c)w+=t.get(d)?.length??0;let S=c.join(","),u=a.get(S)??{steps:c,bp:w,walks:[]};u.walks.push(p.name),a.set(S,u),i=Math.min(i,w),s=Math.max(s,w)}),a.size||g?{min:i,max:s,n:a.size,left:g,routes:[...a.values()]}:void 0}function Fn(e,t){let n=new Set(t),r=e.nodes.filter(i=>n.has(i.name)),o=new Set(r.map(i=>i.id)),a=e.paths?.map(i=>({...i,nodeIds:i.nodeIds.filter(s=>o.has(s))})).filter(i=>i.nodeIds.length>0);return{name:e.name,nodes:r,edges:e.edges.filter(i=>o.has(i.from)&&o.has(i.to)),...a?.length?{paths:a}:{},anchorPaths:e.anchorPaths,pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}var Ue=new Set(["Gff3TabixAdapter","Gff3Adapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),$o=/gene|refseq|gencode|ensembl|annotation/i;function En(e,t){if(t)return e.find(r=>r.trackId===t);let n=e.filter(r=>Ue.has(r.adapterType));return n.find(r=>$o.test(`${r.trackId} ${r.name??""}`))??n[0]}function C(e,t){return typeof e.get=="function"?e.get(t):e[t]}function Vn(e,t){C(e,"type")==="exon"&&t.push({start:C(e,"start"),end:C(e,"end")});let r=C(e,"subfeatures");for(let o of r??[])Vn(o,t)}function Wo(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 Hn(e){let t=[];for(let n of e){let r=C(n,"gene_name")??C(n,"name")??C(n,"id"),o=C(n,"start"),a=C(n,"end");if(!r||!(a>o))continue;let i=[];Vn(n,i),t.push({name:r,refName:C(n,"refName"),start:o,end:a,strand:C(n,"strand")??0,exons:i.length?Wo(i):[{start:o,end:a}]})}return t}function Dn(e){return e.split("#").at(-1)}function On(e,t,n){let r=new Map,o=new Map;for(let i of e.nodes)if(T(i)&&n[i.id]?.length){let{refName:s}=i.stable,g=o.get(s)??o.set(s,Dn(s)).get(s),p=r.get(g)??r.set(g,{nodes:[],reach:0}).get(g);p.nodes.push(i),p.reach=Math.max(p.reach,i.length)}for(let{nodes:i}of r.values())i.sort((s,g)=>s.stable.start-g.stable.start);let a=[];for(let i of t){let s=r.get(Dn(i.refName));if(!s)continue;let g=[],p,f=1/0,L=0,m=(i.start+i.end)/2,{nodes:c,reach:w}=s;for(let S=Nt(c,i.start-w);S<c.length&&c[S].stable.start<i.end;S++){let u=c[S],d=u.stable.start,h=d+u.length;if(h<=i.start)continue;let y=n[u.id];L+=Math.min(h,i.end)-Math.max(d,i.start);for(let G of i.exons){let B=Math.max(G.start,d),E=Math.min(G.end,h);if(E<=B)continue;let H=De(y,(B-d)/u.length,(E-d)/u.length);H.length===1&&H.push({...H[0]}),g.push(de(H))}let k=Math.min(Math.max(m,d),h),x=Math.abs(k-m);if(x<f){f=x;let[G]=De(y,(k-d)/u.length,(k-d)/u.length);p=G}}p&&a.push({gene:i,exons:g.join(""),at:p,covered:L/(i.end-i.start)})}return a}function _n(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 zn(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function jn(e,t){let n=zn(e.dynamicBlocks.contentBlocks.filter(o=>o.refName===t.refName&&o.assemblyName===t.assemblyName)),{bpPerPx:r}=e;return n&&r>0?{scale:1/r,translateX:n.offsetPx-e.offsetPx-n.start/r}:void 0}function Ke(e){let t=zn(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 qe(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 $n(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=qe(t,1/0,!1);return Math.abs(e.start-r.start)<1&&Math.abs(e.end-r.end)<1}function Xo(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 ee(e){let t={};for(let n of e)Xo(n,t);return t}function Je(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 Wn=62,Yo=60;function Uo(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===Wn||i===Yo)&&(o(a),n=i===Wn?"+":"-",r=a+1)}return o(e.length),t}function Ze(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(ee(o))}else if(r.startsWith("S")){let[,o,...a]=r.split(" "),i,s,g,p=!1,f=a[0]??"*";/^\d+$/.test(f)?(i=+f,s=a[1]??"*",g=a.slice(2)):(p=!0,s=f,i=s==="*"?0:s.length,g=a.slice(1));let L=ee(g);p&&"LN"in L&&(i=+L.LN),t.nodes.push({id:o,length:i,sequence:s,tags:L})}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:ee(s)})}else if(r.startsWith("L")){let[,o,a,i,s,g,...p]=r.split(" ");o&&i&&s&&t.links.push({source:o,target:i,strand1:a,strand2:s,cigar:g??"*",tags:ee(p)})}else if(r.startsWith("W")){let[,o,a,i,s,g,p,...f]=r.split(" ");o&&a&&i&&s&&g&&p&&t.walks.push({sample:o,haplotype:+a,contig:i,start:s==="*"?-1:+s,end:g==="*"?-1:+g,segments:Uo(p),tags:ee(f)})}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 Ko(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}}function qo(e){return[...e.paths.map(t=>({...me(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:t.start===-1?0:t.start,steps:t.segments.map(n=>({id:n.id,strand:n.strand==="-"?"-":"+"}))}))]}function Jo(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 te=e=>typeof e=="number"&&e>0?e:void 0;function Zo({tags:e,length:t}){let n=te(e.RC)??te(e.FC)??te(e.KC);return te(e.dp)??te(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function Qo(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:Je(e),samples:Jo(e)}}function Xn(e,t="Imported GFA"){let n=[],r=[],{canonical:o,traversals:a}=Ko(e),i=c=>`${c}${o.get(c)??"+"}`;for(let c of e.nodes){let w=Zo(c)??Math.max(a.get(c.id)??1,1);n.push(Qo(c,o.get(c.id)??"+",w))}for(let c of e.links)r.push({from:i(c.source),to:i(c.target),fromStrand:c.strand1==="-"?"-":"+",toStrand:c.strand2==="-"?"-":"+"});let s=[],g=new Map,p=(c,w)=>[c,w].sort().join("--");function f(c,w){for(let S=0;S<c.length-1;S++){let u=p(c[S],c[S+1]);g.has(u)||g.set(u,new Set),g.get(u).add(w)}}for(let c of e.paths){let w=c.path.split(",").map(S=>i(S.slice(0,-1)));s.push({name:c.name,nodeIds:w}),f(w,c.name)}for(let c of e.walks){let w=c.segments.map(u=>i(u.id)),S=`${c.sample}#${c.haplotype}#${c.contig}`;s.push({name:S,nodeIds:w,sample:c.sample,haplotype:c.haplotype,contig:c.contig}),f(w,S)}for(let c of r){let w=g.get(p(c.from,c.to));w&&w.size>0&&(c.pathIds=[...w])}let L=new Map(e.nodes.map(c=>[c.id,c.length])),m=e.paths.length>0||e.walks.length>0?jt(qo(e),c=>L.get(c)??0):void 0;return{name:t,nodes:n,edges:r,paths:s.length>0?s:void 0,anchorPaths:m?.anchorPaths,pathVisits:m?.pathVisits,anchoredBy:n.some(c=>c.stable)?"tags":void 0}}function Yn(e,t){let n=e.nodes.filter(u=>T(u)&&(t[u.id]?.length??0)>0);if(n.length<2)return t;let r=n.map(u=>{let d=t[u.id],h=d[Math.floor(d.length/2)];return{x:h.x,y:h.y,r:u.stable.start+u.length/2,w:u.length}}),o=r.reduce((u,d)=>u+d.w,0),a=r.reduce((u,d)=>u+d.x*d.w,0)/o,i=r.reduce((u,d)=>u+d.y*d.w,0)/o,s=r.reduce((u,d)=>u+d.r*d.w,0)/o,g=0,p=0;for(let u of r)g+=u.w*(u.x-a)*(u.r-s),p+=u.w*(u.y-i)*(u.r-s);let f=-Math.atan2(p,g),L=Math.cos(f),m=Math.sin(f),c={};for(let[u,d]of Object.entries(t))c[u]=d.map(h=>{let y=h.x-a,k=h.y-i;return{x:a+L*y-m*k,y:i+m*y+L*k}});let w=0,S=0;for(let u of e.nodes)if(!T(u))for(let d of c[u.id]??[])d.y>i?w++:S++;if(S>w)for(let u of Object.values(c))for(let d of u)d.y=2*i-d.y;return c}var Un=30;function ea(e,t){let{opts:n}=t,r=new Map(t.nodes.map(m=>[m.id,ue(n,m.length)])),o=m=>r.get(m)??n.minimumNodeLength,a=e.nodes.filter(T).sort((m,c)=>m.stable.start-c.stable.start),i=new Map,s=0;for(let m of a)i.set(m.id,{x:s,y:0}),s+=o(m.id)+n.edgeLength;let g=ge(e),p=new Map(a.map(m=>[m.id,0])),f=a.map(m=>m.id);for(let m of f){let c=i.get(m),w=p.get(m)+1;for(let S of g.get(m)??[])p.has(S)||(p.set(S,w),i.set(S,{x:c.x+o(m)/2,y:Un*w}),f.push(S))}let L=0;for(let m of e.nodes)i.has(m.id)||i.set(m.id,{x:L++*s/e.nodes.length,y:Un*3});return i}function Kn(e,t){let n=ea(e,t);return t.nodes.map(r=>({...r,...n.get(r.id)}))}function qn(e,t,n={}){let r=Wt(Xn(Ze(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}function ta(e,t,n){let r=e.nodes.some(T);return{graph:{nodes:r?Kn(e,t):t.nodes,edges:e.edges},options:{quality:n.quality,linearLayout:n.linearLayout,...t.opts,...r?{rotateComponents:!1}:{}}}}function Jn(e,t){let n=e.nodes.some(T);return`${t.quality}|${t.linearLayout}|${t.bubbleSpread}|${n}|${e.referencePath??""}`}async function Zn(e,t,n){let r=Ct(t.bubbleSpread),o=Ot(e),{result:a,duration:i}=await n(ta(o.graph,He(o.graph,r),t)),s=He(e,r),g=new Map(s.nodes.map(f=>[f.id,ue(s.opts,f.length)])),p=_t(a.nodePositions,o.runs,f=>g.get(f)??0);return{result:{...a,nodePositions:e.nodes.some(T)?Yn(e,p):p},duration:i}}function na(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 F=40,ra=1e-6,oa=100;function ne(e){return Math.max(ra,Math.min(oa,e))}function Qe(e,t,n){let r=t-e.h*n;return F-e.minY*n+Math.max(0,r)/2}function Qn(e,t,n,r){let o=t-F*2,a=n-F*2;if(o<=0||a<=0||!(e.w>0||!r&&e.h>0))return;let i=e.w>0?o/e.w:1/0,s=e.h>0?a/e.h:1/0,g=ne(r?i:Math.min(i,s));return{scale:g,translateX:F-e.minX*g+(o-e.w*g)/2,translateY:Qe(e,a,r?1:g)}}function er(e,t={}){let{minX:n,minY:r,maxX:o,maxY:a}=na(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}}var et=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),aa=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function nr(e,t){return t?e.find(r=>r.trackId===t):e.filter(r=>et.has(r.adapterType)).find(r=>aa.test(`${r.trackId} ${r.name??""}`))}function ke(e,t){return typeof e.get=="function"?e.get(t):e[t]}var rr=/^\w+=[^;]*(;\w+=[^;]*)*$/;function ia(e){let t=ke(e,"name");if(!(typeof t!="string"||!rr.test(t)))return Object.fromEntries(t.split(";").map(n=>{let r=n.indexOf("=");return[n.slice(0,r),n.slice(r+1)]}))}function xe(e,t){let n=ke(e,t);return n!==void 0?n:ke(e,"INFO")?.[t]??ia(e)?.[t]}var or=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],sa=["RUL","period","PERIOD","consensusSize","unit","unitLength"],ua=["TRID","REPID","VARID","ID","name","id"];function Se(e,t){for(let n of t){let r=xe(e,n),o=String((Array.isArray(r)?r[0]:r)??"").split(",")[0].trim();if(o!==""&&o!==".")return o}}var ca=/^[ACGTURYSWKMBDHVN]+$/i;function da(e){let t=Number(Se(e,sa));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=Se(e,or);return n&&ca.test(n)?n.length:void 0}function tr(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 pa(e){let t=ke(e,"samples"),n={};for(let[r,o]of Object.entries(t??{})){let a=tr(o.SD),i=tr(o.AL).flatMap((s,g)=>s!==void 0&&s>0?[a[g]===void 0?{bp:s}:{bp:s,spanningReads:a[g]}]:[]);i.length>0&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}function ar(e){let t=[];for(let n of e){let r=xe(n,"start"),o=xe(n,"end"),a=da(n);if(!(o>r)||a===void 0)continue;let i=xe(n,"refName"),s=Se(n,or),g=Se(n,ua);t.push({key:`${i}:${r}-${o}`,name:(g&&!rr.test(g)?g:void 0)??(s&&s.length<=12?`(${s})n`:`${i}:${(r+1).toLocaleString()}-${o.toLocaleString()}`),refName:i,start:r,end:o,unit:a,motif:s,calls:pa(n)})}return t.sort((n,r)=>n.start-r.start)}var ma=e=>e.bp1>e.bp0;function ir(e,t){let n=e.filter(ma);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],p=Math.min(s.c.x0-i.c.x1,24)-(s.s0-i.s1);if(p>0){let f=(i.s1-i.s0)/2,L=(s.s1-s.s0)/2,m=Math.min(p/2,f),c=Math.min(p-m,L);m=Math.min(p-c,f),i.trimRight=m,s.trimLeft=c}}let o=[];for(let{c:a,s0:i,s1:s,trimLeft:g,trimRight:p}of r)o.push({tx:a.x0,sx:i+g},{tx:a.x1,sx:s-p});return o}function sr(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 f=a+i>>1;e[f].tx<=t?a=f:i=f}let s=e[a],g=e[i],p=g.tx-s.tx;return p>0?s.sx+(t-s.tx)/p*(g.sx-s.sx):s.sx}var ga=.05,Le=9;function la(e,t){let{minY:n,maxY:r}=e.layout.bounds,o=r-n;return e.columns&&o>0?Math.max(ga,Math.min(1,t/o)):1}function ur(e,t){let{scaleX:n,translateX:r,translateY:o}=t,a=t.scaleY*la(e,t.usableHeight),i=g=>(g-e.yOffset)*a+o,{columns:s}=e;if(s){let g=ir(s,p=>p*n+r);return{x:p=>sr(g,p),y:i,yScale:a}}return{x:g=>g*n+r,y:i,yScale:a}}function cr(e,{x:t,y:n},r,o){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-Le)<=r&&r<=t(i.x+i.pixelWidth+Le)&&n(i.y-Le)<=o&&o<=n(i.y+i.contentHeight+Le)&&(a=i.name)}),a}function Me(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function dr(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 pr(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 mr(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}function gr(e,t,n,r,o){let a=ne(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}}function lr(e,t){let n=e.paths?.find(p=>p.name===t);if(!n)return;let r=new Map(e.nodes.map(p=>[p.id,p])),o=new Map;e.edges.forEach((p,f)=>{o.set(`${p.from}>${p.to}`,f)});let a=new Set(n.nodeIds),i=new Set;for(let p=1;p<n.nodeIds.length;p++){let f=n.nodeIds[p-1],L=n.nodeIds[p],m=o.get(`${f}>${L}`)??o.get(`${L}>${f}`);m!==void 0&&i.add(m)}let s=p=>p.reduce((f,L)=>f+(r.get(L)?.length??0),0),g=e.referencePath?e.paths.find(p=>me(p.name).name===e.referencePath):void 0;return{name:t,nodeIds:a,edgeIndexes:i,steps:n.nodeIds.length,bp:s(n.nodeIds),referenceBp:g&&g!==n?s(g.nodeIds):void 0}}function Re(e){return typeof e=="object"&&e!==null}function ha(e){return Re(e)&&typeof e.get=="function"}function ba(e){let t=ha(e)?e.get("name"):Re(e)?e.name:void 0;return typeof t=="string"?t:void 0}function hr(e){let t;if(Re(e)&&Re(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:ba(e.hoverFeature)})}return t}function br(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function yr({hover:e,nodes:t}){let n,r;for(let o of t)o.name===e.featureName?n=o.id:r===void 0&&T(o)&&e.coord>=o.stable.start&&e.coord<o.stable.start+o.length&&(r=o.id);return n??r??null}var tt=b(I(),1);function fr(e){return typeof e=="object"&&e!==null}function ya(e){return fr(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function re(e){return e.flatMap(t=>fr(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function oe({views:e,connectedViewId:t,assemblyName:n}){let r=re(e).filter(a=>ya(a)).filter(a=>a.assemblyNames.includes(n));return r.find(a=>a.id===t)??(r.length===1?r[0]:void 0)}function xr(e,t,n){n.catch(r=>{console.error(`[GraphGenomeView] ${t}`,r),e.notifyError?.(`${t}: ${r}`,r)})}var fa=1e3;function nt(e,t=fa){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 kr(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 Sr({session:e,location:t,assembly:n,connectedViewId:r,tracks:o=[]}){let a=oe({views:e.views,connectedViewId:r,assemblyName:n}),i;return a?(xr(e,`Could not show ${n} ${J(t)}`,Promise.resolve(a.navToLocString(ye(t),n))),i=a.id):i=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${J(t)}`,init:{assembly:n,loc:ye(t),tracks:o}}).id,i}function Lr({session:e,location:t,assembly:n,connectedViewId:r}){let o=oe({views:e.views,connectedViewId:r,assemblyName:n});return o?.addToHighlights?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),o!==void 0}function wr(e,t){if(t===void 0)return[];let n=e.tracks.find(o=>(0,tt.readConfObject)(o,"trackId")===t),r=n?(0,tt.readConfObject)(n,"assemblyNames"):[];return Array.isArray(r)?r.filter(o=>typeof o=="string"):[]}function Mr({session:e,contributors:t,trackId:n,graphTrackId:r}){let o=wr(e,r),a=wr(e,n),i=t.filter(p=>a.includes(p.sample)),s=i.length>=2?i:t,g={init:{views:s.map(p=>({assembly:p.sample,loc:ye(p),...r!==void 0&&o.includes(p.sample)?{tracks:[r]}:{}})),tracks:n?s.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?xr(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",g)):e.addView("LinearSyntenyView",g)}var Ge=b(I(),1),wa="FeatureTrack";function Rr({session:e,assemblyName:t,first:n}){let r=[];for(let o of e.tracks){let a=(0,Ge.readConfObject)(o,"type"),i=(0,Ge.readConfObject)(o,"assemblyNames"),s=(0,Ge.readConfObject)(o,"trackId");a===wa&&Array.isArray(i)&&i.includes(t)&&typeof s=="string"&&s!==n&&r.push(s)}return n?[n,...r]:r}var Te=b(I(),1),Gr=b(Io(),1),xa="SyntenyTrack";function Tr(e,t){let n=new Set(t),r=[];for(let o of e.tracks){let a=(0,Te.readConfObject)(o,"type"),i=(0,Te.readConfObject)(o,"assemblyNames"),s=(0,Te.readConfObject)(o,"trackId");if(a===xa&&typeof s=="string"&&Array.isArray(i)){let g=i.filter(p=>n.has(p)).length;g>=2&&r.push({trackId:s,name:(0,Gr.getTrackName)(o,e),coverage:g})}}return r.sort((o,a)=>a.coverage-o.coverage)}var Sa=600,rt=160,La=340,Ar=".segs.bed.gz";function Ma(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(Ar)?n.slice(0,-Ar.length):void 0}var Nr=1.4,Ra=1.6,Ga=150,Ta=1,Aa={nodeStrokes:[],nodeStrokeRuns:new Map,arrows:[],arrowRuns:new Map,edgeCurves:[],edgeCurveRuns:new Map};function ae(...e){}var Ne=5e6;function j(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var Na=2e4;function Pr(e){return e.lastGeometryStrokeCount!==void 0&&!e.viewportRebuildPending&&e.geometryViewportDirty===e.viewportDirty&&e.paintedGeometryVersion===e.geometryVersion}function ot(e){return dr(e,e.axisScale,e.paneWidth,e.canvasHeight)}var Ae=new WeakMap,Pa=4;function Ia(e){let t=Ae.get(e);return t||(t=new Map,Ae.set(e,t)),t}function Ca(e,t){let n=Ae.get(e);n&&e!==t&&Ae.set(t,n)}function Ba(e,t,n){e.size>=Pa&&e.delete(e.keys().next().value),e.set(t,n)}function Pe(){return l.types.compose("GraphPane",(0,Br.RenderLifecycleMixin)(),l.types.model({layoutQuality:l.types.optional(l.types.number,2),linearLayout:l.types.optional(l.types.boolean,!1),layoutMode:l.types.maybe(l.types.enumeration(he)),colorScheme:l.types.maybe(l.types.enumeration(pe)),bubbleSpread:l.types.optional(l.types.enumeration(It),"auto"),nodeWidth:l.types.optional(l.types.enumeration(Kt),"depth"),showBubbles:l.types.optional(l.types.boolean,!0),showDeletionEdges:l.types.optional(l.types.boolean,!1),showGenes:l.types.optional(l.types.boolean,!0),geneTrackId:l.types.optional(l.types.string,""),repeatTrackId:l.types.optional(l.types.string,""),repeatKey:l.types.optional(l.types.string,""),walkRowSamples:l.types.maybe(l.types.frozen()),highlightedPath:l.types.optional(l.types.string,""),referencePath:l.types.optional(l.types.string,""),showPerf:l.types.optional(l.types.boolean,!1),contigThickness:l.types.optional(l.types.number,6),connectorThickness:l.types.optional(l.types.number,2),darkMode:l.types.optional(l.types.boolean,!1),scale:l.types.optional(l.types.number,1),translateX:l.types.optional(l.types.number,0),translateY:l.types.optional(l.types.number,0),drawPaths:l.types.optional(l.types.boolean,!1),paneHeight:l.types.maybe(l.types.number),maxGraphNodes:l.types.optional(l.types.number,Na),colorDomain:l.types.maybe(l.types.frozen()),connectedViewId:l.types.maybe(l.types.string)})).volatile(()=>({graph:void 0,graphRegion:void 0,layoutResult:void 0,legendSize:{width:0,height:0},indexBubbles:void 0,geneFeatures:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredEdge:null,selectedNode:null,viewportDirty:0,positionsVersion:0,geometryVersion:0,builtViewport:void 0,draggingNode:null,isPanning:!1,viewportOwner:"fit",viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0,paintedGeometryVersion:-1,viewportRebuildPending:!1,geometryViewportDirty:-1})).views(e=>({get defaultLayoutMode(){return"force"},get defaultColorScheme(){return"auto"},get hasPendingSource(){return!1},get canRetryLoad(){return!1},get sourceTrack(){try{return(0,M.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,M.getContainingView)(e).width},get nodeById(){if(e.graph){let t=new Map;for(let n of e.graph.nodes)t.set(n.id,n);return t}},get nodeLengths(){let t=new Map;for(let n of e.graph?.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 Pr(e)},get showLoading(){return e.error===void 0&&(e.isLoading||e.hasPendingSource||e.graph!==void 0&&!Pr(e))},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?Ut(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 pathLegend(){let t=e.graph?.paths;return(e.drawPaths||e.layoutResult?.tubeMap)&&t&&_e(t.length)?ze(t):[]},get walkChoices(){let t=e.graph?.paths;return t?.length?ze(t):[]},get walkHighlight(){return e.graph&&e.highlightedPath?lr(e.graph,e.highlightedPath):void 0},get effectiveDrawPaths(){return e.drawPaths&&_e(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get rampDomain(){return e.colorDomain??e.graphRegion},get effectiveColorScheme(){return Ht(e.chosenColorScheme,e.graph)},get nodePositions(){return e.layoutResult?.nodePositions},get labelsNodeSizes(){return!e.layoutResult?.tubeMap},get rowLabels(){return e.layoutResult?.rowLabels??[]},get alleleDeletions(){return e.layoutResult?.alleleDeletions??[]},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?vn(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get sourceAdapter(){let t=e.sourceTrack;return t?(0,_.readConfObject)(t,"adapter"):void 0},get sourceTrackId(){let t=e.sourceTrack;return t?(0,_.readConfObject)(t,"trackId"):void 0},get assemblyTrackChoices(){let t=e.graphRegion;return t?(0,M.getSession)(e).tracks.filter(n=>(0,_.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,_.readConfObject)(n,"name"),adapterType:(0,_.readConfObject)(n,"adapter").type})):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>Ue.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>et.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return nr(e.repeatTrackChoices,e.repeatTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)}})).views(e=>({get nodeNeighbors(){return e.graph?ge(e.graph):void 0},get nodeInk(){return qt(e.graph,e.nodeById,e.contigThickness,e.nodeWidth)},get deletions(){return e.graph&&e.chosenLayoutMode!=="walkrows"&&!e.layoutResult?.tubeMap?Dt(e.graph):[]},get walkRowBars(){if(e.chosenLayoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?Oe(e.graph,t,t.unit):Oe(e.graph,e.graphRegion);if(!n)return;let r=e.walkRowSamples,o=r?n.rows.filter(a=>r.includes(a.sample)).sort((a,i)=>r.indexOf(a.sample)-r.indexOf(i.sample)||a.label.localeCompare(i.label)):n.rows;return{...n,rows:Qt(o,t?.calls)}},get drawnRowLabels(){let t=this.walkRowBars;return t?[t.reference,...t.rows].map((n,r)=>({label:n.label,y:r*20})):e.rowLabels},get bubbleGlyphs(){return(e.chosenLayoutMode==="variants"?e.bubbles:[]).map(n=>({bubble:n,...q(n,e.repeatArrays)}))},get genePins(){ae(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&e.chosenLayoutMode!=="variants"&&e.chosenLayoutMode!=="walkrows"&&!e.layoutResult?.tubeMap&&e.graph&&e.geneFeatures&&t?On(e.graph,e.geneFeatures,t):[]},get bubbleHalos(){ae(e.positionsVersion);let t=e.layoutResult?.nodePositions;if(!e.showBubbles||e.chosenLayoutMode==="variants"||e.chosenLayoutMode==="walkrows"||e.layoutResult?.tubeMap||!e.graph||!t)return[];let n=new Map(e.walkChoices.map(r=>[r.name,r.label]));return Bn(e.graph,e.bubbles,t,r=>n.get(r)??r,e.repeatArrays)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.graph&&!e.layoutResult?.tubeMap?Jt(e.graph,e.rampDomain):void 0},get assemblyNames(){let t=e.graphRegion;return t?[t.assemblyName]:[]},get scaleX(){return Me(e.scale,e.pixelRows).scaleX},get scaleY(){return Me(e.scale,e.pixelRows).scaleY},get axisScale(){return Me(e.scale,e.pixelRows)},get layoutBounds(){let t=e.layoutResult,n=this.walkRowBars;return t?er(t,{region:e.popStack.length===0?e.graphRegion:void 0,extent:n&&t.extent?Xt(n):void 0}):void 0},get canvasHeight(){let t=this.layoutBounds,n=e.paneWidth-F*2,r=Math.max(rt,e.paneHeight??Sa);if(!t)return r;if(e.pixelRows){let o=e.chosenLayoutMode==="variants"?La:rt;return Math.min(r,Math.max(o,t.h+F*2))}return t.w>0&&n>0?Math.min(r,Math.max(rt,t.h*n/t.w+F*2)):r}})).views(e=>({get geneTrack(){return En(e.geneTrackChoices,e.geneTrackId)},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 hoverHighlight(){let t,n=e.graphRegion,r=e.hoveredNode,o=e.nodeById,a=e.nodeNeighbors;if(n&&r!==null&&o&&a){let i=le({nodeId:r,nodeById:o,neighbors:a});i&&(t={refName:n.refName,assemblyName:n.assemblyName,...i})}return t}})).views(e=>({get contributingAssemblies(){let t=e.graph,n=t?At(t):[];return t?tn(t,{maxGap:n.length>0?Pt(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,M.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)}})).views(e=>({get launchableAssemblies(){return rn(kr(e.contributingAssemblies,e.graphRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.graphRegion;return t!==void 0&&oe({views:[...(0,M.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),r=n?be(n):void 0,o=r?nn(e.assemblyResolver,r):void 0,a=e.graphRegion,i=e.nodeById,s=e.nodeNeighbors,g=a&&i&&s?le({nodeId:t,nodeById:i,neighbors:s}):void 0,p=a&&g?{sample:a.assemblyName,haplotype:void 0,refName:a.refName,...g}:void 0;return{own:r&&o?{location:nt(r),assembly:o}:void 0,reference:a&&p?{location:nt(p),assembly:a.assemblyName}:void 0,highlight:a&&p?{location:p,assembly:a.assemblyName}:void 0}}})).views(e=>({get host(){let t;try{t=(0,M.getContainingView)(e)}catch{return}return _n(t)?t:void 0}})).views(e=>({get hostPlacesX(){let{host:t,graphRegion:n,layoutResult:r}=e;return t!==void 0&&t.initialized&&n!==void 0&&r?.referenceAxis===!0&&e.popStack.length===0&&!t.dynamicBlocks.contentBlocks.some(o=>o.refName===n.refName&&o.reversed)}})).views(e=>({get overlayLabels(){return zt(e)},get hostFrame(){let{host:t,graphRegion:n}=e;return e.hostPlacesX&&t&&n?jn(t,n):void 0},get tubeMapPicture(){let t=e.layoutResult?.tubeMap;return t?en(t.layout):void 0},get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?ur(t,{scaleX:e.scaleX,translateX:e.translateX,scaleY:e.scaleY,translateY:e.translateY,usableHeight:e.canvasHeight-F*2}):void 0}})).views(e=>({tubeMapNodeAt(t,n){let r=e.layoutResult?.tubeMap,o=e.tubeMapFrame;return r&&o?cr(r,o,t,n):null}})).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.geometryViewportDirty=e.viewportDirty,e.builtViewport=r,e.geometryVersion++},markPainted(t){e.paintedGeometryVersion=t},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=$t(n,t);Ca(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},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setHighlightedPath(t){e.highlightedPath=t},setPaneHeight(t){e.paneHeight=t},setWalkRowSamples(t){e.walkRowSamples=t},pairWithLinearView(t){let n=e.connectedViewId;n!==void 0&&re([...(0,M.getSession)(e).views]).some(o=>o.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=t},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.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,M.getSession)(e),i=e.graphRegion,s=i?le({nodeId:t,nodeById:r,neighbors:o}):void 0;(0,M.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:be(n)?.sample,contributingHaplotype:be(n)?.haplotype,carriedBy:n.samples?.join(", "),...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=ne(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=gr(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(){let t=e.layoutBounds,n=e.canvasHeight-F*2;if(e.viewportOwner==="host"){t&&n>0&&(e.translateY=Qe(t,n,e.scaleY));return}let r=t?Qn(t,e.paneWidth,e.canvasHeight,e.pixelRows):void 0;r&&(e.scale=r.scale,e.translateX=r.translateX,e.translateY=r.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()},releaseHost(){e.viewportOwner==="host"&&(e.layoutResult?.referenceAxis?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportRebuildPending=!0,e.viewportDirtyTimer=setTimeout(()=>{(0,l.isAlive)(e)&&e.setViewportDirty()},Ga)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,l.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}}).actions(e=>{let t;function n(u){let{rpcManager:d}=(0,M.getSession)(e);return d.call((0,M.getRpcSessionId)(e),"GraphComputeLayout",{...u,signal:t?.signal,statusCallback:h=>{e.setStatusMessage((0,M.statusMessageText)(h)??"")}})}function r(u){return Jn(u,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread})}function*o(u){let d=performance.now(),h=O(e.chosenLayoutMode).run(u,e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(h)return{result:h,duration:performance.now()-d};let y=Ia(u),k=r(u),x=y.get(k);if(x)return{result:x,duration:performance.now()-d};let G=yield Zn(u,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread},n);return Ba(y,k,G.result),G}let a=0;function*i(u){let d=++a,h=()=>e.graph===u&&d===a,y=t?.signal,k;try{k=yield*o(u)}catch(G){if(!h()||y?.aborted)return!1;throw G}let x=h();return x&&(e.layoutResult=k.result,e.setLayoutMs(k.duration)),x}function*s(u,d,h,y=!1){e.setStatusMessage("Parsing GFA");let k=qn(u,d,{referencePath:e.referencePath||h?.assemblyName,maxNodes:e.maxGraphNodes}),x=y?e.selectedNode:null;e.graph=k,e.graphRegion=h,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),x!==null&&e.nodeById?.has(x)&&(e.selectedNode=x),e.setStatusMessage("Computing layout"),yield*i(k)}let g=0;function p(){let u=++g;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>u===g,signal:t.signal}}function*f(u,d,h){let y=Ma(u);if(!(u.type!=="RgfaTabixAdapter"||y===void 0))try{let k=yield(0,M.getSession)(e).rpcManager.call((0,M.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${y}.bubbles.bed.gz`,baseUri:u.baseUri,assemblyNameToPanSN:u.assemblyNameToPanSN},regions:[d]});h()&&(e.indexBubbles=k.map(x=>({refName:d.refName,start:x.get("start"),end:x.get("end"),segmentCount:x.get("segmentCount"),pathCount:x.get("pathCount")??0,inversion:x.get("inversion"),shortestAlleleLength:x.get("shortestAlleleLength"),longestAlleleLength:x.get("longestAlleleLength"),segments:x.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(k){console.warn("[GraphGenomeView] no bubble index for this graph",k)}}function*L(u,d,h){let y=(0,M.getSession)(e),k=u?y.tracks.find(x=>x.trackId===u):void 0;if(k)try{return yield y.rpcManager.call((0,M.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:(0,_.readConfObject)(k,"adapter"),regions:[d]})}catch(x){console.warn(`[GraphGenomeView] no ${h} for this graph`,x);return}}function*m(u,d){let h=yield*L(e.geneTrack?.trackId,u,"genes");h&&d()&&(e.geneFeatures=Hn(h))}function*c(u,d){let h=yield*L(e.repeatTrack?.trackId,u,"repeats");h&&d()&&(e.repeatArrays=ar(h))}function*w(u,d,h){let{isLive:y,signal:k}=p();e.isLoading=!0,e.error=void 0;try{let x=typeof d=="string"?d:yield d(k);y()&&(yield*s(x,u,h))}catch(x){y()&&(console.error("[GraphGenomeView.loadWholeGFA]",x),e.error=x)}finally{y()&&e.finishLoading()}return y()}function S(){t?.abort(),t=void 0,g++,a++}return{clearGraph(){S(),e.graph=void 0,e.graphRegion=void 0,e.layoutResult=void 0,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearInteractionState(),e.clearPerfMetrics()},stopLoad(){S(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){S()},loadGFA:(0,l.flow)(function*(u,d="Imported GFA"){yield*w(d,u)}),loadGFAFromLocation:(0,l.flow)(function*(u,d){e.setStatusMessage("Fetching GFA");let h=yield*w("uri"in u?u.uri.split("/").pop()??"GFA":"GFA",y=>(0,Cr.openLocation)(u).readFile({encoding:"utf8",signal:y}),d);d&&h&&e.graph&&(yield*c(d,()=>e.graphRegion===d))}),cutSubgraph:(0,l.flow)(function*(u,d,h={}){let{isLive:y,signal:k}=p();e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let x=performance.now(),G=yield(0,M.getSession)(e).rpcManager.call((0,M.getRpcSessionId)(e),"GetSubgraph",{adapterConfig:u,region:d,opts:h,signal:k});if(!y())return;if(e.setFetchMs(performance.now()-x),!G)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");if(yield*s(G,J(d),d,!0),!y())return;e.setStatusMessage("Reading annotations"),yield Promise.all([h.tier==="coarse"?void 0:(0,l.flow)(f)(u,d,y),(0,l.flow)(m)(d,y),(0,l.flow)(c)(d,y)])}catch(x){y()&&(console.error("[GraphGenomeView.cutSubgraph]",x),e.error=x)}finally{y()&&e.finishLoading()}}),reloadRepeats:(0,l.flow)(function*(){let u=e.graphRegion,d=e.repeatTrack?.trackId;u&&(yield*c(u,()=>e.graphRegion===u&&e.repeatTrack?.trackId===d))}),reloadGenes:(0,l.flow)(function*(){let u=e.graphRegion,d=e.geneTrack?.trackId;u&&(yield*m(u,()=>e.graphRegion===u&&e.geneTrack?.trackId===d))}),popBubble:(0,l.flow)(function*(u){let d=e.graph;if(!d)return;let h=Fn(d,ce(u));if(h.nodes.length===0){(0,M.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:y}=p();e.popStack=[...e.popStack,{graph:d,layoutMode:e.chosenLayoutMode,label:d.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let k=`${Ft[q(u,e.repeatArrays).kind]} at ${u.refName}:${u.start.toLocaleString()}`;e.graph={...h,name:k},e.chosenLayoutMode==="variants"&&(e.layoutMode="force"),e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*i(e.graph))&&e.finishLoading()}catch(x){y()&&(e.error=x,e.finishLoading())}}),unpopBubble:(0,l.flow)(function*(){let u=e.poppedFrom;if(u){e.popStack=e.popStack.slice(0,-1),e.graph=u.graph,e.layoutMode=u.layoutMode,e.indexBubbles=u.indexBubbles,e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*i(u.graph))&&e.finishLoading()}catch(d){e.error=d,e.finishLoading()}}}),recomputeLayout:(0,l.flow)(function*(){let u=e.graph;if(u){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*i(u))&&e.finishLoading()}catch(d){console.error("[GraphGenomeView.recomputeLayout]",d),e.error=d,e.finishLoading()}}})}}).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,l.addDisposer)(e,(0,A.autorun)(()=>{e.layoutResult&&(0,A.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,l.addDisposer)(e,(0,A.autorun)(()=>{let r=hr((0,M.getSession)(e).hovered);(0,A.untracked)(()=>{let o=e.graphRegion,a=e.graph;o&&a&&e.setHoveredNode(r&&br(r,o)?yr({hover:r,nodes:a.nodes}):null)})})),(0,l.addDisposer)(e,(0,A.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,l.addDisposer)(e,(0,A.autorun)(()=>{let{scale:r}=e,o=ot(e);if(n){n=!1;return}let a=(0,A.untracked)(()=>e.builtViewport);a?.scale===r&&mr(a.bounds,o)||e.scheduleViewportDirty()})),(0,l.addDisposer)(e,(0,A.autorun)(()=>{let r=e.currentRenderingBackend,o=e.hoveredNode,a=e.hoveredEdge,i=e.selectedNode;if(ae(e.geometryVersion),r){let s=new Map;i!==null&&s.set(i,Ra),o!==null&&o!==i&&s.set(o,Nr),r.setNodeHighlights(s),r.setEdgeHighlight(a,Nr),e.renderNow()}}))}e.attachRenderingBackend(t,()=>({upload:n=>{n.resize(e.paneWidth,e.canvasHeight);let r=e.nodeById;if(e.layoutResult?.tubeMap)return ae(e.viewportDirty),n.uploadGeometry(Aa),e.setGeometryMetrics(0,0,{scale:(0,A.untracked)(()=>e.scale),bounds:(0,A.untracked)(()=>ot(e))}),!0;if(e.nodePositions&&e.graph&&r){ae(e.viewportDirty,e.positionsVersion);let o=performance.now(),a=(0,A.untracked)(()=>pr(ot(e),Ta)),i=Zt({nodePositions:e.nodePositions,graph:e.graph,nodeById:r,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:e.effectiveDrawPaths,nodeWidth:e.nodeWidth,highlight:e.walkHighlight,axis:(0,A.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:a,referenceRamp:e.referenceRamp,deletions:e.deletionEdgeIndexes,hiddenEdges:e.hiddenEdgeIndexes,version:e.positionsVersion});return n.uploadGeometry(i),e.setGeometryMetrics(performance.now()-o,i.nodeStrokes.length,{scale:(0,A.untracked)(()=>e.scale),bounds:a}),!0}return!1},render:n=>{if(!e.nodePositions)return!1;let r=(0,vr.getDpr)();return n.updateTransform({scaleX:e.scaleX*r,scaleY:e.scaleY*r,translateX:e.translateX*r,translateY:e.translateY*r,dpr:r}),n.render(e.darkMode?[.12,.12,.12,1]:[1,1,1,1]),e.markPainted((0,A.untracked)(()=>e.geometryVersion)),!0}}))}})).actions(e=>({switchLayout(t){return e.setLayoutMode(t),e.recomputeLayout()},cancelLoad(){e.canCancelLoad&&(e.stopLoad(),e.graph=void 0)},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user")}})).actions(e=>({showInLinearView(t){let n=(0,M.getSession)(e),r=t.assembly===e.graphRegion?.assemblyName,o=Sr({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:Rr({session:n,assemblyName:t.assembly,first:r?e.sourceTrackId:void 0})});r&&e.pairWithLinearView(o)},highlightInLinearView(t){Lr({session:(0,M.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){Mr({session:(0,M.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?Tr((0,M.getSession)(e),t):[]}})).views(e=>({graphMenuItems(){let t=e.walkChoices;return[{label:"Layout",subMenu:Yt.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:Vt.map(n=>({type:"radio",label:n.label,checked:e.chosenColorScheme===n.value,onClick:()=>{e.setColorScheme(n.value)}}))},...t.length>0?[{label:"Walk",subMenu:[{type:"radio",label:"None",checked:e.highlightedPath==="",onClick:()=>{e.setHighlightedPath("")}},...t.map(n=>({type:"radio",label:n.label,checked:e.highlightedPath===n.name,onClick:()=>{e.setHighlightedPath(n.name)}}))]}]:[],...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.paneWidth/2,e.canvasHeight/2)}},{label:"Zoom out",onClick:()=>{e.zoom(1/1.5,e.paneWidth/2,e.canvasHeight/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)}}]},launchMenuItems(){let t=[];for(let n of on({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:r=>{e.showInLinearView(r)},onShowSynteny:r=>{e.showSyntenyView(r)}}))(0,Ir.pushLaunchViewMenuItem)(t,n);return t}}))}var at=b(I(),1);function Fr(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function Er(e){let t=(0,at.readConfObject)(e,"assemblyNames"),n=Fr(t)?t.slice(1):[];return n.length>0?n:void 0}function Ie(e){let t=(0,at.readConfObject)(e,"assemblyNames");return Fr(t)?t[0]:void 0}function Ce(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 it(){return N.types.compose("GraphGenomeView",Hr.BaseViewModel,Pe(),N.types.model({type:N.types.literal("GraphGenomeView"),gfaLocation:N.types.maybe(N.types.frozen()),loadedRegion:N.types.maybe(N.types.frozen()),loadedTrackId:N.types.optional(N.types.string,""),subgraphContext:N.types.optional(N.types.number,1),subgraphHaplotypes:N.types.maybe(N.types.frozen()),maxRegionBp:N.types.optional(N.types.number,Ne)})).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get sourceTrack(){return e.loadedTrackId?(0,Dr.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.loadGFAFromLocation(e.gfaLocation,n);if(!e.loadedTrackId||!n)return;let r=e.sourceTrack,o=n.end-n.start,a=r?Ce(Ie(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 (${j(o)}) \u2014 zoom in to view graph (max ${j(e.maxRegionBp)})`));else return e.cutSubgraph((0,Vr.readConfObject)(r,"adapter"),n,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes})}}}).actions(e=>({retryLoad(){e.load()},afterAttach(){e.graph||e.load()}}))}var va=(0,zr.defineLaunchKeys)()({});function st(e){e.addViewType(()=>new _r.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:it(),launchKeys:va,ReactComponent:(0,Or.lazy)(()=>import("./chunks/GraphGenomeView-K5PZO33Q.js"))}))}var jr=b(I(),1),$=b(z(),1);function Fa(e){let t=e.getElementTypesInGroup("display"),n=o=>t.find(a=>a.name===o),r=n("MultiWaySyntenyDisplay");return[n("LinearGraphDisplay"),n("LinearBasicDisplay"),r&&Object.assign(Object.create(r),{adapterCapabilities:["headerLanes"]})].filter(o=>o!==void 0)}function ut(e){e.addTrackType(()=>{let t=(0,jr.ConfigurationSchema)("GraphTrack",{},{baseConfiguration:(0,$.createBaseTrackConfig)(e),explicitIdentifier:"trackId"}),n=new $.TrackType({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:(0,$.createBaseTrackModel)(e,"GraphTrack",t)});for(let r of Fa(e))n.addDisplayType(r);return n})}function ct(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...r}=t;return n.addView("GraphGenomeView",r),t})}var io=b(se(),1),so=b(Wr(),1);var Ur=b(I(),1),Kr=b(Yr(),1),dt=b(V(),1);function qr(){return(0,Ur.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:dt.types.enumeration("LayoutMode",he),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:dt.types.enumeration("ColorScheme",pe),defaultValue:"auto"},...(0,Kr.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var to=b(se(),1),ie=b(I(),1),no=b(z(),1),ro=b(U(),1),oo=b(Zr(),1),R=b(V(),1),ve=b(eo(),1);var Be=b(Rt(),1);var Ea=(0,to.lazy)(()=>import("./chunks/GraphTrackSettingsDialog-6STIFKVD.js"));function ao(e){return R.types.compose("LinearGraphDisplay",no.BaseDisplay,(0,oo.default)(),Pe(),R.types.model({type:R.types.literal("LinearGraphDisplay"),configuration:(0,ie.ConfigurationReference)(e),pane:R.types.maybe(R.types.frozen()),cutRegion:R.types.maybe(R.types.frozen()),coarseCut:R.types.optional(R.types.boolean,!1),maxRegionBp:R.types.optional(R.types.number,Ne),subgraphContext:R.types.optional(R.types.number,1),subgraphHaplotypes:R.types.maybe(R.types.frozen())})).preProcessSnapshot(t=>{let{pane:n,...r}=t;if(!n)return t;let{type:o,...a}=n;return{...a,...r}}).volatile(()=>({recuts:0,settledWindow:void 0})).views(t=>({get defaultLayoutMode(){return(0,ie.getConf)(t,"layoutMode")},get defaultColorScheme(){return(0,ie.getConf)(t,"colorScheme")},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get chosenHaplotypes(){return t.subgraphHaplotypes??Er(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 (${j(n.end-n.start)}, max ${j(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get displayPhase(){return(0,ve.computeDisplayStatusPhase)({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>(0,ve.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},setMaxRegionBp(n){t.maxRegionBp=n},cut(){let n=t.cutRegion;if(!n)return;let r=Ce(Ie(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})}})).actions(t=>({recutAt(n){let r=t.tierAt(n.bpPerPx);return t.coarseCut=r==="coarse",t.cutRegion=qe(n,t.capFor(r),O(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(n){t.settledWindow=n;let r=O(t.chosenLayoutMode).cutMargins;return t.regionTooLarge||!t.loadCanceled&&t.tierAt(n.bpPerPx)===t.cutTier&&$n(t.cutRegion,n,r)?!1:(t.recutAt(n),!0)},switchLayout(n){let r=O(t.chosenLayoutMode).cutMargins;t.setLayoutMode(n);let o=t.host?Ke(t.host):void 0;return o&&!t.regionTooLarge&&O(n).cutMargins!==r?t.recutAt(o):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,R.addDisposer)(t,(0,Be.reaction)(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),(0,R.addDisposer)(t,(0,Be.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,R.addDisposer)(t,(0,Be.reaction)(()=>t.host?.coarseDynamicBlocks,n=>{let{host:r}=t,o=n&&r?Ke(r):void 0;o&&t.settleOn(o)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({trackMenuItems(){return[...t.graphMenuItems(),{label:"Settings",icon:an,onClick:()=>{(0,ro.getSession)(t).queueDialog(n=>[Ea,{model:t,open:!0,onClose:n}])}},...t.launchMenuItems()]}}))}function pt(e){e.addDisplayType(()=>{let t=qr();return Object.assign(new so.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:ao(t),trackType:"GraphTrack",viewType:"LinearGenomeView",ReactComponent:(0,io.lazy)(()=>import("./chunks/LinearGraphDisplay-3WQBA6ZX.js"))}),{adapterCapabilities:["getSubgraph"]})})}var po=b(we(),1);var mt=b(I(),1),uo=b(V(),1);function gt(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 Va=(0,mt.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,mt.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:uo.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:gt}),co=Va;function lt(e){e.addAdapterType(()=>new po.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:gt,configSchema:co,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-FJIBTKQY.js").then(t=>t.default)}))}var bo=b(we(),1);var Ee=b(I(),1),lo=b(V(),1);function mo(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function go(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:mo(`${t}.segs.bed.gz`,n,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:mo(`${t}.links.bed.gz`,n,r)}:e}function ht(e){let{coarse:t,baseUri:n}=e;return go(typeof t=="object"&&t!==null?{...e,coarse:go({baseUri:n,...t})}:e)}var Fe=(e,t)=>(0,Ee.ConfigurationSchema)(e,{indexType:{model:lo.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),Ha=(0,Ee.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Fe("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:Fe("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),Da=(0,Ee.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Fe("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:Fe("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:Ha},{explicitlyTyped:!0,preProcessSnapshot:ht}),ho=Da;function bt(e){e.addAdapterType(()=>new bo.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:ht,configSchema:ho,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-7ZGKJJYW.js").then(t=>t.default)}))}var Oa=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function _a(e){return"uri"in e?e.uri:"localPath"in e?e.localPath:e.name}function za(e){return _a(e).toLowerCase().endsWith(".gbz.db")}function ja(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 $a(e,t,n){if((!n||n==="GbzBaseSyntenyAdapter")&&za(e))return{type:"GbzBaseSyntenyAdapter",gbzDbLocation:e,...t?{haplotypeIndexLocation:t}:{}};if((!n||n==="RgfaTabixAdapter")&&Gt(e))return Tt({choice:"RgfaTabixAdapter",loc:e,indexLoc:t,assembly:"",sample:""})}function yt(e){e.addToExtensionPoint("Core-preProcessTrackConfig",ja),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(n,r,o)=>$a(n,r,o)??t(n,r,o)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(n,r)=>Oa.has(n)?"GraphTrack":t(n,r))}var xo=b(U(),1),ko=b(Bo(),1),ft=b(Co(),1),So=b(Eo(),1);function W(e){return typeof e=="object"&&e!==null}function yo(e){let t;if(W(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 Wa(e,t,n){let r=e.connectedViewId;return r===void 0||r===t||!n.has(r)}function fo(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Xa(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(n=>W(n)&&Array.isArray(n.displays)?n.displays.filter(r=>W(r)&&r.type==="LinearGraphDisplay"):[])}function wo(e,t,n){let r=[],o=new Set(re(e).map(a=>W(a)?a.id:void 0));for(let a of e){if(W(a)&&a.id===t)for(let i of Xa(a)){let s=yo(i.hoverHighlight);s&&fo(s,n)&&r.push({key:typeof i.id=="string"?i.id:"graph-track",region:s})}if(W(a)&&a.type==="GraphGenomeView"&&Wa(a,t,o)){let i=yo(a.hoverHighlight);i&&fo(i,n)&&r.push({key:typeof a.id=="string"?a.id:"graph",region:i})}}return r}var X=b(K(),1),Ya=(0,So.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,ko.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),Ua=(0,ft.observer)(function({model:t,region:n}){let{classes:r}=Ya(),o=t.getHighlightCoords(n);return o?(0,X.jsx)("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:o.left,width:o.width}}):null}),Ka=(0,ft.observer)(function({model:t}){let{views:n}=(0,xo.getSession)(t);return(0,X.jsx)(X.Fragment,{children:wo([...n],t.id,t.assemblyNames).map(({key:r,region:o})=>(0,X.jsx)(Ua,{model:t,region:o},`graph-hover-${r}`))})}),Lo=Ka;var Mo=b(K(),1),qa="LinearGenomeView-TracksContainerComponent";function wt(e){e.contributeToExtensionPoint(qa,({model:t})=>(0,Mo.jsx)(Lo,{model:t},"graphgenomeview-hover-highlight"))}var Ro="GraphGenomeView";var Go="4.0.8";var xt=class extends To.default{constructor(){super(...arguments);this.name=Ro;this.version=Go}install(n){st(n),pt(n),ut(n),ct(n),wt(n),bt(n),lt(n),je(n),$e(n),yt(n),n.addRpcMethod(()=>new Q(n)),n.addRpcMethod(()=>new Z(n))}configure(n){try{(0,Ao.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:cn,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{xt as default};
2
+ `)){let r=n.endsWith("\r")?n.slice(0,-1):n;if(r.startsWith("H")){let[,...o]=r.split(" ");t.header.push(ee(o))}else if(r.startsWith("S")){let[,o,...a]=r.split(" "),i,s,g,p=!1,f=a[0]??"*";/^\d+$/.test(f)?(i=+f,s=a[1]??"*",g=a.slice(2)):(p=!0,s=f,i=s==="*"?0:s.length,g=a.slice(1));let L=ee(g);p&&"LN"in L&&(i=+L.LN),t.nodes.push({id:o,length:i,sequence:s,tags:L})}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:ee(s)})}else if(r.startsWith("L")){let[,o,a,i,s,g,...p]=r.split(" ");o&&i&&s&&t.links.push({source:o,target:i,strand1:a,strand2:s,cigar:g??"*",tags:ee(p)})}else if(r.startsWith("W")){let[,o,a,i,s,g,p,...f]=r.split(" ");o&&a&&i&&s&&g&&p&&t.walks.push({sample:o,haplotype:+a,contig:i,start:s==="*"?-1:+s,end:g==="*"?-1:+g,segments:Uo(p),tags:ee(f)})}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 Ko(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}}function qo(e){return[...e.paths.map(t=>({...me(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:t.start===-1?0:t.start,steps:t.segments.map(n=>({id:n.id,strand:n.strand==="-"?"-":"+"}))}))]}function Jo(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 te=e=>typeof e=="number"&&e>0?e:void 0;function Zo({tags:e,length:t}){let n=te(e.RC)??te(e.FC)??te(e.KC);return te(e.dp)??te(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function Qo(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:Je(e),samples:Jo(e)}}function Xn(e,t="Imported GFA"){let n=[],r=[],{canonical:o,traversals:a}=Ko(e),i=c=>`${c}${o.get(c)??"+"}`;for(let c of e.nodes){let w=Zo(c)??Math.max(a.get(c.id)??1,1);n.push(Qo(c,o.get(c.id)??"+",w))}for(let c of e.links)r.push({from:i(c.source),to:i(c.target),fromStrand:c.strand1==="-"?"-":"+",toStrand:c.strand2==="-"?"-":"+"});let s=[],g=new Map,p=(c,w)=>[c,w].sort().join("--");function f(c,w){for(let S=0;S<c.length-1;S++){let u=p(c[S],c[S+1]);g.has(u)||g.set(u,new Set),g.get(u).add(w)}}for(let c of e.paths){let w=c.path.split(",").map(S=>i(S.slice(0,-1)));s.push({name:c.name,nodeIds:w}),f(w,c.name)}for(let c of e.walks){let w=c.segments.map(u=>i(u.id)),S=`${c.sample}#${c.haplotype}#${c.contig}`;s.push({name:S,nodeIds:w,sample:c.sample,haplotype:c.haplotype,contig:c.contig}),f(w,S)}for(let c of r){let w=g.get(p(c.from,c.to));w&&w.size>0&&(c.pathIds=[...w])}let L=new Map(e.nodes.map(c=>[c.id,c.length])),m=e.paths.length>0||e.walks.length>0?jt(qo(e),c=>L.get(c)??0):void 0;return{name:t,nodes:n,edges:r,paths:s.length>0?s:void 0,anchorPaths:m?.anchorPaths,pathVisits:m?.pathVisits,anchoredBy:n.some(c=>c.stable)?"tags":void 0}}function Yn(e,t){let n=e.nodes.filter(u=>T(u)&&(t[u.id]?.length??0)>0);if(n.length<2)return t;let r=n.map(u=>{let d=t[u.id],h=d[Math.floor(d.length/2)];return{x:h.x,y:h.y,r:u.stable.start+u.length/2,w:u.length}}),o=r.reduce((u,d)=>u+d.w,0),a=r.reduce((u,d)=>u+d.x*d.w,0)/o,i=r.reduce((u,d)=>u+d.y*d.w,0)/o,s=r.reduce((u,d)=>u+d.r*d.w,0)/o,g=0,p=0;for(let u of r)g+=u.w*(u.x-a)*(u.r-s),p+=u.w*(u.y-i)*(u.r-s);let f=-Math.atan2(p,g),L=Math.cos(f),m=Math.sin(f),c={};for(let[u,d]of Object.entries(t))c[u]=d.map(h=>{let y=h.x-a,k=h.y-i;return{x:a+L*y-m*k,y:i+m*y+L*k}});let w=0,S=0;for(let u of e.nodes)if(!T(u))for(let d of c[u.id]??[])d.y>i?w++:S++;if(S>w)for(let u of Object.values(c))for(let d of u)d.y=2*i-d.y;return c}var Un=30;function ea(e,t){let{opts:n}=t,r=new Map(t.nodes.map(m=>[m.id,ue(n,m.length)])),o=m=>r.get(m)??n.minimumNodeLength,a=e.nodes.filter(T).sort((m,c)=>m.stable.start-c.stable.start),i=new Map,s=0;for(let m of a)i.set(m.id,{x:s,y:0}),s+=o(m.id)+n.edgeLength;let g=ge(e),p=new Map(a.map(m=>[m.id,0])),f=a.map(m=>m.id);for(let m of f){let c=i.get(m),w=p.get(m)+1;for(let S of g.get(m)??[])p.has(S)||(p.set(S,w),i.set(S,{x:c.x+o(m)/2,y:Un*w}),f.push(S))}let L=0;for(let m of e.nodes)i.has(m.id)||i.set(m.id,{x:L++*s/e.nodes.length,y:Un*3});return i}function Kn(e,t){let n=ea(e,t);return t.nodes.map(r=>({...r,...n.get(r.id)}))}function qn(e,t,n={}){let r=Wt(Xn(Ze(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}function ta(e,t,n){let r=e.nodes.some(T);return{graph:{nodes:r?Kn(e,t):t.nodes,edges:e.edges},options:{quality:n.quality,linearLayout:n.linearLayout,...t.opts,...r?{rotateComponents:!1}:{}}}}function Jn(e,t){let n=e.nodes.some(T);return`${t.quality}|${t.linearLayout}|${t.bubbleSpread}|${n}|${e.referencePath??""}`}async function Zn(e,t,n){let r=Ct(t.bubbleSpread),o=Ot(e),{result:a,duration:i}=await n(ta(o.graph,He(o.graph,r),t)),s=He(e,r),g=new Map(s.nodes.map(f=>[f.id,ue(s.opts,f.length)])),p=_t(a.nodePositions,o.runs,f=>g.get(f)??0);return{result:{...a,nodePositions:e.nodes.some(T)?Yn(e,p):p},duration:i}}function na(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 F=40,ra=1e-6,oa=100;function ne(e){return Math.max(ra,Math.min(oa,e))}function Qe(e,t,n){let r=t-e.h*n;return F-e.minY*n+Math.max(0,r)/2}function Qn(e,t,n,r){let o=t-F*2,a=n-F*2;if(o<=0||a<=0||!(e.w>0||!r&&e.h>0))return;let i=e.w>0?o/e.w:1/0,s=e.h>0?a/e.h:1/0,g=ne(r?i:Math.min(i,s));return{scale:g,translateX:F-e.minX*g+(o-e.w*g)/2,translateY:Qe(e,a,r?1:g)}}function er(e,t={}){let{minX:n,minY:r,maxX:o,maxY:a}=na(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}}var et=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),aa=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function nr(e,t){return t?e.find(r=>r.trackId===t):e.filter(r=>et.has(r.adapterType)).find(r=>aa.test(`${r.trackId} ${r.name??""}`))}function ke(e,t){return typeof e.get=="function"?e.get(t):e[t]}var rr=/^\w+=[^;]*(;\w+=[^;]*)*$/;function ia(e){let t=ke(e,"name");if(!(typeof t!="string"||!rr.test(t)))return Object.fromEntries(t.split(";").map(n=>{let r=n.indexOf("=");return[n.slice(0,r),n.slice(r+1)]}))}function xe(e,t){let n=ke(e,t);return n!==void 0?n:ke(e,"INFO")?.[t]??ia(e)?.[t]}var or=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],sa=["RUL","period","PERIOD","consensusSize","unit","unitLength"],ua=["TRID","REPID","VARID","ID","name","id"];function Se(e,t){for(let n of t){let r=xe(e,n),o=String((Array.isArray(r)?r[0]:r)??"").split(",")[0].trim();if(o!==""&&o!==".")return o}}var ca=/^[ACGTURYSWKMBDHVN]+$/i;function da(e){let t=Number(Se(e,sa));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=Se(e,or);return n&&ca.test(n)?n.length:void 0}function tr(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 pa(e){let t=ke(e,"samples"),n={};for(let[r,o]of Object.entries(t??{})){let a=tr(o.SD),i=tr(o.AL).flatMap((s,g)=>s!==void 0&&s>0?[a[g]===void 0?{bp:s}:{bp:s,spanningReads:a[g]}]:[]);i.length>0&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}function ar(e){let t=[];for(let n of e){let r=xe(n,"start"),o=xe(n,"end"),a=da(n);if(!(o>r)||a===void 0)continue;let i=xe(n,"refName"),s=Se(n,or),g=Se(n,ua);t.push({key:`${i}:${r}-${o}`,name:(g&&!rr.test(g)?g:void 0)??(s&&s.length<=12?`(${s})n`:`${i}:${(r+1).toLocaleString()}-${o.toLocaleString()}`),refName:i,start:r,end:o,unit:a,motif:s,calls:pa(n)})}return t.sort((n,r)=>n.start-r.start)}var ma=e=>e.bp1>e.bp0;function ir(e,t){let n=e.filter(ma);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],p=Math.min(s.c.x0-i.c.x1,24)-(s.s0-i.s1);if(p>0){let f=(i.s1-i.s0)/2,L=(s.s1-s.s0)/2,m=Math.min(p/2,f),c=Math.min(p-m,L);m=Math.min(p-c,f),i.trimRight=m,s.trimLeft=c}}let o=[];for(let{c:a,s0:i,s1:s,trimLeft:g,trimRight:p}of r)o.push({tx:a.x0,sx:i+g},{tx:a.x1,sx:s-p});return o}function sr(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 f=a+i>>1;e[f].tx<=t?a=f:i=f}let s=e[a],g=e[i],p=g.tx-s.tx;return p>0?s.sx+(t-s.tx)/p*(g.sx-s.sx):s.sx}var ga=.05,Le=9;function la(e,t){let{minY:n,maxY:r}=e.layout.bounds,o=r-n;return e.columns&&o>0?Math.max(ga,Math.min(1,t/o)):1}function ur(e,t){let{scaleX:n,translateX:r,translateY:o}=t,a=t.scaleY*la(e,t.usableHeight),i=g=>(g-e.yOffset)*a+o,{columns:s}=e;if(s){let g=ir(s,p=>p*n+r);return{x:p=>sr(g,p),y:i,yScale:a}}return{x:g=>g*n+r,y:i,yScale:a}}function cr(e,{x:t,y:n},r,o){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-Le)<=r&&r<=t(i.x+i.pixelWidth+Le)&&n(i.y-Le)<=o&&o<=n(i.y+i.contentHeight+Le)&&(a=i.name)}),a}function Me(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function dr(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 pr(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 mr(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}function gr(e,t,n,r,o){let a=ne(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}}function lr(e,t){let n=e.paths?.find(p=>p.name===t);if(!n)return;let r=new Map(e.nodes.map(p=>[p.id,p])),o=new Map;e.edges.forEach((p,f)=>{o.set(`${p.from}>${p.to}`,f)});let a=new Set(n.nodeIds),i=new Set;for(let p=1;p<n.nodeIds.length;p++){let f=n.nodeIds[p-1],L=n.nodeIds[p],m=o.get(`${f}>${L}`)??o.get(`${L}>${f}`);m!==void 0&&i.add(m)}let s=p=>p.reduce((f,L)=>f+(r.get(L)?.length??0),0),g=e.referencePath?e.paths.find(p=>me(p.name).name===e.referencePath):void 0;return{name:t,nodeIds:a,edgeIndexes:i,steps:n.nodeIds.length,bp:s(n.nodeIds),referenceBp:g&&g!==n?s(g.nodeIds):void 0}}function Re(e){return typeof e=="object"&&e!==null}function ha(e){return Re(e)&&typeof e.get=="function"}function ba(e){let t=ha(e)?e.get("name"):Re(e)?e.name:void 0;return typeof t=="string"?t:void 0}function hr(e){let t;if(Re(e)&&Re(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:ba(e.hoverFeature)})}return t}function br(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function yr({hover:e,nodes:t}){let n,r;for(let o of t)o.name===e.featureName?n=o.id:r===void 0&&T(o)&&e.coord>=o.stable.start&&e.coord<o.stable.start+o.length&&(r=o.id);return n??r??null}var tt=b(I(),1);function fr(e){return typeof e=="object"&&e!==null}function ya(e){return fr(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function re(e){return e.flatMap(t=>fr(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function oe({views:e,connectedViewId:t,assemblyName:n}){let r=re(e).filter(a=>ya(a)).filter(a=>a.assemblyNames.includes(n));return r.find(a=>a.id===t)??(r.length===1?r[0]:void 0)}function xr(e,t,n){n.catch(r=>{console.error(`[GraphGenomeView] ${t}`,r),e.notifyError?.(`${t}: ${r}`,r)})}var fa=1e3;function nt(e,t=fa){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 kr(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 Sr({session:e,location:t,assembly:n,connectedViewId:r,tracks:o=[]}){let a=oe({views:e.views,connectedViewId:r,assemblyName:n}),i;return a?(xr(e,`Could not show ${n} ${J(t)}`,Promise.resolve(a.navToLocString(ye(t),n))),i=a.id):i=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${J(t)}`,init:{assembly:n,loc:ye(t),tracks:o}}).id,i}function Lr({session:e,location:t,assembly:n,connectedViewId:r}){let o=oe({views:e.views,connectedViewId:r,assemblyName:n});return o?.addToHighlights?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),o!==void 0}function wr(e,t){if(t===void 0)return[];let n=e.tracks.find(o=>(0,tt.readConfObject)(o,"trackId")===t),r=n?(0,tt.readConfObject)(n,"assemblyNames"):[];return Array.isArray(r)?r.filter(o=>typeof o=="string"):[]}function Mr({session:e,contributors:t,trackId:n,graphTrackId:r}){let o=wr(e,r),a=wr(e,n),i=t.filter(p=>a.includes(p.sample)),s=i.length>=2?i:t,g={init:{views:s.map(p=>({assembly:p.sample,loc:ye(p),...r!==void 0&&o.includes(p.sample)?{tracks:[r]}:{}})),tracks:n?s.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?xr(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",g)):e.addView("LinearSyntenyView",g)}var Ge=b(I(),1),wa="FeatureTrack";function Rr({session:e,assemblyName:t,first:n}){let r=[];for(let o of e.tracks){let a=(0,Ge.readConfObject)(o,"type"),i=(0,Ge.readConfObject)(o,"assemblyNames"),s=(0,Ge.readConfObject)(o,"trackId");a===wa&&Array.isArray(i)&&i.includes(t)&&typeof s=="string"&&s!==n&&r.push(s)}return n?[n,...r]:r}var Te=b(I(),1),Gr=b(Io(),1),xa="SyntenyTrack";function Tr(e,t){let n=new Set(t),r=[];for(let o of e.tracks){let a=(0,Te.readConfObject)(o,"type"),i=(0,Te.readConfObject)(o,"assemblyNames"),s=(0,Te.readConfObject)(o,"trackId");if(a===xa&&typeof s=="string"&&Array.isArray(i)){let g=i.filter(p=>n.has(p)).length;g>=2&&r.push({trackId:s,name:(0,Gr.getTrackName)(o,e),coverage:g})}}return r.sort((o,a)=>a.coverage-o.coverage)}var Sa=600,rt=160,La=340,Ar=".segs.bed.gz";function Ma(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(Ar)?n.slice(0,-Ar.length):void 0}var Nr=1.4,Ra=1.6,Ga=150,Ta=1,Aa={nodeStrokes:[],nodeStrokeRuns:new Map,arrows:[],arrowRuns:new Map,edgeCurves:[],edgeCurveRuns:new Map};function ae(...e){}var Ne=5e6;function j(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var Na=2e4;function Pr(e){return e.lastGeometryStrokeCount!==void 0&&!e.viewportRebuildPending&&e.geometryViewportDirty===e.viewportDirty&&e.paintedGeometryVersion===e.geometryVersion}function ot(e){return dr(e,e.axisScale,e.paneWidth,e.canvasHeight)}var Ae=new WeakMap,Pa=4;function Ia(e){let t=Ae.get(e);return t||(t=new Map,Ae.set(e,t)),t}function Ca(e,t){let n=Ae.get(e);n&&e!==t&&Ae.set(t,n)}function Ba(e,t,n){e.size>=Pa&&e.delete(e.keys().next().value),e.set(t,n)}function Pe(){return l.types.compose("GraphPane",(0,Br.RenderLifecycleMixin)(),l.types.model({layoutQuality:l.types.optional(l.types.number,2),linearLayout:l.types.optional(l.types.boolean,!1),layoutMode:l.types.maybe(l.types.enumeration(he)),colorScheme:l.types.maybe(l.types.enumeration(pe)),bubbleSpread:l.types.optional(l.types.enumeration(It),"auto"),nodeWidth:l.types.optional(l.types.enumeration(Kt),"depth"),showBubbles:l.types.optional(l.types.boolean,!0),showDeletionEdges:l.types.optional(l.types.boolean,!1),showGenes:l.types.optional(l.types.boolean,!0),geneTrackId:l.types.optional(l.types.string,""),repeatTrackId:l.types.optional(l.types.string,""),repeatKey:l.types.optional(l.types.string,""),walkRowSamples:l.types.maybe(l.types.frozen()),highlightedPath:l.types.optional(l.types.string,""),referencePath:l.types.optional(l.types.string,""),showPerf:l.types.optional(l.types.boolean,!1),contigThickness:l.types.optional(l.types.number,6),connectorThickness:l.types.optional(l.types.number,2),darkMode:l.types.optional(l.types.boolean,!1),scale:l.types.optional(l.types.number,1),translateX:l.types.optional(l.types.number,0),translateY:l.types.optional(l.types.number,0),drawPaths:l.types.optional(l.types.boolean,!1),paneHeight:l.types.maybe(l.types.number),maxGraphNodes:l.types.optional(l.types.number,Na),colorDomain:l.types.maybe(l.types.frozen()),connectedViewId:l.types.maybe(l.types.string)})).volatile(()=>({graph:void 0,graphRegion:void 0,layoutResult:void 0,legendSize:{width:0,height:0},indexBubbles:void 0,geneFeatures:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredEdge:null,selectedNode:null,viewportDirty:0,positionsVersion:0,geometryVersion:0,builtViewport:void 0,draggingNode:null,isPanning:!1,viewportOwner:"fit",viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0,paintedGeometryVersion:-1,viewportRebuildPending:!1,geometryViewportDirty:-1})).views(e=>({get defaultLayoutMode(){return"force"},get defaultColorScheme(){return"auto"},get hasPendingSource(){return!1},get canRetryLoad(){return!1},get sourceTrack(){try{return(0,M.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,M.getContainingView)(e).width},get nodeById(){if(e.graph){let t=new Map;for(let n of e.graph.nodes)t.set(n.id,n);return t}},get nodeLengths(){let t=new Map;for(let n of e.graph?.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 Pr(e)},get showLoading(){return e.error===void 0&&(e.isLoading||e.hasPendingSource||e.graph!==void 0&&!Pr(e))},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?Ut(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 pathLegend(){let t=e.graph?.paths;return(e.drawPaths||e.layoutResult?.tubeMap)&&t&&_e(t.length)?ze(t):[]},get walkChoices(){let t=e.graph?.paths;return t?.length?ze(t):[]},get walkHighlight(){return e.graph&&e.highlightedPath?lr(e.graph,e.highlightedPath):void 0},get effectiveDrawPaths(){return e.drawPaths&&_e(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get rampDomain(){return e.colorDomain??e.graphRegion},get effectiveColorScheme(){return Ht(e.chosenColorScheme,e.graph)},get nodePositions(){return e.layoutResult?.nodePositions},get labelsNodeSizes(){return!e.layoutResult?.tubeMap},get rowLabels(){return e.layoutResult?.rowLabels??[]},get alleleDeletions(){return e.layoutResult?.alleleDeletions??[]},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?vn(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get sourceAdapter(){let t=e.sourceTrack;return t?(0,_.readConfObject)(t,"adapter"):void 0},get sourceTrackId(){let t=e.sourceTrack;return t?(0,_.readConfObject)(t,"trackId"):void 0},get assemblyTrackChoices(){let t=e.graphRegion;return t?(0,M.getSession)(e).tracks.filter(n=>(0,_.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,_.readConfObject)(n,"name"),adapterType:(0,_.readConfObject)(n,"adapter").type})):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>Ue.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>et.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return nr(e.repeatTrackChoices,e.repeatTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)}})).views(e=>({get nodeNeighbors(){return e.graph?ge(e.graph):void 0},get nodeInk(){return qt(e.graph,e.nodeById,e.contigThickness,e.nodeWidth)},get deletions(){return e.graph&&e.chosenLayoutMode!=="walkrows"&&!e.layoutResult?.tubeMap?Dt(e.graph):[]},get walkRowBars(){if(e.chosenLayoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?Oe(e.graph,t,t.unit):Oe(e.graph,e.graphRegion);if(!n)return;let r=e.walkRowSamples,o=r?n.rows.filter(a=>r.includes(a.sample)).sort((a,i)=>r.indexOf(a.sample)-r.indexOf(i.sample)||a.label.localeCompare(i.label)):n.rows;return{...n,rows:Qt(o,t?.calls)}},get drawnRowLabels(){let t=this.walkRowBars;return t?[t.reference,...t.rows].map((n,r)=>({label:n.label,y:r*20})):e.rowLabels},get bubbleGlyphs(){return(e.chosenLayoutMode==="variants"?e.bubbles:[]).map(n=>({bubble:n,...q(n,e.repeatArrays)}))},get genePins(){ae(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&e.chosenLayoutMode!=="variants"&&e.chosenLayoutMode!=="walkrows"&&!e.layoutResult?.tubeMap&&e.graph&&e.geneFeatures&&t?On(e.graph,e.geneFeatures,t):[]},get bubbleHalos(){ae(e.positionsVersion);let t=e.layoutResult?.nodePositions;if(!e.showBubbles||e.chosenLayoutMode==="variants"||e.chosenLayoutMode==="walkrows"||e.layoutResult?.tubeMap||!e.graph||!t)return[];let n=new Map(e.walkChoices.map(r=>[r.name,r.label]));return Bn(e.graph,e.bubbles,t,r=>n.get(r)??r,e.repeatArrays)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.graph&&!e.layoutResult?.tubeMap?Jt(e.graph,e.rampDomain):void 0},get assemblyNames(){let t=e.graphRegion;return t?[t.assemblyName]:[]},get scaleX(){return Me(e.scale,e.pixelRows).scaleX},get scaleY(){return Me(e.scale,e.pixelRows).scaleY},get axisScale(){return Me(e.scale,e.pixelRows)},get layoutBounds(){let t=e.layoutResult,n=this.walkRowBars;return t?er(t,{region:e.popStack.length===0?e.graphRegion:void 0,extent:n&&t.extent?Xt(n):void 0}):void 0},get canvasHeight(){let t=this.layoutBounds,n=e.paneWidth-F*2,r=Math.max(rt,e.paneHeight??Sa);if(!t)return r;if(e.pixelRows){let o=e.chosenLayoutMode==="variants"?La:rt;return Math.min(r,Math.max(o,t.h+F*2))}return t.w>0&&n>0?Math.min(r,Math.max(rt,t.h*n/t.w+F*2)):r}})).views(e=>({get geneTrack(){return En(e.geneTrackChoices,e.geneTrackId)},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 hoverHighlight(){let t,n=e.graphRegion,r=e.hoveredNode,o=e.nodeById,a=e.nodeNeighbors;if(n&&r!==null&&o&&a){let i=le({nodeId:r,nodeById:o,neighbors:a});i&&(t={refName:n.refName,assemblyName:n.assemblyName,...i})}return t}})).views(e=>({get contributingAssemblies(){let t=e.graph,n=t?At(t):[];return t?tn(t,{maxGap:n.length>0?Pt(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,M.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)}})).views(e=>({get launchableAssemblies(){return rn(kr(e.contributingAssemblies,e.graphRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.graphRegion;return t!==void 0&&oe({views:[...(0,M.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),r=n?be(n):void 0,o=r?nn(e.assemblyResolver,r):void 0,a=e.graphRegion,i=e.nodeById,s=e.nodeNeighbors,g=a&&i&&s?le({nodeId:t,nodeById:i,neighbors:s}):void 0,p=a&&g?{sample:a.assemblyName,haplotype:void 0,refName:a.refName,...g}:void 0;return{own:r&&o?{location:nt(r),assembly:o}:void 0,reference:a&&p?{location:nt(p),assembly:a.assemblyName}:void 0,highlight:a&&p?{location:p,assembly:a.assemblyName}:void 0}}})).views(e=>({get host(){let t;try{t=(0,M.getContainingView)(e)}catch{return}return _n(t)?t:void 0}})).views(e=>({get hostPlacesX(){let{host:t,graphRegion:n,layoutResult:r}=e;return t!==void 0&&t.initialized&&n!==void 0&&r?.referenceAxis===!0&&e.popStack.length===0&&!t.dynamicBlocks.contentBlocks.some(o=>o.refName===n.refName&&o.reversed)}})).views(e=>({get overlayLabels(){return zt(e)},get hostFrame(){let{host:t,graphRegion:n}=e;return e.hostPlacesX&&t&&n?jn(t,n):void 0},get tubeMapPicture(){let t=e.layoutResult?.tubeMap;return t?en(t.layout):void 0},get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?ur(t,{scaleX:e.scaleX,translateX:e.translateX,scaleY:e.scaleY,translateY:e.translateY,usableHeight:e.canvasHeight-F*2}):void 0}})).views(e=>({tubeMapNodeAt(t,n){let r=e.layoutResult?.tubeMap,o=e.tubeMapFrame;return r&&o?cr(r,o,t,n):null}})).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.geometryViewportDirty=e.viewportDirty,e.builtViewport=r,e.geometryVersion++},markPainted(t){e.paintedGeometryVersion=t},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=$t(n,t);Ca(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},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setHighlightedPath(t){e.highlightedPath=t},setPaneHeight(t){e.paneHeight=t},setWalkRowSamples(t){e.walkRowSamples=t},pairWithLinearView(t){let n=e.connectedViewId;n!==void 0&&re([...(0,M.getSession)(e).views]).some(o=>o.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=t},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.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,M.getSession)(e),i=e.graphRegion,s=i?le({nodeId:t,nodeById:r,neighbors:o}):void 0;(0,M.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:be(n)?.sample,contributingHaplotype:be(n)?.haplotype,carriedBy:n.samples?.join(", "),...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=ne(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=gr(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(){let t=e.layoutBounds,n=e.canvasHeight-F*2;if(e.viewportOwner==="host"){t&&n>0&&(e.translateY=Qe(t,n,e.scaleY));return}let r=t?Qn(t,e.paneWidth,e.canvasHeight,e.pixelRows):void 0;r&&(e.scale=r.scale,e.translateX=r.translateX,e.translateY=r.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()},releaseHost(){e.viewportOwner==="host"&&(e.layoutResult?.referenceAxis?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportRebuildPending=!0,e.viewportDirtyTimer=setTimeout(()=>{(0,l.isAlive)(e)&&e.setViewportDirty()},Ga)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,l.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}}).actions(e=>{let t;function n(u){let{rpcManager:d}=(0,M.getSession)(e);return d.call((0,M.getRpcSessionId)(e),"GraphComputeLayout",{...u,signal:t?.signal,statusCallback:h=>{e.setStatusMessage((0,M.statusMessageText)(h)??"")}})}function r(u){return Jn(u,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread})}function*o(u){let d=performance.now(),h=O(e.chosenLayoutMode).run(u,e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(h)return{result:h,duration:performance.now()-d};let y=Ia(u),k=r(u),x=y.get(k);if(x)return{result:x,duration:performance.now()-d};let G=yield Zn(u,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread},n);return Ba(y,k,G.result),G}let a=0;function*i(u){let d=++a,h=()=>e.graph===u&&d===a,y=t?.signal,k;try{k=yield*o(u)}catch(G){if(!h()||y?.aborted)return!1;throw G}let x=h();return x&&(e.layoutResult=k.result,e.setLayoutMs(k.duration)),x}function*s(u,d,h,y=!1){e.setStatusMessage("Parsing GFA");let k=qn(u,d,{referencePath:e.referencePath||h?.assemblyName,maxNodes:e.maxGraphNodes}),x=y?e.selectedNode:null;e.graph=k,e.graphRegion=h,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),x!==null&&e.nodeById?.has(x)&&(e.selectedNode=x),e.setStatusMessage("Computing layout"),yield*i(k)}let g=0;function p(){let u=++g;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>u===g,signal:t.signal}}function*f(u,d,h){let y=Ma(u);if(!(u.type!=="RgfaTabixAdapter"||y===void 0))try{let k=yield(0,M.getSession)(e).rpcManager.call((0,M.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${y}.bubbles.bed.gz`,baseUri:u.baseUri,assemblyNameToPanSN:u.assemblyNameToPanSN},regions:[d]});h()&&(e.indexBubbles=k.map(x=>({refName:d.refName,start:x.get("start"),end:x.get("end"),segmentCount:x.get("segmentCount"),pathCount:x.get("pathCount")??0,inversion:x.get("inversion"),shortestAlleleLength:x.get("shortestAlleleLength"),longestAlleleLength:x.get("longestAlleleLength"),segments:x.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(k){console.warn("[GraphGenomeView] no bubble index for this graph",k)}}function*L(u,d,h){let y=(0,M.getSession)(e),k=u?y.tracks.find(x=>x.trackId===u):void 0;if(k)try{return yield y.rpcManager.call((0,M.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:(0,_.readConfObject)(k,"adapter"),regions:[d]})}catch(x){console.warn(`[GraphGenomeView] no ${h} for this graph`,x);return}}function*m(u,d){let h=yield*L(e.geneTrack?.trackId,u,"genes");h&&d()&&(e.geneFeatures=Hn(h))}function*c(u,d){let h=yield*L(e.repeatTrack?.trackId,u,"repeats");h&&d()&&(e.repeatArrays=ar(h))}function*w(u,d,h){let{isLive:y,signal:k}=p();e.isLoading=!0,e.error=void 0;try{let x=typeof d=="string"?d:yield d(k);y()&&(yield*s(x,u,h))}catch(x){y()&&(console.error("[GraphGenomeView.loadWholeGFA]",x),e.error=x)}finally{y()&&e.finishLoading()}return y()}function S(){t?.abort(),t=void 0,g++,a++}return{clearGraph(){S(),e.graph=void 0,e.graphRegion=void 0,e.layoutResult=void 0,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearInteractionState(),e.clearPerfMetrics()},stopLoad(){S(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){S()},loadGFA:(0,l.flow)(function*(u,d="Imported GFA"){yield*w(d,u)}),loadGFAFromLocation:(0,l.flow)(function*(u,d){e.setStatusMessage("Fetching GFA");let h=yield*w("uri"in u?u.uri.split("/").pop()??"GFA":"GFA",y=>(0,Cr.openLocation)(u).readFile({encoding:"utf8",signal:y}),d);d&&h&&e.graph&&(yield*c(d,()=>e.graphRegion===d))}),cutSubgraph:(0,l.flow)(function*(u,d,h={}){let{isLive:y,signal:k}=p();e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let x=performance.now(),G=yield(0,M.getSession)(e).rpcManager.call((0,M.getRpcSessionId)(e),"GetSubgraph",{adapterConfig:u,region:d,opts:h,signal:k});if(!y())return;if(e.setFetchMs(performance.now()-x),!G)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");if(yield*s(G,J(d),d,!0),!y())return;e.setStatusMessage("Reading annotations"),yield Promise.all([h.tier==="coarse"?void 0:(0,l.flow)(f)(u,d,y),(0,l.flow)(m)(d,y),(0,l.flow)(c)(d,y)])}catch(x){y()&&(console.error("[GraphGenomeView.cutSubgraph]",x),e.error=x)}finally{y()&&e.finishLoading()}}),reloadRepeats:(0,l.flow)(function*(){let u=e.graphRegion,d=e.repeatTrack?.trackId;u&&(yield*c(u,()=>e.graphRegion===u&&e.repeatTrack?.trackId===d))}),reloadGenes:(0,l.flow)(function*(){let u=e.graphRegion,d=e.geneTrack?.trackId;u&&(yield*m(u,()=>e.graphRegion===u&&e.geneTrack?.trackId===d))}),popBubble:(0,l.flow)(function*(u){let d=e.graph;if(!d)return;let h=Fn(d,ce(u));if(h.nodes.length===0){(0,M.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:y}=p();e.popStack=[...e.popStack,{graph:d,layoutMode:e.chosenLayoutMode,label:d.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let k=`${Ft[q(u,e.repeatArrays).kind]} at ${u.refName}:${u.start.toLocaleString()}`;e.graph={...h,name:k},e.chosenLayoutMode==="variants"&&(e.layoutMode="force"),e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*i(e.graph))&&e.finishLoading()}catch(x){y()&&(e.error=x,e.finishLoading())}}),unpopBubble:(0,l.flow)(function*(){let u=e.poppedFrom;if(u){e.popStack=e.popStack.slice(0,-1),e.graph=u.graph,e.layoutMode=u.layoutMode,e.indexBubbles=u.indexBubbles,e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*i(u.graph))&&e.finishLoading()}catch(d){e.error=d,e.finishLoading()}}}),recomputeLayout:(0,l.flow)(function*(){let u=e.graph;if(u){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*i(u))&&e.finishLoading()}catch(d){console.error("[GraphGenomeView.recomputeLayout]",d),e.error=d,e.finishLoading()}}})}}).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,l.addDisposer)(e,(0,A.autorun)(()=>{e.layoutResult&&(0,A.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,l.addDisposer)(e,(0,A.autorun)(()=>{let r=hr((0,M.getSession)(e).hovered);(0,A.untracked)(()=>{let o=e.graphRegion,a=e.graph;o&&a&&e.setHoveredNode(r&&br(r,o)?yr({hover:r,nodes:a.nodes}):null)})})),(0,l.addDisposer)(e,(0,A.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,l.addDisposer)(e,(0,A.autorun)(()=>{let{scale:r}=e,o=ot(e);if(n){n=!1;return}let a=(0,A.untracked)(()=>e.builtViewport);a?.scale===r&&mr(a.bounds,o)||e.scheduleViewportDirty()})),(0,l.addDisposer)(e,(0,A.autorun)(()=>{let r=e.currentRenderingBackend,o=e.hoveredNode,a=e.hoveredEdge,i=e.selectedNode;if(ae(e.geometryVersion),r){let s=new Map;i!==null&&s.set(i,Ra),o!==null&&o!==i&&s.set(o,Nr),r.setNodeHighlights(s),r.setEdgeHighlight(a,Nr),e.renderNow()}}))}e.attachRenderingBackend(t,()=>({upload:n=>{n.resize(e.paneWidth,e.canvasHeight);let r=e.nodeById;if(e.layoutResult?.tubeMap)return ae(e.viewportDirty),n.uploadGeometry(Aa),e.setGeometryMetrics(0,0,{scale:(0,A.untracked)(()=>e.scale),bounds:(0,A.untracked)(()=>ot(e))}),!0;if(e.nodePositions&&e.graph&&r){ae(e.viewportDirty,e.positionsVersion);let o=performance.now(),a=(0,A.untracked)(()=>pr(ot(e),Ta)),i=Zt({nodePositions:e.nodePositions,graph:e.graph,nodeById:r,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:e.effectiveDrawPaths,nodeWidth:e.nodeWidth,highlight:e.walkHighlight,axis:(0,A.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:a,referenceRamp:e.referenceRamp,deletions:e.deletionEdgeIndexes,hiddenEdges:e.hiddenEdgeIndexes,version:e.positionsVersion});return n.uploadGeometry(i),e.setGeometryMetrics(performance.now()-o,i.nodeStrokes.length,{scale:(0,A.untracked)(()=>e.scale),bounds:a}),!0}return!1},render:n=>{if(!e.nodePositions)return!1;let r=(0,vr.getDpr)();return n.updateTransform({scaleX:e.scaleX*r,scaleY:e.scaleY*r,translateX:e.translateX*r,translateY:e.translateY*r,dpr:r}),n.render(e.darkMode?[.12,.12,.12,1]:[1,1,1,1]),e.markPainted((0,A.untracked)(()=>e.geometryVersion)),!0}}))}})).actions(e=>({switchLayout(t){return e.setLayoutMode(t),e.recomputeLayout()},cancelLoad(){e.canCancelLoad&&(e.stopLoad(),e.graph=void 0)},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user")}})).actions(e=>({showInLinearView(t){let n=(0,M.getSession)(e),r=t.assembly===e.graphRegion?.assemblyName,o=Sr({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:Rr({session:n,assemblyName:t.assembly,first:r?e.sourceTrackId:void 0})});r&&e.pairWithLinearView(o)},highlightInLinearView(t){Lr({session:(0,M.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){Mr({session:(0,M.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?Tr((0,M.getSession)(e),t):[]}})).views(e=>({graphMenuItems(){let t=e.walkChoices;return[{label:"Layout",subMenu:Yt.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:Vt.map(n=>({type:"radio",label:n.label,checked:e.chosenColorScheme===n.value,onClick:()=>{e.setColorScheme(n.value)}}))},...t.length>0?[{label:"Walk",subMenu:[{type:"radio",label:"None",checked:e.highlightedPath==="",onClick:()=>{e.setHighlightedPath("")}},...t.map(n=>({type:"radio",label:n.label,checked:e.highlightedPath===n.name,onClick:()=>{e.setHighlightedPath(n.name)}}))]}]:[],...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.paneWidth/2,e.canvasHeight/2)}},{label:"Zoom out",onClick:()=>{e.zoom(1/1.5,e.paneWidth/2,e.canvasHeight/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)}}]},launchMenuItems(){let t=[];for(let n of on({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:r=>{e.showInLinearView(r)},onShowSynteny:r=>{e.showSyntenyView(r)}}))(0,Ir.pushLaunchViewMenuItem)(t,n);return t}}))}var at=b(I(),1);function Fr(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function Er(e){let t=(0,at.readConfObject)(e,"assemblyNames"),n=Fr(t)?t.slice(1):[];return n.length>0?n:void 0}function Ie(e){let t=(0,at.readConfObject)(e,"assemblyNames");return Fr(t)?t[0]:void 0}function Ce(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 it(){return N.types.compose("GraphGenomeView",Hr.BaseViewModel,Pe(),N.types.model({type:N.types.literal("GraphGenomeView"),gfaLocation:N.types.maybe(N.types.frozen()),loadedRegion:N.types.maybe(N.types.frozen()),loadedTrackId:N.types.optional(N.types.string,""),subgraphContext:N.types.optional(N.types.number,1),subgraphHaplotypes:N.types.maybe(N.types.frozen()),maxRegionBp:N.types.optional(N.types.number,Ne)})).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get sourceTrack(){return e.loadedTrackId?(0,Dr.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.loadGFAFromLocation(e.gfaLocation,n);if(!e.loadedTrackId||!n)return;let r=e.sourceTrack,o=n.end-n.start,a=r?Ce(Ie(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 (${j(o)}) \u2014 zoom in to view graph (max ${j(e.maxRegionBp)})`));else return e.cutSubgraph((0,Vr.readConfObject)(r,"adapter"),n,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes})}}}).actions(e=>({retryLoad(){e.load()},afterAttach(){e.graph||e.load()}}))}var va=(0,zr.defineLaunchKeys)()({});function st(e){e.addViewType(()=>new _r.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:it(),launchKeys:va,ReactComponent:(0,Or.lazy)(()=>import("./chunks/GraphGenomeView-K5PZO33Q.js"))}))}var jr=b(I(),1),$=b(z(),1);function Fa(e){let t=e.getElementTypesInGroup("display"),n=o=>t.find(a=>a.name===o),r=n("MultiWaySyntenyDisplay");return[n("LinearGraphDisplay"),n("LinearBasicDisplay"),r&&Object.assign(Object.create(r),{adapterCapabilities:["headerLanes"]})].filter(o=>o!==void 0)}function ut(e){e.addTrackType(()=>{let t=(0,jr.ConfigurationSchema)("GraphTrack",{},{baseConfiguration:(0,$.createBaseTrackConfig)(e),explicitIdentifier:"trackId"}),n=new $.TrackType({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:(0,$.createBaseTrackModel)(e,"GraphTrack",t)});for(let r of Fa(e))n.addDisplayType(r);return n})}function ct(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...r}=t;return n.addView("GraphGenomeView",r),t})}var io=b(se(),1),so=b(Wr(),1);var Ur=b(I(),1),Kr=b(Yr(),1),dt=b(V(),1);function qr(){return(0,Ur.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:dt.types.enumeration("LayoutMode",he),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:dt.types.enumeration("ColorScheme",pe),defaultValue:"auto"},...(0,Kr.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var to=b(se(),1),ie=b(I(),1),no=b(z(),1),ro=b(U(),1),oo=b(Zr(),1),R=b(V(),1),ve=b(eo(),1);var Be=b(Rt(),1);var Ea=(0,to.lazy)(()=>import("./chunks/GraphTrackSettingsDialog-6STIFKVD.js"));function ao(e){return R.types.compose("LinearGraphDisplay",no.BaseDisplay,(0,oo.default)(),Pe(),R.types.model({type:R.types.literal("LinearGraphDisplay"),configuration:(0,ie.ConfigurationReference)(e),pane:R.types.maybe(R.types.frozen()),cutRegion:R.types.maybe(R.types.frozen()),coarseCut:R.types.optional(R.types.boolean,!1),maxRegionBp:R.types.optional(R.types.number,Ne),subgraphContext:R.types.optional(R.types.number,1),subgraphHaplotypes:R.types.maybe(R.types.frozen())})).preProcessSnapshot(t=>{let{pane:n,...r}=t;if(!n)return t;let{type:o,...a}=n;return{...a,...r}}).volatile(()=>({recuts:0,settledWindow:void 0})).views(t=>({get defaultLayoutMode(){return(0,ie.getConf)(t,"layoutMode")},get defaultColorScheme(){return(0,ie.getConf)(t,"colorScheme")},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get chosenHaplotypes(){return t.subgraphHaplotypes??Er(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 (${j(n.end-n.start)}, max ${j(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get displayPhase(){return(0,ve.computeDisplayStatusPhase)({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>(0,ve.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},setMaxRegionBp(n){t.maxRegionBp=n},cut(){let n=t.cutRegion;if(!n)return;let r=Ce(Ie(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})}})).actions(t=>({recutAt(n){let r=t.tierAt(n.bpPerPx);return t.coarseCut=r==="coarse",t.cutRegion=qe(n,t.capFor(r),O(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(n){t.settledWindow=n;let r=O(t.chosenLayoutMode).cutMargins;return t.regionTooLarge||!t.loadCanceled&&t.tierAt(n.bpPerPx)===t.cutTier&&$n(t.cutRegion,n,r)?!1:(t.recutAt(n),!0)},switchLayout(n){let r=O(t.chosenLayoutMode).cutMargins;t.setLayoutMode(n);let o=t.host?Ke(t.host):void 0;return o&&!t.regionTooLarge&&O(n).cutMargins!==r?t.recutAt(o):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,R.addDisposer)(t,(0,Be.reaction)(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),(0,R.addDisposer)(t,(0,Be.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,R.addDisposer)(t,(0,Be.reaction)(()=>t.host?.coarseDynamicBlocks,n=>{let{host:r}=t,o=n&&r?Ke(r):void 0;o&&t.settleOn(o)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({trackMenuItems(){return[...t.graphMenuItems(),{label:"Settings",icon:an,onClick:()=>{(0,ro.getSession)(t).queueDialog(n=>[Ea,{model:t,open:!0,onClose:n}])}},...t.launchMenuItems()]}}))}function pt(e){e.addDisplayType(()=>{let t=qr();return Object.assign(new so.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:ao(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,io.lazy)(()=>import("./chunks/LinearGraphDisplay-3WQBA6ZX.js"))}),{adapterCapabilities:["getSubgraph"]})})}var po=b(we(),1);var mt=b(I(),1),uo=b(V(),1);function gt(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 Va=(0,mt.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,mt.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:uo.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:gt}),co=Va;function lt(e){e.addAdapterType(()=>new po.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:gt,configSchema:co,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-FJIBTKQY.js").then(t=>t.default)}))}var bo=b(we(),1);var Ee=b(I(),1),lo=b(V(),1);function mo(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function go(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:mo(`${t}.segs.bed.gz`,n,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:mo(`${t}.links.bed.gz`,n,r)}:e}function ht(e){let{coarse:t,baseUri:n}=e;return go(typeof t=="object"&&t!==null?{...e,coarse:go({baseUri:n,...t})}:e)}var Fe=(e,t)=>(0,Ee.ConfigurationSchema)(e,{indexType:{model:lo.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),Ha=(0,Ee.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Fe("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:Fe("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),Da=(0,Ee.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Fe("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:Fe("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:Ha},{explicitlyTyped:!0,preProcessSnapshot:ht}),ho=Da;function bt(e){e.addAdapterType(()=>new bo.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:ht,configSchema:ho,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-7ZGKJJYW.js").then(t=>t.default)}))}var Oa=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function _a(e){return"uri"in e?e.uri:"localPath"in e?e.localPath:e.name}function za(e){return _a(e).toLowerCase().endsWith(".gbz.db")}function ja(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 $a(e,t,n){if((!n||n==="GbzBaseSyntenyAdapter")&&za(e))return{type:"GbzBaseSyntenyAdapter",gbzDbLocation:e,...t?{haplotypeIndexLocation:t}:{}};if((!n||n==="RgfaTabixAdapter")&&Gt(e))return Tt({choice:"RgfaTabixAdapter",loc:e,indexLoc:t,assembly:"",sample:""})}function yt(e){e.addToExtensionPoint("Core-preProcessTrackConfig",ja),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(n,r,o)=>$a(n,r,o)??t(n,r,o)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(n,r)=>Oa.has(n)?"GraphTrack":t(n,r))}var xo=b(U(),1),ko=b(Bo(),1),ft=b(Co(),1),So=b(Eo(),1);function W(e){return typeof e=="object"&&e!==null}function yo(e){let t;if(W(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 Wa(e,t,n){let r=e.connectedViewId;return r===void 0||r===t||!n.has(r)}function fo(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Xa(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(n=>W(n)&&Array.isArray(n.displays)?n.displays.filter(r=>W(r)&&r.type==="LinearGraphDisplay"):[])}function wo(e,t,n){let r=[],o=new Set(re(e).map(a=>W(a)?a.id:void 0));for(let a of e){if(W(a)&&a.id===t)for(let i of Xa(a)){let s=yo(i.hoverHighlight);s&&fo(s,n)&&r.push({key:typeof i.id=="string"?i.id:"graph-track",region:s})}if(W(a)&&a.type==="GraphGenomeView"&&Wa(a,t,o)){let i=yo(a.hoverHighlight);i&&fo(i,n)&&r.push({key:typeof a.id=="string"?a.id:"graph",region:i})}}return r}var X=b(K(),1),Ya=(0,So.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,ko.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),Ua=(0,ft.observer)(function({model:t,region:n}){let{classes:r}=Ya(),o=t.getHighlightCoords(n);return o?(0,X.jsx)("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:o.left,width:o.width}}):null}),Ka=(0,ft.observer)(function({model:t}){let{views:n}=(0,xo.getSession)(t);return(0,X.jsx)(X.Fragment,{children:wo([...n],t.id,t.assemblyNames).map(({key:r,region:o})=>(0,X.jsx)(Ua,{model:t,region:o},`graph-hover-${r}`))})}),Lo=Ka;var Mo=b(K(),1),qa="LinearGenomeView-TracksContainerComponent";function wt(e){e.contributeToExtensionPoint(qa,({model:t})=>(0,Mo.jsx)(Lo,{model:t},"graphgenomeview-hover-highlight"))}var Ro="GraphGenomeView";var Go="4.0.9";var xt=class extends To.default{constructor(){super(...arguments);this.name=Ro;this.version=Go}install(n){st(n),pt(n),ut(n),ct(n),wt(n),bt(n),lt(n),je(n),$e(n),yt(n),n.addRpcMethod(()=>new Q(n)),n.addRpcMethod(()=>new Z(n))}configure(n){try{(0,Ao.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:cn,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{xt as default};
3
3
  //# sourceMappingURL=jbrowse-plugin-graphgenomeviewer.esm.js.map