jbrowse-plugin-graphgenomeviewer 3.0.3 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
- import{a as z}from"./chunks/chunk-FCWXYIFC.js";import{a as kt}from"./chunks/chunk-D7XFR2IV.js";import{B as Vt,C as Bt,D as vt,E as ve,G as pe,H as Ft,I as Ct,J as Et,K as me,L as ge,M as Fe,N as Ht,P as $t,Q as _t,R as Dt,T as Ot,U as jt,V as Wt,W as zt,Y as Ce,Z as Ee,a as wt,ba as Yt,c as qr,ca as Xt,d as A,da as Ut,e as St,ea as le,f as Lt,fa as Kt,g as Rt,ga as qt,h as de,ha as Jt,i as Be,ia as he,ja as _,k as Mt,ka as Zt,l as Gt,m as Tt,ma as Jr,n as Q,p as Nt,q as ce,r as ue,x as It,z as Pt}from"./chunks/chunk-X3X74OGB.js";import{a as Z,b as Ur,c as Kr,d as Ve,e as xt}from"./chunks/chunk-XEJ47DLD.js";import{c as At}from"./chunks/chunk-ZNGDWZ6Z.js";import{a as Xr}from"./chunks/chunk-KWAXLUPQ.js";import{a as J}from"./chunks/chunk-J4OLMLS5.js";import"./chunks/chunk-F4C3BEPV.js";import{a as H,b as y}from"./chunks/chunk-FY3BTKY4.js";var en=H((pa,Qt)=>{Qt.exports=JBrowseExports["@jbrowse/core/Plugin"]});var fe=H((la,tn)=>{tn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var B=H((ha,nn)=>{nn.exports=JBrowseExports["@jbrowse/core/configuration"]});var cn=H((wa,dn)=>{dn.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var ye=H((ka,un)=>{un.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var yn=H((Ga,fn)=>{fn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var kn=H((Aa,wn)=>{wn.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var Sn=H((Ta,xn)=>{xn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var Rn=H((Na,Ln)=>{Ln.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var Gn=H((Ia,Mn)=>{Mn.exports=JBrowseExports.mobx});var zr=y(en(),1),Yr=y(J(),1);var be=y(Z(),1),ee=(0,wt.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 sn=y(fe(),1);var rn=y(B(),1),on=y(z(),1),Zr=(0,rn.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:on.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}),an=Zr;function He(e){e.addAdapterType(()=>new sn.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:an,adapterCapabilities:["getSubgraph","headerLanes"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-EFIOI2SN.js").then(t=>t.default)}))}var pn=y(cn(),1),mn=y(ye(),1);function Qr(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var te=class extends mn.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:r,region:o,sessionId:a,opts:i,signal:s}=n,{dataAdapter:d}=await(0,pn.getAdapter)(this.pluginManager,a,r);return Qr(d)?d.getSubgraph(o,{...i,signal:s}):(console.warn(`[GetSubgraph] ${d.constructor.name} does not implement getSubgraph`),"")}};var gn=y(xt(),1),ln=y(ye(),1),hn=y(z(),1),eo=(0,gn.lazy)(()=>import("./chunks/AddTrackWorkflow-Y3OBHM33.js"));function $e(e){e.addAddTrackWorkflowType(()=>new ln.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:eo,stateModel:hn.types.model({})}))}var bn=y(ye(),1);var _e;function De(){return _e??=import("./chunks/bandage-layout-FIOZ7B3E.js").then(e=>e.default()).catch(e=>{throw _e=void 0,e}),_e}var ne=class extends bn.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 De();a?.("Computing layout");let s=performance.now(),d=i.computeLayout(r,o),g=performance.now()-s;return{result:d,duration:g}}};var kr=y(xt(),1),xr=y(yn(),1),Sr=y(kn(),1);var j=y(B(),1),hr=y(Sn(),1),br=y(Ve(),1),G=y(J(),1),fr=y(Xr(),1),p=y(z(),1),yr=y(Rn(),1),wr=y(qr(),1),N=y(Gn(),1);var to=.9,Oe=2,no=1e3;function An(e,t,n,r=o=>o){let o=new Map(e.nodes.map(i=>[i.name,i])),a=[];for(let i of t){let s=[],d,g=[],w=[];for(let b of ce(i)){let f=o.get(b),h=f&&n[f.id];if(!(!f||!h?.length)){if(A(f)&&(f.stable.start<i.start||f.stable.start>=i.end)){w.push(h[Math.floor(h.length/2)]);continue}g.push(f.id),s.push(ue(h.length===1?[h[0],h[0]]:h));for(let k of h)(!d||k.y<d.y)&&(d=k)}}if(!d)continue;let R=w.length?{x:w.reduce((b,f)=>b+f.x,0)/w.length,y:w.reduce((b,f)=>b+f.y,0)/w.length}:d,m=new Map;for(let b of i.routes??[])for(let f of new Set(b.steps))m.set(f,(m.get(f)??0)+1);let u=[];for(let b of i.routes??[]){if(i.longestAlleleLength<no)break;if(b.steps.length===0)continue;let f=Math.min(...b.steps.map(c=>m.get(c))),h,k=-1;for(let c of b.steps)if(m.get(c)===f)for(let l of n[c]??[]){let x=Math.hypot(l.x-R.x,l.y-R.y);x>k&&(k=x,h=l)}h&&u.push({route:b,at:h,text:ro(b,r)})}a.push({bubble:i,...Q(i),path:s.join(""),top:d,members:g.length,nodeIds:g,whole:g.length>=to*e.nodes.length,routes:u})}return a}function ro(e,t){let n=[...new Set(e.walks.map(t))].sort(),r=n.slice(0,Oe).join(", "),o=n.length>Oe?` +${n.length-Oe}`:"";return`${r}${o} \xB7 ${Tt(e.bp)}`}function Tn(e){if(!e.nodes.some(A))return[];let t=new Map(e.nodes.map(m=>[m.id,m])),n=It(e),r=new Map(n.map((m,u)=>[m,u])),o=new Int32Array(n.length+1),a=new Map,i=new Set;for(let m of e.edges){let u=r.get(m.from),b=r.get(m.to);if(u===void 0||b===void 0||u===b)continue;i.add(`${m.from}>${m.to}`).add(`${m.to}>${m.from}`);let[f,h]=u<b?[u,b]:[b,u];o[f+1]++,o[h]--;let[k,c]=u<b?[m.from,m.to]:[m.to,m.from];(a.get(k)??a.set(k,new Set).get(k)).add(c)}for(let m=1;m<o.length;m++)o[m]+=o[m-1];let s=e.nodes.filter(A).sort((m,u)=>m.stable.start-u.stable.start),d=new Set([s[0].id,s.at(-1).id]),g=s.map(m=>[m,r.get(m.id)]).filter(([m,u])=>d.has(m.id)||o[u]===0).sort(([m,u],[b,f])=>u-f||m.stable.start-b.stable.start),w=e.paths?.map(m=>{let u=new Map;return m.nodeIds.forEach((b,f)=>{u.has(b)||u.set(b,f)}),u}),R=[];for(let m=0;m+1<g.length;m++){let[u,b]=g[m],[f,h]=g[m+1],k=n.slice(b+1,h);if(k.length===0)continue;let c=new Map([[u.id,{min:0,max:0,n:1}]]);for(let P of[u.id,...k]){let V=c.get(P);if(V)for(let E of a.get(P)??[]){if(r.get(E)>h)continue;let yt=E===f.id?0:t.get(E).length,Pe=c.get(E);c.set(E,{min:Math.min(Pe?.min??1/0,V.min+yt),max:Math.max(Pe?.max??-1/0,V.max+yt),n:Math.min(At,V.n+(Pe?.n??0))})}}let l=w&&oo(e,t,w,u.id,f.id),x=l?.n?l:void 0,S=x??c.get(f.id)??{min:0,max:0,n:0},M=l!==void 0&&l.left>0,L=u.stable.start+u.length,T=f.stable.start,I=[u.id,...k.filter(P=>A(t.get(P))),f.id],C=I.some((P,V)=>V>0&&!i.has(`${I[V-1]}>${P}`)),K=C||M,$=C&&!x;R.push({refName:u.stable.refName,start:L,end:T,segmentCount:k.length+2,pathCount:S.n,inversion:!1,shortestAlleleLength:$?T-L:S.min,longestAlleleLength:$?T-L:S.max,segments:[u,...k.map(P=>t.get(P)),f].map(P=>P.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:K,routes:x?.routes})}return R}function oo(e,t,n,r,o){let a=new Map,i=1/0,s=-1/0,d=0;return e.paths.forEach((g,w)=>{let R=n[w].get(r),m=n[w].get(o);if(R===void 0||m===void 0){(R!==void 0||m!==void 0)&&d++;return}let u=g.nodeIds.slice(Math.min(R,m)+1,Math.max(R,m));m<R&&u.reverse();let b=0;for(let k of u)b+=t.get(k)?.length??0;let f=u.join(","),h=a.get(f)??{steps:u,bp:b,walks:[]};h.walks.push(g.name),a.set(f,h),i=Math.min(i,b),s=Math.max(s,b)}),a.size||d?{min:i,max:s,n:a.size,left:d,routes:[...a.values()]}:void 0}function Nn(e,t){let n=new Set(t),r=e.nodes.filter(i=>n.has(i.name)),o=new Set(r.map(i=>i.id)),a=e.paths?.map(i=>({...i,nodeIds:i.nodeIds.filter(s=>o.has(s))})).filter(i=>i.nodeIds.length>0);return{name:e.name,nodes:r,edges:e.edges.filter(i=>o.has(i.from)&&o.has(i.to)),...a?.length?{paths:a}:{},anchorPaths:e.anchorPaths,pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}var je=new Set(["Gff3TabixAdapter","Gff3Adapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),ao=/gene|refseq|gencode|ensembl|annotation/i;function In(e,t){if(t)return e.find(r=>r.trackId===t);let n=e.filter(r=>je.has(r.adapterType));return n.find(r=>ao.test(`${r.trackId} ${r.name??""}`))??n[0]}function v(e,t){return typeof e.get=="function"?e.get(t):e[t]}function Pn(e,t){v(e,"type")==="exon"&&t.push({start:v(e,"start"),end:v(e,"end")});let r=v(e,"subfeatures");for(let o of r??[])Pn(o,t)}function io(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 Vn(e){let t=[];for(let n of e){let r=v(n,"gene_name")??v(n,"name")??v(n,"id"),o=v(n,"start"),a=v(n,"end");if(!r||!(a>o))continue;let i=[];Pn(n,i),t.push({name:r,refName:v(n,"refName"),start:o,end:a,strand:v(n,"strand")??0,exons:i.length?io(i):[{start:o,end:a}]})}return t}function Bn(e){return e.split("#").at(-1)}function vn(e,t,n){let r=new Map,o=new Map;for(let i of e.nodes)if(A(i)&&n[i.id]?.length){let{refName:s}=i.stable,d=o.get(s)??o.set(s,Bn(s)).get(s),g=r.get(d)??r.set(d,{nodes:[],reach:0}).get(d);g.nodes.push(i),g.reach=Math.max(g.reach,i.length)}for(let{nodes:i}of r.values())i.sort((s,d)=>s.stable.start-d.stable.start);let a=[];for(let i of t){let s=r.get(Bn(i.refName));if(!s)continue;let d=[],g,w=1/0,R=0,m=(i.start+i.end)/2,{nodes:u,reach:b}=s;for(let f=Lt(u,i.start-b);f<u.length&&u[f].stable.start<i.end;f++){let h=u[f],k=h.stable.start,c=k+h.length;if(c<=i.start)continue;let l=n[h.id];R+=Math.min(c,i.end)-Math.max(k,i.start);for(let M of i.exons){let L=Math.max(M.start,k),T=Math.min(M.end,c);if(T<=L)continue;let I=ve(l,(L-k)/h.length,(T-k)/h.length);I.length===1&&I.push({...I[0]}),d.push(ue(I))}let x=Math.min(Math.max(m,k),c),S=Math.abs(x-m);if(S<w){w=S;let[M]=ve(l,(x-k)/h.length,(x-k)/h.length);g=M}}g&&a.push({gene:i,exons:d.join(""),at:g,covered:R/(i.end-i.start)})}return a}function so(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 re(e){let t={};for(let n of e)so(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 Fn=62,co=60;function uo(e){let t=[],n="+",r=0;function o(a){a>r&&t.push({id:e.slice(r,a),strand:n})}for(let a=0;a<e.length;a++){let i=e.charCodeAt(a);(i===Fn||i===co)&&(o(a),n=i===Fn?"+":"-",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(re(o))}else if(r.startsWith("S")){let[,o,...a]=r.split(" "),i,s,d,g=!1,w=a[0]??"*";/^\d+$/.test(w)?(i=+w,s=a[1]??"*",d=a.slice(2)):(g=!0,s=w,i=s==="*"?0:s.length,d=a.slice(1));let R=re(d);g&&"LN"in R&&(i=+R.LN),t.nodes.push({id:o,length:i,sequence:s,tags:R})}else if(r.startsWith("E")){let[,,o,a,,,,,i,...s]=r.split(" ");o&&a&&t.links.push({source:o.slice(0,-1),target:a.slice(0,-1),strand1:o.at(-1),strand2:a.at(-1),cigar:i??"*",tags:re(s)})}else if(r.startsWith("L")){let[,o,a,i,s,d,...g]=r.split(" ");o&&i&&s&&t.links.push({source:o,target:i,strand1:a,strand2:s,cigar:d??"*",tags:re(g)})}else if(r.startsWith("W")){let[,o,a,i,s,d,g,...w]=r.split(" ");o&&a&&i&&s&&d&&g&&t.walks.push({sample:o,haplotype:+a,contig:i,start:s==="*"?-1:+s,end:d==="*"?-1:+d,segments:uo(g),tags:re(w)})}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 po(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 mo(e){return[...e.paths.map(t=>({...pe(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 go(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 oe=e=>typeof e=="number"&&e>0?e:void 0;function lo({tags:e,length:t}){let n=oe(e.RC)??oe(e.FC)??oe(e.KC);return oe(e.dp)??oe(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function ho(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:We(e),samples:go(e)}}function Cn(e,t="Imported GFA"){let n=[],r=[],{canonical:o,traversals:a}=po(e),i=u=>`${u}${o.get(u)??"+"}`;for(let u of e.nodes){let b=lo(u)??Math.max(a.get(u.id)??1,1);n.push(ho(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 s=[],d=new Map,g=(u,b)=>[u,b].sort().join("--");function w(u,b){for(let f=0;f<u.length-1;f++){let h=g(u[f],u[f+1]);d.has(h)||d.set(h,new Set),d.get(h).add(b)}}for(let u of e.paths){let b=u.path.split(",").map(f=>i(f.slice(0,-1)));s.push({name:u.name,nodeIds:b}),w(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}`;s.push({name:f,nodeIds:b,sample:u.sample,haplotype:u.haplotype,contig:u.contig}),w(b,f)}for(let u of r){let b=d.get(g(u.from,u.to));b&&b.size>0&&(u.pathIds=[...b])}let R=new Map(e.nodes.map(u=>[u.id,u.length])),m=e.paths.length>0||e.walks.length>0?Ft(mo(e),u=>R.get(u)??0):void 0;return{name:t,nodes:n,edges:r,paths:s.length>0?s:void 0,anchorPaths:m?.anchorPaths,pathVisits:m?.pathVisits,anchoredBy:n.some(u=>u.stable)?"tags":void 0}}var En=y(B(),1),Hn=y(z(),1),bo="rgb(60,65,72)";function $n({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 ? '${bo}' : 'hsl(' + ${r} + ',70%,50%)'`}function fo(e){return typeof e=="object"&&e!==null&&"id"in e&&Array.isArray(e.tracks)}function _n(e,t,n){for(let r of e)if(fo(r)&&(t===void 0||r.id===t)){let a=r.tracks?.find(i=>i.configuration.trackId===n)?.displays[0];if(a)return a}}function Dn(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 On(e,t){let n=e.nodes.filter(h=>A(h)&&(t[h.id]?.length??0)>0);if(n.length<2)return t;let r=n.map(h=>{let k=t[h.id],c=k[Math.floor(k.length/2)];return{x:c.x,y:c.y,r:h.stable.start+h.length/2,w:h.length}}),o=r.reduce((h,k)=>h+k.w,0),a=r.reduce((h,k)=>h+k.x*k.w,0)/o,i=r.reduce((h,k)=>h+k.y*k.w,0)/o,s=r.reduce((h,k)=>h+k.r*k.w,0)/o,d=0,g=0;for(let h of r)d+=h.w*(h.x-a)*(h.r-s),g+=h.w*(h.y-i)*(h.r-s);let w=-Math.atan2(g,d),R=Math.cos(w),m=Math.sin(w),u={};for(let[h,k]of Object.entries(t))u[h]=k.map(c=>{let l=c.x-a,x=c.y-i;return{x:a+R*l-m*x,y:i+m*l+R*x}});let b=0,f=0;for(let h of e.nodes)if(!A(h))for(let k of u[h.id]??[])k.y>i?b++:f++;if(f>b)for(let h of Object.values(u))for(let k of h)k.y=2*i-k.y;return u}var jn=30;function yo(e,t){let{opts:n}=t,r=new Map(t.nodes.map(m=>[m.id,de(n,m.length)])),o=m=>r.get(m)??n.minimumNodeLength,a=e.nodes.filter(A).sort((m,u)=>m.stable.start-u.stable.start),i=new Map,s=0;for(let m of a)i.set(m.id,{x:s,y:0}),s+=o(m.id)+n.edgeLength;let d=me(e),g=new Map(a.map(m=>[m.id,0])),w=a.map(m=>m.id);for(let m of w){let u=i.get(m),b=g.get(m)+1;for(let f of d.get(m)??[])g.has(f)||(g.set(f,b),i.set(f,{x:u.x+o(m)/2,y:jn*b}),w.push(f))}let R=0;for(let m of e.nodes)i.has(m.id)||i.set(m.id,{x:R++*s/e.nodes.length,y:jn*3});return i}function Wn(e,t){let n=yo(e,t);return t.nodes.map(r=>({...r,...n.get(r.id)}))}var Ye=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),wo=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function Yn(e,t){return t?e.find(r=>r.trackId===t):e.filter(r=>Ye.has(r.adapterType)).find(r=>wo.test(`${r.trackId} ${r.name??""}`))}function ke(e,t){return typeof e.get=="function"?e.get(t):e[t]}var Xn=/^\w+=[^;]*(;\w+=[^;]*)*$/;function ko(e){let t=ke(e,"name");if(!(typeof t!="string"||!Xn.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]??ko(e)?.[t]}var Un=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],xo=["RUL","period","PERIOD","consensusSize","unit","unitLength"],So=["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 Lo=/^[ACGTURYSWKMBDHVN]+$/i;function Ro(e){let t=Number(xe(e,xo));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=xe(e,Un);return n&&Lo.test(n)?n.length:void 0}function zn(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 Mo(e){let t=ke(e,"samples"),n={};for(let[r,o]of Object.entries(t??{})){let a=zn(o.SD),i=zn(o.AL).flatMap((s,d)=>s!==void 0&&s>0?[a[d]===void 0?{bp:s}:{bp:s,spanningReads:a[d]}]:[]);i.length>0&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}function Kn(e){let t=[];for(let n of e){let r=we(n,"start"),o=we(n,"end"),a=Ro(n);if(!(o>r)||a===void 0)continue;let i=we(n,"refName"),s=xe(n,Un),d=xe(n,So);t.push({key:`${i}:${r}-${o}`,name:(d&&!Xn.test(d)?d:void 0)??(s&&s.length<=12?`(${s})n`:`${i}:${(r+1).toLocaleString()}-${o.toLocaleString()}`),refName:i,start:r,end:o,unit:a,motif:s,calls:Mo(n)})}return t.sort((n,r)=>n.start-r.start)}function qn(e,t){let n=e.paths?.find(g=>g.name===t);if(!n)return;let r=new Map(e.nodes.map(g=>[g.id,g])),o=new Map;e.edges.forEach((g,w)=>{o.set(`${g.from}>${g.to}`,w)});let a=new Set(n.nodeIds),i=new Set;for(let g=1;g<n.nodeIds.length;g++){let w=n.nodeIds[g-1],R=n.nodeIds[g],m=o.get(`${w}>${R}`)??o.get(`${R}>${w}`);m!==void 0&&i.add(m)}let s=g=>g.reduce((w,R)=>w+(r.get(R)?.length??0),0),d=e.referencePath?e.paths.find(g=>pe(g.name).name===e.referencePath):void 0;return{name:t,nodeIds:a,edgeIndexes:i,steps:n.nodeIds.length,bp:s(n.nodeIds),referenceBp:d&&d!==n?s(d.nodeIds):void 0}}function Se(e){return typeof e=="object"&&e!==null}function Go(e){return Se(e)&&typeof e.get=="function"}function Ao(e){let t=Go(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: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:Ao(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,r;for(let o of t)o.name===e.featureName?n=o.id:r===void 0&&A(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 er(e){return typeof e=="object"&&e!==null}function To(e){return er(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function ae(e){return e.flatMap(t=>er(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function ie({views:e,connectedViewId:t,assemblyName:n}){let r=ae(e).filter(a=>To(a)).filter(a=>a.assemblyNames.includes(n));return r.find(a=>a.id===t)??(r.length===1?r[0]:void 0)}function nr(e,t,n){n.catch(r=>{console.error(`[GraphGenomeView] ${t}`,r),e.notifyError?.(`${t}: ${r}`,r)})}var No=1e3;function Ue(e,t=No){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 rr(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 or({session:e,location:t,assembly:n,connectedViewId:r,tracks:o=[]}){let a=ie({views:e.views,connectedViewId:r,assemblyName:n}),i;return a?(nr(e,`Could not show ${n} ${_(t)}`,Promise.resolve(a.navToLocString(he(t),n))),i=a.id):i=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${_(t)}`,init:{assembly:n,loc:he(t),tracks:o}}).id,i}function ar({session:e,location:t,assembly:n,connectedViewId:r}){let o=ie({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 tr(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 ir({session:e,contributors:t,trackId:n,graphTrackId:r}){let o=tr(e,r),a=tr(e,n),i=t.filter(g=>a.includes(g.sample)),s=i.length>=2?i:t,d={init:{views:s.map(g=>({assembly:g.sample,loc:he(g),...r!==void 0&&o.includes(g.sample)?{tracks:[r]}:{}})),tracks:n?s.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?nr(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",d)):e.addView("LinearSyntenyView",d)}var Le=y(B(),1),Io="FeatureTrack";function sr({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"),s=(0,Le.readConfObject)(o,"trackId");a===Io&&Array.isArray(i)&&i.includes(t)&&typeof s=="string"&&s!==n&&r.push(s)}return n?[n,...r]:r}var Re=y(B(),1),dr=y(kt(),1),Po="SyntenyTrack";function cr(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"),s=(0,Re.readConfObject)(o,"trackId");if(a===Po&&typeof s=="string"&&Array.isArray(i)){let d=i.filter(g=>n.has(g)).length;d>=2&&r.push({trackId:s,name:(0,dr.getTrackName)(o,e),coverage:d})}}return r.sort((o,a)=>a.coverage-o.coverage)}var D=y(B(),1),ur=y(kt(),1);function Ke(e,t){return typeof t=="string"&&e.adapterTypes.has(t)&&e.getAdapterType(t).adapterCapabilities.includes("getSubgraph")}function pr(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function Vo(e){return typeof e=="object"&&e!==null&&"laneSelection"in e&&"hiddenLanes"in e}function Bo(e){let t=(0,D.readConfObject)(e,"assemblyNames"),n=pr(t)?t.slice(1):[];return n.length>0?n:void 0}function qe(e){let t=(0,D.readConfObject)(e,"assemblyNames");return pr(t)?t[0]:void 0}function Me(e,t){return e===void 0||e===t?void 0:`The graph is cut on its reference, ${e}: open it from a view of ${e}`}function vo(e,t,n){let r=n?.tracks.find(o=>(0,D.readConfObject)(o.configuration,"trackId")===t)?.displays.find(Vo);return r?r.laneSelection?.filter(o=>!r.hiddenLanes.includes(o)):Bo(e)}function Je(e,t,n,r){return{trackId:t,name:(0,ur.getTrackName)(e,n),referenceAssembly:qe(e),haplotypes:vo(e,t,r)}}function Ge(e,t,n,r){let o=[];for(let a of t.tracks){let i=(0,D.readConfObject)(a,"assemblyNames"),s=(0,D.readConfObject)(a,"adapter"),d=(0,D.readConfObject)(a,"trackId");Array.isArray(i)&&i.includes(n)&&typeof d=="string"&&typeof s=="object"&&s!==null&&"type"in s&&Ke(e,s.type)&&o.push(Je(a,d,t,r))}return o}var Co=600,Ze=160,Eo=340,mr=".segs.bed.gz";function Ho(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 O=40,gr=1.4,$o=1.6,_o=150,Do=1;function Ae(...e){}var Y=5e6;function W(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var Oo=2e4,jo=1e-6,Wo=100;function Qe(e){return Math.max(jo,Math.min(Wo,e))}function et(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 zo(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 Yo(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}var Te=new WeakMap,Xo=4;function Uo(e){let t=Te.get(e);return t||(t=new Map,Te.set(e,t)),t}function Ko(e,t){let n=Te.get(e);n&&e!==t&&Te.set(t,n)}function qo(e,t,n){e.size>=Xo&&e.delete(e.keys().next().value),e.set(t,n)}function tt(){return p.types.compose("GraphGenomeView",hr.BaseViewModel,(0,yr.RenderLifecycleMixin)(),p.types.model({type:p.types.literal("GraphGenomeView"),layoutQuality:p.types.optional(p.types.number,2),linearLayout:p.types.optional(p.types.boolean,!1),layoutMode:p.types.optional(p.types.enumeration($t),"force"),colorScheme:p.types.optional(p.types.enumeration(Pt),"auto"),bubbleSpread:p.types.optional(p.types.enumeration(Mt),"auto"),nodeWidth:p.types.optional(p.types.enumeration(Ot),"depth"),showBubbles:p.types.optional(p.types.boolean,!0),showDeletionEdges:p.types.optional(p.types.boolean,!1),showGenes:p.types.optional(p.types.boolean,!0),geneTrackId:p.types.optional(p.types.string,""),repeatTrackId:p.types.optional(p.types.string,""),repeatKey:p.types.optional(p.types.string,""),walkRowSamples:p.types.maybe(p.types.frozen()),highlightedPath:p.types.optional(p.types.string,""),referencePath:p.types.optional(p.types.string,""),showPerf:p.types.optional(p.types.boolean,!1),contigThickness:p.types.optional(p.types.number,6),connectorThickness:p.types.optional(p.types.number,2),darkMode:p.types.optional(p.types.boolean,!1),scale:p.types.optional(p.types.number,1),translateX:p.types.optional(p.types.number,0),translateY:p.types.optional(p.types.number,0),drawPaths:p.types.optional(p.types.boolean,!1),paneHeight:p.types.maybe(p.types.number),maxGraphNodes:p.types.optional(p.types.number,Oo),maxRegionBp:p.types.optional(p.types.number,Y),loadedTrackId:p.types.optional(p.types.string,""),loadedRegion:p.types.maybe(p.types.frozen()),subgraphHaplotypes:p.types.maybe(p.types.frozen()),subgraphContext:p.types.optional(p.types.number,1),gfaLocation:p.types.maybe(p.types.frozen()),colorDomain:p.types.maybe(p.types.frozen()),connectedViewId:p.types.maybe(p.types.string)})).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,userMovedViewport:!1,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?_t(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&&Ce(t.length)?Ee(t):[]},get walkChoices(){let t=e.graph?.paths;return t?.length?Ee(t):[]},get walkHighlight(){return e.graph&&e.highlightedPath?qn(e.graph,e.highlightedPath):void 0},get effectiveDrawPaths(){return e.drawPaths&&Ce(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?Tn(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get assemblyTrackChoices(){let t=e.loadedRegion;return t?(0,G.getSession)(e).tracks.filter(n=>(0,j.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,j.readConfObject)(n,"name"),adapterType:(0,j.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?me(e.graph):void 0},get nodeInk(){let{contigThickness:t,nodeWidth:n,nodeById:r}=e,o=e.graph?jt(e.graph):0;return{maxHalfWidthPx:zt(t,n)/2,halfWidthPx:a=>{let i=r?.get(a);return i?Wt(i,t,n,o)/2:t/2}}},get deletions(){return e.graph&&e.layoutMode!=="walkrows"?Vt(e.graph):[]},get walkRowBars(){if(e.layoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?Fe(e.graph,t,t.unit):Fe(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:Ut(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,...Q(n)}))},get genePins(){Ae(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&e.layoutMode!=="variants"&&e.layoutMode!=="walkrows"&&e.graph&&e.geneFeatures&&t?vn(e.graph,e.geneFeatures,t):[]},get bubbleHalos(){Ae(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 An(e.graph,e.bubbles,t,r=>n.get(r)??r)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.graph?Yt(e.graph,e.rampDomain):void 0},get assemblyNames(){let t=e.loadedRegion;return t?[t.assemblyName]:[]},get scaleX(){return et(e.scale,e.pixelRows).scaleX},get scaleY(){return et(e.scale,e.pixelRows).scaleY},get axisScale(){return et(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 g of Object.values(e.layoutResult.nodePositions))for(let w of g)n=Math.min(n,w.x),r=Math.min(r,w.y),o=Math.max(o,w.x),a=Math.max(a,w.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 s=this.walkRowBars,d=s&&e.layoutResult.extent?Ht(s):e.layoutResult.extent;d&&(o=Math.max(o,d.maxX),a=Math.max(a,d.maxY)),t={minX:n,minY:r,w:o-n,h:a-r}}return t},get canvasHeight(){let t=this.layoutBounds,n=e.width-O*2,r=Math.max(Ze,e.paneHeight??Co);if(!t)return r;if(e.pixelRows){let o=e.layoutMode==="variants"?Eo:Ze;return Math.min(r,Math.max(o,t.h+O*2))}return t.w>0&&n>0?Math.min(r,Math.max(Ze,t.h*n/t.w+O*2)):r}})).views(e=>({get geneTrack(){return In(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=ge({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?St(t):[];return t?Kt(t,{maxGap:n.length>0?Rt(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t,tracks:n}=(0,G.getSession)(e),r=n.find(s=>s.trackId===e.loadedTrackId),o=r?(0,j.readConfObject)(r,"adapter"):void 0,a=new Map(Object.entries(o?.assemblyNameToPanSN??{}).map(([s,d])=>[d,s])),i=s=>s!==void 0&&t.has(s)?t.get(s)?.name??s:void 0;return s=>i(a.get(s))??i(s)}})).views(e=>({get launchableAssemblies(){return Jt(rr(e.contributingAssemblies,e.loadedRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.loadedRegion;return t!==void 0&&ie({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?qt(e.assemblyResolver,r):void 0,a=e.loadedRegion,i=e.nodeById,s=e.nodeNeighbors,d=a&&i&&s?ge({nodeId:t,nodeById:i,neighbors:s}):void 0,g=a&&d?{sample:a.assemblyName,haplotype:void 0,refName:a.refName,...d}:void 0;return{own:r&&o?{location:Ue(r),assembly:o}:void 0,reference:a&&g?{location:Ue(g),assembly:a.assemblyName}:void 0,highlight:a&&g?{location:g,assembly:a.assemblyName}: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=Ct(n,t);Ko(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},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&&ae([...(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,s=i?ge({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&&s?{refName:i.refName,assemblyName:i.assemblyName,start:s.start,end:s.end}:{}}}))}},setTransform(t,n,r){e.userMovedViewport=!0,e.scale=Qe(t),e.translateX=n,e.translateY=r},zoom(t,n,r){e.userMovedViewport=!0;let o=Qe(e.scale*t),a=o/e.scale;e.scale=o,e.translateX=n-(n-e.translateX)*a,e.pixelRows||(e.translateY=r-(r-e.translateY)*a)},setViewportDirty(){e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){let t=e.layoutBounds,n=e.width-O*2,r=e.canvasHeight-O*2;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=O-t.minX*i+(n-t.w*i)/2;let s=e.pixelRows?1:i,d=r-t.h*s;e.translateY=O-t.minY*s+Math.max(0,d)/2}},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportDirtyTimer=setTimeout(()=>{(0,p.isAlive)(e)&&e.setViewportDirty()},_o)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,p.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(r,o,a){let i=e.layoutResult?.nodePositions;if(i?.[r]){for(let s of i[r])s.x+=o,s.y+=a;n()}},scheduleViewportDirty:t}}).actions(e=>{let t;function n(c,l){let x=(0,G.getSession)(e),{rpcManager:S}=x,M="graph",L=c.nodes.some(A);return S.call(M,"GraphComputeLayout",{graph:{nodes:L?Wn(c,l):l.nodes,edges:c.edges},options:{quality:e.layoutQuality,linearLayout:e.linearLayout,...l.opts,...L?{rotateComponents:!1}:{}},signal:t?.signal,statusCallback:T=>{e.setStatusMessage((0,G.statusMessageText)(T)??"")}})}function r(c){let l=c.nodes.some(A);return`${e.layoutQuality}|${e.linearLayout}|${e.bubbleSpread}|${l}|${c.referencePath??""}`}function*o(c){let l=performance.now(),x=Dt(e.layoutMode).run(c,e.loadedRegion);if(x)return{result:x,duration:performance.now()-l};let S=Uo(c),M=r(c),L=S.get(M);if(L)return{result:L,duration:performance.now()-l};let T=Gt(e.bubbleSpread),I=Bt(c),{result:C,duration:K}=yield n(I.graph,Be(I.graph,T)),$=Be(c,T),P=new Map($.nodes.map(q=>[q.id,de($.opts,q.length)])),V=vt(C.nodePositions,I.runs,q=>P.get(q)??0),E={...C,nodePositions:c.nodes.some(A)?On(c,V):V};return qo(S,M,E),{result:E,duration:K}}let a=0;function*i(c){let l=++a,x=()=>e.graph===c&&l===a,S=t?.signal,M;try{M=yield*o(c)}catch(T){if(!x()||S?.aborted)return!1;throw T}let L=x();return L&&(e.layoutResult=M.result,e.setLayoutMs(M.duration)),L}function*s(c,l){e.setStatusMessage("Parsing GFA");let x=ze(c),S=Et(Cn(x,l),e.preferredReferencePath);if(S.nodes.length===0)throw new Error(`No graph segments in ${l}`);if(S.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${S.nodes.length.toLocaleString()} nodes (limit ${e.maxGraphNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);e.graph=S,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),e.setStatusMessage("Computing layout"),yield*i(S)}let d=0;function g(){let c=++d;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>c===d,signal:t.signal}}function w(){return e.loadedTrackId?(0,G.getSession)(e).tracks.find(c=>c.trackId===e.loadedTrackId):void 0}function*R(c,l,x){let S=Ho(c);if(!(c.type!=="RgfaTabixAdapter"||S===void 0))try{let M=yield(0,G.getSession)(e).rpcManager.call("graph","CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${S}.bubbles.bed.gz`,baseUri:c.baseUri,assemblyNameToPanSN:c.assemblyNameToPanSN},regions:[l]});x()&&(e.indexBubbles=M.map(L=>({refName:l.refName,start:L.get("start"),end:L.get("end"),segmentCount:L.get("segmentCount"),pathCount:L.get("pathCount")??0,inversion:L.get("inversion"),shortestAlleleLength:L.get("shortestAlleleLength"),longestAlleleLength:L.get("longestAlleleLength"),segments:L.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(M){console.warn("[GraphGenomeView] no bubble index for this graph",M)}}function*m(c,l,x){let S=(0,G.getSession)(e),M=c?S.tracks.find(L=>L.trackId===c):void 0;if(M)try{return yield S.rpcManager.call("graph","CoreGetFeatures",{adapterConfig:(0,j.readConfObject)(M,"adapter"),regions:[l]})}catch(L){console.warn(`[GraphGenomeView] no ${x} for this graph`,L);return}}function*u(c,l){let x=yield*m(e.geneTrack?.trackId,c,"genes");x&&l()&&(e.geneFeatures=Vn(x))}function*b(c,l){let x=yield*m(e.repeatTrack?.trackId,c,"repeats");x&&l()&&(e.repeatArrays=Kn(x))}function*f(c,l,x={}){let{isLive:S,signal:M}=g(),L=w(),T=l.end-l.start,I=(L&&Me(qe(L),l.assemblyName))??(T>e.maxRegionBp?`Region too large (${W(T)}) \u2014 zoom in to view graph (max ${W(e.maxRegionBp)})`: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 C=(0,G.getSession)(e),{rpcManager:K}=C,$="graph",P=performance.now(),V=yield K.call($,"GetSubgraph",{adapterConfig:c,region:l,opts:{hops:x.hops,haplotypes:x.haplotypes},signal:M});if(!S())return;if(e.setFetchMs(performance.now()-P),!V)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");let E=_(l);if(yield*s(V,E),!S())return;e.setStatusMessage("Reading annotations"),yield Promise.all([(0,p.flow)(R)(c,l,S),(0,p.flow)(u)(l,S),(0,p.flow)(b)(l,S)])}catch(C){S()&&(console.error("[GraphGenomeView.loadFromTabixSubgraph]",C),e.error=C)}finally{S()&&(e.isLoading=!1)}}function*h(){let c=e.loadedRegion,l=w();c&&e.loadedTrackId&&!l?e.error=new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`):l&&c&&(yield*f((0,j.readConfObject)(l,"adapter"),c,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes}))}function*k(c,l,x){let{isLive:S,signal:M}=g();e.loadedTrackId="",e.loadedRegion=x,e.isLoading=!0,e.error=void 0;try{let L=typeof l=="string"?l:yield l(M);S()&&(yield*s(L,c))}catch(L){S()&&(console.error("[GraphGenomeView.loadWholeGFA]",L),e.error=L)}finally{S()&&(e.isLoading=!1)}return S()}return{clearGraph(){t?.abort(),t=void 0,d++,a++,e.graph=void 0,e.layoutResult=void 0,e.loadedTrackId="",e.loadedRegion=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,d++,a++,e.graph=void 0,e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0)},loadGFA:(0,p.flow)(function*(c,l="Imported GFA"){yield*k(l,c)}),loadGFAFromLocation:(0,p.flow)(function*(c){e.setStatusMessage("Fetching GFA");let l=e.loadedRegion,x=yield*k("uri"in c?c.uri.split("/").pop()??"GFA":"GFA",S=>(0,fr.openLocation)(c).readFile({encoding:"utf8",signal:S}),l);l&&x&&e.graph&&(yield*b(l,()=>e.loadedRegion===l))}),loadFromTabixSubgraph:(0,p.flow)(function*(c,l,x={}){e.loadedTrackId=x.trackId??"",e.loadedRegion=x.trackId?l:void 0,yield*f(c,l,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes})}),refetchIfNeeded:(0,p.flow)(function*(){e.graph||(yield*h())}),reloadSubgraph:(0,p.flow)(function*(){yield*h()}),reloadRepeats:(0,p.flow)(function*(){let c=e.loadedRegion,l=e.repeatTrack?.trackId;c&&(yield*b(c,()=>e.loadedRegion===c&&e.repeatTrack?.trackId===l))}),reloadGenes:(0,p.flow)(function*(){let c=e.loadedRegion,l=e.geneTrack?.trackId;c&&(yield*u(c,()=>e.loadedRegion===c&&e.geneTrack?.trackId===l))}),popBubble:(0,p.flow)(function*(c){let l=e.graph;if(!l)return;let x=Nn(l,ce(c));if(x.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:S}=g();e.popStack=[...e.popStack,{graph:l,layoutMode:e.layoutMode,label:l.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let M=`${Nt[Q(c).kind]} at ${c.refName}:${c.start.toLocaleString()}`;e.graph={...x,name:M},e.layoutMode==="variants"&&(e.layoutMode="force"),e.clearInteractionState(),e.userMovedViewport=!1,e.isLoading=!0;try{(yield*i(e.graph))&&(e.isLoading=!1)}catch(L){S()&&(e.error=L,e.isLoading=!1)}}),unpopBubble:(0,p.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.userMovedViewport=!1,e.isLoading=!0;try{(yield*i(c.graph))&&(e.isLoading=!1)}catch(l){e.error=l,e.isLoading=!1}}}),recomputeLayout:(0,p.flow)(function*(){let c=e.graph;if(c){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*i(c))&&(e.isLoading=!1)}catch(l){console.error("[GraphGenomeView.recomputeLayout]",l),e.error=l,e.isLoading=!1}}})}}).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,p.addDisposer)(e,(0,N.autorun)(()=>{let r=e.rampDomain,o=e.loadedTrackId;if(r&&o&&e.effectiveColorScheme==="reference-position"){let a=(0,N.untracked)(()=>_n((0,G.getSession)(e).views,e.connectedViewId,o));a&&Dn(a,$n(r))}})),(0,p.addDisposer)(e,(0,N.autorun)(()=>{e.layoutResult&&(0,N.untracked)(()=>!e.userMovedViewport)&&e.zoomToFit()})),(0,p.addDisposer)(e,(0,N.autorun)(()=>{let r=Jn((0,G.getSession)(e).hovered);(0,N.untracked)(()=>{let o=e.loadedRegion,a=e.graph;o&&a&&e.setHoveredNode(r&&Zn(r,o)?Qn({hover:r,nodes:a.nodes}):null)})})),(0,p.addDisposer)(e,(0,N.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,p.addDisposer)(e,(0,N.autorun)(()=>{let{scale:r}=e,o=lr(e);if(n){n=!1;return}let a=(0,N.untracked)(()=>e.builtViewport);a?.scale===r&&Yo(a.bounds,o)||e.scheduleViewportDirty()})),(0,p.addDisposer)(e,(0,N.autorun)(()=>{let r=e.currentRenderingBackend,o=e.hoveredNode,a=e.hoveredEdge,i=e.selectedNode;if(Ae(e.geometryVersion),r){let s=new Map;i!==null&&s.set(i,$o),o!==null&&o!==i&&s.set(o,gr),r.setNodeHighlights(s),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){Ae(e.viewportDirty,e.positionsVersion);let o=performance.now(),a=(0,N.untracked)(()=>zo(lr(e),Do)),i=Xt({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,N.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,N.untracked)(()=>e.scale),bounds:a}),!0}return!1},render:n=>{if(!e.nodePositions)return!1;let r=(0,wr.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=>({retryLoad(){e.loadedTrackId&&e.loadedRegion?e.reloadSubgraph():e.gfaLocation&&e.loadGFAFromLocation(e.gfaLocation)},afterAttach(){e.isDefaultViewport||(e.userMovedViewport=!0),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=or({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:sr({session:n,assemblyName:t.assembly,first:e.loadedTrackId&&r?e.loadedTrackId:void 0})});r&&e.pairWithLinearView(o)},highlightInLinearView(t){ar({session:(0,G.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){ir({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?cr((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,br.pushLaunchViewMenuItem)(t,n);return t}}))}var Jo=(0,Sr.defineLaunchKeys)()({});function nt(e){e.addViewType(()=>new xr.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:tt(),launchKeys:Jo,ReactComponent:(0,kr.lazy)(()=>import("./chunks/GraphGenomeView-UD5WCV3Q.js"))}))}function rt(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...r}=t;return n.addView("GraphGenomeView",r),t})}var Mr=y(fe(),1);var ot=y(B(),1),Lr=y(z(),1);function at(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 Zo=(0,ot.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,ot.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:Lr.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}),Rr=Zo;function it(e){e.addAdapterType(()=>new Mr.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:at,configSchema:Rr,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-B75VQK7T.js").then(t=>t.default)}))}var Ir=y(fe(),1);var st=y(B(),1),Tr=y(z(),1);function Gr(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function dt(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:Gr(`${t}.segs.bed.gz`,n,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:Gr(`${t}.links.bed.gz`,n,r)}:e}var Ar=(e,t)=>(0,st.ConfigurationSchema)(e,{indexType:{model:Tr.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),Qo=(0,st.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Ar("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:Ar("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:dt}),Nr=Qo;function ct(e){e.addAdapterType(()=>new Ir.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:dt,configSchema:Nr,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-IT7I5RR3.js").then(t=>t.default)}))}var Vr=y(J(),1),Br=y(Kr(),1),pt=y(Ur(),1),vr=y(Jr(),1);function ut(e){return typeof e=="object"&&e!==null}function ea(e){let t;if(ut(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 ta(e,t,n){let r=e.connectedViewId;return r===void 0||r===t||!n.has(r)}function na(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Pr(e,t,n){let r=[],o=new Set(ae(e).map(a=>ut(a)?a.id:void 0));for(let a of e)if(ut(a)&&a.type==="GraphGenomeView"&&ta(a,t,o)){let i=ea(a.hoverHighlight);i&&na(i,n)&&r.push({key:typeof a.id=="string"?a.id:"graph",region:i})}return r}var X=y(Z(),1),ra=(0,vr.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,Br.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),oa=(0,pt.observer)(function({model:t,region:n}){let{classes:r}=ra(),o=t.getHighlightCoords(n);return o?(0,X.jsx)("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:o.left,width:o.width}}):null}),aa=(0,pt.observer)(function({model:t}){let{views:n}=(0,Vr.getSession)(t);return(0,X.jsx)(X.Fragment,{children:Pr([...n],t.id,t.assemblyNames).map(({key:r,region:o})=>(0,X.jsx)(oa,{model:t,region:o},`graph-hover-${r}`))})}),Fr=aa;var Cr=y(Z(),1),ia="LinearGenomeView-TracksContainerComponent";function mt(e){e.contributeToExtensionPoint(ia,({model:t})=>(0,Cr.jsx)(Fr,{model:t},"graphgenomeview-hover-highlight"))}var lt=y(B(),1),gt=y(Ve(),1),F=y(J(),1);var Ne="Graph genome view (this region)";function Er(e){let t=Math.max(10,Math.floor((e.end-e.start)*.5));return{...e,start:Math.max(0,e.start-t),end:e.end+t}}function sa(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function se(e){let t=sa(e);return t?{refName:t.refName,assemblyName:t.assemblyName,start:Math.max(0,Math.floor(t.start)),end:Math.floor(t.end)}:void 0}function Hr(e){let t=e.end-e.start;return t>Y?`Region is ${W(t)} \u2014 zoom in or select a smaller range (max ${W(Y)})`:void 0}function $r({session:e,region:t,trackId:n,connectedViewId:r,haplotypes:o}){let a=t.end-t.start;a>Y?e.notify(`Region too large (${W(a)}) \u2014 zoom in to open a graph view (max ${W(Y)})`,"warning"):e.addView("GraphGenomeView",{displayName:`Graph \u2014 ${_(t)}`,loadedTrackId:n,loadedRegion:t,subgraphHaplotypes:o,connectedViewId:r})}function U({label:e,region:t,tracks:n,session:r,connectedViewId:o}){let a=[];if(t&&n.length>0){let i=Hr(t),s=d=>{let g=Me(d.referenceAssembly,t.assemblyName)??i;return{disabled:g!==void 0,disabledHelpText:g,onClick:()=>{$r({session:r,region:t,trackId:d.trackId,connectedViewId:o,haplotypes:d.haplotypes})}}};a=n.length===1?[{label:e,icon:ee,...s(n[0])}]:[{label:e,icon:ee,type:"subMenu",subMenu:n.map(d=>({label:d.name,...s(d)}))}]}return a}function da(e){return e.name==="LinearBasicDisplay"}function _r(e,t){return Ke(e,(0,lt.getConf)(t,["adapter"]).type)}function Dr(e,t){return[Je(e.configuration,(0,lt.getConf)(e,"trackId"),(0,F.getSession)(e),t)]}function ht(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(da(t)&&t.extendStateModel(n=>n.extend(r=>{let o=r.trackMenuItems,a=r.contextMenuItems;return{views:{trackMenuItems(){let i=o(),s=(0,F.getContainingTrack)(r);if(_r(e,s)){let d=(0,F.getContainingView)(r);for(let g of U({label:Ne,region:se(d.dynamicBlocks.contentBlocks),tracks:Dr(s,d),session:(0,F.getSession)(r),connectedViewId:d.id}))(0,gt.pushLaunchViewMenuItem)(i,g)}return i},contextMenuItems(){let i=a(),s=r.contextMenuInfo,d=(0,F.getContainingTrack)(r);if(s){let g=(0,F.getContainingView)(r),w=g.displayedRegions[s.displayedRegionIndex],R=_r(e,d);if(w){let m=U({label:R?"Graph genome view (this segment)":"Graph genome view (this feature)",region:Er({refName:w.refName,assemblyName:w.assemblyName,start:s.item.startBp,end:s.item.endBp}),tracks:R?Dr(d,g):Ge(e,(0,F.getSession)(r),w.assemblyName,g),session:(0,F.getSession)(r),connectedViewId:g.id});for(let u of m)(0,gt.pushLaunchViewMenuItem)(i,u)}}return i}}}})),t))}var Or=y(Ve(),1),Ie=y(J(),1);var ca="Graph genome view (this selection)";function ua(e){return e.name==="LinearGenomeView"}function bt(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(ua(t)&&t.extendStateModel(n=>n.extend(r=>{let o=r.menuItems,a=r.rubberBandMenuItems;function i(){let s=r.assemblyNames[0];return s?Ge(e,(0,Ie.getSession)(r),s,r):[]}return{views:{menuItems(){let s=o();for(let d of U({label:Ne,region:se(r.dynamicBlocks.contentBlocks),tracks:i(),session:(0,Ie.getSession)(r),connectedViewId:r.id}))(0,Or.pushLaunchViewMenuItem)(s,d);return s},rubberBandMenuItems(){return[...a(),...U({label:ca,region:se(r.getSelectedRegions(r.leftOffset,r.rightOffset)),tracks:i(),session:(0,Ie.getSession)(r),connectedViewId:r.id})]}}}})),t))}var jr="GraphGenomeView";var Wr="3.0.3";var ft=class extends zr.default{constructor(){super(...arguments);this.name=jr;this.version=Wr}install(n){nt(n),rt(n),ht(n),bt(n),mt(n),ct(n),it(n),He(n),$e(n),n.addRpcMethod(()=>new ne(n)),n.addRpcMethod(()=>new te(n))}configure(n){try{(0,Yr.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:ee,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{ft as default};
1
+ import{a as z}from"./chunks/chunk-FCWXYIFC.js";import{a as kt}from"./chunks/chunk-D7XFR2IV.js";import{B as Vt,C as Bt,D as vt,E as ve,G as pe,H as Ft,I as Ct,J as Et,K as me,L as ge,M as Fe,N as Ht,P as $t,Q as _t,R as Dt,T as Ot,U as jt,V as Wt,W as zt,Y as Ce,Z as Ee,a as wt,ba as Yt,c as qr,ca as Xt,d as A,da as Ut,e as St,ea as le,f as Lt,fa as Kt,g as Rt,ga as qt,h as de,ha as Jt,i as Be,ia as he,ja as _,k as Mt,ka as Zt,l as Gt,m as Tt,ma as Jr,n as Q,p as Nt,q as ce,r as ue,x as It,z as Pt}from"./chunks/chunk-X3X74OGB.js";import{a as Z,b as Ur,c as Kr,d as Ve,e as xt}from"./chunks/chunk-XEJ47DLD.js";import{c as At}from"./chunks/chunk-ZNGDWZ6Z.js";import{a as Xr}from"./chunks/chunk-KWAXLUPQ.js";import{a as J}from"./chunks/chunk-J4OLMLS5.js";import"./chunks/chunk-F4C3BEPV.js";import{a as H,b as y}from"./chunks/chunk-FY3BTKY4.js";var en=H((pa,Qt)=>{Qt.exports=JBrowseExports["@jbrowse/core/Plugin"]});var fe=H((la,tn)=>{tn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var B=H((ha,nn)=>{nn.exports=JBrowseExports["@jbrowse/core/configuration"]});var cn=H((wa,dn)=>{dn.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var ye=H((ka,un)=>{un.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var yn=H((Ga,fn)=>{fn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var kn=H((Aa,wn)=>{wn.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var Sn=H((Ta,xn)=>{xn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var Rn=H((Na,Ln)=>{Ln.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var Gn=H((Ia,Mn)=>{Mn.exports=JBrowseExports.mobx});var zr=y(en(),1),Yr=y(J(),1);var be=y(Z(),1),ee=(0,wt.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 sn=y(fe(),1);var rn=y(B(),1),on=y(z(),1),Zr=(0,rn.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:on.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}),an=Zr;function He(e){e.addAdapterType(()=>new sn.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:an,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-6UTRY4CV.js").then(t=>t.default)}))}var pn=y(cn(),1),mn=y(ye(),1);function Qr(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var te=class extends mn.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:r,region:o,sessionId:a,opts:i,signal:s}=n,{dataAdapter:d}=await(0,pn.getAdapter)(this.pluginManager,a,r);return Qr(d)?d.getSubgraph(o,{...i,signal:s}):(console.warn(`[GetSubgraph] ${d.constructor.name} does not implement getSubgraph`),"")}};var gn=y(xt(),1),ln=y(ye(),1),hn=y(z(),1),eo=(0,gn.lazy)(()=>import("./chunks/AddTrackWorkflow-Y3OBHM33.js"));function $e(e){e.addAddTrackWorkflowType(()=>new ln.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:eo,stateModel:hn.types.model({})}))}var bn=y(ye(),1);var _e;function De(){return _e??=import("./chunks/bandage-layout-FIOZ7B3E.js").then(e=>e.default()).catch(e=>{throw _e=void 0,e}),_e}var ne=class extends bn.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 De();a?.("Computing layout");let s=performance.now(),d=i.computeLayout(r,o),g=performance.now()-s;return{result:d,duration:g}}};var kr=y(xt(),1),xr=y(yn(),1),Sr=y(kn(),1);var j=y(B(),1),hr=y(Sn(),1),br=y(Ve(),1),G=y(J(),1),fr=y(Xr(),1),p=y(z(),1),yr=y(Rn(),1),wr=y(qr(),1),N=y(Gn(),1);var to=.9,Oe=2,no=1e3;function An(e,t,n,r=o=>o){let o=new Map(e.nodes.map(i=>[i.name,i])),a=[];for(let i of t){let s=[],d,g=[],w=[];for(let b of ce(i)){let f=o.get(b),h=f&&n[f.id];if(!(!f||!h?.length)){if(A(f)&&(f.stable.start<i.start||f.stable.start>=i.end)){w.push(h[Math.floor(h.length/2)]);continue}g.push(f.id),s.push(ue(h.length===1?[h[0],h[0]]:h));for(let k of h)(!d||k.y<d.y)&&(d=k)}}if(!d)continue;let R=w.length?{x:w.reduce((b,f)=>b+f.x,0)/w.length,y:w.reduce((b,f)=>b+f.y,0)/w.length}:d,m=new Map;for(let b of i.routes??[])for(let f of new Set(b.steps))m.set(f,(m.get(f)??0)+1);let u=[];for(let b of i.routes??[]){if(i.longestAlleleLength<no)break;if(b.steps.length===0)continue;let f=Math.min(...b.steps.map(c=>m.get(c))),h,k=-1;for(let c of b.steps)if(m.get(c)===f)for(let l of n[c]??[]){let x=Math.hypot(l.x-R.x,l.y-R.y);x>k&&(k=x,h=l)}h&&u.push({route:b,at:h,text:ro(b,r)})}a.push({bubble:i,...Q(i),path:s.join(""),top:d,members:g.length,nodeIds:g,whole:g.length>=to*e.nodes.length,routes:u})}return a}function ro(e,t){let n=[...new Set(e.walks.map(t))].sort(),r=n.slice(0,Oe).join(", "),o=n.length>Oe?` +${n.length-Oe}`:"";return`${r}${o} \xB7 ${Tt(e.bp)}`}function Tn(e){if(!e.nodes.some(A))return[];let t=new Map(e.nodes.map(m=>[m.id,m])),n=It(e),r=new Map(n.map((m,u)=>[m,u])),o=new Int32Array(n.length+1),a=new Map,i=new Set;for(let m of e.edges){let u=r.get(m.from),b=r.get(m.to);if(u===void 0||b===void 0||u===b)continue;i.add(`${m.from}>${m.to}`).add(`${m.to}>${m.from}`);let[f,h]=u<b?[u,b]:[b,u];o[f+1]++,o[h]--;let[k,c]=u<b?[m.from,m.to]:[m.to,m.from];(a.get(k)??a.set(k,new Set).get(k)).add(c)}for(let m=1;m<o.length;m++)o[m]+=o[m-1];let s=e.nodes.filter(A).sort((m,u)=>m.stable.start-u.stable.start),d=new Set([s[0].id,s.at(-1).id]),g=s.map(m=>[m,r.get(m.id)]).filter(([m,u])=>d.has(m.id)||o[u]===0).sort(([m,u],[b,f])=>u-f||m.stable.start-b.stable.start),w=e.paths?.map(m=>{let u=new Map;return m.nodeIds.forEach((b,f)=>{u.has(b)||u.set(b,f)}),u}),R=[];for(let m=0;m+1<g.length;m++){let[u,b]=g[m],[f,h]=g[m+1],k=n.slice(b+1,h);if(k.length===0)continue;let c=new Map([[u.id,{min:0,max:0,n:1}]]);for(let P of[u.id,...k]){let V=c.get(P);if(V)for(let E of a.get(P)??[]){if(r.get(E)>h)continue;let yt=E===f.id?0:t.get(E).length,Pe=c.get(E);c.set(E,{min:Math.min(Pe?.min??1/0,V.min+yt),max:Math.max(Pe?.max??-1/0,V.max+yt),n:Math.min(At,V.n+(Pe?.n??0))})}}let l=w&&oo(e,t,w,u.id,f.id),x=l?.n?l:void 0,S=x??c.get(f.id)??{min:0,max:0,n:0},M=l!==void 0&&l.left>0,L=u.stable.start+u.length,T=f.stable.start,I=[u.id,...k.filter(P=>A(t.get(P))),f.id],C=I.some((P,V)=>V>0&&!i.has(`${I[V-1]}>${P}`)),K=C||M,$=C&&!x;R.push({refName:u.stable.refName,start:L,end:T,segmentCount:k.length+2,pathCount:S.n,inversion:!1,shortestAlleleLength:$?T-L:S.min,longestAlleleLength:$?T-L:S.max,segments:[u,...k.map(P=>t.get(P)),f].map(P=>P.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:K,routes:x?.routes})}return R}function oo(e,t,n,r,o){let a=new Map,i=1/0,s=-1/0,d=0;return e.paths.forEach((g,w)=>{let R=n[w].get(r),m=n[w].get(o);if(R===void 0||m===void 0){(R!==void 0||m!==void 0)&&d++;return}let u=g.nodeIds.slice(Math.min(R,m)+1,Math.max(R,m));m<R&&u.reverse();let b=0;for(let k of u)b+=t.get(k)?.length??0;let f=u.join(","),h=a.get(f)??{steps:u,bp:b,walks:[]};h.walks.push(g.name),a.set(f,h),i=Math.min(i,b),s=Math.max(s,b)}),a.size||d?{min:i,max:s,n:a.size,left:d,routes:[...a.values()]}:void 0}function Nn(e,t){let n=new Set(t),r=e.nodes.filter(i=>n.has(i.name)),o=new Set(r.map(i=>i.id)),a=e.paths?.map(i=>({...i,nodeIds:i.nodeIds.filter(s=>o.has(s))})).filter(i=>i.nodeIds.length>0);return{name:e.name,nodes:r,edges:e.edges.filter(i=>o.has(i.from)&&o.has(i.to)),...a?.length?{paths:a}:{},anchorPaths:e.anchorPaths,pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}var je=new Set(["Gff3TabixAdapter","Gff3Adapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),ao=/gene|refseq|gencode|ensembl|annotation/i;function In(e,t){if(t)return e.find(r=>r.trackId===t);let n=e.filter(r=>je.has(r.adapterType));return n.find(r=>ao.test(`${r.trackId} ${r.name??""}`))??n[0]}function v(e,t){return typeof e.get=="function"?e.get(t):e[t]}function Pn(e,t){v(e,"type")==="exon"&&t.push({start:v(e,"start"),end:v(e,"end")});let r=v(e,"subfeatures");for(let o of r??[])Pn(o,t)}function io(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 Vn(e){let t=[];for(let n of e){let r=v(n,"gene_name")??v(n,"name")??v(n,"id"),o=v(n,"start"),a=v(n,"end");if(!r||!(a>o))continue;let i=[];Pn(n,i),t.push({name:r,refName:v(n,"refName"),start:o,end:a,strand:v(n,"strand")??0,exons:i.length?io(i):[{start:o,end:a}]})}return t}function Bn(e){return e.split("#").at(-1)}function vn(e,t,n){let r=new Map,o=new Map;for(let i of e.nodes)if(A(i)&&n[i.id]?.length){let{refName:s}=i.stable,d=o.get(s)??o.set(s,Bn(s)).get(s),g=r.get(d)??r.set(d,{nodes:[],reach:0}).get(d);g.nodes.push(i),g.reach=Math.max(g.reach,i.length)}for(let{nodes:i}of r.values())i.sort((s,d)=>s.stable.start-d.stable.start);let a=[];for(let i of t){let s=r.get(Bn(i.refName));if(!s)continue;let d=[],g,w=1/0,R=0,m=(i.start+i.end)/2,{nodes:u,reach:b}=s;for(let f=Lt(u,i.start-b);f<u.length&&u[f].stable.start<i.end;f++){let h=u[f],k=h.stable.start,c=k+h.length;if(c<=i.start)continue;let l=n[h.id];R+=Math.min(c,i.end)-Math.max(k,i.start);for(let M of i.exons){let L=Math.max(M.start,k),T=Math.min(M.end,c);if(T<=L)continue;let I=ve(l,(L-k)/h.length,(T-k)/h.length);I.length===1&&I.push({...I[0]}),d.push(ue(I))}let x=Math.min(Math.max(m,k),c),S=Math.abs(x-m);if(S<w){w=S;let[M]=ve(l,(x-k)/h.length,(x-k)/h.length);g=M}}g&&a.push({gene:i,exons:d.join(""),at:g,covered:R/(i.end-i.start)})}return a}function so(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 re(e){let t={};for(let n of e)so(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 Fn=62,co=60;function uo(e){let t=[],n="+",r=0;function o(a){a>r&&t.push({id:e.slice(r,a),strand:n})}for(let a=0;a<e.length;a++){let i=e.charCodeAt(a);(i===Fn||i===co)&&(o(a),n=i===Fn?"+":"-",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(re(o))}else if(r.startsWith("S")){let[,o,...a]=r.split(" "),i,s,d,g=!1,w=a[0]??"*";/^\d+$/.test(w)?(i=+w,s=a[1]??"*",d=a.slice(2)):(g=!0,s=w,i=s==="*"?0:s.length,d=a.slice(1));let R=re(d);g&&"LN"in R&&(i=+R.LN),t.nodes.push({id:o,length:i,sequence:s,tags:R})}else if(r.startsWith("E")){let[,,o,a,,,,,i,...s]=r.split(" ");o&&a&&t.links.push({source:o.slice(0,-1),target:a.slice(0,-1),strand1:o.at(-1),strand2:a.at(-1),cigar:i??"*",tags:re(s)})}else if(r.startsWith("L")){let[,o,a,i,s,d,...g]=r.split(" ");o&&i&&s&&t.links.push({source:o,target:i,strand1:a,strand2:s,cigar:d??"*",tags:re(g)})}else if(r.startsWith("W")){let[,o,a,i,s,d,g,...w]=r.split(" ");o&&a&&i&&s&&d&&g&&t.walks.push({sample:o,haplotype:+a,contig:i,start:s==="*"?-1:+s,end:d==="*"?-1:+d,segments:uo(g),tags:re(w)})}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 po(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 mo(e){return[...e.paths.map(t=>({...pe(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 go(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 oe=e=>typeof e=="number"&&e>0?e:void 0;function lo({tags:e,length:t}){let n=oe(e.RC)??oe(e.FC)??oe(e.KC);return oe(e.dp)??oe(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function ho(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:We(e),samples:go(e)}}function Cn(e,t="Imported GFA"){let n=[],r=[],{canonical:o,traversals:a}=po(e),i=u=>`${u}${o.get(u)??"+"}`;for(let u of e.nodes){let b=lo(u)??Math.max(a.get(u.id)??1,1);n.push(ho(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 s=[],d=new Map,g=(u,b)=>[u,b].sort().join("--");function w(u,b){for(let f=0;f<u.length-1;f++){let h=g(u[f],u[f+1]);d.has(h)||d.set(h,new Set),d.get(h).add(b)}}for(let u of e.paths){let b=u.path.split(",").map(f=>i(f.slice(0,-1)));s.push({name:u.name,nodeIds:b}),w(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}`;s.push({name:f,nodeIds:b,sample:u.sample,haplotype:u.haplotype,contig:u.contig}),w(b,f)}for(let u of r){let b=d.get(g(u.from,u.to));b&&b.size>0&&(u.pathIds=[...b])}let R=new Map(e.nodes.map(u=>[u.id,u.length])),m=e.paths.length>0||e.walks.length>0?Ft(mo(e),u=>R.get(u)??0):void 0;return{name:t,nodes:n,edges:r,paths:s.length>0?s:void 0,anchorPaths:m?.anchorPaths,pathVisits:m?.pathVisits,anchoredBy:n.some(u=>u.stable)?"tags":void 0}}var En=y(B(),1),Hn=y(z(),1),bo="rgb(60,65,72)";function $n({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 ? '${bo}' : 'hsl(' + ${r} + ',70%,50%)'`}function fo(e){return typeof e=="object"&&e!==null&&"id"in e&&Array.isArray(e.tracks)}function _n(e,t,n){for(let r of e)if(fo(r)&&(t===void 0||r.id===t)){let a=r.tracks?.find(i=>i.configuration.trackId===n)?.displays[0];if(a)return a}}function Dn(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 On(e,t){let n=e.nodes.filter(h=>A(h)&&(t[h.id]?.length??0)>0);if(n.length<2)return t;let r=n.map(h=>{let k=t[h.id],c=k[Math.floor(k.length/2)];return{x:c.x,y:c.y,r:h.stable.start+h.length/2,w:h.length}}),o=r.reduce((h,k)=>h+k.w,0),a=r.reduce((h,k)=>h+k.x*k.w,0)/o,i=r.reduce((h,k)=>h+k.y*k.w,0)/o,s=r.reduce((h,k)=>h+k.r*k.w,0)/o,d=0,g=0;for(let h of r)d+=h.w*(h.x-a)*(h.r-s),g+=h.w*(h.y-i)*(h.r-s);let w=-Math.atan2(g,d),R=Math.cos(w),m=Math.sin(w),u={};for(let[h,k]of Object.entries(t))u[h]=k.map(c=>{let l=c.x-a,x=c.y-i;return{x:a+R*l-m*x,y:i+m*l+R*x}});let b=0,f=0;for(let h of e.nodes)if(!A(h))for(let k of u[h.id]??[])k.y>i?b++:f++;if(f>b)for(let h of Object.values(u))for(let k of h)k.y=2*i-k.y;return u}var jn=30;function yo(e,t){let{opts:n}=t,r=new Map(t.nodes.map(m=>[m.id,de(n,m.length)])),o=m=>r.get(m)??n.minimumNodeLength,a=e.nodes.filter(A).sort((m,u)=>m.stable.start-u.stable.start),i=new Map,s=0;for(let m of a)i.set(m.id,{x:s,y:0}),s+=o(m.id)+n.edgeLength;let d=me(e),g=new Map(a.map(m=>[m.id,0])),w=a.map(m=>m.id);for(let m of w){let u=i.get(m),b=g.get(m)+1;for(let f of d.get(m)??[])g.has(f)||(g.set(f,b),i.set(f,{x:u.x+o(m)/2,y:jn*b}),w.push(f))}let R=0;for(let m of e.nodes)i.has(m.id)||i.set(m.id,{x:R++*s/e.nodes.length,y:jn*3});return i}function Wn(e,t){let n=yo(e,t);return t.nodes.map(r=>({...r,...n.get(r.id)}))}var Ye=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),wo=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function Yn(e,t){return t?e.find(r=>r.trackId===t):e.filter(r=>Ye.has(r.adapterType)).find(r=>wo.test(`${r.trackId} ${r.name??""}`))}function ke(e,t){return typeof e.get=="function"?e.get(t):e[t]}var Xn=/^\w+=[^;]*(;\w+=[^;]*)*$/;function ko(e){let t=ke(e,"name");if(!(typeof t!="string"||!Xn.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]??ko(e)?.[t]}var Un=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],xo=["RUL","period","PERIOD","consensusSize","unit","unitLength"],So=["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 Lo=/^[ACGTURYSWKMBDHVN]+$/i;function Ro(e){let t=Number(xe(e,xo));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=xe(e,Un);return n&&Lo.test(n)?n.length:void 0}function zn(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 Mo(e){let t=ke(e,"samples"),n={};for(let[r,o]of Object.entries(t??{})){let a=zn(o.SD),i=zn(o.AL).flatMap((s,d)=>s!==void 0&&s>0?[a[d]===void 0?{bp:s}:{bp:s,spanningReads:a[d]}]:[]);i.length>0&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}function Kn(e){let t=[];for(let n of e){let r=we(n,"start"),o=we(n,"end"),a=Ro(n);if(!(o>r)||a===void 0)continue;let i=we(n,"refName"),s=xe(n,Un),d=xe(n,So);t.push({key:`${i}:${r}-${o}`,name:(d&&!Xn.test(d)?d:void 0)??(s&&s.length<=12?`(${s})n`:`${i}:${(r+1).toLocaleString()}-${o.toLocaleString()}`),refName:i,start:r,end:o,unit:a,motif:s,calls:Mo(n)})}return t.sort((n,r)=>n.start-r.start)}function qn(e,t){let n=e.paths?.find(g=>g.name===t);if(!n)return;let r=new Map(e.nodes.map(g=>[g.id,g])),o=new Map;e.edges.forEach((g,w)=>{o.set(`${g.from}>${g.to}`,w)});let a=new Set(n.nodeIds),i=new Set;for(let g=1;g<n.nodeIds.length;g++){let w=n.nodeIds[g-1],R=n.nodeIds[g],m=o.get(`${w}>${R}`)??o.get(`${R}>${w}`);m!==void 0&&i.add(m)}let s=g=>g.reduce((w,R)=>w+(r.get(R)?.length??0),0),d=e.referencePath?e.paths.find(g=>pe(g.name).name===e.referencePath):void 0;return{name:t,nodeIds:a,edgeIndexes:i,steps:n.nodeIds.length,bp:s(n.nodeIds),referenceBp:d&&d!==n?s(d.nodeIds):void 0}}function Se(e){return typeof e=="object"&&e!==null}function Go(e){return Se(e)&&typeof e.get=="function"}function Ao(e){let t=Go(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: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:Ao(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,r;for(let o of t)o.name===e.featureName?n=o.id:r===void 0&&A(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 er(e){return typeof e=="object"&&e!==null}function To(e){return er(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function ae(e){return e.flatMap(t=>er(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function ie({views:e,connectedViewId:t,assemblyName:n}){let r=ae(e).filter(a=>To(a)).filter(a=>a.assemblyNames.includes(n));return r.find(a=>a.id===t)??(r.length===1?r[0]:void 0)}function nr(e,t,n){n.catch(r=>{console.error(`[GraphGenomeView] ${t}`,r),e.notifyError?.(`${t}: ${r}`,r)})}var No=1e3;function Ue(e,t=No){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 rr(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 or({session:e,location:t,assembly:n,connectedViewId:r,tracks:o=[]}){let a=ie({views:e.views,connectedViewId:r,assemblyName:n}),i;return a?(nr(e,`Could not show ${n} ${_(t)}`,Promise.resolve(a.navToLocString(he(t),n))),i=a.id):i=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${_(t)}`,init:{assembly:n,loc:he(t),tracks:o}}).id,i}function ar({session:e,location:t,assembly:n,connectedViewId:r}){let o=ie({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 tr(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 ir({session:e,contributors:t,trackId:n,graphTrackId:r}){let o=tr(e,r),a=tr(e,n),i=t.filter(g=>a.includes(g.sample)),s=i.length>=2?i:t,d={init:{views:s.map(g=>({assembly:g.sample,loc:he(g),...r!==void 0&&o.includes(g.sample)?{tracks:[r]}:{}})),tracks:n?s.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?nr(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",d)):e.addView("LinearSyntenyView",d)}var Le=y(B(),1),Io="FeatureTrack";function sr({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"),s=(0,Le.readConfObject)(o,"trackId");a===Io&&Array.isArray(i)&&i.includes(t)&&typeof s=="string"&&s!==n&&r.push(s)}return n?[n,...r]:r}var Re=y(B(),1),dr=y(kt(),1),Po="SyntenyTrack";function cr(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"),s=(0,Re.readConfObject)(o,"trackId");if(a===Po&&typeof s=="string"&&Array.isArray(i)){let d=i.filter(g=>n.has(g)).length;d>=2&&r.push({trackId:s,name:(0,dr.getTrackName)(o,e),coverage:d})}}return r.sort((o,a)=>a.coverage-o.coverage)}var D=y(B(),1),ur=y(kt(),1);function Ke(e,t){return typeof t=="string"&&e.adapterTypes.has(t)&&e.getAdapterType(t).adapterCapabilities.includes("getSubgraph")}function pr(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function Vo(e){return typeof e=="object"&&e!==null&&"laneSelection"in e&&"hiddenLanes"in e}function Bo(e){let t=(0,D.readConfObject)(e,"assemblyNames"),n=pr(t)?t.slice(1):[];return n.length>0?n:void 0}function qe(e){let t=(0,D.readConfObject)(e,"assemblyNames");return pr(t)?t[0]:void 0}function Me(e,t){return e===void 0||e===t?void 0:`The graph is cut on its reference, ${e}: open it from a view of ${e}`}function vo(e,t,n){let r=n?.tracks.find(o=>(0,D.readConfObject)(o.configuration,"trackId")===t)?.displays.find(Vo);return r?r.laneSelection?.filter(o=>!r.hiddenLanes.includes(o)):Bo(e)}function Je(e,t,n,r){return{trackId:t,name:(0,ur.getTrackName)(e,n),referenceAssembly:qe(e),haplotypes:vo(e,t,r)}}function Ge(e,t,n,r){let o=[];for(let a of t.tracks){let i=(0,D.readConfObject)(a,"assemblyNames"),s=(0,D.readConfObject)(a,"adapter"),d=(0,D.readConfObject)(a,"trackId");Array.isArray(i)&&i.includes(n)&&typeof d=="string"&&typeof s=="object"&&s!==null&&"type"in s&&Ke(e,s.type)&&o.push(Je(a,d,t,r))}return o}var Co=600,Ze=160,Eo=340,mr=".segs.bed.gz";function Ho(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 O=40,gr=1.4,$o=1.6,_o=150,Do=1;function Ae(...e){}var Y=5e6;function W(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var Oo=2e4,jo=1e-6,Wo=100;function Qe(e){return Math.max(jo,Math.min(Wo,e))}function et(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 zo(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 Yo(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}var Te=new WeakMap,Xo=4;function Uo(e){let t=Te.get(e);return t||(t=new Map,Te.set(e,t)),t}function Ko(e,t){let n=Te.get(e);n&&e!==t&&Te.set(t,n)}function qo(e,t,n){e.size>=Xo&&e.delete(e.keys().next().value),e.set(t,n)}function tt(){return p.types.compose("GraphGenomeView",hr.BaseViewModel,(0,yr.RenderLifecycleMixin)(),p.types.model({type:p.types.literal("GraphGenomeView"),layoutQuality:p.types.optional(p.types.number,2),linearLayout:p.types.optional(p.types.boolean,!1),layoutMode:p.types.optional(p.types.enumeration($t),"force"),colorScheme:p.types.optional(p.types.enumeration(Pt),"auto"),bubbleSpread:p.types.optional(p.types.enumeration(Mt),"auto"),nodeWidth:p.types.optional(p.types.enumeration(Ot),"depth"),showBubbles:p.types.optional(p.types.boolean,!0),showDeletionEdges:p.types.optional(p.types.boolean,!1),showGenes:p.types.optional(p.types.boolean,!0),geneTrackId:p.types.optional(p.types.string,""),repeatTrackId:p.types.optional(p.types.string,""),repeatKey:p.types.optional(p.types.string,""),walkRowSamples:p.types.maybe(p.types.frozen()),highlightedPath:p.types.optional(p.types.string,""),referencePath:p.types.optional(p.types.string,""),showPerf:p.types.optional(p.types.boolean,!1),contigThickness:p.types.optional(p.types.number,6),connectorThickness:p.types.optional(p.types.number,2),darkMode:p.types.optional(p.types.boolean,!1),scale:p.types.optional(p.types.number,1),translateX:p.types.optional(p.types.number,0),translateY:p.types.optional(p.types.number,0),drawPaths:p.types.optional(p.types.boolean,!1),paneHeight:p.types.maybe(p.types.number),maxGraphNodes:p.types.optional(p.types.number,Oo),maxRegionBp:p.types.optional(p.types.number,Y),loadedTrackId:p.types.optional(p.types.string,""),loadedRegion:p.types.maybe(p.types.frozen()),subgraphHaplotypes:p.types.maybe(p.types.frozen()),subgraphContext:p.types.optional(p.types.number,1),gfaLocation:p.types.maybe(p.types.frozen()),colorDomain:p.types.maybe(p.types.frozen()),connectedViewId:p.types.maybe(p.types.string)})).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,userMovedViewport:!1,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?_t(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&&Ce(t.length)?Ee(t):[]},get walkChoices(){let t=e.graph?.paths;return t?.length?Ee(t):[]},get walkHighlight(){return e.graph&&e.highlightedPath?qn(e.graph,e.highlightedPath):void 0},get effectiveDrawPaths(){return e.drawPaths&&Ce(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?Tn(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get assemblyTrackChoices(){let t=e.loadedRegion;return t?(0,G.getSession)(e).tracks.filter(n=>(0,j.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,j.readConfObject)(n,"name"),adapterType:(0,j.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?me(e.graph):void 0},get nodeInk(){let{contigThickness:t,nodeWidth:n,nodeById:r}=e,o=e.graph?jt(e.graph):0;return{maxHalfWidthPx:zt(t,n)/2,halfWidthPx:a=>{let i=r?.get(a);return i?Wt(i,t,n,o)/2:t/2}}},get deletions(){return e.graph&&e.layoutMode!=="walkrows"?Vt(e.graph):[]},get walkRowBars(){if(e.layoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?Fe(e.graph,t,t.unit):Fe(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:Ut(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,...Q(n)}))},get genePins(){Ae(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&e.layoutMode!=="variants"&&e.layoutMode!=="walkrows"&&e.graph&&e.geneFeatures&&t?vn(e.graph,e.geneFeatures,t):[]},get bubbleHalos(){Ae(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 An(e.graph,e.bubbles,t,r=>n.get(r)??r)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.graph?Yt(e.graph,e.rampDomain):void 0},get assemblyNames(){let t=e.loadedRegion;return t?[t.assemblyName]:[]},get scaleX(){return et(e.scale,e.pixelRows).scaleX},get scaleY(){return et(e.scale,e.pixelRows).scaleY},get axisScale(){return et(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 g of Object.values(e.layoutResult.nodePositions))for(let w of g)n=Math.min(n,w.x),r=Math.min(r,w.y),o=Math.max(o,w.x),a=Math.max(a,w.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 s=this.walkRowBars,d=s&&e.layoutResult.extent?Ht(s):e.layoutResult.extent;d&&(o=Math.max(o,d.maxX),a=Math.max(a,d.maxY)),t={minX:n,minY:r,w:o-n,h:a-r}}return t},get canvasHeight(){let t=this.layoutBounds,n=e.width-O*2,r=Math.max(Ze,e.paneHeight??Co);if(!t)return r;if(e.pixelRows){let o=e.layoutMode==="variants"?Eo:Ze;return Math.min(r,Math.max(o,t.h+O*2))}return t.w>0&&n>0?Math.min(r,Math.max(Ze,t.h*n/t.w+O*2)):r}})).views(e=>({get geneTrack(){return In(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=ge({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?St(t):[];return t?Kt(t,{maxGap:n.length>0?Rt(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t,tracks:n}=(0,G.getSession)(e),r=n.find(s=>s.trackId===e.loadedTrackId),o=r?(0,j.readConfObject)(r,"adapter"):void 0,a=new Map(Object.entries(o?.assemblyNameToPanSN??{}).map(([s,d])=>[d,s])),i=s=>s!==void 0&&t.has(s)?t.get(s)?.name??s:void 0;return s=>i(a.get(s))??i(s)}})).views(e=>({get launchableAssemblies(){return Jt(rr(e.contributingAssemblies,e.loadedRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.loadedRegion;return t!==void 0&&ie({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?qt(e.assemblyResolver,r):void 0,a=e.loadedRegion,i=e.nodeById,s=e.nodeNeighbors,d=a&&i&&s?ge({nodeId:t,nodeById:i,neighbors:s}):void 0,g=a&&d?{sample:a.assemblyName,haplotype:void 0,refName:a.refName,...d}:void 0;return{own:r&&o?{location:Ue(r),assembly:o}:void 0,reference:a&&g?{location:Ue(g),assembly:a.assemblyName}:void 0,highlight:a&&g?{location:g,assembly:a.assemblyName}: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=Ct(n,t);Ko(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},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&&ae([...(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,s=i?ge({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&&s?{refName:i.refName,assemblyName:i.assemblyName,start:s.start,end:s.end}:{}}}))}},setTransform(t,n,r){e.userMovedViewport=!0,e.scale=Qe(t),e.translateX=n,e.translateY=r},zoom(t,n,r){e.userMovedViewport=!0;let o=Qe(e.scale*t),a=o/e.scale;e.scale=o,e.translateX=n-(n-e.translateX)*a,e.pixelRows||(e.translateY=r-(r-e.translateY)*a)},setViewportDirty(){e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){let t=e.layoutBounds,n=e.width-O*2,r=e.canvasHeight-O*2;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=O-t.minX*i+(n-t.w*i)/2;let s=e.pixelRows?1:i,d=r-t.h*s;e.translateY=O-t.minY*s+Math.max(0,d)/2}},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportDirtyTimer=setTimeout(()=>{(0,p.isAlive)(e)&&e.setViewportDirty()},_o)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,p.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(r,o,a){let i=e.layoutResult?.nodePositions;if(i?.[r]){for(let s of i[r])s.x+=o,s.y+=a;n()}},scheduleViewportDirty:t}}).actions(e=>{let t;function n(c,l){let x=(0,G.getSession)(e),{rpcManager:S}=x,M="graph",L=c.nodes.some(A);return S.call(M,"GraphComputeLayout",{graph:{nodes:L?Wn(c,l):l.nodes,edges:c.edges},options:{quality:e.layoutQuality,linearLayout:e.linearLayout,...l.opts,...L?{rotateComponents:!1}:{}},signal:t?.signal,statusCallback:T=>{e.setStatusMessage((0,G.statusMessageText)(T)??"")}})}function r(c){let l=c.nodes.some(A);return`${e.layoutQuality}|${e.linearLayout}|${e.bubbleSpread}|${l}|${c.referencePath??""}`}function*o(c){let l=performance.now(),x=Dt(e.layoutMode).run(c,e.loadedRegion);if(x)return{result:x,duration:performance.now()-l};let S=Uo(c),M=r(c),L=S.get(M);if(L)return{result:L,duration:performance.now()-l};let T=Gt(e.bubbleSpread),I=Bt(c),{result:C,duration:K}=yield n(I.graph,Be(I.graph,T)),$=Be(c,T),P=new Map($.nodes.map(q=>[q.id,de($.opts,q.length)])),V=vt(C.nodePositions,I.runs,q=>P.get(q)??0),E={...C,nodePositions:c.nodes.some(A)?On(c,V):V};return qo(S,M,E),{result:E,duration:K}}let a=0;function*i(c){let l=++a,x=()=>e.graph===c&&l===a,S=t?.signal,M;try{M=yield*o(c)}catch(T){if(!x()||S?.aborted)return!1;throw T}let L=x();return L&&(e.layoutResult=M.result,e.setLayoutMs(M.duration)),L}function*s(c,l){e.setStatusMessage("Parsing GFA");let x=ze(c),S=Et(Cn(x,l),e.preferredReferencePath);if(S.nodes.length===0)throw new Error(`No graph segments in ${l}`);if(S.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${S.nodes.length.toLocaleString()} nodes (limit ${e.maxGraphNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);e.graph=S,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),e.setStatusMessage("Computing layout"),yield*i(S)}let d=0;function g(){let c=++d;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>c===d,signal:t.signal}}function w(){return e.loadedTrackId?(0,G.getSession)(e).tracks.find(c=>c.trackId===e.loadedTrackId):void 0}function*R(c,l,x){let S=Ho(c);if(!(c.type!=="RgfaTabixAdapter"||S===void 0))try{let M=yield(0,G.getSession)(e).rpcManager.call("graph","CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${S}.bubbles.bed.gz`,baseUri:c.baseUri,assemblyNameToPanSN:c.assemblyNameToPanSN},regions:[l]});x()&&(e.indexBubbles=M.map(L=>({refName:l.refName,start:L.get("start"),end:L.get("end"),segmentCount:L.get("segmentCount"),pathCount:L.get("pathCount")??0,inversion:L.get("inversion"),shortestAlleleLength:L.get("shortestAlleleLength"),longestAlleleLength:L.get("longestAlleleLength"),segments:L.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(M){console.warn("[GraphGenomeView] no bubble index for this graph",M)}}function*m(c,l,x){let S=(0,G.getSession)(e),M=c?S.tracks.find(L=>L.trackId===c):void 0;if(M)try{return yield S.rpcManager.call("graph","CoreGetFeatures",{adapterConfig:(0,j.readConfObject)(M,"adapter"),regions:[l]})}catch(L){console.warn(`[GraphGenomeView] no ${x} for this graph`,L);return}}function*u(c,l){let x=yield*m(e.geneTrack?.trackId,c,"genes");x&&l()&&(e.geneFeatures=Vn(x))}function*b(c,l){let x=yield*m(e.repeatTrack?.trackId,c,"repeats");x&&l()&&(e.repeatArrays=Kn(x))}function*f(c,l,x={}){let{isLive:S,signal:M}=g(),L=w(),T=l.end-l.start,I=(L&&Me(qe(L),l.assemblyName))??(T>e.maxRegionBp?`Region too large (${W(T)}) \u2014 zoom in to view graph (max ${W(e.maxRegionBp)})`: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 C=(0,G.getSession)(e),{rpcManager:K}=C,$="graph",P=performance.now(),V=yield K.call($,"GetSubgraph",{adapterConfig:c,region:l,opts:{hops:x.hops,haplotypes:x.haplotypes},signal:M});if(!S())return;if(e.setFetchMs(performance.now()-P),!V)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");let E=_(l);if(yield*s(V,E),!S())return;e.setStatusMessage("Reading annotations"),yield Promise.all([(0,p.flow)(R)(c,l,S),(0,p.flow)(u)(l,S),(0,p.flow)(b)(l,S)])}catch(C){S()&&(console.error("[GraphGenomeView.loadFromTabixSubgraph]",C),e.error=C)}finally{S()&&(e.isLoading=!1)}}function*h(){let c=e.loadedRegion,l=w();c&&e.loadedTrackId&&!l?e.error=new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`):l&&c&&(yield*f((0,j.readConfObject)(l,"adapter"),c,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes}))}function*k(c,l,x){let{isLive:S,signal:M}=g();e.loadedTrackId="",e.loadedRegion=x,e.isLoading=!0,e.error=void 0;try{let L=typeof l=="string"?l:yield l(M);S()&&(yield*s(L,c))}catch(L){S()&&(console.error("[GraphGenomeView.loadWholeGFA]",L),e.error=L)}finally{S()&&(e.isLoading=!1)}return S()}return{clearGraph(){t?.abort(),t=void 0,d++,a++,e.graph=void 0,e.layoutResult=void 0,e.loadedTrackId="",e.loadedRegion=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,d++,a++,e.graph=void 0,e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0)},loadGFA:(0,p.flow)(function*(c,l="Imported GFA"){yield*k(l,c)}),loadGFAFromLocation:(0,p.flow)(function*(c){e.setStatusMessage("Fetching GFA");let l=e.loadedRegion,x=yield*k("uri"in c?c.uri.split("/").pop()??"GFA":"GFA",S=>(0,fr.openLocation)(c).readFile({encoding:"utf8",signal:S}),l);l&&x&&e.graph&&(yield*b(l,()=>e.loadedRegion===l))}),loadFromTabixSubgraph:(0,p.flow)(function*(c,l,x={}){e.loadedTrackId=x.trackId??"",e.loadedRegion=x.trackId?l:void 0,yield*f(c,l,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes})}),refetchIfNeeded:(0,p.flow)(function*(){e.graph||(yield*h())}),reloadSubgraph:(0,p.flow)(function*(){yield*h()}),reloadRepeats:(0,p.flow)(function*(){let c=e.loadedRegion,l=e.repeatTrack?.trackId;c&&(yield*b(c,()=>e.loadedRegion===c&&e.repeatTrack?.trackId===l))}),reloadGenes:(0,p.flow)(function*(){let c=e.loadedRegion,l=e.geneTrack?.trackId;c&&(yield*u(c,()=>e.loadedRegion===c&&e.geneTrack?.trackId===l))}),popBubble:(0,p.flow)(function*(c){let l=e.graph;if(!l)return;let x=Nn(l,ce(c));if(x.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:S}=g();e.popStack=[...e.popStack,{graph:l,layoutMode:e.layoutMode,label:l.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let M=`${Nt[Q(c).kind]} at ${c.refName}:${c.start.toLocaleString()}`;e.graph={...x,name:M},e.layoutMode==="variants"&&(e.layoutMode="force"),e.clearInteractionState(),e.userMovedViewport=!1,e.isLoading=!0;try{(yield*i(e.graph))&&(e.isLoading=!1)}catch(L){S()&&(e.error=L,e.isLoading=!1)}}),unpopBubble:(0,p.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.userMovedViewport=!1,e.isLoading=!0;try{(yield*i(c.graph))&&(e.isLoading=!1)}catch(l){e.error=l,e.isLoading=!1}}}),recomputeLayout:(0,p.flow)(function*(){let c=e.graph;if(c){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*i(c))&&(e.isLoading=!1)}catch(l){console.error("[GraphGenomeView.recomputeLayout]",l),e.error=l,e.isLoading=!1}}})}}).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,p.addDisposer)(e,(0,N.autorun)(()=>{let r=e.rampDomain,o=e.loadedTrackId;if(r&&o&&e.effectiveColorScheme==="reference-position"){let a=(0,N.untracked)(()=>_n((0,G.getSession)(e).views,e.connectedViewId,o));a&&Dn(a,$n(r))}})),(0,p.addDisposer)(e,(0,N.autorun)(()=>{e.layoutResult&&(0,N.untracked)(()=>!e.userMovedViewport)&&e.zoomToFit()})),(0,p.addDisposer)(e,(0,N.autorun)(()=>{let r=Jn((0,G.getSession)(e).hovered);(0,N.untracked)(()=>{let o=e.loadedRegion,a=e.graph;o&&a&&e.setHoveredNode(r&&Zn(r,o)?Qn({hover:r,nodes:a.nodes}):null)})})),(0,p.addDisposer)(e,(0,N.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,p.addDisposer)(e,(0,N.autorun)(()=>{let{scale:r}=e,o=lr(e);if(n){n=!1;return}let a=(0,N.untracked)(()=>e.builtViewport);a?.scale===r&&Yo(a.bounds,o)||e.scheduleViewportDirty()})),(0,p.addDisposer)(e,(0,N.autorun)(()=>{let r=e.currentRenderingBackend,o=e.hoveredNode,a=e.hoveredEdge,i=e.selectedNode;if(Ae(e.geometryVersion),r){let s=new Map;i!==null&&s.set(i,$o),o!==null&&o!==i&&s.set(o,gr),r.setNodeHighlights(s),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){Ae(e.viewportDirty,e.positionsVersion);let o=performance.now(),a=(0,N.untracked)(()=>zo(lr(e),Do)),i=Xt({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,N.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,N.untracked)(()=>e.scale),bounds:a}),!0}return!1},render:n=>{if(!e.nodePositions)return!1;let r=(0,wr.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=>({retryLoad(){e.loadedTrackId&&e.loadedRegion?e.reloadSubgraph():e.gfaLocation&&e.loadGFAFromLocation(e.gfaLocation)},afterAttach(){e.isDefaultViewport||(e.userMovedViewport=!0),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=or({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:sr({session:n,assemblyName:t.assembly,first:e.loadedTrackId&&r?e.loadedTrackId:void 0})});r&&e.pairWithLinearView(o)},highlightInLinearView(t){ar({session:(0,G.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){ir({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?cr((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,br.pushLaunchViewMenuItem)(t,n);return t}}))}var Jo=(0,Sr.defineLaunchKeys)()({});function nt(e){e.addViewType(()=>new xr.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:tt(),launchKeys:Jo,ReactComponent:(0,kr.lazy)(()=>import("./chunks/GraphGenomeView-UD5WCV3Q.js"))}))}function rt(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...r}=t;return n.addView("GraphGenomeView",r),t})}var Mr=y(fe(),1);var ot=y(B(),1),Lr=y(z(),1);function at(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 Zo=(0,ot.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,ot.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:Lr.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}),Rr=Zo;function it(e){e.addAdapterType(()=>new Mr.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:at,configSchema:Rr,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-B75VQK7T.js").then(t=>t.default)}))}var Ir=y(fe(),1);var st=y(B(),1),Tr=y(z(),1);function Gr(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function dt(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:Gr(`${t}.segs.bed.gz`,n,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:Gr(`${t}.links.bed.gz`,n,r)}:e}var Ar=(e,t)=>(0,st.ConfigurationSchema)(e,{indexType:{model:Tr.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),Qo=(0,st.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Ar("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:Ar("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:dt}),Nr=Qo;function ct(e){e.addAdapterType(()=>new Ir.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:dt,configSchema:Nr,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-IT7I5RR3.js").then(t=>t.default)}))}var Vr=y(J(),1),Br=y(Kr(),1),pt=y(Ur(),1),vr=y(Jr(),1);function ut(e){return typeof e=="object"&&e!==null}function ea(e){let t;if(ut(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 ta(e,t,n){let r=e.connectedViewId;return r===void 0||r===t||!n.has(r)}function na(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Pr(e,t,n){let r=[],o=new Set(ae(e).map(a=>ut(a)?a.id:void 0));for(let a of e)if(ut(a)&&a.type==="GraphGenomeView"&&ta(a,t,o)){let i=ea(a.hoverHighlight);i&&na(i,n)&&r.push({key:typeof a.id=="string"?a.id:"graph",region:i})}return r}var X=y(Z(),1),ra=(0,vr.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,Br.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),oa=(0,pt.observer)(function({model:t,region:n}){let{classes:r}=ra(),o=t.getHighlightCoords(n);return o?(0,X.jsx)("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:o.left,width:o.width}}):null}),aa=(0,pt.observer)(function({model:t}){let{views:n}=(0,Vr.getSession)(t);return(0,X.jsx)(X.Fragment,{children:Pr([...n],t.id,t.assemblyNames).map(({key:r,region:o})=>(0,X.jsx)(oa,{model:t,region:o},`graph-hover-${r}`))})}),Fr=aa;var Cr=y(Z(),1),ia="LinearGenomeView-TracksContainerComponent";function mt(e){e.contributeToExtensionPoint(ia,({model:t})=>(0,Cr.jsx)(Fr,{model:t},"graphgenomeview-hover-highlight"))}var lt=y(B(),1),gt=y(Ve(),1),F=y(J(),1);var Ne="Graph genome view (this region)";function Er(e){let t=Math.max(10,Math.floor((e.end-e.start)*.5));return{...e,start:Math.max(0,e.start-t),end:e.end+t}}function sa(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function se(e){let t=sa(e);return t?{refName:t.refName,assemblyName:t.assemblyName,start:Math.max(0,Math.floor(t.start)),end:Math.floor(t.end)}:void 0}function Hr(e){let t=e.end-e.start;return t>Y?`Region is ${W(t)} \u2014 zoom in or select a smaller range (max ${W(Y)})`:void 0}function $r({session:e,region:t,trackId:n,connectedViewId:r,haplotypes:o}){let a=t.end-t.start;a>Y?e.notify(`Region too large (${W(a)}) \u2014 zoom in to open a graph view (max ${W(Y)})`,"warning"):e.addView("GraphGenomeView",{displayName:`Graph \u2014 ${_(t)}`,loadedTrackId:n,loadedRegion:t,subgraphHaplotypes:o,connectedViewId:r})}function U({label:e,region:t,tracks:n,session:r,connectedViewId:o}){let a=[];if(t&&n.length>0){let i=Hr(t),s=d=>{let g=Me(d.referenceAssembly,t.assemblyName)??i;return{disabled:g!==void 0,disabledHelpText:g,onClick:()=>{$r({session:r,region:t,trackId:d.trackId,connectedViewId:o,haplotypes:d.haplotypes})}}};a=n.length===1?[{label:e,icon:ee,...s(n[0])}]:[{label:e,icon:ee,type:"subMenu",subMenu:n.map(d=>({label:d.name,...s(d)}))}]}return a}function da(e){return e.name==="LinearBasicDisplay"}function _r(e,t){return Ke(e,(0,lt.getConf)(t,["adapter"]).type)}function Dr(e,t){return[Je(e.configuration,(0,lt.getConf)(e,"trackId"),(0,F.getSession)(e),t)]}function ht(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(da(t)&&t.extendStateModel(n=>n.extend(r=>{let o=r.trackMenuItems,a=r.contextMenuItems;return{views:{trackMenuItems(){let i=o(),s=(0,F.getContainingTrack)(r);if(_r(e,s)){let d=(0,F.getContainingView)(r);for(let g of U({label:Ne,region:se(d.dynamicBlocks.contentBlocks),tracks:Dr(s,d),session:(0,F.getSession)(r),connectedViewId:d.id}))(0,gt.pushLaunchViewMenuItem)(i,g)}return i},contextMenuItems(){let i=a(),s=r.contextMenuInfo,d=(0,F.getContainingTrack)(r);if(s){let g=(0,F.getContainingView)(r),w=g.displayedRegions[s.displayedRegionIndex],R=_r(e,d);if(w){let m=U({label:R?"Graph genome view (this segment)":"Graph genome view (this feature)",region:Er({refName:w.refName,assemblyName:w.assemblyName,start:s.item.startBp,end:s.item.endBp}),tracks:R?Dr(d,g):Ge(e,(0,F.getSession)(r),w.assemblyName,g),session:(0,F.getSession)(r),connectedViewId:g.id});for(let u of m)(0,gt.pushLaunchViewMenuItem)(i,u)}}return i}}}})),t))}var Or=y(Ve(),1),Ie=y(J(),1);var ca="Graph genome view (this selection)";function ua(e){return e.name==="LinearGenomeView"}function bt(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(ua(t)&&t.extendStateModel(n=>n.extend(r=>{let o=r.menuItems,a=r.rubberBandMenuItems;function i(){let s=r.assemblyNames[0];return s?Ge(e,(0,Ie.getSession)(r),s,r):[]}return{views:{menuItems(){let s=o();for(let d of U({label:Ne,region:se(r.dynamicBlocks.contentBlocks),tracks:i(),session:(0,Ie.getSession)(r),connectedViewId:r.id}))(0,Or.pushLaunchViewMenuItem)(s,d);return s},rubberBandMenuItems(){return[...a(),...U({label:ca,region:se(r.getSelectedRegions(r.leftOffset,r.rightOffset)),tracks:i(),session:(0,Ie.getSession)(r),connectedViewId:r.id})]}}}})),t))}var jr="GraphGenomeView";var Wr="3.0.4";var ft=class extends zr.default{constructor(){super(...arguments);this.name=jr;this.version=Wr}install(n){nt(n),rt(n),ht(n),bt(n),mt(n),ct(n),it(n),He(n),$e(n),n.addRpcMethod(()=>new ne(n)),n.addRpcMethod(()=>new te(n))}configure(n){try{(0,Yr.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:ee,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{ft as default};
3
3
  //# sourceMappingURL=jbrowse-plugin-graphgenomeviewer.esm.js.map