jbrowse-plugin-graphgenomeviewer 4.0.20 → 4.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{GbzBaseSyntenyAdapter-KKSNCZXY.js → GbzBaseSyntenyAdapter-7ZKFAEJG.js} +2 -2
- package/dist/chunks/{GbzBaseSyntenyAdapter-KKSNCZXY.js.map → GbzBaseSyntenyAdapter-7ZKFAEJG.js.map} +2 -2
- package/dist/chunks/{GraphGenomeView-YKR42OER.js → GraphGenomeView-CLUMXH4K.js} +2 -2
- package/dist/chunks/{GraphTrackSettingsDialog-2QV6TPX7.js → GraphTrackSettingsDialog-QF5OMTCH.js} +2 -2
- package/dist/chunks/{LinearGraphDisplay-AFTQJKEI.js → LinearGraphDisplay-4CMVCEM5.js} +2 -2
- package/dist/chunks/chunk-3FGJLRG2.js +2 -0
- package/dist/chunks/chunk-3FGJLRG2.js.map +7 -0
- package/dist/chunks/{chunk-ERKI3TAL.js → chunk-3SZJ4AFI.js} +3 -3
- package/dist/chunks/{chunk-5E7TVPCI.js → chunk-CLRXQ6BM.js} +2 -2
- package/dist/chunks/chunk-VIFXYTIS.js +2 -0
- package/dist/chunks/chunk-VIFXYTIS.js.map +7 -0
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +2 -2
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +3 -3
- package/package.json +2 -2
- package/src/GbzBaseSyntenyAdapter/GbzBaseSyntenyAdapter.ts +1 -1
- package/src/GetSubgraph.ts +3 -0
- package/src/GraphGenomeView/viewModel.ts +15 -0
- package/src/LinearGraphDisplay/LinearGraphDisplay.test.ts +23 -2
- package/src/LinearGraphDisplay/model.ts +7 -2
- package/src/version.ts +1 -1
- package/dist/chunks/chunk-47UXFQEI.js +0 -2
- package/dist/chunks/chunk-47UXFQEI.js.map +0 -7
- package/dist/chunks/chunk-IUIIYSGF.js +0 -2
- package/dist/chunks/chunk-IUIIYSGF.js.map +0 -7
- /package/dist/chunks/{GraphGenomeView-YKR42OER.js.map → GraphGenomeView-CLUMXH4K.js.map} +0 -0
- /package/dist/chunks/{GraphTrackSettingsDialog-2QV6TPX7.js.map → GraphTrackSettingsDialog-QF5OMTCH.js.map} +0 -0
- /package/dist/chunks/{LinearGraphDisplay-AFTQJKEI.js.map → LinearGraphDisplay-4CMVCEM5.js.map} +0 -0
- /package/dist/chunks/{chunk-ERKI3TAL.js.map → chunk-3SZJ4AFI.js.map} +0 -0
- /package/dist/chunks/{chunk-5E7TVPCI.js.map → chunk-CLRXQ6BM.js.map} +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{b as Qt,c as en,d as tn,e as nn}from"./chunks/chunk-QSH263Y6.js";import{a as Ca}from"./chunks/chunk-KWAXLUPQ.js";import{a as Ba,d as rn,g as on,h as an}from"./chunks/chunk-XK7OPCRQ.js";import{a as se}from"./chunks/chunk-J4OLMLS5.js";import{$ as jn,A as Ne,Aa as ve,B as Tn,Ba as ce,Ca as ir,E as An,Ea as sr,F as Nn,G as Pe,H as Pn,I as Z,N as st,O as Cn,P as Bn,Q as En,R as Fn,S as Vn,T as Dn,V as Hn,W as On,Z as Wn,_ as _n,a as Kt,b as sn,ba as $n,d as ln,e as Re,ea as zn,g as gn,ga as Xn,h as Le,ha as Yn,i as Ge,ia as Un,ja as Kn,ka as qn,ma as Zn,n as hn,na as Jn,o as yn,oa as Qn,p as wn,pa as er,q as kn,qa as tr,r as nt,ra as dt,s as xn,ua as Va,va as nr,w as Sn,wa as Ie,x as ot,xa as rr,y as Gn,ya as or,z as Ae,za as ar}from"./chunks/chunk-47UXFQEI.js";import{b as pn,d as mn}from"./chunks/chunk-UQEPPJEO.js";import"./chunks/chunk-SCMIJAAX.js";import{a as z}from"./chunks/chunk-FCWXYIFC.js";import{A as vn,B as Da,a as Me,b as tt,d as cn,e as un,f as bn,g as Te,h as fn,i as W,j as Mn,k as Rn,l as rt,m as Ln,s as at,v as it,x as In}from"./chunks/chunk-IUIIYSGF.js";import{b as P,d as qt,f as Zt,g as Jt}from"./chunks/chunk-EFVAQ2KM.js";import"./chunks/chunk-KULNKXPT.js";import{a as de,b as Ea,c as Fa,d as dn,e as Se}from"./chunks/chunk-XEJ47DLD.js";import{a as O,b as S}from"./chunks/chunk-FY3BTKY4.js";var cr=O((hs,dr)=>{dr.exports=JBrowseExports["@jbrowse/core/Plugin"]});var Ee=O((ys,ur)=>{ur.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var _=O((ws,pr)=>{pr.exports=JBrowseExports["@jbrowse/core/configuration"]});var mt=O((Ms,gr)=>{gr.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var J=O((Rs,hr)=>{hr.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var Gr=O((Is,Lr)=>{Lr.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var Ar=O((vs,Tr)=>{Tr.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var Pr=O((Cs,Nr)=>{Nr.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var ao=O((Id,oo)=>{oo.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var qo=O((Yc,Ko)=>{Ko.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"]});var Jo=O((Uc,Zo)=>{Zo.exports=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"]});var ra=O((Jc,na)=>{na.exports=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"]});var aa=O((Qc,oa)=>{oa.exports=JBrowseExports["@jbrowse/render-core/displayPhase"]});var Ia=S(cr(),1),va=S(se(),1);var Ce=S(de(),1),Be=(0,Kt.createSvgIcon)([(0,Ce.jsx)("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),(0,Ce.jsx)("circle",{cx:"14.8",cy:"18",r:"2"},"1"),(0,Ce.jsx)("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var lr=S(Ee(),1);var ct=S(_(),1),ut=S(z(),1),Ha=(0,ct.ConfigurationSchema)("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.gbz.db",locationType:"UriLocation"}},haplotypeIndexLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},readsLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},readsIndex:(0,ct.ConfigurationSchema)("GbzBaseReadsIndex",{indexType:{model:ut.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}}}),subgraphSnarls:{type:"stringEnum",model:ut.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=>{let{uri:t,baseUri:n,reads:r}=e;return{...e,...t?{gbzDbLocation:{uri:t,baseUri:n}}:{},...typeof r=="string"?{readsLocation:{uri:r,baseUri:n},...r.endsWith(".gz")?{readsIndex:{location:{uri:`${r}.tbi`,baseUri:n}}}:{}}:{}}}}),mr=Ha;function pt(e){e.addAdapterType(()=>new lr.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:mr,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-KKSNCZXY.js").then(t=>t.default)}))}var br=S(mt(),1),fr=S(J(),1);function Oa(e){return"getReads"in e&&typeof e.getReads=="function"}var Wa=e=>typeof e=="object"&&e!==null&&Object.entries(e).some(([t,n])=>["uri","localPath","blobId"].includes(t)&&typeof n=="string"&&n!=="");function yr(e){return typeof e.reads=="string"&&e.reads!==""||Wa(e.readsLocation)}var ue=class extends fr.RpcMethodType{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(n){let{adapterConfig:r,nodeNames:a,sessionId:o,signal:i}=n,{dataAdapter:s}=await(0,br.getAdapter)(this.pluginManager,o,r);return Oa(s)?s.getReads(a,{signal:i}):{records:[],total:0}}};var wr=S(mt(),1),kr=S(J(),1);function _a(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var pe=class extends kr.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:r,region:a,sessionId:o,opts:i,signal:s}=n,{dataAdapter:u}=await(0,wr.getAdapter)(this.pluginManager,o,r);return _a(u)?u.getSubgraph(a,{...i,signal:s}):(console.warn(`[GetSubgraph] ${u.constructor.name} does not implement getSubgraph`),"")}};var xr=S(Se(),1),Sr=S(J(),1),Mr=S(z(),1),ja=(0,xr.lazy)(()=>import("./chunks/AddTrackWorkflow-WYRVQYH2.js"));function lt(e){e.addAddTrackWorkflowType(()=>new Sr.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:ja,stateModel:Mr.types.model({})}))}var gt;function ht(){return gt??=import("./chunks/bandage-layout-UCRW4G4J.js").then(e=>e.default()).catch(e=>{throw gt=void 0,e}),gt}var Rr=S(J(),1),me=class extends Rr.RpcMethodType{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(n){let{graph:r,options:a,statusCallback:o}=n;o?.("Loading layout engine");let i=await ht();o?.("Computing layout");let s=performance.now(),u=i.computeLayout(r,a),d=performance.now()-s;return{result:u,duration:d}}};var zo=S(Se(),1),Xo=S(Gr(),1),Yo=S(Ar(),1);var _o=S(_(),1),jo=S(Pr(),1),$o=S(se(),1),E=S(z(),1);var $a=.9,bt=2,za=1e3;function Ir(e,t,n,r=o=>o,a=[]){let o=new Map(e.nodes.map(s=>[s.name,s])),i=[];for(let s of t){let u=[],d=1/0,f=-1/0,g=1/0,p=[],c=[];for(let l of Le(s)){let x=o.get(l),M=x&&n[x.id];if(!(!x||!M?.length)){if(P(x)&&(x.stable.start<s.start||x.stable.start>=s.end)){c.push(M[Math.floor(M.length/2)]);continue}p.push(x.id),u.push(Ge(M.length===1?[M[0],M[0]]:M));for(let L of M)d=Math.min(d,L.x),f=Math.max(f,L.x),g=Math.min(g,L.y)}}if(p.length===0)continue;let y={x:(d+f)/2,y:g},k=c.length?{x:c.reduce((l,x)=>l+x.x,0)/c.length,y:c.reduce((l,x)=>l+x.y,0)/c.length}:y,b=new Map;for(let l of s.routes??[])for(let x of new Set(l.steps))b.set(x,(b.get(x)??0)+1);let m=[];for(let l of s.routes??[]){if(s.longestAlleleLength<za)break;if(l.steps.length===0)continue;let x=Math.min(...l.steps.map(h=>b.get(h))),M,L=-1;for(let h of l.steps)if(b.get(h)===x)for(let R of n[h]??[]){let T=Math.hypot(R.x-k.x,R.y-k.y);T>L&&(L=T,M=R)}M&&m.push({route:l,at:M,text:Xa(l,r)})}i.push({bubble:s,...Re(s,a),path:u.join(""),labelAt:y,members:p.length,nodeIds:p,whole:p.length>=$a*e.nodes.length,routes:m})}return i}function Xa(e,t){let n=[...new Set(e.walks.map(t))].sort(),r=n.slice(0,bt).join(", "),a=n.length>bt?` +${n.length-bt}`:"";return`${r}${a} \xB7 ${ln(e.bp)}`}function vr(e){if(!e.nodes.some(P))return[];let t=new Map(e.nodes.map(p=>[p.id,p])),n=hn(e),r=new Map(n.map((p,c)=>[p,c])),a=new Int32Array(n.length+1),o=new Map,i=new Set;for(let p of e.edges){let c=r.get(p.from),y=r.get(p.to);if(c===void 0||y===void 0||c===y)continue;i.add(`${p.from}>${p.to}`).add(`${p.to}>${p.from}`);let[k,b]=c<y?[c,y]:[y,c];a[k+1]++,a[b]--;let[m,l]=c<y?[p.from,p.to]:[p.to,p.from];(o.get(m)??o.set(m,new Set).get(m)).add(l)}for(let p=1;p<a.length;p++)a[p]+=a[p-1];let s=e.nodes.filter(P).sort((p,c)=>p.stable.start-c.stable.start),u=new Set([s[0].id,s.at(-1).id]),d=s.map(p=>[p,r.get(p.id)]).filter(([p,c])=>u.has(p.id)||a[c]===0).sort(([p,c],[y,k])=>c-k||p.stable.start-y.stable.start),f=e.paths?.map(p=>{let c=new Map;return p.nodeIds.forEach((y,k)=>{c.has(y)||c.set(y,k)}),c}),g=[];for(let p=0;p+1<d.length;p++){let[c,y]=d[p],[k,b]=d[p+1],m=n.slice(y+1,b);if(m.length===0)continue;let l=new Map([[c.id,{min:0,max:0,n:1}]]);for(let H of[c.id,...m]){let U=l.get(H);if(U)for(let K of o.get(H)??[]){if(r.get(K)>b)continue;let G=K===k.id?0:t.get(K).length,F=l.get(K);l.set(K,{min:Math.min(F?.min??1/0,U.min+G),max:Math.max(F?.max??-1/0,U.max+G),n:Math.min(mn,U.n+(F?.n??0))})}}let x=f&&Ya(e,t,f,c.id,k.id),M=x?.n?x:void 0,L=M??l.get(k.id)??{min:0,max:0,n:0},h=x!==void 0&&x.left>0,R=c.stable.start+c.length,T=k.stable.start,N=[c.id,...m.filter(H=>P(t.get(H))),k.id],v=N.some((H,U)=>U>0&&!i.has(`${N[U-1]}>${H}`)),C=v||h,Y=v&&!M;g.push({refName:c.stable.refName,start:R,end:T,segmentCount:m.length+2,pathCount:L.n,inversion:!1,shortestAlleleLength:Y?T-R:L.min,longestAlleleLength:Y?T-R:L.max,segments:[c,...m.map(H=>t.get(H)),k].map(H=>H.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:C,routes:M?.routes})}return g}function Ya(e,t,n,r,a){let o=new Map,i=1/0,s=-1/0,u=0;return e.paths.forEach((d,f)=>{let g=n[f].get(r),p=n[f].get(a);if(g===void 0||p===void 0){(g!==void 0||p!==void 0)&&u++;return}let c=d.nodeIds.slice(Math.min(g,p)+1,Math.max(g,p));p<g&&c.reverse();let y=0;for(let m of c)y+=t.get(m)?.length??0;let k=c.join(","),b=o.get(k)??{steps:c,bp:y,walks:[]};b.walks.push(d.name),o.set(k,b),i=Math.min(i,y),s=Math.max(s,y)}),o.size||u?{min:i,max:s,n:o.size,left:u,routes:[...o.values()]}:void 0}function Cr(e,t){let n=new Set(t),r=e.nodes.filter(i=>n.has(i.name)),a=new Set(r.map(i=>i.id)),o=e.paths?.map(i=>({...i,nodeIds:i.nodeIds.filter(s=>a.has(s))})).filter(i=>i.nodeIds.length>0);return{name:e.name,nodes:r,edges:e.edges.filter(i=>a.has(i.from)&&a.has(i.to)),...o?.length?{paths:o}:{},anchorPaths:e.anchorPaths,pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}function Br(e,t,n){let r=new Map;for(let o of e.nodes)if(P(o)){let{refName:i}=o.stable;if(n[o.id]?.length){let s=r.get(i)??r.set(i,{nodes:[],reach:0}).get(i);s.nodes.push(o),s.reach=Math.max(s.reach,o.length)}}for(let{nodes:o}of r.values())o.sort((i,s)=>i.stable.start-s.stable.start);let a=[];for(let o of t){let i=r.get(o.refName);if(!i)continue;let s=[],u,d=1/0,f=0,g=(o.start+o.end)/2,{nodes:p,reach:c}=i;for(let y=Zt(p,o.start-c);y<p.length&&p[y].stable.start<o.end;y++){let k=p[y],b=k.stable.start,m=b+k.length;if(m<=o.start)continue;let l=n[k.id];f+=Math.min(m,o.end)-Math.max(b,o.start);for(let L of o.exons){let h=Math.max(L.start,b),R=Math.min(L.end,m);if(R<=h)continue;let T=nt(l,(h-b)/k.length,(R-b)/k.length);T.length===1&&T.push({...T[0]}),s.push(Ge(T))}let x=Math.min(Math.max(g,b),m),M=Math.abs(x-g);if(M<d){d=M;let[L]=nt(l,(x-b)/k.length,(x-b)/k.length);u=L}}u&&a.push({gene:o,exons:s.join(""),at:u,covered:f/(o.end-o.start)})}return a}function Er(e,t){let n=new Set(e.nodes.filter(d=>P(d)&&d.stable.start<t.end&&d.stable.start+d.length>t.start).map(d=>d.id)),r=e.paths??[];if(n.size===0||r.length===0)return e;let a=new Map(e.nodes.map(d=>[d.id,d.length])),o=r.map(d=>{let f=-1,g=-1;return d.nodeIds.forEach((p,c)=>{n.has(p)&&(f<0&&(f=c),g=c)}),f<0?void 0:{first:f,last:g}});if(o.every((d,f)=>d?.first===0&&d.last===r[f].nodeIds.length-1))return e;let i=new Set,s=[],u=new Map;return r.forEach((d,f)=>{let g=o[f];if(g){let p=d.nodeIds.slice(g.first,g.last+1);for(let c of p)i.add(c);s.push({...d,nodeIds:p}),u.set(d.name,d.nodeIds.slice(0,g.first).reduce((c,y)=>c+(a.get(y)??0),0))}}),{...e,nodes:e.nodes.filter(d=>i.has(d.id)),edges:e.edges.filter(d=>i.has(d.from)&&i.has(d.to)),paths:s,pathVisits:e.pathVisits&&Ua(e.pathVisits,r,o,new Map(e.nodes.map(d=>[d.id,d.name]))),anchorPaths:e.anchorPaths&&Ka(e.anchorPaths,r,u)}}function Ua(e,t,n,r){let a=new Map,o=new Map;return t.forEach((i,s)=>{let u=W(i.name).name,d=n[s];i.nodeIds.forEach((f,g)=>{let p=r.get(f)??f,c=e.get(p);if(!c)return;let y=`${u} ${p}`,k=a.get(y)??0;for(;k<c.length&&c[k].path!==u;)k++;let b=c[k];if(a.set(y,k+1),b&&d&&g>=d.first&&g<=d.last){let m=o.get(p);m?m.push(b):o.set(p,[b])}})}),o}function Ka(e,t,n){let r=new Map;for(let a of t){let o=W(a.name).name;r.set(o,(r.get(o)??0)+1)}return e.map(a=>{let o=t.find(s=>W(s.name).name===a.name),i=o?n.get(o.name):void 0;return i&&r.get(a.name)===1?{...a,start:a.start+i}:a})}function qa(e,t){let n=e.indexOf(":"),r=e.indexOf(":",n+1);if(n!==-1&&r!==-1){let a=e.slice(0,n),o=e.slice(n+1,r),i=e.slice(r+1);o==="i"||o==="f"?t[a]=+i:o==="Z"&&(t[a]=i)}}function le(e){let t={};for(let n of e)qa(n,t);return t}function ft(e){let{SN:t,SO:n,SR:r}=e.tags;return typeof t=="string"&&typeof n=="number"&&typeof r=="number"?{refName:t,start:n,rank:r}:void 0}var Fr=62,Za=60;function Ja(e){let t=[],n="+",r=0;function a(o){o>r&&t.push({id:e.slice(r,o),strand:n})}for(let o=0;o<e.length;o++){let i=e.charCodeAt(o);(i===Fr||i===Za)&&(a(o),n=i===Fr?"+":"-",r=o+1)}return a(e.length),t}function yt(e){let t={nodes:[],links:[],paths:[],walks:[],header:[],id:""};for(let n of e.split(`
|
|
2
|
-
`)){let r=n.endsWith("\r")?n.slice(0,-1):n;if(r.startsWith("H")){let[,...a]=r.split(" ");t.header.push(le(a))}else if(r.startsWith("S")){let[,a,...o]=r.split(" "),i,s,u,d=!1,f=o[0]??"*";/^\d+$/.test(f)?(i=+f,s=o[1]??"*",u=o.slice(2)):(d=!0,s=f,i=s==="*"?0:s.length,u=o.slice(1));let g=le(u);d&&"LN"in g&&(i=+g.LN),t.nodes.push({id:a,length:i,sequence:s,tags:g})}else if(r.startsWith("E")){let[,,a,o,,,,,i,...s]=r.split(" ");a&&o&&t.links.push({source:a.slice(0,-1),target:o.slice(0,-1),strand1:a.at(-1),strand2:o.at(-1),cigar:i??"*",tags:le(s)})}else if(r.startsWith("L")){let[,a,o,i,s,u,...d]=r.split(" ");a&&i&&s&&t.links.push({source:a,target:i,strand1:o,strand2:s,cigar:u??"*",tags:le(d)})}else if(r.startsWith("W")){let[,a,o,i,s,u,d,...f]=r.split(" ");a&&o&&i&&s&&u&&d&&t.walks.push({sample:a,haplotype:+o,contig:i,start:s==="*"?-1:+s,end:u==="*"?-1:+u,segments:Ja(d),tags:le(f)})}else if(r.startsWith("P")){let[,a,o,...i]=r.split(" ");a&&o&&t.paths.push({name:a,path:o,rest:i})}}return t}function Qa(e){let t=new Map,n=new Map;function r(o,i){t.has(o)||t.set(o,i)}function a(o,i){r(o,i),n.set(o,(n.get(o)??0)+1)}for(let o of e.links)r(o.source,o.strand1==="-"?"-":"+"),r(o.target,o.strand2==="-"?"-":"+");for(let o of e.paths)for(let i of o.path.split(","))a(i.slice(0,-1),i.endsWith("-")?"-":"+");for(let o of e.walks)for(let i of o.segments)a(i.id,i.strand==="-"?"-":"+");return{canonical:t,traversals:n}}function ei(e){return[...e.paths.map(t=>({...W(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 ti(e){let t=e.tags.SM;if(typeof t!="string")return;let n=t.split(",").map(r=>r.trim()).filter(Boolean);return n.length>0?n:void 0}var ge=e=>typeof e=="number"&&e>0?e:void 0;function ni({tags:e,length:t}){let n=ge(e.RC)??ge(e.FC)??ge(e.KC);return ge(e.dp)??ge(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function ri(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:ft(e),samples:ti(e)}}function Vr(e,t="Imported GFA"){let n=[],r=[],{canonical:a,traversals:o}=Qa(e),i=c=>`${c}${a.get(c)??"+"}`;for(let c of e.nodes){let y=ni(c)??Math.max(o.get(c.id)??1,1);n.push(ri(c,a.get(c.id)??"+",y))}for(let c of e.links)r.push({from:i(c.source),to:i(c.target),fromStrand:c.strand1==="-"?"-":"+",toStrand:c.strand2==="-"?"-":"+"});let s=[],u=new Map,d=(c,y)=>[c,y].sort().join("--");function f(c,y){for(let k=0;k<c.length-1;k++){let b=d(c[k],c[k+1]);u.has(b)||u.set(b,new Set),u.get(b).add(y)}}for(let c of e.paths){let y=c.path.split(",").map(k=>i(k.slice(0,-1)));s.push({name:c.name,nodeIds:y}),f(y,c.name)}for(let c of e.walks){let y=c.segments.map(b=>i(b.id)),k=`${c.sample}#${c.haplotype}#${c.contig}`;s.push({name:k,nodeIds:y,sample:c.sample,haplotype:c.haplotype,contig:c.contig}),f(y,k)}for(let c of r){let y=u.get(d(c.from,c.to));y&&y.size>0&&(c.pathIds=[...y])}let g=new Map(e.nodes.map(c=>[c.id,c.length])),p=e.paths.length>0||e.walks.length>0?Mn(ei(e),c=>g.get(c)??0):void 0;return{name:t,nodes:n,edges:r,paths:s.length>0?s:void 0,anchorPaths:p?.anchorPaths,pathVisits:p?.pathVisits,anchoredBy:n.some(c=>c.stable)?"tags":void 0}}function Dr(e,t){let n=e.nodes.filter(b=>P(b)&&(t[b.id]?.length??0)>0);if(n.length<2)return t;let r=n.map(b=>{let m=t[b.id],l=m[Math.floor(m.length/2)];return{x:l.x,y:l.y,r:b.stable.start+b.length/2,w:b.length}}),a=r.reduce((b,m)=>b+m.w,0),o=r.reduce((b,m)=>b+m.x*m.w,0)/a,i=r.reduce((b,m)=>b+m.y*m.w,0)/a,s=r.reduce((b,m)=>b+m.r*m.w,0)/a,u=0,d=0;for(let b of r)u+=b.w*(b.x-o)*(b.r-s),d+=b.w*(b.y-i)*(b.r-s);let f=-Math.atan2(d,u),g=Math.cos(f),p=Math.sin(f),c={};for(let[b,m]of Object.entries(t))c[b]=m.map(l=>{let x=l.x-o,M=l.y-i;return{x:o+g*x-p*M,y:i+p*x+g*M}});let y=0,k=0;for(let b of e.nodes)if(!P(b))for(let m of c[b.id]??[])m.y>i?y++:k++;if(k>y)for(let b of Object.values(c))for(let m of b)m.y=2*i-m.y;return c}var Hr=30;function oi(e,t){let{opts:n}=t,r=new Map(t.nodes.map(p=>[p.id,Me(n,p.length)])),a=p=>r.get(p)??n.minimumNodeLength,o=e.nodes.filter(P).sort((p,c)=>p.stable.start-c.stable.start),i=new Map,s=0;for(let p of o)i.set(p.id,{x:s,y:0}),s+=a(p.id)+n.edgeLength;let u=Ae(e),d=new Map(o.map(p=>[p.id,0])),f=o.map(p=>p.id);for(let p of f){let c=i.get(p),y=d.get(p)+1;for(let k of u.get(p)??[])d.has(k)||(d.set(k,y),i.set(k,{x:c.x+a(p)/2,y:Hr*y}),f.push(k))}let g=0;for(let p of e.nodes)i.has(p.id)||i.set(p.id,{x:g++*s/e.nodes.length,y:Hr*3});return i}function Or(e,t){let n=oi(e,t);return t.nodes.map(r=>({...r,...n.get(r.id)}))}function Wr(e,t,n={}){let r=Ln(Vr(yt(e),t),n.referencePath);if(r.nodes.length===0)throw new Error(`No graph segments in ${t}`);if(n.maxNodes!==void 0&&r.nodes.length>n.maxNodes)throw new Error(`Graph too large to draw: ${r.nodes.length.toLocaleString()} nodes (limit ${n.maxNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);return r}function ai(e,t,n){let r=e.nodes.some(P);return{graph:{nodes:r?Or(e,t):t.nodes,edges:e.edges},options:{quality:n.quality,linearLayout:n.linearLayout,...t.opts,...r?{rotateComponents:!1}:{}}}}function _r(e,t){let n=e.nodes.some(P);return`${t.quality}|${t.linearLayout}|${t.bubbleSpread}|${n}|${e.referencePath??""}`}async function jr(e,t,n){let r=un(t.bubbleSpread),a=wn(e),{result:o,duration:i}=await n(ai(a.graph,tt(a.graph,r),t)),s=tt(e,r),u=new Map(s.nodes.map(f=>[f.id,Me(s.opts,f.length)])),d=kn(o.nodePositions,a.runs,f=>u.get(f)??0);return{result:{...o,nodePositions:e.nodes.some(P)?Dr(e,d):d},duration:i}}function ii(e){let t=1/0,n=1/0,r=-1/0,a=-1/0;for(let o of Object.values(e))for(let i of o)t=Math.min(t,i.x),n=Math.min(n,i.y),r=Math.max(r,i.x),a=Math.max(a,i.y);return{minX:t,minY:n,maxX:r,maxY:a}}var D=40,si=1e-6,di=100;function he(e){return Math.max(si,Math.min(di,e))}function wt(e,t,n,r=D){let a=t-e.h*n;return r-e.minY*n+Math.max(0,a)/2}function $r(e,t,n,r,{minScale:a=0,padLeft:o=D,padTop:i=D}={}){let s=t-o-D,u=n-i-D;if(s<=0||u<=0||!(e.w>0||!r&&e.h>0))return;let d=e.w>0?s/e.w:1/0,f=e.h>0?u/e.h:1/0,g=he(Math.max(a,r?d:Math.min(d,f))),p=s-e.w*g;return{scale:g,translateX:o-e.minX*g+Math.max(0,p)/2,translateY:wt(e,u,r?1:g,i)}}function zr(e,t={}){let{minX:n,minY:r,maxX:a,maxY:o}=ii(e.nodePositions),{region:i}=t;e.referenceAxis&&i&&i.end>i.start&&(n=i.start,a=i.end);let s=t.extent??e.extent;return s&&(n=Math.min(n,s.minX??n),r=Math.min(r,s.minY??r),a=Math.max(a,s.maxX??a),o=Math.max(o,s.maxY??o)),{minX:n,minY:r,w:a-n,h:o-r}}function ci(e,t,n){let r=W(e.name).name,a=new Map,o=[],i=()=>({a:-1/0,b:1/0,detour:[],bp:0}),s=[i()];for(let u of e.nodeIds){let d=t.get(u);if(!d)continue;let f=a.get(d.name)??0;a.set(d.name,f+1);let g=n.get(`${r} ${d.name}`)?.[f]??Tn(d),p=s.at(-1),c=o.at(-1);if(P(d)){let y=d.stable.start,k=y+d.length,b=g!==(d.stable.strand??"+"),m=c!==void 0&&p.detour.length===0;m&&!c.inverted&&!b&&c.end===y?c.end=k:m&&c.inverted&&b&&c.start===k?c.start=y:(o.push({start:y,end:k,inverted:b}),s.push(i()))}else p.detour.push({node:d,strand:g}),p.bp+=d.length}return o.forEach((u,d)=>{s[d].b=u.start,s[d+1].a=u.end}),{path:e,runs:o,gaps:s}}function kt(e,t){return Number.isFinite(e.a)&&Number.isFinite(e.b)&&e.b>=e.a&&Math.max(e.b-e.a,e.bp)<t}function Xr(e,t,n){let r=0,a=e.length;for(;r<a;){let o=r+a>>1;e[o]<=t?r=o+1:a=o}return r<e.length&&e[r]<n}function ui(e){let t=new Map;for(let n=1;n<e.length;n++){let r=e[n-1],a=e[n],o=r.stable.start+r.length;o!==a.stable.start&&(t.set(o,"reference-gap"),t.set(a.stable.start,"reference-gap"))}return t}function pi(e,t,n){let r=(a,o)=>{Number.isFinite(a)&&!n.has(a)&&n.set(a,o)};for(let{runs:a,gaps:o}of e){let i=a[0],s=a.at(-1);i&&s&&(r(i.start,"walk-end"),r(s.end,"walk-end"));for(let u of a)u.inverted&&u.end-u.start>=t&&(r(u.start,"inversion"),r(u.end,"inversion"));for(let u of o)u.b<u.a?(r(u.a,"backward"),r(u.b,"backward")):kt(u,t)||(r(u.a,"variant"),r(u.b,"variant"))}for(let a=!0;a;){a=!1;let o=[...n.keys()].sort((s,u)=>s-u),i=e.flatMap(({runs:s,gaps:u})=>[...u.filter(d=>kt(d,t)).map(d=>[d.a,d.b]),...s.filter(d=>d.inverted&&d.end-d.start<t).map(d=>[d.start,d.end])]);for(let[s,u]of i)Xr(o,s,u)&&(a||=!n.has(s)||!n.has(u),r(s,"overlap"),r(u,"overlap"))}return n}function mi(e,t){let n=[],r=[],a=()=>{let o=r[0],i=r.at(-1);if(o&&i){let s=o.stable.start,u=i.stable.start+i.length,d=`${s}-${u}`;n.push({node:{id:`${d}+`,name:d,length:u-s,depth:0,stable:{refName:o.stable.refName,start:s,rank:0,strand:"+"}},members:r})}r=[]};for(let o of e)t.has(o.stable.start)&&a(),r.push(o);return a(),n}function Yr(e,t){let n=e.nodes.filter(P).sort((h,R)=>h.stable.start-R.stable.start),r=e.paths??[];if(n.length===0||r.length===0)return;let a=new Map(e.nodes.map(h=>[h.id,h])),o=An(e),i=r.map(h=>ci(h,a,o)),s=pi(i,t,ui(n)),u=[...s.keys()].sort((h,R)=>h-R),d=mi(n,s),f=d.map(h=>h.node.stable.start),g=h=>{let R=0,T=f.length-1;for(;R<T;){let N=R+T+1>>1;f[N]<=h?R=N:T=N-1}return R},p=new Map,c=new Map;for(let h of d){p.set(h.node.id,h.members.map(R=>R.id));for(let R of h.members)c.set(R.id,h.node.id)}let y=new Map,k=h=>{let R=`${h.a} ${h.b} ${h.detour.map(N=>N.node.id+N.strand).join(",")}`,T=y.get(R);if(!T){let N=`r${y.size}`;T={id:`${N}+`,name:N,length:h.bp,depth:0,stable:{refName:n[0].stable.refName,start:Number.isFinite(h.a)?h.a:h.b,rank:1,strand:"+"}},y.set(R,T),p.set(T.id,h.detour.map(v=>v.node.id));for(let v of h.detour)c.has(v.node.id)||c.set(v.node.id,T.id)}return T},b=new Map,m=[],l=new Map,x=new Map,M=new Map;for(let{path:h,runs:R,gaps:T}of i){let N=[],v=[],C=!1,Y=(G,F)=>{let V=N.at(-1);C&&V?.node===G&&V.strand===F||N.push({node:G,strand:F}),C=!0},H=G=>{C=!1,G.detour.length>0&&(Y(k(G),"+"),C=!1)},U=G=>{(G.bp>0||G.b>G.a)&&v.push({start:G.a,end:G.b,bp:G.bp});let F=d[g(G.b>G.a?G.a:G.a-1)];for(let V of G.detour)c.has(V.node.id)||(c.set(V.node.id,F.node.id),p.get(F.node.id).push(V.node.id))};R.forEach((G,F)=>{let V=T[F];kt(V,t)&&!Xr(u,V.a,V.b)?U(V):H(V);let ie=g(G.start),q=g(G.end-1),xe=G.end-G.start<t;if(G.inverted&&!xe){C=!1;for(let $=q;$>=ie;$--)Y(d[$].node,"-");C=!1}else{G.inverted&&v.push({start:G.start,end:G.end,bp:G.end-G.start,inverted:!0});for(let $=ie;$<=q;$++)Y(d[$].node,"+")}}),H(T.at(-1));let K=W(h.name).name,et=0;N.forEach(({node:G,strand:F},V)=>{M.set(G.id,(M.get(G.id)??0)+1);let ie=l.get(G.name)??[];ie.push({path:K,sample:h.sample??K,start:et,strand:F}),l.set(G.name,ie),et+=G.length;let q=N[V+1];if(q){let xe=`${G.id}${F} ${q.node.id}${q.strand}`,$=x.get(xe);$?$.pathIds.push(h.name):x.set(xe,{from:G.id,to:q.node.id,fromStrand:F,toStrand:q.strand,pathIds:[h.name]})}}),m.push({...h,nodeIds:N.map(G=>G.node.id)}),b.set(h.name,v)}let L=[...d.map(h=>h.node),...y.values()].filter(h=>M.has(h.id)).map(h=>({...h,depth:M.get(h.id)}));return{graph:{...e,nodes:L,edges:[...x.values()],paths:m,pathVisits:l,reads:void 0},members:p,coarseOf:c,deviations:b,cuts:s}}var li=e=>e.bp1>e.bp0;function Ur(e,t){let n=e.filter(li);if(n.length===0){let o=e[0];return o?[{tx:o.x0,sx:t(o.bp0)}]:[]}let r=n.map(o=>({c:o,s0:t(o.bp0),s1:t(o.bp1),trimLeft:0,trimRight:0}));for(let o=0;o+1<r.length;o++){let i=r[o],s=r[o+1],d=Math.min(s.c.x0-i.c.x1,24)-(s.s0-i.s1);if(d>0){let f=(i.s1-i.s0)/2,g=(s.s1-s.s0)/2,p=Math.min(d/2,f),c=Math.min(d-p,g);p=Math.min(d-c,f),i.trimRight=p,s.trimLeft=c}}let a=[];for(let{c:o,s0:i,s1:s,trimLeft:u,trimRight:d}of r)a.push({tx:o.x0,sx:i+u},{tx:o.x1,sx:s-d});return a}function Kr(e,t){let n=e.length;if(n===0)return t;let r=e[0],a=e[n-1];if(t<=r.tx)return r.sx+(t-r.tx);if(t>=a.tx)return a.sx+(t-a.tx);let o=0,i=n-1;for(;i-o>1;){let f=o+i>>1;e[f].tx<=t?o=f:i=f}let s=e[o],u=e[i],d=u.tx-s.tx;return d>0?s.sx+(t-s.tx)/d*(u.sx-s.sx):s.sx}var gi=.05,Fe=9;function hi(e,t){let{minY:n,maxY:r}=e.layout.bounds,a=r-n;return e.columns&&a>0?Math.max(gi,Math.min(1,t/a)):1}function qr(e,t){let{scaleX:n,translateX:r,translateY:a}=t,o=t.scaleY*hi(e,t.usableHeight),i=u=>(u-e.yOffset)*o+a,{columns:s}=e;if(s){let u=Ur(s,d=>d*n+r);return{x:d=>Kr(u,d),y:i,yScale:o}}return{x:u=>u*n+r,y:i,yScale:o}}function Zr(e,{x:t,y:n},r,a){let o=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-Fe)<=r&&r<=t(i.x+i.pixelWidth+Fe)&&n(i.y-Fe)<=a&&a<=n(i.y+i.contentHeight+Fe)&&(o=i.name)}),o}function Ve(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function Jr(e,t,n,r){return{minX:-e.translateX/t.scaleX,minY:-e.translateY/t.scaleY,maxX:(n-e.translateX)/t.scaleX,maxY:(r-e.translateY)/t.scaleY}}function Qr(e,t){let n=(e.maxX-e.minX)*t,r=(e.maxY-e.minY)*t;return{minX:e.minX-n,minY:e.minY-r,maxX:e.maxX+n,maxY:e.maxY+r}}function eo(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}function to(e,t,n,r,a){let o=he(e.scale*t),i=o/e.scale;return{scale:o,translateX:n-(n-e.translateX)*i,translateY:a?e.translateY:r-(r-e.translateY)*i}}function no(e){return e.referencePath?e.paths?.find(t=>W(t.name).name===e.referencePath):void 0}function bi(e,t){let n=e.paths?.find(g=>g.name===t);if(!n)return;let r=new Map(e.nodes.map(g=>[g.id,g])),a=new Map;e.edges.forEach((g,p)=>{a.set(`${g.from}>${g.to}`,p)});let o=new Set;for(let g=1;g<n.nodeIds.length;g++){let p=n.nodeIds[g-1],c=n.nodeIds[g],y=a.get(`${p}>${c}`)??a.get(`${c}>${p}`);y!==void 0&&o.add(y)}let i=g=>r.get(g)?.length??0,s=n.nodeIds.reduce((g,p)=>g+i(p),0),u=new Map,d=0;for(let g of n.nodeIds){let p=i(g);u.has(g)||u.set(g,s>0?(d+p/2)/s:0),d+=p}let f=no(e);return{name:t,reference:f===n,nodeIds:new Set(n.nodeIds),edgeIndexes:o,progress:u,steps:n.nodeIds.length,bp:s,referenceBp:f&&f!==n?f.nodeIds.reduce((g,p)=>g+i(p),0):void 0}}function fi(e,t,{field:n,scheme:r},a){let o=new Map,i=new Map(e.nodes.map(c=>[c.id,c])),s=W(t.name).name,u=no(e),d=u?W(u.name).name:void 0,f=e.paths.find(c=>c.name===t.name),g=new Map;for(let c of f.nodeIds)g.set(c,(g.get(c)??0)+1);let p=(c,y)=>e.pathVisits?.get(c)?.find(k=>k.path===y)?.strand;for(let[c,y]of t.progress){let k=i.get(c),b;if(n==="progress")b=y;else if(n==="visits")b=(Math.min(g.get(c)??1,4)-1)/3;else if(n==="reference"){let m=a?.midpoints.get(c);b=a&&m!==void 0&&!(k?.stable&&k.stable.rank>0)?(m-a.start)/a.span:void 0}else if(k){let m=p(k.name,s),l=p(k.name,d);b=m&&l?m===l?dt.same:dt.reversed:void 0}o.set(c,b===void 0?tr:er(r,b))}return o}function ro(e,t,n){let r=new Set,a=t.filter(s=>!r.has(s.walk)&&r.add(s.walk)).flatMap(s=>{let u=bi(e,s.walk);return u?[{walk:u,layer:s}]:[]}).sort((s,u)=>Number(u.walk.reference)-Number(s.walk.reference));if(a.length===0)return;let o=0,i=a.map(({walk:s,layer:u})=>{let d=Qn(u,s.reference,s.reference?0:o++);return{...s,encoding:d,colors:fi(e,s,d,n)}});return{walks:i,nodeIds:new Set(i.flatMap(s=>[...s.nodeIds])),edgeIndexes:new Set(i.flatMap(s=>[...s.edgeIndexes])),names:new Set(i.map(s=>s.name))}}var te=S(_(),1),Fo=S(dn(),1),A=S(se(),1),Vo=S(Ca(),1),w=S(z(),1),Do=S(ao(),1),Ho=S(Va(),1),B=S(sn(),1);var xt=new Set(["Gff3TabixAdapter","Gff3Adapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),yi=/gene|refseq|gencode|ensembl|annotation/i;function io(e,t){if(t)return e.find(r=>r.trackId===t);let n=e.filter(r=>xt.has(r.adapterType));return n.find(r=>yi.test(`${r.trackId} ${r.name??""}`))??n[0]}function j(e,t){return typeof e.get=="function"?e.get(t):e[t]}function so(e,t){j(e,"type")==="exon"&&t.push({start:j(e,"start"),end:j(e,"end")});let r=j(e,"subfeatures");for(let a of r??[])so(a,t)}function wi(e){let t=[...e].sort((r,a)=>r.start-a.start),n=[];for(let r of t){let a=n.at(-1);a&&r.start<=a.end?a.end=Math.max(a.end,r.end):n.push({...r})}return n}function co(e){let t=[];for(let n of e){let r=j(n,"gene_name")??j(n,"name")??j(n,"id"),a=j(n,"start"),o=j(n,"end");if(!r||!(o>a))continue;let i=[];so(n,i),t.push({name:r,refName:j(n,"refName"),start:a,end:o,strand:j(n,"strand")??0,exons:i.length?wi(i):[{start:a,end:o}]})}return t}function uo(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 po(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function De(e,t){let n=po(e.dynamicBlocks.contentBlocks.filter(o=>o.refName===t.refName&&o.assemblyName===t.assemblyName)),{bpPerPx:r}=e;if(!n||!(r>0))return;let a=n.offsetPx-e.offsetPx;return n.reversed?{scale:-1/r,translateX:a+n.end/r}:{scale:1/r,translateX:a-n.start/r}}function He(e){let t=po(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 St(e,t,n=!0){let r=e.end-e.start,a=n?Math.max(0,Math.min(e.span,(t-r)/2)):0,o=Math.max(e.regionStart,Math.floor(e.start-a)),i=Math.min(e.regionEnd,Math.ceil(e.end+a)),s=i-o-t;return s>0&&(o+=Math.floor(s/2),i-=Math.ceil(s/2)),{refName:e.refName,assemblyName:e.assemblyName,start:o,end:i}}function mo(e,t,n=!0){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;if(n)return e.start<=t.start+1&&t.end<=e.end+1;let r=St(t,1/0,!1);return Math.abs(e.start-r.start)<1&&Math.abs(e.end-r.end)<1}var Q=S(z(),1);function lo(e){return t=>e.includes(t)?t:void 0}function Mt(e){return Q.types.snapshotProcessor(Q.types.maybe(Q.types.enumeration(e)),{preProcessor:lo(e)})}function Rt(e,t){return Q.types.snapshotProcessor(Q.types.optional(Q.types.enumeration(e),t),{preProcessor:lo(e)})}var Tt=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),ki=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function go(e,t){return t?e.find(r=>r.trackId===t):e.filter(r=>Tt.has(r.adapterType)).find(r=>ki.test(`${r.trackId} ${r.name??""}`))}function be(e,t){return typeof e.get=="function"?e.get(t):e[t]}var ho=/^\w+=[^;]*(;\w+=[^;]*)*$/;function xi(e){let t=be(e,"name");if(!(typeof t!="string"||!ho.test(t)))return Object.fromEntries(t.split(";").map(n=>{let r=n.indexOf("=");return[n.slice(0,r),n.slice(r+1)]}))}function X(e,t){let n=be(e,t);return n!==void 0?n:be(e,"INFO")?.[t]??xi(e)?.[t]}var bo=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],Si=["RUL","period","PERIOD","consensusSize","unit","unitLength"],Mi=["TRID","REPID","VARID","ID","name","id"];function Oe(e,t){for(let n of t){let r=X(e,n),a=String((Array.isArray(r)?r[0]:r)??"").split(",")[0].trim();if(a!==""&&a!==".")return a}}var fo=/^[ACGTURYSWKMBDHVN]+$/i;function Ri(e){let t=Number(Oe(e,Si));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=Oe(e,bo);return n&&fo.test(n)?n.length:void 0}function ee(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let r=n===""||n===null||n===void 0?NaN:Number(n);return Number.isFinite(r)?r:void 0})}function Gt(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let r=String(n??"").trim();return r===""||r==="."?void 0:r})}var Lt="<CNV:TR>";function Li(e){let t=Gt(be(e,"ALT"));if(!t.includes(Lt))return;let n=ee(X(e,"RN")),r=Gt(X(e,"RUS")),a=ee(X(e,"RUL")),o=ee(X(e,"RUC")),i=ee(X(e,"RB")),s=0;return t.map((u,d)=>{let f=n[d]??(u===Lt?1:0),g=0,p=0;for(let c=0;c<f;c++,s++){let y=r[s],k=a[s]??(y&&fo.test(y)?y.length:void 0),b=o[s],m=i[s]??(k&&b!==void 0?Math.round(k*b):void 0);m!==void 0&&(g+=m,p++)}return u===Lt&&f>0&&p===f?g:void 0})}function Gi(e,t,n){let r=e?.includes("|");return(e??"").split(/[/|]/).flatMap((a,o)=>{let i=Number(a),s=i>0?t[i-1]:n;return!Number.isInteger(i)||s===void 0?[]:[{bp:s,...r?{haplotype:o+1}:{}}]})}function Ti(e,t,n){let r=be(e,"samples"),a={};for(let[o,i]of Object.entries(r??{})){let s=ee(i.SD),u=ee(i.AL).flatMap((f,g)=>f!==void 0&&f>0?[s[g]===void 0?{bp:f}:{bp:f,spanningReads:s[g]}]:[]),d=u.length>0||!t?u:Gi(Gt(i.GT)[0],t,n);d.length>0&&(a[o]=d)}return Object.keys(a).length>0?a:void 0}function Ai(e,t){let n=X(e,"start"),r=X(e,"end"),a=ee(X(e,"SVLEN"))[0];return t&&a!==void 0?{start:n+1,end:n+1+a}:{start:n,end:r}}function yo(e){let t=[];for(let n of e){let r=Li(n),{start:a,end:o}=Ai(n,r!==void 0),i=Ri(n);if(!(o>a)||i===void 0)continue;let s=X(n,"refName"),u=Oe(n,bo),d=Oe(n,Mi);t.push({key:`${s}:${a}-${o}`,name:(d&&!ho.test(d)?d:void 0)??(u&&u.length<=12?`(${u})n`:`${s}:${(a+1).toLocaleString()}-${o.toLocaleString()}`),refName:s,start:a,end:o,unit:i,motif:u,calls:Ti(n,r,o-a)})}return t.sort((n,r)=>n.start-r.start)}function We(e){return typeof e=="object"&&e!==null}function Ni(e){return We(e)&&typeof e.get=="function"}function Pi(e){let t=Ni(e)?e.get("name"):We(e)?e.name:void 0;return typeof t=="string"?t:void 0}function wo(e){let t;if(We(e)&&We(e.hoverPosition)){let{refName:n,coord:r,coord0:a,assemblyName:o}=e.hoverPosition;typeof n=="string"&&typeof r=="number"&&(t={refName:n,coord:typeof a=="number"?a:r-1,assemblyName:typeof o=="string"?o:void 0,featureName:Pi(e.hoverFeature)})}return t}function ko(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function xo({hover:e,nodes:t}){let n,r;for(let a of t)a.name===e.featureName?n=a.id:r===void 0&&P(a)&&e.coord>=a.stable.start&&e.coord<a.stable.start+a.length&&(r=a.id);return n??r??null}var At=S(_(),1);function So(e){return typeof e=="object"&&e!==null}function Ii(e){return So(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function fe(e){return e.flatMap(t=>So(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function ye({views:e,connectedViewId:t,assemblyName:n}){let r=fe(e).filter(o=>Ii(o)).filter(o=>o.assemblyNames.includes(n));return r.find(o=>o.id===t)??(r.length===1?r[0]:void 0)}function Ro(e,t,n){n.catch(r=>{console.error(`[GraphGenomeView] ${t}`,r),e.notifyError?.(`${t}: ${r}`,r)})}var vi=1e3;function Nt(e,t=vi){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 Lo(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 Go({session:e,location:t,assembly:n,connectedViewId:r,tracks:a=[]}){let o=ye({views:e.views,connectedViewId:r,assemblyName:n}),i;return o?(Ro(e,`Could not show ${n} ${ce(t)}`,Promise.resolve(o.navToLocString(ve(t),n))),i=o.id):i=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${ce(t)}`,init:{assembly:n,loc:ve(t),tracks:a}}).id,i}function To({session:e,location:t,assembly:n,connectedViewId:r}){let a=ye({views:e.views,connectedViewId:r,assemblyName:n});return a?.addToHighlights?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),a!==void 0}function Mo(e,t){if(t===void 0)return[];let n=e.tracks.find(a=>(0,At.readConfObject)(a,"trackId")===t),r=n?(0,At.readConfObject)(n,"assemblyNames"):[];return Array.isArray(r)?r.filter(a=>typeof a=="string"):[]}function Ao({session:e,contributors:t,trackId:n,graphTrackId:r}){let a=Mo(e,r),o=Mo(e,n),i=t.filter(d=>o.includes(d.sample)),s=i.length>=2?i:t,u={init:{views:s.map(d=>({assembly:d.sample,loc:ve(d),...r!==void 0&&a.includes(d.sample)?{tracks:[r]}:{}})),tracks:n?s.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?Ro(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",u)):e.addView("LinearSyntenyView",u)}var _e=S(_(),1),Ci="FeatureTrack";function No({session:e,assemblyName:t,first:n}){let r=[];for(let a of e.tracks){let o=(0,_e.readConfObject)(a,"type"),i=(0,_e.readConfObject)(a,"assemblyNames"),s=(0,_e.readConfObject)(a,"trackId");o===Ci&&Array.isArray(i)&&i.includes(t)&&typeof s=="string"&&s!==n&&r.push(s)}return n?[n,...r]:r}var je=S(_(),1),Po=S(Ba(),1),$e=S(z(),1),Bi="SyntenyTrack",Ei="Synteny adapters";function Fi(e){if((0,je.readConfObject)(e,"type")===Bi)return!0;let t=e.adapter?.type;if(typeof t!="string"||!(0,$e.isStateTreeNode)(e))return!1;let{pluginManager:n}=(0,$e.getEnv)(e);return!!n?.hasAdapterType(t)&&n.getAdapterType(t).adapterMetadata?.category===Ei}function Io(e,t){let n=new Set(t),r=[];for(let a of e.tracks){let o=(0,je.readConfObject)(a,"assemblyNames"),i=(0,je.readConfObject)(a,"trackId");if(Fi(a)&&typeof i=="string"&&Array.isArray(o)){let s=o.filter(u=>n.has(u)).length;s>=2&&r.push({trackId:i,name:(0,Po.getTrackName)(a,e),coverage:s})}}return r.sort((a,o)=>o.coverage-a.coverage)}var Di=600,Pt=160,Hi=5,vo=new Set(["tubemap","tubemapref"]),Oi=[{bp:0,label:"None"},{bp:3,label:"Under 3 bp"},{bp:10,label:"Under 10 bp"},{bp:50,label:"Under 50 bp, leaving structural variants"},{bp:1e3,label:"Under 1 kb"}],Co=".segs.bed.gz";function Wi(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(Co)?n.slice(0,-Co.length):void 0}var Bo=1.4,_i=1.6,ji=150,$i=1,zi={nodeStrokes:[],nodeStrokeRuns:new Map,arrows:[],arrowRuns:new Map,edgeCurves:[],edgeCurveRuns:new Map};function we(...e){}var Xe=5e6;function ne(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var Xi=2e4;function Eo(e){return e.builtViewport!==void 0&&e.paintedViewport===e.builtViewport&&e.builtViewport.viewportDirty===e.viewportDirty&&!e.viewportRebuildPending}function It(e){return Jr(e,e.axisScale,e.paneWidth,e.canvasHeight)}var ze=new WeakMap,Yi=4;function Ui(e){let t=ze.get(e);return t||(t=new Map,ze.set(e,t)),t}function Ki(e,t){let n=ze.get(e);n&&e!==t&&ze.set(t,n)}function qi(e,t,n){e.size>=Yi&&e.delete(e.keys().next().value),e.set(t,n)}function Ye(){return w.types.compose("GraphPane",(0,Do.RenderLifecycleMixin)(),w.types.model({layoutQuality:w.types.optional(w.types.number,2),linearLayout:w.types.optional(w.types.boolean,!1),layoutMode:Mt(Pe),colorScheme:Mt(Te),bubbleSpread:Rt(cn,"auto"),nodeWidth:Rt(In,"depth"),showBubbles:w.types.optional(w.types.boolean,!1),showDeletionEdges:w.types.optional(w.types.boolean,!1),showGenes:w.types.optional(w.types.boolean,!0),showReferenceStrip:w.types.optional(w.types.boolean,!0),tubeMapFold:w.types.optional(w.types.number,0),geneTrackId:w.types.optional(w.types.string,""),repeatTrackId:w.types.optional(w.types.string,""),repeatKey:w.types.optional(w.types.string,""),walkRowSamples:w.types.maybe(w.types.frozen()),walkLayers:w.types.optional(w.types.frozen(),[]),referencePath:w.types.optional(w.types.string,""),showPerf:w.types.optional(w.types.boolean,!1),contigThickness:w.types.optional(w.types.number,6),connectorThickness:w.types.optional(w.types.number,2),darkMode:w.types.optional(w.types.boolean,!1),scale:w.types.optional(w.types.number,1),translateX:w.types.optional(w.types.number,0),translateY:w.types.optional(w.types.number,0),drawPaths:w.types.optional(w.types.boolean,!1),paneHeight:w.types.maybe(w.types.number),maxGraphNodes:w.types.optional(w.types.number,Xi),colorDomain:w.types.maybe(w.types.frozen()),connectedViewId:w.types.maybe(w.types.string)})).volatile(()=>({graph:void 0,graphRegion:void 0,loadedReferencePath:void 0,layoutResult:void 0,legendSize:{width:0,height:0},indexBubbles:void 0,geneFeatures:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredBubble:null,pointerInPane:!1,hoveredEdge:null,selectedNode:null,viewportDirty:0,positionsVersion:0,geometryVersion:0,builtViewport:void 0,paintedViewport:void 0,draggingNode:null,isPanning:!1,viewportOwner:"fit",viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,readsShown:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0,viewportRebuildPending:!1})).views(e=>({get defaultLayoutMode(){return"force"},get defaultColorScheme(){return"auto"},get hasPendingSource(){return!1},get canRetryLoad(){return!1},get sourceTrack(){try{return(0,A.getContainingTrack)(e).configuration}catch{return}}})).views(e=>({get chosenLayoutMode(){return e.layoutMode??e.defaultLayoutMode},get chosenColorScheme(){return e.colorScheme??e.defaultColorScheme}})).views(e=>({get paneWidth(){return(0,A.getContainingView)(e).width},get drawnGraph(){return e.layoutResult?.tubeMap?.coarse?.graph??e.graph}})).views(e=>({get nodeById(){if(e.drawnGraph){let t=new Map;for(let n of e.drawnGraph.nodes)t.set(n.id,n);return t}},get nodeLengths(){let t=new Map;for(let n of e.drawnGraph?.nodes??[])t.set(n.id,n.length);return t},get nodeCount(){return e.graph?.nodes.length??0},get edgeCount(){return e.graph?.edges.length??0},get pathCount(){return e.graph?.paths?.length??0},get hasGraph(){return e.graph!==void 0},get geometryPainted(){return Eo(e)},get showLoading(){return e.error===void 0&&(e.isLoading||e.hasPendingSource||e.graph!==void 0&&!Eo(e))},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?Pn(e.chosenLayoutMode,e.graph):!1},get canAnchorLayout(){return e.graph?.nodes.some(t=>t.stable?.rank===0)??!1},get anchorPaths(){return e.graph?.anchorPaths??[]},get pathLegend(){let t=e.graph?.paths,n=e.layoutResult?.tubeMap;return(e.drawPaths||n)&&t&&at(t.length)?it(t,n?.pathColors):[]},get walkChoices(){let t=e.graph?.paths;return t?.length?it(t):[]},get effectiveDrawPaths(){return e.drawPaths&&at(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get rampDomain(){return e.colorDomain??e.graphRegion},get walkLift(){let{graph:t}=e;return t&&e.walkLayers.length>0?ro(t,e.walkLayers,st(t,this.rampDomain)):void 0},get effectiveColorScheme(){return fn(e.chosenColorScheme,e.graph)},get nodePositions(){return e.layoutResult?.nodePositions},get labelsNodeSizes(){return!e.layoutResult?.tubeMap},get rowLabels(){return e.layoutResult?.rowLabels??[]},get alleleDeletions(){return e.layoutResult?.alleleDeletions??[]},get pixelRows(){return e.layoutResult?.pixelRows??!1},get zoomPercent(){return`${(e.scale*100).toFixed(1)}%`},get isDefaultViewport(){return e.scale===1&&e.translateX===0&&e.translateY===0}})).views(e=>({get poppedFrom(){return e.popStack.at(-1)},get derivedBubbles(){return e.graph?vr(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get sourceAdapter(){let t=e.sourceTrack;return t?(0,te.readConfObject)(t,"adapter"):void 0},get sourceTrackId(){let t=e.sourceTrack;return t?(0,te.readConfObject)(t,"trackId"):void 0},get assemblyTrackChoices(){let t=e.graphRegion;return t?(0,A.getSession)(e).tracks.filter(n=>(0,te.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,te.readConfObject)(n,"name"),adapterType:(0,te.readConfObject)(n,"adapter").type})):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>xt.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>Tt.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return go(e.repeatTrackChoices,e.repeatTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)},get backbone(){return e.graph?Qt(e.graph):void 0},assemblySpellings(t){let{assemblyManager:n}=(0,A.getSession)(e),r=n.has(t)?n.get(t):void 0,a=e.sourceAdapter?.assemblyNameToPanSN??{},o=[t,...r?[r.name,...r.aliases]:[]];return{name:t,aliases:[...o,...o.flatMap(i=>a[i]??[])]}},get drawsLoadedReference(){let t=e.graph;return t?.anchoredBy==="tags"||t?.referencePath!==void 0&&t.referencePath===e.loadedReferencePath}})).views(e=>({get geneAssembly(){let t=e.graphRegion;return t?e.assemblySpellings(t.assemblyName):void 0}})).views(e=>({get backboneGenes(){let{backbone:t,geneAssembly:n,geneFeatures:r}=e,a=e.drawsLoadedReference||n!==void 0&&en(t,[n])!==void 0;return t&&r&&a?nn(r,t):void 0}})).views(e=>({get nodeNeighbors(){return e.drawnGraph?Ae(e.drawnGraph):void 0},get nodeInk(){return vn(e.drawnGraph,e.nodeById,e.contigThickness,e.nodeWidth)},get deletions(){return e.graph&&e.chosenLayoutMode!=="walkrows"&&!e.layoutResult?.tubeMap?yn(e.graph):[]},get walkRowBars(){if(e.chosenLayoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?ot(e.graph,t,t.unit):ot(e.graph,e.graphRegion);if(!n)return;let r=e.walkRowSamples,a=r?n.rows.filter(s=>r.includes(s.sample)).sort((s,u)=>r.indexOf(s.sample)-r.indexOf(u.sample)||s.label.localeCompare(u.label)):n.rows,[o,...i]=nr([n.reference,...a],t?.calls);return{...n,reference:o,rows:i}},get drawnRowLabels(){let t=this.walkRowBars;return t?[t.reference,...t.rows].map((n,r)=>({label:n.label,y:r*20})):e.rowLabels},get fitPadLeft(){return Math.max(D,...this.drawnRowLabels.map(t=>xn(t.label,0).x1+6))},get genePins(){we(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&e.chosenLayoutMode!=="walkrows"&&!e.layoutResult?.tubeMap&&e.graph&&e.backboneGenes&&t?Br(e.graph,e.backboneGenes,t):[]},get bubbleHalos(){we(e.positionsVersion);let t=e.layoutResult?.nodePositions;if(!e.showBubbles||e.chosenLayoutMode==="walkrows"||e.layoutResult?.tubeMap||!e.graph||!t)return[];let n=new Map(e.walkChoices.map(r=>[r.name,r.label]));return Ir(e.graph,e.bubbles,t,r=>n.get(r)??r,e.repeatArrays)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.graph&&!e.layoutResult?.tubeMap?st(e.graph,e.rampDomain):void 0},get assemblyNames(){let t=e.graphRegion;return t?[t.assemblyName]:[]},get scaleX(){return Ve(e.scale,e.pixelRows).scaleX},get scaleY(){return Ve(e.scale,e.pixelRows).scaleY},get axisScale(){return Ve(e.scale,e.pixelRows)},get layoutBounds(){let t=e.layoutResult,n=this.walkRowBars;return t?zr(t,{region:e.popStack.length===0?e.graphRegion:void 0,extent:n&&t.extent?Gn(n):void 0}):void 0}})).views(e=>({get geneTrack(){return io(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},nodeSpan(t){let{nodeById:n,nodeNeighbors:r}=e;return n&&r?Ne({nodeId:t,nodeById:n,neighbors:r}):void 0}})).views(e=>({get hoveredSpan(){let t=e.hoveredNode,n=e.hoveredBubble;return t!==null?e.nodeSpan(t):n?{start:n.start,end:n.end}:void 0}})).views(e=>({get hoverHighlight(){let t=e.graphRegion,n=e.hoveredSpan;return t&&n?{refName:t.refName,assemblyName:t.assemblyName,...n}:void 0}})).views(e=>({get contributingAssemblies(){let t=e.graph,n=t?qt(t):[];return t?rr(t,{maxGap:n.length>0?Jt(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,A.getSession)(e),n=e.sourceAdapter?.assemblyNameToPanSN,r=new Map(Object.entries(n??{}).map(([o,i])=>[i,o])),a=o=>o!==void 0&&t.has(o)?t.get(o)?.name??o:void 0;return o=>a(r.get(o))??a(o)}})).views(e=>({get launchableAssemblies(){return ar(Lo(e.contributingAssemblies,e.graphRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.graphRegion;return t!==void 0&&ye({views:[...(0,A.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),r=n?Ie(n):void 0,a=r?or(e.assemblyResolver,r):void 0,o=e.graphRegion,i=e.nodeById,s=e.nodeNeighbors,u=o&&i&&s?Ne({nodeId:t,nodeById:i,neighbors:s}):void 0,d=o&&u?{sample:o.assemblyName,haplotype:void 0,refName:o.refName,...u}:void 0;return{own:r&&a?{location:Nt(r),assembly:a}:void 0,reference:o&&d?{location:Nt(d),assembly:o.assemblyName}:void 0,highlight:o&&d?{location:d,assembly:o.assemblyName}:void 0}}})).views(e=>({get host(){let t;try{t=(0,A.getContainingView)(e)}catch{return}return uo(t)?t:void 0}})).views(e=>({get xIsReferenceBp(){return e.layoutResult?.referenceAxis===!0&&Z(e.chosenLayoutMode).cutMargins}})).views(e=>({get hostPlacesX(){let{host:t,graphRegion:n}=e;return t!==void 0&&t.initialized&&n!==void 0&&e.xIsReferenceBp&&e.popStack.length===0&&!t.dynamicBlocks.contentBlocks.some(r=>r.refName===n.refName&&r.reversed)}})).views(e=>({get hostFrame(){let{host:t,graphRegion:n}=e;return e.hostPlacesX&&t&&n?De(t,n):void 0},get tubeMapPicture(){let t=e.layoutResult?.tubeMap;return t?zn(t.layout):void 0},get tubeMapReference(){let t=e.layoutResult?.tubeMap;return t&&e.drawnGraph?Hn(e.drawnGraph,t.layout):void 0},get tubeMapDeviations(){let t=e.layoutResult?.tubeMap?.coarse,n=e.layoutResult?.tubeMap?.layout;return t&&n?$n(t.graph,n,t.deviations):[]},get tubeMapReferenceNodes(){let t=e.layoutResult;return t?.tubeMap&&!t.referenceAxis&&e.drawnGraph?Wn(e.drawnGraph,t.tubeMap.layout):void 0}})).views(e=>({get tubeMapGenes(){let t=e.tubeMapReference;return e.showGenes&&!e.host&&t&&e.backboneGenes?Un(t,e.backboneGenes):[]},get referenceStripApplies(){let{host:t,layoutResult:n}=e;return!!t?.initialized&&!!n&&!n.tubeMap&&!e.hostPlacesX&&e.chosenLayoutMode!=="walkrows"}})).views(e=>({get referenceStripBlocks(){let{graph:t}=e;return e.showReferenceStrip&&e.referenceStripApplies&&t?En(t,{colorScheme:e.effectiveColorScheme,referenceRamp:e.referenceRamp,walkNodes:e.walkLift?.nodeIds}):[]},get referenceStripFrame(){let{host:t,graphRegion:n}=e;return t?.initialized&&n?De(t,n):void 0}})).views(e=>({get referenceStripShown(){return e.referenceStripBlocks.length>0&&e.referenceStripFrame!==void 0},get referenceStripOverhangs(){let t=e.referenceStripFrame;if(!t||e.referenceStripBlocks.length===0)return!1;let{left:n,right:r}=Fn(e.referenceStripBlocks,t,e.paneWidth);return n>0||r>0}})).views(e=>({get referenceStripLit(){if(!e.referenceStripShown)return;let t=o=>({x:o.x*e.scaleX+e.translateX,y:o.y*e.scaleY+e.translateY}),n=e.hoveredNode===null?e.hoveredBubble:null;if(n){let o=e.bubbleHalos.find(i=>pn(i.bubble,n));return{start:n.start,end:n.end,anchor:o?t(o.labelAt):void 0}}let r=e.hoveredNode??e.selectedNode,a=r===null?void 0:e.nodeSpan(r);return a&&r!==null?{...a,anchor:Dn(e.nodePositions?.[r],t)}:void 0},referenceStripNodeAt(t,n){let r=e.referenceStripFrame;return e.referenceStripShown&&r?Vn(e.referenceStripBlocks,r,t,n):void 0},get referenceStripZonePx(){return e.referenceStripShown?Bn:0}})).views(e=>({get paneCeiling(){return Math.max(Pt,e.paneHeight??Di)},get fitPadTop(){let t=qn(e.tubeMapGenes);return D+Math.max(0,t-1)*Kn+e.referenceStripZonePx},get minFitScale(){let t=e.layoutBounds,n=e.layoutResult,r=n?.tubeMap?.layout.tracks[0]?.width;return t&&t.h>0&&r&&!n.referenceAxis?Math.min(Hi/r,(this.paneCeiling-this.fitPadTop-D)/t.h):0},get canvasHeight(){let t=e.layoutBounds,n=e.paneWidth-D*2,r=this.paneCeiling;return t?e.pixelRows?Math.min(r,Math.max(Pt,t.h+this.fitPadTop+D)):t.w>0&&n>0?Math.min(r,Math.max(Pt,t.h*Math.max(n/t.w,this.minFitScale)+this.fitPadTop+D)):r:r},get fittedTransform(){let t=e.layoutBounds;return t?$r(t,e.paneWidth,this.canvasHeight,e.pixelRows,{minScale:this.minFitScale,padLeft:e.fitPadLeft,padTop:this.fitPadTop}):void 0}})).views(e=>({get overlayLabels(){return Sn(e)},get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?qr(t,{scaleX:e.scaleX,translateX:e.translateX,scaleY:e.scaleY,translateY:e.translateY,usableHeight:e.canvasHeight-e.fitPadTop-D}):void 0}})).views(e=>({get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX?On(t):void 0},get connectorZoneBottom(){let t=e.tubeMapPicture,n=e.tubeMapFrame;return t&&n?n.y(t.bounds.minY)-2:0},get tubeMapConnectors(){let t=e.tubeMapReferenceNodes,n=e.tubeMapFrame,{host:r,graphRegion:a}=e,o=t&&n&&r?.initialized&&a?De(r,a):void 0;return t&&n&&o?_n(t,i=>i*o.scale+o.translateX,n.x,e.paneWidth):[]}})).views(e=>({get tubeMapKeys(){let t=e.layoutResult,n=t?.tubeMap?.layout.reads??[],r=e.tubeMapPicture,a=e.tubeMapFrame,o=r&&a&&Xn(a.yScale)?r.mismatches.filter(i=>Yn(i,{x:a.x,width:e.paneWidth})):[];return{logWidths:t?.tubeMap!==void 0&&!t.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:n.some(i=>!i.is_reverse),reverseReads:n.some(i=>i.is_reverse),mismatches:new Set(o.map(i=>i.kind))}},tubeMapNodeAt(t,n){let r=e.layoutResult?.tubeMap,a=e.tubeMapFrame;return(r&&a?Zr(r,a,t,n):null)??jn(e.tubeMapConnectors,e.connectorZoneBottom,t,n)??null}})).actions(e=>({setError(t){e.error=t,e.isLoading=!1,e.statusMessage=""},finishLoading(){e.isLoading=!1,e.statusMessage=""},setStatusMessage(t){e.statusMessage=t},setFetchMs(t){e.lastFetchMs=t},setLayoutMs(t){e.lastLayoutMs=t},setGeometryMetrics(t,n,r){e.lastGeometryMs=t,e.lastGeometryStrokeCount=n,e.builtViewport={...r,viewportDirty:e.viewportDirty},e.geometryVersion++},markPainted(){e.paintedViewport=e.builtViewport},setLayoutQuality(t){e.layoutQuality=t},setLinearLayout(t){e.linearLayout=t},setLayoutMode(t){e.layoutMode=t},setReferencePath(t){e.referencePath=t;let n=e.graph;if(n?.anchoredBy==="paths"){let r=rt(n,t);Ki(n,r),e.graph=r}},setDrawPaths(t){e.drawPaths=t},setShowPerf(t){e.showPerf=t},setColorScheme(t){e.colorScheme=t},setBubbleSpread(t){e.bubbleSpread=t},setNodeWidth(t){e.nodeWidth=t},setShowBubbles(t){e.showBubbles=t},setShowDeletionEdges(t){e.showDeletionEdges=t},setShowGenes(t){e.showGenes=t},setShowReferenceStrip(t){e.showReferenceStrip=t},setTubeMapFold(t){e.tubeMapFold=t},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setWalkLayers(t){e.walkLayers=t},liftWalks(t){let n=new Map(e.walkLayers.map(r=>[r.walk,r]));e.walkLayers=t.map(r=>n.get(r)??{walk:r})},toggleWalk(t){let n=e.walkLayers;e.walkLayers=n.some(r=>r.walk===t)?n.filter(r=>r.walk!==t):[...n,{walk:t}]},setWalkColor(t,n){e.walkLayers=e.walkLayers.map(r=>r.walk===t?{...r,color:{...r.color,...n}}:r)},setPaneHeight(t){e.paneHeight=t},setWalkRowSamples(t){e.walkRowSamples=t},pairWithLinearView(t){let n=e.connectedViewId;n!==void 0&&fe([...(0,A.getSession)(e).views]).some(a=>a.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=t},setHoveredBubble(t){e.hoveredBubble=t},setPointerInPane(t){e.pointerInPane=t},setLegendSize(t){e.legendSize=t},setHoveredEdge(t){e.hoveredEdge=t},setSelectedNode(t){e.selectedNode=t},setDraggingNode(t){e.draggingNode=t},setPanning(t){e.isPanning=t},stopDragging(){e.draggingNode=null,e.isPanning=!1},clearInteractionState(){e.hoveredNode=null,e.hoveredBubble=null,e.hoveredEdge=null,e.selectedNode=null,e.draggingNode=null,e.isPanning=!1},showNodeDetails(t){let n=e.nodeById?.get(t),r=e.nodeById,a=e.nodeNeighbors;if(n&&r&&a){let o=(0,A.getSession)(e),i=e.graphRegion,s=i?Ne({nodeId:t,nodeById:r,neighbors:a}):void 0;(0,A.isSessionModelWithWidgets)(o)&&o.showWidget(o.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:Ie(n)?.sample,contributingHaplotype:Ie(n)?.haplotype,carriedBy:n.samples?.join(", "),...i&&s?{refName:i.refName,assemblyName:i.assemblyName,start:s.start,end:s.end}:{}}}))}},setTransform(t,n,r){let{host:a}=e;e.viewportOwner==="host"&&a?a.horizontalScroll(e.translateX-n):(e.viewportOwner="user",e.scale=he(t),e.translateX=n),e.translateY=r},zoom(t,n,r){let{host:a}=e;if(e.viewportOwner==="host"&&a){a.zoomTo(a.bpPerPx/t,n);return}e.viewportOwner="user";let o=to(e,t,n,r,e.pixelRows);e.scale=o.scale,e.translateX=o.translateX,e.translateY=o.translateY},setViewportDirty(){e.viewportRebuildPending=!1,e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){if(e.viewportOwner==="host"){let n=e.layoutBounds,r=e.canvasHeight-D*2;n&&r>0&&(e.translateY=wt(n,r,e.scaleY));return}let t=e.fittedTransform;t&&(e.scale=t.scale,e.translateX=t.translateX,e.translateY=t.translateY)},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>({hostTransform(t,n){let r=e.viewportOwner!=="host";r&&(e.viewportOwner="host"),e.scale=t,e.translateX=n,r&&e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.xIsReferenceBp?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportRebuildPending=!0,e.viewportDirtyTimer=setTimeout(()=>{(0,w.isAlive)(e)&&e.setViewportDirty()},ji)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,w.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(r,a,o){let i=e.layoutResult?.nodePositions;if(i?.[r]){for(let s of i[r])s.x+=a,s.y+=o;n()}},scheduleViewportDirty:t}}).actions(e=>{let t;function n(m){let{rpcManager:l}=(0,A.getSession)(e);return l.call((0,A.getRpcSessionId)(e),"GraphComputeLayout",{...m,signal:t?.signal,statusCallback:x=>{e.setStatusMessage((0,A.statusMessageText)(x)??"")}})}function r(m){return _r(m,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread})}function*a(m){let l=performance.now(),x=vo.has(e.chosenLayoutMode),M=e.graphRegion,L=x&&M?Er(m,M):m,h=x&&e.tubeMapFold>0&&!L.reads?Yr(L,e.tubeMapFold):void 0,R=Z(e.chosenLayoutMode).run(h?.graph??L,e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(R)return{result:h&&R.tubeMap?{...R,tubeMap:{...R.tubeMap,coarse:h}}:R,duration:performance.now()-l};let T=Ui(m),N=r(m),v=T.get(N);if(v)return{result:v,duration:performance.now()-l};let C=yield jr(m,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread},n);return qi(T,N,C.result),C}let o=0;function*i(m){let l=++o,x=()=>e.graph===m&&l===o,M=t?.signal,L;try{L=yield*a(m)}catch(R){if(!x()||M?.aborted)return!1;throw R}let h=x();return h&&(e.layoutResult=L.result,e.setLayoutMs(L.duration)),h}function s(m,l){let x=m.anchorPaths;return m.anchoredBy==="paths"&&x?(tn(m,e.assemblySpellings(l.assemblyName))??Rn(x,l.assemblyName))?.name:void 0}function*u(m,l,x,M=!1,L){let h=t?.signal;e.setStatusMessage("Parsing GFA");let R=Wr(m,l,{referencePath:e.referencePath||x?.assemblyName,maxNodes:e.maxGraphNodes}),T=x?s(R,x):void 0,N=!e.referencePath&&T!==void 0&&T!==R.referencePath?rt(R,T):R;if(L){e.setStatusMessage("Reading alignments");try{let{records:C,total:Y}=yield L(N);N.reads=C,e.readsShown={shown:C.length,total:Y}}catch(C){if(h?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",C),e.readsShown=void 0}if(h?.aborted)return}else e.readsShown=void 0;let v=M?e.selectedNode:null;e.graph=N,e.graphRegion=x,e.loadedReferencePath=T,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),v!==null&&e.nodeById?.has(v)&&(e.selectedNode=v),e.setStatusMessage("Computing layout"),yield*i(N)}let d=0;function f(){let m=++d;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>m===d,signal:t.signal}}function*g(m,l,x){let M=Wi(m);if(!(m.type!=="RgfaTabixAdapter"||M===void 0))try{let L=yield(0,A.getSession)(e).rpcManager.call((0,A.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${M}.bubbles.bed.gz`,baseUri:m.baseUri,assemblyNameToPanSN:m.assemblyNameToPanSN},regions:[l]});x()&&(e.indexBubbles=L.map(h=>({refName:l.refName,start:h.get("start"),end:h.get("end"),segmentCount:h.get("segmentCount"),pathCount:h.get("pathCount")??0,inversion:h.get("inversion"),shortestAlleleLength:h.get("shortestAlleleLength"),longestAlleleLength:h.get("longestAlleleLength"),segments:h.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(L){console.warn("[GraphGenomeView] no bubble index for this graph",L)}}function*p(m,l,x){let M=(0,A.getSession)(e),L=m?M.tracks.find(h=>h.trackId===m):void 0;if(L)try{return yield M.rpcManager.call((0,A.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:(0,te.readConfObject)(L,"adapter"),regions:[l]})}catch(h){console.warn(`[GraphGenomeView] no ${x} for this graph`,h);return}}function*c(m,l){let x=yield*p(e.geneTrack?.trackId,m,"genes");x&&l()&&(e.geneFeatures=co(x))}function*y(m,l){let x=yield*p(e.repeatTrack?.trackId,m,"repeats");x&&l()&&(e.repeatArrays=yo(x))}function*k(m,l,x){let{isLive:M,signal:L}=f();e.isLoading=!0,e.error=void 0;try{let h=typeof l=="string"?l:yield l(L);M()&&(yield*u(h,m,x))}catch(h){M()&&(console.error("[GraphGenomeView.loadWholeGFA]",h),e.error=h)}finally{M()&&e.finishLoading()}return M()}function b(){t?.abort(),t=void 0,d++,o++}return{clearGraph(){b(),e.graph=void 0,e.graphRegion=void 0,e.loadedReferencePath=void 0,e.layoutResult=void 0,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearInteractionState(),e.clearPerfMetrics()},stopLoad(){b(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){b()},loadGFA:(0,w.flow)(function*(m,l="Imported GFA"){yield*k(l,m)}),loadGFAFromLocation:(0,w.flow)(function*(m,l){e.setStatusMessage("Fetching GFA");let x=yield*k("uri"in m?m.uri.split("/").pop()??"GFA":"GFA",M=>(0,Vo.openLocation)(m).readFile({encoding:"utf8",signal:M}),l);l&&x&&e.graph&&(yield*y(l,()=>e.graphRegion===l))}),cutSubgraph:(0,w.flow)(function*(m,l,x={}){let{isLive:M,signal:L}=f();e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let h=performance.now(),R=yield(0,A.getSession)(e).rpcManager.call((0,A.getRpcSessionId)(e),"GetSubgraph",{adapterConfig:m,region:l,opts:x,signal:L});if(!M())return;if(e.setFetchMs(performance.now()-h),!R)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");if(yield*u(R,ce(l),l,!0,yr(m)?T=>(0,A.getSession)(e).rpcManager.call((0,A.getRpcSessionId)(e),"GetGraphReads",{adapterConfig:m,nodeNames:T.nodes.map(N=>N.name),signal:L}):void 0),!M())return;e.setStatusMessage("Reading annotations"),yield Promise.all([x.tier==="coarse"?void 0:(0,w.flow)(g)(m,l,M),(0,w.flow)(c)(l,M),(0,w.flow)(y)(l,M)])}catch(h){M()&&(console.error("[GraphGenomeView.cutSubgraph]",h),e.error=h)}finally{M()&&e.finishLoading()}}),reloadRepeats:(0,w.flow)(function*(){let m=e.graphRegion,l=e.repeatTrack?.trackId;m&&(yield*y(m,()=>e.graphRegion===m&&e.repeatTrack?.trackId===l))}),reloadGenes:(0,w.flow)(function*(){let m=e.graphRegion,l=e.geneTrack?.trackId;m&&(yield*c(m,()=>e.graphRegion===m&&e.geneTrack?.trackId===l))}),popBubble:(0,w.flow)(function*(m){let l=e.graph;if(!l)return;let x=Cr(l,Le(m));if(x.nodes.length===0){(0,A.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:M}=f();e.popStack=[...e.popStack,{graph:l,layoutMode:e.chosenLayoutMode,label:l.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let L=`${gn[Re(m,e.repeatArrays).kind]} at ${m.refName}:${m.start.toLocaleString()}`;e.graph={...x,name:L},e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*i(e.graph))&&e.finishLoading()}catch(h){M()&&(e.error=h,e.finishLoading())}}),unpopBubble:(0,w.flow)(function*(){let m=e.poppedFrom;if(m){e.popStack=e.popStack.slice(0,-1),e.graph=m.graph,e.layoutMode=m.layoutMode,e.indexBubbles=m.indexBubbles,e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*i(m.graph))&&e.finishLoading()}catch(l){e.error=l,e.finishLoading()}}}),recomputeLayout:(0,w.flow)(function*(){let m=e.graph;if(m){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*i(m))&&e.finishLoading()}catch(l){console.error("[GraphGenomeView.recomputeLayout]",l),e.error=l,e.finishLoading()}}})}}).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,w.addDisposer)(e,(0,B.autorun)(()=>{e.fittedTransform&&(0,B.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,w.addDisposer)(e,(0,B.autorun)(()=>{let r=wo((0,A.getSession)(e).hovered);(0,B.untracked)(()=>{let a=e.graphRegion,o=e.graph;a&&o&&!e.pointerInPane&&e.setHoveredNode(r&&ko(r,a)?xo({hover:r,nodes:o.nodes}):null)})})),(0,w.addDisposer)(e,(0,B.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredBubble(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,w.addDisposer)(e,(0,B.autorun)(()=>{let{scale:r}=e,a=It(e);if(n){n=!1;return}let o=(0,B.untracked)(()=>e.builtViewport);o?.scale===r&&eo(o.bounds,a)||e.scheduleViewportDirty()})),(0,w.addDisposer)(e,(0,B.autorun)(()=>{let r=e.currentRenderingBackend,a=e.hoveredNode,o=e.hoveredEdge,i=e.selectedNode;if(we(e.geometryVersion),r){let s=new Map;i!==null&&s.set(i,_i),a!==null&&a!==i&&s.set(a,Bo),r.setNodeHighlights(s),r.setEdgeHighlight(o,Bo),e.renderNow()}}))}e.attachRenderingBackend(t,()=>({upload:n=>{n.resize(e.paneWidth,e.canvasHeight);let r=e.nodeById;if(e.layoutResult?.tubeMap)return we(e.viewportDirty),n.uploadGeometry(zi),e.setGeometryMetrics(0,0,{scale:(0,B.untracked)(()=>e.scale),bounds:(0,B.untracked)(()=>It(e))}),!0;if(e.nodePositions&&e.graph&&r){we(e.viewportDirty,e.positionsVersion);let a=performance.now(),o=(0,B.untracked)(()=>Qr(It(e),$i)),i=Cn({nodePositions:e.nodePositions,graph:e.graph,nodeById:r,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:e.effectiveDrawPaths,nodeWidth:e.nodeWidth,highlight:e.walkLift,axis:(0,B.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:o,referenceRamp:e.referenceRamp,deletions:e.deletionEdgeIndexes,hiddenEdges:e.hiddenEdgeIndexes,version:e.positionsVersion});return n.uploadGeometry(i),e.setGeometryMetrics(performance.now()-a,i.nodeStrokes.length,{scale:(0,B.untracked)(()=>e.scale),bounds:o}),!0}return!1},render:n=>{if(!e.nodePositions)return!1;let r=(0,Ho.getDpr)();return n.updateTransform({scaleX:e.scaleX*r,scaleY:e.scaleY*r,translateX:e.translateX*r,translateY:e.translateY*r,dpr:r}),n.render(e.darkMode?[.12,.12,.12,1]:[1,1,1,1]),e.markPainted(),!0}}))}})).actions(e=>({switchLayout(t){return e.setLayoutMode(t),e.recomputeLayout()},cancelLoad(){e.canCancelLoad&&(e.stopLoad(),e.graph=void 0)},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user")}})).actions(e=>({showInLinearView(t){let n=(0,A.getSession)(e),r=t.assembly===e.graphRegion?.assemblyName,a=Go({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:No({session:n,assemblyName:t.assembly,first:r?e.sourceTrackId:void 0})});r&&e.pairWithLinearView(a)},highlightInLinearView(t){To({session:(0,A.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){Ao({session:(0,A.getSession)(e),contributors:e.launchableAssemblies,trackId:t,graphTrackId:e.sourceTrackId})}})).views(e=>({get syntenyLaunchTracks(){let t=e.launchableAssemblies.map(n=>n.sample);return t.length>=2?Io((0,A.getSession)(e),t):[]}})).views(e=>({graphMenuItems(){let t=e.walkChoices;return[{label:"Layout",subMenu:Nn.map(n=>({type:"radio",label:n.label,checked:e.chosenLayoutMode===n.value,disabled:e.graph?!n.available(e.graph):!1,onClick:()=>{e.switchLayout(n.value)}}))},{label:"Color",subMenu:bn.map(n=>({type:"radio",label:n.label,checked:e.chosenColorScheme===n.value,onClick:()=>{e.setColorScheme(n.value)}}))},...t.length>0?[{label:"Walk",subMenu:[{label:"None",onClick:()=>{e.setWalkLayers([])}},...t.map(n=>({type:"checkbox",label:n.label,checked:e.walkLayers.some(r=>r.walk===n.name),onClick:()=>{e.toggleWalk(n.name)}})),...(e.walkLift?.walks??[]).map(n=>({label:`Colour ${t.find(r=>r.name===n.name)?.label??n.name}`,subMenu:[{type:"subHeader",label:"Colour by"},...Zn.map(r=>({type:"radio",label:r.label,checked:n.encoding.field===r.value,onClick:()=>{e.setWalkColor(n.name,{field:r.value})}})),{type:"subHeader",label:"Palette"},...Jn.map(r=>({type:"radio",label:r.label,checked:n.encoding.scheme===r.value,onClick:()=>{e.setWalkColor(n.name,{scheme:r.value})}}))]}))]}]:[],...vo.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:Oi.map(({bp:n,label:r})=>({type:"radio",label:r,checked:e.tubeMapFold===n,disabled:n>0&&e.graph?.reads!==void 0,onClick:()=>{e.setTubeMapFold(n),e.recomputeLayout()}}))}]:[],...e.chosenLayoutMode==="walkrows"&&e.repeatChoices.length>0?[{label:"Repeat",subMenu:[{type:"radio",label:"Whole window",checked:e.repeatKey==="",onClick:()=>{e.setRepeatKey("")}},...e.repeatChoices.map(({key:n,name:r,unit:a})=>({type:"radio",label:`${r} \xB7 ${a.toLocaleString()} bp unit`,checked:e.repeatKey===n,onClick:()=>{e.setRepeatKey(n)}}))]}]:[],...e.hostPlacesX?[]:[{label:"Zoom in",onClick:()=>{e.zoom(1.5,e.paneWidth/2,e.canvasHeight/2)}},{label:"Zoom out",onClick:()=>{e.zoom(1/1.5,e.paneWidth/2,e.canvasHeight/2)}},{label:"Zoom to fit",onClick:()=>{e.zoomToFit()}}],{type:"checkbox",label:"Mark bubbles",checked:e.showBubbles,onClick:()=>{e.setShowBubbles(!e.showBubbles)}},{type:"checkbox",label:"Show deletion edges",checked:e.showDeletionEdges,onClick:()=>{e.setShowDeletionEdges(!e.showDeletionEdges)}},{type:"checkbox",label:"Genes on the backbone",checked:e.showGenes,onClick:()=>{e.setShowGenes(!e.showGenes)}},...e.referenceStripApplies?[{type:"checkbox",label:"Reference strip at bp",checked:e.showReferenceStrip,onClick:()=>{e.setShowReferenceStrip(!e.showReferenceStrip)}}]:[]]},launchMenuItems(){let t=[];for(let n of ir({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:r=>{e.showInLinearView(r)},onShowSynteny:r=>{e.showSyntenyView(r)}}))(0,Fo.pushLaunchViewMenuItem)(t,n);return t}}))}var vt=S(_(),1);function Oo(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function Wo(e){let t=(0,vt.readConfObject)(e,"assemblyNames"),n=Oo(t)?t.slice(1):[];return n.length>0?n:void 0}function Ue(e){let t=(0,vt.readConfObject)(e,"assemblyNames");return Oo(t)?t[0]:void 0}function Ke(e,t){return e===void 0||e===t?void 0:`The graph is cut on its reference, ${e}: open it from a view of ${e}`}function Ct(){return E.types.compose("GraphGenomeView",jo.BaseViewModel,Ye(),E.types.model({type:E.types.literal("GraphGenomeView"),gfaLocation:E.types.maybe(E.types.frozen()),loadedRegion:E.types.maybe(E.types.frozen()),loadedTrackId:E.types.optional(E.types.string,""),subgraphContext:E.types.optional(E.types.number,1),subgraphHaplotypes:E.types.maybe(E.types.frozen()),maxRegionBp:E.types.optional(E.types.number,Xe)})).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get sourceTrack(){return e.loadedTrackId?(0,$o.getSession)(e).tracks.find(t=>t.trackId===e.loadedTrackId):void 0},get canRetryLoad(){return e.gfaLocation!==void 0||e.loadedTrackId!==""&&e.loadedRegion!==void 0}})).views(e=>({get hasPendingSource(){return e.canRetryLoad&&!e.graph&&!e.loadCanceled},menuItems(){return e.launchMenuItems()}})).actions(e=>{let t=e.clearGraph;return{clearGraph(){t(),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let n=e.loadedRegion;if(e.gfaLocation)return e.loadGFAFromLocation(e.gfaLocation,n);if(!e.loadedTrackId||!n)return;let r=e.sourceTrack,a=n.end-n.start,o=r?Ke(Ue(r),n.assemblyName):void 0;if(!r)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(o)e.setError(new Error(o));else if(a>e.maxRegionBp)e.setError(new Error(`Region too large (${ne(a)}) \u2014 zoom in to view graph (max ${ne(e.maxRegionBp)})`));else return e.cutSubgraph((0,_o.readConfObject)(r,"adapter"),n,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes})}}}).actions(e=>({retryLoad(){e.load()},afterAttach(){e.graph||e.load()}}))}var Zi=(0,Yo.defineLaunchKeys)()({});function Bt(e){e.addViewType(()=>new Xo.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:Ct(),launchKeys:Zi,ReactComponent:(0,zo.lazy)(()=>import("./chunks/GraphGenomeView-YKR42OER.js"))}))}var Uo=S(_(),1),re=S(J(),1),Ji=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function Qi(e){let t=e.getElementTypesInGroup("display"),n=a=>t.find(o=>o.name===a),r=a=>a&&Object.assign(Object.create(a),{adapterCapabilities:["headerLanes"]});return[n("LinearGraphDisplay"),n("LinearBasicDisplay"),...Ji.map(a=>r(n(a)))].filter(a=>a!==void 0)}function Et(e){e.addTrackType(()=>{let t=(0,Uo.ConfigurationSchema)("GraphTrack",{},{baseConfiguration:(0,re.createBaseTrackConfig)(e),explicitIdentifier:"trackId"}),n=new re.TrackType({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:(0,re.createBaseTrackModel)(e,"GraphTrack",t)});for(let r of Qi(e))n.addDisplayType(r);return n})}function Ft(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...r}=t;return n.addView("GraphGenomeView",r),t})}var pa=S(Se(),1),ma=S(qo(),1);var Qo=S(_(),1),ea=S(Jo(),1),Vt=S(z(),1);function ta(){return(0,Qo.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:Vt.types.enumeration("LayoutMode",Pe),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:Vt.types.enumeration("ColorScheme",Te),defaultValue:"auto"},...(0,ea.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var ia=S(Se(),1);var ke=S(_(),1),sa=S(J(),1),da=S(dn(),1),Dt=S(se(),1),ca=S(ra(),1),I=S(z(),1),Ze=S(aa(),1);var qe=S(sn(),1);var es=(0,ia.lazy)(()=>import("./chunks/GraphTrackSettingsDialog-2QV6TPX7.js"));function ua(e){return I.types.compose("LinearGraphDisplay",sa.BaseDisplay,(0,ca.default)(),Ye(),I.types.model({type:I.types.literal("LinearGraphDisplay"),configuration:(0,ke.ConfigurationReference)(e),pane:I.types.maybe(I.types.frozen()),cutRegion:I.types.maybe(I.types.frozen()),coarseCut:I.types.optional(I.types.boolean,!1),maxRegionBp:I.types.optional(I.types.number,Xe),subgraphContext:I.types.optional(I.types.number,1),subgraphHaplotypes:I.types.maybe(I.types.frozen())})).preProcessSnapshot(t=>{let{pane:n,...r}=t;if(!n)return t;let{type:a,...o}=n;return{...o,...r}}).volatile(()=>({recuts:0,settledWindow:void 0})).views(t=>({get defaultLayoutMode(){return(0,ke.getConf)(t,"layoutMode")},get defaultColorScheme(){return(0,ke.getConf)(t,"colorScheme")},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get chosenHaplotypes(){return t.subgraphHaplotypes??Wo(t.parentTrack.configuration)},get coarseAboveBpPerPx(){let r=t.adapterConfig.coarse?.aboveBpPerPx;return typeof r=="number"?r:void 0}})).views(t=>({tierAt(n){let r=t.coarseAboveBpPerPx;return r!==void 0&&n>r?"coarse":"fine"},capFor(n){return n==="coarse"?1/0:t.maxRegionBp},get cutTier(){return t.coarseCut&&t.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(t=>({get settledCapBp(){let n=t.settledWindow;return n?t.capFor(t.tierAt(n.bpPerPx)):1/0}})).views(t=>({get regionTooLarge(){let n=t.settledWindow;return n!==void 0&&n.end-n.start>t.settledCapBp},get regionTooLargeReason(){let n=t.settledWindow;return n?`Region too large for a graph cut (${ne(n.end-n.start)}, max ${ne(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get displayPhase(){return(0,Ze.computeDisplayStatusPhase)({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>(0,Ze.computeActivityPhase)({isMinimized:t.isMinimized,fetchInert:!1,viewportEmpty:t.host?.initialized===!0&&t.host.hasVisibleContent===!1,isLoading:t.isLoading||!t.hasGraph,fetchCanceled:t.loadCanceled,awaitingDependentData:!1,rendersCanvas:!0,canvasDrawn:t.painted&&t.geometryPainted},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({setSubgraphContext(n){t.subgraphContext=n},setSubgraphHaplotypes(n){t.subgraphHaplotypes=n},setMaxRegionBp(n){t.maxRegionBp=n},cut(){let n=t.cutRegion;if(!n)return;let r=Ke(Ue(t.parentTrack.configuration),n.assemblyName);if(r){t.clearGraph(),t.setError(new Error(r));return}let a=t.cutTier==="coarse";return t.cutSubgraph(t.adapterConfig,n,{hops:a?0:t.subgraphContext,haplotypes:t.chosenHaplotypes,tier:a?"coarse":void 0})}})).actions(t=>({recutAt(n){let r=t.tierAt(n.bpPerPx);return t.coarseCut=r==="coarse",t.cutRegion=St(n,t.capFor(r),Z(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(n){t.settledWindow=n;let r=Z(t.chosenLayoutMode).cutMargins;return t.regionTooLarge||!t.loadCanceled&&t.tierAt(n.bpPerPx)===t.cutTier&&mo(t.cutRegion,n,r)?!1:(t.recutAt(n),!0)},switchLayout(n){let r=Z(t.chosenLayoutMode).cutMargins;t.setLayoutMode(n);let a=t.host?He(t.host):void 0;return a&&!t.regionTooLarge&&Z(n).cutMargins!==r?t.recutAt(a):t.recomputeLayout()},retryLoad(){t.cut()},reload(){t.cut()},cancelFetchByUser(){t.stopLoad()}})).actions(t=>({forceLoad(){let n=t.settledWindow;n&&(t.setMaxRegionBp(Math.ceil(n.end-n.start)),t.settleOn(n))},afterAttach(){t.cutRegion&&!t.graph&&t.cut(),(0,I.addDisposer)(t,(0,qe.reaction)(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),(0,I.addDisposer)(t,(0,qe.reaction)(()=>t.hostFrame,n=>{n&&t.hostTransform(n.scale,n.translateX)},{equals:(n,r)=>n?.scale===r?.scale&&n?.translateX===r?.translateX,fireImmediately:!0,name:"GraphHostFrame"})),(0,I.addDisposer)(t,(0,qe.reaction)(()=>t.host?.coarseDynamicBlocks,n=>{let{host:r}=t,a=n&&r?He(r):void 0;a&&t.settleOn(a)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let n=t.host?He(t.host):void 0,r=t.sourceTrackId;if(!n||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge)return;let a=Math.floor(n.start),o=Math.ceil(n.end);return{loadedTrackId:r,loadedRegion:{refName:n.refName,assemblyName:n.assemblyName,start:a,end:o},subgraphContext:t.subgraphContext,subgraphHaplotypes:t.chosenHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,o-a),layoutMode:t.chosenLayoutMode,colorScheme:t.chosenColorScheme,referencePath:t.referencePath,geneTrackId:t.geneTrackId,showGenes:t.showGenes,showBubbles:t.showBubbles,showDeletionEdges:t.showDeletionEdges}}})).actions(t=>({openGraphView(){let n=t.graphViewSpec;n&&(0,Dt.getSession)(t).addView("GraphGenomeView",n)}})).views(t=>({trackMenuItems(){let n=t.launchMenuItems();return(0,da.pushLaunchViewMenuItem)(n,{label:"Graph genome view",icon:Be,disabled:!t.graphViewSpec,disabledHelpText:"Zoom in until the track cuts a graph",onClick:()=>{t.openGraphView()}}),[...t.graphMenuItems(),{label:"Settings",icon:sr,onClick:()=>{(0,Dt.getSession)(t).queueDialog(r=>[es,{model:t,open:!0,onClose:r}])}},...n]}}))}function Ht(e){e.addDisplayType(()=>{let t=ta();return Object.assign(new ma.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:ua(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,pa.lazy)(()=>import("./chunks/LinearGraphDisplay-AFTQJKEI.js"))}),{adapterCapabilities:["getSubgraph"]})})}var ha=S(Ee(),1);var Ot=S(_(),1),la=S(z(),1);function Wt(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:n},index:{indexType:r?"CSI":"TBI",location:{uri:`${t}.${r?"csi":"tbi"}`,baseUri:n}}}:e}var ts=(0,Ot.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,Ot.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:la.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:Wt}),ga=ts;function _t(e){e.addAdapterType(()=>new ha.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:Wt,configSchema:ga,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-NRDD66AK.js").then(t=>t.default)}))}var ka=S(Ee(),1);var Qe=S(_(),1),ya=S(z(),1);function ba(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function fa(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:ba(`${t}.segs.bed.gz`,n,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:ba(`${t}.links.bed.gz`,n,r)}:e}function jt(e){let{coarse:t,baseUri:n}=e;return fa(typeof t=="object"&&t!==null?{...e,coarse:fa({baseUri:n,...t})}:e)}var Je=(e,t)=>(0,Qe.ConfigurationSchema)(e,{indexType:{model:ya.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),ns=(0,Qe.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Je("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:Je("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),rs=(0,Qe.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Je("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:Je("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:ns},{explicitlyTyped:!0,preProcessSnapshot:jt}),wa=rs;function $t(e){e.addAdapterType(()=>new ka.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:jt,configSchema:wa,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-NQEERXXI.js").then(t=>t.default)}))}var os=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function as(e){return"uri"in e?rn(e.uri).name:"localPath"in e?e.localPath:e.name}function is(e){return as(e).toLowerCase().endsWith(".gbz.db")}function ss(e){let t=e.adapter;return t?.type==="GbzBaseSyntenyAdapter"&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function ds(e,t,n){if((!n||n==="GbzBaseSyntenyAdapter")&&is(e))return{type:"GbzBaseSyntenyAdapter",gbzDbLocation:e,...t?{haplotypeIndexLocation:t}:{}};if((!n||n==="RgfaTabixAdapter")&&on(e))return an({choice:"RgfaTabixAdapter",loc:e,indexLoc:t,assembly:"",sample:""})}function zt(e){e.addToExtensionPoint("Core-preProcessTrackConfig",ss),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(n,r,a)=>ds(n,r,a)??t(n,r,a)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(n,r)=>os.has(n)?"GraphTrack":t(n,r))}var Ra=S(se(),1),La=S(Fa(),1),Xt=S(Ea(),1),Ga=S(Da(),1);function oe(e){return typeof e=="object"&&e!==null}function xa(e){let t;if(oe(e)){let{refName:n,start:r,end:a,assemblyName:o}=e;typeof n=="string"&&typeof r=="number"&&typeof a=="number"&&(t={refName:n,start:r,end:a,assemblyName:typeof o=="string"?o:void 0})}return t}function cs(e,t,n){let r=e.connectedViewId;return r===void 0||r===t||!n.has(r)}function Sa(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function us(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(n=>oe(n)&&Array.isArray(n.displays)?n.displays.filter(r=>oe(r)&&r.type==="LinearGraphDisplay"):[])}function Ma(e,t,n){let r=[],a=new Set(fe(e).map(o=>oe(o)?o.id:void 0));for(let o of e){if(oe(o)&&o.id===t)for(let i of us(o)){let s=xa(i.hoverHighlight);s&&Sa(s,n)&&r.push({key:typeof i.id=="string"?i.id:"graph-track",region:s})}if(oe(o)&&o.type==="GraphGenomeView"&&cs(o,t,a)){let i=xa(o.hoverHighlight);i&&Sa(i,n)&&r.push({key:typeof o.id=="string"?o.id:"graph",region:i})}}return r}var ae=S(de(),1),ps=(0,Ga.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,La.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),ms=(0,Xt.observer)(function({model:t,region:n}){let{classes:r}=ps(),a=t.getHighlightCoords(n);return a?(0,ae.jsx)("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:a.left,width:a.width}}):null}),ls=(0,Xt.observer)(function({model:t}){let{views:n}=(0,Ra.getSession)(t);return(0,ae.jsx)(ae.Fragment,{children:Ma([...n],t.id,t.assemblyNames).map(({key:r,region:a})=>(0,ae.jsx)(ms,{model:t,region:a},`graph-hover-${r}`))})}),Ta=ls;var Aa=S(de(),1),gs="LinearGenomeView-TracksContainerComponent";function Yt(e){e.contributeToExtensionPoint(gs,({model:t})=>(0,Aa.jsx)(Ta,{model:t},"graphgenomeview-hover-highlight"))}var Na="GraphGenomeView";var Pa="4.0.20";var Ut=class extends Ia.default{constructor(){super(...arguments);this.name=Na;this.version=Pa}install(n){Bt(n),Ht(n),Et(n),Ft(n),Yt(n),$t(n),_t(n),pt(n),lt(n),zt(n),n.addRpcMethod(()=>new me(n)),n.addRpcMethod(()=>new pe(n)),n.addRpcMethod(()=>new ue(n))}configure(n){try{(0,va.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:Be,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{Ut as default};
|
|
1
|
+
import{b as Qt,c as en,d as tn,e as nn}from"./chunks/chunk-QSH263Y6.js";import{a as Ca}from"./chunks/chunk-KWAXLUPQ.js";import{a as Ba,d as rn,g as on,h as an}from"./chunks/chunk-XK7OPCRQ.js";import{a as se}from"./chunks/chunk-J4OLMLS5.js";import{$ as jn,A as Gn,Aa as ve,B as Tn,Ba as ce,C as An,Ca as ir,D as it,E as Nn,Ea as sr,I as Pn,N as st,O as Cn,P as Bn,Q as En,R as Fn,S as Vn,T as Dn,V as Hn,W as On,Z as Wn,_ as _n,a as Kt,b as sn,ba as $n,d as Me,e as Re,ea as zn,f as cn,g as ln,ga as Xn,ha as Yn,ia as Un,j as gn,ja as Kn,k as ot,ka as qn,l as hn,m as bn,ma as Zn,n as Le,na as Jn,o as fn,oa as Qn,p as _,pa as er,q as Sn,qa as tr,r as Te,ra as dt,t as Mn,u as Ae,ua as Va,v as Ne,va as nr,wa as Ie,xa as rr,ya as or,za as ar}from"./chunks/chunk-3FGJLRG2.js";import{b as kn,d as xn}from"./chunks/chunk-UQEPPJEO.js";import"./chunks/chunk-SCMIJAAX.js";import{a as X}from"./chunks/chunk-FCWXYIFC.js";import{A as vn,B as Da,a as W,b as un,c as pn,d as tt,e as mn,k as nt,n as rt,o as Ge,p as at,r as yn,s as wn,t as Rn,u as Pe,v as Ln,x as In}from"./chunks/chunk-VIFXYTIS.js";import{b as P,d as qt,f as Zt,g as Jt}from"./chunks/chunk-EFVAQ2KM.js";import"./chunks/chunk-KULNKXPT.js";import{a as de,b as Ea,c as Fa,d as dn,e as Se}from"./chunks/chunk-XEJ47DLD.js";import{a as O,b as S}from"./chunks/chunk-FY3BTKY4.js";var cr=O((hs,dr)=>{dr.exports=JBrowseExports["@jbrowse/core/Plugin"]});var Ee=O((ys,ur)=>{ur.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var j=O((ws,pr)=>{pr.exports=JBrowseExports["@jbrowse/core/configuration"]});var mt=O((Ms,gr)=>{gr.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var J=O((Rs,hr)=>{hr.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var Gr=O((Is,Lr)=>{Lr.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var Ar=O((vs,Tr)=>{Tr.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var Pr=O((Cs,Nr)=>{Nr.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var ao=O((Id,oo)=>{oo.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var qo=O((Uc,Ko)=>{Ko.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"]});var Jo=O((Kc,Zo)=>{Zo.exports=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"]});var ra=O((Qc,na)=>{na.exports=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"]});var aa=O((eu,oa)=>{oa.exports=JBrowseExports["@jbrowse/render-core/displayPhase"]});var Ia=S(cr(),1),va=S(se(),1);var Ce=S(de(),1),Be=(0,Kt.createSvgIcon)([(0,Ce.jsx)("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),(0,Ce.jsx)("circle",{cx:"14.8",cy:"18",r:"2"},"1"),(0,Ce.jsx)("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var lr=S(Ee(),1);var ct=S(j(),1),ut=S(X(),1),Ha=(0,ct.ConfigurationSchema)("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.gbz.db",locationType:"UriLocation"}},haplotypeIndexLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},readsLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},readsIndex:(0,ct.ConfigurationSchema)("GbzBaseReadsIndex",{indexType:{model:ut.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}}}),subgraphSnarls:{type:"stringEnum",model:ut.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=>{let{uri:t,baseUri:n,reads:r}=e;return{...e,...t?{gbzDbLocation:{uri:t,baseUri:n}}:{},...typeof r=="string"?{readsLocation:{uri:r,baseUri:n},...r.endsWith(".gz")?{readsIndex:{location:{uri:`${r}.tbi`,baseUri:n}}}:{}}:{}}}}),mr=Ha;function pt(e){e.addAdapterType(()=>new lr.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:mr,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-7ZKFAEJG.js").then(t=>t.default)}))}var br=S(mt(),1),fr=S(J(),1);function Oa(e){return"getReads"in e&&typeof e.getReads=="function"}var Wa=e=>typeof e=="object"&&e!==null&&Object.entries(e).some(([t,n])=>["uri","localPath","blobId"].includes(t)&&typeof n=="string"&&n!=="");function yr(e){return typeof e.reads=="string"&&e.reads!==""||Wa(e.readsLocation)}var ue=class extends fr.RpcMethodType{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(n){let{adapterConfig:r,nodeNames:a,sessionId:o,signal:i}=n,{dataAdapter:s}=await(0,br.getAdapter)(this.pluginManager,o,r);return Oa(s)?s.getReads(a,{signal:i}):{records:[],total:0}}};var wr=S(mt(),1),kr=S(J(),1);function _a(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var pe=class extends kr.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:r,region:a,sessionId:o,opts:i,signal:s}=n,{dataAdapter:u}=await(0,wr.getAdapter)(this.pluginManager,o,r);return _a(u)?u.getSubgraph(a,{...i,signal:s}):(console.warn(`[GetSubgraph] ${u.constructor.name} does not implement getSubgraph`),"")}};var xr=S(Se(),1),Sr=S(J(),1),Mr=S(X(),1),ja=(0,xr.lazy)(()=>import("./chunks/AddTrackWorkflow-WYRVQYH2.js"));function lt(e){e.addAddTrackWorkflowType(()=>new Sr.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:ja,stateModel:Mr.types.model({})}))}var gt;function ht(){return gt??=import("./chunks/bandage-layout-UCRW4G4J.js").then(e=>e.default()).catch(e=>{throw gt=void 0,e}),gt}var Rr=S(J(),1),me=class extends Rr.RpcMethodType{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(n){let{graph:r,options:a,statusCallback:o}=n;o?.("Loading layout engine");let i=await ht();o?.("Computing layout");let s=performance.now(),u=i.computeLayout(r,a),d=performance.now()-s;return{result:u,duration:d}}};var zo=S(Se(),1),Xo=S(Gr(),1),Yo=S(Ar(),1);var _o=S(j(),1),jo=S(Pr(),1),$o=S(se(),1),E=S(X(),1);var $a=.9,bt=2,za=1e3;function Ir(e,t,n,r=o=>o,a=[]){let o=new Map(e.nodes.map(s=>[s.name,s])),i=[];for(let s of t){let u=[],d=1/0,f=-1/0,g=1/0,p=[],c=[];for(let l of Ae(s)){let x=o.get(l),M=x&&n[x.id];if(!(!x||!M?.length)){if(P(x)&&(x.stable.start<s.start||x.stable.start>=s.end)){c.push(M[Math.floor(M.length/2)]);continue}p.push(x.id),u.push(Ne(M.length===1?[M[0],M[0]]:M));for(let L of M)d=Math.min(d,L.x),f=Math.max(f,L.x),g=Math.min(g,L.y)}}if(p.length===0)continue;let y={x:(d+f)/2,y:g},k=c.length?{x:c.reduce((l,x)=>l+x.x,0)/c.length,y:c.reduce((l,x)=>l+x.y,0)/c.length}:y,b=new Map;for(let l of s.routes??[])for(let x of new Set(l.steps))b.set(x,(b.get(x)??0)+1);let m=[];for(let l of s.routes??[]){if(s.longestAlleleLength<za)break;if(l.steps.length===0)continue;let x=Math.min(...l.steps.map(h=>b.get(h))),M,L=-1;for(let h of l.steps)if(b.get(h)===x)for(let R of n[h]??[]){let T=Math.hypot(R.x-k.x,R.y-k.y);T>L&&(L=T,M=R)}M&&m.push({route:l,at:M,text:Xa(l,r)})}i.push({bubble:s,...Te(s,a),path:u.join(""),labelAt:y,members:p.length,nodeIds:p,whole:p.length>=$a*e.nodes.length,routes:m})}return i}function Xa(e,t){let n=[...new Set(e.walks.map(t))].sort(),r=n.slice(0,bt).join(", "),a=n.length>bt?` +${n.length-bt}`:"";return`${r}${a} \xB7 ${Sn(e.bp)}`}function vr(e){if(!e.nodes.some(P))return[];let t=new Map(e.nodes.map(p=>[p.id,p])),n=cn(e),r=new Map(n.map((p,c)=>[p,c])),a=new Int32Array(n.length+1),o=new Map,i=new Set;for(let p of e.edges){let c=r.get(p.from),y=r.get(p.to);if(c===void 0||y===void 0||c===y)continue;i.add(`${p.from}>${p.to}`).add(`${p.to}>${p.from}`);let[k,b]=c<y?[c,y]:[y,c];a[k+1]++,a[b]--;let[m,l]=c<y?[p.from,p.to]:[p.to,p.from];(o.get(m)??o.set(m,new Set).get(m)).add(l)}for(let p=1;p<a.length;p++)a[p]+=a[p-1];let s=e.nodes.filter(P).sort((p,c)=>p.stable.start-c.stable.start),u=new Set([s[0].id,s.at(-1).id]),d=s.map(p=>[p,r.get(p.id)]).filter(([p,c])=>u.has(p.id)||a[c]===0).sort(([p,c],[y,k])=>c-k||p.stable.start-y.stable.start),f=e.paths?.map(p=>{let c=new Map;return p.nodeIds.forEach((y,k)=>{c.has(y)||c.set(y,k)}),c}),g=[];for(let p=0;p+1<d.length;p++){let[c,y]=d[p],[k,b]=d[p+1],m=n.slice(y+1,b);if(m.length===0)continue;let l=new Map([[c.id,{min:0,max:0,n:1}]]);for(let H of[c.id,...m]){let K=l.get(H);if(K)for(let q of o.get(H)??[]){if(r.get(q)>b)continue;let G=q===k.id?0:t.get(q).length,F=l.get(q);l.set(q,{min:Math.min(F?.min??1/0,K.min+G),max:Math.max(F?.max??-1/0,K.max+G),n:Math.min(xn,K.n+(F?.n??0))})}}let x=f&&Ya(e,t,f,c.id,k.id),M=x?.n?x:void 0,L=M??l.get(k.id)??{min:0,max:0,n:0},h=x!==void 0&&x.left>0,R=c.stable.start+c.length,T=k.stable.start,N=[c.id,...m.filter(H=>P(t.get(H))),k.id],v=N.some((H,K)=>K>0&&!i.has(`${N[K-1]}>${H}`)),C=v||h,U=v&&!M;g.push({refName:c.stable.refName,start:R,end:T,segmentCount:m.length+2,pathCount:L.n,inversion:!1,shortestAlleleLength:U?T-R:L.min,longestAlleleLength:U?T-R:L.max,segments:[c,...m.map(H=>t.get(H)),k].map(H=>H.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:C,routes:M?.routes})}return g}function Ya(e,t,n,r,a){let o=new Map,i=1/0,s=-1/0,u=0;return e.paths.forEach((d,f)=>{let g=n[f].get(r),p=n[f].get(a);if(g===void 0||p===void 0){(g!==void 0||p!==void 0)&&u++;return}let c=d.nodeIds.slice(Math.min(g,p)+1,Math.max(g,p));p<g&&c.reverse();let y=0;for(let m of c)y+=t.get(m)?.length??0;let k=c.join(","),b=o.get(k)??{steps:c,bp:y,walks:[]};b.walks.push(d.name),o.set(k,b),i=Math.min(i,y),s=Math.max(s,y)}),o.size||u?{min:i,max:s,n:o.size,left:u,routes:[...o.values()]}:void 0}function Cr(e,t){let n=new Set(t),r=e.nodes.filter(i=>n.has(i.name)),a=new Set(r.map(i=>i.id)),o=e.paths?.map(i=>({...i,nodeIds:i.nodeIds.filter(s=>a.has(s))})).filter(i=>i.nodeIds.length>0);return{name:e.name,nodes:r,edges:e.edges.filter(i=>a.has(i.from)&&a.has(i.to)),...o?.length?{paths:o}:{},anchorPaths:e.anchorPaths,pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}function Br(e,t,n){let r=new Map;for(let o of e.nodes)if(P(o)){let{refName:i}=o.stable;if(n[o.id]?.length){let s=r.get(i)??r.set(i,{nodes:[],reach:0}).get(i);s.nodes.push(o),s.reach=Math.max(s.reach,o.length)}}for(let{nodes:o}of r.values())o.sort((i,s)=>i.stable.start-s.stable.start);let a=[];for(let o of t){let i=r.get(o.refName);if(!i)continue;let s=[],u,d=1/0,f=0,g=(o.start+o.end)/2,{nodes:p,reach:c}=i;for(let y=Zt(p,o.start-c);y<p.length&&p[y].stable.start<o.end;y++){let k=p[y],b=k.stable.start,m=b+k.length;if(m<=o.start)continue;let l=n[k.id];f+=Math.min(m,o.end)-Math.max(b,o.start);for(let L of o.exons){let h=Math.max(L.start,b),R=Math.min(L.end,m);if(R<=h)continue;let T=it(l,(h-b)/k.length,(R-b)/k.length);T.length===1&&T.push({...T[0]}),s.push(Ne(T))}let x=Math.min(Math.max(g,b),m),M=Math.abs(x-g);if(M<d){d=M;let[L]=it(l,(x-b)/k.length,(x-b)/k.length);u=L}}u&&a.push({gene:o,exons:s.join(""),at:u,covered:f/(o.end-o.start)})}return a}function Er(e,t){let n=new Set(e.nodes.filter(d=>P(d)&&d.stable.start<t.end&&d.stable.start+d.length>t.start).map(d=>d.id)),r=e.paths??[];if(n.size===0||r.length===0)return e;let a=new Map(e.nodes.map(d=>[d.id,d.length])),o=r.map(d=>{let f=-1,g=-1;return d.nodeIds.forEach((p,c)=>{n.has(p)&&(f<0&&(f=c),g=c)}),f<0?void 0:{first:f,last:g}});if(o.every((d,f)=>d?.first===0&&d.last===r[f].nodeIds.length-1))return e;let i=new Set,s=[],u=new Map;return r.forEach((d,f)=>{let g=o[f];if(g){let p=d.nodeIds.slice(g.first,g.last+1);for(let c of p)i.add(c);s.push({...d,nodeIds:p}),u.set(d.name,d.nodeIds.slice(0,g.first).reduce((c,y)=>c+(a.get(y)??0),0))}}),{...e,nodes:e.nodes.filter(d=>i.has(d.id)),edges:e.edges.filter(d=>i.has(d.from)&&i.has(d.to)),paths:s,pathVisits:e.pathVisits&&Ua(e.pathVisits,r,o,new Map(e.nodes.map(d=>[d.id,d.name]))),anchorPaths:e.anchorPaths&&Ka(e.anchorPaths,r,u)}}function Ua(e,t,n,r){let a=new Map,o=new Map;return t.forEach((i,s)=>{let u=W(i.name).name,d=n[s];i.nodeIds.forEach((f,g)=>{let p=r.get(f)??f,c=e.get(p);if(!c)return;let y=`${u} ${p}`,k=a.get(y)??0;for(;k<c.length&&c[k].path!==u;)k++;let b=c[k];if(a.set(y,k+1),b&&d&&g>=d.first&&g<=d.last){let m=o.get(p);m?m.push(b):o.set(p,[b])}})}),o}function Ka(e,t,n){let r=new Map;for(let a of t){let o=W(a.name).name;r.set(o,(r.get(o)??0)+1)}return e.map(a=>{let o=t.find(s=>W(s.name).name===a.name),i=o?n.get(o.name):void 0;return i&&r.get(a.name)===1?{...a,start:a.start+i}:a})}function qa(e,t){let n=e.indexOf(":"),r=e.indexOf(":",n+1);if(n!==-1&&r!==-1){let a=e.slice(0,n),o=e.slice(n+1,r),i=e.slice(r+1);o==="i"||o==="f"?t[a]=+i:o==="Z"&&(t[a]=i)}}function le(e){let t={};for(let n of e)qa(n,t);return t}function ft(e){let{SN:t,SO:n,SR:r}=e.tags;return typeof t=="string"&&typeof n=="number"&&typeof r=="number"?{refName:t,start:n,rank:r}:void 0}var Fr=62,Za=60;function Ja(e){let t=[],n="+",r=0;function a(o){o>r&&t.push({id:e.slice(r,o),strand:n})}for(let o=0;o<e.length;o++){let i=e.charCodeAt(o);(i===Fr||i===Za)&&(a(o),n=i===Fr?"+":"-",r=o+1)}return a(e.length),t}function yt(e){let t={nodes:[],links:[],paths:[],walks:[],header:[],id:""};for(let n of e.split(`
|
|
2
|
+
`)){let r=n.endsWith("\r")?n.slice(0,-1):n;if(r.startsWith("H")){let[,...a]=r.split(" ");t.header.push(le(a))}else if(r.startsWith("S")){let[,a,...o]=r.split(" "),i,s,u,d=!1,f=o[0]??"*";/^\d+$/.test(f)?(i=+f,s=o[1]??"*",u=o.slice(2)):(d=!0,s=f,i=s==="*"?0:s.length,u=o.slice(1));let g=le(u);d&&"LN"in g&&(i=+g.LN),t.nodes.push({id:a,length:i,sequence:s,tags:g})}else if(r.startsWith("E")){let[,,a,o,,,,,i,...s]=r.split(" ");a&&o&&t.links.push({source:a.slice(0,-1),target:o.slice(0,-1),strand1:a.at(-1),strand2:o.at(-1),cigar:i??"*",tags:le(s)})}else if(r.startsWith("L")){let[,a,o,i,s,u,...d]=r.split(" ");a&&i&&s&&t.links.push({source:a,target:i,strand1:o,strand2:s,cigar:u??"*",tags:le(d)})}else if(r.startsWith("W")){let[,a,o,i,s,u,d,...f]=r.split(" ");a&&o&&i&&s&&u&&d&&t.walks.push({sample:a,haplotype:+o,contig:i,start:s==="*"?-1:+s,end:u==="*"?-1:+u,segments:Ja(d),tags:le(f)})}else if(r.startsWith("P")){let[,a,o,...i]=r.split(" ");a&&o&&t.paths.push({name:a,path:o,rest:i})}}return t}function Qa(e){let t=new Map,n=new Map;function r(o,i){t.has(o)||t.set(o,i)}function a(o,i){r(o,i),n.set(o,(n.get(o)??0)+1)}for(let o of e.links)r(o.source,o.strand1==="-"?"-":"+"),r(o.target,o.strand2==="-"?"-":"+");for(let o of e.paths)for(let i of o.path.split(","))a(i.slice(0,-1),i.endsWith("-")?"-":"+");for(let o of e.walks)for(let i of o.segments)a(i.id,i.strand==="-"?"-":"+");return{canonical:t,traversals:n}}function ei(e){return[...e.paths.map(t=>({...W(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 ti(e){let t=e.tags.SM;if(typeof t!="string")return;let n=t.split(",").map(r=>r.trim()).filter(Boolean);return n.length>0?n:void 0}var ge=e=>typeof e=="number"&&e>0?e:void 0;function ni({tags:e,length:t}){let n=ge(e.RC)??ge(e.FC)??ge(e.KC);return ge(e.dp)??ge(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function ri(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:ft(e),samples:ti(e)}}function Vr(e,t="Imported GFA"){let n=[],r=[],{canonical:a,traversals:o}=Qa(e),i=c=>`${c}${a.get(c)??"+"}`;for(let c of e.nodes){let y=ni(c)??Math.max(o.get(c.id)??1,1);n.push(ri(c,a.get(c.id)??"+",y))}for(let c of e.links)r.push({from:i(c.source),to:i(c.target),fromStrand:c.strand1==="-"?"-":"+",toStrand:c.strand2==="-"?"-":"+"});let s=[],u=new Map,d=(c,y)=>[c,y].sort().join("--");function f(c,y){for(let k=0;k<c.length-1;k++){let b=d(c[k],c[k+1]);u.has(b)||u.set(b,new Set),u.get(b).add(y)}}for(let c of e.paths){let y=c.path.split(",").map(k=>i(k.slice(0,-1)));s.push({name:c.name,nodeIds:y}),f(y,c.name)}for(let c of e.walks){let y=c.segments.map(b=>i(b.id)),k=`${c.sample}#${c.haplotype}#${c.contig}`;s.push({name:k,nodeIds:y,sample:c.sample,haplotype:c.haplotype,contig:c.contig}),f(y,k)}for(let c of r){let y=u.get(d(c.from,c.to));y&&y.size>0&&(c.pathIds=[...y])}let g=new Map(e.nodes.map(c=>[c.id,c.length])),p=e.paths.length>0||e.walks.length>0?un(ei(e),c=>g.get(c)??0):void 0;return{name:t,nodes:n,edges:r,paths:s.length>0?s:void 0,anchorPaths:p?.anchorPaths,pathVisits:p?.pathVisits,anchoredBy:n.some(c=>c.stable)?"tags":void 0}}function Dr(e,t){let n=e.nodes.filter(b=>P(b)&&(t[b.id]?.length??0)>0);if(n.length<2)return t;let r=n.map(b=>{let m=t[b.id],l=m[Math.floor(m.length/2)];return{x:l.x,y:l.y,r:b.stable.start+b.length/2,w:b.length}}),a=r.reduce((b,m)=>b+m.w,0),o=r.reduce((b,m)=>b+m.x*m.w,0)/a,i=r.reduce((b,m)=>b+m.y*m.w,0)/a,s=r.reduce((b,m)=>b+m.r*m.w,0)/a,u=0,d=0;for(let b of r)u+=b.w*(b.x-o)*(b.r-s),d+=b.w*(b.y-i)*(b.r-s);let f=-Math.atan2(d,u),g=Math.cos(f),p=Math.sin(f),c={};for(let[b,m]of Object.entries(t))c[b]=m.map(l=>{let x=l.x-o,M=l.y-i;return{x:o+g*x-p*M,y:i+p*x+g*M}});let y=0,k=0;for(let b of e.nodes)if(!P(b))for(let m of c[b.id]??[])m.y>i?y++:k++;if(k>y)for(let b of Object.values(c))for(let m of b)m.y=2*i-m.y;return c}var Hr=30;function oi(e,t){let{opts:n}=t,r=new Map(t.nodes.map(p=>[p.id,Ge(n,p.length)])),a=p=>r.get(p)??n.minimumNodeLength,o=e.nodes.filter(P).sort((p,c)=>p.stable.start-c.stable.start),i=new Map,s=0;for(let p of o)i.set(p.id,{x:s,y:0}),s+=a(p.id)+n.edgeLength;let u=Me(e),d=new Map(o.map(p=>[p.id,0])),f=o.map(p=>p.id);for(let p of f){let c=i.get(p),y=d.get(p)+1;for(let k of u.get(p)??[])d.has(k)||(d.set(k,y),i.set(k,{x:c.x+a(p)/2,y:Hr*y}),f.push(k))}let g=0;for(let p of e.nodes)i.has(p.id)||i.set(p.id,{x:g++*s/e.nodes.length,y:Hr*3});return i}function Or(e,t){let n=oi(e,t);return t.nodes.map(r=>({...r,...n.get(r.id)}))}function Wr(e,t,n={}){let r=mn(Vr(yt(e),t),n.referencePath);if(r.nodes.length===0)throw new Error(`No graph segments in ${t}`);if(n.maxNodes!==void 0&&r.nodes.length>n.maxNodes)throw new Error(`Graph too large to draw: ${r.nodes.length.toLocaleString()} nodes (limit ${n.maxNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);return r}function ai(e,t,n){let r=e.nodes.some(P);return{graph:{nodes:r?Or(e,t):t.nodes,edges:e.edges},options:{quality:n.quality,linearLayout:n.linearLayout,...t.opts,...r?{rotateComponents:!1}:{}}}}function _r(e,t){let n=e.nodes.some(P);return`${t.quality}|${t.linearLayout}|${t.bubbleSpread}|${n}|${e.referencePath??""}`}async function jr(e,t,n){let r=wn(t.bubbleSpread),a=Tn(e),{result:o,duration:i}=await n(ai(a.graph,at(a.graph,r),t)),s=at(e,r),u=new Map(s.nodes.map(f=>[f.id,Ge(s.opts,f.length)])),d=An(o.nodePositions,a.runs,f=>u.get(f)??0);return{result:{...o,nodePositions:e.nodes.some(P)?Dr(e,d):d},duration:i}}function ii(e){let t=1/0,n=1/0,r=-1/0,a=-1/0;for(let o of Object.values(e))for(let i of o)t=Math.min(t,i.x),n=Math.min(n,i.y),r=Math.max(r,i.x),a=Math.max(a,i.y);return{minX:t,minY:n,maxX:r,maxY:a}}var D=40,si=1e-6,di=100;function he(e){return Math.max(si,Math.min(di,e))}function wt(e,t,n,r=D){let a=t-e.h*n;return r-e.minY*n+Math.max(0,a)/2}function $r(e,t,n,r,{minScale:a=0,padLeft:o=D,padTop:i=D}={}){let s=t-o-D,u=n-i-D;if(s<=0||u<=0||!(e.w>0||!r&&e.h>0))return;let d=e.w>0?s/e.w:1/0,f=e.h>0?u/e.h:1/0,g=he(Math.max(a,r?d:Math.min(d,f))),p=s-e.w*g;return{scale:g,translateX:o-e.minX*g+Math.max(0,p)/2,translateY:wt(e,u,r?1:g,i)}}function zr(e,t={}){let{minX:n,minY:r,maxX:a,maxY:o}=ii(e.nodePositions),{region:i}=t;e.referenceAxis&&i&&i.end>i.start&&(n=i.start,a=i.end);let s=t.extent??e.extent;return s&&(n=Math.min(n,s.minX??n),r=Math.min(r,s.minY??r),a=Math.max(a,s.maxX??a),o=Math.max(o,s.maxY??o)),{minX:n,minY:r,w:a-n,h:o-r}}function ci(e,t,n){let r=W(e.name).name,a=new Map,o=[],i=()=>({a:-1/0,b:1/0,detour:[],bp:0}),s=[i()];for(let u of e.nodeIds){let d=t.get(u);if(!d)continue;let f=a.get(d.name)??0;a.set(d.name,f+1);let g=n.get(`${r} ${d.name}`)?.[f]??ln(d),p=s.at(-1),c=o.at(-1);if(P(d)){let y=d.stable.start,k=y+d.length,b=g!==(d.stable.strand??"+"),m=c!==void 0&&p.detour.length===0;m&&!c.inverted&&!b&&c.end===y?c.end=k:m&&c.inverted&&b&&c.start===k?c.start=y:(o.push({start:y,end:k,inverted:b}),s.push(i()))}else p.detour.push({node:d,strand:g}),p.bp+=d.length}return o.forEach((u,d)=>{s[d].b=u.start,s[d+1].a=u.end}),{path:e,runs:o,gaps:s}}function kt(e,t){return Number.isFinite(e.a)&&Number.isFinite(e.b)&&e.b>=e.a&&Math.max(e.b-e.a,e.bp)<t}function Xr(e,t,n){let r=0,a=e.length;for(;r<a;){let o=r+a>>1;e[o]<=t?r=o+1:a=o}return r<e.length&&e[r]<n}function ui(e){let t=new Map;for(let n=1;n<e.length;n++){let r=e[n-1],a=e[n],o=r.stable.start+r.length;o!==a.stable.start&&(t.set(o,"reference-gap"),t.set(a.stable.start,"reference-gap"))}return t}function pi(e,t,n){let r=(a,o)=>{Number.isFinite(a)&&!n.has(a)&&n.set(a,o)};for(let{runs:a,gaps:o}of e){let i=a[0],s=a.at(-1);i&&s&&(r(i.start,"walk-end"),r(s.end,"walk-end"));for(let u of a)u.inverted&&u.end-u.start>=t&&(r(u.start,"inversion"),r(u.end,"inversion"));for(let u of o)u.b<u.a?(r(u.a,"backward"),r(u.b,"backward")):kt(u,t)||(r(u.a,"variant"),r(u.b,"variant"))}for(let a=!0;a;){a=!1;let o=[...n.keys()].sort((s,u)=>s-u),i=e.flatMap(({runs:s,gaps:u})=>[...u.filter(d=>kt(d,t)).map(d=>[d.a,d.b]),...s.filter(d=>d.inverted&&d.end-d.start<t).map(d=>[d.start,d.end])]);for(let[s,u]of i)Xr(o,s,u)&&(a||=!n.has(s)||!n.has(u),r(s,"overlap"),r(u,"overlap"))}return n}function mi(e,t){let n=[],r=[],a=()=>{let o=r[0],i=r.at(-1);if(o&&i){let s=o.stable.start,u=i.stable.start+i.length,d=`${s}-${u}`;n.push({node:{id:`${d}+`,name:d,length:u-s,depth:0,stable:{refName:o.stable.refName,start:s,rank:0,strand:"+"}},members:r})}r=[]};for(let o of e)t.has(o.stable.start)&&a(),r.push(o);return a(),n}function Yr(e,t){let n=e.nodes.filter(P).sort((h,R)=>h.stable.start-R.stable.start),r=e.paths??[];if(n.length===0||r.length===0)return;let a=new Map(e.nodes.map(h=>[h.id,h])),o=gn(e),i=r.map(h=>ci(h,a,o)),s=pi(i,t,ui(n)),u=[...s.keys()].sort((h,R)=>h-R),d=mi(n,s),f=d.map(h=>h.node.stable.start),g=h=>{let R=0,T=f.length-1;for(;R<T;){let N=R+T+1>>1;f[N]<=h?R=N:T=N-1}return R},p=new Map,c=new Map;for(let h of d){p.set(h.node.id,h.members.map(R=>R.id));for(let R of h.members)c.set(R.id,h.node.id)}let y=new Map,k=h=>{let R=`${h.a} ${h.b} ${h.detour.map(N=>N.node.id+N.strand).join(",")}`,T=y.get(R);if(!T){let N=`r${y.size}`;T={id:`${N}+`,name:N,length:h.bp,depth:0,stable:{refName:n[0].stable.refName,start:Number.isFinite(h.a)?h.a:h.b,rank:1,strand:"+"}},y.set(R,T),p.set(T.id,h.detour.map(v=>v.node.id));for(let v of h.detour)c.has(v.node.id)||c.set(v.node.id,T.id)}return T},b=new Map,m=[],l=new Map,x=new Map,M=new Map;for(let{path:h,runs:R,gaps:T}of i){let N=[],v=[],C=!1,U=(G,F)=>{let V=N.at(-1);C&&V?.node===G&&V.strand===F||N.push({node:G,strand:F}),C=!0},H=G=>{C=!1,G.detour.length>0&&(U(k(G),"+"),C=!1)},K=G=>{(G.bp>0||G.b>G.a)&&v.push({start:G.a,end:G.b,bp:G.bp});let F=d[g(G.b>G.a?G.a:G.a-1)];for(let V of G.detour)c.has(V.node.id)||(c.set(V.node.id,F.node.id),p.get(F.node.id).push(V.node.id))};R.forEach((G,F)=>{let V=T[F];kt(V,t)&&!Xr(u,V.a,V.b)?K(V):H(V);let ie=g(G.start),Z=g(G.end-1),xe=G.end-G.start<t;if(G.inverted&&!xe){C=!1;for(let z=Z;z>=ie;z--)U(d[z].node,"-");C=!1}else{G.inverted&&v.push({start:G.start,end:G.end,bp:G.end-G.start,inverted:!0});for(let z=ie;z<=Z;z++)U(d[z].node,"+")}}),H(T.at(-1));let q=W(h.name).name,et=0;N.forEach(({node:G,strand:F},V)=>{M.set(G.id,(M.get(G.id)??0)+1);let ie=l.get(G.name)??[];ie.push({path:q,sample:h.sample??q,start:et,strand:F}),l.set(G.name,ie),et+=G.length;let Z=N[V+1];if(Z){let xe=`${G.id}${F} ${Z.node.id}${Z.strand}`,z=x.get(xe);z?z.pathIds.push(h.name):x.set(xe,{from:G.id,to:Z.node.id,fromStrand:F,toStrand:Z.strand,pathIds:[h.name]})}}),m.push({...h,nodeIds:N.map(G=>G.node.id)}),b.set(h.name,v)}let L=[...d.map(h=>h.node),...y.values()].filter(h=>M.has(h.id)).map(h=>({...h,depth:M.get(h.id)}));return{graph:{...e,nodes:L,edges:[...x.values()],paths:m,pathVisits:l,reads:void 0},members:p,coarseOf:c,deviations:b,cuts:s}}var li=e=>e.bp1>e.bp0;function Ur(e,t){let n=e.filter(li);if(n.length===0){let o=e[0];return o?[{tx:o.x0,sx:t(o.bp0)}]:[]}let r=n.map(o=>({c:o,s0:t(o.bp0),s1:t(o.bp1),trimLeft:0,trimRight:0}));for(let o=0;o+1<r.length;o++){let i=r[o],s=r[o+1],d=Math.min(s.c.x0-i.c.x1,24)-(s.s0-i.s1);if(d>0){let f=(i.s1-i.s0)/2,g=(s.s1-s.s0)/2,p=Math.min(d/2,f),c=Math.min(d-p,g);p=Math.min(d-c,f),i.trimRight=p,s.trimLeft=c}}let a=[];for(let{c:o,s0:i,s1:s,trimLeft:u,trimRight:d}of r)a.push({tx:o.x0,sx:i+u},{tx:o.x1,sx:s-d});return a}function Kr(e,t){let n=e.length;if(n===0)return t;let r=e[0],a=e[n-1];if(t<=r.tx)return r.sx+(t-r.tx);if(t>=a.tx)return a.sx+(t-a.tx);let o=0,i=n-1;for(;i-o>1;){let f=o+i>>1;e[f].tx<=t?o=f:i=f}let s=e[o],u=e[i],d=u.tx-s.tx;return d>0?s.sx+(t-s.tx)/d*(u.sx-s.sx):s.sx}var gi=.05,Fe=9;function hi(e,t){let{minY:n,maxY:r}=e.layout.bounds,a=r-n;return e.columns&&a>0?Math.max(gi,Math.min(1,t/a)):1}function qr(e,t){let{scaleX:n,translateX:r,translateY:a}=t,o=t.scaleY*hi(e,t.usableHeight),i=u=>(u-e.yOffset)*o+a,{columns:s}=e;if(s){let u=Ur(s,d=>d*n+r);return{x:d=>Kr(u,d),y:i,yScale:o}}return{x:u=>u*n+r,y:i,yScale:o}}function Zr(e,{x:t,y:n},r,a){let o=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-Fe)<=r&&r<=t(i.x+i.pixelWidth+Fe)&&n(i.y-Fe)<=a&&a<=n(i.y+i.contentHeight+Fe)&&(o=i.name)}),o}function Ve(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function Jr(e,t,n,r){return{minX:-e.translateX/t.scaleX,minY:-e.translateY/t.scaleY,maxX:(n-e.translateX)/t.scaleX,maxY:(r-e.translateY)/t.scaleY}}function Qr(e,t){let n=(e.maxX-e.minX)*t,r=(e.maxY-e.minY)*t;return{minX:e.minX-n,minY:e.minY-r,maxX:e.maxX+n,maxY:e.maxY+r}}function eo(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}function to(e,t,n,r,a){let o=he(e.scale*t),i=o/e.scale;return{scale:o,translateX:n-(n-e.translateX)*i,translateY:a?e.translateY:r-(r-e.translateY)*i}}function no(e){return e.referencePath?e.paths?.find(t=>W(t.name).name===e.referencePath):void 0}function bi(e,t){let n=e.paths?.find(g=>g.name===t);if(!n)return;let r=new Map(e.nodes.map(g=>[g.id,g])),a=new Map;e.edges.forEach((g,p)=>{a.set(`${g.from}>${g.to}`,p)});let o=new Set;for(let g=1;g<n.nodeIds.length;g++){let p=n.nodeIds[g-1],c=n.nodeIds[g],y=a.get(`${p}>${c}`)??a.get(`${c}>${p}`);y!==void 0&&o.add(y)}let i=g=>r.get(g)?.length??0,s=n.nodeIds.reduce((g,p)=>g+i(p),0),u=new Map,d=0;for(let g of n.nodeIds){let p=i(g);u.has(g)||u.set(g,s>0?(d+p/2)/s:0),d+=p}let f=no(e);return{name:t,reference:f===n,nodeIds:new Set(n.nodeIds),edgeIndexes:o,progress:u,steps:n.nodeIds.length,bp:s,referenceBp:f&&f!==n?f.nodeIds.reduce((g,p)=>g+i(p),0):void 0}}function fi(e,t,{field:n,scheme:r},a){let o=new Map,i=new Map(e.nodes.map(c=>[c.id,c])),s=W(t.name).name,u=no(e),d=u?W(u.name).name:void 0,f=e.paths.find(c=>c.name===t.name),g=new Map;for(let c of f.nodeIds)g.set(c,(g.get(c)??0)+1);let p=(c,y)=>e.pathVisits?.get(c)?.find(k=>k.path===y)?.strand;for(let[c,y]of t.progress){let k=i.get(c),b;if(n==="progress")b=y;else if(n==="visits")b=(Math.min(g.get(c)??1,4)-1)/3;else if(n==="reference"){let m=a?.midpoints.get(c);b=a&&m!==void 0&&!(k?.stable&&k.stable.rank>0)?(m-a.start)/a.span:void 0}else if(k){let m=p(k.name,s),l=p(k.name,d);b=m&&l?m===l?dt.same:dt.reversed:void 0}o.set(c,b===void 0?tr:er(r,b))}return o}function ro(e,t,n){let r=new Set,a=t.filter(s=>!r.has(s.walk)&&r.add(s.walk)).flatMap(s=>{let u=bi(e,s.walk);return u?[{walk:u,layer:s}]:[]}).sort((s,u)=>Number(u.walk.reference)-Number(s.walk.reference));if(a.length===0)return;let o=0,i=a.map(({walk:s,layer:u})=>{let d=Qn(u,s.reference,s.reference?0:o++);return{...s,encoding:d,colors:fi(e,s,d,n)}});return{walks:i,nodeIds:new Set(i.flatMap(s=>[...s.nodeIds])),edgeIndexes:new Set(i.flatMap(s=>[...s.edgeIndexes])),names:new Set(i.map(s=>s.name))}}var te=S(j(),1),Fo=S(dn(),1),A=S(se(),1),Vo=S(Ca(),1),w=S(X(),1),Do=S(ao(),1),Ho=S(Va(),1),B=S(sn(),1);var xt=new Set(["Gff3TabixAdapter","Gff3Adapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),yi=/gene|refseq|gencode|ensembl|annotation/i;function io(e,t){if(t)return e.find(r=>r.trackId===t);let n=e.filter(r=>xt.has(r.adapterType));return n.find(r=>yi.test(`${r.trackId} ${r.name??""}`))??n[0]}function $(e,t){return typeof e.get=="function"?e.get(t):e[t]}function so(e,t){$(e,"type")==="exon"&&t.push({start:$(e,"start"),end:$(e,"end")});let r=$(e,"subfeatures");for(let a of r??[])so(a,t)}function wi(e){let t=[...e].sort((r,a)=>r.start-a.start),n=[];for(let r of t){let a=n.at(-1);a&&r.start<=a.end?a.end=Math.max(a.end,r.end):n.push({...r})}return n}function co(e){let t=[];for(let n of e){let r=$(n,"gene_name")??$(n,"name")??$(n,"id"),a=$(n,"start"),o=$(n,"end");if(!r||!(o>a))continue;let i=[];so(n,i),t.push({name:r,refName:$(n,"refName"),start:a,end:o,strand:$(n,"strand")??0,exons:i.length?wi(i):[{start:a,end:o}]})}return t}function uo(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 po(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function De(e,t){let n=po(e.dynamicBlocks.contentBlocks.filter(o=>o.refName===t.refName&&o.assemblyName===t.assemblyName)),{bpPerPx:r}=e;if(!n||!(r>0))return;let a=n.offsetPx-e.offsetPx;return n.reversed?{scale:-1/r,translateX:a+n.end/r}:{scale:1/r,translateX:a-n.start/r}}function He(e){let t=po(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 St(e,t,n=!0){let r=e.end-e.start,a=n?Math.max(0,Math.min(e.span,(t-r)/2)):0,o=Math.max(e.regionStart,Math.floor(e.start-a)),i=Math.min(e.regionEnd,Math.ceil(e.end+a)),s=i-o-t;return s>0&&(o+=Math.floor(s/2),i-=Math.ceil(s/2)),{refName:e.refName,assemblyName:e.assemblyName,start:o,end:i}}function mo(e,t,n=!0){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;if(n)return e.start<=t.start+1&&t.end<=e.end+1;let r=St(t,1/0,!1);return Math.abs(e.start-r.start)<1&&Math.abs(e.end-r.end)<1}var Q=S(X(),1);function lo(e){return t=>e.includes(t)?t:void 0}function Mt(e){return Q.types.snapshotProcessor(Q.types.maybe(Q.types.enumeration(e)),{preProcessor:lo(e)})}function Rt(e,t){return Q.types.snapshotProcessor(Q.types.optional(Q.types.enumeration(e),t),{preProcessor:lo(e)})}var Tt=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),ki=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function go(e,t){return t?e.find(r=>r.trackId===t):e.filter(r=>Tt.has(r.adapterType)).find(r=>ki.test(`${r.trackId} ${r.name??""}`))}function be(e,t){return typeof e.get=="function"?e.get(t):e[t]}var ho=/^\w+=[^;]*(;\w+=[^;]*)*$/;function xi(e){let t=be(e,"name");if(!(typeof t!="string"||!ho.test(t)))return Object.fromEntries(t.split(";").map(n=>{let r=n.indexOf("=");return[n.slice(0,r),n.slice(r+1)]}))}function Y(e,t){let n=be(e,t);return n!==void 0?n:be(e,"INFO")?.[t]??xi(e)?.[t]}var bo=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],Si=["RUL","period","PERIOD","consensusSize","unit","unitLength"],Mi=["TRID","REPID","VARID","ID","name","id"];function Oe(e,t){for(let n of t){let r=Y(e,n),a=String((Array.isArray(r)?r[0]:r)??"").split(",")[0].trim();if(a!==""&&a!==".")return a}}var fo=/^[ACGTURYSWKMBDHVN]+$/i;function Ri(e){let t=Number(Oe(e,Si));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=Oe(e,bo);return n&&fo.test(n)?n.length:void 0}function ee(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let r=n===""||n===null||n===void 0?NaN:Number(n);return Number.isFinite(r)?r:void 0})}function Gt(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let r=String(n??"").trim();return r===""||r==="."?void 0:r})}var Lt="<CNV:TR>";function Li(e){let t=Gt(be(e,"ALT"));if(!t.includes(Lt))return;let n=ee(Y(e,"RN")),r=Gt(Y(e,"RUS")),a=ee(Y(e,"RUL")),o=ee(Y(e,"RUC")),i=ee(Y(e,"RB")),s=0;return t.map((u,d)=>{let f=n[d]??(u===Lt?1:0),g=0,p=0;for(let c=0;c<f;c++,s++){let y=r[s],k=a[s]??(y&&fo.test(y)?y.length:void 0),b=o[s],m=i[s]??(k&&b!==void 0?Math.round(k*b):void 0);m!==void 0&&(g+=m,p++)}return u===Lt&&f>0&&p===f?g:void 0})}function Gi(e,t,n){let r=e?.includes("|");return(e??"").split(/[/|]/).flatMap((a,o)=>{let i=Number(a),s=i>0?t[i-1]:n;return!Number.isInteger(i)||s===void 0?[]:[{bp:s,...r?{haplotype:o+1}:{}}]})}function Ti(e,t,n){let r=be(e,"samples"),a={};for(let[o,i]of Object.entries(r??{})){let s=ee(i.SD),u=ee(i.AL).flatMap((f,g)=>f!==void 0&&f>0?[s[g]===void 0?{bp:f}:{bp:f,spanningReads:s[g]}]:[]),d=u.length>0||!t?u:Gi(Gt(i.GT)[0],t,n);d.length>0&&(a[o]=d)}return Object.keys(a).length>0?a:void 0}function Ai(e,t){let n=Y(e,"start"),r=Y(e,"end"),a=ee(Y(e,"SVLEN"))[0];return t&&a!==void 0?{start:n+1,end:n+1+a}:{start:n,end:r}}function yo(e){let t=[];for(let n of e){let r=Li(n),{start:a,end:o}=Ai(n,r!==void 0),i=Ri(n);if(!(o>a)||i===void 0)continue;let s=Y(n,"refName"),u=Oe(n,bo),d=Oe(n,Mi);t.push({key:`${s}:${a}-${o}`,name:(d&&!ho.test(d)?d:void 0)??(u&&u.length<=12?`(${u})n`:`${s}:${(a+1).toLocaleString()}-${o.toLocaleString()}`),refName:s,start:a,end:o,unit:i,motif:u,calls:Ti(n,r,o-a)})}return t.sort((n,r)=>n.start-r.start)}function We(e){return typeof e=="object"&&e!==null}function Ni(e){return We(e)&&typeof e.get=="function"}function Pi(e){let t=Ni(e)?e.get("name"):We(e)?e.name:void 0;return typeof t=="string"?t:void 0}function wo(e){let t;if(We(e)&&We(e.hoverPosition)){let{refName:n,coord:r,coord0:a,assemblyName:o}=e.hoverPosition;typeof n=="string"&&typeof r=="number"&&(t={refName:n,coord:typeof a=="number"?a:r-1,assemblyName:typeof o=="string"?o:void 0,featureName:Pi(e.hoverFeature)})}return t}function ko(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function xo({hover:e,nodes:t}){let n,r;for(let a of t)a.name===e.featureName?n=a.id:r===void 0&&P(a)&&e.coord>=a.stable.start&&e.coord<a.stable.start+a.length&&(r=a.id);return n??r??null}var At=S(j(),1);function So(e){return typeof e=="object"&&e!==null}function Ii(e){return So(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function fe(e){return e.flatMap(t=>So(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function ye({views:e,connectedViewId:t,assemblyName:n}){let r=fe(e).filter(o=>Ii(o)).filter(o=>o.assemblyNames.includes(n));return r.find(o=>o.id===t)??(r.length===1?r[0]:void 0)}function Ro(e,t,n){n.catch(r=>{console.error(`[GraphGenomeView] ${t}`,r),e.notifyError?.(`${t}: ${r}`,r)})}var vi=1e3;function Nt(e,t=vi){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 Lo(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 Go({session:e,location:t,assembly:n,connectedViewId:r,tracks:a=[]}){let o=ye({views:e.views,connectedViewId:r,assemblyName:n}),i;return o?(Ro(e,`Could not show ${n} ${ce(t)}`,Promise.resolve(o.navToLocString(ve(t),n))),i=o.id):i=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${ce(t)}`,init:{assembly:n,loc:ve(t),tracks:a}}).id,i}function To({session:e,location:t,assembly:n,connectedViewId:r}){let a=ye({views:e.views,connectedViewId:r,assemblyName:n});return a?.addToHighlights?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),a!==void 0}function Mo(e,t){if(t===void 0)return[];let n=e.tracks.find(a=>(0,At.readConfObject)(a,"trackId")===t),r=n?(0,At.readConfObject)(n,"assemblyNames"):[];return Array.isArray(r)?r.filter(a=>typeof a=="string"):[]}function Ao({session:e,contributors:t,trackId:n,graphTrackId:r}){let a=Mo(e,r),o=Mo(e,n),i=t.filter(d=>o.includes(d.sample)),s=i.length>=2?i:t,u={init:{views:s.map(d=>({assembly:d.sample,loc:ve(d),...r!==void 0&&a.includes(d.sample)?{tracks:[r]}:{}})),tracks:n?s.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?Ro(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",u)):e.addView("LinearSyntenyView",u)}var _e=S(j(),1),Ci="FeatureTrack";function No({session:e,assemblyName:t,first:n}){let r=[];for(let a of e.tracks){let o=(0,_e.readConfObject)(a,"type"),i=(0,_e.readConfObject)(a,"assemblyNames"),s=(0,_e.readConfObject)(a,"trackId");o===Ci&&Array.isArray(i)&&i.includes(t)&&typeof s=="string"&&s!==n&&r.push(s)}return n?[n,...r]:r}var je=S(j(),1),Po=S(Ba(),1),$e=S(X(),1),Bi="SyntenyTrack",Ei="Synteny adapters";function Fi(e){if((0,je.readConfObject)(e,"type")===Bi)return!0;let t=e.adapter?.type;if(typeof t!="string"||!(0,$e.isStateTreeNode)(e))return!1;let{pluginManager:n}=(0,$e.getEnv)(e);return!!n?.hasAdapterType(t)&&n.getAdapterType(t).adapterMetadata?.category===Ei}function Io(e,t){let n=new Set(t),r=[];for(let a of e.tracks){let o=(0,je.readConfObject)(a,"assemblyNames"),i=(0,je.readConfObject)(a,"trackId");if(Fi(a)&&typeof i=="string"&&Array.isArray(o)){let s=o.filter(u=>n.has(u)).length;s>=2&&r.push({trackId:i,name:(0,Po.getTrackName)(a,e),coverage:s})}}return r.sort((a,o)=>o.coverage-a.coverage)}var Di=600,Pt=160,Hi=5,vo=new Set(["tubemap","tubemapref"]),Oi=[{bp:0,label:"None"},{bp:3,label:"Under 3 bp"},{bp:10,label:"Under 10 bp"},{bp:50,label:"Under 50 bp, leaving structural variants"},{bp:1e3,label:"Under 1 kb"}],Co=".segs.bed.gz";function Wi(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(Co)?n.slice(0,-Co.length):void 0}var Bo=1.4,_i=1.6,ji=150,$i=1,zi={nodeStrokes:[],nodeStrokeRuns:new Map,arrows:[],arrowRuns:new Map,edgeCurves:[],edgeCurveRuns:new Map};function we(...e){}var Xe=5e6;function ne(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var Xi=2e4;function Eo(e){return e.builtViewport!==void 0&&e.paintedViewport===e.builtViewport&&e.builtViewport.viewportDirty===e.viewportDirty&&!e.viewportRebuildPending}function It(e){return Jr(e,e.axisScale,e.paneWidth,e.canvasHeight)}var ze=new WeakMap,Yi=4;function Ui(e){let t=ze.get(e);return t||(t=new Map,ze.set(e,t)),t}function Ki(e,t){let n=ze.get(e);n&&e!==t&&ze.set(t,n)}function qi(e,t,n){e.size>=Yi&&e.delete(e.keys().next().value),e.set(t,n)}function Ye(){return w.types.compose("GraphPane",(0,Do.RenderLifecycleMixin)(),w.types.model({layoutQuality:w.types.optional(w.types.number,2),linearLayout:w.types.optional(w.types.boolean,!1),layoutMode:Mt(Le),colorScheme:Mt(Pe),bubbleSpread:Rt(yn,"auto"),nodeWidth:Rt(In,"depth"),showBubbles:w.types.optional(w.types.boolean,!1),showDeletionEdges:w.types.optional(w.types.boolean,!1),showGenes:w.types.optional(w.types.boolean,!0),showReferenceStrip:w.types.optional(w.types.boolean,!0),tubeMapFold:w.types.optional(w.types.number,0),geneTrackId:w.types.optional(w.types.string,""),repeatTrackId:w.types.optional(w.types.string,""),repeatKey:w.types.optional(w.types.string,""),walkRowSamples:w.types.maybe(w.types.frozen()),walkLayers:w.types.optional(w.types.frozen(),[]),referencePath:w.types.optional(w.types.string,""),showPerf:w.types.optional(w.types.boolean,!1),contigThickness:w.types.optional(w.types.number,6),connectorThickness:w.types.optional(w.types.number,2),darkMode:w.types.optional(w.types.boolean,!1),scale:w.types.optional(w.types.number,1),translateX:w.types.optional(w.types.number,0),translateY:w.types.optional(w.types.number,0),drawPaths:w.types.optional(w.types.boolean,!1),paneHeight:w.types.maybe(w.types.number),maxGraphNodes:w.types.optional(w.types.number,Xi),colorDomain:w.types.maybe(w.types.frozen()),connectedViewId:w.types.maybe(w.types.string)})).volatile(()=>({graph:void 0,graphRegion:void 0,loadedReferencePath:void 0,layoutResult:void 0,legendSize:{width:0,height:0},indexBubbles:void 0,geneFeatures:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredBubble:null,pointerInPane:!1,hoveredEdge:null,selectedNode:null,viewportDirty:0,positionsVersion:0,geometryVersion:0,builtViewport:void 0,paintedViewport:void 0,draggingNode:null,isPanning:!1,viewportOwner:"fit",viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,readsShown:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0,viewportRebuildPending:!1})).views(e=>({get defaultLayoutMode(){return"force"},get defaultColorScheme(){return"auto"},get hasPendingSource(){return!1},get canRetryLoad(){return!1},get sourceTrack(){try{return(0,A.getContainingTrack)(e).configuration}catch{return}}})).views(e=>({get chosenLayoutMode(){return e.layoutMode??e.defaultLayoutMode},get chosenColorScheme(){return e.colorScheme??e.defaultColorScheme}})).views(e=>({get paneWidth(){return(0,A.getContainingView)(e).width},get drawnGraph(){return e.layoutResult?.tubeMap?.coarse?.graph??e.graph}})).views(e=>({get nodeById(){if(e.drawnGraph){let t=new Map;for(let n of e.drawnGraph.nodes)t.set(n.id,n);return t}},get nodeLengths(){let t=new Map;for(let n of e.drawnGraph?.nodes??[])t.set(n.id,n.length);return t},get nodeCount(){return e.graph?.nodes.length??0},get edgeCount(){return e.graph?.edges.length??0},get pathCount(){return e.graph?.paths?.length??0},get hasGraph(){return e.graph!==void 0},get geometryPainted(){return Eo(e)},get showLoading(){return e.error===void 0&&(e.isLoading||e.hasPendingSource||e.graph!==void 0&&!Eo(e))},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?fn(e.chosenLayoutMode,e.graph):!1},get canAnchorLayout(){return e.graph?.nodes.some(t=>t.stable?.rank===0)??!1},get anchorPaths(){return e.graph?.anchorPaths??[]},get pathLegend(){let t=e.graph?.paths,n=e.layoutResult?.tubeMap;return(e.drawPaths||n)&&t&&nt(t.length)?rt(t,n?.pathColors):[]},get walkChoices(){let t=e.graph?.paths;return t?.length?rt(t):[]},get effectiveDrawPaths(){return e.drawPaths&&nt(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get rampDomain(){return e.colorDomain??e.graphRegion},get walkLift(){let{graph:t}=e;return t&&e.walkLayers.length>0?ro(t,e.walkLayers,st(t,this.rampDomain)):void 0},get effectiveColorScheme(){return Ln(e.chosenColorScheme,e.graph)},get nodePositions(){return e.layoutResult?.nodePositions},get labelsNodeSizes(){return!e.layoutResult?.tubeMap},get rowLabels(){return e.layoutResult?.rowLabels??[]},get alleleDeletions(){return e.layoutResult?.alleleDeletions??[]},get pixelRows(){return e.layoutResult?.pixelRows??!1},get zoomPercent(){return`${(e.scale*100).toFixed(1)}%`},get isDefaultViewport(){return e.scale===1&&e.translateX===0&&e.translateY===0}})).views(e=>({get poppedFrom(){return e.popStack.at(-1)},get derivedBubbles(){return e.graph?vr(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get sourceAdapter(){let t=e.sourceTrack;return t?(0,te.readConfObject)(t,"adapter"):void 0},get sourceTrackId(){let t=e.sourceTrack;return t?(0,te.readConfObject)(t,"trackId"):void 0},get assemblyTrackChoices(){let t=e.graphRegion;return t?(0,A.getSession)(e).tracks.filter(n=>(0,te.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,te.readConfObject)(n,"name"),adapterType:(0,te.readConfObject)(n,"adapter").type})):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>xt.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>Tt.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return go(e.repeatTrackChoices,e.repeatTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)},get backbone(){return e.graph?Qt(e.graph):void 0},assemblySpellings(t){let{assemblyManager:n}=(0,A.getSession)(e),r=n.has(t)?n.get(t):void 0,a=e.sourceAdapter?.assemblyNameToPanSN??{},o=[t,...r?[r.name,...r.aliases]:[]];return{name:t,aliases:[...o,...o.flatMap(i=>a[i]??[])]}},get drawsLoadedReference(){let t=e.graph;return t?.anchoredBy==="tags"||t?.referencePath!==void 0&&t.referencePath===e.loadedReferencePath}})).views(e=>({get geneAssembly(){let t=e.graphRegion;return t?e.assemblySpellings(t.assemblyName):void 0}})).views(e=>({get backboneGenes(){let{backbone:t,geneAssembly:n,geneFeatures:r}=e,a=e.drawsLoadedReference||n!==void 0&&en(t,[n])!==void 0;return t&&r&&a?nn(r,t):void 0}})).views(e=>({get nodeNeighbors(){return e.drawnGraph?Me(e.drawnGraph):void 0},get nodeInk(){return vn(e.drawnGraph,e.nodeById,e.contigThickness,e.nodeWidth)},get deletions(){return e.graph&&e.chosenLayoutMode!=="walkrows"&&!e.layoutResult?.tubeMap?Gn(e.graph):[]},get walkRowBars(){if(e.chosenLayoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?ot(e.graph,t,t.unit):ot(e.graph,e.graphRegion);if(!n)return;let r=e.walkRowSamples,a=r?n.rows.filter(s=>r.includes(s.sample)).sort((s,u)=>r.indexOf(s.sample)-r.indexOf(u.sample)||s.label.localeCompare(u.label)):n.rows,[o,...i]=nr([n.reference,...a],t?.calls);return{...n,reference:o,rows:i}},get drawnRowLabels(){let t=this.walkRowBars;return t?[t.reference,...t.rows].map((n,r)=>({label:n.label,y:r*20})):e.rowLabels},get fitPadLeft(){return Math.max(D,...this.drawnRowLabels.map(t=>Nn(t.label,0).x1+6))},get genePins(){we(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&e.chosenLayoutMode!=="walkrows"&&!e.layoutResult?.tubeMap&&e.graph&&e.backboneGenes&&t?Br(e.graph,e.backboneGenes,t):[]},get bubbleHalos(){we(e.positionsVersion);let t=e.layoutResult?.nodePositions;if(!e.showBubbles||e.chosenLayoutMode==="walkrows"||e.layoutResult?.tubeMap||!e.graph||!t)return[];let n=new Map(e.walkChoices.map(r=>[r.name,r.label]));return Ir(e.graph,e.bubbles,t,r=>n.get(r)??r,e.repeatArrays)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.graph&&!e.layoutResult?.tubeMap?st(e.graph,e.rampDomain):void 0},get assemblyNames(){let t=e.graphRegion;return t?[t.assemblyName]:[]},get scaleX(){return Ve(e.scale,e.pixelRows).scaleX},get scaleY(){return Ve(e.scale,e.pixelRows).scaleY},get axisScale(){return Ve(e.scale,e.pixelRows)},get layoutBounds(){let t=e.layoutResult,n=this.walkRowBars;return t?zr(t,{region:e.popStack.length===0?e.graphRegion:void 0,extent:n&&t.extent?hn(n):void 0}):void 0}})).views(e=>({get geneTrack(){return io(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},nodeSpan(t){let{nodeById:n,nodeNeighbors:r}=e;return n&&r?Re({nodeId:t,nodeById:n,neighbors:r}):void 0}})).views(e=>({get hoveredSpan(){let t=e.hoveredNode,n=e.hoveredBubble;return t!==null?e.nodeSpan(t):n?{start:n.start,end:n.end}:void 0}})).views(e=>({get hoverHighlight(){let t=e.graphRegion,n=e.hoveredSpan;return t&&n?{refName:t.refName,assemblyName:t.assemblyName,...n}:void 0}})).views(e=>({get contributingAssemblies(){let t=e.graph,n=t?qt(t):[];return t?rr(t,{maxGap:n.length>0?Jt(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,A.getSession)(e),n=e.sourceAdapter?.assemblyNameToPanSN,r=new Map(Object.entries(n??{}).map(([o,i])=>[i,o])),a=o=>o!==void 0&&t.has(o)?t.get(o)?.name??o:void 0;return o=>a(r.get(o))??a(o)}})).views(e=>({get launchableAssemblies(){return ar(Lo(e.contributingAssemblies,e.graphRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.graphRegion;return t!==void 0&&ye({views:[...(0,A.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),r=n?Ie(n):void 0,a=r?or(e.assemblyResolver,r):void 0,o=e.graphRegion,i=e.nodeById,s=e.nodeNeighbors,u=o&&i&&s?Re({nodeId:t,nodeById:i,neighbors:s}):void 0,d=o&&u?{sample:o.assemblyName,haplotype:void 0,refName:o.refName,...u}:void 0;return{own:r&&a?{location:Nt(r),assembly:a}:void 0,reference:o&&d?{location:Nt(d),assembly:o.assemblyName}:void 0,highlight:o&&d?{location:d,assembly:o.assemblyName}:void 0}}})).views(e=>({get host(){let t;try{t=(0,A.getContainingView)(e)}catch{return}return uo(t)?t:void 0}})).views(e=>({get xIsReferenceBp(){return e.layoutResult?.referenceAxis===!0&&_(e.chosenLayoutMode).cutMargins}})).views(e=>({get hostPlacesX(){let{host:t,graphRegion:n}=e;return t!==void 0&&t.initialized&&n!==void 0&&e.xIsReferenceBp&&e.popStack.length===0&&!t.dynamicBlocks.contentBlocks.some(r=>r.refName===n.refName&&r.reversed)}})).views(e=>({get hostFrame(){let{host:t,graphRegion:n}=e;return e.hostPlacesX&&t&&n?De(t,n):void 0},get tubeMapPicture(){let t=e.layoutResult?.tubeMap;return t?zn(t.layout):void 0},get tubeMapReference(){let t=e.layoutResult?.tubeMap;return t&&e.drawnGraph?Hn(e.drawnGraph,t.layout):void 0},get tubeMapDeviations(){let t=e.layoutResult?.tubeMap?.coarse,n=e.layoutResult?.tubeMap?.layout;return t&&n?$n(t.graph,n,t.deviations):[]},get tubeMapReferenceNodes(){let t=e.layoutResult;return t?.tubeMap&&!t.referenceAxis&&e.drawnGraph?Wn(e.drawnGraph,t.tubeMap.layout):void 0}})).views(e=>({get tubeMapGenes(){let t=e.tubeMapReference;return e.showGenes&&!e.host&&t&&e.backboneGenes?Un(t,e.backboneGenes):[]},get referenceStripApplies(){let{host:t,layoutResult:n}=e;return!!t?.initialized&&!!n&&!n.tubeMap&&!e.hostPlacesX&&e.chosenLayoutMode!=="walkrows"}})).views(e=>({get referenceStripBlocks(){let{graph:t}=e;return e.showReferenceStrip&&e.referenceStripApplies&&t?En(t,{colorScheme:e.effectiveColorScheme,referenceRamp:e.referenceRamp,walkNodes:e.walkLift?.nodeIds}):[]},get referenceStripFrame(){let{host:t,graphRegion:n}=e;return t?.initialized&&n?De(t,n):void 0}})).views(e=>({get referenceStripShown(){return e.referenceStripBlocks.length>0&&e.referenceStripFrame!==void 0},get referenceStripOverhangs(){let t=e.referenceStripFrame;if(!t||e.referenceStripBlocks.length===0)return!1;let{left:n,right:r}=Fn(e.referenceStripBlocks,t,e.paneWidth);return n>0||r>0}})).views(e=>({get referenceStripLit(){if(!e.referenceStripShown)return;let t=o=>({x:o.x*e.scaleX+e.translateX,y:o.y*e.scaleY+e.translateY}),n=e.hoveredNode===null?e.hoveredBubble:null;if(n){let o=e.bubbleHalos.find(i=>kn(i.bubble,n));return{start:n.start,end:n.end,anchor:o?t(o.labelAt):void 0}}let r=e.hoveredNode??e.selectedNode,a=r===null?void 0:e.nodeSpan(r);return a&&r!==null?{...a,anchor:Dn(e.nodePositions?.[r],t)}:void 0},referenceStripNodeAt(t,n){let r=e.referenceStripFrame;return e.referenceStripShown&&r?Vn(e.referenceStripBlocks,r,t,n):void 0},get referenceStripZonePx(){return e.referenceStripShown?Bn:0}})).views(e=>({get paneCeiling(){return Math.max(Pt,e.paneHeight??Di)},get fitPadTop(){let t=qn(e.tubeMapGenes);return D+Math.max(0,t-1)*Kn+e.referenceStripZonePx},get minFitScale(){let t=e.layoutBounds,n=e.layoutResult,r=n?.tubeMap?.layout.tracks[0]?.width;return t&&t.h>0&&r&&!n.referenceAxis?Math.min(Hi/r,(this.paneCeiling-this.fitPadTop-D)/t.h):0},get canvasHeight(){let t=e.layoutBounds,n=e.paneWidth-D*2,r=this.paneCeiling;return t?e.pixelRows?Math.min(r,Math.max(Pt,t.h+this.fitPadTop+D)):t.w>0&&n>0?Math.min(r,Math.max(Pt,t.h*Math.max(n/t.w,this.minFitScale)+this.fitPadTop+D)):r:r},get fittedTransform(){let t=e.layoutBounds;return t?$r(t,e.paneWidth,this.canvasHeight,e.pixelRows,{minScale:this.minFitScale,padLeft:e.fitPadLeft,padTop:this.fitPadTop}):void 0}})).views(e=>({get overlayLabels(){return Pn(e)},get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?qr(t,{scaleX:e.scaleX,translateX:e.translateX,scaleY:e.scaleY,translateY:e.translateY,usableHeight:e.canvasHeight-e.fitPadTop-D}):void 0}})).views(e=>({get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX?On(t):void 0},get connectorZoneBottom(){let t=e.tubeMapPicture,n=e.tubeMapFrame;return t&&n?n.y(t.bounds.minY)-2:0},get tubeMapConnectors(){let t=e.tubeMapReferenceNodes,n=e.tubeMapFrame,{host:r,graphRegion:a}=e,o=t&&n&&r?.initialized&&a?De(r,a):void 0;return t&&n&&o?_n(t,i=>i*o.scale+o.translateX,n.x,e.paneWidth):[]}})).views(e=>({get tubeMapKeys(){let t=e.layoutResult,n=t?.tubeMap?.layout.reads??[],r=e.tubeMapPicture,a=e.tubeMapFrame,o=r&&a&&Xn(a.yScale)?r.mismatches.filter(i=>Yn(i,{x:a.x,width:e.paneWidth})):[];return{logWidths:t?.tubeMap!==void 0&&!t.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:n.some(i=>!i.is_reverse),reverseReads:n.some(i=>i.is_reverse),mismatches:new Set(o.map(i=>i.kind))}},tubeMapNodeAt(t,n){let r=e.layoutResult?.tubeMap,a=e.tubeMapFrame;return(r&&a?Zr(r,a,t,n):null)??jn(e.tubeMapConnectors,e.connectorZoneBottom,t,n)??null}})).actions(e=>({setError(t){e.error=t,e.isLoading=!1,e.statusMessage=""},finishLoading(){e.isLoading=!1,e.statusMessage=""},setStatusMessage(t){e.statusMessage=t},setFetchMs(t){e.lastFetchMs=t},setLayoutMs(t){e.lastLayoutMs=t},setGeometryMetrics(t,n,r){e.lastGeometryMs=t,e.lastGeometryStrokeCount=n,e.builtViewport={...r,viewportDirty:e.viewportDirty},e.geometryVersion++},markPainted(){e.paintedViewport=e.builtViewport},setLayoutQuality(t){e.layoutQuality=t},setLinearLayout(t){e.linearLayout=t},setLayoutMode(t){e.layoutMode=t},setReferencePath(t){e.referencePath=t;let n=e.graph;if(n?.anchoredBy==="paths"){let r=tt(n,t);Ki(n,r),e.graph=r}},setDrawPaths(t){e.drawPaths=t},setShowPerf(t){e.showPerf=t},setColorScheme(t){e.colorScheme=t},setBubbleSpread(t){e.bubbleSpread=t},setNodeWidth(t){e.nodeWidth=t},setShowBubbles(t){e.showBubbles=t},setShowDeletionEdges(t){e.showDeletionEdges=t},setShowGenes(t){e.showGenes=t},setShowReferenceStrip(t){e.showReferenceStrip=t},setTubeMapFold(t){e.tubeMapFold=t},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setWalkLayers(t){e.walkLayers=t},liftWalks(t){let n=new Map(e.walkLayers.map(r=>[r.walk,r]));e.walkLayers=t.map(r=>n.get(r)??{walk:r})},toggleWalk(t){let n=e.walkLayers;e.walkLayers=n.some(r=>r.walk===t)?n.filter(r=>r.walk!==t):[...n,{walk:t}]},setWalkColor(t,n){e.walkLayers=e.walkLayers.map(r=>r.walk===t?{...r,color:{...r.color,...n}}:r)},setPaneHeight(t){e.paneHeight=t},setWalkRowSamples(t){e.walkRowSamples=t},pairWithLinearView(t){let n=e.connectedViewId;n!==void 0&&fe([...(0,A.getSession)(e).views]).some(a=>a.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=t},setHoveredBubble(t){e.hoveredBubble=t},setPointerInPane(t){e.pointerInPane=t},setLegendSize(t){e.legendSize=t},setHoveredEdge(t){e.hoveredEdge=t},setSelectedNode(t){e.selectedNode=t},setDraggingNode(t){e.draggingNode=t},setPanning(t){e.isPanning=t},stopDragging(){e.draggingNode=null,e.isPanning=!1},clearInteractionState(){e.hoveredNode=null,e.hoveredBubble=null,e.hoveredEdge=null,e.selectedNode=null,e.draggingNode=null,e.isPanning=!1},showNodeDetails(t){let n=e.nodeById?.get(t),r=e.nodeById,a=e.nodeNeighbors;if(n&&r&&a){let o=(0,A.getSession)(e),i=e.graphRegion,s=i?Re({nodeId:t,nodeById:r,neighbors:a}):void 0;(0,A.isSessionModelWithWidgets)(o)&&o.showWidget(o.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:Ie(n)?.sample,contributingHaplotype:Ie(n)?.haplotype,carriedBy:n.samples?.join(", "),...i&&s?{refName:i.refName,assemblyName:i.assemblyName,start:s.start,end:s.end}:{}}}))}},setTransform(t,n,r){let{host:a}=e;e.viewportOwner==="host"&&a?a.horizontalScroll(e.translateX-n):(e.viewportOwner="user",e.scale=he(t),e.translateX=n),e.translateY=r},zoom(t,n,r){let{host:a}=e;if(e.viewportOwner==="host"&&a){a.zoomTo(a.bpPerPx/t,n);return}e.viewportOwner="user";let o=to(e,t,n,r,e.pixelRows);e.scale=o.scale,e.translateX=o.translateX,e.translateY=o.translateY},setViewportDirty(){e.viewportRebuildPending=!1,e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){if(e.viewportOwner==="host"){let n=e.layoutBounds,r=e.canvasHeight-D*2;n&&r>0&&(e.translateY=wt(n,r,e.scaleY));return}let t=e.fittedTransform;t&&(e.scale=t.scale,e.translateX=t.translateX,e.translateY=t.translateY)},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>({hostTransform(t,n){let r=e.viewportOwner!=="host";r&&(e.viewportOwner="host"),e.scale=t,e.translateX=n,r&&e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.xIsReferenceBp?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportRebuildPending=!0,e.viewportDirtyTimer=setTimeout(()=>{(0,w.isAlive)(e)&&e.setViewportDirty()},ji)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,w.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(r,a,o){let i=e.layoutResult?.nodePositions;if(i?.[r]){for(let s of i[r])s.x+=a,s.y+=o;n()}},scheduleViewportDirty:t}}).actions(e=>{let t;function n(m){let{rpcManager:l}=(0,A.getSession)(e);return l.call((0,A.getRpcSessionId)(e),"GraphComputeLayout",{...m,signal:t?.signal,statusCallback:x=>{e.setStatusMessage((0,A.statusMessageText)(x)??"")}})}function r(m){return _r(m,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread})}function*a(m){let l=performance.now(),x=vo.has(e.chosenLayoutMode),M=e.graphRegion,L=x&&M?Er(m,M):m,h=x&&e.tubeMapFold>0&&!L.reads?Yr(L,e.tubeMapFold):void 0,R=_(e.chosenLayoutMode).run(h?.graph??L,e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(R)return{result:h&&R.tubeMap?{...R,tubeMap:{...R.tubeMap,coarse:h}}:R,duration:performance.now()-l};let T=Ui(m),N=r(m),v=T.get(N);if(v)return{result:v,duration:performance.now()-l};let C=yield jr(m,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread},n);return qi(T,N,C.result),C}let o=0;function*i(m){let l=++o,x=()=>e.graph===m&&l===o,M=t?.signal,L;try{L=yield*a(m)}catch(R){if(!x()||M?.aborted)return!1;throw R}let h=x();return h&&(e.layoutResult=L.result,e.setLayoutMs(L.duration)),h}function s(m,l){let x=m.anchorPaths;return m.anchoredBy==="paths"&&x?(tn(m,e.assemblySpellings(l.assemblyName))??pn(x,l.assemblyName))?.name:void 0}function*u(m,l,x,M=!1,L){let h=t?.signal;e.setStatusMessage("Parsing GFA");let R=Wr(m,l,{referencePath:e.referencePath||x?.assemblyName,maxNodes:e.maxGraphNodes}),T=x?s(R,x):void 0,N=!e.referencePath&&T!==void 0&&T!==R.referencePath?tt(R,T):R;if(L){e.setStatusMessage("Reading alignments");try{let{records:C,total:U}=yield L(N);N.reads=C,e.readsShown={shown:C.length,total:U}}catch(C){if(h?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",C),e.readsShown=void 0}if(h?.aborted)return}else e.readsShown=void 0;let v=M?e.selectedNode:null;e.graph=N,e.graphRegion=x,e.loadedReferencePath=T,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),v!==null&&e.nodeById?.has(v)&&(e.selectedNode=v),e.setStatusMessage("Computing layout"),yield*i(N)}let d=0;function f(){let m=++d;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>m===d,signal:t.signal}}function*g(m,l,x){let M=Wi(m);if(!(m.type!=="RgfaTabixAdapter"||M===void 0))try{let L=yield(0,A.getSession)(e).rpcManager.call((0,A.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${M}.bubbles.bed.gz`,baseUri:m.baseUri,assemblyNameToPanSN:m.assemblyNameToPanSN},regions:[l]});x()&&(e.indexBubbles=L.map(h=>({refName:l.refName,start:h.get("start"),end:h.get("end"),segmentCount:h.get("segmentCount"),pathCount:h.get("pathCount")??0,inversion:h.get("inversion"),shortestAlleleLength:h.get("shortestAlleleLength"),longestAlleleLength:h.get("longestAlleleLength"),segments:h.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(L){console.warn("[GraphGenomeView] no bubble index for this graph",L)}}function*p(m,l,x){let M=(0,A.getSession)(e),L=m?M.tracks.find(h=>h.trackId===m):void 0;if(L)try{return yield M.rpcManager.call((0,A.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:(0,te.readConfObject)(L,"adapter"),regions:[l]})}catch(h){console.warn(`[GraphGenomeView] no ${x} for this graph`,h);return}}function*c(m,l){let x=yield*p(e.geneTrack?.trackId,m,"genes");x&&l()&&(e.geneFeatures=co(x))}function*y(m,l){let x=yield*p(e.repeatTrack?.trackId,m,"repeats");x&&l()&&(e.repeatArrays=yo(x))}function*k(m,l,x){let{isLive:M,signal:L}=f();e.isLoading=!0,e.error=void 0;try{let h=typeof l=="string"?l:yield l(L);M()&&(yield*u(h,m,x))}catch(h){M()&&(console.error("[GraphGenomeView.loadWholeGFA]",h),e.error=h)}finally{M()&&e.finishLoading()}return M()}function b(){t?.abort(),t=void 0,d++,o++}return{clearGraph(){b(),e.graph=void 0,e.graphRegion=void 0,e.loadedReferencePath=void 0,e.layoutResult=void 0,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearInteractionState(),e.clearPerfMetrics()},stopLoad(){b(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){b()},loadGFA:(0,w.flow)(function*(m,l="Imported GFA"){yield*k(l,m)}),loadGFAFromLocation:(0,w.flow)(function*(m,l){e.setStatusMessage("Fetching GFA");let x=yield*k("uri"in m?m.uri.split("/").pop()??"GFA":"GFA",M=>(0,Vo.openLocation)(m).readFile({encoding:"utf8",signal:M}),l);l&&x&&e.graph&&(yield*y(l,()=>e.graphRegion===l))}),cutSubgraph:(0,w.flow)(function*(m,l,x={}){let{isLive:M,signal:L}=f();e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let h=performance.now(),R=yield(0,A.getSession)(e).rpcManager.call((0,A.getRpcSessionId)(e),"GetSubgraph",{adapterConfig:m,region:l,opts:x,signal:L});if(!M())return;if(e.setFetchMs(performance.now()-h),!R)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");if(yield*u(R,ce(l),l,!0,yr(m)?T=>(0,A.getSession)(e).rpcManager.call((0,A.getRpcSessionId)(e),"GetGraphReads",{adapterConfig:m,nodeNames:T.nodes.map(N=>N.name),signal:L}):void 0),!M())return;e.setStatusMessage("Reading annotations"),yield Promise.all([x.tier==="coarse"?void 0:(0,w.flow)(g)(m,l,M),(0,w.flow)(c)(l,M),(0,w.flow)(y)(l,M)])}catch(h){M()&&(console.error("[GraphGenomeView.cutSubgraph]",h),e.error=h)}finally{M()&&e.finishLoading()}}),reloadRepeats:(0,w.flow)(function*(){let m=e.graphRegion,l=e.repeatTrack?.trackId;m&&(yield*y(m,()=>e.graphRegion===m&&e.repeatTrack?.trackId===l))}),reloadGenes:(0,w.flow)(function*(){let m=e.graphRegion,l=e.geneTrack?.trackId;m&&(yield*c(m,()=>e.graphRegion===m&&e.geneTrack?.trackId===l))}),popBubble:(0,w.flow)(function*(m){let l=e.graph;if(!l)return;let x=Cr(l,Ae(m));if(x.nodes.length===0){(0,A.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:M}=f();e.popStack=[...e.popStack,{graph:l,layoutMode:e.chosenLayoutMode,label:l.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let L=`${Mn[Te(m,e.repeatArrays).kind]} at ${m.refName}:${m.start.toLocaleString()}`;e.graph={...x,name:L},e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*i(e.graph))&&e.finishLoading()}catch(h){M()&&(e.error=h,e.finishLoading())}}),unpopBubble:(0,w.flow)(function*(){let m=e.poppedFrom;if(m){e.popStack=e.popStack.slice(0,-1),e.graph=m.graph,e.layoutMode=m.layoutMode,e.indexBubbles=m.indexBubbles,e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*i(m.graph))&&e.finishLoading()}catch(l){e.error=l,e.finishLoading()}}}),recomputeLayout:(0,w.flow)(function*(){let m=e.graph;if(m){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*i(m))&&e.finishLoading()}catch(l){console.error("[GraphGenomeView.recomputeLayout]",l),e.error=l,e.finishLoading()}}})}}).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,w.addDisposer)(e,(0,B.autorun)(()=>{e.fittedTransform&&(0,B.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,w.addDisposer)(e,(0,B.autorun)(()=>{let r=wo((0,A.getSession)(e).hovered);(0,B.untracked)(()=>{let a=e.graphRegion,o=e.graph;a&&o&&!e.pointerInPane&&e.setHoveredNode(r&&ko(r,a)?xo({hover:r,nodes:o.nodes}):null)})})),(0,w.addDisposer)(e,(0,B.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredBubble(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,w.addDisposer)(e,(0,B.autorun)(()=>{let{scale:r}=e,a=It(e);if(n){n=!1;return}let o=(0,B.untracked)(()=>e.builtViewport);o?.scale===r&&eo(o.bounds,a)||e.scheduleViewportDirty()})),(0,w.addDisposer)(e,(0,B.autorun)(()=>{let r=e.currentRenderingBackend,a=e.hoveredNode,o=e.hoveredEdge,i=e.selectedNode;if(we(e.geometryVersion),r){let s=new Map;i!==null&&s.set(i,_i),a!==null&&a!==i&&s.set(a,Bo),r.setNodeHighlights(s),r.setEdgeHighlight(o,Bo),e.renderNow()}}))}e.attachRenderingBackend(t,()=>({upload:n=>{n.resize(e.paneWidth,e.canvasHeight);let r=e.nodeById;if(e.layoutResult?.tubeMap)return we(e.viewportDirty),n.uploadGeometry(zi),e.setGeometryMetrics(0,0,{scale:(0,B.untracked)(()=>e.scale),bounds:(0,B.untracked)(()=>It(e))}),!0;if(e.nodePositions&&e.graph&&r){we(e.viewportDirty,e.positionsVersion);let a=performance.now(),o=(0,B.untracked)(()=>Qr(It(e),$i)),i=Cn({nodePositions:e.nodePositions,graph:e.graph,nodeById:r,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:e.effectiveDrawPaths,nodeWidth:e.nodeWidth,highlight:e.walkLift,axis:(0,B.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:o,referenceRamp:e.referenceRamp,deletions:e.deletionEdgeIndexes,hiddenEdges:e.hiddenEdgeIndexes,version:e.positionsVersion});return n.uploadGeometry(i),e.setGeometryMetrics(performance.now()-a,i.nodeStrokes.length,{scale:(0,B.untracked)(()=>e.scale),bounds:o}),!0}return!1},render:n=>{if(!e.nodePositions)return!1;let r=(0,Ho.getDpr)();return n.updateTransform({scaleX:e.scaleX*r,scaleY:e.scaleY*r,translateX:e.translateX*r,translateY:e.translateY*r,dpr:r}),n.render(e.darkMode?[.12,.12,.12,1]:[1,1,1,1]),e.markPainted(),!0}}))}})).actions(e=>({switchLayout(t){return e.setLayoutMode(t),e.recomputeLayout()},cancelLoad(){e.canCancelLoad&&(e.stopLoad(),e.graph=void 0)},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user")}})).actions(e=>({showInLinearView(t){let n=(0,A.getSession)(e),r=t.assembly===e.graphRegion?.assemblyName,a=Go({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:No({session:n,assemblyName:t.assembly,first:r?e.sourceTrackId:void 0})});r&&e.pairWithLinearView(a)},highlightInLinearView(t){To({session:(0,A.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){Ao({session:(0,A.getSession)(e),contributors:e.launchableAssemblies,trackId:t,graphTrackId:e.sourceTrackId})}})).views(e=>({get syntenyLaunchTracks(){let t=e.launchableAssemblies.map(n=>n.sample);return t.length>=2?Io((0,A.getSession)(e),t):[]}})).views(e=>({graphMenuItems(){let t=e.walkChoices;return[{label:"Layout",subMenu:bn.map(n=>({type:"radio",label:n.label,checked:e.chosenLayoutMode===n.value,disabled:e.graph?!n.available(e.graph):!1,onClick:()=>{e.switchLayout(n.value)}}))},{label:"Color",subMenu:Rn.map(n=>({type:"radio",label:n.label,checked:e.chosenColorScheme===n.value,onClick:()=>{e.setColorScheme(n.value)}}))},...t.length>0?[{label:"Walk",subMenu:[{label:"None",onClick:()=>{e.setWalkLayers([])}},...t.map(n=>({type:"checkbox",label:n.label,checked:e.walkLayers.some(r=>r.walk===n.name),onClick:()=>{e.toggleWalk(n.name)}})),...(e.walkLift?.walks??[]).map(n=>({label:`Colour ${t.find(r=>r.name===n.name)?.label??n.name}`,subMenu:[{type:"subHeader",label:"Colour by"},...Zn.map(r=>({type:"radio",label:r.label,checked:n.encoding.field===r.value,onClick:()=>{e.setWalkColor(n.name,{field:r.value})}})),{type:"subHeader",label:"Palette"},...Jn.map(r=>({type:"radio",label:r.label,checked:n.encoding.scheme===r.value,onClick:()=>{e.setWalkColor(n.name,{scheme:r.value})}}))]}))]}]:[],...vo.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:Oi.map(({bp:n,label:r})=>({type:"radio",label:r,checked:e.tubeMapFold===n,disabled:n>0&&e.graph?.reads!==void 0,onClick:()=>{e.setTubeMapFold(n),e.recomputeLayout()}}))}]:[],...e.chosenLayoutMode==="walkrows"&&e.repeatChoices.length>0?[{label:"Repeat",subMenu:[{type:"radio",label:"Whole window",checked:e.repeatKey==="",onClick:()=>{e.setRepeatKey("")}},...e.repeatChoices.map(({key:n,name:r,unit:a})=>({type:"radio",label:`${r} \xB7 ${a.toLocaleString()} bp unit`,checked:e.repeatKey===n,onClick:()=>{e.setRepeatKey(n)}}))]}]:[],...e.hostPlacesX?[]:[{label:"Zoom in",onClick:()=>{e.zoom(1.5,e.paneWidth/2,e.canvasHeight/2)}},{label:"Zoom out",onClick:()=>{e.zoom(1/1.5,e.paneWidth/2,e.canvasHeight/2)}},{label:"Zoom to fit",onClick:()=>{e.zoomToFit()}}],{type:"checkbox",label:"Mark bubbles",checked:e.showBubbles,onClick:()=>{e.setShowBubbles(!e.showBubbles)}},{type:"checkbox",label:"Show deletion edges",checked:e.showDeletionEdges,onClick:()=>{e.setShowDeletionEdges(!e.showDeletionEdges)}},{type:"checkbox",label:"Genes on the backbone",checked:e.showGenes,onClick:()=>{e.setShowGenes(!e.showGenes)}},...e.referenceStripApplies?[{type:"checkbox",label:"Reference strip at bp",checked:e.showReferenceStrip,onClick:()=>{e.setShowReferenceStrip(!e.showReferenceStrip)}}]:[]]},launchMenuItems(){let t=[];for(let n of ir({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:r=>{e.showInLinearView(r)},onShowSynteny:r=>{e.showSyntenyView(r)}}))(0,Fo.pushLaunchViewMenuItem)(t,n);return t}}))}var vt=S(j(),1);function Oo(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function Wo(e){let t=(0,vt.readConfObject)(e,"assemblyNames"),n=Oo(t)?t.slice(1):[];return n.length>0?n:void 0}function Ue(e){let t=(0,vt.readConfObject)(e,"assemblyNames");return Oo(t)?t[0]:void 0}function Ke(e,t){return e===void 0||e===t?void 0:`The graph is cut on its reference, ${e}: open it from a view of ${e}`}function Ct(){return E.types.compose("GraphGenomeView",jo.BaseViewModel,Ye(),E.types.model({type:E.types.literal("GraphGenomeView"),gfaLocation:E.types.maybe(E.types.frozen()),loadedRegion:E.types.maybe(E.types.frozen()),loadedTrackId:E.types.optional(E.types.string,""),subgraphContext:E.types.optional(E.types.number,1),subgraphHaplotypes:E.types.maybe(E.types.frozen()),maxRegionBp:E.types.optional(E.types.number,Xe)})).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get sourceTrack(){return e.loadedTrackId?(0,$o.getSession)(e).tracks.find(t=>t.trackId===e.loadedTrackId):void 0},get canRetryLoad(){return e.gfaLocation!==void 0||e.loadedTrackId!==""&&e.loadedRegion!==void 0}})).views(e=>({get hasPendingSource(){return e.canRetryLoad&&!e.graph&&!e.loadCanceled},menuItems(){return e.launchMenuItems()}})).actions(e=>{let t=e.clearGraph;return{clearGraph(){t(),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let n=e.loadedRegion;if(e.gfaLocation)return e.loadGFAFromLocation(e.gfaLocation,n);if(!e.loadedTrackId||!n)return;let r=e.sourceTrack,a=n.end-n.start,o=r?Ke(Ue(r),n.assemblyName):void 0;if(!r)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(o)e.setError(new Error(o));else if(a>e.maxRegionBp)e.setError(new Error(`Region too large (${ne(a)}) \u2014 zoom in to view graph (max ${ne(e.maxRegionBp)})`));else return e.cutSubgraph((0,_o.readConfObject)(r,"adapter"),n,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes,..._(e.chosenLayoutMode).wholeWalks?{snarls:"overlapping"}:{}})}}}).actions(e=>({retryLoad(){e.load()},switchLayout(t){let n=_(e.chosenLayoutMode);return e.setLayoutMode(t),e.loadedTrackId&&_(t).wholeWalks!==n.wholeWalks?e.load():e.recomputeLayout()},afterAttach(){e.graph||e.load()}}))}var Zi=(0,Yo.defineLaunchKeys)()({});function Bt(e){e.addViewType(()=>new Xo.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:Ct(),launchKeys:Zi,ReactComponent:(0,zo.lazy)(()=>import("./chunks/GraphGenomeView-CLUMXH4K.js"))}))}var Uo=S(j(),1),re=S(J(),1),Ji=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function Qi(e){let t=e.getElementTypesInGroup("display"),n=a=>t.find(o=>o.name===a),r=a=>a&&Object.assign(Object.create(a),{adapterCapabilities:["headerLanes"]});return[n("LinearGraphDisplay"),n("LinearBasicDisplay"),...Ji.map(a=>r(n(a)))].filter(a=>a!==void 0)}function Et(e){e.addTrackType(()=>{let t=(0,Uo.ConfigurationSchema)("GraphTrack",{},{baseConfiguration:(0,re.createBaseTrackConfig)(e),explicitIdentifier:"trackId"}),n=new re.TrackType({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:(0,re.createBaseTrackModel)(e,"GraphTrack",t)});for(let r of Qi(e))n.addDisplayType(r);return n})}function Ft(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...r}=t;return n.addView("GraphGenomeView",r),t})}var pa=S(Se(),1),ma=S(qo(),1);var Qo=S(j(),1),ea=S(Jo(),1),Vt=S(X(),1);function ta(){return(0,Qo.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:Vt.types.enumeration("LayoutMode",Le),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:Vt.types.enumeration("ColorScheme",Pe),defaultValue:"auto"},...(0,ea.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var ia=S(Se(),1);var ke=S(j(),1),sa=S(J(),1),da=S(dn(),1),Dt=S(se(),1),ca=S(ra(),1),I=S(X(),1),Ze=S(aa(),1);var qe=S(sn(),1);var es=(0,ia.lazy)(()=>import("./chunks/GraphTrackSettingsDialog-QF5OMTCH.js"));function ua(e){return I.types.compose("LinearGraphDisplay",sa.BaseDisplay,(0,ca.default)(),Ye(),I.types.model({type:I.types.literal("LinearGraphDisplay"),configuration:(0,ke.ConfigurationReference)(e),pane:I.types.maybe(I.types.frozen()),cutRegion:I.types.maybe(I.types.frozen()),coarseCut:I.types.optional(I.types.boolean,!1),maxRegionBp:I.types.optional(I.types.number,Xe),subgraphContext:I.types.optional(I.types.number,1),subgraphHaplotypes:I.types.maybe(I.types.frozen())})).preProcessSnapshot(t=>{let{pane:n,...r}=t;if(!n)return t;let{type:a,...o}=n;return{...o,...r}}).volatile(()=>({recuts:0,settledWindow:void 0})).views(t=>({get defaultLayoutMode(){return(0,ke.getConf)(t,"layoutMode")},get defaultColorScheme(){return(0,ke.getConf)(t,"colorScheme")},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get chosenHaplotypes(){return t.subgraphHaplotypes??Wo(t.parentTrack.configuration)},get coarseAboveBpPerPx(){let r=t.adapterConfig.coarse?.aboveBpPerPx;return typeof r=="number"?r:void 0}})).views(t=>({tierAt(n){let r=t.coarseAboveBpPerPx;return r!==void 0&&n>r?"coarse":"fine"},capFor(n){return n==="coarse"?1/0:t.maxRegionBp},get cutTier(){return t.coarseCut&&t.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(t=>({get settledCapBp(){let n=t.settledWindow;return n?t.capFor(t.tierAt(n.bpPerPx)):1/0}})).views(t=>({get regionTooLarge(){let n=t.settledWindow;return n!==void 0&&n.end-n.start>t.settledCapBp},get regionTooLargeReason(){let n=t.settledWindow;return n?`Region too large for a graph cut (${ne(n.end-n.start)}, max ${ne(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get displayPhase(){return(0,Ze.computeDisplayStatusPhase)({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>(0,Ze.computeActivityPhase)({isMinimized:t.isMinimized,fetchInert:!1,viewportEmpty:t.host?.initialized===!0&&t.host.hasVisibleContent===!1,isLoading:t.isLoading||!t.hasGraph,fetchCanceled:t.loadCanceled,awaitingDependentData:!1,rendersCanvas:!0,canvasDrawn:t.painted&&t.geometryPainted},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({setSubgraphContext(n){t.subgraphContext=n},setSubgraphHaplotypes(n){t.subgraphHaplotypes=n},setMaxRegionBp(n){t.maxRegionBp=n},cut(){let n=t.cutRegion;if(!n)return;let r=Ke(Ue(t.parentTrack.configuration),n.assemblyName);if(r){t.clearGraph(),t.setError(new Error(r));return}let a=t.cutTier==="coarse";return t.cutSubgraph(t.adapterConfig,n,{hops:a?0:t.subgraphContext,haplotypes:t.chosenHaplotypes,tier:a?"coarse":void 0,..._(t.chosenLayoutMode).wholeWalks?{snarls:"overlapping"}:{}})}})).actions(t=>({recutAt(n){let r=t.tierAt(n.bpPerPx);return t.coarseCut=r==="coarse",t.cutRegion=St(n,t.capFor(r),_(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(n){t.settledWindow=n;let r=_(t.chosenLayoutMode).cutMargins;return t.regionTooLarge||!t.loadCanceled&&t.tierAt(n.bpPerPx)===t.cutTier&&mo(t.cutRegion,n,r)?!1:(t.recutAt(n),!0)},switchLayout(n){let r=_(t.chosenLayoutMode);t.setLayoutMode(n);let a=_(n),o=t.host?He(t.host):void 0;return o&&!t.regionTooLarge&&(a.cutMargins!==r.cutMargins||a.wholeWalks!==r.wholeWalks)?t.recutAt(o):t.recomputeLayout()},retryLoad(){t.cut()},reload(){t.cut()},cancelFetchByUser(){t.stopLoad()}})).actions(t=>({forceLoad(){let n=t.settledWindow;n&&(t.setMaxRegionBp(Math.ceil(n.end-n.start)),t.settleOn(n))},afterAttach(){t.cutRegion&&!t.graph&&t.cut(),(0,I.addDisposer)(t,(0,qe.reaction)(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),(0,I.addDisposer)(t,(0,qe.reaction)(()=>t.hostFrame,n=>{n&&t.hostTransform(n.scale,n.translateX)},{equals:(n,r)=>n?.scale===r?.scale&&n?.translateX===r?.translateX,fireImmediately:!0,name:"GraphHostFrame"})),(0,I.addDisposer)(t,(0,qe.reaction)(()=>t.host?.coarseDynamicBlocks,n=>{let{host:r}=t,a=n&&r?He(r):void 0;a&&t.settleOn(a)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let n=t.host?He(t.host):void 0,r=t.sourceTrackId;if(!n||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge)return;let a=Math.floor(n.start),o=Math.ceil(n.end);return{loadedTrackId:r,loadedRegion:{refName:n.refName,assemblyName:n.assemblyName,start:a,end:o},subgraphContext:t.subgraphContext,subgraphHaplotypes:t.chosenHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,o-a),layoutMode:t.chosenLayoutMode,colorScheme:t.chosenColorScheme,referencePath:t.referencePath,geneTrackId:t.geneTrackId,showGenes:t.showGenes,showBubbles:t.showBubbles,showDeletionEdges:t.showDeletionEdges}}})).actions(t=>({openGraphView(){let n=t.graphViewSpec;n&&(0,Dt.getSession)(t).addView("GraphGenomeView",n)}})).views(t=>({trackMenuItems(){let n=t.launchMenuItems();return(0,da.pushLaunchViewMenuItem)(n,{label:"Graph genome view",icon:Be,disabled:!t.graphViewSpec,disabledHelpText:"Zoom in until the track cuts a graph",onClick:()=>{t.openGraphView()}}),[...t.graphMenuItems(),{label:"Settings",icon:sr,onClick:()=>{(0,Dt.getSession)(t).queueDialog(r=>[es,{model:t,open:!0,onClose:r}])}},...n]}}))}function Ht(e){e.addDisplayType(()=>{let t=ta();return Object.assign(new ma.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:ua(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,pa.lazy)(()=>import("./chunks/LinearGraphDisplay-4CMVCEM5.js"))}),{adapterCapabilities:["getSubgraph"]})})}var ha=S(Ee(),1);var Ot=S(j(),1),la=S(X(),1);function Wt(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:n},index:{indexType:r?"CSI":"TBI",location:{uri:`${t}.${r?"csi":"tbi"}`,baseUri:n}}}:e}var ts=(0,Ot.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,Ot.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:la.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:Wt}),ga=ts;function _t(e){e.addAdapterType(()=>new ha.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:Wt,configSchema:ga,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-NRDD66AK.js").then(t=>t.default)}))}var ka=S(Ee(),1);var Qe=S(j(),1),ya=S(X(),1);function ba(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function fa(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:ba(`${t}.segs.bed.gz`,n,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:ba(`${t}.links.bed.gz`,n,r)}:e}function jt(e){let{coarse:t,baseUri:n}=e;return fa(typeof t=="object"&&t!==null?{...e,coarse:fa({baseUri:n,...t})}:e)}var Je=(e,t)=>(0,Qe.ConfigurationSchema)(e,{indexType:{model:ya.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),ns=(0,Qe.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Je("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:Je("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),rs=(0,Qe.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Je("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:Je("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:ns},{explicitlyTyped:!0,preProcessSnapshot:jt}),wa=rs;function $t(e){e.addAdapterType(()=>new ka.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:jt,configSchema:wa,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-NQEERXXI.js").then(t=>t.default)}))}var os=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function as(e){return"uri"in e?rn(e.uri).name:"localPath"in e?e.localPath:e.name}function is(e){return as(e).toLowerCase().endsWith(".gbz.db")}function ss(e){let t=e.adapter;return t?.type==="GbzBaseSyntenyAdapter"&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function ds(e,t,n){if((!n||n==="GbzBaseSyntenyAdapter")&&is(e))return{type:"GbzBaseSyntenyAdapter",gbzDbLocation:e,...t?{haplotypeIndexLocation:t}:{}};if((!n||n==="RgfaTabixAdapter")&&on(e))return an({choice:"RgfaTabixAdapter",loc:e,indexLoc:t,assembly:"",sample:""})}function zt(e){e.addToExtensionPoint("Core-preProcessTrackConfig",ss),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(n,r,a)=>ds(n,r,a)??t(n,r,a)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(n,r)=>os.has(n)?"GraphTrack":t(n,r))}var Ra=S(se(),1),La=S(Fa(),1),Xt=S(Ea(),1),Ga=S(Da(),1);function oe(e){return typeof e=="object"&&e!==null}function xa(e){let t;if(oe(e)){let{refName:n,start:r,end:a,assemblyName:o}=e;typeof n=="string"&&typeof r=="number"&&typeof a=="number"&&(t={refName:n,start:r,end:a,assemblyName:typeof o=="string"?o:void 0})}return t}function cs(e,t,n){let r=e.connectedViewId;return r===void 0||r===t||!n.has(r)}function Sa(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function us(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(n=>oe(n)&&Array.isArray(n.displays)?n.displays.filter(r=>oe(r)&&r.type==="LinearGraphDisplay"):[])}function Ma(e,t,n){let r=[],a=new Set(fe(e).map(o=>oe(o)?o.id:void 0));for(let o of e){if(oe(o)&&o.id===t)for(let i of us(o)){let s=xa(i.hoverHighlight);s&&Sa(s,n)&&r.push({key:typeof i.id=="string"?i.id:"graph-track",region:s})}if(oe(o)&&o.type==="GraphGenomeView"&&cs(o,t,a)){let i=xa(o.hoverHighlight);i&&Sa(i,n)&&r.push({key:typeof o.id=="string"?o.id:"graph",region:i})}}return r}var ae=S(de(),1),ps=(0,Ga.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,La.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),ms=(0,Xt.observer)(function({model:t,region:n}){let{classes:r}=ps(),a=t.getHighlightCoords(n);return a?(0,ae.jsx)("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:a.left,width:a.width}}):null}),ls=(0,Xt.observer)(function({model:t}){let{views:n}=(0,Ra.getSession)(t);return(0,ae.jsx)(ae.Fragment,{children:Ma([...n],t.id,t.assemblyNames).map(({key:r,region:a})=>(0,ae.jsx)(ms,{model:t,region:a},`graph-hover-${r}`))})}),Ta=ls;var Aa=S(de(),1),gs="LinearGenomeView-TracksContainerComponent";function Yt(e){e.contributeToExtensionPoint(gs,({model:t})=>(0,Aa.jsx)(Ta,{model:t},"graphgenomeview-hover-highlight"))}var Na="GraphGenomeView";var Pa="4.0.21";var Ut=class extends Ia.default{constructor(){super(...arguments);this.name=Na;this.version=Pa}install(n){Bt(n),Ht(n),Et(n),Ft(n),Yt(n),$t(n),_t(n),pt(n),lt(n),zt(n),n.addRpcMethod(()=>new me(n)),n.addRpcMethod(()=>new pe(n)),n.addRpcMethod(()=>new ue(n))}configure(n){try{(0,va.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:Be,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{Ut as default};
|
|
3
3
|
//# sourceMappingURL=jbrowse-plugin-graphgenomeviewer.esm.js.map
|