jbrowse-plugin-graphgenomeviewer 4.0.4 → 4.0.5

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