jbrowse-plugin-graphgenomeviewer 4.0.1 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -79,11 +79,12 @@ variant map draws them as glyphs.
79
79
  A graph track's display is `LinearGraphDisplay`. It cuts the view's window plus
80
80
  a window-width each side and re-cuts once the view leaves the cut, keeping its
81
81
  sample rows in the order they were drawn. On a layout whose x is reference bp,
82
- such as Anchored or Sample rows, the graph draws under the view's own
83
- coordinates and pans and zooms with it. The force-directed, ordered and walk-row
84
- layouts draw in their own coordinates inside the track, fitted to it, with their
85
- own zoom in the track menu, the way a variant matrix does. The track menu also
86
- picks the layout, the colour, a walk to lift out, and opens the settings.
82
+ such as Anchored, Sample rows, Walk rows or the Variant map, the graph draws
83
+ under the view's own coordinates and pans and zooms with it. The force-directed
84
+ and ordered layouts draw in their own coordinates inside the track, fitted to
85
+ it, with their own zoom in the track menu, the way a variant matrix does. The
86
+ track menu also picks the layout, the colour, a walk to lift out, and opens the
87
+ settings.
87
88
 
88
89
  ```json
89
90
  {
@@ -1,3 +1,3 @@
1
- import{a as ro}from"./chunks/chunk-KWAXLUPQ.js";import{a as D}from"./chunks/chunk-FCWXYIFC.js";import{a as lt}from"./chunks/chunk-D7XFR2IV.js";import{a as oe}from"./chunks/chunk-J4OLMLS5.js";import{A as ge,B as vt,C as Bt,G as Dt,H as Ot,I as $t,J as le,K as _t,L as jt,M as Wt,N as he,O as K,P as zt,R as Yt,a as gt,c as so,d as xt,e as U,g as St,h as se,i as de,o as Lt,q as Mt,r as Gt,s as Nt,t as ve,v as pe,w as me,x as Be,y as Pt,z as Ct}from"./chunks/chunk-A4ZWFDQY.js";import{c as kt}from"./chunks/chunk-ZNGDWZ6Z.js";import{D as Fe,E as Ve,F as co,b as N,d as ht,f as bt,g as ft,i as ie,j as Ce,l as yt,m as wt,n as Rt,o as ce,p as ue,q as Tt,r as At,s as It,u as Ft,v as Vt,w as Et,x as Ht}from"./chunks/chunk-OP7IRVG6.js";import"./chunks/chunk-F4C3BEPV.js";import{a as X,b as oo,c as ao,d as io,e as ae}from"./chunks/chunk-XEJ47DLD.js";import{a as v,b as y}from"./chunks/chunk-FY3BTKY4.js";var Ut=v((ka,Xt)=>{Xt.exports=JBrowseExports["@jbrowse/core/Plugin"]});var fe=v((La,qt)=>{qt.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var B=v((Ra,Jt)=>{Jt.exports=JBrowseExports["@jbrowse/core/configuration"]});var rn=v((Ta,nn)=>{nn.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var q=v((Aa,on)=>{on.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var gn=v((Fa,mn)=>{mn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var hn=v((Va,ln)=>{ln.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var fn=v((Ea,bn)=>{bn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var wn=v((Ha,yn)=>{yn.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var $e=v((Da,kn)=>{kn.exports=JBrowseExports.mobx});var Mr=v((ls,Rr)=>{Rr.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"]});var Nr=v((hs,Gr)=>{Gr.exports=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"]});var Cr=v((ws,Pr)=>{Pr.exports=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"]});var to=y(Ut(),1),no=y(oe(),1);var be=y(X(),1),Kt=(0,gt.createSvgIcon)([(0,be.jsx)("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),(0,be.jsx)("circle",{cx:"14.8",cy:"18",r:"2"},"1"),(0,be.jsx)("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var tn=y(fe(),1);var Zt=y(B(),1),Qt=y(D(),1),uo=(0,Zt.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:Qt.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}),en=uo;function Ee(e){e.addAdapterType(()=>new tn.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:en,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-BLSUE5LT.js").then(t=>t.default)}))}var an=y(rn(),1),sn=y(q(),1);function po(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var J=class extends sn.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:r,region:o,sessionId:a,opts:i,signal:c}=n,{dataAdapter:g}=await(0,an.getAdapter)(this.pluginManager,a,r);return po(g)?g.getSubgraph(o,{...i,signal:c}):(console.warn(`[GetSubgraph] ${g.constructor.name} does not implement getSubgraph`),"")}};var dn=y(ae(),1),cn=y(q(),1),un=y(D(),1),mo=(0,dn.lazy)(()=>import("./chunks/AddTrackWorkflow-TPCKXM2H.js"));function He(e){e.addAddTrackWorkflowType(()=>new cn.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:mo,stateModel:un.types.model({})}))}var pn=y(q(),1);var De;function Oe(){return De??=import("./chunks/bandage-layout-FIOZ7B3E.js").then(e=>e.default()).catch(e=>{throw De=void 0,e}),De}var Z=class extends pn.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 Oe();a?.("Computing layout");let c=performance.now(),g=i.computeLayout(r,o),l=performance.now()-c;return{result:g,duration:l}}};var xr=y(ae(),1),Sr=y(gn(),1),Lr=y(hn(),1);var $=y(B(),1),br=y(fn(),1),fr=y(io(),1),G=y(oe(),1),yr=y(ro(),1),s=y(D(),1),wr=y(wn(),1),kr=y(so(),1),T=y($e(),1);var go=.9,_e=2,lo=1e3;function xn(e,t,n,r=o=>o){let o=new Map(e.nodes.map(i=>[i.name,i])),a=[];for(let i of t){let c=[],g,l=[],x=[];for(let b of se(i)){let f=o.get(b),h=f&&n[f.id];if(!(!f||!h?.length)){if(N(f)&&(f.stable.start<i.start||f.stable.start>=i.end)){x.push(h[Math.floor(h.length/2)]);continue}l.push(f.id),c.push(de(h.length===1?[h[0],h[0]]:h));for(let w of h)(!g||w.y<g.y)&&(g=w)}}if(!g)continue;let M=x.length?{x:x.reduce((b,f)=>b+f.x,0)/x.length,y:x.reduce((b,f)=>b+f.y,0)/x.length}:g,p=new Map;for(let b of i.routes??[])for(let f of new Set(b.steps))p.set(f,(p.get(f)??0)+1);let u=[];for(let b of i.routes??[]){if(i.longestAlleleLength<lo)break;if(b.steps.length===0)continue;let f=Math.min(...b.steps.map(d=>p.get(d))),h,w=-1;for(let d of b.steps)if(p.get(d)===f)for(let m of n[d]??[]){let k=Math.hypot(m.x-M.x,m.y-M.y);k>w&&(w=k,h=m)}h&&u.push({route:b,at:h,text:ho(b,r)})}a.push({bubble:i,...U(i),path:c.join(""),top:g,members:l.length,nodeIds:l,whole:l.length>=go*e.nodes.length,routes:u})}return a}function ho(e,t){let n=[...new Set(e.walks.map(t))].sort(),r=n.slice(0,_e).join(", "),o=n.length>_e?` +${n.length-_e}`:"";return`${r}${o} \xB7 ${xt(e.bp)}`}function Sn(e){if(!e.nodes.some(N))return[];let t=new Map(e.nodes.map(p=>[p.id,p])),n=Lt(e),r=new Map(n.map((p,u)=>[p,u])),o=new Int32Array(n.length+1),a=new Map,i=new Set;for(let p of e.edges){let u=r.get(p.from),b=r.get(p.to);if(u===void 0||b===void 0||u===b)continue;i.add(`${p.from}>${p.to}`).add(`${p.to}>${p.from}`);let[f,h]=u<b?[u,b]:[b,u];o[f+1]++,o[h]--;let[w,d]=u<b?[p.from,p.to]:[p.to,p.from];(a.get(w)??a.set(w,new Set).get(w)).add(d)}for(let p=1;p<o.length;p++)o[p]+=o[p-1];let c=e.nodes.filter(N).sort((p,u)=>p.stable.start-u.stable.start),g=new Set([c[0].id,c.at(-1).id]),l=c.map(p=>[p,r.get(p.id)]).filter(([p,u])=>g.has(p.id)||o[u]===0).sort(([p,u],[b,f])=>u-f||p.stable.start-b.stable.start),x=e.paths?.map(p=>{let u=new Map;return p.nodeIds.forEach((b,f)=>{u.has(b)||u.set(b,f)}),u}),M=[];for(let p=0;p+1<l.length;p++){let[u,b]=l[p],[f,h]=l[p+1],w=n.slice(b+1,h);if(w.length===0)continue;let d=new Map([[u.id,{min:0,max:0,n:1}]]);for(let P of[u.id,...w]){let C=d.get(P);if(C)for(let E of a.get(P)??[]){if(r.get(E)>h)continue;let mt=E===f.id?0:t.get(E).length,Pe=d.get(E);d.set(E,{min:Math.min(Pe?.min??1/0,C.min+mt),max:Math.max(Pe?.max??-1/0,C.max+mt),n:Math.min(kt,C.n+(Pe?.n??0))})}}let m=x&&bo(e,t,x,u.id,f.id),k=m?.n?m:void 0,L=k??d.get(f.id)??{min:0,max:0,n:0},R=m!==void 0&&m.left>0,S=u.stable.start+u.length,A=f.stable.start,I=[u.id,...w.filter(P=>N(t.get(P))),f.id],V=I.some((P,C)=>C>0&&!i.has(`${I[C-1]}>${P}`)),z=V||R,O=V&&!k;M.push({refName:u.stable.refName,start:S,end:A,segmentCount:w.length+2,pathCount:L.n,inversion:!1,shortestAlleleLength:O?A-S:L.min,longestAlleleLength:O?A-S:L.max,segments:[u,...w.map(P=>t.get(P)),f].map(P=>P.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:z,routes:k?.routes})}return M}function bo(e,t,n,r,o){let a=new Map,i=1/0,c=-1/0,g=0;return e.paths.forEach((l,x)=>{let M=n[x].get(r),p=n[x].get(o);if(M===void 0||p===void 0){(M!==void 0||p!==void 0)&&g++;return}let u=l.nodeIds.slice(Math.min(M,p)+1,Math.max(M,p));p<M&&u.reverse();let b=0;for(let w of u)b+=t.get(w)?.length??0;let f=u.join(","),h=a.get(f)??{steps:u,bp:b,walks:[]};h.walks.push(l.name),a.set(f,h),i=Math.min(i,b),c=Math.max(c,b)}),a.size||g?{min:i,max:c,n:a.size,left:g,routes:[...a.values()]}:void 0}function Ln(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(c=>o.has(c))})).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 je=new Set(["Gff3TabixAdapter","Gff3Adapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),fo=/gene|refseq|gencode|ensembl|annotation/i;function Rn(e,t){if(t)return e.find(r=>r.trackId===t);let n=e.filter(r=>je.has(r.adapterType));return n.find(r=>fo.test(`${r.trackId} ${r.name??""}`))??n[0]}function F(e,t){return typeof e.get=="function"?e.get(t):e[t]}function Mn(e,t){F(e,"type")==="exon"&&t.push({start:F(e,"start"),end:F(e,"end")});let r=F(e,"subfeatures");for(let o of r??[])Mn(o,t)}function yo(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 Gn(e){let t=[];for(let n of e){let r=F(n,"gene_name")??F(n,"name")??F(n,"id"),o=F(n,"start"),a=F(n,"end");if(!r||!(a>o))continue;let i=[];Mn(n,i),t.push({name:r,refName:F(n,"refName"),start:o,end:a,strand:F(n,"strand")??0,exons:i.length?yo(i):[{start:o,end:a}]})}return t}function Nn(e){return e.split("#").at(-1)}function Tn(e,t,n){let r=new Map,o=new Map;for(let i of e.nodes)if(N(i)&&n[i.id]?.length){let{refName:c}=i.stable,g=o.get(c)??o.set(c,Nn(c)).get(c),l=r.get(g)??r.set(g,{nodes:[],reach:0}).get(g);l.nodes.push(i),l.reach=Math.max(l.reach,i.length)}for(let{nodes:i}of r.values())i.sort((c,g)=>c.stable.start-g.stable.start);let a=[];for(let i of t){let c=r.get(Nn(i.refName));if(!c)continue;let g=[],l,x=1/0,M=0,p=(i.start+i.end)/2,{nodes:u,reach:b}=c;for(let f=bt(u,i.start-b);f<u.length&&u[f].stable.start<i.end;f++){let h=u[f],w=h.stable.start,d=w+h.length;if(d<=i.start)continue;let m=n[h.id];M+=Math.min(d,i.end)-Math.max(w,i.start);for(let R of i.exons){let S=Math.max(R.start,w),A=Math.min(R.end,d);if(A<=S)continue;let I=ve(m,(S-w)/h.length,(A-w)/h.length);I.length===1&&I.push({...I[0]}),g.push(de(I))}let k=Math.min(Math.max(p,w),d),L=Math.abs(k-p);if(L<x){x=L;let[R]=ve(m,(k-w)/h.length,(k-w)/h.length);l=R}}l&&a.push({gene:i,exons:g.join(""),at:l,covered:M/(i.end-i.start)})}return a}function wo(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 Q(e){let t={};for(let n of e)wo(n,t);return t}function We(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 An=62,ko=60;function xo(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===An||i===ko)&&(o(a),n=i===An?"+":"-",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(Q(o))}else if(r.startsWith("S")){let[,o,...a]=r.split(" "),i,c,g,l=!1,x=a[0]??"*";/^\d+$/.test(x)?(i=+x,c=a[1]??"*",g=a.slice(2)):(l=!0,c=x,i=c==="*"?0:c.length,g=a.slice(1));let M=Q(g);l&&"LN"in M&&(i=+M.LN),t.nodes.push({id:o,length:i,sequence:c,tags:M})}else if(r.startsWith("E")){let[,,o,a,,,,,i,...c]=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:Q(c)})}else if(r.startsWith("L")){let[,o,a,i,c,g,...l]=r.split(" ");o&&i&&c&&t.links.push({source:o,target:i,strand1:a,strand2:c,cigar:g??"*",tags:Q(l)})}else if(r.startsWith("W")){let[,o,a,i,c,g,l,...x]=r.split(" ");o&&a&&i&&c&&g&&l&&t.walks.push({sample:o,haplotype:+a,contig:i,start:c==="*"?-1:+c,end:g==="*"?-1:+g,segments:xo(l),tags:Q(x)})}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 So(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 Lo(e){return[...e.paths.map(t=>({...ue(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 Ro(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 ee=e=>typeof e=="number"&&e>0?e:void 0;function Mo({tags:e,length:t}){let n=ee(e.RC)??ee(e.FC)??ee(e.KC);return ee(e.dp)??ee(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function Go(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:We(e),samples:Ro(e)}}function In(e,t="Imported GFA"){let n=[],r=[],{canonical:o,traversals:a}=So(e),i=u=>`${u}${o.get(u)??"+"}`;for(let u of e.nodes){let b=Mo(u)??Math.max(a.get(u.id)??1,1);n.push(Go(u,o.get(u.id)??"+",b))}for(let u of e.links)r.push({from:i(u.source),to:i(u.target),fromStrand:u.strand1==="-"?"-":"+",toStrand:u.strand2==="-"?"-":"+"});let c=[],g=new Map,l=(u,b)=>[u,b].sort().join("--");function x(u,b){for(let f=0;f<u.length-1;f++){let h=l(u[f],u[f+1]);g.has(h)||g.set(h,new Set),g.get(h).add(b)}}for(let u of e.paths){let b=u.path.split(",").map(f=>i(f.slice(0,-1)));c.push({name:u.name,nodeIds:b}),x(b,u.name)}for(let u of e.walks){let b=u.segments.map(h=>i(h.id)),f=`${u.sample}#${u.haplotype}#${u.contig}`;c.push({name:f,nodeIds:b,sample:u.sample,haplotype:u.haplotype,contig:u.contig}),x(b,f)}for(let u of r){let b=g.get(l(u.from,u.to));b&&b.size>0&&(u.pathIds=[...b])}let M=new Map(e.nodes.map(u=>[u.id,u.length])),p=e.paths.length>0||e.walks.length>0?Tt(Lo(e),u=>M.get(u)??0):void 0;return{name:t,nodes:n,edges:r,paths:c.length>0?c:void 0,anchorPaths:p?.anchorPaths,pathVisits:p?.pathVisits,anchoredBy:n.some(u=>u.stable)?"tags":void 0}}function ye(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 Pn(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function Cn(e,t){let n=Pn(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 vn(e){let t=Pn(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 Bn(e,t){let n=e.end-e.start,r=Math.max(0,Math.min(e.span,(t-n)/2));return{refName:e.refName,assemblyName:e.assemblyName,start:Math.max(e.regionStart,Math.floor(e.start-r)),end:Math.min(e.regionEnd,Math.ceil(e.end+r))}}function Fn(e,t){return e?.refName===t.refName&&e.assemblyName===t.assemblyName&&e.start<=t.start&&t.end<=e.end}var Vn=y(B(),1),En=y(D(),1),No="rgb(60,65,72)";function Hn({start:e,end:t}){let r=`min(300, max(0, ((get(feature,'start')+get(feature,'end'))/2 - ${e}) / ${t-e} * 300))`;return`jexl:get(feature,'rank')>0 ? '${No}' : 'hsl(' + ${r} + ',70%,50%)'`}function To(e){return typeof e=="object"&&e!==null&&"id"in e&&Array.isArray(e.tracks)}function Dn(e,t,n){for(let r of e)if(To(r)&&(t===void 0||r.id===t)){let a=r.tracks?.find(i=>i.configuration.trackId===n)?.displays[0];if(a?.type==="LinearBasicDisplay")return a}}function On(e,t){let{color:n}=(0,En.getSnapshot)(e.configuration);(typeof n=="object"&&n!==null&&"value"in n?n.value:n)!==t&&(0,Vn.setConf)(e,"color",t)}function $n(e,t){let n=e.nodes.filter(h=>N(h)&&(t[h.id]?.length??0)>0);if(n.length<2)return t;let r=n.map(h=>{let w=t[h.id],d=w[Math.floor(w.length/2)];return{x:d.x,y:d.y,r:h.stable.start+h.length/2,w:h.length}}),o=r.reduce((h,w)=>h+w.w,0),a=r.reduce((h,w)=>h+w.x*w.w,0)/o,i=r.reduce((h,w)=>h+w.y*w.w,0)/o,c=r.reduce((h,w)=>h+w.r*w.w,0)/o,g=0,l=0;for(let h of r)g+=h.w*(h.x-a)*(h.r-c),l+=h.w*(h.y-i)*(h.r-c);let x=-Math.atan2(l,g),M=Math.cos(x),p=Math.sin(x),u={};for(let[h,w]of Object.entries(t))u[h]=w.map(d=>{let m=d.x-a,k=d.y-i;return{x:a+M*m-p*k,y:i+p*m+M*k}});let b=0,f=0;for(let h of e.nodes)if(!N(h))for(let w of u[h.id]??[])w.y>i?b++:f++;if(f>b)for(let h of Object.values(u))for(let w of h)w.y=2*i-w.y;return u}var _n=30;function Ao(e,t){let{opts:n}=t,r=new Map(t.nodes.map(p=>[p.id,ie(n,p.length)])),o=p=>r.get(p)??n.minimumNodeLength,a=e.nodes.filter(N).sort((p,u)=>p.stable.start-u.stable.start),i=new Map,c=0;for(let p of a)i.set(p.id,{x:c,y:0}),c+=o(p.id)+n.edgeLength;let g=pe(e),l=new Map(a.map(p=>[p.id,0])),x=a.map(p=>p.id);for(let p of x){let u=i.get(p),b=l.get(p)+1;for(let f of g.get(p)??[])l.has(f)||(l.set(f,b),i.set(f,{x:u.x+o(p)/2,y:_n*b}),x.push(f))}let M=0;for(let p of e.nodes)i.has(p.id)||i.set(p.id,{x:M++*c/e.nodes.length,y:_n*3});return i}function jn(e,t){let n=Ao(e,t);return t.nodes.map(r=>({...r,...n.get(r.id)}))}var Ye=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),Io=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function zn(e,t){return t?e.find(r=>r.trackId===t):e.filter(r=>Ye.has(r.adapterType)).find(r=>Io.test(`${r.trackId} ${r.name??""}`))}function ke(e,t){return typeof e.get=="function"?e.get(t):e[t]}var Yn=/^\w+=[^;]*(;\w+=[^;]*)*$/;function Po(e){let t=ke(e,"name");if(!(typeof t!="string"||!Yn.test(t)))return Object.fromEntries(t.split(";").map(n=>{let r=n.indexOf("=");return[n.slice(0,r),n.slice(r+1)]}))}function we(e,t){let n=ke(e,t);return n!==void 0?n:ke(e,"INFO")?.[t]??Po(e)?.[t]}var Xn=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],Co=["RUL","period","PERIOD","consensusSize","unit","unitLength"],vo=["TRID","REPID","VARID","ID","name","id"];function xe(e,t){for(let n of t){let r=we(e,n),o=String((Array.isArray(r)?r[0]:r)??"").split(",")[0].trim();if(o!==""&&o!==".")return o}}var Bo=/^[ACGTURYSWKMBDHVN]+$/i;function Fo(e){let t=Number(xe(e,Co));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=xe(e,Xn);return n&&Bo.test(n)?n.length:void 0}function Wn(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 Vo(e){let t=ke(e,"samples"),n={};for(let[r,o]of Object.entries(t??{})){let a=Wn(o.SD),i=Wn(o.AL).flatMap((c,g)=>c!==void 0&&c>0?[a[g]===void 0?{bp:c}:{bp:c,spanningReads:a[g]}]:[]);i.length>0&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}function Un(e){let t=[];for(let n of e){let r=we(n,"start"),o=we(n,"end"),a=Fo(n);if(!(o>r)||a===void 0)continue;let i=we(n,"refName"),c=xe(n,Xn),g=xe(n,vo);t.push({key:`${i}:${r}-${o}`,name:(g&&!Yn.test(g)?g:void 0)??(c&&c.length<=12?`(${c})n`:`${i}:${(r+1).toLocaleString()}-${o.toLocaleString()}`),refName:i,start:r,end:o,unit:a,motif:c,calls:Vo(n)})}return t.sort((n,r)=>n.start-r.start)}function Kn(e,t){let n=e.paths?.find(l=>l.name===t);if(!n)return;let r=new Map(e.nodes.map(l=>[l.id,l])),o=new Map;e.edges.forEach((l,x)=>{o.set(`${l.from}>${l.to}`,x)});let a=new Set(n.nodeIds),i=new Set;for(let l=1;l<n.nodeIds.length;l++){let x=n.nodeIds[l-1],M=n.nodeIds[l],p=o.get(`${x}>${M}`)??o.get(`${M}>${x}`);p!==void 0&&i.add(p)}let c=l=>l.reduce((x,M)=>x+(r.get(M)?.length??0),0),g=e.referencePath?e.paths.find(l=>ue(l.name).name===e.referencePath):void 0;return{name:t,nodeIds:a,edgeIndexes:i,steps:n.nodeIds.length,bp:c(n.nodeIds),referenceBp:g&&g!==n?c(g.nodeIds):void 0}}function Se(e){return typeof e=="object"&&e!==null}function Eo(e){return Se(e)&&typeof e.get=="function"}function Ho(e){let t=Eo(e)?e.get("name"):Se(e)?e.name:void 0;return typeof t=="string"?t:void 0}function qn(e){let t;if(Se(e)&&Se(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:Ho(e.hoverFeature)})}return t}function Jn(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function Zn({hover:e,nodes:t}){let n,r;for(let o of t)o.name===e.featureName?n=o.id:r===void 0&&N(o)&&e.coord>=o.stable.start&&e.coord<o.stable.start+o.length&&(r=o.id);return n??r??null}var Xe=y(B(),1);function Qn(e){return typeof e=="object"&&e!==null}function Do(e){return Qn(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function te(e){return e.flatMap(t=>Qn(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function ne({views:e,connectedViewId:t,assemblyName:n}){let r=te(e).filter(a=>Do(a)).filter(a=>a.assemblyNames.includes(n));return r.find(a=>a.id===t)??(r.length===1?r[0]:void 0)}function tr(e,t,n){n.catch(r=>{console.error(`[GraphGenomeView] ${t}`,r),e.notifyError?.(`${t}: ${r}`,r)})}var Oo=1e3;function Ue(e,t=Oo){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 nr(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 rr({session:e,location:t,assembly:n,connectedViewId:r,tracks:o=[]}){let a=ne({views:e.views,connectedViewId:r,assemblyName:n}),i;return a?(tr(e,`Could not show ${n} ${K(t)}`,Promise.resolve(a.navToLocString(he(t),n))),i=a.id):i=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${K(t)}`,init:{assembly:n,loc:he(t),tracks:o}}).id,i}function or({session:e,location:t,assembly:n,connectedViewId:r}){let o=ne({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 er(e,t){if(t===void 0)return[];let n=e.tracks.find(o=>(0,Xe.readConfObject)(o,"trackId")===t),r=n?(0,Xe.readConfObject)(n,"assemblyNames"):[];return Array.isArray(r)?r.filter(o=>typeof o=="string"):[]}function ar({session:e,contributors:t,trackId:n,graphTrackId:r}){let o=er(e,r),a=er(e,n),i=t.filter(l=>a.includes(l.sample)),c=i.length>=2?i:t,g={init:{views:c.map(l=>({assembly:l.sample,loc:he(l),...r!==void 0&&o.includes(l.sample)?{tracks:[r]}:{}})),tracks:n?c.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?tr(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",g)):e.addView("LinearSyntenyView",g)}var Le=y(B(),1),$o="FeatureTrack";function ir({session:e,assemblyName:t,first:n}){let r=[];for(let o of e.tracks){let a=(0,Le.readConfObject)(o,"type"),i=(0,Le.readConfObject)(o,"assemblyNames"),c=(0,Le.readConfObject)(o,"trackId");a===$o&&Array.isArray(i)&&i.includes(t)&&typeof c=="string"&&c!==n&&r.push(c)}return n?[n,...r]:r}var Re=y(B(),1),sr=y(lt(),1),_o="SyntenyTrack";function dr(e,t){let n=new Set(t),r=[];for(let o of e.tracks){let a=(0,Re.readConfObject)(o,"type"),i=(0,Re.readConfObject)(o,"assemblyNames"),c=(0,Re.readConfObject)(o,"trackId");if(a===_o&&typeof c=="string"&&Array.isArray(i)){let g=i.filter(l=>n.has(l)).length;g>=2&&r.push({trackId:c,name:(0,sr.getTrackName)(o,e),coverage:g})}}return r.sort((o,a)=>a.coverage-o.coverage)}var cr=y(B(),1),jo=y(lt(),1);function Wo(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function ur(e){let t=(0,cr.readConfObject)(e,"assemblyNames");return Wo(t)?t[0]:void 0}function pr(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}`}var Yo=600,Ke=160,Xo=340,mr=".segs.bed.gz";function Uo(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(mr)?n.slice(0,-mr.length):void 0}var _=40,gr=1.4,Ko=1.6,qo=150,Jo=1;function Me(...e){}var Zo=5e6;function Ge(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var Qo=2e4,ea=1e-6,ta=100;function qe(e){return Math.max(ea,Math.min(ta,e))}function Je(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function lr(e){return{minX:-e.translateX/e.scaleX,minY:-e.translateY/e.scaleY,maxX:(e.width-e.translateX)/e.scaleX,maxY:(e.canvasHeight-e.translateY)/e.scaleY}}function na(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 hr(e,t,n){let r=t-e.h*n;return _-e.minY*n+Math.max(0,r)/2}function ra(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}var Ne=new WeakMap,oa=4;function aa(e){let t=Ne.get(e);return t||(t=new Map,Ne.set(e,t)),t}function ia(e,t){let n=Ne.get(e);n&&e!==t&&Ne.set(t,n)}function sa(e,t,n){e.size>=oa&&e.delete(e.keys().next().value),e.set(t,n)}function re(){return s.types.compose("GraphGenomeView",br.BaseViewModel,(0,wr.RenderLifecycleMixin)(),s.types.model({type:s.types.literal("GraphGenomeView"),layoutQuality:s.types.optional(s.types.number,2),linearLayout:s.types.optional(s.types.boolean,!1),layoutMode:s.types.optional(s.types.enumeration(ge),"force"),colorScheme:s.types.optional(s.types.enumeration(ce),"auto"),bubbleSpread:s.types.optional(s.types.enumeration(yt),"auto"),nodeWidth:s.types.optional(s.types.enumeration(Ft),"depth"),showBubbles:s.types.optional(s.types.boolean,!0),showDeletionEdges:s.types.optional(s.types.boolean,!1),showGenes:s.types.optional(s.types.boolean,!0),geneTrackId:s.types.optional(s.types.string,""),repeatTrackId:s.types.optional(s.types.string,""),repeatKey:s.types.optional(s.types.string,""),walkRowSamples:s.types.maybe(s.types.frozen()),highlightedPath:s.types.optional(s.types.string,""),referencePath:s.types.optional(s.types.string,""),showPerf:s.types.optional(s.types.boolean,!1),contigThickness:s.types.optional(s.types.number,6),connectorThickness:s.types.optional(s.types.number,2),darkMode:s.types.optional(s.types.boolean,!1),scale:s.types.optional(s.types.number,1),translateX:s.types.optional(s.types.number,0),translateY:s.types.optional(s.types.number,0),drawPaths:s.types.optional(s.types.boolean,!1),paneHeight:s.types.maybe(s.types.number),maxGraphNodes:s.types.optional(s.types.number,Qo),maxRegionBp:s.types.optional(s.types.number,Zo),loadedTrackId:s.types.optional(s.types.string,""),loadedRegion:s.types.maybe(s.types.frozen()),subgraphHaplotypes:s.types.maybe(s.types.frozen()),subgraphContext:s.types.optional(s.types.number,1),gfaLocation:s.types.maybe(s.types.frozen()),colorDomain:s.types.maybe(s.types.frozen()),connectedViewId:s.types.maybe(s.types.string),coarseCut:s.types.optional(s.types.boolean,!1)})).volatile(()=>({graph:void 0,layoutResult:void 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",hostPaneHeight:void 0,cutNote:void 0,recuts:0,viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0})).views(e=>({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 showLoading(){return e.error===void 0&&(e.isLoading||(e.graph!==void 0||!!(e.loadedTrackId&&e.loadedRegion)||!!e.gfaLocation)&&e.lastGeometryStrokeCount===void 0)},get canRetryLoad(){return!!(e.loadedTrackId&&e.loadedRegion)||!!e.gfaLocation},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?vt(e.layoutMode,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&&t&&Fe(t.length)?Ve(t):[]},get walkChoices(){let t=e.graph?.paths;return t?.length?Ve(t):[]},get walkHighlight(){return e.graph&&e.highlightedPath?Kn(e.graph,e.highlightedPath):void 0},get effectiveDrawPaths(){return e.drawPaths&&Fe(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get preferredReferencePath(){return e.referencePath===""?e.loadedRegion?.assemblyName:e.referencePath},get rampDomain(){return e.colorDomain??e.loadedRegion},get effectiveColorScheme(){return e.colorScheme!=="auto"?e.colorScheme:e.graph?.anchoredBy?"reference-position":"uniform"},get nodePositions(){return e.layoutResult?.nodePositions},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?Sn(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get sourceAdapter(){let t=(0,G.getSession)(e).tracks.find(n=>n.trackId===e.loadedTrackId);return t?(0,$.readConfObject)(t,"adapter"):void 0},get assemblyTrackChoices(){let t=e.loadedRegion;return t?(0,G.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=>je.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>Ye.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return zn(e.repeatTrackChoices,e.repeatTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)}})).views(e=>({get nodeNeighbors(){return e.graph?pe(e.graph):void 0},get nodeInk(){let{contigThickness:t,nodeWidth:n,nodeById:r}=e,o=e.graph?Vt(e.graph):0;return{maxHalfWidthPx:Ht(t,n)/2,halfWidthPx:a=>{let i=r?.get(a);return i?Et(i,t,n,o)/2:t/2}}},get deletions(){return e.graph&&e.layoutMode!=="walkrows"?Mt(e.graph):[]},get walkRowBars(){if(e.layoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?Be(e.graph,t,t.unit):Be(e.graph,e.loadedRegion);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:$t(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.layoutMode==="variants"?e.bubbles:[]).map(n=>({bubble:n,...U(n)}))},get genePins(){Me(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&e.layoutMode!=="variants"&&e.layoutMode!=="walkrows"&&e.graph&&e.geneFeatures&&t?Tn(e.graph,e.geneFeatures,t):[]},get bubbleHalos(){Me(e.positionsVersion);let t=e.layoutResult?.nodePositions;if(!e.showBubbles||e.layoutMode==="variants"||e.layoutMode==="walkrows"||!e.graph||!t)return[];let n=new Map(e.walkChoices.map(r=>[r.name,r.label]));return xn(e.graph,e.bubbles,t,r=>n.get(r)??r)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.graph?Dt(e.graph,e.rampDomain):void 0},get assemblyNames(){let t=e.loadedRegion;return t?[t.assemblyName]:[]},get scaleX(){return Je(e.scale,e.pixelRows).scaleX},get scaleY(){return Je(e.scale,e.pixelRows).scaleY},get axisScale(){return Je(e.scale,e.pixelRows)},get layoutBounds(){let t;if(e.layoutResult){let n=1/0,r=1/0,o=-1/0,a=-1/0;for(let l of Object.values(e.layoutResult.nodePositions))for(let x of l)n=Math.min(n,x.x),r=Math.min(r,x.y),o=Math.max(o,x.x),a=Math.max(a,x.y);let i=e.layoutResult.referenceAxis&&e.popStack.length===0?e.loadedRegion:void 0;i&&i.end>i.start&&(n=i.start,o=i.end);let c=this.walkRowBars,g=c&&e.layoutResult.extent?Pt(c):e.layoutResult.extent;g&&(o=Math.max(o,g.maxX),a=Math.max(a,g.maxY)),t={minX:n,minY:r,w:o-n,h:a-r}}return t},get canvasHeight(){if(e.viewportOwner==="host"&&e.hostPaneHeight!==void 0)return e.hostPaneHeight;let t=this.layoutBounds,n=e.width-_*2,r=Math.max(Ke,e.paneHeight??Yo);if(!t)return r;if(e.pixelRows){let o=e.layoutMode==="variants"?Xo:Ke;return Math.min(r,Math.max(o,t.h+_*2))}return t.w>0&&n>0?Math.min(r,Math.max(Ke,t.h*n/t.w+_*2)):r}})).views(e=>({get geneTrack(){return Rn(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.loadedRegion,r=e.hoveredNode,o=e.nodeById,a=e.nodeNeighbors;if(n&&r!==null&&o&&a){let i=me({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?ht(t):[];return t?_t(t,{maxGap:n.length>0?ft(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,G.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 Wt(nr(e.contributingAssemblies,e.loadedRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.loadedRegion;return t!==void 0&&ne({views:[...(0,G.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),r=n?le(n):void 0,o=r?jt(e.assemblyResolver,r):void 0,a=e.loadedRegion,i=e.nodeById,c=e.nodeNeighbors,g=a&&i&&c?me({nodeId:t,nodeById:i,neighbors:c}):void 0,l=a&&g?{sample:a.assemblyName,haplotype:void 0,refName:a.refName,...g}:void 0;return{own:r&&o?{location:Ue(r),assembly:o}:void 0,reference:a&&l?{location:Ue(l),assembly:a.assemblyName}:void 0,highlight:a&&l?{location:l,assembly:a.assemblyName}:void 0}}})).views(e=>({get coarseAboveBpPerPx(){let n=e.sourceAdapter?.coarse?.aboveBpPerPx;return typeof n=="number"?n:void 0}})).views(e=>({get cutTier(){return e.coarseCut&&e.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(e=>({get regionCapBp(){return e.cutTier==="coarse"?1/0:e.maxRegionBp}})).views(e=>({get host(){let t;try{t=(0,G.getContainingView)(e)}catch{return}return t!==e&&ye(t)?t:void 0}})).views(e=>({get hostPlacesX(){let{host:t,loadedRegion: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 hostFrame(){let{host:t,loadedRegion:n}=e;return e.hostPlacesX&&t&&n?Cn(t,n):void 0}})).actions(e=>({setError(t){e.error=t,e.isLoading=!1},setStatusMessage(t){e.statusMessage=t},setFetchMs(t){e.lastFetchMs=t},setLayoutMs(t){e.lastLayoutMs=t},setGeometryMetrics(t,n,r){e.lastGeometryMs=t,e.lastGeometryStrokeCount=n,e.builtViewport=r,e.geometryVersion++},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=At(n,t);ia(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,e.viewportOwner==="host"&&(e.hostPaneHeight=t)},adoptTrack(t){e.loadedTrackId!==t&&(e.loadedTrackId=t,e.loadedRegion=void 0,e.coarseCut=!1,e.graph=void 0,e.layoutResult=void 0)},setSubgraphContext(t){e.subgraphContext=t},setWalkRowSamples(t){e.walkRowSamples=t},setSubgraphHaplotypes(t){e.subgraphHaplotypes=t},setMaxRegionBp(t){e.maxRegionBp=t},pairWithLinearView(t){let n=e.connectedViewId;n!==void 0&&te([...(0,G.getSession)(e).views]).some(o=>o.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=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,G.getSession)(e),i=e.loadedRegion,c=i?me({nodeId:t,nodeById:r,neighbors:o}):void 0;(0,G.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:le(n)?.sample,contributingHaplotype:le(n)?.haplotype,carriedBy:n.samples?.join(", "),...i&&c?{refName:i.refName,assemblyName:i.assemblyName,start:c.start,end:c.end}:{}}}))}},setTransform(t,n,r){let{host:o}=e;e.viewportOwner==="host"&&o?o.horizontalScroll(e.translateX-n):(e.viewportOwner="user",e.scale=qe(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=qe(e.scale*t),i=a/e.scale;e.scale=a,e.translateX=n-(n-e.translateX)*i,e.pixelRows||(e.translateY=r-(r-e.translateY)*i)},setViewportDirty(){e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){let t=e.layoutBounds,n=e.width-_*2,r=e.canvasHeight-_*2;if(e.viewportOwner==="host"){t&&r>0&&(e.translateY=hr(t,r,e.scaleY));return}if(t&&n>0&&r>0&&(t.w>0||!e.pixelRows&&t.h>0)){let o=t.w>0?n/t.w:1/0,a=t.h>0?r/t.h:1/0,i=qe(e.pixelRows?o:Math.min(o,a));e.scale=i,e.translateX=_-t.minX*i+(n-t.w*i)/2,e.translateY=hr(t,r,e.pixelRows?1:i)}},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.hostPaneHeight=e.canvasHeight,e.viewportOwner="host"),e.scale=t,e.translateX=n,r&&e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.hostPaneHeight=void 0,e.layoutResult?.referenceAxis?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportDirtyTimer=setTimeout(()=>{(0,s.isAlive)(e)&&e.setViewportDirty()},qo)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,s.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(r,o,a){let i=e.layoutResult?.nodePositions;if(i?.[r]){for(let c of i[r])c.x+=o,c.y+=a;n()}},scheduleViewportDirty:t}}).actions(e=>{let t;function n(d,m){let k=(0,G.getSession)(e),{rpcManager:L}=k,R="graph",S=d.nodes.some(N);return L.call(R,"GraphComputeLayout",{graph:{nodes:S?jn(d,m):m.nodes,edges:d.edges},options:{quality:e.layoutQuality,linearLayout:e.linearLayout,...m.opts,...S?{rotateComponents:!1}:{}},signal:t?.signal,statusCallback:A=>{e.setStatusMessage((0,G.statusMessageText)(A)??"")}})}function r(d){let m=d.nodes.some(N);return`${e.layoutQuality}|${e.linearLayout}|${e.bubbleSpread}|${m}|${d.referencePath??""}`}function*o(d){let m=performance.now(),k=Bt(e.layoutMode).run(d,e.loadedRegion,e.host?e.layoutResult?.sampleRows:void 0);if(k)return{result:k,duration:performance.now()-m};let L=aa(d),R=r(d),S=L.get(R);if(S)return{result:S,duration:performance.now()-m};let A=wt(e.bubbleSpread),I=Gt(d),{result:V,duration:z}=yield n(I.graph,Ce(I.graph,A)),O=Ce(d,A),P=new Map(O.nodes.map(Y=>[Y.id,ie(O.opts,Y.length)])),C=Nt(V.nodePositions,I.runs,Y=>P.get(Y)??0),E={...V,nodePositions:d.nodes.some(N)?$n(d,C):C};return sa(L,R,E),{result:E,duration:z}}let a=0;function*i(d){let m=++a,k=()=>e.graph===d&&m===a,L=t?.signal,R;try{R=yield*o(d)}catch(A){if(!k()||L?.aborted)return!1;throw A}let S=k();return S&&(e.layoutResult=R.result,e.setLayoutMs(R.duration)),S}function*c(d,m,k=!1){e.setStatusMessage("Parsing GFA");let L=ze(d),R=It(In(L,m),e.preferredReferencePath);if(R.nodes.length===0)throw new Error(`No graph segments in ${m}`);if(R.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${R.nodes.length.toLocaleString()} nodes (limit ${e.maxGraphNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);let S=k?e.selectedNode:null;e.graph=R,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),S!==null&&e.nodeById?.has(S)&&(e.selectedNode=S),e.setStatusMessage("Computing layout"),yield*i(R)}let g=0;function l(){let d=++g;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>d===g,signal:t.signal}}function x(){return e.loadedTrackId?(0,G.getSession)(e).tracks.find(d=>d.trackId===e.loadedTrackId):void 0}function*M(d,m,k){let L=Uo(d);if(!(d.type!=="RgfaTabixAdapter"||L===void 0||e.cutTier==="coarse"))try{let R=yield(0,G.getSession)(e).rpcManager.call("graph","CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${L}.bubbles.bed.gz`,baseUri:d.baseUri,assemblyNameToPanSN:d.assemblyNameToPanSN},regions:[m]});k()&&(e.indexBubbles=R.map(S=>({refName:m.refName,start:S.get("start"),end:S.get("end"),segmentCount:S.get("segmentCount"),pathCount:S.get("pathCount")??0,inversion:S.get("inversion"),shortestAlleleLength:S.get("shortestAlleleLength"),longestAlleleLength:S.get("longestAlleleLength"),segments:S.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(R){console.warn("[GraphGenomeView] no bubble index for this graph",R)}}function*p(d,m,k){let L=(0,G.getSession)(e),R=d?L.tracks.find(S=>S.trackId===d):void 0;if(R)try{return yield L.rpcManager.call("graph","CoreGetFeatures",{adapterConfig:(0,$.readConfObject)(R,"adapter"),regions:[m]})}catch(S){console.warn(`[GraphGenomeView] no ${k} for this graph`,S);return}}function*u(d,m){let k=yield*p(e.geneTrack?.trackId,d,"genes");k&&m()&&(e.geneFeatures=Gn(k))}function*b(d,m){let k=yield*p(e.repeatTrack?.trackId,d,"repeats");k&&m()&&(e.repeatArrays=Un(k))}function*f(d,m,k={}){let{isLive:L,signal:R}=l(),S=x(),A=m.end-m.start,I=(S&&pr(ur(S),m.assemblyName))??(A>e.regionCapBp?`Region too large (${Ge(A)}) \u2014 zoom in to view graph (max ${Ge(e.regionCapBp)})`:void 0);if(I!==void 0){e.graph=void 0,e.layoutResult=void 0,e.isLoading=!1,e.error=new Error(I);return}e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let V=(0,G.getSession)(e),{rpcManager:z}=V,O="graph",P=performance.now(),C=yield z.call(O,"GetSubgraph",{adapterConfig:d,region:m,opts:k,signal:R});if(!L())return;if(e.setFetchMs(performance.now()-P),!C)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");let E=K(m);if(yield*c(C,E,!0),!L())return;e.setStatusMessage("Reading annotations"),yield Promise.all([(0,s.flow)(M)(d,m,L),(0,s.flow)(u)(m,L),(0,s.flow)(b)(m,L)])}catch(V){L()&&(console.error("[GraphGenomeView.loadFromTabixSubgraph]",V),e.error=V)}finally{L()&&(e.isLoading=!1)}}function*h(){let d=e.loadedRegion,m=x();if(d&&e.loadedTrackId&&!m)e.error=new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`);else if(m&&d){let k=e.cutTier==="coarse";yield*f((0,$.readConfObject)(m,"adapter"),d,{hops:k?0:e.subgraphContext,haplotypes:e.subgraphHaplotypes,tier:k?"coarse":void 0})}}function*w(d,m,k){let{isLive:L,signal:R}=l();e.loadedTrackId="",e.loadedRegion=k,e.coarseCut=!1,e.isLoading=!0,e.error=void 0;try{let S=typeof m=="string"?m:yield m(R);L()&&(yield*c(S,d))}catch(S){L()&&(console.error("[GraphGenomeView.loadWholeGFA]",S),e.error=S)}finally{L()&&(e.isLoading=!1)}return L()}return{clearGraph(){t?.abort(),t=void 0,g++,a++,e.graph=void 0,e.layoutResult=void 0,e.loadedTrackId="",e.loadedRegion=void 0,e.coarseCut=!1,e.cutNote=void 0,e.gfaLocation=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()},cancelLoad(){e.canCancelLoad&&(t?.abort(),t=void 0,g++,a++,e.graph=void 0,e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0)},loadGFA:(0,s.flow)(function*(d,m="Imported GFA"){yield*w(m,d)}),loadGFAFromLocation:(0,s.flow)(function*(d){e.setStatusMessage("Fetching GFA");let m=e.loadedRegion,k=yield*w("uri"in d?d.uri.split("/").pop()??"GFA":"GFA",L=>(0,yr.openLocation)(d).readFile({encoding:"utf8",signal:L}),m);m&&k&&e.graph&&(yield*b(m,()=>e.loadedRegion===m))}),loadFromTabixSubgraph:(0,s.flow)(function*(d,m,k={}){e.loadedTrackId=k.trackId??"",e.loadedRegion=k.trackId?m:void 0,e.coarseCut=!1,yield*f(d,m,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes})}),refetchIfNeeded:(0,s.flow)(function*(){e.graph||(yield*h())}),reloadSubgraph:(0,s.flow)(function*(){yield*h()}),reloadRepeats:(0,s.flow)(function*(){let d=e.loadedRegion,m=e.repeatTrack?.trackId;d&&(yield*b(d,()=>e.loadedRegion===d&&e.repeatTrack?.trackId===m))}),reloadGenes:(0,s.flow)(function*(){let d=e.loadedRegion,m=e.geneTrack?.trackId;d&&(yield*u(d,()=>e.loadedRegion===d&&e.geneTrack?.trackId===m))}),popBubble:(0,s.flow)(function*(d){let m=e.graph;if(!m)return;let k=Ln(m,se(d));if(k.nodes.length===0){(0,G.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:L}=l();e.popStack=[...e.popStack,{graph:m,layoutMode:e.layoutMode,label:m.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let R=`${St[U(d).kind]} at ${d.refName}:${d.start.toLocaleString()}`;e.graph={...k,name:R},e.layoutMode==="variants"&&(e.layoutMode="force"),e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*i(e.graph))&&(e.isLoading=!1)}catch(S){L()&&(e.error=S,e.isLoading=!1)}}),unpopBubble:(0,s.flow)(function*(){let d=e.poppedFrom;if(d){e.popStack=e.popStack.slice(0,-1),e.graph=d.graph,e.layoutMode=d.layoutMode,e.indexBubbles=d.indexBubbles,e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*i(d.graph))&&(e.isLoading=!1)}catch(m){e.error=m,e.isLoading=!1}}}),recomputeLayout:(0,s.flow)(function*(){let d=e.graph;if(d){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*i(d))&&(e.isLoading=!1)}catch(m){console.error("[GraphGenomeView.recomputeLayout]",m),e.error=m,e.isLoading=!1}}})}}).actions(e=>({settleOn(t){let n=e.coarseAboveBpPerPx,r=n!==void 0&&t.bpPerPx>n?"coarse":"fine",o=r==="coarse"?1/0:e.maxRegionBp,a=t.end-t.start;e.cutNote=a>o?`Holding the last cut: ${Ge(a)} is past the ${Ge(o)} a cut may span`:void 0,!(e.cutNote!==void 0||r===e.cutTier&&Fn(e.loadedRegion,t))&&(e.coarseCut=r==="coarse",e.loadedRegion=Bn(t,o),e.recuts++,e.reloadSubgraph())}})).actions(e=>({startHosting(){(0,s.addDisposer)(e,(0,T.reaction)(()=>e.hostPlacesX,t=>{t||e.releaseHost()},{name:"GraphHostPlacesX"})),(0,s.addDisposer)(e,(0,T.reaction)(()=>e.hostFrame,t=>{t&&e.hostTransform(t.scale,t.translateX)},{equals:(t,n)=>t?.scale===n?.scale&&t?.translateX===n?.translateX,fireImmediately:!0,name:"GraphHostFrame"})),(0,s.addDisposer)(e,(0,T.reaction)(()=>e.host?.coarseDynamicBlocks,t=>{let{host:n}=e,r=t&&n?vn(n):void 0;r&&e.settleOn(r)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,s.addDisposer)(e,(0,T.autorun)(()=>{let r=e.rampDomain,o=e.loadedTrackId;if(r&&o&&e.effectiveColorScheme==="reference-position"){let a=(0,T.untracked)(()=>Dn((0,G.getSession)(e).views,e.connectedViewId,o));a&&On(a,Hn(r))}})),(0,s.addDisposer)(e,(0,T.autorun)(()=>{e.layoutResult&&(0,T.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,s.addDisposer)(e,(0,T.autorun)(()=>{let r=qn((0,G.getSession)(e).hovered);(0,T.untracked)(()=>{let o=e.loadedRegion,a=e.graph;o&&a&&e.setHoveredNode(r&&Jn(r,o)?Zn({hover:r,nodes:a.nodes}):null)})})),(0,s.addDisposer)(e,(0,T.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,s.addDisposer)(e,(0,T.autorun)(()=>{let{scale:r}=e,o=lr(e);if(n){n=!1;return}let a=(0,T.untracked)(()=>e.builtViewport);a?.scale===r&&ra(a.bounds,o)||e.scheduleViewportDirty()})),(0,s.addDisposer)(e,(0,T.autorun)(()=>{let r=e.currentRenderingBackend,o=e.hoveredNode,a=e.hoveredEdge,i=e.selectedNode;if(Me(e.geometryVersion),r){let c=new Map;i!==null&&c.set(i,Ko),o!==null&&o!==i&&c.set(o,gr),r.setNodeHighlights(c),r.setEdgeHighlight(a,gr),e.renderNow()}}))}e.attachRenderingBackend(t,()=>({upload:n=>{n.resize(e.width,e.canvasHeight);let r=e.nodeById;if(e.nodePositions&&e.graph&&r){Me(e.viewportDirty,e.positionsVersion);let o=performance.now(),a=(0,T.untracked)(()=>na(lr(e),Jo)),i=Ot({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,T.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,T.untracked)(()=>e.scale),bounds:a}),!0}return!1},render:n=>{if(!e.nodePositions)return!1;let r=(0,kr.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]),!0}}))}})).actions(e=>({switchLayout(t){return e.setLayoutMode(t),e.recomputeLayout()},retryLoad(){e.loadedTrackId&&e.loadedRegion?e.reloadSubgraph():e.gfaLocation&&e.loadGFAFromLocation(e.gfaLocation)},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user"),e.gfaLocation&&!e.graph&&e.loadGFAFromLocation(e.gfaLocation),e.refetchIfNeeded()}})).actions(e=>({showInLinearView(t){let n=(0,G.getSession)(e),r=t.assembly===e.loadedRegion?.assemblyName,o=rr({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:ir({session:n,assemblyName:t.assembly,first:e.loadedTrackId&&r?e.loadedTrackId:void 0})});r&&e.pairWithLinearView(o)},highlightInLinearView(t){or({session:(0,G.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){ar({session:(0,G.getSession)(e),contributors:e.launchableAssemblies,trackId:t,graphTrackId:e.loadedTrackId||void 0})}})).views(e=>({get syntenyLaunchTracks(){let t=e.launchableAssemblies.map(n=>n.sample);return t.length>=2?dr((0,G.getSession)(e),t):[]}})).views(e=>({menuItems(){let t=[];for(let n of zt({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:r=>{e.showInLinearView(r)},onShowSynteny:r=>{e.showSyntenyView(r)}}))(0,fr.pushLaunchViewMenuItem)(t,n);return t}}))}var da=(0,Lr.defineLaunchKeys)()({});function Ze(e){e.addViewType(()=>new Sr.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:re(),launchKeys:da,ReactComponent:(0,xr.lazy)(()=>import("./chunks/GraphGenomeView-WPKSNN4I.js"))}))}function Qe(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...r}=t;return n.addView("GraphGenomeView",r),t})}var Er=y(ae(),1),Hr=y(Mr(),1);var Tr=y(B(),1),Ar=y(Nr(),1),et=y(D(),1);function Ir(){return(0,Tr.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:et.types.enumeration("LayoutMode",ge),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:et.types.enumeration("ColorScheme",ce),defaultValue:"auto"},...(0,Ar.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the most the track takes; a layout shorter than it takes only what it needs"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var vr=y(ae(),1),j=y(B(),1),Br=y(q(),1),Te=y(oe(),1),Fr=y(Cr(),1),H=y(D(),1);var tt=y($e(),1);var ca=(0,vr.lazy)(()=>import("./chunks/GraphSettingsDialog-KQK4YZN5.js"));function Vr(e){let t=re();return H.types.compose("LinearGraphDisplay",Br.BaseDisplay,(0,Fr.default)(),H.types.model({type:H.types.literal("LinearGraphDisplay"),configuration:(0,j.ConfigurationReference)(e),pane:H.types.optional(t,()=>({type:"GraphGenomeView"})),configured:H.types.optional(H.types.boolean,!1)})).preProcessSnapshot(n=>{let r=n.pane;return r?{configured:!0,...n,pane:r.type===void 0?{type:"GraphGenomeView",...r}:r}:n}).views(n=>({get host(){let r;try{r=(0,Te.getContainingView)(n)}catch{return}return ye(r)?r:void 0},get trackId(){return(0,j.getConf)(n.parentTrack,"trackId")}})).views(n=>({trackMenuItems(){let{pane:r}=n,{graph:o}=r,a=r.walkChoices;return[{label:"Layout",subMenu:Ct.map(i=>({type:"radio",label:i.label,checked:r.layoutMode===i.value,disabled:o?!i.available(o):!1,onClick:()=>{r.switchLayout(i.value)}}))},{label:"Color",subMenu:Rt.map(i=>({type:"radio",label:i.label,checked:r.colorScheme===i.value,onClick:()=>{r.setColorScheme(i.value)}}))},...a.length>0?[{label:"Walk",subMenu:[{type:"radio",label:"None",checked:r.highlightedPath==="",onClick:()=>{r.setHighlightedPath("")}},...a.map(i=>({type:"radio",label:i.label,checked:r.highlightedPath===i.name,onClick:()=>{r.setHighlightedPath(i.name)}}))]}]:[],...r.hostPlacesX?[]:[{label:"Zoom in",onClick:()=>{r.zoom(1.5,r.width/2,r.canvasHeight/2)}},{label:"Zoom out",onClick:()=>{r.zoom(1/1.5,r.width/2,r.canvasHeight/2)}},{label:"Zoom to fit",onClick:()=>{r.zoomToFit()}}],{type:"checkbox",label:"Mark bubbles",checked:r.showBubbles,onClick:()=>{r.setShowBubbles(!r.showBubbles)}},{type:"checkbox",label:"Show deletion edges",checked:r.showDeletionEdges,onClick:()=>{r.setShowDeletionEdges(!r.showDeletionEdges)}},{type:"checkbox",label:"Genes on the backbone",checked:r.showGenes,onClick:()=>{r.setShowGenes(!r.showGenes)}},{label:"Settings",icon:Yt,onClick:()=>{(0,Te.getSession)(n).queueDialog(i=>[ca,{model:r,open:!0,onClose:i}])}}]}})).actions(n=>({setConfigured(){n.configured=!0},resizeHeight(r){let o=n.height,a=Math.max(o+r,40);return n.pane.setPaneHeight(a),a-o}})).actions(n=>({afterAttach(){let{pane:r}=n;n.configured||(r.setLayoutMode((0,j.getConf)(n,"layoutMode")),r.setColorScheme((0,j.getConf)(n,"colorScheme")),r.setPaneHeight((0,j.getConf)(n,"height")),n.setConfigured()),r.adoptTrack(n.trackId),r.startHosting(),(0,H.addDisposer)(n,(0,tt.autorun)(()=>{let{host:o}=n;o&&(r.setWidth(o.width),r.pairWithLinearView(o.id))},{name:"LinearGraphDisplayHost"})),(0,H.addDisposer)(n,(0,tt.autorun)(()=>{let o=r.canvasHeight;n.height!==o&&n.setHeight(o)},{name:"LinearGraphDisplayHeight"}))}}))}function nt(e){e.addDisplayType(()=>{let t=Ir();return new Hr.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:Vr(t),trackType:["FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,Er.lazy)(()=>import("./chunks/LinearGraphDisplay-7POYIRIB.js"))})})}var $r=y(fe(),1);var rt=y(B(),1),Dr=y(D(),1);function ot(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 ua=(0,rt.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,rt.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:Dr.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:ot}),Or=ua;function at(e){e.addAdapterType(()=>new $r.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:ot,configSchema:Or,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-FJIBTKQY.js").then(t=>t.default)}))}var Yr=y(fe(),1);var Ie=y(B(),1),Wr=y(D(),1);function _r(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function jr(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:_r(`${t}.segs.bed.gz`,n,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:_r(`${t}.links.bed.gz`,n,r)}:e}function it(e){let{coarse:t,baseUri:n}=e;return jr(typeof t=="object"&&t!==null?{...e,coarse:jr({baseUri:n,...t})}:e)}var Ae=(e,t)=>(0,Ie.ConfigurationSchema)(e,{indexType:{model:Wr.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),pa=(0,Ie.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Ae("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:Ae("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),ma=(0,Ie.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Ae("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:Ae("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:pa},{explicitlyTyped:!0,preProcessSnapshot:it}),zr=ma;function st(e){e.addAdapterType(()=>new Yr.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:it,configSchema:zr,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-7ZGKJJYW.js").then(t=>t.default)}))}var Ur=y(oe(),1),Kr=y(ao(),1),ct=y(oo(),1),qr=y(co(),1);function dt(e){return typeof e=="object"&&e!==null}function ga(e){let t;if(dt(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 la(e,t,n){let r=e.connectedViewId;return r===void 0||r===t||!n.has(r)}function ha(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Xr(e,t,n){let r=[],o=new Set(te(e).map(a=>dt(a)?a.id:void 0));for(let a of e)if(dt(a)&&a.type==="GraphGenomeView"&&la(a,t,o)){let i=ga(a.hoverHighlight);i&&ha(i,n)&&r.push({key:typeof a.id=="string"?a.id:"graph",region:i})}return r}var W=y(X(),1),ba=(0,qr.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,Kr.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),fa=(0,ct.observer)(function({model:t,region:n}){let{classes:r}=ba(),o=t.getHighlightCoords(n);return o?(0,W.jsx)("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:o.left,width:o.width}}):null}),ya=(0,ct.observer)(function({model:t}){let{views:n}=(0,Ur.getSession)(t);return(0,W.jsx)(W.Fragment,{children:Xr([...n],t.id,t.assemblyNames).map(({key:r,region:o})=>(0,W.jsx)(fa,{model:t,region:o},`graph-hover-${r}`))})}),Jr=ya;var Zr=y(X(),1),wa="LinearGenomeView-TracksContainerComponent";function ut(e){e.contributeToExtensionPoint(wa,({model:t})=>(0,Zr.jsx)(Jr,{model:t},"graphgenomeview-hover-highlight"))}var Qr="GraphGenomeView";var eo="4.0.1";var pt=class extends to.default{constructor(){super(...arguments);this.name=Qr;this.version=eo}install(n){Ze(n),nt(n),Qe(n),ut(n),st(n),at(n),Ee(n),He(n),n.addRpcMethod(()=>new Z(n)),n.addRpcMethod(()=>new J(n))}configure(n){try{(0,no.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:Kt,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{pt as default};
1
+ import{a as ir}from"./chunks/chunk-KWAXLUPQ.js";import{a as D}from"./chunks/chunk-FCWXYIFC.js";import{a as ht}from"./chunks/chunk-D7XFR2IV.js";import{a as re}from"./chunks/chunk-J4OLMLS5.js";import{A as me,B as Bt,C as Ft,G as Ot,H as $t,I as _t,J as le,K as jt,L as zt,M as Wt,N as he,O as K,P as Yt,R as Xt,a as lt,c as ur,d as St,e as U,g as Lt,h as se,i as de,o as Rt,q as Gt,r as Nt,s as Tt,t as ve,v as pe,w as ge,x as Be,y as Ct,z as vt}from"./chunks/chunk-A4ZWFDQY.js";import{c as xt}from"./chunks/chunk-ZNGDWZ6Z.js";import{D as Fe,E as Ve,F as pr,b as N,d as bt,f as ft,g as yt,i as ie,j as Ce,l as wt,m as kt,n as Mt,o as ce,p as ue,q as At,r as It,s as Pt,u as Vt,v as Et,w as Ht,x as Dt}from"./chunks/chunk-OP7IRVG6.js";import"./chunks/chunk-F4C3BEPV.js";import{a as X,b as sr,c as dr,d as cr,e as ae}from"./chunks/chunk-XEJ47DLD.js";import{a as v,b as y}from"./chunks/chunk-FY3BTKY4.js";var Kt=v((xa,Ut)=>{Ut.exports=JBrowseExports["@jbrowse/core/Plugin"]});var fe=v((Ra,Jt)=>{Jt.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var B=v((Ma,Zt)=>{Zt.exports=JBrowseExports["@jbrowse/core/configuration"]});var rn=v((Aa,on)=>{on.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var q=v((Ia,an)=>{an.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var ln=v((Va,mn)=>{mn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var bn=v((Ea,hn)=>{hn.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var yn=v((Ha,fn)=>{fn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var kn=v((Da,wn)=>{wn.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var $e=v((Oa,xn)=>{xn.exports=JBrowseExports.mobx});var To=v((hs,No)=>{No.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"]});var Io=v((bs,Ao)=>{Ao.exports=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"]});var Fo=v((ks,Bo)=>{Bo.exports=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"]});var rr=y(Kt(),1),ar=y(re(),1);var be=y(X(),1),qt=(0,lt.createSvgIcon)([(0,be.jsx)("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),(0,be.jsx)("circle",{cx:"14.8",cy:"18",r:"2"},"1"),(0,be.jsx)("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var nn=y(fe(),1);var Qt=y(B(),1),en=y(D(),1),gr=(0,Qt.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:en.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}),tn=gr;function Ee(e){e.addAdapterType(()=>new nn.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:tn,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-BLSUE5LT.js").then(t=>t.default)}))}var sn=y(rn(),1),dn=y(q(),1);function mr(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var J=class extends dn.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:o,region:r,sessionId:i,opts:a,signal:d}=n,{dataAdapter:g}=await(0,sn.getAdapter)(this.pluginManager,i,o);return mr(g)?g.getSubgraph(r,{...a,signal:d}):(console.warn(`[GetSubgraph] ${g.constructor.name} does not implement getSubgraph`),"")}};var cn=y(ae(),1),un=y(q(),1),pn=y(D(),1),lr=(0,cn.lazy)(()=>import("./chunks/AddTrackWorkflow-TPCKXM2H.js"));function He(e){e.addAddTrackWorkflowType(()=>new un.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:lr,stateModel:pn.types.model({})}))}var gn=y(q(),1);var De;function Oe(){return De??=import("./chunks/bandage-layout-FIOZ7B3E.js").then(e=>e.default()).catch(e=>{throw De=void 0,e}),De}var Z=class extends gn.RpcMethodType{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(n){let{graph:o,options:r,statusCallback:i}=n;i?.("Loading layout engine");let a=await Oe();i?.("Computing layout");let d=performance.now(),g=a.computeLayout(o,r),l=performance.now()-d;return{result:g,duration:l}}};var Ro=y(ae(),1),Mo=y(ln(),1),Go=y(bn(),1);var $=y(B(),1),wo=y(yn(),1),ko=y(cr(),1),G=y(re(),1),xo=y(ir(),1),s=y(D(),1),So=y(kn(),1),Lo=y(ur(),1),T=y($e(),1);var hr=.9,_e=2,br=1e3;function Sn(e,t,n,o=r=>r){let r=new Map(e.nodes.map(a=>[a.name,a])),i=[];for(let a of t){let d=[],g,l=[],x=[];for(let b of se(a)){let f=r.get(b),h=f&&n[f.id];if(!(!f||!h?.length)){if(N(f)&&(f.stable.start<a.start||f.stable.start>=a.end)){x.push(h[Math.floor(h.length/2)]);continue}l.push(f.id),d.push(de(h.length===1?[h[0],h[0]]:h));for(let w of h)(!g||w.y<g.y)&&(g=w)}}if(!g)continue;let M=x.length?{x:x.reduce((b,f)=>b+f.x,0)/x.length,y:x.reduce((b,f)=>b+f.y,0)/x.length}:g,p=new Map;for(let b of a.routes??[])for(let f of new Set(b.steps))p.set(f,(p.get(f)??0)+1);let u=[];for(let b of a.routes??[]){if(a.longestAlleleLength<br)break;if(b.steps.length===0)continue;let f=Math.min(...b.steps.map(c=>p.get(c))),h,w=-1;for(let c of b.steps)if(p.get(c)===f)for(let m of n[c]??[]){let k=Math.hypot(m.x-M.x,m.y-M.y);k>w&&(w=k,h=m)}h&&u.push({route:b,at:h,text:fr(b,o)})}i.push({bubble:a,...U(a),path:d.join(""),top:g,members:l.length,nodeIds:l,whole:l.length>=hr*e.nodes.length,routes:u})}return i}function fr(e,t){let n=[...new Set(e.walks.map(t))].sort(),o=n.slice(0,_e).join(", "),r=n.length>_e?` +${n.length-_e}`:"";return`${o}${r} \xB7 ${St(e.bp)}`}function Ln(e){if(!e.nodes.some(N))return[];let t=new Map(e.nodes.map(p=>[p.id,p])),n=Rt(e),o=new Map(n.map((p,u)=>[p,u])),r=new Int32Array(n.length+1),i=new Map,a=new Set;for(let p of e.edges){let u=o.get(p.from),b=o.get(p.to);if(u===void 0||b===void 0||u===b)continue;a.add(`${p.from}>${p.to}`).add(`${p.to}>${p.from}`);let[f,h]=u<b?[u,b]:[b,u];r[f+1]++,r[h]--;let[w,c]=u<b?[p.from,p.to]:[p.to,p.from];(i.get(w)??i.set(w,new Set).get(w)).add(c)}for(let p=1;p<r.length;p++)r[p]+=r[p-1];let d=e.nodes.filter(N).sort((p,u)=>p.stable.start-u.stable.start),g=new Set([d[0].id,d.at(-1).id]),l=d.map(p=>[p,o.get(p.id)]).filter(([p,u])=>g.has(p.id)||r[u]===0).sort(([p,u],[b,f])=>u-f||p.stable.start-b.stable.start),x=e.paths?.map(p=>{let u=new Map;return p.nodeIds.forEach((b,f)=>{u.has(b)||u.set(b,f)}),u}),M=[];for(let p=0;p+1<l.length;p++){let[u,b]=l[p],[f,h]=l[p+1],w=n.slice(b+1,h);if(w.length===0)continue;let c=new Map([[u.id,{min:0,max:0,n:1}]]);for(let P of[u.id,...w]){let C=c.get(P);if(C)for(let E of i.get(P)??[]){if(o.get(E)>h)continue;let mt=E===f.id?0:t.get(E).length,Pe=c.get(E);c.set(E,{min:Math.min(Pe?.min??1/0,C.min+mt),max:Math.max(Pe?.max??-1/0,C.max+mt),n:Math.min(xt,C.n+(Pe?.n??0))})}}let m=x&&yr(e,t,x,u.id,f.id),k=m?.n?m:void 0,L=k??c.get(f.id)??{min:0,max:0,n:0},R=m!==void 0&&m.left>0,S=u.stable.start+u.length,A=f.stable.start,I=[u.id,...w.filter(P=>N(t.get(P))),f.id],V=I.some((P,C)=>C>0&&!a.has(`${I[C-1]}>${P}`)),W=V||R,O=V&&!k;M.push({refName:u.stable.refName,start:S,end:A,segmentCount:w.length+2,pathCount:L.n,inversion:!1,shortestAlleleLength:O?A-S:L.min,longestAlleleLength:O?A-S:L.max,segments:[u,...w.map(P=>t.get(P)),f].map(P=>P.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:W,routes:k?.routes})}return M}function yr(e,t,n,o,r){let i=new Map,a=1/0,d=-1/0,g=0;return e.paths.forEach((l,x)=>{let M=n[x].get(o),p=n[x].get(r);if(M===void 0||p===void 0){(M!==void 0||p!==void 0)&&g++;return}let u=l.nodeIds.slice(Math.min(M,p)+1,Math.max(M,p));p<M&&u.reverse();let b=0;for(let w of u)b+=t.get(w)?.length??0;let f=u.join(","),h=i.get(f)??{steps:u,bp:b,walks:[]};h.walks.push(l.name),i.set(f,h),a=Math.min(a,b),d=Math.max(d,b)}),i.size||g?{min:a,max:d,n:i.size,left:g,routes:[...i.values()]}:void 0}function Rn(e,t){let n=new Set(t),o=e.nodes.filter(a=>n.has(a.name)),r=new Set(o.map(a=>a.id)),i=e.paths?.map(a=>({...a,nodeIds:a.nodeIds.filter(d=>r.has(d))})).filter(a=>a.nodeIds.length>0);return{name:e.name,nodes:o,edges:e.edges.filter(a=>r.has(a.from)&&r.has(a.to)),...i?.length?{paths:i}:{},anchorPaths:e.anchorPaths,pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}var je=new Set(["Gff3TabixAdapter","Gff3Adapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),wr=/gene|refseq|gencode|ensembl|annotation/i;function Mn(e,t){if(t)return e.find(o=>o.trackId===t);let n=e.filter(o=>je.has(o.adapterType));return n.find(o=>wr.test(`${o.trackId} ${o.name??""}`))??n[0]}function F(e,t){return typeof e.get=="function"?e.get(t):e[t]}function Gn(e,t){F(e,"type")==="exon"&&t.push({start:F(e,"start"),end:F(e,"end")});let o=F(e,"subfeatures");for(let r of o??[])Gn(r,t)}function kr(e){let t=[...e].sort((o,r)=>o.start-r.start),n=[];for(let o of t){let r=n.at(-1);r&&o.start<=r.end?r.end=Math.max(r.end,o.end):n.push({...o})}return n}function Nn(e){let t=[];for(let n of e){let o=F(n,"gene_name")??F(n,"name")??F(n,"id"),r=F(n,"start"),i=F(n,"end");if(!o||!(i>r))continue;let a=[];Gn(n,a),t.push({name:o,refName:F(n,"refName"),start:r,end:i,strand:F(n,"strand")??0,exons:a.length?kr(a):[{start:r,end:i}]})}return t}function Tn(e){return e.split("#").at(-1)}function An(e,t,n){let o=new Map,r=new Map;for(let a of e.nodes)if(N(a)&&n[a.id]?.length){let{refName:d}=a.stable,g=r.get(d)??r.set(d,Tn(d)).get(d),l=o.get(g)??o.set(g,{nodes:[],reach:0}).get(g);l.nodes.push(a),l.reach=Math.max(l.reach,a.length)}for(let{nodes:a}of o.values())a.sort((d,g)=>d.stable.start-g.stable.start);let i=[];for(let a of t){let d=o.get(Tn(a.refName));if(!d)continue;let g=[],l,x=1/0,M=0,p=(a.start+a.end)/2,{nodes:u,reach:b}=d;for(let f=ft(u,a.start-b);f<u.length&&u[f].stable.start<a.end;f++){let h=u[f],w=h.stable.start,c=w+h.length;if(c<=a.start)continue;let m=n[h.id];M+=Math.min(c,a.end)-Math.max(w,a.start);for(let R of a.exons){let S=Math.max(R.start,w),A=Math.min(R.end,c);if(A<=S)continue;let I=ve(m,(S-w)/h.length,(A-w)/h.length);I.length===1&&I.push({...I[0]}),g.push(de(I))}let k=Math.min(Math.max(p,w),c),L=Math.abs(k-p);if(L<x){x=L;let[R]=ve(m,(k-w)/h.length,(k-w)/h.length);l=R}}l&&i.push({gene:a,exons:g.join(""),at:l,covered:M/(a.end-a.start)})}return i}function xr(e,t){let n=e.indexOf(":"),o=e.indexOf(":",n+1);if(n!==-1&&o!==-1){let r=e.slice(0,n),i=e.slice(n+1,o),a=e.slice(o+1);i==="i"||i==="f"?t[r]=+a:i==="Z"&&(t[r]=a)}}function Q(e){let t={};for(let n of e)xr(n,t);return t}function ze(e){let{SN:t,SO:n,SR:o}=e.tags;return typeof t=="string"&&typeof n=="number"&&typeof o=="number"?{refName:t,start:n,rank:o}:void 0}var In=62,Sr=60;function Lr(e){let t=[],n="+",o=0;function r(i){i>o&&t.push({id:e.slice(o,i),strand:n})}for(let i=0;i<e.length;i++){let a=e.charCodeAt(i);(a===In||a===Sr)&&(r(i),n=a===In?"+":"-",o=i+1)}return r(e.length),t}function We(e){let t={nodes:[],links:[],paths:[],walks:[],header:[],id:""};for(let n of e.split(`
2
+ `)){let o=n.endsWith("\r")?n.slice(0,-1):n;if(o.startsWith("H")){let[,...r]=o.split(" ");t.header.push(Q(r))}else if(o.startsWith("S")){let[,r,...i]=o.split(" "),a,d,g,l=!1,x=i[0]??"*";/^\d+$/.test(x)?(a=+x,d=i[1]??"*",g=i.slice(2)):(l=!0,d=x,a=d==="*"?0:d.length,g=i.slice(1));let M=Q(g);l&&"LN"in M&&(a=+M.LN),t.nodes.push({id:r,length:a,sequence:d,tags:M})}else if(o.startsWith("E")){let[,,r,i,,,,,a,...d]=o.split(" ");r&&i&&t.links.push({source:r.slice(0,-1),target:i.slice(0,-1),strand1:r.at(-1),strand2:i.at(-1),cigar:a??"*",tags:Q(d)})}else if(o.startsWith("L")){let[,r,i,a,d,g,...l]=o.split(" ");r&&a&&d&&t.links.push({source:r,target:a,strand1:i,strand2:d,cigar:g??"*",tags:Q(l)})}else if(o.startsWith("W")){let[,r,i,a,d,g,l,...x]=o.split(" ");r&&i&&a&&d&&g&&l&&t.walks.push({sample:r,haplotype:+i,contig:a,start:d==="*"?-1:+d,end:g==="*"?-1:+g,segments:Lr(l),tags:Q(x)})}else if(o.startsWith("P")){let[,r,i,...a]=o.split(" ");r&&i&&t.paths.push({name:r,path:i,rest:a})}}return t}function Rr(e){let t=new Map,n=new Map;function o(i,a){t.has(i)||t.set(i,a)}function r(i,a){o(i,a),n.set(i,(n.get(i)??0)+1)}for(let i of e.links)o(i.source,i.strand1==="-"?"-":"+"),o(i.target,i.strand2==="-"?"-":"+");for(let i of e.paths)for(let a of i.path.split(","))r(a.slice(0,-1),a.endsWith("-")?"-":"+");for(let i of e.walks)for(let a of i.segments)r(a.id,a.strand==="-"?"-":"+");return{canonical:t,traversals:n}}function Mr(e){return[...e.paths.map(t=>({...ue(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 Gr(e){let t=e.tags.SM;if(typeof t!="string")return;let n=t.split(",").map(o=>o.trim()).filter(Boolean);return n.length>0?n:void 0}var ee=e=>typeof e=="number"&&e>0?e:void 0;function Nr({tags:e,length:t}){let n=ee(e.RC)??ee(e.FC)??ee(e.KC);return ee(e.dp)??ee(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function Tr(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:ze(e),samples:Gr(e)}}function Pn(e,t="Imported GFA"){let n=[],o=[],{canonical:r,traversals:i}=Rr(e),a=u=>`${u}${r.get(u)??"+"}`;for(let u of e.nodes){let b=Nr(u)??Math.max(i.get(u.id)??1,1);n.push(Tr(u,r.get(u.id)??"+",b))}for(let u of e.links)o.push({from:a(u.source),to:a(u.target),fromStrand:u.strand1==="-"?"-":"+",toStrand:u.strand2==="-"?"-":"+"});let d=[],g=new Map,l=(u,b)=>[u,b].sort().join("--");function x(u,b){for(let f=0;f<u.length-1;f++){let h=l(u[f],u[f+1]);g.has(h)||g.set(h,new Set),g.get(h).add(b)}}for(let u of e.paths){let b=u.path.split(",").map(f=>a(f.slice(0,-1)));d.push({name:u.name,nodeIds:b}),x(b,u.name)}for(let u of e.walks){let b=u.segments.map(h=>a(h.id)),f=`${u.sample}#${u.haplotype}#${u.contig}`;d.push({name:f,nodeIds:b,sample:u.sample,haplotype:u.haplotype,contig:u.contig}),x(b,f)}for(let u of o){let b=g.get(l(u.from,u.to));b&&b.size>0&&(u.pathIds=[...b])}let M=new Map(e.nodes.map(u=>[u.id,u.length])),p=e.paths.length>0||e.walks.length>0?At(Mr(e),u=>M.get(u)??0):void 0;return{name:t,nodes:n,edges:o,paths:d.length>0?d:void 0,anchorPaths:p?.anchorPaths,pathVisits:p?.pathVisits,anchoredBy:n.some(u=>u.stable)?"tags":void 0}}function ye(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 Cn(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function vn(e,t){let n=Cn(e.dynamicBlocks.contentBlocks.filter(r=>r.refName===t.refName&&r.assemblyName===t.assemblyName)),{bpPerPx:o}=e;return n&&o>0?{scale:1/o,translateX:n.offsetPx-e.offsetPx-n.start/o}:void 0}function Bn(e){let t=Cn(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 Fn(e,t){let n=e.end-e.start,o=Math.max(0,Math.min(e.span,(t-n)/2));return{refName:e.refName,assemblyName:e.assemblyName,start:Math.max(e.regionStart,Math.floor(e.start-o)),end:Math.min(e.regionEnd,Math.ceil(e.end+o))}}function Vn(e,t){return e?.refName===t.refName&&e.assemblyName===t.assemblyName&&e.start<=t.start&&t.end<=e.end}var En=y(B(),1),Hn=y(D(),1),Ar="rgb(60,65,72)";function Dn({start:e,end:t}){let o=`min(300, max(0, ((get(feature,'start')+get(feature,'end'))/2 - ${e}) / ${t-e} * 300))`;return`jexl:get(feature,'rank')>0 ? '${Ar}' : 'hsl(' + ${o} + ',70%,50%)'`}function Ir(e){return typeof e=="object"&&e!==null&&"id"in e&&Array.isArray(e.tracks)}function On(e,t,n){for(let o of e)if(Ir(o)&&(t===void 0||o.id===t)){let i=o.tracks?.find(a=>a.configuration.trackId===n)?.displays[0];if(i?.type==="LinearBasicDisplay")return i}}function $n(e,t){let{color:n}=(0,Hn.getSnapshot)(e.configuration);(typeof n=="object"&&n!==null&&"value"in n?n.value:n)!==t&&(0,En.setConf)(e,"color",t)}function _n(e,t){let n=e.nodes.filter(h=>N(h)&&(t[h.id]?.length??0)>0);if(n.length<2)return t;let o=n.map(h=>{let w=t[h.id],c=w[Math.floor(w.length/2)];return{x:c.x,y:c.y,r:h.stable.start+h.length/2,w:h.length}}),r=o.reduce((h,w)=>h+w.w,0),i=o.reduce((h,w)=>h+w.x*w.w,0)/r,a=o.reduce((h,w)=>h+w.y*w.w,0)/r,d=o.reduce((h,w)=>h+w.r*w.w,0)/r,g=0,l=0;for(let h of o)g+=h.w*(h.x-i)*(h.r-d),l+=h.w*(h.y-a)*(h.r-d);let x=-Math.atan2(l,g),M=Math.cos(x),p=Math.sin(x),u={};for(let[h,w]of Object.entries(t))u[h]=w.map(c=>{let m=c.x-i,k=c.y-a;return{x:i+M*m-p*k,y:a+p*m+M*k}});let b=0,f=0;for(let h of e.nodes)if(!N(h))for(let w of u[h.id]??[])w.y>a?b++:f++;if(f>b)for(let h of Object.values(u))for(let w of h)w.y=2*a-w.y;return u}var jn=30;function Pr(e,t){let{opts:n}=t,o=new Map(t.nodes.map(p=>[p.id,ie(n,p.length)])),r=p=>o.get(p)??n.minimumNodeLength,i=e.nodes.filter(N).sort((p,u)=>p.stable.start-u.stable.start),a=new Map,d=0;for(let p of i)a.set(p.id,{x:d,y:0}),d+=r(p.id)+n.edgeLength;let g=pe(e),l=new Map(i.map(p=>[p.id,0])),x=i.map(p=>p.id);for(let p of x){let u=a.get(p),b=l.get(p)+1;for(let f of g.get(p)??[])l.has(f)||(l.set(f,b),a.set(f,{x:u.x+r(p)/2,y:jn*b}),x.push(f))}let M=0;for(let p of e.nodes)a.has(p.id)||a.set(p.id,{x:M++*d/e.nodes.length,y:jn*3});return a}function zn(e,t){let n=Pr(e,t);return t.nodes.map(o=>({...o,...n.get(o.id)}))}var Ye=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),Cr=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function Yn(e,t){return t?e.find(o=>o.trackId===t):e.filter(o=>Ye.has(o.adapterType)).find(o=>Cr.test(`${o.trackId} ${o.name??""}`))}function ke(e,t){return typeof e.get=="function"?e.get(t):e[t]}var Xn=/^\w+=[^;]*(;\w+=[^;]*)*$/;function vr(e){let t=ke(e,"name");if(!(typeof t!="string"||!Xn.test(t)))return Object.fromEntries(t.split(";").map(n=>{let o=n.indexOf("=");return[n.slice(0,o),n.slice(o+1)]}))}function we(e,t){let n=ke(e,t);return n!==void 0?n:ke(e,"INFO")?.[t]??vr(e)?.[t]}var Un=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],Br=["RUL","period","PERIOD","consensusSize","unit","unitLength"],Fr=["TRID","REPID","VARID","ID","name","id"];function xe(e,t){for(let n of t){let o=we(e,n),r=String((Array.isArray(o)?o[0]:o)??"").split(",")[0].trim();if(r!==""&&r!==".")return r}}var Vr=/^[ACGTURYSWKMBDHVN]+$/i;function Er(e){let t=Number(xe(e,Br));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=xe(e,Un);return n&&Vr.test(n)?n.length:void 0}function Wn(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let o=n===""||n===null||n===void 0?NaN:Number(n);return Number.isFinite(o)?o:void 0})}function Hr(e){let t=ke(e,"samples"),n={};for(let[o,r]of Object.entries(t??{})){let i=Wn(r.SD),a=Wn(r.AL).flatMap((d,g)=>d!==void 0&&d>0?[i[g]===void 0?{bp:d}:{bp:d,spanningReads:i[g]}]:[]);a.length>0&&(n[o]=a)}return Object.keys(n).length>0?n:void 0}function Kn(e){let t=[];for(let n of e){let o=we(n,"start"),r=we(n,"end"),i=Er(n);if(!(r>o)||i===void 0)continue;let a=we(n,"refName"),d=xe(n,Un),g=xe(n,Fr);t.push({key:`${a}:${o}-${r}`,name:(g&&!Xn.test(g)?g:void 0)??(d&&d.length<=12?`(${d})n`:`${a}:${(o+1).toLocaleString()}-${r.toLocaleString()}`),refName:a,start:o,end:r,unit:i,motif:d,calls:Hr(n)})}return t.sort((n,o)=>n.start-o.start)}function qn(e,t){let n=e.paths?.find(l=>l.name===t);if(!n)return;let o=new Map(e.nodes.map(l=>[l.id,l])),r=new Map;e.edges.forEach((l,x)=>{r.set(`${l.from}>${l.to}`,x)});let i=new Set(n.nodeIds),a=new Set;for(let l=1;l<n.nodeIds.length;l++){let x=n.nodeIds[l-1],M=n.nodeIds[l],p=r.get(`${x}>${M}`)??r.get(`${M}>${x}`);p!==void 0&&a.add(p)}let d=l=>l.reduce((x,M)=>x+(o.get(M)?.length??0),0),g=e.referencePath?e.paths.find(l=>ue(l.name).name===e.referencePath):void 0;return{name:t,nodeIds:i,edgeIndexes:a,steps:n.nodeIds.length,bp:d(n.nodeIds),referenceBp:g&&g!==n?d(g.nodeIds):void 0}}function Se(e){return typeof e=="object"&&e!==null}function Dr(e){return Se(e)&&typeof e.get=="function"}function Or(e){let t=Dr(e)?e.get("name"):Se(e)?e.name:void 0;return typeof t=="string"?t:void 0}function Jn(e){let t;if(Se(e)&&Se(e.hoverPosition)){let{refName:n,coord:o,coord0:r,assemblyName:i}=e.hoverPosition;typeof n=="string"&&typeof o=="number"&&(t={refName:n,coord:typeof r=="number"?r:o-1,assemblyName:typeof i=="string"?i:void 0,featureName:Or(e.hoverFeature)})}return t}function Zn(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function Qn({hover:e,nodes:t}){let n,o;for(let r of t)r.name===e.featureName?n=r.id:o===void 0&&N(r)&&e.coord>=r.stable.start&&e.coord<r.stable.start+r.length&&(o=r.id);return n??o??null}var Xe=y(B(),1);function eo(e){return typeof e=="object"&&e!==null}function $r(e){return eo(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function te(e){return e.flatMap(t=>eo(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function ne({views:e,connectedViewId:t,assemblyName:n}){let o=te(e).filter(i=>$r(i)).filter(i=>i.assemblyNames.includes(n));return o.find(i=>i.id===t)??(o.length===1?o[0]:void 0)}function no(e,t,n){n.catch(o=>{console.error(`[GraphGenomeView] ${t}`,o),e.notifyError?.(`${t}: ${o}`,o)})}var _r=1e3;function Ue(e,t=_r){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 oo(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 ro({session:e,location:t,assembly:n,connectedViewId:o,tracks:r=[]}){let i=ne({views:e.views,connectedViewId:o,assemblyName:n}),a;return i?(no(e,`Could not show ${n} ${K(t)}`,Promise.resolve(i.navToLocString(he(t),n))),a=i.id):a=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${K(t)}`,init:{assembly:n,loc:he(t),tracks:r}}).id,a}function ao({session:e,location:t,assembly:n,connectedViewId:o}){let r=ne({views:e.views,connectedViewId:o,assemblyName:n});return r?.addToHighlights?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),r!==void 0}function to(e,t){if(t===void 0)return[];let n=e.tracks.find(r=>(0,Xe.readConfObject)(r,"trackId")===t),o=n?(0,Xe.readConfObject)(n,"assemblyNames"):[];return Array.isArray(o)?o.filter(r=>typeof r=="string"):[]}function io({session:e,contributors:t,trackId:n,graphTrackId:o}){let r=to(e,o),i=to(e,n),a=t.filter(l=>i.includes(l.sample)),d=a.length>=2?a:t,g={init:{views:d.map(l=>({assembly:l.sample,loc:he(l),...o!==void 0&&r.includes(l.sample)?{tracks:[o]}:{}})),tracks:n?d.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?no(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",g)):e.addView("LinearSyntenyView",g)}var Le=y(B(),1),jr="FeatureTrack";function so({session:e,assemblyName:t,first:n}){let o=[];for(let r of e.tracks){let i=(0,Le.readConfObject)(r,"type"),a=(0,Le.readConfObject)(r,"assemblyNames"),d=(0,Le.readConfObject)(r,"trackId");i===jr&&Array.isArray(a)&&a.includes(t)&&typeof d=="string"&&d!==n&&o.push(d)}return n?[n,...o]:o}var Re=y(B(),1),co=y(ht(),1),zr="SyntenyTrack";function uo(e,t){let n=new Set(t),o=[];for(let r of e.tracks){let i=(0,Re.readConfObject)(r,"type"),a=(0,Re.readConfObject)(r,"assemblyNames"),d=(0,Re.readConfObject)(r,"trackId");if(i===zr&&typeof d=="string"&&Array.isArray(a)){let g=a.filter(l=>n.has(l)).length;g>=2&&o.push({trackId:d,name:(0,co.getTrackName)(r,e),coverage:g})}}return o.sort((r,i)=>i.coverage-r.coverage)}var Ke=y(B(),1),Wr=y(ht(),1);function po(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function go(e){let t=(0,Ke.readConfObject)(e,"assemblyNames"),n=po(t)?t.slice(1):[];return n.length>0?n:void 0}function mo(e){let t=(0,Ke.readConfObject)(e,"assemblyNames");return po(t)?t[0]:void 0}function lo(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}`}var Xr=600,qe=160,Ur=340,ho=".segs.bed.gz";function Kr(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(ho)?n.slice(0,-ho.length):void 0}var _=40,bo=1.4,qr=1.6,Jr=150,Zr=1;function Me(...e){}var Qr=5e6;function Ge(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var ea=2e4,ta=1e-6,na=100;function Je(e){return Math.max(ta,Math.min(na,e))}function Ze(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function fo(e){return{minX:-e.translateX/e.scaleX,minY:-e.translateY/e.scaleY,maxX:(e.width-e.translateX)/e.scaleX,maxY:(e.canvasHeight-e.translateY)/e.scaleY}}function oa(e,t){let n=(e.maxX-e.minX)*t,o=(e.maxY-e.minY)*t;return{minX:e.minX-n,minY:e.minY-o,maxX:e.maxX+n,maxY:e.maxY+o}}function yo(e,t,n){let o=t-e.h*n;return _-e.minY*n+Math.max(0,o)/2}function ra(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}var Ne=new WeakMap,aa=4;function ia(e){let t=Ne.get(e);return t||(t=new Map,Ne.set(e,t)),t}function sa(e,t){let n=Ne.get(e);n&&e!==t&&Ne.set(t,n)}function da(e,t,n){e.size>=aa&&e.delete(e.keys().next().value),e.set(t,n)}function oe(){return s.types.compose("GraphGenomeView",wo.BaseViewModel,(0,So.RenderLifecycleMixin)(),s.types.model({type:s.types.literal("GraphGenomeView"),layoutQuality:s.types.optional(s.types.number,2),linearLayout:s.types.optional(s.types.boolean,!1),layoutMode:s.types.optional(s.types.enumeration(me),"force"),colorScheme:s.types.optional(s.types.enumeration(ce),"auto"),bubbleSpread:s.types.optional(s.types.enumeration(wt),"auto"),nodeWidth:s.types.optional(s.types.enumeration(Vt),"depth"),showBubbles:s.types.optional(s.types.boolean,!0),showDeletionEdges:s.types.optional(s.types.boolean,!1),showGenes:s.types.optional(s.types.boolean,!0),geneTrackId:s.types.optional(s.types.string,""),repeatTrackId:s.types.optional(s.types.string,""),repeatKey:s.types.optional(s.types.string,""),walkRowSamples:s.types.maybe(s.types.frozen()),highlightedPath:s.types.optional(s.types.string,""),referencePath:s.types.optional(s.types.string,""),showPerf:s.types.optional(s.types.boolean,!1),contigThickness:s.types.optional(s.types.number,6),connectorThickness:s.types.optional(s.types.number,2),darkMode:s.types.optional(s.types.boolean,!1),scale:s.types.optional(s.types.number,1),translateX:s.types.optional(s.types.number,0),translateY:s.types.optional(s.types.number,0),drawPaths:s.types.optional(s.types.boolean,!1),paneHeight:s.types.maybe(s.types.number),maxGraphNodes:s.types.optional(s.types.number,ea),maxRegionBp:s.types.optional(s.types.number,Qr),loadedTrackId:s.types.optional(s.types.string,""),loadedRegion:s.types.maybe(s.types.frozen()),subgraphHaplotypes:s.types.maybe(s.types.frozen()),subgraphContext:s.types.optional(s.types.number,1),gfaLocation:s.types.maybe(s.types.frozen()),colorDomain:s.types.maybe(s.types.frozen()),connectedViewId:s.types.maybe(s.types.string),coarseCut:s.types.optional(s.types.boolean,!1)})).volatile(()=>({graph:void 0,layoutResult:void 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",hostPaneHeight:void 0,cutNote:void 0,recuts:0,viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0})).views(e=>({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 showLoading(){return e.error===void 0&&(e.isLoading||(e.graph!==void 0||!!(e.loadedTrackId&&e.loadedRegion)||!!e.gfaLocation)&&e.lastGeometryStrokeCount===void 0)},get canRetryLoad(){return!!(e.loadedTrackId&&e.loadedRegion)||!!e.gfaLocation},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?Bt(e.layoutMode,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&&t&&Fe(t.length)?Ve(t):[]},get walkChoices(){let t=e.graph?.paths;return t?.length?Ve(t):[]},get walkHighlight(){return e.graph&&e.highlightedPath?qn(e.graph,e.highlightedPath):void 0},get effectiveDrawPaths(){return e.drawPaths&&Fe(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get preferredReferencePath(){return e.referencePath===""?e.loadedRegion?.assemblyName:e.referencePath},get rampDomain(){return e.colorDomain??e.loadedRegion},get effectiveColorScheme(){return e.colorScheme!=="auto"?e.colorScheme:e.graph?.anchoredBy?"reference-position":"uniform"},get nodePositions(){return e.layoutResult?.nodePositions},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?Ln(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get sourceAdapter(){let t=(0,G.getSession)(e).tracks.find(n=>n.trackId===e.loadedTrackId);return t?(0,$.readConfObject)(t,"adapter"):void 0},get assemblyTrackChoices(){let t=e.loadedRegion;return t?(0,G.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=>je.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>Ye.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return Yn(e.repeatTrackChoices,e.repeatTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)}})).views(e=>({get nodeNeighbors(){return e.graph?pe(e.graph):void 0},get nodeInk(){let{contigThickness:t,nodeWidth:n,nodeById:o}=e,r=e.graph?Et(e.graph):0;return{maxHalfWidthPx:Dt(t,n)/2,halfWidthPx:i=>{let a=o?.get(i);return a?Ht(a,t,n,r)/2:t/2}}},get deletions(){return e.graph&&e.layoutMode!=="walkrows"?Gt(e.graph):[]},get walkRowBars(){if(e.layoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?Be(e.graph,t,t.unit):Be(e.graph,e.loadedRegion);if(!n)return;let o=e.walkRowSamples,r=o?n.rows.filter(i=>o.includes(i.sample)).sort((i,a)=>o.indexOf(i.sample)-o.indexOf(a.sample)||i.label.localeCompare(a.label)):n.rows;return{...n,rows:_t(r,t?.calls)}},get drawnRowLabels(){let t=this.walkRowBars;return t?[t.reference,...t.rows].map((n,o)=>({label:n.label,y:o*20})):e.rowLabels},get bubbleGlyphs(){return(e.layoutMode==="variants"?e.bubbles:[]).map(n=>({bubble:n,...U(n)}))},get genePins(){Me(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&e.layoutMode!=="variants"&&e.layoutMode!=="walkrows"&&e.graph&&e.geneFeatures&&t?An(e.graph,e.geneFeatures,t):[]},get bubbleHalos(){Me(e.positionsVersion);let t=e.layoutResult?.nodePositions;if(!e.showBubbles||e.layoutMode==="variants"||e.layoutMode==="walkrows"||!e.graph||!t)return[];let n=new Map(e.walkChoices.map(o=>[o.name,o.label]));return Sn(e.graph,e.bubbles,t,o=>n.get(o)??o)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.graph?Ot(e.graph,e.rampDomain):void 0},get assemblyNames(){let t=e.loadedRegion;return t?[t.assemblyName]:[]},get scaleX(){return Ze(e.scale,e.pixelRows).scaleX},get scaleY(){return Ze(e.scale,e.pixelRows).scaleY},get axisScale(){return Ze(e.scale,e.pixelRows)},get layoutBounds(){let t;if(e.layoutResult){let n=1/0,o=1/0,r=-1/0,i=-1/0;for(let l of Object.values(e.layoutResult.nodePositions))for(let x of l)n=Math.min(n,x.x),o=Math.min(o,x.y),r=Math.max(r,x.x),i=Math.max(i,x.y);let a=e.layoutResult.referenceAxis&&e.popStack.length===0?e.loadedRegion:void 0;a&&a.end>a.start&&(n=a.start,r=a.end);let d=this.walkRowBars,g=d&&e.layoutResult.extent?Ct(d):e.layoutResult.extent;g&&(r=Math.max(r,g.maxX),i=Math.max(i,g.maxY)),t={minX:n,minY:o,w:r-n,h:i-o}}return t},get canvasHeight(){if(e.viewportOwner==="host"&&e.hostPaneHeight!==void 0)return e.hostPaneHeight;let t=this.layoutBounds,n=e.width-_*2,o=Math.max(qe,e.paneHeight??Xr);if(!t)return o;if(e.pixelRows){let r=e.layoutMode==="variants"?Ur:qe;return Math.min(o,Math.max(r,t.h+_*2))}return t.w>0&&n>0?Math.min(o,Math.max(qe,t.h*n/t.w+_*2)):o}})).views(e=>({get geneTrack(){return Mn(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.loadedRegion,o=e.hoveredNode,r=e.nodeById,i=e.nodeNeighbors;if(n&&o!==null&&r&&i){let a=ge({nodeId:o,nodeById:r,neighbors:i});a&&(t={refName:n.refName,assemblyName:n.assemblyName,...a})}return t}})).views(e=>({get contributingAssemblies(){let t=e.graph,n=t?bt(t):[];return t?jt(t,{maxGap:n.length>0?yt(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,G.getSession)(e),n=e.sourceAdapter?.assemblyNameToPanSN,o=new Map(Object.entries(n??{}).map(([i,a])=>[a,i])),r=i=>i!==void 0&&t.has(i)?t.get(i)?.name??i:void 0;return i=>r(o.get(i))??r(i)}})).views(e=>({get launchableAssemblies(){return Wt(oo(e.contributingAssemblies,e.loadedRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.loadedRegion;return t!==void 0&&ne({views:[...(0,G.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),o=n?le(n):void 0,r=o?zt(e.assemblyResolver,o):void 0,i=e.loadedRegion,a=e.nodeById,d=e.nodeNeighbors,g=i&&a&&d?ge({nodeId:t,nodeById:a,neighbors:d}):void 0,l=i&&g?{sample:i.assemblyName,haplotype:void 0,refName:i.refName,...g}:void 0;return{own:o&&r?{location:Ue(o),assembly:r}:void 0,reference:i&&l?{location:Ue(l),assembly:i.assemblyName}:void 0,highlight:i&&l?{location:l,assembly:i.assemblyName}:void 0}}})).views(e=>({get coarseAboveBpPerPx(){let n=e.sourceAdapter?.coarse?.aboveBpPerPx;return typeof n=="number"?n:void 0}})).views(e=>({get cutTier(){return e.coarseCut&&e.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(e=>({get regionCapBp(){return e.cutTier==="coarse"?1/0:e.maxRegionBp}})).views(e=>({get host(){let t;try{t=(0,G.getContainingView)(e)}catch{return}return t!==e&&ye(t)?t:void 0}})).views(e=>({get hostPlacesX(){let{host:t,loadedRegion:n,layoutResult:o}=e;return t!==void 0&&t.initialized&&n!==void 0&&o?.referenceAxis===!0&&e.popStack.length===0&&!t.dynamicBlocks.contentBlocks.some(r=>r.refName===n.refName&&r.reversed)}})).views(e=>({get hostFrame(){let{host:t,loadedRegion:n}=e;return e.hostPlacesX&&t&&n?vn(t,n):void 0}})).actions(e=>({setError(t){e.error=t,e.isLoading=!1},setStatusMessage(t){e.statusMessage=t},setFetchMs(t){e.lastFetchMs=t},setLayoutMs(t){e.lastLayoutMs=t},setGeometryMetrics(t,n,o){e.lastGeometryMs=t,e.lastGeometryStrokeCount=n,e.builtViewport=o,e.geometryVersion++},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 o=It(n,t);sa(n,o),e.graph=o}},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,e.viewportOwner==="host"&&(e.hostPaneHeight=t)},adoptTrack(t){e.loadedTrackId!==t&&(e.loadedTrackId=t,e.loadedRegion=void 0,e.coarseCut=!1,e.graph=void 0,e.layoutResult=void 0)},setSubgraphContext(t){e.subgraphContext=t},setWalkRowSamples(t){e.walkRowSamples=t},setSubgraphHaplotypes(t){e.subgraphHaplotypes=t},setMaxRegionBp(t){e.maxRegionBp=t},pairWithLinearView(t){let n=e.connectedViewId;n!==void 0&&te([...(0,G.getSession)(e).views]).some(r=>r.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=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),o=e.nodeById,r=e.nodeNeighbors;if(n&&o&&r){let i=(0,G.getSession)(e),a=e.loadedRegion,d=a?ge({nodeId:t,nodeById:o,neighbors:r}):void 0;(0,G.isSessionModelWithWidgets)(i)&&i.showWidget(i.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:le(n)?.sample,contributingHaplotype:le(n)?.haplotype,carriedBy:n.samples?.join(", "),...a&&d?{refName:a.refName,assemblyName:a.assemblyName,start:d.start,end:d.end}:{}}}))}},setTransform(t,n,o){let{host:r}=e;e.viewportOwner==="host"&&r?r.horizontalScroll(e.translateX-n):(e.viewportOwner="user",e.scale=Je(t),e.translateX=n),e.translateY=o},zoom(t,n,o){let{host:r}=e;if(e.viewportOwner==="host"&&r){r.zoomTo(r.bpPerPx/t,n);return}e.viewportOwner="user";let i=Je(e.scale*t),a=i/e.scale;e.scale=i,e.translateX=n-(n-e.translateX)*a,e.pixelRows||(e.translateY=o-(o-e.translateY)*a)},setViewportDirty(){e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){let t=e.layoutBounds,n=e.width-_*2,o=e.canvasHeight-_*2;if(e.viewportOwner==="host"){t&&o>0&&(e.translateY=yo(t,o,e.scaleY));return}if(t&&n>0&&o>0&&(t.w>0||!e.pixelRows&&t.h>0)){let r=t.w>0?n/t.w:1/0,i=t.h>0?o/t.h:1/0,a=Je(e.pixelRows?r:Math.min(r,i));e.scale=a,e.translateX=_-t.minX*a+(n-t.w*a)/2,e.translateY=yo(t,o,e.pixelRows?1:a)}},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 o=e.viewportOwner!=="host";o&&(e.hostPaneHeight=e.canvasHeight,e.viewportOwner="host"),e.scale=t,e.translateX=n,o&&e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.hostPaneHeight=void 0,e.layoutResult?.referenceAxis?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportDirtyTimer=setTimeout(()=>{(0,s.isAlive)(e)&&e.setViewportDirty()},Jr)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,s.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(o,r,i){let a=e.layoutResult?.nodePositions;if(a?.[o]){for(let d of a[o])d.x+=r,d.y+=i;n()}},scheduleViewportDirty:t}}).actions(e=>{let t;function n(c,m){let k=(0,G.getSession)(e),{rpcManager:L}=k,R="graph",S=c.nodes.some(N);return L.call(R,"GraphComputeLayout",{graph:{nodes:S?zn(c,m):m.nodes,edges:c.edges},options:{quality:e.layoutQuality,linearLayout:e.linearLayout,...m.opts,...S?{rotateComponents:!1}:{}},signal:t?.signal,statusCallback:A=>{e.setStatusMessage((0,G.statusMessageText)(A)??"")}})}function o(c){let m=c.nodes.some(N);return`${e.layoutQuality}|${e.linearLayout}|${e.bubbleSpread}|${m}|${c.referencePath??""}`}function*r(c){let m=performance.now(),k=Ft(e.layoutMode).run(c,e.loadedRegion,e.host?e.layoutResult?.sampleRows:void 0);if(k)return{result:k,duration:performance.now()-m};let L=ia(c),R=o(c),S=L.get(R);if(S)return{result:S,duration:performance.now()-m};let A=kt(e.bubbleSpread),I=Nt(c),{result:V,duration:W}=yield n(I.graph,Ce(I.graph,A)),O=Ce(c,A),P=new Map(O.nodes.map(Y=>[Y.id,ie(O.opts,Y.length)])),C=Tt(V.nodePositions,I.runs,Y=>P.get(Y)??0),E={...V,nodePositions:c.nodes.some(N)?_n(c,C):C};return da(L,R,E),{result:E,duration:W}}let i=0;function*a(c){let m=++i,k=()=>e.graph===c&&m===i,L=t?.signal,R;try{R=yield*r(c)}catch(A){if(!k()||L?.aborted)return!1;throw A}let S=k();return S&&(e.layoutResult=R.result,e.setLayoutMs(R.duration)),S}function*d(c,m,k=!1){e.setStatusMessage("Parsing GFA");let L=We(c),R=Pt(Pn(L,m),e.preferredReferencePath);if(R.nodes.length===0)throw new Error(`No graph segments in ${m}`);if(R.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${R.nodes.length.toLocaleString()} nodes (limit ${e.maxGraphNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);let S=k?e.selectedNode:null;e.graph=R,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),S!==null&&e.nodeById?.has(S)&&(e.selectedNode=S),e.setStatusMessage("Computing layout"),yield*a(R)}let g=0;function l(){let c=++g;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>c===g,signal:t.signal}}function x(){return e.loadedTrackId?(0,G.getSession)(e).tracks.find(c=>c.trackId===e.loadedTrackId):void 0}function*M(c,m,k){let L=Kr(c);if(!(c.type!=="RgfaTabixAdapter"||L===void 0||e.cutTier==="coarse"))try{let R=yield(0,G.getSession)(e).rpcManager.call("graph","CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${L}.bubbles.bed.gz`,baseUri:c.baseUri,assemblyNameToPanSN:c.assemblyNameToPanSN},regions:[m]});k()&&(e.indexBubbles=R.map(S=>({refName:m.refName,start:S.get("start"),end:S.get("end"),segmentCount:S.get("segmentCount"),pathCount:S.get("pathCount")??0,inversion:S.get("inversion"),shortestAlleleLength:S.get("shortestAlleleLength"),longestAlleleLength:S.get("longestAlleleLength"),segments:S.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(R){console.warn("[GraphGenomeView] no bubble index for this graph",R)}}function*p(c,m,k){let L=(0,G.getSession)(e),R=c?L.tracks.find(S=>S.trackId===c):void 0;if(R)try{return yield L.rpcManager.call("graph","CoreGetFeatures",{adapterConfig:(0,$.readConfObject)(R,"adapter"),regions:[m]})}catch(S){console.warn(`[GraphGenomeView] no ${k} for this graph`,S);return}}function*u(c,m){let k=yield*p(e.geneTrack?.trackId,c,"genes");k&&m()&&(e.geneFeatures=Nn(k))}function*b(c,m){let k=yield*p(e.repeatTrack?.trackId,c,"repeats");k&&m()&&(e.repeatArrays=Kn(k))}function*f(c,m,k={}){let{isLive:L,signal:R}=l(),S=x(),A=m.end-m.start,I=(S&&lo(mo(S),m.assemblyName))??(A>e.regionCapBp?`Region too large (${Ge(A)}) \u2014 zoom in to view graph (max ${Ge(e.regionCapBp)})`:void 0);if(I!==void 0){e.graph=void 0,e.layoutResult=void 0,e.isLoading=!1,e.error=new Error(I);return}e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let V=(0,G.getSession)(e),{rpcManager:W}=V,O="graph",P=performance.now(),C=yield W.call(O,"GetSubgraph",{adapterConfig:c,region:m,opts:k,signal:R});if(!L())return;if(e.setFetchMs(performance.now()-P),!C)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");let E=K(m);if(yield*d(C,E,!0),!L())return;e.setStatusMessage("Reading annotations"),yield Promise.all([(0,s.flow)(M)(c,m,L),(0,s.flow)(u)(m,L),(0,s.flow)(b)(m,L)])}catch(V){L()&&(console.error("[GraphGenomeView.loadFromTabixSubgraph]",V),e.error=V)}finally{L()&&(e.isLoading=!1)}}function*h(){let c=e.loadedRegion,m=x();if(c&&e.loadedTrackId&&!m)e.error=new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`);else if(m&&c){let k=e.cutTier==="coarse";yield*f((0,$.readConfObject)(m,"adapter"),c,{hops:k?0:e.subgraphContext,haplotypes:e.subgraphHaplotypes,tier:k?"coarse":void 0})}}function*w(c,m,k){let{isLive:L,signal:R}=l();e.loadedTrackId="",e.loadedRegion=k,e.coarseCut=!1,e.isLoading=!0,e.error=void 0;try{let S=typeof m=="string"?m:yield m(R);L()&&(yield*d(S,c))}catch(S){L()&&(console.error("[GraphGenomeView.loadWholeGFA]",S),e.error=S)}finally{L()&&(e.isLoading=!1)}return L()}return{clearGraph(){t?.abort(),t=void 0,g++,i++,e.graph=void 0,e.layoutResult=void 0,e.loadedTrackId="",e.loadedRegion=void 0,e.coarseCut=!1,e.cutNote=void 0,e.gfaLocation=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()},cancelLoad(){e.canCancelLoad&&(t?.abort(),t=void 0,g++,i++,e.graph=void 0,e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0)},loadGFA:(0,s.flow)(function*(c,m="Imported GFA"){yield*w(m,c)}),loadGFAFromLocation:(0,s.flow)(function*(c){e.setStatusMessage("Fetching GFA");let m=e.loadedRegion,k=yield*w("uri"in c?c.uri.split("/").pop()??"GFA":"GFA",L=>(0,xo.openLocation)(c).readFile({encoding:"utf8",signal:L}),m);m&&k&&e.graph&&(yield*b(m,()=>e.loadedRegion===m))}),loadFromTabixSubgraph:(0,s.flow)(function*(c,m,k={}){e.loadedTrackId=k.trackId??"",e.loadedRegion=k.trackId?m:void 0,e.coarseCut=!1,yield*f(c,m,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes})}),refetchIfNeeded:(0,s.flow)(function*(){e.graph||(yield*h())}),reloadSubgraph:(0,s.flow)(function*(){yield*h()}),reloadRepeats:(0,s.flow)(function*(){let c=e.loadedRegion,m=e.repeatTrack?.trackId;c&&(yield*b(c,()=>e.loadedRegion===c&&e.repeatTrack?.trackId===m))}),reloadGenes:(0,s.flow)(function*(){let c=e.loadedRegion,m=e.geneTrack?.trackId;c&&(yield*u(c,()=>e.loadedRegion===c&&e.geneTrack?.trackId===m))}),popBubble:(0,s.flow)(function*(c){let m=e.graph;if(!m)return;let k=Rn(m,se(c));if(k.nodes.length===0){(0,G.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:L}=l();e.popStack=[...e.popStack,{graph:m,layoutMode:e.layoutMode,label:m.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let R=`${Lt[U(c).kind]} at ${c.refName}:${c.start.toLocaleString()}`;e.graph={...k,name:R},e.layoutMode==="variants"&&(e.layoutMode="force"),e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*a(e.graph))&&(e.isLoading=!1)}catch(S){L()&&(e.error=S,e.isLoading=!1)}}),unpopBubble:(0,s.flow)(function*(){let c=e.poppedFrom;if(c){e.popStack=e.popStack.slice(0,-1),e.graph=c.graph,e.layoutMode=c.layoutMode,e.indexBubbles=c.indexBubbles,e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*a(c.graph))&&(e.isLoading=!1)}catch(m){e.error=m,e.isLoading=!1}}}),recomputeLayout:(0,s.flow)(function*(){let c=e.graph;if(c){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*a(c))&&(e.isLoading=!1)}catch(m){console.error("[GraphGenomeView.recomputeLayout]",m),e.error=m,e.isLoading=!1}}})}}).actions(e=>({settleOn(t){let n=e.coarseAboveBpPerPx,o=n!==void 0&&t.bpPerPx>n?"coarse":"fine",r=o==="coarse"?1/0:e.maxRegionBp,i=t.end-t.start;e.cutNote=i>r?`Holding the last cut: ${Ge(i)} is past the ${Ge(r)} a cut may span`:void 0,!(e.cutNote!==void 0||o===e.cutTier&&Vn(e.loadedRegion,t))&&(e.coarseCut=o==="coarse",e.loadedRegion=Fn(t,r),e.recuts++,e.reloadSubgraph())}})).actions(e=>({startHosting(){(0,s.addDisposer)(e,(0,T.reaction)(()=>e.hostPlacesX,t=>{t||e.releaseHost()},{name:"GraphHostPlacesX"})),(0,s.addDisposer)(e,(0,T.reaction)(()=>e.hostFrame,t=>{t&&e.hostTransform(t.scale,t.translateX)},{equals:(t,n)=>t?.scale===n?.scale&&t?.translateX===n?.translateX,fireImmediately:!0,name:"GraphHostFrame"})),(0,s.addDisposer)(e,(0,T.reaction)(()=>e.host?.coarseDynamicBlocks,t=>{let{host:n}=e,o=t&&n?Bn(n):void 0;o&&e.settleOn(o)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,s.addDisposer)(e,(0,T.autorun)(()=>{let o=e.rampDomain,r=e.loadedTrackId;if(o&&r&&e.effectiveColorScheme==="reference-position"){let i=(0,T.untracked)(()=>On((0,G.getSession)(e).views,e.connectedViewId,r));i&&$n(i,Dn(o))}})),(0,s.addDisposer)(e,(0,T.autorun)(()=>{e.layoutResult&&(0,T.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,s.addDisposer)(e,(0,T.autorun)(()=>{let o=Jn((0,G.getSession)(e).hovered);(0,T.untracked)(()=>{let r=e.loadedRegion,i=e.graph;r&&i&&e.setHoveredNode(o&&Zn(o,r)?Qn({hover:o,nodes:i.nodes}):null)})})),(0,s.addDisposer)(e,(0,T.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,s.addDisposer)(e,(0,T.autorun)(()=>{let{scale:o}=e,r=fo(e);if(n){n=!1;return}let i=(0,T.untracked)(()=>e.builtViewport);i?.scale===o&&ra(i.bounds,r)||e.scheduleViewportDirty()})),(0,s.addDisposer)(e,(0,T.autorun)(()=>{let o=e.currentRenderingBackend,r=e.hoveredNode,i=e.hoveredEdge,a=e.selectedNode;if(Me(e.geometryVersion),o){let d=new Map;a!==null&&d.set(a,qr),r!==null&&r!==a&&d.set(r,bo),o.setNodeHighlights(d),o.setEdgeHighlight(i,bo),e.renderNow()}}))}e.attachRenderingBackend(t,()=>({upload:n=>{n.resize(e.width,e.canvasHeight);let o=e.nodeById;if(e.nodePositions&&e.graph&&o){Me(e.viewportDirty,e.positionsVersion);let r=performance.now(),i=(0,T.untracked)(()=>oa(fo(e),Zr)),a=$t({nodePositions:e.nodePositions,graph:e.graph,nodeById:o,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:e.effectiveDrawPaths,nodeWidth:e.nodeWidth,highlight:e.walkHighlight,axis:(0,T.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:i,referenceRamp:e.referenceRamp,deletions:e.deletionEdgeIndexes,hiddenEdges:e.hiddenEdgeIndexes,version:e.positionsVersion});return n.uploadGeometry(a),e.setGeometryMetrics(performance.now()-r,a.nodeStrokes.length,{scale:(0,T.untracked)(()=>e.scale),bounds:i}),!0}return!1},render:n=>{if(!e.nodePositions)return!1;let o=(0,Lo.getDpr)();return n.updateTransform({scaleX:e.scaleX*o,scaleY:e.scaleY*o,translateX:e.translateX*o,translateY:e.translateY*o,dpr:o}),n.render(e.darkMode?[.12,.12,.12,1]:[1,1,1,1]),!0}}))}})).actions(e=>({switchLayout(t){return e.setLayoutMode(t),e.recomputeLayout()},retryLoad(){e.loadedTrackId&&e.loadedRegion?e.reloadSubgraph():e.gfaLocation&&e.loadGFAFromLocation(e.gfaLocation)},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user"),e.gfaLocation&&!e.graph&&e.loadGFAFromLocation(e.gfaLocation),e.refetchIfNeeded()}})).actions(e=>({showInLinearView(t){let n=(0,G.getSession)(e),o=t.assembly===e.loadedRegion?.assemblyName,r=ro({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:so({session:n,assemblyName:t.assembly,first:e.loadedTrackId&&o?e.loadedTrackId:void 0})});o&&e.pairWithLinearView(r)},highlightInLinearView(t){ao({session:(0,G.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){io({session:(0,G.getSession)(e),contributors:e.launchableAssemblies,trackId:t,graphTrackId:e.loadedTrackId||void 0})}})).views(e=>({get syntenyLaunchTracks(){let t=e.launchableAssemblies.map(n=>n.sample);return t.length>=2?uo((0,G.getSession)(e),t):[]}})).views(e=>({menuItems(){let t=[];for(let n of Yt({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:o=>{e.showInLinearView(o)},onShowSynteny:o=>{e.showSyntenyView(o)}}))(0,ko.pushLaunchViewMenuItem)(t,n);return t}}))}var ca=(0,Go.defineLaunchKeys)()({});function Qe(e){e.addViewType(()=>new Mo.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:oe(),launchKeys:ca,ReactComponent:(0,Ro.lazy)(()=>import("./chunks/GraphGenomeView-WPKSNN4I.js"))}))}function et(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...o}=t;return n.addView("GraphGenomeView",o),t})}var Oo=y(ae(),1),$o=y(To(),1);var Po=y(B(),1),Co=y(Io(),1),tt=y(D(),1);function vo(){return(0,Po.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:tt.types.enumeration("LayoutMode",me),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:tt.types.enumeration("ColorScheme",ce),defaultValue:"auto"},...(0,Co.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the most the track takes; a layout shorter than it takes only what it needs"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var Vo=y(ae(),1),j=y(B(),1),Eo=y(q(),1),Te=y(re(),1),Ho=y(Fo(),1),H=y(D(),1);var nt=y($e(),1);var ua=(0,Vo.lazy)(()=>import("./chunks/GraphSettingsDialog-KQK4YZN5.js"));function Do(e){let t=oe();return H.types.compose("LinearGraphDisplay",Eo.BaseDisplay,(0,Ho.default)(),H.types.model({type:H.types.literal("LinearGraphDisplay"),configuration:(0,j.ConfigurationReference)(e),pane:H.types.optional(t,()=>({type:"GraphGenomeView"})),configured:H.types.optional(H.types.frozen(),{})})).preProcessSnapshot(n=>{let{pane:o,configured:r}=n;return o?{...n,configured:{layoutMode:o.layoutMode!==void 0,colorScheme:o.colorScheme!==void 0,height:o.paneHeight!==void 0,...r},pane:o.type===void 0?{type:"GraphGenomeView",...o}:o}:n}).views(n=>({get host(){let o;try{o=(0,Te.getContainingView)(n)}catch{return}return ye(o)?o:void 0},get trackId(){return(0,j.getConf)(n.parentTrack,"trackId")}})).views(n=>({trackMenuItems(){let{pane:o}=n,{graph:r}=o,i=o.walkChoices;return[{label:"Layout",subMenu:vt.map(a=>({type:"radio",label:a.label,checked:o.layoutMode===a.value,disabled:r?!a.available(r):!1,onClick:()=>{o.switchLayout(a.value)}}))},{label:"Color",subMenu:Mt.map(a=>({type:"radio",label:a.label,checked:o.colorScheme===a.value,onClick:()=>{o.setColorScheme(a.value)}}))},...i.length>0?[{label:"Walk",subMenu:[{type:"radio",label:"None",checked:o.highlightedPath==="",onClick:()=>{o.setHighlightedPath("")}},...i.map(a=>({type:"radio",label:a.label,checked:o.highlightedPath===a.name,onClick:()=>{o.setHighlightedPath(a.name)}}))]}]:[],...o.layoutMode==="walkrows"&&o.repeatChoices.length>0?[{label:"Repeat",subMenu:[{type:"radio",label:"Whole window",checked:o.repeatKey==="",onClick:()=>{o.setRepeatKey("")}},...o.repeatChoices.map(({key:a,name:d,unit:g})=>({type:"radio",label:`${d} \xB7 ${g.toLocaleString()} bp unit`,checked:o.repeatKey===a,onClick:()=>{o.setRepeatKey(a)}}))]}]:[],...o.hostPlacesX?[]:[{label:"Zoom in",onClick:()=>{o.zoom(1.5,o.width/2,o.canvasHeight/2)}},{label:"Zoom out",onClick:()=>{o.zoom(1/1.5,o.width/2,o.canvasHeight/2)}},{label:"Zoom to fit",onClick:()=>{o.zoomToFit()}}],{type:"checkbox",label:"Mark bubbles",checked:o.showBubbles,onClick:()=>{o.setShowBubbles(!o.showBubbles)}},{type:"checkbox",label:"Show deletion edges",checked:o.showDeletionEdges,onClick:()=>{o.setShowDeletionEdges(!o.showDeletionEdges)}},{type:"checkbox",label:"Genes on the backbone",checked:o.showGenes,onClick:()=>{o.setShowGenes(!o.showGenes)}},{label:"Settings",icon:Xt,onClick:()=>{(0,Te.getSession)(n).queueDialog(a=>[ua,{model:o,open:!0,onClose:a}])}}]}})).actions(n=>({applyConfig(){let{pane:o,configured:r}=n;r.layoutMode||o.setLayoutMode((0,j.getConf)(n,"layoutMode")),r.colorScheme||o.setColorScheme((0,j.getConf)(n,"colorScheme")),r.height||o.setPaneHeight((0,j.getConf)(n,"height")),n.configured={layoutMode:!0,colorScheme:!0,height:!0}},resizeHeight(o){let r=n.height,i=Math.max(r+o,40);return n.pane.setPaneHeight(i),i-r}})).actions(n=>({afterAttach(){let{pane:o}=n;n.applyConfig(),o.adoptTrack(n.trackId),o.subgraphHaplotypes===void 0&&n.adapterConfig.type==="GbzBaseSyntenyAdapter"&&o.setSubgraphHaplotypes(go(n.parentTrack.configuration)),o.startHosting(),(0,H.addDisposer)(n,(0,nt.autorun)(()=>{let{host:r}=n;r&&(o.setWidth(r.width),o.pairWithLinearView(r.id))},{name:"LinearGraphDisplayHost"})),(0,H.addDisposer)(n,(0,nt.autorun)(()=>{let r=o.canvasHeight;n.height!==r&&n.setHeight(r)},{name:"LinearGraphDisplayHeight"}))}}))}function ot(e){e.addDisplayType(()=>{let t=vo();return new $o.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:Do(t),trackType:["FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,Oo.lazy)(()=>import("./chunks/LinearGraphDisplay-7POYIRIB.js"))})})}var zo=y(fe(),1);var rt=y(B(),1),_o=y(D(),1);function at(e){let{uri:t,baseUri:n,csi:o}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:n},index:{indexType:o?"CSI":"TBI",location:{uri:`${t}.${o?"csi":"tbi"}`,baseUri:n}}}:e}var pa=(0,rt.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,rt.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:_o.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:at}),jo=pa;function it(e){e.addAdapterType(()=>new zo.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:at,configSchema:jo,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-FJIBTKQY.js").then(t=>t.default)}))}var Ko=y(fe(),1);var Ie=y(B(),1),Xo=y(D(),1);function Wo(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function Yo(e){let{uri:t,baseUri:n,csi:o}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:Wo(`${t}.segs.bed.gz`,n,o),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:Wo(`${t}.links.bed.gz`,n,o)}:e}function st(e){let{coarse:t,baseUri:n}=e;return Yo(typeof t=="object"&&t!==null?{...e,coarse:Yo({baseUri:n,...t})}:e)}var Ae=(e,t)=>(0,Ie.ConfigurationSchema)(e,{indexType:{model:Xo.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),ga=(0,Ie.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Ae("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:Ae("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),ma=(0,Ie.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Ae("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:Ae("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:ga},{explicitlyTyped:!0,preProcessSnapshot:st}),Uo=ma;function dt(e){e.addAdapterType(()=>new Ko.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:st,configSchema:Uo,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-7ZGKJJYW.js").then(t=>t.default)}))}var Jo=y(re(),1),Zo=y(dr(),1),ut=y(sr(),1),Qo=y(pr(),1);function ct(e){return typeof e=="object"&&e!==null}function la(e){let t;if(ct(e)){let{refName:n,start:o,end:r,assemblyName:i}=e;typeof n=="string"&&typeof o=="number"&&typeof r=="number"&&(t={refName:n,start:o,end:r,assemblyName:typeof i=="string"?i:void 0})}return t}function ha(e,t,n){let o=e.connectedViewId;return o===void 0||o===t||!n.has(o)}function ba(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function qo(e,t,n){let o=[],r=new Set(te(e).map(i=>ct(i)?i.id:void 0));for(let i of e)if(ct(i)&&i.type==="GraphGenomeView"&&ha(i,t,r)){let a=la(i.hoverHighlight);a&&ba(a,n)&&o.push({key:typeof i.id=="string"?i.id:"graph",region:a})}return o}var z=y(X(),1),fa=(0,Qo.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,Zo.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),ya=(0,ut.observer)(function({model:t,region:n}){let{classes:o}=fa(),r=t.getHighlightCoords(n);return r?(0,z.jsx)("div",{"data-testid":"graph-node-highlight",className:o.highlight,style:{left:r.left,width:r.width}}):null}),wa=(0,ut.observer)(function({model:t}){let{views:n}=(0,Jo.getSession)(t);return(0,z.jsx)(z.Fragment,{children:qo([...n],t.id,t.assemblyNames).map(({key:o,region:r})=>(0,z.jsx)(ya,{model:t,region:r},`graph-hover-${o}`))})}),er=wa;var tr=y(X(),1),ka="LinearGenomeView-TracksContainerComponent";function pt(e){e.contributeToExtensionPoint(ka,({model:t})=>(0,tr.jsx)(er,{model:t},"graphgenomeview-hover-highlight"))}var nr="GraphGenomeView";var or="4.0.3";var gt=class extends rr.default{constructor(){super(...arguments);this.name=nr;this.version=or}install(n){Qe(n),ot(n),et(n),pt(n),dt(n),it(n),Ee(n),He(n),n.addRpcMethod(()=>new Z(n)),n.addRpcMethod(()=>new J(n))}configure(n){try{(0,ar.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:qt,onClick:o=>{o.addView("GraphGenomeView",{})}})}catch(o){console.warn("[GraphGenomeView] could not add the Add menu entry",o)}}};export{gt as default};
3
3
  //# sourceMappingURL=jbrowse-plugin-graphgenomeviewer.esm.js.map