jbrowse-plugin-graphgenomeviewer 4.2.0 → 4.4.0

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.
Files changed (33) hide show
  1. package/dist/chunks/{GraphGenomeView-QOBHGMLE.js → GraphGenomeView-NHYVE7GZ.js} +2 -2
  2. package/dist/chunks/{GraphTrackSettingsDialog-RTSJTM6A.js → GraphTrackSettingsDialog-LXYUYPZS.js} +2 -2
  3. package/dist/chunks/{LinearGraphDisplay-TPXW6POY.js → LinearGraphDisplay-742CW5KL.js} +2 -2
  4. package/dist/chunks/chunk-5GUQPO7Y.js +3 -0
  5. package/dist/chunks/chunk-5GUQPO7Y.js.map +7 -0
  6. package/dist/chunks/{chunk-4C4CMI6K.js → chunk-CNFN6EVE.js} +2 -2
  7. package/dist/chunks/chunk-QHMGWDDH.js +2 -0
  8. package/dist/chunks/chunk-QHMGWDDH.js.map +7 -0
  9. package/dist/chunks/chunk-UTWFU4X6.js +2 -0
  10. package/dist/chunks/chunk-UTWFU4X6.js.map +7 -0
  11. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +5 -5
  12. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  13. package/package.json +2 -2
  14. package/src/GraphGenomeView/components/GraphCanvas.tsx +6 -53
  15. package/src/GraphGenomeView/components/WalkRowContextMenu.tsx +63 -0
  16. package/src/GraphGenomeView/components/WalkRowsOverlay.tsx +1 -1
  17. package/src/GraphGenomeView/components/WalkStrip.tsx +210 -0
  18. package/src/GraphGenomeView/components/WalkStripLocator.tsx +49 -0
  19. package/src/GraphGenomeView/components/usePaneGestures.ts +1 -0
  20. package/src/GraphGenomeView/model.test.ts +42 -3
  21. package/src/GraphGenomeView/model.ts +226 -105
  22. package/src/GraphGenomeView/viewModel.ts +23 -7
  23. package/src/version.ts +1 -1
  24. package/dist/chunks/chunk-ECKLYJWP.js +0 -2
  25. package/dist/chunks/chunk-ECKLYJWP.js.map +0 -7
  26. package/dist/chunks/chunk-HW55QCJG.js +0 -3
  27. package/dist/chunks/chunk-HW55QCJG.js.map +0 -7
  28. package/dist/chunks/chunk-SIP5IHWK.js +0 -2
  29. package/dist/chunks/chunk-SIP5IHWK.js.map +0 -7
  30. /package/dist/chunks/{GraphGenomeView-QOBHGMLE.js.map → GraphGenomeView-NHYVE7GZ.js.map} +0 -0
  31. /package/dist/chunks/{GraphTrackSettingsDialog-RTSJTM6A.js.map → GraphTrackSettingsDialog-LXYUYPZS.js.map} +0 -0
  32. /package/dist/chunks/{LinearGraphDisplay-TPXW6POY.js.map → LinearGraphDisplay-742CW5KL.js.map} +0 -0
  33. /package/dist/chunks/{chunk-4C4CMI6K.js.map → chunk-CNFN6EVE.js.map} +0 -0
@@ -1,7 +1,7 @@
1
- import{a as _n,b as Hn,c as jn,d as Xn,m as We}from"./chunks/chunk-LGFKHSVJ.js";import{a as Ui}from"./chunks/chunk-KWAXLUPQ.js";import{a as Ki,d as zn,g as Yn,h as Un}from"./chunks/chunk-4T7DPQTR.js";import{a as xe}from"./chunks/chunk-J4OLMLS5.js";import{$ as Ir,A as le,Aa as Jr,Ba as Zr,C as yr,Ca as Qr,D as wr,Ea as eo,F as xr,Fa as at,Ga as to,H as ge,Ha as it,I as Sr,Ia as no,J as Rr,Ja as st,K as ot,Ka as Me,Ma as ro,N as Mr,Oa as oo,P as Wt,Q as Lr,R as Gr,T as Tr,U as Nr,V as Qi,W as Ar,X as Pr,Y as vr,Z as Ot,_ as Cr,a as En,aa as _t,b as Kn,c as qi,ca as Br,d as _e,da as Er,e as He,ea as Fr,f as Jn,fa as $r,g as sr,ga as Vr,ha as Dr,ia as Wr,j as dr,ja as Or,k as $t,l as Ye,la as _r,m as cr,ma as Hr,n as Ue,o as ur,p as Z,pa as jr,q as hr,qa as Xr,r as qe,ra as zr,t as fr,ta as Yr,u as Je,v as et,w as tt,wa as Ur,x as nt,y as Dt,ya as Kr,za as qr}from"./chunks/chunk-SIP5IHWK.js";import{b as lr,d as gr}from"./chunks/chunk-UQEPPJEO.js";import"./chunks/chunk-SCMIJAAX.js";import{a as ie}from"./chunks/chunk-FCWXYIFC.js";import{G as Ft,I as ir,J as Re,K as Ke,L as Vt,N as pr,O as mr,P as br,Q as Ze,R as Qe,T as kr,W as rt,X as es,a as J,b as Zn,c as Qn,d as Bt,e as er,f as je,g as Xe,p as ze,q as tr,r as nr,s as Et,t as rr,u as or,v as ar}from"./chunks/chunk-ECKLYJWP.js";import{b as B,d as Vn,e as Dn,g as Wn,h as On}from"./chunks/chunk-7BKUWQE5.js";import{a as Fn,d as $n}from"./chunks/chunk-KULNKXPT.js";import{a as Se,b as Ji,c as Zi,d as qn,e as Oe}from"./chunks/chunk-XEJ47DLD.js";import{a as ee,b as M}from"./chunks/chunk-FY3BTKY4.js";var io=ee((Kd,ao)=>{ao.exports=JBrowseExports["@jbrowse/core/Plugin"]});var ut=ee((Zd,so)=>{so.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var te=ee((Qd,co)=>{co.exports=JBrowseExports["@jbrowse/core/configuration"]});var zt=ee((oc,mo)=>{mo.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var de=ee((ac,lo)=>{lo.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var Mo=ee((mc,Ro)=>{Ro.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var Go=ee((lc,Lo)=>{Lo.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var No=ee((gc,To)=>{To.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var fa=ee((Wu,ha)=>{ha.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var ui=ee((km,ci)=>{ci.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"]});var mi=ee((xm,pi)=>{pi.exports=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"]});var bi=ee((Lm,fi)=>{fi.exports=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"]});var wi=ee((Gm,yi)=>{yi.exports=JBrowseExports["@jbrowse/render-core/displayPhase"]});var Xi=M(io(),1),zi=M(xe(),1);var dt=M(Se(),1),ct=(0,En.createSvgIcon)([(0,dt.jsx)("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),(0,dt.jsx)("circle",{cx:"14.8",cy:"18",r:"2"},"1"),(0,dt.jsx)("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var po=M(ut(),1);var Ht=M(te(),1),jt=M(ie(),1),ts=(0,Ht.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,Ht.ConfigurationSchema)("GbzBaseReadsIndex",{indexType:{model:jt.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}}}),subgraphSnarls:{type:"stringEnum",model:jt.types.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:We.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:We.context,advanced:!0},nodeLimit:{type:"number",defaultValue:We.limit,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}}}:{}}:{}}}}),uo=ts;function Xt(e){e.addAdapterType(()=>new po.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:uo,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-3BCUI2JI.js").then(t=>t.default)}))}var go=M(zt(),1),ho=M(de(),1);function ns(e){return"getReads"in e&&typeof e.getReads=="function"}var rs=e=>typeof e=="object"&&e!==null&&Object.entries(e).some(([t,n])=>["uri","localPath","blobId"].includes(t)&&typeof n=="string"&&n!=="");function fo(e){return typeof e.reads=="string"&&e.reads!==""||rs(e.readsLocation)}var Le=class extends ho.RpcMethodType{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(n){let{adapterConfig:r,nodeNames:o,sessionId:a,signal:i}=n,{dataAdapter:s}=await(0,go.getAdapter)(this.pluginManager,a,r);return ns(s)?s.getReads(o,{signal:i}):{records:[],total:0}}};var bo=M(zt(),1),yo=M(de(),1);function os(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var Ge=class extends yo.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:r,region:o,sessionId:a,opts:i,signal:s}=n,{dataAdapter:d}=await(0,bo.getAdapter)(this.pluginManager,a,r);return os(d)?d.getSubgraph(o,{...i,signal:s}):(console.warn(`[GetSubgraph] ${d.constructor.name} does not implement getSubgraph`),"")}};var wo=M(Oe(),1),ko=M(de(),1),xo=M(ie(),1),as=(0,wo.lazy)(()=>import("./chunks/AddTrackWorkflow-F6FBBEJM.js"));function Yt(e){e.addAddTrackWorkflowType(()=>new ko.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:as,stateModel:xo.types.model({})}))}var Ut;function Kt(){return Ut??=import("./chunks/bandage-layout-UCRW4G4J.js").then(e=>e.default()).catch(e=>{throw Ut=void 0,e}),Ut}var So=M(de(),1),Te=class extends So.RpcMethodType{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(n){let{graph:r,options:o,statusCallback:a}=n;a?.("Loading layout engine");let i=await Kt();a?.("Computing layout");let s=performance.now(),d=i.computeLayout(r,o),c=performance.now()-s;return{result:d,duration:c}}};var ai=M(Oe(),1),ii=M(Mo(),1),si=M(Go(),1);var ni=M(te(),1),ri=M(No(),1),oi=M(xe(),1),U=M(ie(),1);var is=.9,qt=2,ss=1e3;function Ao(e,t,n,r=a=>a,o=[]){let a=new Map(e.nodes.map(s=>[s.name,s])),i=[];for(let s of t){let d=[],c=1/0,l=-1/0,g=1/0,u=[],p=[];for(let m of Je(s)){let h=a.get(m),x=h&&n[h.id];if(!(!h||!x?.length)){if(B(h)&&(h.stable.start<s.start||h.stable.start>=s.end)){p.push(x[Math.floor(x.length/2)]);continue}u.push(h.id),d.push(Xe(x.length===1?[x[0],x[0]]:x));for(let G of x)c=Math.min(c,G.x),l=Math.max(l,G.x),g=Math.min(g,G.y)}}if(u.length===0)continue;let k={x:(c+l)/2,y:g},L=p.length?{x:p.reduce((m,h)=>m+h.x,0)/p.length,y:p.reduce((m,h)=>m+h.y,0)/p.length}:k,b=new Map;for(let m of s.routes??[])for(let h of new Set(m.steps))b.set(h,(b.get(h)??0)+1);let f=[];for(let m of s.routes??[]){if(s.longestAlleleLength<ss)break;if(m.steps.length===0)continue;let h=Math.min(...m.steps.map(w=>b.get(w))),x,G=-1;for(let w of m.steps)if(b.get(w)===h)for(let S of n[w]??[]){let T=Math.hypot(S.x-L.x,S.y-L.y);T>G&&(G=T,x=S)}x&&f.push({route:m,at:x,text:ds(m,r)})}i.push({bubble:s,...qe(s,o),path:d.join(""),labelAt:k,members:u.length,nodeIds:u,whole:u.length>=is*e.nodes.length,routes:f})}return i}function ds(e,t){let n=[...new Set(e.walks.map(t))].sort(),r=n.slice(0,qt).join(", "),o=n.length>qt?` +${n.length-qt}`:"";return`${r}${o} \xB7 ${hr(e.bp)}`}function Po(e){if(!e.nodes.some(B))return[];let t=new Map(e.nodes.map(u=>[u.id,u])),n=Jn(e),r=new Map(n.map((u,p)=>[u,p])),o=new Int32Array(n.length+1),a=new Map,i=new Set;for(let u of e.edges){let p=r.get(u.from),k=r.get(u.to);if(p===void 0||k===void 0||p===k)continue;i.add(`${u.from}>${u.to}`).add(`${u.to}>${u.from}`);let[L,b]=p<k?[p,k]:[k,p];o[L+1]++,o[b]--;let[f,m]=p<k?[u.from,u.to]:[u.to,u.from];(a.get(f)??a.set(f,new Set).get(f)).add(m)}for(let u=1;u<o.length;u++)o[u]+=o[u-1];let s=e.nodes.filter(B).sort((u,p)=>u.stable.start-p.stable.start),d=new Set([s[0].id,s.at(-1).id]),c=s.map(u=>[u,r.get(u.id)]).filter(([u,p])=>d.has(u.id)||o[p]===0).sort(([u,p],[k,L])=>p-L||u.stable.start-k.stable.start),l=e.paths?.map(u=>{let p=new Map;return u.nodeIds.forEach((k,L)=>{p.has(k)||p.set(k,L)}),p}),g=[];for(let u=0;u+1<c.length;u++){let[p,k]=c[u],[L,b]=c[u+1],f=n.slice(k+1,b);if(f.length===0)continue;let m=new Map([[p.id,{min:0,max:0,n:1}]]);for(let F of[p.id,...f]){let K=m.get(F);if(K)for(let ae of a.get(F)??[]){if(r.get(ae)>b)continue;let R=ae===L.id?0:t.get(ae).length,v=m.get(ae);m.set(ae,{min:Math.min(v?.min??1/0,K.min+R),max:Math.max(v?.max??-1/0,K.max+R),n:Math.min(gr,K.n+(v?.n??0))})}}let h=l&&cs(e,t,l,p.id,L.id),x=h?.n?h:void 0,G=x??m.get(L.id)??{min:0,max:0,n:0},w=h!==void 0&&h.left>0,S=p.stable.start+p.length,T=L.stable.start,A=[p.id,...f.filter(F=>B(t.get(F))),L.id],P=A.some((F,K)=>K>0&&!i.has(`${A[K-1]}>${F}`)),O=P||w,H=P&&!x;g.push({refName:p.stable.refName,start:S,end:T,segmentCount:f.length+2,pathCount:G.n,inversion:!1,shortestAlleleLength:H?T-S:G.min,longestAlleleLength:H?T-S:G.max,segments:[p,...f.map(F=>t.get(F)),L].map(F=>F.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:O,routes:x?.routes})}return g}function cs(e,t,n,r,o){let a=new Map,i=1/0,s=-1/0,d=0;return e.paths.forEach((c,l)=>{let g=n[l].get(r),u=n[l].get(o);if(g===void 0||u===void 0){(g!==void 0||u!==void 0)&&d++;return}let p=c.nodeIds.slice(Math.min(g,u)+1,Math.max(g,u));u<g&&p.reverse();let k=0;for(let f of p)k+=t.get(f)?.length??0;let L=p.join(","),b=a.get(L)??{steps:p,bp:k,walks:[]};b.walks.push(c.name),a.set(L,b),i=Math.min(i,k),s=Math.max(s,k)}),a.size||d?{min:i,max:s,n:a.size,left:d,routes:[...a.values()]}:void 0}function vo(e,t){let n=new Set(t),r=e.nodes.filter(d=>n.has(d.name)),o=new Set(r.map(d=>d.id)),a=new Map(e.nodes.map(d=>[d.id,d.length])),i=new Map,s=e.paths?.flatMap(d=>{let c=d.nodeIds.findIndex(u=>o.has(u));if(c<0)return[];let l=d.nodeIds.filter(u=>o.has(u));i.set(d.name,{first:c,nodeIds:l});let g=d.nodeIds.slice(0,c).reduce((u,p)=>u+(a.get(p)??0),0);return[{...d,nodeIds:l,...d.start===void 0?{}:{start:d.start+g}}]});return{name:e.name,nodes:r,edges:e.edges.filter(d=>o.has(d.from)&&o.has(d.to)),...s?.length?{paths:s}:{},anchorPaths:je(e,i),pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}function pt(e,t,n){let r=new Map;for(let a of e.nodes)if(B(a)){let{refName:i}=a.stable;if(n[a.id]?.length){let s=r.get(i)??r.set(i,{nodes:[],reach:0}).get(i);s.nodes.push(a),s.reach=Math.max(s.reach,a.length)}}for(let{nodes:a}of r.values())a.sort((i,s)=>i.stable.start-s.stable.start);let o=[];for(let a of t){let i=r.get(a.refName);if(!i)continue;let s=[],d=[],c,l=1/0,g=0,u=(a.start+a.end)/2,{nodes:p,reach:k}=i;for(let L=Wn(p,a.start-k);L<p.length&&p[L].stable.start<a.end;L++){let b=p[L],f=b.stable.start,m=f+b.length;if(m<=a.start)continue;let h=n[b.id];g+=Math.min(m,a.end)-Math.max(f,a.start);let x=[];for(let S of a.exons){let T=Math.max(S.start,f),A=Math.min(S.end,m);if(A<=T)continue;let P=Et(h,(T-f)/b.length,(A-f)/b.length);P.length===1&&P.push({...P[0]}),x.push(Xe(P))}x.length>0&&(s.push(...x),d.push({nodeId:b.id,d:x.join("")}));let G=Math.min(Math.max(u,f),m),w=Math.abs(G-u);if(w<l){l=w;let[S]=Et(h,(G-f)/b.length,(G-f)/b.length);c=S}}c&&o.push({gene:a,exons:s.join(""),exonsByNode:d,at:c,covered:g/(a.end-a.start)})}return o}function us(e,t){let n=e.indexOf(":"),r=e.indexOf(":",n+1);if(n!==-1&&r!==-1){let o=e.slice(0,n),a=e.slice(n+1,r),i=e.slice(r+1);a==="i"||a==="f"?t[o]=+i:a==="Z"&&(t[o]=i)}}function Ne(e){let t={};for(let n of e)us(n,t);return t}function Jt(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 Co=62,ps=60;function ms(e){let t=[],n="+",r=0;function o(a){a>r&&t.push({id:e.slice(r,a),strand:n})}for(let a=0;a<e.length;a++){let i=e.charCodeAt(a);(i===Co||i===ps)&&(o(a),n=i===Co?"+":"-",r=a+1)}return o(e.length),t}function Zt(e){let t={nodes:[],links:[],paths:[],walks:[],header:[],id:""};for(let n of e.split(`
2
- `)){let r=n.endsWith("\r")?n.slice(0,-1):n;if(r.startsWith("H")){let[,...o]=r.split(" ");t.header.push(Ne(o))}else if(r.startsWith("S")){let[,o,...a]=r.split(" "),i,s,d,c=!1,l=a[0]??"*";/^\d+$/.test(l)?(i=+l,s=a[1]??"*",d=a.slice(2)):(c=!0,s=l,i=s==="*"?0:s.length,d=a.slice(1));let g=Ne(d);c&&"LN"in g&&(i=+g.LN),t.nodes.push({id:o,length:i,sequence:s,tags:g})}else if(r.startsWith("E")){let[,,o,a,,,,,i,...s]=r.split(" ");o&&a&&t.links.push({source:o.slice(0,-1),target:a.slice(0,-1),strand1:o.at(-1),strand2:a.at(-1),cigar:i??"*",tags:Ne(s)})}else if(r.startsWith("L")){let[,o,a,i,s,d,...c]=r.split(" ");o&&i&&s&&t.links.push({source:o,target:i,strand1:a,strand2:s,cigar:d??"*",tags:Ne(c)})}else if(r.startsWith("W")){let[,o,a,i,s,d,c,...l]=r.split(" ");o&&a&&i&&s&&d&&c&&t.walks.push({sample:o,haplotype:+a,contig:i,start:s==="*"?-1:+s,end:d==="*"?-1:+d,segments:ms(c),tags:Ne(l)})}else if(r.startsWith("P")){let[,o,a,...i]=r.split(" ");o&&a&&t.paths.push({name:o,path:a,rest:i})}}return t}function ls(e){let t=new Map,n=new Map;function r(a,i){t.has(a)||t.set(a,i)}function o(a,i){r(a,i),n.set(a,(n.get(a)??0)+1)}for(let a of e.links)r(a.source,a.strand1==="-"?"-":"+"),r(a.target,a.strand2==="-"?"-":"+");for(let a of e.paths)for(let i of a.path.split(","))o(i.slice(0,-1),i.endsWith("-")?"-":"+");for(let a of e.walks)for(let i of a.segments)o(i.id,i.strand==="-"?"-":"+");return{canonical:t,traversals:n}}var Io=e=>e.start===-1?0:e.start;function gs(e){return[...e.paths.map(t=>({...J(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:Io(t),steps:t.segments.map(n=>({id:n.id,strand:n.strand==="-"?"-":"+"}))}))]}function hs(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 Ae=e=>typeof e=="number"&&e>0?e:void 0;function fs({tags:e,length:t}){let n=Ae(e.RC)??Ae(e.FC)??Ae(e.KC);return Ae(e.dp)??Ae(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function bs(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:Jt(e),samples:hs(e)}}function Bo(e,t="Imported GFA"){let n=[],r=[],{canonical:o,traversals:a}=ls(e),i=p=>`${p}${o.get(p)??"+"}`;for(let p of e.nodes){let k=fs(p)??Math.max(a.get(p.id)??1,1);n.push(bs(p,o.get(p.id)??"+",k))}for(let p of e.links)r.push({from:i(p.source),to:i(p.target),fromStrand:p.strand1==="-"?"-":"+",toStrand:p.strand2==="-"?"-":"+"});let s=[],d=new Map,c=(p,k)=>[p,k].sort().join("--");function l(p,k){for(let L=0;L<p.length-1;L++){let b=c(p[L],p[L+1]);d.has(b)||d.set(b,new Set),d.get(b).add(k)}}for(let p of e.paths){let k=p.path.split(",").map(L=>i(L.slice(0,-1)));s.push({name:p.name,nodeIds:k,start:J(p.name).start}),l(k,p.name)}for(let p of e.walks){let k=p.segments.map(b=>i(b.id)),L=`${p.sample}#${p.haplotype}#${p.contig}`;s.push({name:L,nodeIds:k,start:Io(p),sample:p.sample,haplotype:p.haplotype,contig:p.contig}),l(k,L)}for(let p of r){let k=d.get(c(p.from,p.to));k&&k.size>0&&(p.pathIds=[...k])}let g=new Map(e.nodes.map(p=>[p.id,p.length])),u=e.paths.length>0||e.walks.length>0?Zn(gs(e),p=>g.get(p)??0):void 0;return{name:t,nodes:n,edges:r,paths:s.length>0?s:void 0,anchorPaths:u?.anchorPaths,pathVisits:u?.pathVisits,anchoredBy:n.some(p=>p.stable)?"tags":void 0}}function Eo(e,t){let n=e.nodes.filter(b=>B(b)&&(t[b.id]?.length??0)>0);if(n.length<2)return t;let r=n.map(b=>{let f=t[b.id],m=f[Math.floor(f.length/2)];return{x:m.x,y:m.y,r:b.stable.start+b.length/2,w:b.length}}),o=r.reduce((b,f)=>b+f.w,0),a=r.reduce((b,f)=>b+f.x*f.w,0)/o,i=r.reduce((b,f)=>b+f.y*f.w,0)/o,s=r.reduce((b,f)=>b+f.r*f.w,0)/o,d=0,c=0;for(let b of r)d+=b.w*(b.x-a)*(b.r-s),c+=b.w*(b.y-i)*(b.r-s);let l=-Math.atan2(c,d),g=Math.cos(l),u=Math.sin(l),p={};for(let[b,f]of Object.entries(t))p[b]=f.map(m=>{let h=m.x-a,x=m.y-i;return{x:a+g*h-u*x,y:i+u*h+g*x}});let k=0,L=0;for(let b of e.nodes)if(!B(b))for(let f of p[b.id]??[])f.y>i?k++:L++;if(L>k)for(let b of Object.values(p))for(let f of b)f.y=2*i-f.y;return p}var Fo=30;function ys(e,t){let{opts:n}=t,r=new Map(t.nodes.map(u=>[u.id,Ke(n,u.length)])),o=u=>r.get(u)??n.minimumNodeLength,a=e.nodes.filter(B).sort((u,p)=>u.stable.start-p.stable.start),i=new Map,s=0;for(let u of a)i.set(u.id,{x:s,y:0}),s+=o(u.id)+n.edgeLength;let d=_e(e),c=new Map(a.map(u=>[u.id,0])),l=a.map(u=>u.id);for(let u of l){let p=i.get(u),k=c.get(u)+1;for(let L of d.get(u)??[])c.has(L)||(c.set(L,k),i.set(L,{x:p.x+o(u)/2,y:Fo*k}),l.push(L))}let g=0;for(let u of e.nodes)i.has(u.id)||i.set(u.id,{x:g++*s/e.nodes.length,y:Fo*3});return i}function $o(e,t){let n=ys(e,t);return t.nodes.map(r=>({...r,...n.get(r.id)}))}function Vo(e,t,n={}){let r=er(Bo(Zt(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 ws(e,t,n){let r=e.nodes.some(B);return{graph:{nodes:r?$o(e,t):t.nodes,edges:e.edges},options:{quality:n.quality,linearLayout:n.linearLayout,...t.opts,...r?{rotateComponents:!1}:{}}}}function Do(e,t){let n=e.nodes.some(B);return`${t.quality}|${t.linearLayout}|${t.bubbleSpread}|${n}|${e.referencePath??""}`}async function Wo(e,t,n){let r=mr(t.bubbleSpread),o=tr(e),{result:a,duration:i}=await n(ws(o.graph,Vt(o.graph,r),t)),s=Vt(e,r),d=new Map(s.nodes.map(l=>[l.id,Ke(s.opts,l.length)])),c=nr(a.nodePositions,o.runs,l=>d.get(l)??0);return{result:{...a,nodePositions:e.nodes.some(B)?Eo(e,c):c},duration:i}}function ks(e){let t=1/0,n=1/0,r=-1/0,o=-1/0;for(let a of Object.values(e))for(let i of a)t=Math.min(t,i.x),n=Math.min(n,i.y),r=Math.max(r,i.x),o=Math.max(o,i.y);return{minX:t,minY:n,maxX:r,maxY:o}}var D=40,xs=1e-6,Ss=100;function Pe(e){return Math.max(xs,Math.min(Ss,e))}function Qt(e,t,n,r=D){let o=t-e.h*n;return r-e.minY*n+Math.max(0,o)/2}function ve(e,t,n,r,{minScale:o=0,padLeft:a=D,padTop:i=D,padRight:s=D,padBottom:d=D}={}){let c=t-a-s,l=n-i-d;if(c<=0||l<=0||!(e.w>0||!r&&e.h>0))return;let g=e.w>0?c/e.w:1/0,u=e.h>0?l/e.h:1/0,p=Pe(Math.max(o,r?g:Math.min(g,u))),k=c-e.w*p;return{scale:p,translateX:a-e.minX*p+Math.max(0,k)/2,translateY:Qt(e,l,r?1:p,i)}}function mt(e,t={}){let{minX:n,minY:r,maxX:o,maxY:a}=ks(e.nodePositions),{region:i}=t;e.referenceAxis&&i&&i.end>i.start&&(n=i.start,o=i.end);let s=t.extent??e.extent;return s&&(n=Math.min(n,s.minX??n),r=Math.min(r,s.minY??r),o=Math.max(o,s.maxX??o),a=Math.max(a,s.maxY??a)),{minX:n,minY:r,w:o-n,h:a-r}}var z=e=>+e.toFixed(1);function Rs(e){let t=/^rgba?\(([^,]+),([^,]+),([^,)]+)(?:,([^)]+))?\)$/.exec(e.replaceAll(" ",""));if(!t)return{color:e,opacity:1};let n=t[4]===void 0?1:Number(t[4]);return{color:`rgb(${t[1]},${t[2]},${t[3]})`,opacity:n}}function en(e,t){let{color:n,opacity:r}=Rs(t);return`${e}="${n}"${r<1?` ${e}-opacity="${z(r)}"`:""}`}var Oo=.5,_o=.25;function Ho(e,t){let n=[],r=[],o=(c,l)=>{let g={d:`M${z(c)} ${z(l)}`,segments:0,x0:c,x1:c,y0:l,y1:l};return r.push(g),g},a=c=>{let l=r.at(-1)??o(c[0],c[1]);for(let g=0;g<c.length;g+=2)l.x0=Math.min(l.x0,c[g]),l.x1=Math.max(l.x1,c[g]),l.y0=Math.min(l.y0,c[g+1]),l.y1=Math.max(l.y1,c[g+1]);return l.segments++,l},i=c=>{let l=new Set;return r.map(g=>{if(!c||g.x1-g.x0>=Oo||g.y1-g.y0>=Oo)return g.d;let u=(g.x0+g.x1)/2,p=(g.y0+g.y1)/2,k=`${Math.round(u/_o)} ${Math.round(p/_o)}`;return g.segments===0||l.has(k)?"":(l.add(k),`M${z(u)} ${z(p)}h0`)}).join("")},s={canvas:void 0,fillStyle:"#000",strokeStyle:"#000",lineWidth:1,lineCap:"butt",lineJoin:"miter",beginPath(){r=[]},moveTo(c,l){o(c,l)},lineTo(c,l){a([c,l]).d+=`L${z(c)} ${z(l)}`},bezierCurveTo(c,l,g,u,p,k){a([c,l,g,u,p,k]).d+=`C${z(c)} ${z(l)} ${z(g)} ${z(u)} ${z(p)} ${z(k)}`},closePath(){let c=r.at(-1);c&&(c.d+="Z")},stroke(){let c=i(s.lineCap!=="butt");c&&n.push(`<path d="${c}" fill="none" ${en("stroke",s.strokeStyle)} stroke-width="${z(s.lineWidth)}" stroke-linecap="${s.lineCap}" stroke-linejoin="${s.lineJoin}"/>`)},fill(){let c=i(!1);c&&n.push(`<path d="${c}" ${en("fill",s.fillStyle)}/>`)},fillRect(c,l,g,u){n.push(`<rect x="${z(c)}" y="${z(l)}" width="${z(g)}" height="${z(u)}" ${en("fill",s.fillStyle)}/>`)}},d={width:e,height:t,style:{},getContext:()=>s};return s.canvas=d,{canvas:d,markup:()=>n.join("")}}var jo="4.2.0";function he(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function Xo(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 zo(e,t){let n=(e.maxX-e.minX)*t,r=(e.maxY-e.minY)*t;return{minX:e.minX-n,minY:e.minY-r,maxX:e.maxX+n,maxY:e.maxY+r}}function Yo(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}function Uo(e,t,n,r,o){let a=Pe(e.scale*t),i=a/e.scale;return{scale:a,translateX:n-(n-e.translateX)*i,translateY:o?e.translateY:r-(r-e.translateY)*i}}var Ko=(e,t)=>!!e.referencePath&&J(t).name===e.referencePath;function Ms(e,t){return(e.paths??[]).filter(n=>n.name===t).sort((n,r)=>(n.start??0)-(r.start??0))}function Ls(e,t){let n=Ms(e,t),r=n[0];if(!r)return;let o=new Map(e.nodes.map(f=>[f.id,f])),a=new Map;e.edges.forEach((f,m)=>{a.set(`${f.from}>${f.to}`,m)});let i=f=>o.get(f)?.length??0,s=f=>f.nodeIds.reduce((m,h)=>m+i(h),0),d=n.reduce((f,m)=>f+s(m),0),c=r.start===void 0?void 0:{contig:r.contig??$n(J(t).name),start:r.start,end:Math.max(...n.map(f=>(f.start??0)+s(f)))},l=c?c.end-c.start:d,g=new Set,u=new Set,p=new Map,k=0;for(let f of n)c&&(k=Math.max(k,(f.start??0)-c.start)),f.nodeIds.forEach((m,h)=>{if(g.add(m),h>0){let G=f.nodeIds[h-1],w=a.get(`${G}>${m}`)??a.get(`${m}>${G}`);w!==void 0&&u.add(w)}let x=i(m);p.has(m)||p.set(m,l>0?(k+x/2)/l:0),k+=x});let L=Ko(e,t),b=L?[]:(e.paths??[]).filter(f=>Ko(e,f.name));return{name:t,reference:L,range:c,nodeIds:g,edgeIndexes:u,progress:p,steps:n.reduce((f,m)=>f+m.nodeIds.length,0),bp:d,referenceBp:b.length>0?b.reduce((f,m)=>f+s(m),0):void 0}}function qo(e,t,n,r){let o=new Map(e.nodes.map(i=>[i.id,i])),a=new Map;for(let[i,s]of t.progress){let d=o.get(i),c=r?.midpoints.get(i),l=n.field==="progress"?s:r&&c!==void 0&&!(d?.stable&&d.stable.rank>0)?(c-r.start)/r.span:void 0;a.set(i,Cr(n,l))}return a}function Gs(e,t){let n=new Set,r=0,o=e.referencePath;if(!o||t.reference)return{reversed:n,bp:r};let a=J(t.name).name,i=new Map(e.nodes.map(s=>[s.id,s]));for(let s of t.progress.keys()){let d=i.get(s),c=d?e.pathVisits?.get(d.name):void 0,l=c?.find(u=>u.path===a)?.strand,g=c?.find(u=>u.path===o)?.strand;l&&g&&l!==g&&(n.add(s),r+=d.length)}return{reversed:n,bp:r}}function lt(e,t,n){let r=new Set,o=t.filter(s=>!r.has(s.walk)&&r.add(s.walk)).flatMap(s=>{let d=Ls(e,s.walk);return d?[{walk:d,layer:s}]:[]}).sort((s,d)=>Number(d.walk.reference)-Number(s.walk.reference));if(o.length===0)return;let a=0,i=o.map(({walk:s,layer:d})=>{let c=Ot(d,s.reference,s.reference?0:a++,o.length===1),{reversed:l,bp:g}=Gs(e,s);return{...s,encoding:c,colors:qo(e,s,c,n),reversed:l,reversedBp:g}});return Jo(i,n)}var Ts={field:"progress",scheme:"red"};function gt(e,t,n,r){return t.walks.map(o=>{let a=n.find(s=>s.walk===o.name)?.color,i=Ot({walk:o.name,color:{...Ts,...a}},o.reference,0);return Jo([{...o,encoding:i,colors:qo(e,o,i,r)}],r)})}function Jo(e,t){return{walks:e,referenceDomain:t?{start:t.start,end:t.start+t.span}:void 0,nodeIds:new Set(e.flatMap(n=>[...n.nodeIds])),edgeIndexes:new Set(e.flatMap(n=>[...n.edgeIndexes])),names:new Set(e.map(n=>n.name))}}var na='font-family="Helvetica, Arial, sans-serif" font-size="11"',Ns=48,As=18,Ps=16,vs="rgb(160,160,160)",ra="#daa520",oa="#1c1c22",Cs=4,Is=1,Bs=2;function ce(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function nn(e,t,n,r,o,a,i,s=1){let d=r.length>1?Ns:As,c=r.length>1?`fill="url(#${e})"`:`fill="${r[0].color}"${s<1?` fill-opacity="${s}"`:""}`,l=r.length>1?`<linearGradient id="${e}">${r.map(u=>`<stop offset="${u.offset}" stop-color="${u.color}"/>`).join("")}</linearGradient>`:"";return{width:Math.max(d+5+(o.length+a.length)*6.2,(i?.length??0)*6.2),markup:`${l}<g transform="translate(${t} ${n})" ${na}><rect y="5" width="${d}" height="8" rx="2" ${c}/><text x="${d+5}" y="13"><tspan font-weight="bold">${ce(o)}</tspan>${ce(a)}</text>${i?`<text y="28">${ce(i)}</text>`:""}</g>`}}function ta(e,t,n,r,o,a){let i=Er(r,a);return nn(e,t,n,_t(r.encoding),o,i.delta+i.outside+i.reversed,i.scale)}function Es(e,t){return e.replaceAll(/([ML])(-?[\d.e-]+),(-?[\d.e-]+)/g,(n,r,o,a)=>`${r}${+(Number(o)*t.scaleX+t.translateX).toFixed(1)},${+(Number(a)*t.scaleY+t.translateY).toFixed(1)}`)}function Fs(e,t,n,r,o){return`<rect x="${e-n/2}" y="${t-11-4+2}" width="${n}" height="${17}" rx="3" fill="#fff" fill-opacity="0.85" stroke="${ra}"/><text x="${e}" y="${t}" font-family="Helvetica, Arial, sans-serif" font-size="${11}" fill="${oa}" text-anchor="middle"><tspan font-style="italic" font-weight="600">${ce(r)}</tspan>${o?ce(o):""}</text>`}function aa(e,t,n={}){let r=n.width??1200,o=n.height??800,a=n.region,i=n.colorDomain??a,s=n.walkRows,d=mt(t,{region:n.fitToDrawing?void 0:a,extent:s&&t.extent?Ye(s):void 0}),c=t.pixelRows??!1,l=new Map(e.nodes.map(C=>[C.id,C])),g=Qe(n.colorScheme??"auto",e),u=g==="reference-position"&&!t.tubeMap?ge(e,i):void 0,p=t.tubeMap?[]:ze(e),k=n.walks??[],L=k.some(C=>C.color?.field==="reference")?u??ge(e,i):void 0,b=k.length>0&&!t.tubeMap?lt(e,k,L):void 0,f=tt(n.facet),m=f.field&&b&&b.walks.length>1?gt(e,b,k,L):void 0,h=new Map((e.paths?.length?Re(e.paths):[]).map(C=>[C.name,C.label])),x=C=>h.get(C)??C,G=b?.referenceDomain&&{...b.referenceDomain,name:a?.refName},w=n.contigThickness??6,S=n.nodeWidth??"depth",T=n.genes?.length&&!t.tubeMap&&!s?pt(e,n.genes,t.nodePositions):[],A=rt(e,l,w,S),P=0;function O(C,R,v,I){let _=[],j=X=>{let q=A.halfWidthPx(X)*2;return C?.nodeIds.has(X)?Math.max(q,C.walks.length*Cs):q},$=T.flatMap(X=>X.exonsByNode.map(({nodeId:q,d:Y})=>({d:Es(Y,R),inner:j(q)+2*Is})));if($.length>0){let X=`exons${P++}`,q=(Y,Ct,It)=>`<path d="${It}" fill="none" stroke="${Y}" stroke-width="${Ct}" stroke-linecap="round" stroke-linejoin="round"/>`;_.push(`<mask id="${X}" maskUnits="userSpaceOnUse" x="0" y="0" width="${v}" height="${I}">${$.map(Y=>q("#fff",Y.inner+2*Bs,Y.d)).join("")}${$.map(Y=>q("#000",Y.inner,Y.d)).join("")}</mask><rect width="${v}" height="${I}" fill="${ra}" mask="url(#${X})"/>`)}let V=X=>({x:X.x*R.scaleX+R.translateX,y:X.y*R.scaleY+R.translateY}),ke={width:v,height:I};for(let{item:X,x:q,y:Y,w:Ct,text:It}of or(yr(T,V,w),ke,rr(ke))){let Yi=V(X.at).y+w/2;_.push(`<line x1="${q}" x2="${q}" y1="${Y-11-2}" y2="${Yi}" stroke="${oa}" stroke-width="0.8" stroke-opacity="0.6"/>`,Fs(q,Y,Ct,X.gene.name,It.slice(X.gene.name.length)))}s&&_.push(Dt(Nr(s,{...R,width:v,height:I},{ramp:u&&{start:u.start,end:u.start+u.span},rowGenes:n.rowGenes})));let me=s?[s.reference,...s.rows].map((X,q)=>({label:X.label,y:q*20})):t.rowLabels??[];for(let{label:X,y:q}of me){let Y=q*R.scaleY+R.translateY;Y>=0&&Y<=I&&_.push(`<text x="6" y="${Y+4}" ${na} stroke="#fff" stroke-width="3" paint-order="stroke">${ce(X)}</text>`)}return _.join("")}function H(C,R,v){let I=ve(d,R,v,c,m?{padLeft:12,padTop:12,padRight:12,padBottom:12}:{});if(!I)return"";let _=he(I.scale,c),{canvas:j,markup:$}=Ho(R,v),V=new Ar(j);V.uploadGeometry(ot({nodePositions:s?{}:t.nodePositions,graph:e,nodeById:l,colorScheme:g,contigThickness:w,connectorThickness:n.connectorThickness??2,drawPaths:!1,nodeWidth:S,highlight:C,axis:_,referenceRamp:u,deletions:new Map(p.map(me=>[me.edgeIndex,me.bypassed])),hiddenEdges:new Set(n.showDeletionEdges?[]:p.map(me=>me.edgeIndex))}));let ke={scaleX:_.scaleX,scaleY:_.scaleY,translateX:I.translateX,translateY:I.translateY};return V.updateTransform({...ke,dpr:1}),V.render([1,1,1,1]),$()+O(C,ke,R,v)}let F=[],K;if(m){let C=nt(m.map(v=>v.walks[0].name),f.field||"walk",f.domain),R=et({count:C.count,bounds:d,pixelRows:c,width:r,room:o,columns:C.columns??f.columns});m.forEach((v,I)=>{let _=C.cells[I],j=_%R.columns*(R.width+8),$=Math.floor(_/R.columns)*(R.height+34+8),V=v.walks[0];F.push(ta(`key${I}`,j+6,$+2,V,x(V.name),G).markup,`<svg x="${j}" y="${$+34}" width="${R.width}" height="${R.height}">${H(v,R.width,R.height)}</svg>`)}),K=R.total}else{let C=6,R=$=>{F.push($.markup),C+=$.width+Ps};if(b&&(b.walks.forEach(($,V)=>{R(ta(`key${V}`,C,2,$,x($.name),G))}),R(nn("faded",C,2,[{offset:0,color:vs}],"",`not on ${b.walks.length===1?x(b.walks[0].name):"these walks"}`,void 0,.3))),s){let $=Tr(Gr(s,{ramp:u&&{start:u.start,end:u.start+u.span},genes:n.rowGenes?.size?n.rowGeneGaps:void 0}),C,2);R({width:$.width,markup:Dt($.tree)})}else!b&&u&&R(nn("ramp",C,2,_t({field:"reference",scheme:"rainbow"}),"Reference position","",Br(a?.refName,u.start,u.start+u.span)));let v=F.length>0?34:0,I=r-2*D,_=c||!(d.w>0)?d.h:d.h*I/d.w,j=Math.max(160,Math.min(o-v,Math.ceil(_+2*D)));F.push(`<svg y="${v}" width="${r}" height="${j}">${H(b,r,j)}</svg>`),K=v+j}let ae=JSON.stringify({generator:`@jbrowse/bandage-core@${jo}`,...n.spec===void 0?{}:{spec:n.spec}});return`<svg xmlns="http://www.w3.org/2000/svg" width="${r}" height="${K}" viewBox="0 0 ${r} ${K}"><metadata>${ce(ae)}</metadata><rect width="${r}" height="${K}" fill="#fff"/>${F.join("")}</svg>
3
- `}function ia(e,t){let n=new Set(e.nodes.filter(d=>B(d)&&Dn(d,t)).map(d=>d.id)),r=e.paths??[];if(n.size===0||r.length===0)return e;let o=r.map(d=>{let c=-1,l=-1;return d.nodeIds.forEach((g,u)=>{n.has(g)&&(c<0&&(c=u),l=u)}),c<0?void 0:{first:c,last:l}});if(o.every((d,c)=>d?.first===0&&d.last===r[c].nodeIds.length-1))return e;let a=new Set,i=[],s=new Map;return r.forEach((d,c)=>{let l=o[c];if(l){let g=d.nodeIds.slice(l.first,l.last+1);for(let u of g)a.add(u);i.push({...d,nodeIds:g}),s.set(d.name,{first:l.first,nodeIds:g})}}),{...e,nodes:e.nodes.filter(d=>a.has(d.id)),edges:e.edges.filter(d=>a.has(d.from)&&a.has(d.to)),paths:i,pathVisits:e.pathVisits&&$s(e.pathVisits,r,o,new Map(e.nodes.map(d=>[d.id,d.name]))),anchorPaths:je(e,s)}}function $s(e,t,n,r){let o=new Map,a=new Map;return t.forEach((i,s)=>{let d=J(i.name).name,c=n[s];i.nodeIds.forEach((l,g)=>{let u=r.get(l)??l,p=e.get(u);if(!p)return;let k=`${d} ${u}`,L=o.get(k)??0;for(;L<p.length&&p[L].path!==d;)L++;let b=p[L];if(o.set(k,L+1),b&&c&&g>=c.first&&g<=c.last){let f=a.get(u);f?f.push(b):a.set(u,[b])}})}),a}function Vs(e,t,n){let r=J(e.name).name,o=new Map,a=[],i=()=>({a:-1/0,b:1/0,detour:[],bp:0}),s=[i()];for(let d of e.nodeIds){let c=t.get(d);if(!c)continue;let l=o.get(c.name)??0;o.set(c.name,l+1);let g=n.get(`${r} ${c.name}`)?.[l]??sr(c),u=s.at(-1),p=a.at(-1);if(B(c)){let k=c.stable.start,L=k+c.length,b=g!==(c.stable.strand??"+"),f=p!==void 0&&u.detour.length===0;f&&!p.inverted&&!b&&p.end===k?p.end=L:f&&p.inverted&&b&&p.start===L?p.start=k:(a.push({start:k,end:L,inverted:b}),s.push(i()))}else u.detour.push({node:c,strand:g}),u.bp+=c.length}return a.forEach((d,c)=>{s[c].b=d.start,s[c+1].a=d.end}),{path:e,runs:a,gaps:s}}function rn(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 sa(e,t,n){let r=0,o=e.length;for(;r<o;){let a=r+o>>1;e[a]<=t?r=a+1:o=a}return r<e.length&&e[r]<n}function Ds(e){let t=new Map;for(let n=1;n<e.length;n++){let r=e[n-1],o=e[n],a=r.stable.start+r.length;a!==o.stable.start&&(t.set(a,"reference-gap"),t.set(o.stable.start,"reference-gap"))}return t}function Ws(e,t,n){let r=(o,a)=>{Number.isFinite(o)&&!n.has(o)&&n.set(o,a)};for(let{runs:o,gaps:a}of e){let i=o[0],s=o.at(-1);i&&s&&(r(i.start,"walk-end"),r(s.end,"walk-end"));for(let d of o)d.inverted&&d.end-d.start>=t&&(r(d.start,"inversion"),r(d.end,"inversion"));for(let d of a)d.b<d.a?(r(d.a,"backward"),r(d.b,"backward")):rn(d,t)||(r(d.a,"variant"),r(d.b,"variant"))}for(let o=!0;o;){o=!1;let a=[...n.keys()].sort((s,d)=>s-d),i=e.flatMap(({runs:s,gaps:d})=>[...d.filter(c=>rn(c,t)).map(c=>[c.a,c.b]),...s.filter(c=>c.inverted&&c.end-c.start<t).map(c=>[c.start,c.end])]);for(let[s,d]of i)sa(a,s,d)&&(o||=!n.has(s)||!n.has(d),r(s,"overlap"),r(d,"overlap"))}return n}function Os(e,t){let n=[],r=[],o=()=>{let a=r[0],i=r.at(-1);if(a&&i){let s=a.stable.start,d=i.stable.start+i.length,c=`${s}-${d}`;n.push({node:{id:`${c}+`,name:c,length:d-s,depth:0,stable:{refName:a.stable.refName,start:s,rank:0,strand:"+"}},members:r})}r=[]};for(let a of e)t.has(a.stable.start)&&o(),r.push(a);return o(),n}function da(e,t){let n=e.nodes.filter(B).sort((w,S)=>w.stable.start-S.stable.start),r=e.paths??[];if(n.length===0||r.length===0)return;let o=new Map(e.nodes.map(w=>[w.id,w])),a=dr(e),i=r.map(w=>Vs(w,o,a)),s=Ws(i,t,Ds(n)),d=[...s.keys()].sort((w,S)=>w-S),c=Os(n,s),l=c.map(w=>w.node.stable.start),g=w=>{let S=0,T=l.length-1;for(;S<T;){let A=S+T+1>>1;l[A]<=w?S=A:T=A-1}return S},u=new Map,p=new Map;for(let w of c){u.set(w.node.id,w.members.map(S=>S.id));for(let S of w.members)p.set(S.id,w.node.id)}let k=new Map,L=w=>{let S=`${w.a} ${w.b} ${w.detour.map(A=>A.node.id+A.strand).join(",")}`,T=k.get(S);if(!T){let A=`r${k.size}`;T={id:`${A}+`,name:A,length:w.bp,depth:0,stable:{refName:n[0].stable.refName,start:Number.isFinite(w.a)?w.a:w.b,rank:1,strand:"+"}},k.set(S,T),u.set(T.id,w.detour.map(P=>P.node.id));for(let P of w.detour)p.has(P.node.id)||p.set(P.node.id,T.id)}return T},b=new Map,f=[],m=new Map,h=new Map,x=new Map;for(let{path:w,runs:S,gaps:T}of i){let A=[],P=[],O=!1,H=(R,v)=>{let I=A.at(-1);O&&I?.node===R&&I.strand===v||A.push({node:R,strand:v}),O=!0},F=R=>{O=!1,R.detour.length>0&&(H(L(R),"+"),O=!1)},K=R=>{(R.bp>0||R.b>R.a)&&P.push({start:R.a,end:R.b,bp:R.bp});let v=c[g(R.b>R.a?R.a:R.a-1)];for(let I of R.detour)p.has(I.node.id)||(p.set(I.node.id,v.node.id),u.get(v.node.id).push(I.node.id))};S.forEach((R,v)=>{let I=T[v];rn(I,t)&&!sa(d,I.a,I.b)?K(I):F(I);let _=g(R.start),j=g(R.end-1),$=R.end-R.start<t;if(R.inverted&&!$){O=!1;for(let V=j;V>=_;V--)H(c[V].node,"-");O=!1}else{R.inverted&&P.push({start:R.start,end:R.end,bp:R.end-R.start,inverted:!0});for(let V=_;V<=j;V++)H(c[V].node,"+")}}),F(T.at(-1));let ae=J(w.name).name,C=0;A.forEach(({node:R,strand:v},I)=>{x.set(R.id,(x.get(R.id)??0)+1);let _=m.get(R.name)??[];_.push({path:ae,sample:w.sample??ae,start:C,strand:v}),m.set(R.name,_),C+=R.length;let j=A[I+1];if(j){let $=`${R.id}${v} ${j.node.id}${j.strand}`,V=h.get($);V?V.pathIds.push(w.name):h.set($,{from:R.id,to:j.node.id,fromStrand:v,toStrand:j.strand,pathIds:[w.name]})}}),f.push({...w,nodeIds:A.map(R=>R.node.id)}),b.set(w.name,P)}let G=[...c.map(w=>w.node),...k.values()].filter(w=>x.has(w.id)).map(w=>({...w,depth:x.get(w.id)}));return{graph:{...e,nodes:G,edges:[...h.values()],paths:f,pathVisits:m,reads:void 0},members:u,coarseOf:p,deviations:b,cuts:s}}var _s=e=>e.bp1>e.bp0;function ca(e,t){let n=e.filter(_s);if(n.length===0){let a=e[0];return a?[{tx:a.x0,sx:t(a.bp0)}]:[]}let r=n.map(a=>({c:a,s0:t(a.bp0),s1:t(a.bp1),trimLeft:0,trimRight:0}));for(let a=0;a+1<r.length;a++){let i=r[a],s=r[a+1],c=Math.min(s.c.x0-i.c.x1,24)-(s.s0-i.s1);if(c>0){let l=(i.s1-i.s0)/2,g=(s.s1-s.s0)/2,u=Math.min(c/2,l),p=Math.min(c-u,g);u=Math.min(c-p,l),i.trimRight=u,s.trimLeft=p}}let o=[];for(let{c:a,s0:i,s1:s,trimLeft:d,trimRight:c}of r)o.push({tx:a.x0,sx:i+d},{tx:a.x1,sx:s-c});return o}function ua(e,t){let n=e.length;if(n===0)return t;let r=e[0],o=e[n-1];if(t<=r.tx)return r.sx+(t-r.tx);if(t>=o.tx)return o.sx+(t-o.tx);let a=0,i=n-1;for(;i-a>1;){let l=a+i>>1;e[l].tx<=t?a=l:i=l}let s=e[a],d=e[i],c=d.tx-s.tx;return c>0?s.sx+(t-s.tx)/c*(d.sx-s.sx):s.sx}var Hs=.05,ft=9;function js(e,t){let{minY:n,maxY:r}=e.layout.bounds,o=r-n;return e.columns&&o>0?Math.max(Hs,Math.min(1,t/o)):1}function pa(e,t){let{scaleX:n,translateX:r,translateY:o}=t,a=t.scaleY*js(e,t.usableHeight),i=d=>(d-e.yOffset)*a+o,{columns:s}=e;if(s){let d=ca(s,c=>c*n+r);return{x:c=>ua(d,c),y:i,yScale:a}}return{x:d=>d*n+r,y:i,yScale:a}}function ma(e,{x:t,y:n},r,o){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-ft)<=r&&r<=t(i.x+i.pixelWidth+ft)&&n(i.y-ft)<=o&&o<=n(i.y+i.contentHeight+ft)&&(a=i.name)}),a}var la=M(qi(),1);function ga(e,t,n){if(t==="uniform"||t==="grey")return;let r={...Sr(e),referenceRamp:n};return new Map(e.nodes.map((o,a)=>[o.id,(0,la.abgrToCssRgba)(Rr(o,a,t,r))]))}var ne=M(te(),1),qa=M(qn(),1),N=M(xe(),1),Ja=M(Ui(),1),y=M(ie(),1),Za=M(fa(),1),Qa=M(Qi(),1),W=M(Kn(),1);function ba(e,t,n="image/svg+xml"){let r=URL.createObjectURL(new Blob([e],{type:n})),o=document.createElement("a");o.href=r,o.download=t,o.click(),setTimeout(()=>{URL.revokeObjectURL(r)},0)}function ya(e){let t=[];for(let n of[...e].sort((r,o)=>r.start-o.start)){let r=t.at(-1);r&&n.start<=r.end?r.end=Math.max(r.end,n.end):t.push({...n})}return t}function wa(e){let t=[],n=new Map;for(let r of[...e].sort((o,a)=>o.start-a.start)){let o=`${r.refName} ${r.strand} ${r.name}`,a=n.get(o);if(a&&r.start<a.end)a.end=Math.max(a.end,r.end),a.exons=ya([...a.exons,...r.exons]);else{let i={...r,exons:ya(r.exons)};t.push(i),n.set(o,i)}}return t}var bt=new Set(["Gff3TabixAdapter","Gff3Adapter","BedTabixAdapter","BedAdapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),Xs=/gene|refseq|gencode|ensembl|annotation/i,zs=new Set(["BedTabixAdapter","BedAdapter"]);function on(e,t){if(t)return e.find(r=>r.trackId===t);let n=e.filter(r=>bt.has(r.adapterType));return n.find(r=>Xs.test(`${r.trackId} ${r.name??""}`))??n.find(r=>!zs.has(r.adapterType))}function oe(e,t){return typeof e.get=="function"?e.get(t):e[t]}var Ys=new Set(["exon","CDS","five_prime_UTR","three_prime_UTR","UTR"]);function ka(e,t){let n=oe(e,"type");typeof n=="string"&&Ys.has(n)&&t.push({start:oe(e,"start"),end:oe(e,"end")});let r=oe(e,"subfeatures");for(let o of r??[])ka(o,t)}function Us(e){let t=[...e].sort((r,o)=>r.start-o.start),n=[];for(let r of t){let o=n.at(-1);o&&r.start<=o.end?o.end=Math.max(o.end,r.end):n.push({...r})}return n}function an(e){let t=[];for(let n of e){let r=oe(n,"gene_name")??oe(n,"name")??oe(n,"id"),o=oe(n,"start"),a=oe(n,"end");if(!r||!(a>o))continue;let i=[];ka(n,i),t.push({name:r,refName:oe(n,"refName"),start:o,end:a,strand:oe(n,"strand")??0,exons:i.length?Us(i):[{start:o,end:a}]})}return wa(t)}function xa(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 Sa(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function yt(e,t){let n=Sa(e.dynamicBlocks.contentBlocks.filter(a=>a.refName===t.refName&&a.assemblyName===t.assemblyName)),{bpPerPx:r}=e;if(!n||!(r>0))return;let o=n.offsetPx-e.offsetPx;return n.reversed?{scale:-1/r,translateX:o+n.end/r}:{scale:1/r,translateX:o-n.start/r}}function wt(e){let t=Sa(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 sn(e,t,n=!0){let r=e.end-e.start,o=n?Math.max(0,Math.min(e.span,(t-r)/2)):0,a=Math.max(e.regionStart,Math.floor(e.start-o)),i=Math.min(e.regionEnd,Math.ceil(e.end+o)),s=i-a-t;return s>0&&(a+=Math.floor(s/2),i-=Math.ceil(s/2)),{refName:e.refName,assemblyName:e.assemblyName,start:a,end:i}}function Ra(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=sn(t,1/0,!1);return Math.abs(e.start-r.start)<1&&Math.abs(e.end-r.end)<1}var ue=M(ie(),1);function Ma(e){return t=>e.includes(t)?t:void 0}function dn(e){return ue.types.snapshotProcessor(ue.types.maybe(ue.types.enumeration(e)),{preProcessor:Ma(e)})}function cn(e,t){return ue.types.snapshotProcessor(ue.types.optional(ue.types.enumeration(e),t),{preProcessor:Ma(e)})}var mn=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),Ks=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function La(e,t){return t?e.find(r=>r.trackId===t):e.filter(r=>mn.has(r.adapterType)).find(r=>Ks.test(`${r.trackId} ${r.name??""}`))}function Ie(e,t){return typeof e.get=="function"?e.get(t):e[t]}var Ga=/^\w+=[^;]*(;\w+=[^;]*)*$/;function qs(e){let t=Ie(e,"name");if(!(typeof t!="string"||!Ga.test(t)))return Object.fromEntries(t.split(";").map(n=>{let r=n.indexOf("=");return[n.slice(0,r),n.slice(r+1)]}))}function se(e,t){let n=Ie(e,t);return n!==void 0?n:Ie(e,"INFO")?.[t]??qs(e)?.[t]}var Ta=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],Js=["RUL","period","PERIOD","consensusSize","unit","unitLength"],Zs=["TRID","REPID","VARID","ID","name","id"];function kt(e,t){for(let n of t){let r=se(e,n),o=String((Array.isArray(r)?r[0]:r)??"").split(",")[0].trim();if(o!==""&&o!==".")return o}}var Na=/^[ACGTURYSWKMBDHVN]+$/i;function Qs(e){let t=Number(kt(e,Js));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=kt(e,Ta);return n&&Na.test(n)?n.length:void 0}function pe(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 pn(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let r=String(n??"").trim();return r===""||r==="."?void 0:r})}var un="<CNV:TR>";function ed(e){let t=pn(Ie(e,"ALT"));if(!t.includes(un))return;let n=pe(se(e,"RN")),r=pn(se(e,"RUS")),o=pe(se(e,"RUL")),a=pe(se(e,"RUC")),i=pe(se(e,"RB")),s=0;return t.map((d,c)=>{let l=n[c]??(d===un?1:0),g=0,u=0;for(let p=0;p<l;p++,s++){let k=r[s],L=o[s]??(k&&Na.test(k)?k.length:void 0),b=a[s],f=i[s]??(L&&b!==void 0?Math.round(L*b):void 0);f!==void 0&&(g+=f,u++)}return d===un&&l>0&&u===l?g:void 0})}function td(e,t,n){let r=e?.includes("|");return(e??"").split(/[/|]/).flatMap((o,a)=>{let i=Number(o),s=i>0?t[i-1]:n;return!Number.isInteger(i)||s===void 0?[]:[{bp:s,...r?{haplotype:a+1}:{}}]})}function nd(e,t,n){let r=Ie(e,"samples"),o={};for(let[a,i]of Object.entries(r??{})){let s=pe(i.SD),d=pe(i.AL).flatMap((l,g)=>l!==void 0&&l>0?[s[g]===void 0?{bp:l}:{bp:l,spanningReads:s[g]}]:[]),c=d.length>0||!t?d:td(pn(i.GT)[0],t,n);c.length>0&&(o[a]=c)}return Object.keys(o).length>0?o:void 0}function rd(e,t){let n=se(e,"start"),r=se(e,"end"),o=pe(se(e,"SVLEN"))[0];return t&&o!==void 0?{start:n+1,end:n+1+o}:{start:n,end:r}}function Aa(e){let t=[];for(let n of e){let r=ed(n),{start:o,end:a}=rd(n,r!==void 0),i=Qs(n);if(!(a>o)||i===void 0)continue;let s=se(n,"refName"),d=kt(n,Ta),c=kt(n,Zs);t.push({key:`${s}:${o}-${a}`,name:(c&&!Ga.test(c)?c:void 0)??(d&&d.length<=12?`(${d})n`:`${s}:${(o+1).toLocaleString()}-${a.toLocaleString()}`),refName:s,start:o,end:a,unit:i,motif:d,calls:nd(n,r,a-o)})}return t.sort((n,r)=>n.start-r.start)}function Q(e){return typeof e=="object"&&e!==null}function od(e){return Q(e)&&typeof e.get=="function"}function ad(e){let t=od(e)?e.get("name"):Q(e)?e.name:void 0;return typeof t=="string"?t:void 0}function Pa(e){let t;if(Q(e)&&Q(e.hoverPosition)){let{refName:n,coord:r,coord0:o,assemblyName:a}=e.hoverPosition;typeof n=="string"&&typeof r=="number"&&(t={refName:n,coord:typeof o=="number"?o:r-1,assemblyName:typeof a=="string"?a:void 0,featureName:ad(e.hoverFeature)})}return t}function va(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function Ca({hover:e,nodes:t}){let n,r;for(let o of t)o.name===e.featureName?n=o.id:r===void 0&&B(o)&&e.coord>=o.stable.start&&e.coord<o.stable.start+o.length&&(r=o.id);return n??r??null}var id=/^(.+) HP(\d+)$/,sd=/^(.+)\.(\d+)$/;function dd(e){let t=id.exec(e),n=sd.exec(e);return[...t?[{sample:t[1],haplotype:String(Number(t[2])+1)}]:[],...n?[{sample:n[1],haplotype:n[2]}]:[],{sample:e,haplotype:void 0}]}function cd(e){return J(e).name.split("#")[1]}function Ia(e,t){let n=t.map(r=>r.name);for(let{sample:r,haplotype:o}of dd(e)){let a=n.filter(i=>Fn(J(i).name)===r&&(o===void 0||cd(i)===o));if(a.length>0)return a}return[]}var ln=M(te(),1);function ud(e){return Q(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function Be(e){return e.flatMap(t=>Q(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function Ee({views:e,connectedViewId:t,assemblyName:n}){let r=Be(e).filter(a=>ud(a)).filter(a=>a.assemblyNames.includes(n));return r.find(a=>a.id===t)??(r.length===1?r[0]:void 0)}function Fe(e,t){let n=e.assemblyManager;return n?.has(t)?n.get(t)?.name??t:t}function Ea(e,t,n){n.catch(r=>{console.error(`[GraphGenomeView] ${t}`,r),e.notifyError?.(`${t}: ${r}`,r)})}var pd=1e3;function gn(e,t=pd){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 Fa(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 $a({session:e,location:t,assembly:n,connectedViewId:r,tracks:o=[]}){let a=Ee({views:e.views,connectedViewId:r,assemblyName:n}),i;return a?(Ea(e,`Could not show ${n} ${Me(t)}`,Promise.resolve(a.navToLocString(st(t),n))),i=a.id):i=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${Me(t)}`,init:{assembly:n,loc:st(t),tracks:o}}).id,i}function Va({session:e,location:t,assembly:n,connectedViewId:r}){let o=Ee({views:e.views,connectedViewId:r,assemblyName:n});return o&&e.addHighlight?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),o!==void 0}function Ba(e,t){if(t===void 0)return[];let n=e.tracks.find(o=>(0,ln.readConfObject)(o,"trackId")===t),r=n?(0,ln.readConfObject)(n,"assemblyNames"):[];return Array.isArray(r)?r.filter(o=>typeof o=="string").map(o=>Fe(e,o)):[]}function Da({session:e,contributors:t,trackId:n,graphTrackId:r}){let o=Ba(e,r),a=Ba(e,n),i=t.filter(c=>a.includes(c.sample)),s=i.length>=2?i:t,d={init:{views:s.map(c=>({assembly:c.sample,loc:st(c),...r!==void 0&&o.includes(c.sample)?{tracks:[r]}:{}})),tracks:n?s.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?Ea(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",d)):e.addView("LinearSyntenyView",d)}var xt=M(te(),1),md="FeatureTrack";function Wa({session:e,assemblyName:t,first:n}){let r=[];for(let o of e.tracks){let a=(0,xt.readConfObject)(o,"type"),i=(0,xt.readConfObject)(o,"assemblyNames"),s=(0,xt.readConfObject)(o,"trackId");a===md&&Array.isArray(i)&&i.includes(t)&&typeof s=="string"&&s!==n&&r.push(s)}return n?[n,...r]:r}var St=M(te(),1),Oa=M(Ki(),1),Rt=M(ie(),1);var ld="SyntenyTrack",gd="Synteny adapters";function hd(e){if((0,St.readConfObject)(e,"type")===ld)return!0;let t=e.adapter?.type;if(typeof t!="string"||!(0,Rt.isStateTreeNode)(e))return!1;let{pluginManager:n}=(0,Rt.getEnv)(e);return!!n?.hasAdapterType(t)&&n.getAdapterType(t).adapterMetadata?.category===gd}function _a(e,t){let n=new Set(t),r=[];for(let o of e.tracks){let a=(0,St.readConfObject)(o,"assemblyNames"),i=(0,St.readConfObject)(o,"trackId");if(hd(o)&&typeof i=="string"&&Array.isArray(a)){let s=a.filter(d=>typeof d=="string"&&n.has(Fe(e,d))).length;s>=2&&r.push({trackId:i,name:(0,Oa.getTrackName)(o,e),coverage:s})}}return r.sort((o,a)=>a.coverage-o.coverage)}var fd=600,hn=160,Ha=[1,1,1,1],ja=[.12,.12,.12,1],bd=([e,t,n])=>`rgb(${[e,t,n].map(r=>Math.round(r*255)).join(", ")})`,yd=5,fn=new Set(["tubemap","tubemapref"]),wd=[{value:"",label:"Off"},{value:"walk",label:"A panel per walk"},{value:"sample",label:"A row per sample, a column per haplotype"}],kd=y.types.snapshotProcessor(y.types.model("GraphFacet",{field:y.types.optional(y.types.enumeration(["","walk","sample"]),""),domain:y.types.optional(y.types.frozen(),[]),columns:y.types.maybe(y.types.number)}),{preProcessor:e=>tt(e)}),xd=[{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"}],Xa=".segs.bed.gz";function Sd(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(Xa)?n.slice(0,-Xa.length):void 0}var za=1.4,Rd=1.6,Md=150,Ld=1,Ya=40,Ua={nodeStrokes:[],nodeStrokeRuns:new Map,arrows:[],arrowRuns:new Map,edgeCurves:[],edgeCurveRuns:new Map};function fe(...e){}var Lt=5e6;function be(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var Gd=2e4;function $e(e){return e&&"uri"in e&&e.uri?new URL(e.uri,e.baseUri??window.location.href).href:void 0}function Ka(e){return e.builtViewport!==void 0&&e.paintedViewport===e.builtViewport&&e.builtViewport.viewportDirty===e.viewportDirty&&!e.viewportRebuildPending}function bn(e){let{width:t,height:n}=e.viewBox;return Xo(e,e.axisScale,t,n)}var Mt=new WeakMap,Td=4;function Nd(e){let t=Mt.get(e);return t||(t=new Map,Mt.set(e,t)),t}function Ad(e,t){let n=Mt.get(e);n&&e!==t&&Mt.set(t,n)}function Pd(e,t,n){e.size>=Td&&e.delete(e.keys().next().value),e.set(t,n)}function Gt(){return y.types.compose("GraphPane",(0,Za.RenderLifecycleMixin)(),y.types.model({layoutQuality:y.types.optional(y.types.number,2),linearLayout:y.types.optional(y.types.boolean,!1),layoutMode:dn(Ue),colorScheme:dn(Ze),bubbleSpread:cn(pr,"auto"),nodeWidth:cn(kr,"depth"),showBubbles:y.types.optional(y.types.boolean,!1),showDeletionEdges:y.types.optional(y.types.boolean,!1),showGenes:y.types.optional(y.types.boolean,!0),showReferenceStrip:y.types.optional(y.types.boolean,!0),tubeMapFold:y.types.optional(y.types.number,0),geneTrackId:y.types.optional(y.types.string,""),repeatTrackId:y.types.optional(y.types.string,""),repeatKey:y.types.optional(y.types.string,""),walkRowSamples:y.types.maybe(y.types.frozen()),walkLayers:y.types.optional(y.types.frozen(),[]),facet:y.types.optional(kd,{}),referencePath:y.types.optional(y.types.string,""),showPerf:y.types.optional(y.types.boolean,!1),contigThickness:y.types.optional(y.types.number,6),connectorThickness:y.types.optional(y.types.number,2),darkMode:y.types.optional(y.types.boolean,!1),scale:y.types.optional(y.types.number,1),translateX:y.types.optional(y.types.number,0),translateY:y.types.optional(y.types.number,0),drawPaths:y.types.optional(y.types.boolean,!1),paneHeight:y.types.maybe(y.types.number),maxGraphNodes:y.types.optional(y.types.number,Gd),colorDomain:y.types.maybe(y.types.frozen()),connectedViewId:y.types.maybe(y.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,walkGeneFeatures:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredRowWalks:[],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,N.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,N.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 Ka(e)},get showLoading(){return e.error===void 0&&(e.isLoading||e.hasPendingSource||e.graph!==void 0&&!Ka(e))},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?ur(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 walkChoices(){let t=e.graph?.paths;return t?.length?Re(t):[]},get effectiveDrawPaths(){return e.drawPaths&&Ft(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get rampDomain(){return e.colorDomain??e.graphRegion},get walkRamp(){let{graph:t}=e;return t&&e.walkLayers.some(n=>n.color?.field==="reference")?ge(t,this.rampDomain):void 0},get modeDrawsNodes(){return Z(e.chosenLayoutMode).drawsNodes},get liftedWalkLayers(){return e.walkLayers.length>0||!this.modeDrawsNodes?e.walkLayers:e.hoveredRowWalks.map(t=>({walk:t}))},get walkLift(){let{graph:t}=e,n=this.liftedWalkLayers;return t&&n.length>0&&!e.layoutResult?.tubeMap?lt(t,n,this.walkRamp):void 0},get facetPanels(){let{graph:t}=e,n=this.walkLift;return e.facet.field!==""&&this.modeDrawsNodes&&t&&n&&e.walkLayers.length>1&&n.walks.length>1?gt(t,n,e.walkLayers,this.walkRamp):void 0},get drawnWalks(){return this.facetPanels?.map(t=>t.walks[0])??this.walkLift?.walks??[]},get liftsWalks(){return!fn.has(e.chosenLayoutMode)},get walkReference(){let t=this.walkLift?.referenceDomain;return t&&{...t,name:e.graphRegion?.refName}},walkLabel(t){return this.walkChoices.find(n=>n.name===t)?.label??t},get liftPaintsOffReference(){for(let t of this.walkLift?.walks??[])if(t.encoding.field!=="walk"){for(let n of t.colors.values())if(n===Ir)return!0}return!1},get liftedWalksLabel(){let t=this.walkLift?.walks??[];return t.length===1?this.walkLabel(t[0].name):"these walks"},get effectiveColorScheme(){return e.layoutResult?.tubeMap&&(this.tubeMapReads||e.chosenColorScheme==="auto")?"uniform":Qe(e.chosenColorScheme,e.graph)},get tubeMapReads(){return(e.layoutResult?.tubeMap?.layout.reads.length??0)>0},get colorSchemeLock(){return this.walkLift?{value:"By walk",why:"Each lifted walk colours its own lane: set it under the menu, Walk, Colour"}:this.tubeMapReads?{value:"By strand",why:"Reads take the reds and blues, so the tube map leaves its nodes clear"}:void 0},get nodePositions(){return e.layoutResult?.nodePositions},get labelsNodeSizes(){return!e.layoutResult?.tubeMap&&!this.walkLift},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?Po(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get cutHaplotypes(){},get sourceGfaLocation(){},get sourceAdapter(){let t=e.sourceTrack;return t?(0,ne.readConfObject)(t,"adapter"):void 0},get sourceTrackId(){let t=e.sourceTrack;return t?(0,ne.readConfObject)(t,"trackId"):void 0},get assemblyTrackChoices(){let t=e.graphRegion;return t?(0,N.getSession)(e).tracks.filter(n=>(0,ne.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,ne.readConfObject)(n,"name"),adapterType:(0,ne.readConfObject)(n,"adapter").type})):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>bt.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>mn.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return La(e.repeatTrackChoices,e.repeatTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)},get backbone(){return e.graph?_n(e.graph):void 0},assemblySpellings(t){let{assemblyManager:n}=(0,N.getSession)(e),r=n.has(t)?n.get(t):void 0,o=e.sourceAdapter?.assemblyNameToPanSN??{},a=[t,...r?[r.name,...r.aliases]:[]];return{name:t,aliases:[...a,...a.flatMap(i=>o[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,o=e.drawsLoadedReference||n!==void 0&&Hn(t,[n])!==void 0;return t&&r&&o?Xn(r,t):void 0}})).views(e=>({get nodeNeighbors(){return e.drawnGraph?_e(e.drawnGraph):void 0},get nodeInk(){return rt(e.drawnGraph,e.nodeById,e.contigThickness,e.nodeWidth)},get deletions(){return e.graph&&this.drawsNodes?ze(e.graph):[]},get walkRowBars(){if(e.chosenLayoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?$t(e.graph,t,t.unit):$t(e.graph,e.graphRegion);if(!n)return;let r=e.walkRowSamples,o=r?n.rows.filter(s=>r.includes(s.sample)).sort((s,d)=>r.indexOf(s.sample)-r.indexOf(d.sample)||s.label.localeCompare(d.label)):n.rows,[a,...i]=eo([n.reference,...o],t?.calls);return{...n,reference:a,rows:i}},get drawsNodes(){return!e.layoutResult?.tubeMap&&!this.walkRowBars},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=>ar(t.label,0).x1+6))},get genePins(){fe(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&this.drawsNodes&&e.graph&&e.backboneGenes&&t?pt(e.graph,e.backboneGenes,t):[]},get bubbleHalos(){fe(e.positionsVersion);let t=e.layoutResult?.nodePositions;if(!e.showBubbles||!this.drawsNodes||!e.graph||!t)return[];let n=new Map(e.walkChoices.map(r=>[r.name,r.label]));return Ao(e.graph,e.bubbles,t,r=>n.get(r)??r,e.repeatArrays)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.drawnGraph?ge(e.drawnGraph,e.rampDomain):void 0},get assemblyNames(){let t=e.graphRegion;return t?[t.assemblyName]:[]},get scaleX(){return he(e.scale,e.pixelRows).scaleX},get scaleY(){return he(e.scale,e.pixelRows).scaleY},get axisScale(){return he(e.scale,e.pixelRows)},get layoutBounds(){let t=e.layoutResult,n=this.walkRowBars;return t?mt(t,{region:e.popStack.length===0?e.graphRegion:void 0,extent:n&&t.extent?Ye(n):void 0}):void 0}})).views(e=>({get geneTrack(){return on(e.geneTrackChoices,e.geneTrackId)},get deletionEdgeIndexes(){return new Map(e.deletions.map(t=>[t.edgeIndex,t.bypassed]))},get hiddenEdgeIndexes(){return new Set(e.showDeletionEdges?[]:e.deletions.map(t=>t.edgeIndex))},get referenceRampDomain(){let t=e.referenceRamp;return t?{start:t.start,end:t.start+t.span}:void 0},get referenceRampOffKeys(){let t=e.referenceRamp,n=e.layoutResult,r=n?.tubeMap?n.nodePositions:void 0,o=!1,a=!1;if(t&&e.drawnGraph)for(let i of e.drawnGraph.nodes)r&&!r[i.id]||(t.midpoints.has(i.id)?i.stable&&i.stable.rank>0&&(o=!0):a=!0);return{offReference:o,unplaced:a}},get tubeMapNodeColors(){let t=e.drawnGraph;return e.layoutResult?.tubeMap&&t?ga(t,e.effectiveColorScheme,e.referenceRamp):void 0},get tubeMapTubeColors(){let t=e.layoutResult?.tubeMap?.pathColors,n=t&&this.tubeMapNodeColors?t.map((a,i)=>ir(i,t.length)):t,r=new Set(e.hoveredRowWalks),o=e.drawnGraph?.paths;return n&&o&&r.size>0?n.map((a,i)=>r.has(o[i]?.name??"")?a:xr):n},nodeSpan(t){let{nodeById:n,nodeNeighbors:r}=e;return n&&r?He({nodeId:t,nodeById:n,neighbors:r}):void 0}})).views(e=>({get pathLegend(){let t=e.graph?.paths,n=e.layoutResult?.tubeMap;return(e.drawPaths||n)&&t&&Ft(t.length)?Re(t,e.tubeMapTubeColors):[]},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?Vn(t):[];return t?to(t,{maxGap:n.length>0?On(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,N.getSession)(e),n=e.sourceAdapter?.assemblyNameToPanSN,r=new Map(Object.entries(n??{}).map(([a,i])=>[i,a])),o=a=>a!==void 0&&t.has(a)?t.get(a)?.name??a:void 0;return a=>o(r.get(a))??o(a)},get geneTracksByAssembly(){let t=new Map;for(let n of(0,N.getSession)(e).tracks){let r=(0,ne.readConfObject)(n,"adapter").type;if(!bt.has(r))continue;let o={trackId:n.trackId,name:(0,ne.readConfObject)(n,"name"),adapterType:r};for(let a of(0,ne.readConfObject)(n,"assemblyNames")){let i=Fe((0,N.getSession)(e),a);t.set(i,[...t.get(i)??[],o])}}return new Map([...t].flatMap(([n,r])=>{let o=on(r,"");return o?[[n,o]]:[]}))}})).views(e=>({get walkGeneReads(){let t=e.walkRowBars;if(!t||!e.showGenes)return;let n=[],r=0,o=0;for(let a of t.rows){if(!a.axis){o++;continue}let i=it(e.assemblyResolver,{sample:a.sample,haplotype:a.haplotype===void 0?void 0:`${a.sample}#${a.haplotype}`}),s=i?e.geneTracksByAssembly.get(i):void 0;if(!i||!s){r++;continue}n.push({row:a.name,trackId:s.trackId,region:{assemblyName:i,refName:a.axis.contig,...Wt(a.axis,a.bp)}})}return{reads:n.slice(0,Ya),gaps:{untracked:r,unplaced:o,unread:Math.max(0,n.length-Ya)}}},get walkRowGeneGaps(){return this.walkGeneReads?.gaps},walkRowAt(t,n){let r=e.walkRowBars;if(!r)return;let o=Math.round((n-e.translateY)/(20*e.scaleY)),a=[r.reference,...r.rows][o],i=o*20*e.scaleY+e.translateY,s=(t-e.translateX)/e.scaleX-r.origin;return a&&Math.abs(n-i)<=Mr/2+2&&s>=0&&s<=a.bp?o:void 0},walkRowLaunchTarget(t){let n=e.walkRowBars,r=n?[n.reference,...n.rows][t]:void 0;if(!r?.axis)return;let o=r.haplotype===void 0?void 0:`${r.sample}#${r.haplotype}`,a=t===0?e.graphRegion?.assemblyName:it(e.assemblyResolver,{sample:r.sample,haplotype:o});return{label:r.label,assembly:a,location:{sample:r.sample,haplotype:o,refName:r.axis.contig,...Wt(r.axis,r.bp)}}},get walkRowGenes(){let t=e.walkRowBars;if(!t||!e.showGenes)return;let n=new Map(e.walkGeneFeatures??[]);return e.geneFeatures&&n.set(t.reference.name,e.geneFeatures),n.size?Lr([t.reference,...t.rows],n):void 0}})).views(e=>({get launchableAssemblies(){return no(Fa(e.contributingAssemblies,e.graphRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.graphRegion;return t!==void 0&&Ee({views:[...(0,N.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),r=n?at(n):void 0,o=r?it(e.assemblyResolver,r):void 0,a=e.graphRegion,i=e.nodeById,s=e.nodeNeighbors,d=a&&i&&s?He({nodeId:t,nodeById:i,neighbors:s}):void 0,c=a&&d?{sample:a.assemblyName,haplotype:void 0,refName:a.refName,...d}:void 0;return{own:r&&o?{location:gn(r),assembly:o}:void 0,reference:a&&c?{location:gn(c),assembly:a.assemblyName}:void 0,highlight:a&&c?{location:c,assembly:a.assemblyName}:void 0}}})).views(e=>({get host(){let t;try{t=(0,N.getContainingView)(e)}catch{return}return xa(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?yt(t,n):void 0},get tubeMapPicture(){let t=e.layoutResult?.tubeMap;return t?Ur(t.layout):void 0},get tubeMapReference(){let t=e.layoutResult?.tubeMap;return t&&e.drawnGraph?_r(e.drawnGraph,t.layout):void 0},get tubeMapDeviations(){let t=e.layoutResult?.tubeMap?.coarse,n=e.layoutResult?.tubeMap?.layout;return t&&n?Yr(t.graph,n,t.deviations):[]},get tubeMapReferenceNodes(){let t=e.layoutResult;return t?.tubeMap&&!t.referenceAxis&&e.drawnGraph?jr(e.drawnGraph,t.tubeMap.layout):void 0}})).views(e=>({get tubeMapGenes(){let t=e.tubeMapReference;return e.showGenes&&!e.host&&t&&e.backboneGenes?Jr(t,e.backboneGenes):[]},get referenceStripApplies(){return!!e.host?.initialized&&!!e.layoutResult&&e.drawsNodes&&!e.hostPlacesX&&!e.facetPanels}})).views(e=>({get referenceStripBlocks(){let{graph:t}=e;return e.showReferenceStrip&&e.referenceStripApplies&&t?Vr(t,{colorScheme:e.effectiveColorScheme,referenceRamp:e.referenceRamp,walks:e.walkLift?.walks}):[]},get referenceStripFrame(){let{host:t,graphRegion:n}=e;return t?.initialized&&n?yt(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}=Dr(e.referenceStripBlocks,t,e.paneWidth);return n>0||r>0},get referenceStripFaded(){return e.referenceStripBlocks.some(t=>t.faded)}})).views(e=>({get referenceStripLit(){if(!e.referenceStripShown)return;let t=a=>({x:a.x*e.scaleX+e.translateX,y:a.y*e.scaleY+e.translateY}),n=e.hoveredNode===null?e.hoveredBubble:null;if(n){let a=e.bubbleHalos.find(i=>lr(i.bubble,n));return{start:n.start,end:n.end,anchor:a?t(a.labelAt):void 0}}let r=e.hoveredNode??e.selectedNode,o=r===null?void 0:e.nodeSpan(r);return o&&r!==null?{...o,anchor:Or(e.nodePositions?.[r],t)}:void 0},referenceStripNodeAt(t,n){let r=e.referenceStripFrame;return e.referenceStripShown&&r?Wr(e.referenceStripBlocks,r,t,n):void 0},get paperCss(){return bd(e.darkMode?ja:Ha)},get referenceStripZonePx(){return e.referenceStripShown?$r:0}})).views(e=>({get paneCeiling(){return Math.max(hn,e.paneHeight??fd)},get fitPadTopBase(){let t=Qr(e.tubeMapGenes);return D+Math.max(0,t-1)*Zr+e.referenceStripZonePx},get legendRoom(){let t=e.layoutBounds,{width:n,height:r}=e.legendSize;if(!t||t.w<=0||n===0||e.facetPanels||e.tubeMapReads)return;if(e.hostPlacesX)return"top";let o=this.fitPadTopBase,a=e.host?this.canvasHeight:this.paneCeiling,i=l=>(e.paneWidth-e.fitPadLeft-l)/t.w,s=l=>e.pixelRows?t.h+l+D<=a?1/0:0:(a-l-D)/t.h,d=Math.min(i(n+2*le),s(o));return Math.min(i(D),s(o+r+le))>=d?"top":"right"},get fitPadTop(){return this.fitPadTopBase+(this.legendRoom==="top"?e.legendSize.height+le:0)},get fitPadRight(){return this.legendRoom==="right"?Math.max(D,e.legendSize.width+2*le):D},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(yd/r,(this.paneCeiling-this.fitPadTop-D)/t.h):0},get facetSpec(){let{field:t,domain:n,columns:r}=e.facet;return t===""?void 0:n.length===0&&r===void 0?t:{field:t,domain:[...n],...r===void 0?{}:{columns:r}}},get facetPlacement(){let t=e.facetPanels,{field:n,domain:r}=e.facet;return t?nt(t.map(o=>o.walks[0].name),e.hostPlacesX||n===""?"walk":n,r):void 0},facetGridIn(t){let n=this.facetPlacement,r=e.layoutBounds;return n&&r&&r.w>0?et({count:n.count,bounds:r,pixelRows:e.pixelRows,width:e.paneWidth,room:t,columns:e.hostPlacesX?1:n.columns??e.facet.columns}):void 0},get facetGrid(){return this.facetGridIn(e.host?this.canvasHeight:this.paneCeiling)},get canvasHeight(){let t=e.layoutBounds,n=e.paneWidth-D-this.fitPadRight,r=this.paneCeiling;if(!t)return r;let o=this.facetGrid;if(o)return Math.max(hn,o.total);let a=Math.max(hn,e.legendSize.height+2*le+e.referenceStripZonePx);return e.pixelRows?Math.min(r,Math.max(a,t.h+this.fitPadTop+D)):t.w>0&&n>0?Math.min(r,Math.max(a,t.h*Math.max(n/t.w,this.minFitScale)+this.fitPadTop+D)):r},get viewBox(){let t=this.facetGrid;return t?{width:t.width,height:t.height}:{width:e.paneWidth,height:this.canvasHeight}},get fittedTransform(){let t=e.layoutBounds,n=this.facetGrid;return t?n?ve(t,n.width,n.height,e.pixelRows,{padLeft:12,padTop:12,padRight:12,padBottom:12}):ve(t,e.paneWidth,this.canvasHeight,e.pixelRows,{minScale:this.minFitScale,padLeft:e.fitPadLeft,padTop:this.fitPadTop,padRight:this.fitPadRight}):void 0}})).views(e=>({viewportToBuild(){return zo(bn(e),Ld)},applyHighlights(t){let{hoveredNode:n,hoveredEdge:r,selectedNode:o}=e,a=new Map;o!==null&&a.set(o,Rd),n!==null&&n!==o&&a.set(n,za),t.setNodeHighlights(a),t.setEdgeHighlight(r,za)},paint(t){let n=(0,Qa.getDpr)();t.updateTransform({scaleX:e.scaleX*n,scaleY:e.scaleY*n,translateX:e.translateX*n,translateY:e.translateY*n,dpr:n}),t.render(e.referenceStripShown?[0,0,0,0]:e.darkMode?ja:Ha)}})).views(e=>({buildDrawing(t,n){let{nodePositions:r,graph:o,nodeById:a}=e;if(!r||!o||!a)return;fe(e.viewportDirty,e.positionsVersion);let i=(0,W.untracked)(()=>e.viewportToBuild());return{batch:ot({nodePositions:e.walkRowBars?{}:r,graph:o,nodeById:a,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:n,nodeWidth:e.nodeWidth,highlight:t,axis:(0,W.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:i,referenceRamp:e.referenceRamp,deletions:e.deletionEdgeIndexes,hiddenEdges:e.hiddenEdgeIndexes,version:e.positionsVersion}),viewportBounds:i}},get overlayLabels(){return wr(e)},hoveredOn(t){let n=e.hoveredNode,r=n?e.nodeById?.get(n):void 0;return r?Fr(t,r.id,r.length)??"not on this walk":void 0},figureSpec(){let t=e.graphRegion,n=e.sourceAdapter,r=n?.assemblyNameToPanSN,o=t&&`${t.refName}:${t.start}-${t.end}`,a=$e(e.sourceGfaLocation),i=n?.type==="GbzBaseSyntenyAdapter"?$e(n.gbzDbLocation):void 0,s=a?{gfa:a,region:o}:i&&t&&o?{gbz:{db:i,index:$e(n.haplotypeIndexLocation),region:o,haplotypes:e.cutHaplotypes?.map(u=>r?.[u]??u),referenceSample:n.referenceSample||r?.[t.assemblyName]||t.assemblyName,context:n.context,snarls:n.subgraphSnarls}}:void 0;if(!s)return;let d=e.showGenes?e.geneTrack:void 0,c=d?(0,N.getSession)(e).tracks.find(u=>u.trackId===d.trackId):void 0,l=c?(0,ne.expandTabixShorthand)((0,ne.readConfObject)(c,"adapter"),"gffGzLocation"):void 0,g=l?.type==="Gff3TabixAdapter"?{file:$e(l.gffGzLocation),index:$e(l.index?.location),format:"gff3"}:void 0;return JSON.parse(JSON.stringify({...s,genes:g?.file&&g.index?g:void 0,referencePath:e.referencePath||void 0,layout:e.chosenLayoutMode,quality:e.layoutQuality,bubbleSpread:e.bubbleSpread,walks:e.walkLayers.length?e.walkLayers.map(u=>u.color?u:u.walk):void 0,facet:e.walkLayers.length>1?e.facetSpec:void 0,width:e.paneWidth,height:e.paneCeiling,colorScheme:e.chosenColorScheme,nodeWidth:e.nodeWidth,showDeletionEdges:e.showDeletionEdges||void 0}))},get figureUnavailable(){return e.layoutResult?e.drawsNodes||e.walkRowBars?void 0:`${Z(e.chosenLayoutMode).label} draws a picture of its own, which the SVG export does not`:"Nothing is drawn yet"},figure(){let{graph:t,layoutResult:n}=e;return t&&n&&!this.figureUnavailable?aa(t,n,{width:e.paneWidth,height:e.paneCeiling,walks:e.walkLayers,facet:e.facetSpec,colorScheme:e.effectiveColorScheme,nodeWidth:e.nodeWidth,showDeletionEdges:e.showDeletionEdges,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,region:e.graphRegion,colorDomain:e.colorDomain,fitToDrawing:e.popStack.length>0,genes:e.showGenes?e.backboneGenes:void 0,walkRows:e.walkRowBars,rowGenes:e.walkRowGenes,rowGeneGaps:e.walkRowGeneGaps,spec:this.figureSpec()}):void 0},get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?pa(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?Hr(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:o}=e,a=t&&n&&r?.initialized&&o?yt(r,o):void 0;return t&&n&&a?Xr(t,i=>i*a.scale+a.translateX,n.x,e.paneWidth):[]}})).views(e=>({get tubeMapKeys(){let t=e.layoutResult,n=t?.tubeMap?.layout.reads??[],r=e.tubeMapPicture,o=e.tubeMapFrame,a=r&&o&&Kr(o.yScale)?r.mismatches.filter(i=>qr(i,{x:o.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(a.map(i=>i.kind))}},tubeMapNodeAt(t,n){let r=e.layoutResult?.tubeMap,o=e.tubeMapFrame;return(r&&o?ma(r,o,t,n):null)??zr(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=Bt(n,t);Ad(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})},setFacet(t){t!==e.facet.field&&(e.facet.domain=[]),e.facet.field=t},setFacetColumns(t){e.facet.columns=t},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&&Be([...(0,N.getSession)(e).views]).some(o=>o.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=t},setHoveredRowWalks(t){t.join(`
1
+ import{a as Kn,b as qn,c as Jn,d as Zn,m as He}from"./chunks/chunk-LGFKHSVJ.js";import{a as ss}from"./chunks/chunk-KWAXLUPQ.js";import{a as ds,d as Qn,g as er,h as tr}from"./chunks/chunk-4T7DPQTR.js";import{a as Me}from"./chunks/chunk-J4OLMLS5.js";import{$ as Er,A as he,Ba as eo,C as Gr,D as Lr,Ea as to,F as Nr,Ga as no,H as be,Ha as ro,I as Pr,Ia as oo,J as Ar,Ja as ao,K as st,Ka as io,Ma as so,N as vr,Na as ct,Oa as co,Pa as ut,Q as Ht,Qa as uo,R as Cr,Ra as pt,S as jt,Sa as Te,U as Xt,Ua as po,V as zt,W as Ir,Wa as mo,X as Br,Y as dt,a as _n,aa as Fr,b as Dt,ba as ms,c as cs,ca as $r,d as Xe,da as Dr,e as ze,ea as Vr,f as rr,fa as Yt,g as lr,ga as Wr,ha as Or,ia as Ut,j as gr,k as Ke,ka as _r,l as qe,la as Hr,m as hr,ma as jr,n as Je,na as Xr,o as br,oa as zr,p as Q,pa as Yr,q as Sr,qa as Ur,r as Qe,ra as Kt,t as Rr,ta as Kr,u as et,ua as qr,v as rt,w as ot,x as at,xa as Jr,y as ge,ya as Zr,za as Qr}from"./chunks/chunk-QHMGWDDH.js";import{b as kr,d as xr}from"./chunks/chunk-UQEPPJEO.js";import"./chunks/chunk-SCMIJAAX.js";import{a as ie}from"./chunks/chunk-FCWXYIFC.js";import{H as Ot,J as mr,K as Le,L as Ze,M as _t,N as fr,P as yr,Q as wr,R as Mr,S as tt,T as nt,V as Tr,Y as it,Z as ls,a as J,b as or,c as ar,d as Vt,e as ir,f as Ye,g as Ue,q as le,r as sr,s as dr,t as Wt,u as cr,v as ur,w as pr}from"./chunks/chunk-UTWFU4X6.js";import{b as B,d as Xn,e as zn,g as Yn,h as Un}from"./chunks/chunk-7BKUWQE5.js";import{a as Hn,d as jn}from"./chunks/chunk-KULNKXPT.js";import{a as Ge,b as us,c as ps,d as nr,e as je}from"./chunks/chunk-XEJ47DLD.js";import{a as ee,b as G}from"./chunks/chunk-FY3BTKY4.js";var go=ee((cc,lo)=>{lo.exports=JBrowseExports["@jbrowse/core/Plugin"]});var gt=ee((mc,ho)=>{ho.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var te=ee((lc,bo)=>{bo.exports=JBrowseExports["@jbrowse/core/configuration"]});var Qt=ee((yc,wo)=>{wo.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var de=ee((wc,ko)=>{ko.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var vo=ee((Lc,Ao)=>{Ao.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var Io=ee((Tc,Co)=>{Co.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var Eo=ee((Nc,Bo)=>{Bo.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var Ta=ee((op,La)=>{La.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var Ri=ee((Vm,Si)=>{Si.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"]});var Gi=ee((Wm,Mi)=>{Mi.exports=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"]});var Ai=ee((jm,Pi)=>{Pi.exports=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"]});var Ci=ee((Xm,vi)=>{vi.exports=JBrowseExports["@jbrowse/render-core/displayPhase"]});var os=G(go(),1),as=G(Me(),1);var mt=G(Ge(),1),lt=(0,_n.createSvgIcon)([(0,mt.jsx)("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),(0,mt.jsx)("circle",{cx:"14.8",cy:"18",r:"2"},"1"),(0,mt.jsx)("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var yo=G(gt(),1);var qt=G(te(),1),Jt=G(ie(),1),gs=(0,qt.ConfigurationSchema)("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.gbz.db",locationType:"UriLocation"}},haplotypeIndexLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},readsLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},readsIndex:(0,qt.ConfigurationSchema)("GbzBaseReadsIndex",{indexType:{model:Jt.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}}}),subgraphSnarls:{type:"stringEnum",model:Jt.types.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:He.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:He.context,advanced:!0},nodeLimit:{type:"number",defaultValue:He.limit,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}}}:{}}:{}}}}),fo=gs;function Zt(e){e.addAdapterType(()=>new yo.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:fo,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-3BCUI2JI.js").then(t=>t.default)}))}var xo=G(Qt(),1),So=G(de(),1);function hs(e){return"getReads"in e&&typeof e.getReads=="function"}var bs=e=>typeof e=="object"&&e!==null&&Object.entries(e).some(([t,n])=>["uri","localPath","blobId"].includes(t)&&typeof n=="string"&&n!=="");function Ro(e){return typeof e.reads=="string"&&e.reads!==""||bs(e.readsLocation)}var Ne=class extends So.RpcMethodType{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(n){let{adapterConfig:r,nodeNames:o,sessionId:a,signal:i}=n,{dataAdapter:s}=await(0,xo.getAdapter)(this.pluginManager,a,r);return hs(s)?s.getReads(o,{signal:i}):{records:[],total:0}}};var Mo=G(Qt(),1),Go=G(de(),1);function fs(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var Pe=class extends Go.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:r,region:o,sessionId:a,opts:i,signal:s}=n,{dataAdapter:d}=await(0,Mo.getAdapter)(this.pluginManager,a,r);return fs(d)?d.getSubgraph(o,{...i,signal:s}):(console.warn(`[GetSubgraph] ${d.constructor.name} does not implement getSubgraph`),"")}};var Lo=G(je(),1),To=G(de(),1),No=G(ie(),1),ys=(0,Lo.lazy)(()=>import("./chunks/AddTrackWorkflow-F6FBBEJM.js"));function en(e){e.addAddTrackWorkflowType(()=>new To.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:ys,stateModel:No.types.model({})}))}var tn;function nn(){return tn??=import("./chunks/bandage-layout-UCRW4G4J.js").then(e=>e.default()).catch(e=>{throw tn=void 0,e}),tn}var Po=G(de(),1),Ae=class extends Po.RpcMethodType{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(n){let{graph:r,options:o,statusCallback:a}=n;a?.("Loading layout engine");let i=await nn();a?.("Computing layout");let s=performance.now(),d=i.computeLayout(r,o),c=performance.now()-s;return{result:d,duration:c}}};var yi=G(je(),1),wi=G(vo(),1),ki=G(Io(),1);var gi=G(te(),1),hi=G(Eo(),1),bi=G(Me(),1),z=G(ie(),1),fi=G(Dt(),1);var ws=.9,rn=2,ks=1e3;function Fo(e,t,n,r=a=>a,o=[]){let a=new Map(e.nodes.map(s=>[s.name,s])),i=[];for(let s of t){let d=[],c=1/0,l=-1/0,g=1/0,u=[],p=[];for(let m of et(s)){let b=a.get(m),S=b&&n[b.id];if(!(!b||!S?.length)){if(B(b)&&(b.stable.start<s.start||b.stable.start>=s.end)){p.push(S[Math.floor(S.length/2)]);continue}u.push(b.id),d.push(Ue(S.length===1?[S[0],S[0]]:S));for(let L of S)c=Math.min(c,L.x),l=Math.max(l,L.x),g=Math.min(g,L.y)}}if(u.length===0)continue;let w={x:(c+l)/2,y:g},M=p.length?{x:p.reduce((m,b)=>m+b.x,0)/p.length,y:p.reduce((m,b)=>m+b.y,0)/p.length}:w,h=new Map;for(let m of s.routes??[])for(let b of new Set(m.steps))h.set(b,(h.get(b)??0)+1);let y=[];for(let m of s.routes??[]){if(s.longestAlleleLength<ks)break;if(m.steps.length===0)continue;let b=Math.min(...m.steps.map(k=>h.get(k))),S,L=-1;for(let k of m.steps)if(h.get(k)===b)for(let R of n[k]??[]){let T=Math.hypot(R.x-M.x,R.y-M.y);T>L&&(L=T,S=R)}S&&y.push({route:m,at:S,text:xs(m,r)})}i.push({bubble:s,...Qe(s,o),path:d.join(""),labelAt:w,members:u.length,nodeIds:u,whole:u.length>=ws*e.nodes.length,routes:y})}return i}function xs(e,t){let n=[...new Set(e.walks.map(t))].sort(),r=n.slice(0,rn).join(", "),o=n.length>rn?` +${n.length-rn}`:"";return`${r}${o} \xB7 ${Sr(e.bp)}`}function $o(e){if(!e.nodes.some(B))return[];let t=new Map(e.nodes.map(u=>[u.id,u])),n=rr(e),r=new Map(n.map((u,p)=>[u,p])),o=new Int32Array(n.length+1),a=new Map,i=new Set;for(let u of e.edges){let p=r.get(u.from),w=r.get(u.to);if(p===void 0||w===void 0||p===w)continue;i.add(`${u.from}>${u.to}`).add(`${u.to}>${u.from}`);let[M,h]=p<w?[p,w]:[w,p];o[M+1]++,o[h]--;let[y,m]=p<w?[u.from,u.to]:[u.to,u.from];(a.get(y)??a.set(y,new Set).get(y)).add(m)}for(let u=1;u<o.length;u++)o[u]+=o[u-1];let s=e.nodes.filter(B).sort((u,p)=>u.stable.start-p.stable.start),d=new Set([s[0].id,s.at(-1).id]),c=s.map(u=>[u,r.get(u.id)]).filter(([u,p])=>d.has(u.id)||o[p]===0).sort(([u,p],[w,M])=>p-M||u.stable.start-w.stable.start),l=e.paths?.map(u=>{let p=new Map;return u.nodeIds.forEach((w,M)=>{p.has(w)||p.set(w,M)}),p}),g=[];for(let u=0;u+1<c.length;u++){let[p,w]=c[u],[M,h]=c[u+1],y=n.slice(w+1,h);if(y.length===0)continue;let m=new Map([[p.id,{min:0,max:0,n:1}]]);for(let E of[p.id,...y]){let _=m.get(E);if(_)for(let Y of a.get(E)??[]){if(r.get(Y)>h)continue;let x=Y===M.id?0:t.get(Y).length,N=m.get(Y);m.set(Y,{min:Math.min(N?.min??1/0,_.min+x),max:Math.max(N?.max??-1/0,_.max+x),n:Math.min(xr,_.n+(N?.n??0))})}}let b=l&&Ss(e,t,l,p.id,M.id),S=b?.n?b:void 0,L=S??m.get(M.id)??{min:0,max:0,n:0},k=b!==void 0&&b.left>0,R=p.stable.start+p.length,T=M.stable.start,A=[p.id,...y.filter(E=>B(t.get(E))),M.id],C=A.some((E,_)=>_>0&&!i.has(`${A[_-1]}>${E}`)),O=C||k,H=C&&!S;g.push({refName:p.stable.refName,start:R,end:T,segmentCount:y.length+2,pathCount:L.n,inversion:!1,shortestAlleleLength:H?T-R:L.min,longestAlleleLength:H?T-R:L.max,segments:[p,...y.map(E=>t.get(E)),M].map(E=>E.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:O,routes:S?.routes})}return g}function Ss(e,t,n,r,o){let a=new Map,i=1/0,s=-1/0,d=0;return e.paths.forEach((c,l)=>{let g=n[l].get(r),u=n[l].get(o);if(g===void 0||u===void 0){(g!==void 0||u!==void 0)&&d++;return}let p=c.nodeIds.slice(Math.min(g,u)+1,Math.max(g,u));u<g&&p.reverse();let w=0;for(let y of p)w+=t.get(y)?.length??0;let M=p.join(","),h=a.get(M)??{steps:p,bp:w,walks:[]};h.walks.push(c.name),a.set(M,h),i=Math.min(i,w),s=Math.max(s,w)}),a.size||d?{min:i,max:s,n:a.size,left:d,routes:[...a.values()]}:void 0}function Do(e,t){let n=new Set(t),r=e.nodes.filter(d=>n.has(d.name)),o=new Set(r.map(d=>d.id)),a=new Map(e.nodes.map(d=>[d.id,d.length])),i=new Map,s=e.paths?.flatMap(d=>{let c=d.nodeIds.findIndex(u=>o.has(u));if(c<0)return[];let l=d.nodeIds.filter(u=>o.has(u));i.set(d.name,{first:c,nodeIds:l});let g=d.nodeIds.slice(0,c).reduce((u,p)=>u+(a.get(p)??0),0);return[{...d,nodeIds:l,...d.start===void 0?{}:{start:d.start+g}}]});return{name:e.name,nodes:r,edges:e.edges.filter(d=>o.has(d.from)&&o.has(d.to)),...s?.length?{paths:s}:{},anchorPaths:Ye(e,i),pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}function ht(e,t,n){let r=new Map;for(let a of e.nodes)if(B(a)){let{refName:i}=a.stable;if(n[a.id]?.length){let s=r.get(i)??r.set(i,{nodes:[],reach:0}).get(i);s.nodes.push(a),s.reach=Math.max(s.reach,a.length)}}for(let{nodes:a}of r.values())a.sort((i,s)=>i.stable.start-s.stable.start);let o=[];for(let a of t){let i=r.get(a.refName);if(!i)continue;let s=[],d=[],c,l=1/0,g=0,u=(a.start+a.end)/2,{nodes:p,reach:w}=i;for(let M=Yn(p,a.start-w);M<p.length&&p[M].stable.start<a.end;M++){let h=p[M],y=h.stable.start,m=y+h.length;if(m<=a.start)continue;let b=n[h.id];g+=Math.min(m,a.end)-Math.max(y,a.start);let S=[];for(let R of a.exons){let T=Math.max(R.start,y),A=Math.min(R.end,m);if(A<=T)continue;let C=Wt(b,(T-y)/h.length,(A-y)/h.length);C.length===1&&C.push({...C[0]}),S.push(Ue(C))}S.length>0&&(s.push(...S),d.push({nodeId:h.id,d:S.join("")}));let L=Math.min(Math.max(u,y),m),k=Math.abs(L-u);if(k<l){l=k;let[R]=Wt(b,(L-y)/h.length,(L-y)/h.length);c=R}}c&&o.push({gene:a,exons:s.join(""),exonsByNode:d,at:c,covered:g/(a.end-a.start)})}return o}function Rs(e,t){let n=e.indexOf(":"),r=e.indexOf(":",n+1);if(n!==-1&&r!==-1){let o=e.slice(0,n),a=e.slice(n+1,r),i=e.slice(r+1);a==="i"||a==="f"?t[o]=+i:a==="Z"&&(t[o]=i)}}function ve(e){let t={};for(let n of e)Rs(n,t);return t}function on(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 Vo=62,Ms=60;function Gs(e){let t=[],n="+",r=0;function o(a){a>r&&t.push({id:e.slice(r,a),strand:n})}for(let a=0;a<e.length;a++){let i=e.charCodeAt(a);(i===Vo||i===Ms)&&(o(a),n=i===Vo?"+":"-",r=a+1)}return o(e.length),t}function an(e){let t={nodes:[],links:[],paths:[],walks:[],header:[],id:""};for(let n of e.split(`
2
+ `)){let r=n.endsWith("\r")?n.slice(0,-1):n;if(r.startsWith("H")){let[,...o]=r.split(" ");t.header.push(ve(o))}else if(r.startsWith("S")){let[,o,...a]=r.split(" "),i,s,d,c=!1,l=a[0]??"*";/^\d+$/.test(l)?(i=+l,s=a[1]??"*",d=a.slice(2)):(c=!0,s=l,i=s==="*"?0:s.length,d=a.slice(1));let g=ve(d);c&&"LN"in g&&(i=+g.LN),t.nodes.push({id:o,length:i,sequence:s,tags:g})}else if(r.startsWith("E")){let[,,o,a,,,,,i,...s]=r.split(" ");o&&a&&t.links.push({source:o.slice(0,-1),target:a.slice(0,-1),strand1:o.at(-1),strand2:a.at(-1),cigar:i??"*",tags:ve(s)})}else if(r.startsWith("L")){let[,o,a,i,s,d,...c]=r.split(" ");o&&i&&s&&t.links.push({source:o,target:i,strand1:a,strand2:s,cigar:d??"*",tags:ve(c)})}else if(r.startsWith("W")){let[,o,a,i,s,d,c,...l]=r.split(" ");o&&a&&i&&s&&d&&c&&t.walks.push({sample:o,haplotype:+a,contig:i,start:s==="*"?-1:+s,end:d==="*"?-1:+d,segments:Gs(c),tags:ve(l)})}else if(r.startsWith("P")){let[,o,a,...i]=r.split(" ");o&&a&&t.paths.push({name:o,path:a,rest:i})}}return t}function Ls(e){let t=new Map,n=new Map;function r(a,i){t.has(a)||t.set(a,i)}function o(a,i){r(a,i),n.set(a,(n.get(a)??0)+1)}for(let a of e.links)r(a.source,a.strand1==="-"?"-":"+"),r(a.target,a.strand2==="-"?"-":"+");for(let a of e.paths)for(let i of a.path.split(","))o(i.slice(0,-1),i.endsWith("-")?"-":"+");for(let a of e.walks)for(let i of a.segments)o(i.id,i.strand==="-"?"-":"+");return{canonical:t,traversals:n}}var Wo=e=>e.start===-1?0:e.start;function Ts(e){return[...e.paths.map(t=>({...J(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:Wo(t),steps:t.segments.map(n=>({id:n.id,strand:n.strand==="-"?"-":"+"}))}))]}function Ns(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 Ce=e=>typeof e=="number"&&e>0?e:void 0;function Ps({tags:e,length:t}){let n=Ce(e.RC)??Ce(e.FC)??Ce(e.KC);return Ce(e.dp)??Ce(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function As(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:on(e),samples:Ns(e)}}function Oo(e,t="Imported GFA"){let n=[],r=[],{canonical:o,traversals:a}=Ls(e),i=p=>`${p}${o.get(p)??"+"}`;for(let p of e.nodes){let w=Ps(p)??Math.max(a.get(p.id)??1,1);n.push(As(p,o.get(p.id)??"+",w))}for(let p of e.links)r.push({from:i(p.source),to:i(p.target),fromStrand:p.strand1==="-"?"-":"+",toStrand:p.strand2==="-"?"-":"+"});let s=[],d=new Map,c=(p,w)=>[p,w].sort().join("--");function l(p,w){for(let M=0;M<p.length-1;M++){let h=c(p[M],p[M+1]);d.has(h)||d.set(h,new Set),d.get(h).add(w)}}for(let p of e.paths){let w=p.path.split(",").map(M=>i(M.slice(0,-1)));s.push({name:p.name,nodeIds:w,start:J(p.name).start}),l(w,p.name)}for(let p of e.walks){let w=p.segments.map(h=>i(h.id)),M=`${p.sample}#${p.haplotype}#${p.contig}`;s.push({name:M,nodeIds:w,start:Wo(p),sample:p.sample,haplotype:p.haplotype,contig:p.contig}),l(w,M)}for(let p of r){let w=d.get(c(p.from,p.to));w&&w.size>0&&(p.pathIds=[...w])}let g=new Map(e.nodes.map(p=>[p.id,p.length])),u=e.paths.length>0||e.walks.length>0?or(Ts(e),p=>g.get(p)??0):void 0;return{name:t,nodes:n,edges:r,paths:s.length>0?s:void 0,anchorPaths:u?.anchorPaths,pathVisits:u?.pathVisits,anchoredBy:n.some(p=>p.stable)?"tags":void 0}}var vs="\0deletion:";function _o(e,t){let n=new Map(t.map(o=>[o.edgeIndex,`${vs}${o.edgeIndex}`])),r=[];return e.edges.forEach((o,a)=>{let i=n.get(a);if(i===void 0)r.push(o);else{let{fromStrand:s,toStrand:d}=o;r.push({from:o.from,to:i,...s?{fromStrand:s}:{}},{from:i,to:o.to,...d?{toStrand:d}:{}})}}),{graph:{...e,nodes:[...e.nodes,...[...n.values()].map(o=>({id:o,name:o,length:0,depth:0}))],edges:r},routes:n,ids:new Set(n.values())}}function Ho(e,t,n,r,o){let a=new Map(e.nodes.map(i=>[i.id,i.length]));return t.map(i=>{let s=i.bypassed.reduce((l,g)=>l+(a.get(g)??0),0),d=Math.max(o.minimumNodeLength,r(s)*.5),c=n.get(i.edgeIndex);return{id:c,name:c,length:Math.round(d*1e6/o.nodeLengthPerMegabase),depth:0}})}function jo(e,t){let n={...e},r={};for(let[o,a]of t){let i=n[a];delete n[a],i?.length&&(r[o]=i)}return{nodePositions:n,deletionRoutes:r}}function Xo(e,t){let n=e.nodes.filter(h=>B(h)&&(t[h.id]?.length??0)>0);if(n.length<2)return t;let r=n.map(h=>{let y=t[h.id],m=y[Math.floor(y.length/2)];return{x:m.x,y:m.y,r:h.stable.start+h.length/2,w:h.length}}),o=r.reduce((h,y)=>h+y.w,0),a=r.reduce((h,y)=>h+y.x*y.w,0)/o,i=r.reduce((h,y)=>h+y.y*y.w,0)/o,s=r.reduce((h,y)=>h+y.r*y.w,0)/o,d=0,c=0;for(let h of r)d+=h.w*(h.x-a)*(h.r-s),c+=h.w*(h.y-i)*(h.r-s);let l=-Math.atan2(c,d),g=Math.cos(l),u=Math.sin(l),p={};for(let[h,y]of Object.entries(t))p[h]=y.map(m=>{let b=m.x-a,S=m.y-i;return{x:a+g*b-u*S,y:i+u*b+g*S}});let w=0,M=0;for(let h of e.nodes)if(!B(h))for(let y of p[h.id]??[])y.y>i?w++:M++;if(M>w)for(let h of Object.values(p))for(let y of h)y.y=2*i-y.y;return p}var zo=30;function Cs(e,t){let{opts:n}=t,r=new Map(t.nodes.map(u=>[u.id,Ze(n,u.length)])),o=u=>r.get(u)??n.minimumNodeLength,a=e.nodes.filter(B).sort((u,p)=>u.stable.start-p.stable.start),i=new Map,s=0;for(let u of a)i.set(u.id,{x:s,y:0}),s+=o(u.id)+n.edgeLength;let d=Xe(e),c=new Map(a.map(u=>[u.id,0])),l=a.map(u=>u.id);for(let u of l){let p=i.get(u),w=c.get(u)+1;for(let M of d.get(u)??[])c.has(M)||(c.set(M,w),i.set(M,{x:p.x+o(u)/2,y:zo*w}),l.push(M))}let g=0;for(let u of e.nodes)i.has(u.id)||i.set(u.id,{x:g++*s/e.nodes.length,y:zo*3});return i}function Yo(e,t){let n=Cs(e,t);return t.nodes.map(r=>({...r,...n.get(r.id)}))}function Uo(e,t,n={}){let r=ir(Oo(an(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 Is(e,t,n){let r=e.nodes.some(B);return{graph:{nodes:r?Yo(e,t):t.nodes,edges:e.edges},options:{quality:n.quality,linearLayout:n.linearLayout,...t.opts,...r?{rotateComponents:!1}:{}}}}function Ko(e,t){let n=e.nodes.some(B);return`${t.quality}|${t.linearLayout}|${t.bubbleSpread}|${n}|${e.referencePath??""}`}async function qo(e,t,n){let r=wr(t.bubbleSpread),o=le(e),a=_o(e,o),i=sr(a.graph,a.ids),s={...i.graph,nodes:i.graph.nodes.filter(h=>!a.ids.has(h.id))},d=_t(s,r),{result:c,duration:l}=await n(Is(i.graph,{...d,nodes:[...d.nodes,...Ho(e,o,a.routes,fr(s,r),d.opts)]},t)),g=_t(e,r),u=new Map(g.nodes.map(h=>[h.id,Ze(g.opts,h.length)])),p=dr(c.nodePositions,i.runs,h=>u.get(h)??0),{nodePositions:w,deletionRoutes:M}=jo(e.nodes.some(B)?Xo(e,p):p,a.routes);return{result:{...c,nodePositions:w,...o.length?{deletionRoutes:M,extent:Jo(M)}:{}},duration:l}}function Jo(e){let t=1/0,n=1/0,r=-1/0,o=-1/0;for(let a of Object.values(e))for(let i of a)t=Math.min(t,i.x),n=Math.min(n,i.y),r=Math.max(r,i.x),o=Math.max(o,i.y);return{minX:t,minY:n,maxX:r,maxY:o}}var D=40,Bs=1e-6,Es=100;function Ie(e){return Math.max(Bs,Math.min(Es,e))}function sn(e,t,n,r=D){let o=t-e.h*n;return r-e.minY*n+Math.max(0,o)/2}function Be(e,t,n,r,{minScale:o=0,padLeft:a=D,padTop:i=D,padRight:s=D,padBottom:d=D}={}){let c=t-a-s,l=n-i-d;if(c<=0||l<=0||!(e.w>0||!r&&e.h>0))return;let g=e.w>0?c/e.w:1/0,u=e.h>0?l/e.h:1/0,p=Ie(Math.max(o,r?g:Math.min(g,u))),w=c-e.w*p;return{scale:p,translateX:a-e.minX*p+Math.max(0,w)/2,translateY:sn(e,l,r?1:p,i)}}function bt(e,t={}){let{minX:n,minY:r,maxX:o,maxY:a}=Jo(e.nodePositions),{region:i}=t;e.referenceAxis&&i&&i.end>i.start&&(n=i.start,o=i.end);let s=t.extent??e.extent;return s&&(n=Math.min(n,s.minX??n),r=Math.min(r,s.minY??r),o=Math.max(o,s.maxX??o),a=Math.max(a,s.maxY??a)),{minX:n,minY:r,w:o-n,h:a-r}}var X=e=>+e.toFixed(1);function Fs(e){let t=/^rgba?\(([^,]+),([^,]+),([^,)]+)(?:,([^)]+))?\)$/.exec(e.replaceAll(" ",""));if(!t)return{color:e,opacity:1};let n=t[4]===void 0?1:Number(t[4]);return{color:`rgb(${t[1]},${t[2]},${t[3]})`,opacity:n}}function dn(e,t){let{color:n,opacity:r}=Fs(t);return`${e}="${n}"${r<1?` ${e}-opacity="${X(r)}"`:""}`}var Zo=.5,Qo=.25;function ea(e,t){let n=[],r=[],o=(c,l)=>{let g={d:`M${X(c)} ${X(l)}`,segments:0,x0:c,x1:c,y0:l,y1:l};return r.push(g),g},a=c=>{let l=r.at(-1)??o(c[0],c[1]);for(let g=0;g<c.length;g+=2)l.x0=Math.min(l.x0,c[g]),l.x1=Math.max(l.x1,c[g]),l.y0=Math.min(l.y0,c[g+1]),l.y1=Math.max(l.y1,c[g+1]);return l.segments++,l},i=c=>{let l=new Set;return r.map(g=>{if(!c||g.x1-g.x0>=Zo||g.y1-g.y0>=Zo)return g.d;let u=(g.x0+g.x1)/2,p=(g.y0+g.y1)/2,w=`${Math.round(u/Qo)} ${Math.round(p/Qo)}`;return g.segments===0||l.has(w)?"":(l.add(w),`M${X(u)} ${X(p)}h0`)}).join("")},s={canvas:void 0,fillStyle:"#000",strokeStyle:"#000",lineWidth:1,lineCap:"butt",lineJoin:"miter",beginPath(){r=[]},moveTo(c,l){o(c,l)},lineTo(c,l){a([c,l]).d+=`L${X(c)} ${X(l)}`},bezierCurveTo(c,l,g,u,p,w){a([c,l,g,u,p,w]).d+=`C${X(c)} ${X(l)} ${X(g)} ${X(u)} ${X(p)} ${X(w)}`},closePath(){let c=r.at(-1);c&&(c.d+="Z")},stroke(){let c=i(s.lineCap!=="butt");c&&n.push(`<path d="${c}" fill="none" ${dn("stroke",s.strokeStyle)} stroke-width="${X(s.lineWidth)}" stroke-linecap="${s.lineCap}" stroke-linejoin="${s.lineJoin}"/>`)},fill(){let c=i(!1);c&&n.push(`<path d="${c}" ${dn("fill",s.fillStyle)}/>`)},fillRect(c,l,g,u){n.push(`<rect x="${X(c)}" y="${X(l)}" width="${X(g)}" height="${X(u)}" ${dn("fill",s.fillStyle)}/>`)}},d={width:e,height:t,style:{},getContext:()=>s};return s.canvas=d,{canvas:d,markup:()=>n.join("")}}var ta="4.4.0";function fe(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function na(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 ra(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 oa(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}function aa(e,t,n,r,o){let a=Ie(e.scale*t),i=a/e.scale;return{scale:a,translateX:n-(n-e.translateX)*i,translateY:o?e.translateY:r-(r-e.translateY)*i}}var ia=(e,t)=>!!e.referencePath&&J(t).name===e.referencePath;function $s(e,t){return(e.paths??[]).filter(n=>n.name===t).sort((n,r)=>(n.start??0)-(r.start??0))}function Ds(e,t){let n=$s(e,t),r=n[0];if(!r)return;let o=new Map(e.nodes.map(y=>[y.id,y])),a=new Map;e.edges.forEach((y,m)=>{a.set(`${y.from}>${y.to}`,m)});let i=y=>o.get(y)?.length??0,s=y=>y.nodeIds.reduce((m,b)=>m+i(b),0),d=n.reduce((y,m)=>y+s(m),0),c=r.start===void 0?void 0:{contig:r.contig??jn(J(t).name),start:r.start,end:Math.max(...n.map(y=>(y.start??0)+s(y)))},l=c?c.end-c.start:d,g=new Set,u=new Set,p=new Map,w=0;for(let y of n)c&&(w=Math.max(w,(y.start??0)-c.start)),y.nodeIds.forEach((m,b)=>{if(g.add(m),b>0){let L=y.nodeIds[b-1],k=a.get(`${L}>${m}`)??a.get(`${m}>${L}`);k!==void 0&&u.add(k)}let S=i(m);p.has(m)||p.set(m,l>0?(w+S/2)/l:0),w+=S});let M=ia(e,t),h=M?[]:(e.paths??[]).filter(y=>ia(e,y.name));return{name:t,reference:M,range:c,nodeIds:g,edgeIndexes:u,progress:p,steps:n.reduce((y,m)=>y+m.nodeIds.length,0),bp:d,referenceBp:h.length>0?h.reduce((y,m)=>y+s(m),0):void 0}}function sa(e,t,n,r){let o=new Map(e.nodes.map(i=>[i.id,i])),a=new Map;for(let[i,s]of t.progress){let d=o.get(i),c=r?.midpoints.get(i),l=n.field==="progress"?s:r&&c!==void 0&&!(d?.stable&&d.stable.rank>0)?(c-r.start)/r.span:void 0;a.set(i,Wr(n,l))}return a}function Vs(e,t){let n=new Set,r=0,o=e.referencePath;if(!o||t.reference)return{reversed:n,bp:r};let a=J(t.name).name,i=new Map(e.nodes.map(s=>[s.id,s]));for(let s of t.progress.keys()){let d=i.get(s),c=d?e.pathVisits?.get(d.name):void 0,l=c?.find(u=>u.path===a)?.strand,g=c?.find(u=>u.path===o)?.strand;l&&g&&l!==g&&(n.add(s),r+=d.length)}return{reversed:n,bp:r}}function ft(e,t,n){let r=new Set,o=t.filter(s=>!r.has(s.walk)&&r.add(s.walk)).flatMap(s=>{let d=Ds(e,s.walk);return d?[{walk:d,layer:s}]:[]}).sort((s,d)=>Number(d.walk.reference)-Number(s.walk.reference));if(o.length===0)return;let a=0,i=o.map(({walk:s,layer:d})=>{let c=Yt(d,s.reference,s.reference?0:a++,o.length===1),{reversed:l,bp:g}=Vs(e,s);return{...s,encoding:c,colors:sa(e,s,c,n),reversed:l,reversedBp:g}});return da(i,n)}var Ws={field:"progress",scheme:"red"};function yt(e,t,n,r){return t.walks.map(o=>{let a=n.find(s=>s.walk===o.name)?.color,i=Yt({walk:o.name,color:{...Ws,...a}},o.reference,0);return da([{...o,encoding:i,colors:sa(e,o,i,r)}],r)})}function da(e,t){return{walks:e,referenceDomain:t?{start:t.start,end:t.start+t.span}:void 0,nodeIds:new Set(e.flatMap(n=>[...n.nodeIds])),edgeIndexes:new Set(e.flatMap(n=>[...n.edgeIndexes])),names:new Set(e.map(n=>n.name))}}var la='font-family="Helvetica, Arial, sans-serif" font-size="11"',Os=48,_s=18,Hs=16,js=22,Xs="rgb(160,160,160)",ga="#daa520",ha="#1c1c22",zs=4,Ys=1,Us=2;function ce(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function un(e,t,n,r,o,a,i,s=1){let d=r.length>1?Os:_s,c=r.length>1?`fill="url(#${e})"`:`fill="${r[0].color}"${s<1?` fill-opacity="${s}"`:""}`,l=r.length>1?`<linearGradient id="${e}">${r.map(u=>`<stop offset="${u.offset}" stop-color="${u.color}"/>`).join("")}</linearGradient>`:"";return{width:Math.max(d+5+(o.length+a.length)*6.2,(i?.length??0)*6.2),markup:`${l}<g transform="translate(${t} ${n})" ${la}><rect y="5" width="${d}" height="8" rx="2" ${c}/><text x="${d+5}" y="13"><tspan font-weight="bold">${ce(o)}</tspan>${ce(a)}</text>${i?`<text y="28">${ce(i)}</text>`:""}</g>`}}function ma(e,t,n,r,o,a){let i=Hr(r,a);return un(e,t,n,Ut(r.encoding),o,i.delta+i.outside+i.reversed,i.scale)}function Ks(e,t){return e.replaceAll(/([ML])(-?[\d.e-]+),(-?[\d.e-]+)/g,(n,r,o,a)=>`${r}${+(Number(o)*t.scaleX+t.translateX).toFixed(1)},${+(Number(a)*t.scaleY+t.translateY).toFixed(1)}`)}function qs(e,t,n,r,o){return`<rect x="${e-n/2}" y="${t-11-4+2}" width="${n}" height="${17}" rx="3" fill="#fff" fill-opacity="0.85" stroke="${ga}"/><text x="${e}" y="${t}" font-family="Helvetica, Arial, sans-serif" font-size="${11}" fill="${ha}" text-anchor="middle"><tspan font-style="italic" font-weight="600">${ce(r)}</tspan>${o?ce(o):""}</text>`}function ba(e,t,n={}){let r=n.width??1200,o=n.height??800,a=n.region,i=n.colorDomain??a,s=n.walkRows,d=bt(t,{region:n.fitToDrawing?void 0:a,extent:s&&t.extent?qe(s):void 0}),c=t.pixelRows??!1,l=new Map(e.nodes.map(x=>[x.id,x])),g=nt(n.colorScheme??"auto",e),u=g==="reference-position"&&!t.tubeMap?be(e,i):void 0,p=t.tubeMap?[]:le(e),w=n.walks??[],M=w.some(x=>x.color?.field==="reference")?u??be(e,i):void 0,h=w.length>0&&!t.tubeMap?ft(e,w,M):void 0,y=ot(n.facet),m=y.field&&h&&h.walks.length>1?yt(e,h,w,M):void 0,b=new Map((e.paths?.length?Le(e.paths):[]).map(x=>[x.name,x.label])),S=x=>b.get(x)??x,L=h?.referenceDomain&&{...h.referenceDomain,name:a?.refName},k=n.contigThickness??6,R=n.nodeWidth??"depth",T=n.genes?.length&&!t.tubeMap&&!s?ht(e,n.genes,t.nodePositions):[],A=it(e,l,k,R),C=0;function O(x,N,v,V){let F=[],K=j=>{let q=A.halfWidthPx(j)*2;return x?.nodeIds.has(j)?Math.max(q,x.walks.length*zs):q},I=T.flatMap(j=>j.exonsByNode.map(({nodeId:q,d:U})=>({d:Ks(U,N),inner:K(q)+2*Ys})));if(I.length>0){let j=`exons${C++}`,q=(U,Ft,$t)=>`<path d="${$t}" fill="none" stroke="${U}" stroke-width="${Ft}" stroke-linecap="round" stroke-linejoin="round"/>`;F.push(`<mask id="${j}" maskUnits="userSpaceOnUse" x="0" y="0" width="${v}" height="${V}">${I.map(U=>q("#fff",U.inner+2*Us,U.d)).join("")}${I.map(U=>q("#000",U.inner,U.d)).join("")}</mask><rect width="${v}" height="${V}" fill="${ga}" mask="url(#${j})"/>`)}let re=j=>({x:j.x*N.scaleX+N.translateX,y:j.y*N.scaleY+N.translateY}),Re={width:v,height:V};for(let{item:j,x:q,y:U,w:Ft,text:$t}of ur(Gr(T,re,k),Re,cr(Re))){let is=re(j.at).y+k/2;F.push(`<line x1="${q}" x2="${q}" y1="${U-11-2}" y2="${is}" stroke="${ha}" stroke-width="0.8" stroke-opacity="0.6"/>`,qs(q,U,Ft,j.gene.name,$t.slice(j.gene.name.length)))}s&&F.push(ge(zt(s,{...N,width:v,height:V},{ramp:u&&{start:u.start,end:u.start+u.span},rowGenes:n.rowGenes})));let me=s?[s.reference,...s.rows].map((j,q)=>({label:j.label,y:q*20})):t.rowLabels??[];for(let{label:j,y:q}of me){let U=q*N.scaleY+N.translateY;U>=0&&U<=V&&F.push(`<text x="6" y="${U+4}" ${la} stroke="#fff" stroke-width="3" paint-order="stroke">${ce(j)}</text>`)}return F.join("")}function H(x,N,v){let V=Be(d,N,v,c,m?{padLeft:12,padTop:12,padRight:12,padBottom:12}:{});if(!V)return"";let F=fe(V.scale,c),{canvas:K,markup:I}=ea(N,v),re=new $r(K);re.uploadGeometry(st({nodePositions:s?{}:t.nodePositions,graph:e,nodeById:l,colorScheme:g,contigThickness:k,connectorThickness:n.connectorThickness??2,drawPaths:!1,nodeWidth:R,highlight:x,axis:F,referenceRamp:u,deletions:new Map(p.map(me=>[me.edgeIndex,me.bypassed])),deletionRoutes:t.deletionRoutes,hiddenEdges:new Set(n.showDeletionEdges?[]:p.map(me=>me.edgeIndex))}));let Re={scaleX:F.scaleX,scaleY:F.scaleY,translateX:V.translateX,translateY:V.translateY};return re.updateTransform({...Re,dpr:1}),re.render([1,1,1,1]),I()+O(x,Re,N,v)}let E=[],_;if(m){let x=at(m.map(v=>v.walks[0].name),y.field||"walk",y.domain),N=rt({count:x.count,bounds:d,pixelRows:c,width:r,room:o,columns:x.columns??y.columns});m.forEach((v,V)=>{let F=x.cells[V],K=F%N.columns*(N.width+8),I=Math.floor(F/N.columns)*(N.height+34+8),re=v.walks[0];E.push(ma(`key${V}`,K+6,I+2,re,S(re.name),L).markup,`<svg x="${K}" y="${I+34}" width="${N.width}" height="${N.height}">${H(v,N.width,N.height)}</svg>`)}),_=N.total}else{let x=6,N=I=>{E.push(I.markup),x+=I.width+Hs};if(h&&(h.walks.forEach((I,re)=>{N(ma(`key${re}`,x,2,I,S(I.name),L))}),N(un("faded",x,2,[{offset:0,color:Xs}],"",`not on ${h.walks.length===1?S(h.walks[0].name):"these walks"}`,void 0,.3))),s){let I=Xt(jt(s,{ramp:u&&{start:u.start,end:u.start+u.span},genes:n.rowGenes?.size?n.rowGeneGaps:void 0}),x,2);N({width:I.width,markup:ge(I.tree)})}else!h&&u&&N(un("ramp",x,2,Ut({field:"reference",scheme:"rainbow"}),"Reference position","",_r(a?.refName,u.start,u.start+u.span)));let v=E.length>0?34:0,V=r-2*D,F=c||!(d.w>0)?d.h:d.h*V/d.w,K=Math.max(160,Math.min(o-v,Math.ceil(F+2*D)));E.push(`<svg y="${v}" width="${r}" height="${K}">${H(h,r,K)}</svg>`),_=v+K}let Y=n.walkStrip;if(Y&&!s&&!t.tubeMap){let x=dt(Y.rows,{width:r}),N=Xt(jt(Y.rows,{ramp:u&&{start:u.start,end:u.start+u.span},genes:Y.rowGenes?.size?Fr(x,Y.rowGeneGaps):void 0}),6,_+x.height);E.push(`<line x1="0" x2="${r}" y1="${_+.5}" y2="${_+.5}" stroke="#ddd"/>`,`<svg y="${_}" width="${r}" height="${x.height}">${ge(zt(Y.rows,x,{ramp:u&&{start:u.start,end:u.start+u.span},rowGenes:Y.rowGenes,idPrefix:"strip"}))}${ge(Er(Y.rows,x,new Set(w.map(v=>v.walk))))}</svg>`,ge(N.tree)),_+=x.height+js}let Se=JSON.stringify({generator:`@jbrowse/bandage-core@${ta}`,...n.spec===void 0?{}:{spec:n.spec}});return`<svg xmlns="http://www.w3.org/2000/svg" width="${r}" height="${_}" viewBox="0 0 ${r} ${_}"><metadata>${ce(Se)}</metadata><rect width="${r}" height="${_}" fill="#fff"/>${E.join("")}</svg>
3
+ `}function fa(e,t){let n=new Set(e.nodes.filter(d=>B(d)&&zn(d,t)).map(d=>d.id)),r=e.paths??[];if(n.size===0||r.length===0)return e;let o=r.map(d=>{let c=-1,l=-1;return d.nodeIds.forEach((g,u)=>{n.has(g)&&(c<0&&(c=u),l=u)}),c<0?void 0:{first:c,last:l}});if(o.every((d,c)=>d?.first===0&&d.last===r[c].nodeIds.length-1))return e;let a=new Set,i=[],s=new Map;return r.forEach((d,c)=>{let l=o[c];if(l){let g=d.nodeIds.slice(l.first,l.last+1);for(let u of g)a.add(u);i.push({...d,nodeIds:g}),s.set(d.name,{first:l.first,nodeIds:g})}}),{...e,nodes:e.nodes.filter(d=>a.has(d.id)),edges:e.edges.filter(d=>a.has(d.from)&&a.has(d.to)),paths:i,pathVisits:e.pathVisits&&Js(e.pathVisits,r,o,new Map(e.nodes.map(d=>[d.id,d.name]))),anchorPaths:Ye(e,s)}}function Js(e,t,n,r){let o=new Map,a=new Map;return t.forEach((i,s)=>{let d=J(i.name).name,c=n[s];i.nodeIds.forEach((l,g)=>{let u=r.get(l)??l,p=e.get(u);if(!p)return;let w=`${d} ${u}`,M=o.get(w)??0;for(;M<p.length&&p[M].path!==d;)M++;let h=p[M];if(o.set(w,M+1),h&&c&&g>=c.first&&g<=c.last){let y=a.get(u);y?y.push(h):a.set(u,[h])}})}),a}function Zs(e,t,n){let r=J(e.name).name,o=new Map,a=[],i=()=>({a:-1/0,b:1/0,detour:[],bp:0}),s=[i()];for(let d of e.nodeIds){let c=t.get(d);if(!c)continue;let l=o.get(c.name)??0;o.set(c.name,l+1);let g=n.get(`${r} ${c.name}`)?.[l]??lr(c),u=s.at(-1),p=a.at(-1);if(B(c)){let w=c.stable.start,M=w+c.length,h=g!==(c.stable.strand??"+"),y=p!==void 0&&u.detour.length===0;y&&!p.inverted&&!h&&p.end===w?p.end=M:y&&p.inverted&&h&&p.start===M?p.start=w:(a.push({start:w,end:M,inverted:h}),s.push(i()))}else u.detour.push({node:c,strand:g}),u.bp+=c.length}return a.forEach((d,c)=>{s[c].b=d.start,s[c+1].a=d.end}),{path:e,runs:a,gaps:s}}function pn(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 ya(e,t,n){let r=0,o=e.length;for(;r<o;){let a=r+o>>1;e[a]<=t?r=a+1:o=a}return r<e.length&&e[r]<n}function Qs(e){let t=new Map;for(let n=1;n<e.length;n++){let r=e[n-1],o=e[n],a=r.stable.start+r.length;a!==o.stable.start&&(t.set(a,"reference-gap"),t.set(o.stable.start,"reference-gap"))}return t}function ed(e,t,n){let r=(o,a)=>{Number.isFinite(o)&&!n.has(o)&&n.set(o,a)};for(let{runs:o,gaps:a}of e){let i=o[0],s=o.at(-1);i&&s&&(r(i.start,"walk-end"),r(s.end,"walk-end"));for(let d of o)d.inverted&&d.end-d.start>=t&&(r(d.start,"inversion"),r(d.end,"inversion"));for(let d of a)d.b<d.a?(r(d.a,"backward"),r(d.b,"backward")):pn(d,t)||(r(d.a,"variant"),r(d.b,"variant"))}for(let o=!0;o;){o=!1;let a=[...n.keys()].sort((s,d)=>s-d),i=e.flatMap(({runs:s,gaps:d})=>[...d.filter(c=>pn(c,t)).map(c=>[c.a,c.b]),...s.filter(c=>c.inverted&&c.end-c.start<t).map(c=>[c.start,c.end])]);for(let[s,d]of i)ya(a,s,d)&&(o||=!n.has(s)||!n.has(d),r(s,"overlap"),r(d,"overlap"))}return n}function td(e,t){let n=[],r=[],o=()=>{let a=r[0],i=r.at(-1);if(a&&i){let s=a.stable.start,d=i.stable.start+i.length,c=`${s}-${d}`;n.push({node:{id:`${c}+`,name:c,length:d-s,depth:0,stable:{refName:a.stable.refName,start:s,rank:0,strand:"+"}},members:r})}r=[]};for(let a of e)t.has(a.stable.start)&&o(),r.push(a);return o(),n}function wa(e,t){let n=e.nodes.filter(B).sort((k,R)=>k.stable.start-R.stable.start),r=e.paths??[];if(n.length===0||r.length===0)return;let o=new Map(e.nodes.map(k=>[k.id,k])),a=gr(e),i=r.map(k=>Zs(k,o,a)),s=ed(i,t,Qs(n)),d=[...s.keys()].sort((k,R)=>k-R),c=td(n,s),l=c.map(k=>k.node.stable.start),g=k=>{let R=0,T=l.length-1;for(;R<T;){let A=R+T+1>>1;l[A]<=k?R=A:T=A-1}return R},u=new Map,p=new Map;for(let k of c){u.set(k.node.id,k.members.map(R=>R.id));for(let R of k.members)p.set(R.id,k.node.id)}let w=new Map,M=k=>{let R=`${k.a} ${k.b} ${k.detour.map(A=>A.node.id+A.strand).join(",")}`,T=w.get(R);if(!T){let A=`r${w.size}`;T={id:`${A}+`,name:A,length:k.bp,depth:0,stable:{refName:n[0].stable.refName,start:Number.isFinite(k.a)?k.a:k.b,rank:1,strand:"+"}},w.set(R,T),u.set(T.id,k.detour.map(C=>C.node.id));for(let C of k.detour)p.has(C.node.id)||p.set(C.node.id,T.id)}return T},h=new Map,y=[],m=new Map,b=new Map,S=new Map;for(let{path:k,runs:R,gaps:T}of i){let A=[],C=[],O=!1,H=(x,N)=>{let v=A.at(-1);O&&v?.node===x&&v.strand===N||A.push({node:x,strand:N}),O=!0},E=x=>{O=!1,x.detour.length>0&&(H(M(x),"+"),O=!1)},_=x=>{(x.bp>0||x.b>x.a)&&C.push({start:x.a,end:x.b,bp:x.bp});let N=c[g(x.b>x.a?x.a:x.a-1)];for(let v of x.detour)p.has(v.node.id)||(p.set(v.node.id,N.node.id),u.get(N.node.id).push(v.node.id))};R.forEach((x,N)=>{let v=T[N];pn(v,t)&&!ya(d,v.a,v.b)?_(v):E(v);let V=g(x.start),F=g(x.end-1),K=x.end-x.start<t;if(x.inverted&&!K){O=!1;for(let I=F;I>=V;I--)H(c[I].node,"-");O=!1}else{x.inverted&&C.push({start:x.start,end:x.end,bp:x.end-x.start,inverted:!0});for(let I=V;I<=F;I++)H(c[I].node,"+")}}),E(T.at(-1));let Y=J(k.name).name,Se=0;A.forEach(({node:x,strand:N},v)=>{S.set(x.id,(S.get(x.id)??0)+1);let V=m.get(x.name)??[];V.push({path:Y,sample:k.sample??Y,start:Se,strand:N}),m.set(x.name,V),Se+=x.length;let F=A[v+1];if(F){let K=`${x.id}${N} ${F.node.id}${F.strand}`,I=b.get(K);I?I.pathIds.push(k.name):b.set(K,{from:x.id,to:F.node.id,fromStrand:N,toStrand:F.strand,pathIds:[k.name]})}}),y.push({...k,nodeIds:A.map(x=>x.node.id)}),h.set(k.name,C)}let L=[...c.map(k=>k.node),...w.values()].filter(k=>S.has(k.id)).map(k=>({...k,depth:S.get(k.id)}));return{graph:{...e,nodes:L,edges:[...b.values()],paths:y,pathVisits:m,reads:void 0},members:u,coarseOf:p,deviations:h,cuts:s}}var nd=e=>e.bp1>e.bp0;function ka(e,t){let n=e.filter(nd);if(n.length===0){let a=e[0];return a?[{tx:a.x0,sx:t(a.bp0)}]:[]}let r=n.map(a=>({c:a,s0:t(a.bp0),s1:t(a.bp1),trimLeft:0,trimRight:0}));for(let a=0;a+1<r.length;a++){let i=r[a],s=r[a+1],c=Math.min(s.c.x0-i.c.x1,24)-(s.s0-i.s1);if(c>0){let l=(i.s1-i.s0)/2,g=(s.s1-s.s0)/2,u=Math.min(c/2,l),p=Math.min(c-u,g);u=Math.min(c-p,l),i.trimRight=u,s.trimLeft=p}}let o=[];for(let{c:a,s0:i,s1:s,trimLeft:d,trimRight:c}of r)o.push({tx:a.x0,sx:i+d},{tx:a.x1,sx:s-c});return o}function xa(e,t){let n=e.length;if(n===0)return t;let r=e[0],o=e[n-1];if(t<=r.tx)return r.sx+(t-r.tx);if(t>=o.tx)return o.sx+(t-o.tx);let a=0,i=n-1;for(;i-a>1;){let l=a+i>>1;e[l].tx<=t?a=l:i=l}let s=e[a],d=e[i],c=d.tx-s.tx;return c>0?s.sx+(t-s.tx)/c*(d.sx-s.sx):s.sx}var rd=.05,kt=9;function od(e,t){let{minY:n,maxY:r}=e.layout.bounds,o=r-n;return e.columns&&o>0?Math.max(rd,Math.min(1,t/o)):1}function Sa(e,t){let{scaleX:n,translateX:r,translateY:o}=t,a=t.scaleY*od(e,t.usableHeight),i=d=>(d-e.yOffset)*a+o,{columns:s}=e;if(s){let d=ka(s,c=>c*n+r);return{x:c=>xa(d,c),y:i,yScale:a}}return{x:d=>d*n+r,y:i,yScale:a}}function Ra(e,{x:t,y:n},r,o){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-kt)<=r&&r<=t(i.x+i.pixelWidth+kt)&&n(i.y-kt)<=o&&o<=n(i.y+i.contentHeight+kt)&&(a=i.name)}),a}var Ma=G(cs(),1);function Ga(e,t,n){if(t==="uniform"||t==="grey")return;let r={...Pr(e),referenceRamp:n};return new Map(e.nodes.map((o,a)=>[o.id,(0,Ma.abgrToCssRgba)(Ar(o,a,t,r))]))}var ne=G(te(),1),di=G(nr(),1),P=G(Me(),1),ci=G(ss(),1),f=G(ie(),1),ui=G(Ta(),1),pi=G(ms(),1),W=G(Dt(),1);function Na(e,t,n="image/svg+xml"){let r=URL.createObjectURL(new Blob([e],{type:n})),o=document.createElement("a");o.href=r,o.download=t,o.click(),setTimeout(()=>{URL.revokeObjectURL(r)},0)}function Pa(e){let t=[];for(let n of[...e].sort((r,o)=>r.start-o.start)){let r=t.at(-1);r&&n.start<=r.end?r.end=Math.max(r.end,n.end):t.push({...n})}return t}function Aa(e){let t=[],n=new Map;for(let r of[...e].sort((o,a)=>o.start-a.start)){let o=`${r.refName} ${r.strand} ${r.name}`,a=n.get(o);if(a&&r.start<a.end)a.end=Math.max(a.end,r.end),a.exons=Pa([...a.exons,...r.exons]);else{let i={...r,exons:Pa(r.exons)};t.push(i),n.set(o,i)}}return t}var xt=new Set(["Gff3TabixAdapter","Gff3Adapter","BedTabixAdapter","BedAdapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),ad=/gene|refseq|gencode|ensembl|annotation/i,id=new Set(["BedTabixAdapter","BedAdapter"]);function mn(e,t){if(t)return e.find(r=>r.trackId===t);let n=e.filter(r=>xt.has(r.adapterType));return n.find(r=>ad.test(`${r.trackId} ${r.name??""}`))??n.find(r=>!id.has(r.adapterType))}function ae(e,t){return typeof e.get=="function"?e.get(t):e[t]}var sd=new Set(["exon","CDS","five_prime_UTR","three_prime_UTR","UTR"]);function va(e,t){let n=ae(e,"type");typeof n=="string"&&sd.has(n)&&t.push({start:ae(e,"start"),end:ae(e,"end")});let r=ae(e,"subfeatures");for(let o of r??[])va(o,t)}function dd(e){let t=[...e].sort((r,o)=>r.start-o.start),n=[];for(let r of t){let o=n.at(-1);o&&r.start<=o.end?o.end=Math.max(o.end,r.end):n.push({...r})}return n}function ln(e){let t=[];for(let n of e){let r=ae(n,"gene_name")??ae(n,"name")??ae(n,"id"),o=ae(n,"start"),a=ae(n,"end");if(!r||!(a>o))continue;let i=[];va(n,i),t.push({name:r,refName:ae(n,"refName"),start:o,end:a,strand:ae(n,"strand")??0,exons:i.length?dd(i):[{start:o,end:a}]})}return Aa(t)}function Ca(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 Ia(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function St(e,t){let n=Ia(e.dynamicBlocks.contentBlocks.filter(a=>a.refName===t.refName&&a.assemblyName===t.assemblyName)),{bpPerPx:r}=e;if(!n||!(r>0))return;let o=n.offsetPx-e.offsetPx;return n.reversed?{scale:-1/r,translateX:o+n.end/r}:{scale:1/r,translateX:o-n.start/r}}function Rt(e){let t=Ia(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 gn(e,t,n=!0){let r=e.end-e.start,o=n?Math.max(0,Math.min(e.span,(t-r)/2)):0,a=Math.max(e.regionStart,Math.floor(e.start-o)),i=Math.min(e.regionEnd,Math.ceil(e.end+o)),s=i-a-t;return s>0&&(a+=Math.floor(s/2),i-=Math.ceil(s/2)),{refName:e.refName,assemblyName:e.assemblyName,start:a,end:i}}function Ba(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=gn(t,1/0,!1);return Math.abs(e.start-r.start)<1&&Math.abs(e.end-r.end)<1}var ue=G(ie(),1);function Ea(e){return t=>e.includes(t)?t:void 0}function hn(e){return ue.types.snapshotProcessor(ue.types.maybe(ue.types.enumeration(e)),{preProcessor:Ea(e)})}function bn(e,t){return ue.types.snapshotProcessor(ue.types.optional(ue.types.enumeration(e),t),{preProcessor:Ea(e)})}var wn=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),cd=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function Fa(e,t){return t?e.find(r=>r.trackId===t):e.filter(r=>wn.has(r.adapterType)).find(r=>cd.test(`${r.trackId} ${r.name??""}`))}function Fe(e,t){return typeof e.get=="function"?e.get(t):e[t]}var $a=/^\w+=[^;]*(;\w+=[^;]*)*$/;function ud(e){let t=Fe(e,"name");if(!(typeof t!="string"||!$a.test(t)))return Object.fromEntries(t.split(";").map(n=>{let r=n.indexOf("=");return[n.slice(0,r),n.slice(r+1)]}))}function se(e,t){let n=Fe(e,t);return n!==void 0?n:Fe(e,"INFO")?.[t]??ud(e)?.[t]}var Da=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],pd=["RUL","period","PERIOD","consensusSize","unit","unitLength"],md=["TRID","REPID","VARID","ID","name","id"];function Mt(e,t){for(let n of t){let r=se(e,n),o=String((Array.isArray(r)?r[0]:r)??"").split(",")[0].trim();if(o!==""&&o!==".")return o}}var Va=/^[ACGTURYSWKMBDHVN]+$/i;function ld(e){let t=Number(Mt(e,pd));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=Mt(e,Da);return n&&Va.test(n)?n.length:void 0}function pe(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 yn(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let r=String(n??"").trim();return r===""||r==="."?void 0:r})}var fn="<CNV:TR>";function gd(e){let t=yn(Fe(e,"ALT"));if(!t.includes(fn))return;let n=pe(se(e,"RN")),r=yn(se(e,"RUS")),o=pe(se(e,"RUL")),a=pe(se(e,"RUC")),i=pe(se(e,"RB")),s=0;return t.map((d,c)=>{let l=n[c]??(d===fn?1:0),g=0,u=0;for(let p=0;p<l;p++,s++){let w=r[s],M=o[s]??(w&&Va.test(w)?w.length:void 0),h=a[s],y=i[s]??(M&&h!==void 0?Math.round(M*h):void 0);y!==void 0&&(g+=y,u++)}return d===fn&&l>0&&u===l?g:void 0})}function hd(e,t,n){let r=e?.includes("|");return(e??"").split(/[/|]/).flatMap((o,a)=>{let i=Number(o),s=i>0?t[i-1]:n;return!Number.isInteger(i)||s===void 0?[]:[{bp:s,...r?{haplotype:a+1}:{}}]})}function bd(e,t,n){let r=Fe(e,"samples"),o={};for(let[a,i]of Object.entries(r??{})){let s=pe(i.SD),d=pe(i.AL).flatMap((l,g)=>l!==void 0&&l>0?[s[g]===void 0?{bp:l}:{bp:l,spanningReads:s[g]}]:[]),c=d.length>0||!t?d:hd(yn(i.GT)[0],t,n);c.length>0&&(o[a]=c)}return Object.keys(o).length>0?o:void 0}function fd(e,t){let n=se(e,"start"),r=se(e,"end"),o=pe(se(e,"SVLEN"))[0];return t&&o!==void 0?{start:n+1,end:n+1+o}:{start:n,end:r}}function Wa(e){let t=[];for(let n of e){let r=gd(n),{start:o,end:a}=fd(n,r!==void 0),i=ld(n);if(!(a>o)||i===void 0)continue;let s=se(n,"refName"),d=Mt(n,Da),c=Mt(n,md);t.push({key:`${s}:${o}-${a}`,name:(c&&!$a.test(c)?c:void 0)??(d&&d.length<=12?`(${d})n`:`${s}:${(o+1).toLocaleString()}-${a.toLocaleString()}`),refName:s,start:o,end:a,unit:i,motif:d,calls:bd(n,r,a-o)})}return t.sort((n,r)=>n.start-r.start)}function Z(e){return typeof e=="object"&&e!==null}function yd(e){return Z(e)&&typeof e.get=="function"}function wd(e){let t=yd(e)?e.get("name"):Z(e)?e.name:void 0;return typeof t=="string"?t:void 0}function Oa(e){let t;if(Z(e)&&Z(e.hoverPosition)){let{refName:n,coord:r,coord0:o,assemblyName:a}=e.hoverPosition;typeof n=="string"&&typeof r=="number"&&(t={refName:n,coord:typeof o=="number"?o:r-1,assemblyName:typeof a=="string"?a:void 0,featureName:wd(e.hoverFeature)})}return t}function _a(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function Ha({hover:e,nodes:t}){let n,r;for(let o of t)o.name===e.featureName?n=o.id:r===void 0&&B(o)&&e.coord>=o.stable.start&&e.coord<o.stable.start+o.length&&(r=o.id);return n??r??null}var kd=/^(.+) HP(\d+)$/,xd=/^(.+)\.(\d+)$/;function Sd(e){let t=kd.exec(e),n=xd.exec(e);return[...t?[{sample:t[1],haplotype:String(Number(t[2])+1)}]:[],...n?[{sample:n[1],haplotype:n[2]}]:[],{sample:e,haplotype:void 0}]}function Rd(e){return J(e).name.split("#")[1]}function ja(e,t){let n=t.map(r=>r.name);for(let{sample:r,haplotype:o}of Sd(e)){let a=n.filter(i=>Hn(J(i).name)===r&&(o===void 0||Rd(i)===o));if(a.length>0)return a}return[]}var kn=G(te(),1);function Md(e){return Z(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function $e(e){return e.flatMap(t=>Z(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function De({views:e,connectedViewId:t,assemblyName:n}){let r=$e(e).filter(a=>Md(a)).filter(a=>a.assemblyNames.includes(n));return r.find(a=>a.id===t)??(r.length===1?r[0]:void 0)}function Ve(e,t){let n=e.assemblyManager;return n?.has(t)?n.get(t)?.name??t:t}function za(e,t,n){n.catch(r=>{console.error(`[GraphGenomeView] ${t}`,r),e.notifyError?.(`${t}: ${r}`,r)})}var Gd=1e3;function xn(e,t=Gd){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 Ya(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 Ua({session:e,location:t,assembly:n,connectedViewId:r,tracks:o=[]}){let a=De({views:e.views,connectedViewId:r,assemblyName:n}),i;return a?(za(e,`Could not show ${n} ${Te(t)}`,Promise.resolve(a.navToLocString(pt(t),n))),i=a.id):i=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${Te(t)}`,init:{assembly:n,loc:pt(t),tracks:o}}).id,i}function Ka({session:e,location:t,assembly:n,connectedViewId:r}){let o=De({views:e.views,connectedViewId:r,assemblyName:n});return o&&e.addHighlight?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),o!==void 0}function Xa(e,t){if(t===void 0)return[];let n=e.tracks.find(o=>(0,kn.readConfObject)(o,"trackId")===t),r=n?(0,kn.readConfObject)(n,"assemblyNames"):[];return Array.isArray(r)?r.filter(o=>typeof o=="string").map(o=>Ve(e,o)):[]}function qa({session:e,contributors:t,trackId:n,graphTrackId:r}){let o=Xa(e,r),a=Xa(e,n),i=t.filter(c=>a.includes(c.sample)),s=i.length>=2?i:t,d={init:{views:s.map(c=>({assembly:c.sample,loc:pt(c),...r!==void 0&&o.includes(c.sample)?{tracks:[r]}:{}})),tracks:n?s.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?za(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",d)):e.addView("LinearSyntenyView",d)}var Gt=G(te(),1),Ld="FeatureTrack";function Ja({session:e,assemblyName:t,first:n}){let r=[];for(let o of e.tracks){let a=(0,Gt.readConfObject)(o,"type"),i=(0,Gt.readConfObject)(o,"assemblyNames"),s=(0,Gt.readConfObject)(o,"trackId");a===Ld&&Array.isArray(i)&&i.includes(t)&&typeof s=="string"&&s!==n&&r.push(s)}return n?[n,...r]:r}var Lt=G(te(),1),Za=G(ds(),1),Tt=G(ie(),1);var Td="SyntenyTrack",Nd="Synteny adapters";function Pd(e){if((0,Lt.readConfObject)(e,"type")===Td)return!0;let t=e.adapter?.type;if(typeof t!="string"||!(0,Tt.isStateTreeNode)(e))return!1;let{pluginManager:n}=(0,Tt.getEnv)(e);return!!n?.hasAdapterType(t)&&n.getAdapterType(t).adapterMetadata?.category===Nd}function Qa(e,t){let n=new Set(t),r=[];for(let o of e.tracks){let a=(0,Lt.readConfObject)(o,"assemblyNames"),i=(0,Lt.readConfObject)(o,"trackId");if(Pd(o)&&typeof i=="string"&&Array.isArray(a)){let s=a.filter(d=>typeof d=="string"&&n.has(Ve(e,d))).length;s>=2&&r.push({trackId:i,name:(0,Za.getTrackName)(o,e),coverage:s})}}return r.sort((o,a)=>a.coverage-o.coverage)}var Ad=600,Sn=160,ei=[1,1,1,1],ti=[.12,.12,.12,1],vd=([e,t,n])=>`rgb(${[e,t,n].map(r=>Math.round(r*255)).join(", ")})`,Cd=5,Rn=new Set(["tubemap","tubemapref"]),Id=[{value:"",label:"Off"},{value:"walk",label:"A panel per walk"},{value:"sample",label:"A row per sample, a column per haplotype"}],Bd=f.types.snapshotProcessor(f.types.model("GraphFacet",{field:f.types.optional(f.types.enumeration(["","walk","sample"]),""),domain:f.types.optional(f.types.frozen(),[]),columns:f.types.maybe(f.types.number)}),{preProcessor:e=>ot(e)}),Ed=[{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"}],ni=".segs.bed.gz";function Fd(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(ni)?n.slice(0,-ni.length):void 0}var ri=1.4,$d=1.6,Dd=150,Vd=1,oi=40;function ai(e,t){return t?e.filter(n=>t.includes(n.sample)).sort((n,r)=>t.indexOf(n.sample)-t.indexOf(r.sample)||n.label.localeCompare(r.label)):e}var ii={nodeStrokes:[],nodeStrokeRuns:new Map,arrows:[],arrowRuns:new Map,edgeCurves:[],edgeCurveRuns:new Map};function ye(...e){}var Pt=5e6;function we(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var Wd=2e4;function We(e){return e&&"uri"in e&&e.uri?new URL(e.uri,e.baseUri??window.location.href).href:void 0}function si(e){return e.builtViewport!==void 0&&e.paintedViewport===e.builtViewport&&e.builtViewport.viewportDirty===e.viewportDirty&&!e.viewportRebuildPending}function Mn(e){let{width:t,height:n}=e.viewBox;return na(e,e.axisScale,t,n)}var Nt=new WeakMap,Od=4;function _d(e){let t=Nt.get(e);return t||(t=new Map,Nt.set(e,t)),t}function Hd(e,t){let n=Nt.get(e);n&&e!==t&&Nt.set(t,n)}function jd(e,t,n){e.size>=Od&&e.delete(e.keys().next().value),e.set(t,n)}function At(){return f.types.compose("GraphPane",(0,ui.RenderLifecycleMixin)(),f.types.model({layoutQuality:f.types.optional(f.types.number,2),linearLayout:f.types.optional(f.types.boolean,!1),layoutMode:hn(Je),colorScheme:hn(tt),bubbleSpread:bn(yr,"auto"),nodeWidth:bn(Tr,"depth"),showBubbles:f.types.optional(f.types.boolean,!1),showDeletionEdges:f.types.optional(f.types.boolean,!0),showGenes:f.types.optional(f.types.boolean,!0),showReferenceStrip:f.types.optional(f.types.boolean,!0),tubeMapFold:f.types.optional(f.types.number,0),geneTrackId:f.types.optional(f.types.string,""),repeatTrackId:f.types.optional(f.types.string,""),repeatKey:f.types.optional(f.types.string,""),walkRowSamples:f.types.maybe(f.types.frozen()),walkStrip:f.types.optional(f.types.boolean,!1),walkLayers:f.types.optional(f.types.frozen(),[]),facet:f.types.optional(Bd,{}),referencePath:f.types.optional(f.types.string,""),showPerf:f.types.optional(f.types.boolean,!1),contigThickness:f.types.optional(f.types.number,6),connectorThickness:f.types.optional(f.types.number,2),darkMode:f.types.optional(f.types.boolean,!1),scale:f.types.optional(f.types.number,1),translateX:f.types.optional(f.types.number,0),translateY:f.types.optional(f.types.number,0),drawPaths:f.types.optional(f.types.boolean,!1),paneHeight:f.types.maybe(f.types.number),maxGraphNodes:f.types.optional(f.types.number,Wd),colorDomain:f.types.maybe(f.types.frozen()),connectedViewId:f.types.maybe(f.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,walkGeneFeatures:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredRowWalks:[],hoveredBubble:null,pointerInPane:!1,stripHover:null,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,P.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,P.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 si(e)},get showLoading(){return e.error===void 0&&(e.isLoading||e.hasPendingSource||e.graph!==void 0&&!si(e))},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?br(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 walkChoices(){let t=e.graph?.paths;return t?.length?Le(t):[]},get effectiveDrawPaths(){return e.drawPaths&&Ot(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get rampDomain(){return e.colorDomain??e.graphRegion},get walkRamp(){let{graph:t}=e;return t&&e.walkLayers.some(n=>n.color?.field==="reference")?be(t,this.rampDomain):void 0},get modeDrawsNodes(){return Q(e.chosenLayoutMode).drawsNodes},get liftedWalkLayers(){return e.walkLayers.length>0||!this.modeDrawsNodes?e.walkLayers:e.hoveredRowWalks.map(t=>({walk:t}))},get walkLift(){let{graph:t}=e,n=this.liftedWalkLayers;return t&&n.length>0&&!e.layoutResult?.tubeMap?ft(t,n,this.walkRamp):void 0},get facetPanels(){let{graph:t}=e,n=this.walkLift;return e.facet.field!==""&&this.modeDrawsNodes&&t&&n&&e.walkLayers.length>1&&n.walks.length>1?yt(t,n,e.walkLayers,this.walkRamp):void 0},get drawnWalks(){return this.facetPanels?.map(t=>t.walks[0])??this.walkLift?.walks??[]},get liftsWalks(){return!Rn.has(e.chosenLayoutMode)},get walkReference(){let t=this.walkLift?.referenceDomain;return t&&{...t,name:e.graphRegion?.refName}},walkLabel(t){return this.walkChoices.find(n=>n.name===t)?.label??t},get liftPaintsOffReference(){for(let t of this.walkLift?.walks??[])if(t.encoding.field!=="walk"){for(let n of t.colors.values())if(n===Or)return!0}return!1},get liftedWalksLabel(){let t=this.walkLift?.walks??[];return t.length===1?this.walkLabel(t[0].name):"these walks"},get effectiveColorScheme(){return e.layoutResult?.tubeMap&&(this.tubeMapReads||e.chosenColorScheme==="auto")?"uniform":nt(e.chosenColorScheme,e.graph)},get tubeMapReads(){return(e.layoutResult?.tubeMap?.layout.reads.length??0)>0},get colorSchemeLock(){return this.walkLift?{value:"By walk",why:"Each lifted walk colours its own lane: set it under the menu, Walk, Colour"}:this.tubeMapReads?{value:"By strand",why:"Reads take the reds and blues, so the tube map leaves its nodes clear"}:void 0},get nodePositions(){return e.layoutResult?.nodePositions},get labelsNodeSizes(){return!e.layoutResult?.tubeMap&&!this.walkLift},get rowLabels(){return e.layoutResult?.rowLabels??[]},get alleleDeletions(){return e.layoutResult?.alleleDeletions??[]},get deletionRoutes(){return e.layoutResult?.deletionRoutes},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?$o(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get cutHaplotypes(){},get sourceGfaLocation(){},get sourceAdapter(){let t=e.sourceTrack;return t?(0,ne.readConfObject)(t,"adapter"):void 0},get sourceTrackId(){let t=e.sourceTrack;return t?(0,ne.readConfObject)(t,"trackId"):void 0},get assemblyTrackChoices(){let t=e.graphRegion;return t?(0,P.getSession)(e).tracks.filter(n=>(0,ne.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,ne.readConfObject)(n,"name"),adapterType:(0,ne.readConfObject)(n,"adapter").type})):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>xt.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>wn.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return Fa(e.repeatTrackChoices,e.repeatTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)},get backbone(){return e.graph?Kn(e.graph):void 0},assemblySpellings(t){let{assemblyManager:n}=(0,P.getSession)(e),r=n.has(t)?n.get(t):void 0,o=e.sourceAdapter?.assemblyNameToPanSN??{},a=[t,...r?[r.name,...r.aliases]:[]];return{name:t,aliases:[...a,...a.flatMap(i=>o[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,o=e.drawsLoadedReference||n!==void 0&&qn(t,[n])!==void 0;return t&&r&&o?Zn(r,t):void 0}})).views(e=>({get nodeNeighbors(){return e.drawnGraph?Xe(e.drawnGraph):void 0},get nodeInk(){return it(e.drawnGraph,e.nodeById,e.contigThickness,e.nodeWidth)},get deletions(){return e.graph&&this.drawsNodes?le(e.graph):[]},get walkRowBars(){if(e.chosenLayoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?Ke(e.graph,t,t.unit):Ke(e.graph,e.graphRegion);if(!n)return;let r=ai(n.rows,e.walkRowSamples),[o,...a]=so([n.reference,...r],t?.calls);return{...n,reference:o,rows:a}},get drawsNodes(){return!e.layoutResult?.tubeMap&&!this.walkRowBars},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=>pr(t.label,0).x1+6))},get genePins(){ye(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&this.drawsNodes&&e.graph&&e.backboneGenes&&t?ht(e.graph,e.backboneGenes,t):[]},get bubbleHalos(){ye(e.positionsVersion);let t=e.layoutResult?.nodePositions;if(!e.showBubbles||!this.drawsNodes||!e.graph||!t)return[];let n=new Map(e.walkChoices.map(r=>[r.name,r.label]));return Fo(e.graph,e.bubbles,t,r=>n.get(r)??r,e.repeatArrays)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.drawnGraph?be(e.drawnGraph,e.rampDomain):void 0},get assemblyNames(){let t=e.graphRegion;return t?[t.assemblyName]:[]},get scaleX(){return fe(e.scale,e.pixelRows).scaleX},get scaleY(){return fe(e.scale,e.pixelRows).scaleY},get axisScale(){return fe(e.scale,e.pixelRows)},get layoutBounds(){let t=e.layoutResult,n=this.walkRowBars;return t?bt(t,{region:e.popStack.length===0?e.graphRegion:void 0,extent:n&&t.extent?qe(n):void 0}):void 0}})).views(e=>({get geneTrack(){return mn(e.geneTrackChoices,e.geneTrackId)},get deletionEdgeIndexes(){return new Map(e.deletions.map(t=>[t.edgeIndex,t.bypassed]))},get hiddenEdgeIndexes(){return new Set(e.showDeletionEdges?[]:e.deletions.map(t=>t.edgeIndex))},get referenceRampDomain(){let t=e.referenceRamp;return t?{start:t.start,end:t.start+t.span}:void 0},get referenceRampOffKeys(){let t=e.referenceRamp,n=e.layoutResult,r=n?.tubeMap?n.nodePositions:void 0,o=!1,a=!1;if(t&&e.drawnGraph)for(let i of e.drawnGraph.nodes)r&&!r[i.id]||(t.midpoints.has(i.id)?i.stable&&i.stable.rank>0&&(o=!0):a=!0);return{offReference:o,unplaced:a}},get tubeMapNodeColors(){let t=e.drawnGraph;return e.layoutResult?.tubeMap&&t?Ga(t,e.effectiveColorScheme,e.referenceRamp):void 0},get tubeMapTubeColors(){let t=e.layoutResult?.tubeMap?.pathColors,n=t&&this.tubeMapNodeColors?t.map((a,i)=>mr(i,t.length)):t,r=new Set(e.hoveredRowWalks),o=e.drawnGraph?.paths;return n&&o&&r.size>0?n.map((a,i)=>r.has(o[i]?.name??"")?a:Nr):n},nodeSpan(t){let{nodeById:n,nodeNeighbors:r}=e;return n&&r?ze({nodeId:t,nodeById:n,neighbors:r}):void 0}})).views(e=>({get pathLegend(){let t=e.graph?.paths,n=e.layoutResult?.tubeMap;return(e.drawPaths||n)&&t&&Ot(t.length)?Le(t,e.tubeMapTubeColors):[]},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?Xn(t):[];return t?co(t,{maxGap:n.length>0?Un(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,P.getSession)(e),n=e.sourceAdapter?.assemblyNameToPanSN,r=new Map(Object.entries(n??{}).map(([a,i])=>[i,a])),o=a=>a!==void 0&&t.has(a)?t.get(a)?.name??a:void 0;return a=>o(r.get(a))??o(a)},get geneTracksByAssembly(){let t=new Map;for(let n of(0,P.getSession)(e).tracks){let r=(0,ne.readConfObject)(n,"adapter").type;if(!xt.has(r))continue;let o={trackId:n.trackId,name:(0,ne.readConfObject)(n,"name"),adapterType:r};for(let a of(0,ne.readConfObject)(n,"assemblyNames")){let i=Ve((0,P.getSession)(e),a);t.set(i,[...t.get(i)??[],o])}}return new Map([...t].flatMap(([n,r])=>{let o=mn(r,"");return o?[[n,o]]:[]}))}})).views(e=>({get launchableAssemblies(){return uo(Ya(e.contributingAssemblies,e.graphRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.graphRegion;return t!==void 0&&De({views:[...(0,P.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),r=n?ct(n):void 0,o=r?ut(e.assemblyResolver,r):void 0,a=e.graphRegion,i=e.nodeById,s=e.nodeNeighbors,d=a&&i&&s?ze({nodeId:t,nodeById:i,neighbors:s}):void 0,c=a&&d?{sample:a.assemblyName,haplotype:void 0,refName:a.refName,...d}:void 0;return{own:r&&o?{location:xn(r),assembly:o}:void 0,reference:a&&c?{location:xn(c),assembly:a.assemblyName}:void 0,highlight:a&&c?{location:c,assembly:a.assemblyName}:void 0}}})).views(e=>({get host(){let t;try{t=(0,P.getContainingView)(e)}catch{return}return Ca(t)?t:void 0}})).views(e=>({get walkStripShown(){return e.walkStrip&&!e.host&&e.modeDrawsNodes&&!e.layoutResult?.tubeMap&&!e.walkRowBars&&e.popStack.length===0&&(e.graph?.paths?.length??0)>1},get walkStripRows(){let t=e.graph,n=t&&this.walkStripShown?Ke(t,e.graphRegion):void 0;return n?{...n,rows:ai(n.rows,e.walkRowSamples)}:void 0},get walkStripFrame(){let t=this.walkStripRows;if(t)return dt(t,{width:e.paneWidth})},get cutsWholeWalks(){return Q(e.chosenLayoutMode).wholeWalks||e.walkStrip&&!e.host},get walkStripMarks(){let t=this.walkStripRows,n=e.hoveredNode??e.selectedNode,r=n===null?void 0:e.nodeById?.get(n);return t&&r&&e.graph?Ir(e.graph,[t.reference,...t.rows],r):[]},get walkStripLocator(){let t=e.stripHover?e.hoveredNode:null;return t===null?void 0:Kt(e.nodePositions?.[t],n=>({x:n.x*e.scaleX+e.translateX,y:n.y*e.scaleY+e.translateY}))}})).views(e=>({get walkGeneReads(){let t=e.walkRowBars??e.walkStripRows;if(!t||!e.showGenes)return;let n=[],r=0,o=0;for(let a of t.rows){if(!a.axis){o++;continue}let i=ut(e.assemblyResolver,{sample:a.sample,haplotype:a.haplotype===void 0?void 0:`${a.sample}#${a.haplotype}`}),s=i?e.geneTracksByAssembly.get(i):void 0;if(!i||!s){r++;continue}n.push({row:a.name,trackId:s.trackId,region:{assemblyName:i,refName:a.axis.contig,...Ht(a.axis,a.bp)}})}return{reads:n.slice(0,oi),gaps:{untracked:r,unplaced:o,unread:Math.max(0,n.length-oi)}}},get walkRowGeneGaps(){return this.walkGeneReads?.gaps},walkRowAt(t,n){let r=e.walkRowBars;if(!r)return;let o=Math.round((n-e.translateY)/(20*e.scaleY)),a=[r.reference,...r.rows][o],i=o*20*e.scaleY+e.translateY,s=(t-e.translateX)/e.scaleX-r.origin;return a&&Math.abs(n-i)<=vr/2+2&&s>=0&&s<=a.bp?o:void 0},walkRowLaunchTarget(t,n=e.walkRowBars){let r=n?[n.reference,...n.rows][t]:void 0;if(!r?.axis)return;let o=r.haplotype===void 0?void 0:`${r.sample}#${r.haplotype}`,a=t===0?e.graphRegion?.assemblyName:ut(e.assemblyResolver,{sample:r.sample,haplotype:o});return{label:r.label,assembly:a,location:{sample:r.sample,haplotype:o,refName:r.axis.contig,...Ht(r.axis,r.bp)}}},get walkRowGenes(){let t=e.walkRowBars??e.walkStripRows;if(!t||!e.showGenes)return;let n=new Map(e.walkGeneFeatures??[]);return e.geneFeatures&&n.set(t.reference.name,e.geneFeatures),n.size?Cr([t.reference,...t.rows],n):void 0}})).views(e=>({get xIsReferenceBp(){return e.layoutResult?.referenceAxis===!0&&Q(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?St(t,n):void 0},get tubeMapPicture(){let t=e.layoutResult?.tubeMap;return t?to(t.layout):void 0},get tubeMapReference(){let t=e.layoutResult?.tubeMap;return t&&e.drawnGraph?Kr(e.drawnGraph,t.layout):void 0},get tubeMapDeviations(){let t=e.layoutResult?.tubeMap?.coarse,n=e.layoutResult?.tubeMap?.layout;return t&&n?eo(t.graph,n,t.deviations):[]},get tubeMapReferenceNodes(){let t=e.layoutResult;return t?.tubeMap&&!t.referenceAxis&&e.drawnGraph?Jr(e.drawnGraph,t.tubeMap.layout):void 0}})).views(e=>({get tubeMapGenes(){let t=e.tubeMapReference;return e.showGenes&&!e.host&&t&&e.backboneGenes?oo(t,e.backboneGenes):[]},get referenceStripApplies(){return!!e.host?.initialized&&!!e.layoutResult&&e.drawsNodes&&!e.hostPlacesX&&!e.facetPanels}})).views(e=>({get referenceStripBlocks(){let{graph:t}=e;return e.showReferenceStrip&&e.referenceStripApplies&&t?zr(t,{colorScheme:e.effectiveColorScheme,referenceRamp:e.referenceRamp,walks:e.walkLift?.walks}):[]},get referenceStripFrame(){let{host:t,graphRegion:n}=e;return t?.initialized&&n?St(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}=Yr(e.referenceStripBlocks,t,e.paneWidth);return n>0||r>0},get referenceStripFaded(){return e.referenceStripBlocks.some(t=>t.faded)}})).views(e=>({get referenceStripLit(){if(!e.referenceStripShown)return;let t=a=>({x:a.x*e.scaleX+e.translateX,y:a.y*e.scaleY+e.translateY}),n=e.hoveredNode===null?e.hoveredBubble:null;if(n){let a=e.bubbleHalos.find(i=>kr(i.bubble,n));return{start:n.start,end:n.end,anchor:a?t(a.labelAt):void 0}}let r=e.hoveredNode??e.selectedNode,o=r===null?void 0:e.nodeSpan(r);return o&&r!==null?{...o,anchor:Kt(e.nodePositions?.[r],t)}:void 0},referenceStripNodeAt(t,n){let r=e.referenceStripFrame;return e.referenceStripShown&&r?Ur(e.referenceStripBlocks,r,t,n):void 0},get paperCss(){return vd(e.darkMode?ti:ei)},get referenceStripZonePx(){return e.referenceStripShown?Xr:0}})).views(e=>({get paneCeiling(){return Math.max(Sn,e.paneHeight??Ad)},get fitPadTopBase(){let t=io(e.tubeMapGenes);return D+Math.max(0,t-1)*ao+e.referenceStripZonePx},get legendRoom(){let t=e.layoutBounds,{width:n,height:r}=e.legendSize;if(!t||t.w<=0||n===0||e.facetPanels||e.tubeMapReads)return;if(e.hostPlacesX)return"top";let o=this.fitPadTopBase,a=e.host?this.canvasHeight:this.paneCeiling,i=l=>(e.paneWidth-e.fitPadLeft-l)/t.w,s=l=>e.pixelRows?t.h+l+D<=a?1/0:0:(a-l-D)/t.h,d=Math.min(i(n+2*he),s(o));return Math.min(i(D),s(o+r+he))>=d?"top":"right"},get fitPadTop(){return this.fitPadTopBase+(this.legendRoom==="top"?e.legendSize.height+he:0)},get fitPadRight(){return this.legendRoom==="right"?Math.max(D,e.legendSize.width+2*he):D},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(Cd/r,(this.paneCeiling-this.fitPadTop-D)/t.h):0},get facetSpec(){let{field:t,domain:n,columns:r}=e.facet;return t===""?void 0:n.length===0&&r===void 0?t:{field:t,domain:[...n],...r===void 0?{}:{columns:r}}},get facetPlacement(){let t=e.facetPanels,{field:n,domain:r}=e.facet;return t?at(t.map(o=>o.walks[0].name),e.hostPlacesX||n===""?"walk":n,r):void 0},facetGridIn(t){let n=this.facetPlacement,r=e.layoutBounds;return n&&r&&r.w>0?rt({count:n.count,bounds:r,pixelRows:e.pixelRows,width:e.paneWidth,room:t,columns:e.hostPlacesX?1:n.columns??e.facet.columns}):void 0},get facetGrid(){return this.facetGridIn(e.host?this.canvasHeight:this.paneCeiling)},get canvasHeight(){let t=e.layoutBounds,n=e.paneWidth-D-this.fitPadRight,r=this.paneCeiling;if(!t)return r;let o=this.facetGrid;if(o)return Math.max(Sn,o.total);let a=Math.max(Sn,e.legendSize.height+2*he+e.referenceStripZonePx);return e.pixelRows?Math.min(r,Math.max(a,t.h+this.fitPadTop+D)):t.w>0&&n>0?Math.min(r,Math.max(a,t.h*Math.max(n/t.w,this.minFitScale)+this.fitPadTop+D)):r},get viewBox(){let t=this.facetGrid;return t?{width:t.width,height:t.height}:{width:e.paneWidth,height:this.canvasHeight}},get fittedTransform(){let t=e.layoutBounds,n=this.facetGrid;return t?n?Be(t,n.width,n.height,e.pixelRows,{padLeft:12,padTop:12,padRight:12,padBottom:12}):Be(t,e.paneWidth,this.canvasHeight,e.pixelRows,{minScale:this.minFitScale,padLeft:e.fitPadLeft,padTop:this.fitPadTop,padRight:this.fitPadRight}):void 0}})).views(e=>({viewportToBuild(){return ra(Mn(e),Vd)},applyHighlights(t){let{hoveredNode:n,hoveredEdge:r,selectedNode:o}=e,a=new Map;o!==null&&a.set(o,$d),n!==null&&n!==o&&a.set(n,ri),t.setNodeHighlights(a),t.setEdgeHighlight(r,ri)},paint(t){let n=(0,pi.getDpr)();t.updateTransform({scaleX:e.scaleX*n,scaleY:e.scaleY*n,translateX:e.translateX*n,translateY:e.translateY*n,dpr:n}),t.render(e.referenceStripShown?[0,0,0,0]:e.darkMode?ti:ei)}})).views(e=>({buildDrawing(t,n){let{nodePositions:r,graph:o,nodeById:a}=e;if(!r||!o||!a)return;ye(e.viewportDirty,e.positionsVersion);let i=(0,W.untracked)(()=>e.viewportToBuild());return{batch:st({nodePositions:e.walkRowBars?{}:r,graph:o,nodeById:a,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:n,nodeWidth:e.nodeWidth,highlight:t,axis:(0,W.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:i,referenceRamp:e.referenceRamp,deletions:e.deletionEdgeIndexes,deletionRoutes:e.deletionRoutes,hiddenEdges:e.hiddenEdgeIndexes,version:e.positionsVersion}),viewportBounds:i}},get overlayLabels(){return Lr(e)},hoveredOn(t){let n=e.hoveredNode,r=n?e.nodeById?.get(n):void 0;return r?jr(t,r.id,r.length)??"not on this walk":void 0},figureSpec(){let t=e.graphRegion,n=e.sourceAdapter,r=n?.assemblyNameToPanSN,o=t&&`${t.refName}:${t.start}-${t.end}`,a=We(e.sourceGfaLocation),i=n?.type==="GbzBaseSyntenyAdapter"?We(n.gbzDbLocation):void 0,s=a?{gfa:a,region:o}:i&&t&&o?{gbz:{db:i,index:We(n.haplotypeIndexLocation),region:o,haplotypes:e.cutHaplotypes?.map(u=>r?.[u]??u),referenceSample:n.referenceSample||r?.[t.assemblyName]||t.assemblyName,context:n.context,snarls:n.subgraphSnarls}}:void 0;if(!s)return;let d=e.showGenes?e.geneTrack:void 0,c=d?(0,P.getSession)(e).tracks.find(u=>u.trackId===d.trackId):void 0,l=c?(0,ne.expandTabixShorthand)((0,ne.readConfObject)(c,"adapter"),"gffGzLocation"):void 0,g=l?.type==="Gff3TabixAdapter"?{file:We(l.gffGzLocation),index:We(l.index?.location),format:"gff3"}:void 0;return JSON.parse(JSON.stringify({...s,genes:g?.file&&g.index?g:void 0,referencePath:e.referencePath||void 0,layout:e.chosenLayoutMode,quality:e.layoutQuality,bubbleSpread:e.bubbleSpread,walks:e.walkLayers.length?e.walkLayers.map(u=>u.color?u:u.walk):void 0,facet:e.walkLayers.length>1?e.facetSpec:void 0,walkStrip:e.walkStripShown||void 0,width:e.paneWidth,height:e.paneCeiling,colorScheme:e.chosenColorScheme,nodeWidth:e.nodeWidth,showDeletionEdges:e.showDeletionEdges||void 0}))},get figureUnavailable(){return e.layoutResult?e.drawsNodes||e.walkRowBars?void 0:`${Q(e.chosenLayoutMode).label} draws a picture of its own, which the SVG export does not`:"Nothing is drawn yet"},figure(){let{graph:t,layoutResult:n}=e;return t&&n&&!this.figureUnavailable?ba(t,n,{width:e.paneWidth,height:e.paneCeiling,walks:e.walkLayers,facet:e.facetSpec,colorScheme:e.effectiveColorScheme,nodeWidth:e.nodeWidth,showDeletionEdges:e.showDeletionEdges,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,region:e.graphRegion,colorDomain:e.colorDomain,fitToDrawing:e.popStack.length>0,genes:e.showGenes?e.backboneGenes:void 0,walkRows:e.walkRowBars,rowGenes:e.walkRowGenes,rowGeneGaps:e.walkRowGeneGaps,walkStrip:e.walkStripRows&&{rows:e.walkStripRows,rowGenes:e.walkRowGenes,rowGeneGaps:e.walkRowGeneGaps},spec:this.figureSpec()}):void 0},get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?Sa(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?qr(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:o}=e,a=t&&n&&r?.initialized&&o?St(r,o):void 0;return t&&n&&a?Zr(t,i=>i*a.scale+a.translateX,n.x,e.paneWidth):[]}})).views(e=>({get tubeMapKeys(){let t=e.layoutResult,n=t?.tubeMap?.layout.reads??[],r=e.tubeMapPicture,o=e.tubeMapFrame,a=r&&o&&no(o.yScale)?r.mismatches.filter(i=>ro(i,{x:o.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(a.map(i=>i.kind))}},tubeMapNodeAt(t,n){let r=e.layoutResult?.tubeMap,o=e.tubeMapFrame;return(r&&o?Ra(r,o,t,n):null)??Qr(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=Vt(n,t);Hd(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})},setFacet(t){t!==e.facet.field&&(e.facet.domain=[]),e.facet.field=t},setFacetColumns(t){e.facet.columns=t},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&&$e([...(0,P.getSession)(e).views]).some(o=>o.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=t},setHoveredRowWalks(t){t.join(`
4
4
  `)!==e.hoveredRowWalks.join(`
5
- `)&&(e.hoveredRowWalks=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,o=e.nodeNeighbors;if(n&&r&&o){let a=(0,N.getSession)(e),i=e.graphRegion,s=i?He({nodeId:t,nodeById:r,neighbors:o}):void 0;(0,N.isSessionModelWithWidgets)(a)&&a.showWidget(a.addWidget("BaseFeatureWidget","baseFeature",{featureData:{id:n.id,name:n.name,length:n.length,depth:n.depth,rank:n.stable?.rank,stableName:n.stable?.refName,contributingAssembly:at(n)?.sample,contributingHaplotype:at(n)?.haplotype,samples:n.samples?.join(", "),...i&&s?{refName:i.refName,assemblyName:i.assemblyName,start:s.start,end:s.end}:{}}}))}},setTransform(t,n,r){let{host:o}=e;e.viewportOwner==="host"&&o?o.horizontalScroll(e.translateX-n):(e.viewportOwner="user",e.scale=Pe(t),e.translateX=n),e.translateY=r},zoom(t,n,r){let{host:o}=e;if(e.viewportOwner==="host"&&o){o.zoomTo(o.bpPerPx/t,n);return}e.viewportOwner="user";let a=Uo(e,t,n,r,e.pixelRows);e.scale=a.scale,e.translateX=a.translateX,e.translateY=a.translateY},setViewportDirty(){e.viewportRebuildPending=!1,e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){if(e.viewportOwner==="host"){let n=e.layoutBounds,r=e.facetGrid!==void 0,o=r?12:D,a=r?12:e.fitPadTop,i=e.viewBox.height-a-o;n&&i>0&&(e.translateY=Qt(n,i,e.scaleY,a));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()},refitView(){e.viewportOwner==="user"&&(e.viewportOwner="fit"),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,y.isAlive)(e)&&e.setViewportDirty()},Md)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,y.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(r,o,a){let i=e.layoutResult?.nodePositions;if(i?.[r]){for(let s of i[r])s.x+=o,s.y+=a;n()}},scheduleViewportDirty:t}}).actions(e=>{let t;function n(m){let{rpcManager:h}=(0,N.getSession)(e);return h.call((0,N.getRpcSessionId)(e),"GraphComputeLayout",{...m,signal:t?.signal,statusCallback:x=>{e.setStatusMessage((0,N.statusMessageText)(x)??"")}})}function r(m){return Do(m,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread})}function*o(m){let h=performance.now(),x=fn.has(e.chosenLayoutMode),G=e.graphRegion,w=x&&G?ia(m,G):m,S=x&&e.tubeMapFold>0&&!w.reads?da(w,e.tubeMapFold):void 0,T=Z(e.chosenLayoutMode).run(S?.graph??w,e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(T)return{result:S&&T.tubeMap?{...T,tubeMap:{...T.tubeMap,coarse:S}}:T,duration:performance.now()-h};let A=Nd(m),P=r(m),O=A.get(P);if(O)return{result:O,duration:performance.now()-h};let H=yield Wo(m,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread},n);return Pd(A,P,H.result),H}let a=0,i=new Map;function*s(m){let h=++a,x=()=>e.graph===m&&h===a,G=t?.signal,w;try{w=yield*o(m)}catch(T){if(!x()||G?.aborted)return!1;throw T}let S=x();return S&&(e.layoutResult=w.result,e.setLayoutMs(w.duration)),S}function d(m,h){let x=m.anchorPaths;return m.anchoredBy==="paths"&&x?(jn(m,e.assemblySpellings(h.assemblyName))??Qn(x,h.assemblyName))?.name:void 0}function*c(m,h,x,G=!1,w){let S=t?.signal;e.setStatusMessage("Parsing GFA");let T=Vo(m,h,{referencePath:e.referencePath||x?.assemblyName,maxNodes:e.maxGraphNodes}),A=x?d(T,x):void 0,P=!e.referencePath&&A!==void 0&&A!==T.referencePath?Bt(T,A):T;if(w){e.setStatusMessage("Reading alignments");try{let{records:H,total:F}=yield w(P);P.reads=H,e.readsShown={shown:H.length,total:F}}catch(H){if(S?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",H),e.readsShown=void 0}if(S?.aborted)return}else e.readsShown=void 0;let O=G?e.selectedNode:null;e.graph=P,e.graphRegion=x,e.loadedReferencePath=A,e.indexBubbles=void 0,e.geneFeatures=void 0,e.walkGeneFeatures=void 0,i.clear(),e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),O!==null&&e.nodeById?.has(O)&&(e.selectedNode=O),e.setStatusMessage("Computing layout"),yield*s(P)}let l=0;function g(){let m=++l;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>m===l,signal:t.signal}}function*u(m,h,x){let G=Sd(m);if(!(m.type!=="RgfaTabixAdapter"||G===void 0))try{let w=yield(0,N.getSession)(e).rpcManager.call((0,N.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${G}.bubbles.bed.gz`,baseUri:m.baseUri,assemblyNameToPanSN:m.assemblyNameToPanSN},regions:[h]});x()&&(e.indexBubbles=w.map(S=>({refName:h.refName,start:S.get("start"),end:S.get("end"),segmentCount:S.get("segmentCount"),pathCount:S.get("pathCount")??0,inversion:S.get("inversion"),shortestAlleleLength:S.get("shortestAlleleLength"),longestAlleleLength:S.get("longestAlleleLength"),segments:S.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(w){console.warn("[GraphGenomeView] no bubble index for this graph",w)}}function*p(m,h,x){let G=(0,N.getSession)(e),w=m?G.tracks.find(S=>S.trackId===m):void 0;if(w)try{return yield G.rpcManager.call((0,N.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:(0,ne.readConfObject)(w,"adapter"),regions:[h]})}catch(S){console.warn(`[GraphGenomeView] no ${x} for this graph`,S);return}}function*k(m,h){let x=yield*p(e.geneTrack?.trackId,m,"genes");x&&h()&&(e.geneFeatures=an(x))}function*L(m,h){let x=yield*p(e.repeatTrack?.trackId,m,"repeats");x&&h()&&(e.repeatArrays=Aa(x))}function*b(m,h,x){let{isLive:G,signal:w}=g();e.isLoading=!0,e.error=void 0;try{let S=typeof h=="string"?h:yield h(w);G()&&(yield*c(S,m,x))}catch(S){G()&&(console.error("[GraphGenomeView.loadWholeGFA]",S),e.error=S)}finally{G()&&e.finishLoading()}return G()}function f(){t?.abort(),t=void 0,l++,a++}return{clearGraph(){f(),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(){f(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){f()},loadGFA:(0,y.flow)(function*(m,h="Imported GFA"){yield*b(h,m)}),loadGFAFromLocation:(0,y.flow)(function*(m,h){e.setStatusMessage("Fetching GFA");let x=yield*b("uri"in m?m.uri.split("/").pop()??"GFA":"GFA",G=>(0,Ja.openLocation)(m).readFile({encoding:"utf8",signal:G}),h);h&&x&&e.graph&&(yield*L(h,()=>e.graphRegion===h))}),cutSubgraph:(0,y.flow)(function*(m,h,x={}){let{isLive:G,signal:w}=g();e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let S=performance.now(),T=yield(0,N.getSession)(e).rpcManager.call((0,N.getRpcSessionId)(e),"GetSubgraph",{adapterConfig:m,region:h,opts:x,signal:w});if(!G())return;if(e.setFetchMs(performance.now()-S),!T)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");if(yield*c(T,Me(h),h,!0,fo(m)?A=>(0,N.getSession)(e).rpcManager.call((0,N.getRpcSessionId)(e),"GetGraphReads",{adapterConfig:m,nodeNames:A.nodes.map(P=>P.name),signal:w}):void 0),!G())return;e.setStatusMessage("Reading annotations"),yield Promise.all([x.tier==="coarse"?void 0:(0,y.flow)(u)(m,h,G),(0,y.flow)(k)(h,G),(0,y.flow)(L)(h,G)])}catch(S){G()&&(console.error("[GraphGenomeView.cutSubgraph]",S),e.error=S)}finally{G()&&e.finishLoading()}}),reloadRepeats:(0,y.flow)(function*(){let m=e.graphRegion,h=e.repeatTrack?.trackId;m&&(yield*L(m,()=>e.graphRegion===m&&e.repeatTrack?.trackId===h))}),loadWalkGenes:(0,y.flow)(function*(){let m=e.walkGeneReads?.reads??[],h=JSON.stringify(m),x=e.graph,G=new Map;yield Promise.all(m.map(({row:w,trackId:S,region:T})=>(0,y.flow)(function*(){let A=`${S} ${T.refName}:${T.start}-${T.end}`,P=i.get(A);if(!P){let O=yield*p(S,T,"haplotype genes");if(!O)return;P=an(O).map(H=>({...H,refName:T.refName})),i.set(A,P)}G.set(w,P)})())),(0,y.isAlive)(e)&&e.graph===x&&JSON.stringify(e.walkGeneReads?.reads??[])===h&&(e.walkGeneFeatures=m.length?G:void 0)}),reloadGenes:(0,y.flow)(function*(){i.clear();let m=e.graphRegion,h=e.geneTrack?.trackId;m&&(yield*k(m,()=>e.graphRegion===m&&e.geneTrack?.trackId===h))}),popBubble:(0,y.flow)(function*(m){let h=e.graph;if(!h)return;let x=vo(h,Je(m));if(x.nodes.length===0){(0,N.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:G}=g();e.popStack=[...e.popStack,{graph:h,layoutMode:e.chosenLayoutMode,label:h.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let w=`${fr[qe(m,e.repeatArrays).kind]} at ${m.refName}:${m.start.toLocaleString()}`;e.graph={...x,name:w},e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*s(e.graph))&&e.finishLoading()}catch(S){G()&&(e.error=S,e.finishLoading())}}),unpopBubble:(0,y.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*s(m.graph))&&e.finishLoading()}catch(h){e.error=h,e.finishLoading()}}}),recomputeLayout:(0,y.flow)(function*(){let m=e.graph;if(m){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*s(m))&&e.finishLoading()}catch(h){console.error("[GraphGenomeView.recomputeLayout]",h),e.error=h,e.finishLoading()}}})}}).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,y.addDisposer)(e,(0,W.autorun)(()=>{e.fittedTransform&&(0,W.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,y.addDisposer)(e,(0,W.reaction)(()=>{let r=e.facetGrid;return r?`${e.facet.field} ${e.facetPanels?.length} ${r.columns}`:""},()=>{e.refitView()})),(0,y.addDisposer)(e,(0,W.reaction)(()=>({graph:e.graph,reads:JSON.stringify(e.walkGeneReads?.reads??[])}),()=>{e.loadWalkGenes()},{fireImmediately:!0,equals:(r,o)=>r.graph===o.graph&&r.reads===o.reads})),(0,y.addDisposer)(e,(0,W.reaction)(()=>e.fitPadTop,()=>{e.viewportOwner==="host"&&e.zoomToFit()})),(0,y.addDisposer)(e,(0,W.autorun)(()=>{let r=Pa((0,N.getSession)(e).hovered);(0,W.untracked)(()=>{let o=e.graphRegion,a=e.graph,i=r&&o&&va(r,o)?r:void 0,s=i?.featureName&&a?.paths?Ia(i.featureName,a.paths):[];o&&a&&!e.pointerInPane&&e.setHoveredNode(i&&s.length===0?Ca({hover:i,nodes:a.nodes}):null),e.setHoveredRowWalks(s)})})),(0,y.addDisposer)(e,(0,W.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredBubble(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,y.addDisposer)(e,(0,W.autorun)(()=>{let{scale:r}=e,o=bn(e);if(n){n=!1;return}let a=(0,W.untracked)(()=>e.builtViewport);a?.scale===r&&Yo(a.bounds,o)||e.scheduleViewportDirty()})),(0,y.addDisposer)(e,(0,W.autorun)(()=>{let r=e.currentRenderingBackend;fe(e.geometryVersion),r&&(e.applyHighlights(r),e.renderNow())}))}e.attachRenderingBackend(t,()=>({upload:n=>{if(n.resize(e.paneWidth,e.canvasHeight),e.layoutResult?.tubeMap)return fe(e.viewportDirty),n.uploadGeometry(Ua),e.setGeometryMetrics(0,0,{scale:(0,W.untracked)(()=>e.scale),bounds:(0,W.untracked)(()=>bn(e))}),!0;if(e.facetPanels)return fe(e.viewportDirty),n.uploadGeometry(Ua),e.setGeometryMetrics(0,0,{scale:(0,W.untracked)(()=>e.scale),bounds:(0,W.untracked)(()=>e.viewportToBuild())}),!0;let r=performance.now(),o=e.buildDrawing(e.walkLift,e.effectiveDrawPaths);return o?(n.uploadGeometry(o.batch),e.setGeometryMetrics(performance.now()-r,o.batch.nodeStrokes.length,{scale:(0,W.untracked)(()=>e.scale),bounds:o.viewportBounds}),!0):!1},render:n=>e.nodePositions?(e.paint(n),e.markPainted(),!0):!1}))}})).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,N.getSession)(e),r=t.assembly===e.graphRegion?.assemblyName,o=$a({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:Wa({session:n,assemblyName:t.assembly,first:r?e.sourceTrackId:void 0})});r&&e.pairWithLinearView(o)},highlightInLinearView(t){Va({session:(0,N.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){Da({session:(0,N.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?_a((0,N.getSession)(e),t):[]}})).views(e=>({graphMenuItems(){let t=e.walkChoices;return[{label:"Layout",subMenu:cr.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:br.map(n=>({type:"radio",label:n.label,checked:e.chosenColorScheme===n.value,onClick:()=>{e.setColorScheme(n.value)}}))},...t.length>0&&e.liftsWalks?[{label:"Walk",subMenu:[{label:"None",onClick:()=>{e.setWalkLayers([])}},...e.walkLayers.length>1&&e.modeDrawsNodes?[{label:"Side by side",subMenu:wd.map(({value:n,label:r})=>({type:"radio",label:r,checked:e.facet.field===n,onClick:()=>{e.setFacet(n)}}))}]:[],...e.facetPanels&&e.facet.field==="walk"&&!e.hostPlacesX?[{label:"Columns",subMenu:[void 0,...e.facetPanels.map((n,r)=>r+1)].map(n=>({type:"radio",label:n===void 0?"Auto":`${n}`,checked:e.facet.columns===n,onClick:()=>{e.setFacetColumns(n)}}))}]:[],...t.map(n=>({type:"checkbox",label:n.label,checked:e.walkLayers.some(r=>r.walk===n.name),onClick:()=>{e.toggleWalk(n.name)}})),...e.drawnWalks.map(n=>({label:`Colour ${e.walkLabel(n.name)}`,subMenu:[{type:"subHeader",label:"Colour by"},...Pr.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"},...vr.filter(r=>r.value!=="rainbow"||n.encoding.field==="reference").map(r=>({type:"radio",label:r.label,checked:n.encoding.scheme===r.value,onClick:()=>{e.setWalkColor(n.name,{scheme:r.value})}}))]}))]}]:[],...fn.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:xd.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:o})=>({type:"radio",label:`${r} \xB7 ${o.toLocaleString()} bp unit`,checked:e.repeatKey===n,onClick:()=>{e.setRepeatKey(n)}}))]}]:[],...e.hostPlacesX?[]:[{label:"Zoom in",onClick:()=>{e.zoom(1.5,e.viewBox.width/2,e.viewBox.height/2)}},{label:"Zoom out",onClick:()=>{e.zoom(1/1.5,e.viewBox.width/2,e.viewBox.height/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)}}]:[],{label:"Export SVG",disabled:e.figureUnavailable!==void 0,disabledHelpText:e.figureUnavailable,onClick:()=>{let n=e.figure();n&&ba(n,`${(e.graph?.name??"graph").replaceAll(/[^\w.-]+/g,"_")}.svg`)}},{label:"Copy figure spec",disabled:!e.figureSpec(),disabledHelpText:"bandage-figure reads a graph cut from a gbz-base track or a GFA url",onClick:()=>{let n=e.figureSpec(),r=(0,N.getSession)(e);navigator.clipboard.writeText(`${JSON.stringify(n,null,2)}
6
- `).then(()=>{r.notify("Figure spec copied. Save it as spec.json and run: npx -p @jbrowse/bandage-core bandage-figure spec.json -o figure.svg","info")}).catch(o=>{r.notify(`Could not copy the figure spec: ${String(o)}`)})}}]},launchMenuItems(){let t=[];for(let n of ro({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:r=>{e.showInLinearView(r)},onShowSynteny:r=>{e.showSyntenyView(r)}}))(0,qa.pushLaunchViewMenuItem)(t,n);return t}}))}var yn=M(te(),1);function ei(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function ti(e){let t=(0,yn.readConfObject)(e,"assemblyNames"),n=ei(t)?t.slice(1):[];return n.length>0?n:void 0}function Tt(e){let t=(0,yn.readConfObject)(e,"assemblyNames");return ei(t)?t[0]:void 0}function Nt(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 vd(e){return("uri"in e?e.uri.split(/[?#]/)[0]:"localPath"in e?e.localPath:"name"in e?e.name:"").split(/[\\/]/).at(-1)??""}function wn(){return U.types.compose("GraphGenomeView",ri.BaseViewModel,Gt(),U.types.model({type:U.types.literal("GraphGenomeView"),gfaLocation:U.types.maybe(U.types.frozen()),loadedRegion:U.types.maybe(U.types.frozen()),loadedTrackId:U.types.optional(U.types.string,""),subgraphContext:U.types.optional(U.types.number,1),subgraphHaplotypes:U.types.maybe(U.types.frozen()),maxRegionBp:U.types.optional(U.types.number,Lt)})).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get cutHaplotypes(){return e.subgraphHaplotypes},get sourceGfaLocation(){return e.gfaLocation},get sourceTrack(){return e.loadedTrackId?(0,oi.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.displayName||e.setDisplayName(vd(e.gfaLocation)),e.loadGFAFromLocation(e.gfaLocation,n);if(!e.loadedTrackId||!n)return;let r=e.sourceTrack,o=n.end-n.start,a=r?Nt(Tt(r),n.assemblyName):void 0;if(!r)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(a)e.setError(new Error(a));else if(o>e.maxRegionBp)e.setError(new Error(`Region too large (${be(o)}) \u2014 zoom in to view graph (max ${be(e.maxRegionBp)})`));else return e.cutSubgraph((0,ni.readConfObject)(r,"adapter"),n,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes,...Z(e.chosenLayoutMode).wholeWalks?{snarls:"overlapping"}:{}})}}}).actions(e=>({retryLoad(){e.load()},switchLayout(t){let n=Z(e.chosenLayoutMode);return e.setLayoutMode(t),e.loadedTrackId&&Z(t).wholeWalks!==n.wholeWalks?e.load():e.recomputeLayout()},afterAttach(){e.graph||e.load()}}))}var Cd=(0,si.defineLaunchKeys)()({});function kn(e){e.addViewType(()=>new ii.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:wn(),launchKeys:Cd,ReactComponent:(0,ai.lazy)(()=>import("./chunks/GraphGenomeView-QOBHGMLE.js"))}))}var di=M(te(),1),ye=M(de(),1),Id=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function Bd(e){let t=e.getElementTypesInGroup("display"),n=o=>t.find(a=>a.name===o),r=o=>o&&Object.assign(Object.create(o),{adapterCapabilities:["headerLanes"]});return[n("LinearGraphDisplay"),n("LinearBasicDisplay"),...Id.map(o=>r(n(o)))].filter(o=>o!==void 0)}function xn(e){e.addTrackType(()=>{let t=(0,di.ConfigurationSchema)("GraphTrack",{},{baseConfiguration:(0,ye.createBaseTrackConfig)(e),explicitIdentifier:"trackId"}),n=new ye.TrackType({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:(0,ye.createBaseTrackModel)(e,"GraphTrack",t)});for(let r of Bd(e))n.addDisplayType(r);return n})}function Sn(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...r}=t;return n.addView("GraphGenomeView",r),t})}var Li=M(Oe(),1),Gi=M(ui(),1);var li=M(te(),1),gi=M(mi(),1),Rn=M(ie(),1);function hi(){return(0,li.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:Rn.types.enumeration("LayoutMode",Ue),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:Rn.types.enumeration("ColorScheme",Ze),defaultValue:"auto"},...(0,gi.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var ki=M(Oe(),1);var De=M(te(),1),xi=M(de(),1),Si=M(qn(),1),Mn=M(xe(),1),Ri=M(bi(),1),E=M(ie(),1),At=M(wi(),1);var Ve=M(Kn(),1);var Ed=(0,ki.lazy)(()=>import("./chunks/GraphTrackSettingsDialog-RTSJTM6A.js"));function Mi(e){return E.types.compose("LinearGraphDisplay",xi.BaseDisplay,(0,Ri.default)(),Gt(),E.types.model({type:E.types.literal("LinearGraphDisplay"),configuration:(0,De.ConfigurationReference)(e),pane:E.types.maybe(E.types.frozen()),cutRegion:E.types.maybe(E.types.frozen()),coarseCut:E.types.optional(E.types.boolean,!1),maxRegionBp:E.types.optional(E.types.number,Lt),subgraphContext:E.types.optional(E.types.number,1),subgraphHaplotypes:E.types.maybe(E.types.frozen())})).preProcessSnapshot(t=>{let{pane:n,...r}=t;if(!n)return t;let{type:o,...a}=n;return{...a,...r}}).volatile(()=>({recuts:0,settledWindow:void 0})).views(t=>({get defaultLayoutMode(){return(0,De.getConf)(t,"layoutMode")},get defaultColorScheme(){return(0,De.getConf)(t,"colorScheme")},get drawsGenomicCoordinates(){return t.layoutResult===void 0||t.hostPlacesX},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get cutHaplotypes(){return this.chosenHaplotypes},get chosenHaplotypes(){return t.subgraphHaplotypes??ti(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 (${be(n.end-n.start)}, max ${be(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get displayPhase(){return(0,At.computeDisplayStatusPhase)({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>(0,At.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=Nt(Tt(t.parentTrack.configuration),n.assemblyName);if(r){t.clearGraph(),t.setError(new Error(r));return}let o=t.cutTier==="coarse";return t.cutSubgraph(t.adapterConfig,n,{hops:o?0:t.subgraphContext,haplotypes:t.chosenHaplotypes,tier:o?"coarse":void 0,...Z(t.chosenLayoutMode).wholeWalks?{snarls:"overlapping"}:{}})}})).actions(t=>({recutAt(n){let r=t.tierAt(n.bpPerPx);return t.coarseCut=r==="coarse",t.cutRegion=sn(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&&Ra(t.cutRegion,n,r)?!1:(t.recutAt(n),!0)},switchLayout(n){let r=Z(t.chosenLayoutMode);t.setLayoutMode(n);let o=Z(n),a=t.host?wt(t.host):void 0;return a&&!t.regionTooLarge&&(o.cutMargins!==r.cutMargins||o.wholeWalks!==r.wholeWalks)?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,E.addDisposer)(t,(0,Ve.reaction)(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),(0,E.addDisposer)(t,(0,Ve.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,E.addDisposer)(t,(0,Ve.reaction)(()=>`${t.facet.field} ${t.facetPlacement?.count}`,()=>{let n=t.facetGridIn(t.paneCeiling)?.total??0;(t.facetGrid?.total??0)>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),(0,E.addDisposer)(t,(0,Ve.reaction)(()=>t.host?.coarseDynamicBlocks,n=>{let{host:r}=t,o=n&&r?wt(r):void 0;o&&t.settleOn(o)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let n=t.host?wt(t.host):void 0,r=t.sourceTrackId;if(!n||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge)return;let o=Math.floor(n.start),a=Math.ceil(n.end);return{loadedTrackId:r,loadedRegion:{refName:n.refName,assemblyName:n.assemblyName,start:o,end:a},subgraphContext:t.subgraphContext,subgraphHaplotypes:t.chosenHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-o),layoutMode:t.chosenLayoutMode,colorScheme:t.chosenColorScheme,referencePath:t.referencePath,geneTrackId:t.geneTrackId,showGenes:t.showGenes,showBubbles:t.showBubbles,showDeletionEdges:t.showDeletionEdges,walkLayers:t.walkLayers,facet:(0,E.getSnapshot)(t.facet)}}})).actions(t=>({openGraphView(){let n=t.graphViewSpec;n&&(0,Mn.getSession)(t).addView("GraphGenomeView",n)}})).views(t=>({trackMenuItems(){let n=t.launchMenuItems();return(0,Si.pushLaunchViewMenuItem)(n,{label:"Graph genome view",icon:ct,disabled:!t.graphViewSpec,disabledHelpText:"Zoom in until the track cuts a graph",onClick:()=>{t.openGraphView()}}),[...t.graphMenuItems(),{label:"Settings",icon:oo,onClick:()=>{(0,Mn.getSession)(t).queueDialog(r=>[Ed,{model:t,open:!0,onClose:r}])}},...n]}}))}function Ln(e){e.addDisplayType(()=>{let t=hi();return Object.assign(new Gi.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:Mi(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,Li.lazy)(()=>import("./chunks/LinearGraphDisplay-TPXW6POY.js"))}),{adapterCapabilities:["getSubgraph"]})})}var Ai=M(ut(),1);var Gn=M(te(),1),Ti=M(ie(),1);function Tn(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 Fd=(0,Gn.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,Gn.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:Ti.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:Tn}),Ni=Fd;function Nn(e){e.addAdapterType(()=>new Ai.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:Tn,configSchema:Ni,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-CK7AE4QT.js").then(t=>t.default)}))}var Bi=M(ut(),1);var vt=M(te(),1),Ci=M(ie(),1);function Pi(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function vi(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:Pi(`${t}.segs.bed.gz`,n,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:Pi(`${t}.links.bed.gz`,n,r)}:e}function An(e){let{coarse:t,baseUri:n}=e;return vi(typeof t=="object"&&t!==null?{...e,coarse:vi({baseUri:n,...t})}:e)}var Pt=(e,t)=>(0,vt.ConfigurationSchema)(e,{indexType:{model:Ci.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),$d=(0,vt.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Pt("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:Pt("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),Vd=(0,vt.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Pt("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:Pt("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:$d},{explicitlyTyped:!0,preProcessSnapshot:An}),Ii=Vd;function Pn(e){e.addAdapterType(()=>new Bi.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:An,configSchema:Ii,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-QPKEJZXA.js").then(t=>t.default)}))}var Dd=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function Wd(e){return zn(e).toLowerCase().endsWith(".gbz.db")}function Od(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 _d(e,t,n){if((!n||n==="GbzBaseSyntenyAdapter")&&Wd(e))return{type:"GbzBaseSyntenyAdapter",gbzDbLocation:e,...t?{haplotypeIndexLocation:t}:{}};if((!n||n==="RgfaTabixAdapter")&&Yn(e))return Un({choice:"RgfaTabixAdapter",loc:e,indexLoc:t,assembly:"",sample:""})}function vn(e){e.addToExtensionPoint("Core-preProcessTrackConfig",Od),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(n,r,o)=>_d(n,r,o)??t(n,r,o)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(n,r)=>Dd.has(n)?"GraphTrack":t(n,r))}var Vi=M(xe(),1),Di=M(Zi(),1),Cn=M(Ji(),1),Wi=M(es(),1);function Ei(e){let t;if(Q(e)){let{refName:n,start:r,end:o,assemblyName:a}=e;typeof n=="string"&&typeof r=="number"&&typeof o=="number"&&(t={refName:n,start:r,end:o,assemblyName:typeof a=="string"?a:void 0})}return t}function Hd(e,t,n){let r=e.connectedViewId;return r===void 0||r===t||!n.has(r)}function Fi(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function jd(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(n=>Q(n)&&Array.isArray(n.displays)?n.displays.filter(r=>Q(r)&&r.type==="LinearGraphDisplay"):[])}function $i(e,t,n){let r=[],o=Be(e),a=new Set(o.map(i=>Q(i)?i.id:void 0));for(let i of o){if(Q(i)&&i.id===t)for(let s of jd(i)){let d=Ei(s.hoverHighlight);d&&Fi(d,n)&&r.push({key:typeof s.id=="string"?s.id:"graph-track",region:d})}if(Q(i)&&i.type==="GraphGenomeView"&&Hd(i,t,a)){let s=Ei(i.hoverHighlight);s&&Fi(s,n)&&r.push({key:typeof i.id=="string"?i.id:"graph",region:s})}}return r}var we=M(Se(),1),Xd=(0,Wi.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,Di.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),zd=(0,Cn.observer)(function({model:t,region:n}){let{classes:r}=Xd(),o=t.getHighlightCoords(n);return o?(0,we.jsx)("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:o.left,width:o.width}}):null}),Yd=(0,Cn.observer)(function({model:t}){let{views:n}=(0,Vi.getSession)(t);return(0,we.jsx)(we.Fragment,{children:$i([...n],t.id,t.assemblyNames).map(({key:r,region:o})=>(0,we.jsx)(zd,{model:t,region:o},`graph-hover-${r}`))})}),Oi=Yd;var _i=M(Se(),1),Ud="LinearGenomeView-TracksContainerComponent";function In(e){e.contributeToExtensionPoint(Ud,({model:t})=>(0,_i.jsx)(Oi,{model:t},"graphgenomeview-hover-highlight"))}var Hi="GraphGenomeView";var ji="4.2.0";var Bn=class extends Xi.default{constructor(){super(...arguments);this.name=Hi;this.version=ji}install(n){kn(n),Ln(n),xn(n),Sn(n),In(n),Pn(n),Nn(n),Xt(n),Yt(n),vn(n),n.addRpcMethod(()=>new Te(n)),n.addRpcMethod(()=>new Ge(n)),n.addRpcMethod(()=>new Le(n))}configure(n){try{(0,zi.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:ct,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{Bn as default};
5
+ `)&&(e.hoveredRowWalks=t)},setHoveredBubble(t){e.hoveredBubble=t},setPointerInPane(t){e.pointerInPane=t},setWalkStrip(t){e.walkStrip=t,e.stripHover=null},setStripHover(t){e.stripHover=t;let n=e.walkStripRows,r=e.walkStripFrame,o=t&&n?[n.reference,...n.rows].find(i=>i.name===t.row):void 0,a=o&&r&&e.graph?Br(e.graph,o,t.offset,r.scaleX):void 0;e.hoveredNode=a??null},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,o=e.nodeNeighbors;if(n&&r&&o){let a=(0,P.getSession)(e),i=e.graphRegion,s=i?ze({nodeId:t,nodeById:r,neighbors:o}):void 0;(0,P.isSessionModelWithWidgets)(a)&&a.showWidget(a.addWidget("BaseFeatureWidget","baseFeature",{featureData:{id:n.id,name:n.name,length:n.length,depth:n.depth,rank:n.stable?.rank,stableName:n.stable?.refName,contributingAssembly:ct(n)?.sample,contributingHaplotype:ct(n)?.haplotype,samples:n.samples?.join(", "),...i&&s?{refName:i.refName,assemblyName:i.assemblyName,start:s.start,end:s.end}:{}}}))}},setTransform(t,n,r){let{host:o}=e;e.viewportOwner==="host"&&o?o.horizontalScroll(e.translateX-n):(e.viewportOwner="user",e.scale=Ie(t),e.translateX=n),e.translateY=r},zoom(t,n,r){let{host:o}=e;if(e.viewportOwner==="host"&&o){o.zoomTo(o.bpPerPx/t,n);return}e.viewportOwner="user";let a=aa(e,t,n,r,e.pixelRows);e.scale=a.scale,e.translateX=a.translateX,e.translateY=a.translateY},setViewportDirty(){e.viewportRebuildPending=!1,e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){if(e.viewportOwner==="host"){let n=e.layoutBounds,r=e.facetGrid!==void 0,o=r?12:D,a=r?12:e.fitPadTop,i=e.viewBox.height-a-o;n&&i>0&&(e.translateY=sn(n,i,e.scaleY,a));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()},refitView(){e.viewportOwner==="user"&&(e.viewportOwner="fit"),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,f.isAlive)(e)&&e.setViewportDirty()},Dd)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,f.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(r,o,a){let i=e.layoutResult?.nodePositions;if(i?.[r]){for(let s of i[r])s.x+=o,s.y+=a;n()}},scheduleViewportDirty:t}}).actions(e=>{let t;function n(m){let{rpcManager:b}=(0,P.getSession)(e);return b.call((0,P.getRpcSessionId)(e),"GraphComputeLayout",{...m,signal:t?.signal,statusCallback:S=>{e.setStatusMessage((0,P.statusMessageText)(S)??"")}})}function r(m){return Ko(m,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread})}function*o(m){let b=performance.now(),S=Rn.has(e.chosenLayoutMode),L=e.graphRegion,k=S&&L?fa(m,L):m,R=S&&e.tubeMapFold>0&&!k.reads?wa(k,e.tubeMapFold):void 0,T=Q(e.chosenLayoutMode).run(R?.graph??k,e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(T)return{result:R&&T.tubeMap?{...T,tubeMap:{...T.tubeMap,coarse:R}}:T,duration:performance.now()-b};let A=_d(m),C=r(m),O=A.get(C);if(O)return{result:O,duration:performance.now()-b};let H=yield qo(m,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread},n);return jd(A,C,H.result),H}let a=0,i=new Map;function*s(m){let b=++a,S=()=>e.graph===m&&b===a,L=t?.signal,k;try{k=yield*o(m)}catch(T){if(!S()||L?.aborted)return!1;throw T}let R=S();return R&&(e.layoutResult=k.result,e.setLayoutMs(k.duration)),R}function d(m,b){let S=m.anchorPaths;return m.anchoredBy==="paths"&&S?(Jn(m,e.assemblySpellings(b.assemblyName))??ar(S,b.assemblyName))?.name:void 0}function*c(m,b,S,L=!1,k){let R=t?.signal;e.setStatusMessage("Parsing GFA");let T=Uo(m,b,{referencePath:e.referencePath||S?.assemblyName,maxNodes:e.maxGraphNodes}),A=S?d(T,S):void 0,C=!e.referencePath&&A!==void 0&&A!==T.referencePath?Vt(T,A):T;if(k){e.setStatusMessage("Reading alignments");try{let{records:H,total:E}=yield k(C);C.reads=H,e.readsShown={shown:H.length,total:E}}catch(H){if(R?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",H),e.readsShown=void 0}if(R?.aborted)return}else e.readsShown=void 0;let O=L?e.selectedNode:null;e.graph=C,e.graphRegion=S,e.loadedReferencePath=A,e.indexBubbles=void 0,e.geneFeatures=void 0,e.walkGeneFeatures=void 0,i.clear(),e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),O!==null&&e.nodeById?.has(O)&&(e.selectedNode=O),e.setStatusMessage("Computing layout"),yield*s(C)}let l=0;function g(){let m=++l;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>m===l,signal:t.signal}}function*u(m,b,S){let L=Fd(m);if(!(m.type!=="RgfaTabixAdapter"||L===void 0))try{let k=yield(0,P.getSession)(e).rpcManager.call((0,P.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${L}.bubbles.bed.gz`,baseUri:m.baseUri,assemblyNameToPanSN:m.assemblyNameToPanSN},regions:[b]});S()&&(e.indexBubbles=k.map(R=>({refName:b.refName,start:R.get("start"),end:R.get("end"),segmentCount:R.get("segmentCount"),pathCount:R.get("pathCount")??0,inversion:R.get("inversion"),shortestAlleleLength:R.get("shortestAlleleLength"),longestAlleleLength:R.get("longestAlleleLength"),segments:R.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(k){console.warn("[GraphGenomeView] no bubble index for this graph",k)}}function*p(m,b,S){let L=(0,P.getSession)(e),k=m?L.tracks.find(R=>R.trackId===m):void 0;if(k)try{return yield L.rpcManager.call((0,P.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:(0,ne.readConfObject)(k,"adapter"),regions:[b]})}catch(R){console.warn(`[GraphGenomeView] no ${S} for this graph`,R);return}}function*w(m,b){let S=yield*p(e.geneTrack?.trackId,m,"genes");S&&b()&&(e.geneFeatures=ln(S))}function*M(m,b){let S=yield*p(e.repeatTrack?.trackId,m,"repeats");S&&b()&&(e.repeatArrays=Wa(S))}function*h(m,b,S){let{isLive:L,signal:k}=g();e.isLoading=!0,e.error=void 0;try{let R=typeof b=="string"?b:yield b(k);L()&&(yield*c(R,m,S))}catch(R){L()&&(console.error("[GraphGenomeView.loadWholeGFA]",R),e.error=R)}finally{L()&&e.finishLoading()}return L()}function y(){t?.abort(),t=void 0,l++,a++}return{clearGraph(){y(),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(){y(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){y()},loadGFA:(0,f.flow)(function*(m,b="Imported GFA"){yield*h(b,m)}),loadGFAFromLocation:(0,f.flow)(function*(m,b){e.setStatusMessage("Fetching GFA");let S=yield*h("uri"in m?m.uri.split("/").pop()??"GFA":"GFA",L=>(0,ci.openLocation)(m).readFile({encoding:"utf8",signal:L}),b);b&&S&&e.graph&&(yield*M(b,()=>e.graphRegion===b))}),cutSubgraph:(0,f.flow)(function*(m,b,S={}){let{isLive:L,signal:k}=g();e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let R=performance.now(),T=yield(0,P.getSession)(e).rpcManager.call((0,P.getRpcSessionId)(e),"GetSubgraph",{adapterConfig:m,region:b,opts:S,signal:k});if(!L())return;if(e.setFetchMs(performance.now()-R),!T)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");if(yield*c(T,Te(b),b,!0,Ro(m)?A=>(0,P.getSession)(e).rpcManager.call((0,P.getRpcSessionId)(e),"GetGraphReads",{adapterConfig:m,nodeNames:A.nodes.map(C=>C.name),signal:k}):void 0),!L())return;e.setStatusMessage("Reading annotations"),yield Promise.all([S.tier==="coarse"?void 0:(0,f.flow)(u)(m,b,L),(0,f.flow)(w)(b,L),(0,f.flow)(M)(b,L)])}catch(R){L()&&(console.error("[GraphGenomeView.cutSubgraph]",R),e.error=R)}finally{L()&&e.finishLoading()}}),reloadRepeats:(0,f.flow)(function*(){let m=e.graphRegion,b=e.repeatTrack?.trackId;m&&(yield*M(m,()=>e.graphRegion===m&&e.repeatTrack?.trackId===b))}),loadWalkGenes:(0,f.flow)(function*(){let m=e.walkGeneReads?.reads??[],b=JSON.stringify(m),S=e.graph,L=new Map;yield Promise.all(m.map(({row:k,trackId:R,region:T})=>(0,f.flow)(function*(){let A=`${R} ${T.refName}:${T.start}-${T.end}`,C=i.get(A);if(!C){let O=yield*p(R,T,"haplotype genes");if(!O)return;C=ln(O).map(H=>({...H,refName:T.refName})),i.set(A,C)}L.set(k,C)})())),(0,f.isAlive)(e)&&e.graph===S&&JSON.stringify(e.walkGeneReads?.reads??[])===b&&(e.walkGeneFeatures=m.length?L:void 0)}),reloadGenes:(0,f.flow)(function*(){i.clear();let m=e.graphRegion,b=e.geneTrack?.trackId;m&&(yield*w(m,()=>e.graphRegion===m&&e.geneTrack?.trackId===b))}),popBubble:(0,f.flow)(function*(m){let b=e.graph;if(!b)return;let S=Do(b,et(m));if(S.nodes.length===0){(0,P.getSession)(e).notify("None of the segments of this bubble are in the cut; widen the graph context to open it","info");return}let{isLive:L}=g();e.popStack=[...e.popStack,{graph:b,layoutMode:e.chosenLayoutMode,label:b.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let k=`${Rr[Qe(m,e.repeatArrays).kind]} at ${m.refName}:${m.start.toLocaleString()}`;e.graph={...S,name:k},e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*s(e.graph))&&e.finishLoading()}catch(R){L()&&(e.error=R,e.finishLoading())}}),unpopBubble:(0,f.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*s(m.graph))&&e.finishLoading()}catch(b){e.error=b,e.finishLoading()}}}),recomputeLayout:(0,f.flow)(function*(){let m=e.graph;if(m){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*s(m))&&e.finishLoading()}catch(b){console.error("[GraphGenomeView.recomputeLayout]",b),e.error=b,e.finishLoading()}}})}}).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,f.addDisposer)(e,(0,W.autorun)(()=>{e.fittedTransform&&(0,W.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,f.addDisposer)(e,(0,W.reaction)(()=>{let r=e.facetGrid;return r?`${e.facet.field} ${e.facetPanels?.length} ${r.columns}`:""},()=>{e.refitView()})),(0,f.addDisposer)(e,(0,W.reaction)(()=>({graph:e.graph,reads:JSON.stringify(e.walkGeneReads?.reads??[])}),()=>{e.loadWalkGenes()},{fireImmediately:!0,equals:(r,o)=>r.graph===o.graph&&r.reads===o.reads})),(0,f.addDisposer)(e,(0,W.reaction)(()=>e.fitPadTop,()=>{e.viewportOwner==="host"&&e.zoomToFit()})),(0,f.addDisposer)(e,(0,W.autorun)(()=>{let r=Oa((0,P.getSession)(e).hovered);(0,W.untracked)(()=>{let o=e.graphRegion,a=e.graph,i=r&&o&&_a(r,o)?r:void 0,s=i?.featureName&&a?.paths?ja(i.featureName,a.paths):[];o&&a&&!e.pointerInPane&&e.setHoveredNode(i&&s.length===0?Ha({hover:i,nodes:a.nodes}):null),e.setHoveredRowWalks(s)})})),(0,f.addDisposer)(e,(0,W.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredBubble(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,f.addDisposer)(e,(0,W.autorun)(()=>{let{scale:r}=e,o=Mn(e);if(n){n=!1;return}let a=(0,W.untracked)(()=>e.builtViewport);a?.scale===r&&oa(a.bounds,o)||e.scheduleViewportDirty()})),(0,f.addDisposer)(e,(0,W.autorun)(()=>{let r=e.currentRenderingBackend;ye(e.geometryVersion),r&&(e.applyHighlights(r),e.renderNow())}))}e.attachRenderingBackend(t,()=>({upload:n=>{if(n.resize(e.paneWidth,e.canvasHeight),e.layoutResult?.tubeMap)return ye(e.viewportDirty),n.uploadGeometry(ii),e.setGeometryMetrics(0,0,{scale:(0,W.untracked)(()=>e.scale),bounds:(0,W.untracked)(()=>Mn(e))}),!0;if(e.facetPanels)return ye(e.viewportDirty),n.uploadGeometry(ii),e.setGeometryMetrics(0,0,{scale:(0,W.untracked)(()=>e.scale),bounds:(0,W.untracked)(()=>e.viewportToBuild())}),!0;let r=performance.now(),o=e.buildDrawing(e.walkLift,e.effectiveDrawPaths);return o?(n.uploadGeometry(o.batch),e.setGeometryMetrics(performance.now()-r,o.batch.nodeStrokes.length,{scale:(0,W.untracked)(()=>e.scale),bounds:o.viewportBounds}),!0):!1},render:n=>e.nodePositions?(e.paint(n),e.markPainted(),!0):!1}))}})).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,P.getSession)(e),r=t.assembly===e.graphRegion?.assemblyName,o=Ua({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:Ja({session:n,assemblyName:t.assembly,first:r?e.sourceTrackId:void 0})});r&&e.pairWithLinearView(o)},highlightInLinearView(t){Ka({session:(0,P.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){qa({session:(0,P.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?Qa((0,P.getSession)(e),t):[]}})).views(e=>({graphMenuItems(){let t=e.walkChoices;return[{label:"Layout",subMenu:hr.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:Mr.map(n=>({type:"radio",label:n.label,checked:e.chosenColorScheme===n.value,onClick:()=>{e.setColorScheme(n.value)}}))},...t.length>0&&e.liftsWalks?[{label:"Walk",subMenu:[{label:"None",onClick:()=>{e.setWalkLayers([])}},...e.walkLayers.length>1&&e.modeDrawsNodes?[{label:"Side by side",subMenu:Id.map(({value:n,label:r})=>({type:"radio",label:r,checked:e.facet.field===n,onClick:()=>{e.setFacet(n)}}))}]:[],...e.facetPanels&&e.facet.field==="walk"&&!e.hostPlacesX?[{label:"Columns",subMenu:[void 0,...e.facetPanels.map((n,r)=>r+1)].map(n=>({type:"radio",label:n===void 0?"Auto":`${n}`,checked:e.facet.columns===n,onClick:()=>{e.setFacetColumns(n)}}))}]:[],...t.map(n=>({type:"checkbox",label:n.label,checked:e.walkLayers.some(r=>r.walk===n.name),onClick:()=>{e.toggleWalk(n.name)}})),...e.drawnWalks.map(n=>({label:`Colour ${e.walkLabel(n.name)}`,subMenu:[{type:"subHeader",label:"Colour by"},...Dr.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"},...Vr.filter(r=>r.value!=="rainbow"||n.encoding.field==="reference").map(r=>({type:"radio",label:r.label,checked:n.encoding.scheme===r.value,onClick:()=>{e.setWalkColor(n.name,{scheme:r.value})}}))]}))]}]:[],...Rn.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:Ed.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:o})=>({type:"radio",label:`${r} \xB7 ${o.toLocaleString()} bp unit`,checked:e.repeatKey===n,onClick:()=>{e.setRepeatKey(n)}}))]}]:[],...e.hostPlacesX?[]:[{label:"Zoom in",onClick:()=>{e.zoom(1.5,e.viewBox.width/2,e.viewBox.height/2)}},{label:"Zoom out",onClick:()=>{e.zoom(1/1.5,e.viewBox.width/2,e.viewBox.height/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.modeDrawsNodes&&(e.graph?.paths?.length??0)>1?[{type:"checkbox",label:"Walk rows under the graph",checked:e.walkStrip,onClick:()=>{e.setWalkStrip(!e.walkStrip)}}]:[],...e.referenceStripApplies?[{type:"checkbox",label:"Reference strip at bp",checked:e.showReferenceStrip,onClick:()=>{e.setShowReferenceStrip(!e.showReferenceStrip)}}]:[],{label:"Export SVG",disabled:e.figureUnavailable!==void 0,disabledHelpText:e.figureUnavailable,onClick:()=>{let n=e.figure();n&&Na(n,`${(e.graph?.name??"graph").replaceAll(/[^\w.-]+/g,"_")}.svg`)}},{label:"Copy figure spec",disabled:!e.figureSpec(),disabledHelpText:"bandage-figure reads a graph cut from a gbz-base track or a GFA url",onClick:()=>{let n=e.figureSpec(),r=(0,P.getSession)(e);navigator.clipboard.writeText(`${JSON.stringify(n,null,2)}
6
+ `).then(()=>{r.notify("Figure spec copied. Save it as spec.json and run: npx -p @jbrowse/bandage-core bandage-figure spec.json -o figure.svg","info")}).catch(o=>{r.notify(`Could not copy the figure spec: ${String(o)}`)})}}]},launchMenuItems(){let t=[];for(let n of po({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:r=>{e.showInLinearView(r)},onShowSynteny:r=>{e.showSyntenyView(r)}}))(0,di.pushLaunchViewMenuItem)(t,n);return t}}))}var Gn=G(te(),1);function mi(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function li(e){let t=(0,Gn.readConfObject)(e,"assemblyNames"),n=mi(t)?t.slice(1):[];return n.length>0?n:void 0}function vt(e){let t=(0,Gn.readConfObject)(e,"assemblyNames");return mi(t)?t[0]:void 0}function Ct(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 Xd(e){return("uri"in e?e.uri.split(/[?#]/)[0]:"localPath"in e?e.localPath:"name"in e?e.name:"").split(/[\\/]/).at(-1)??""}function Ln(){return z.types.compose("GraphGenomeView",hi.BaseViewModel,At(),z.types.model({type:z.types.literal("GraphGenomeView"),gfaLocation:z.types.maybe(z.types.frozen()),loadedRegion:z.types.maybe(z.types.frozen()),loadedTrackId:z.types.optional(z.types.string,""),subgraphContext:z.types.optional(z.types.number,1),subgraphHaplotypes:z.types.maybe(z.types.frozen()),maxRegionBp:z.types.optional(z.types.number,Pt)})).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get cutHaplotypes(){return e.subgraphHaplotypes},get sourceGfaLocation(){return e.gfaLocation},get sourceTrack(){return e.loadedTrackId?(0,bi.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.displayName||e.setDisplayName(Xd(e.gfaLocation)),e.loadGFAFromLocation(e.gfaLocation,n);if(!e.loadedTrackId||!n)return;let r=e.sourceTrack,o=n.end-n.start,a=r?Ct(vt(r),n.assemblyName):void 0;if(!r)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(a)e.setError(new Error(a));else if(o>e.maxRegionBp)e.setError(new Error(`Region too large (${we(o)}) \u2014 zoom in to view graph (max ${we(e.maxRegionBp)})`));else return e.cutSubgraph((0,gi.readConfObject)(r,"adapter"),n,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes,...e.cutsWholeWalks?{snarls:"overlapping"}:{}})}}}).actions(e=>({retryLoad(){e.load()},switchLayout(t){let n=e.cutsWholeWalks;return e.setLayoutMode(t),e.loadedTrackId&&e.cutsWholeWalks!==n?e.load():e.recomputeLayout()},afterAttach(){e.graph||e.load(),(0,z.addDisposer)(e,(0,fi.reaction)(()=>e.walkStrip,()=>{e.loadedTrackId&&!Q(e.chosenLayoutMode).wholeWalks&&e.load()}))}}))}var zd=(0,ki.defineLaunchKeys)()({});function Tn(e){e.addViewType(()=>new wi.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:Ln(),launchKeys:zd,ReactComponent:(0,yi.lazy)(()=>import("./chunks/GraphGenomeView-NHYVE7GZ.js"))}))}var xi=G(te(),1),ke=G(de(),1),Yd=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function Ud(e){let t=e.getElementTypesInGroup("display"),n=o=>t.find(a=>a.name===o),r=o=>o&&Object.assign(Object.create(o),{adapterCapabilities:["headerLanes"]});return[n("LinearGraphDisplay"),n("LinearBasicDisplay"),...Yd.map(o=>r(n(o)))].filter(o=>o!==void 0)}function Nn(e){e.addTrackType(()=>{let t=(0,xi.ConfigurationSchema)("GraphTrack",{},{baseConfiguration:(0,ke.createBaseTrackConfig)(e),explicitIdentifier:"trackId"}),n=new ke.TrackType({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:(0,ke.createBaseTrackModel)(e,"GraphTrack",t)});for(let r of Ud(e))n.addDisplayType(r);return n})}function Pn(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...r}=t;return n.addView("GraphGenomeView",r),t})}var Di=G(je(),1),Vi=G(Ri(),1);var Li=G(te(),1),Ti=G(Gi(),1),An=G(ie(),1);function Ni(){return(0,Li.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:An.types.enumeration("LayoutMode",Je),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:An.types.enumeration("ColorScheme",tt),defaultValue:"auto"},...(0,Ti.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var Ii=G(je(),1);var _e=G(te(),1),Bi=G(de(),1),Ei=G(nr(),1),vn=G(Me(),1),Fi=G(Ai(),1),$=G(ie(),1),It=G(Ci(),1);var Oe=G(Dt(),1);var Kd=(0,Ii.lazy)(()=>import("./chunks/GraphTrackSettingsDialog-LXYUYPZS.js"));function $i(e){return $.types.compose("LinearGraphDisplay",Bi.BaseDisplay,(0,Fi.default)(),At(),$.types.model({type:$.types.literal("LinearGraphDisplay"),configuration:(0,_e.ConfigurationReference)(e),pane:$.types.maybe($.types.frozen()),cutRegion:$.types.maybe($.types.frozen()),coarseCut:$.types.optional($.types.boolean,!1),maxRegionBp:$.types.optional($.types.number,Pt),subgraphContext:$.types.optional($.types.number,1),subgraphHaplotypes:$.types.maybe($.types.frozen())})).preProcessSnapshot(t=>{let{pane:n,...r}=t;if(!n)return t;let{type:o,...a}=n;return{...a,...r}}).volatile(()=>({recuts:0,settledWindow:void 0})).views(t=>({get defaultLayoutMode(){return(0,_e.getConf)(t,"layoutMode")},get defaultColorScheme(){return(0,_e.getConf)(t,"colorScheme")},get drawsGenomicCoordinates(){return t.layoutResult===void 0||t.hostPlacesX},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get cutHaplotypes(){return this.chosenHaplotypes},get chosenHaplotypes(){return t.subgraphHaplotypes??li(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 (${we(n.end-n.start)}, max ${we(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get displayPhase(){return(0,It.computeDisplayStatusPhase)({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>(0,It.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=Ct(vt(t.parentTrack.configuration),n.assemblyName);if(r){t.clearGraph(),t.setError(new Error(r));return}let o=t.cutTier==="coarse";return t.cutSubgraph(t.adapterConfig,n,{hops:o?0:t.subgraphContext,haplotypes:t.chosenHaplotypes,tier:o?"coarse":void 0,...Q(t.chosenLayoutMode).wholeWalks?{snarls:"overlapping"}:{}})}})).actions(t=>({recutAt(n){let r=t.tierAt(n.bpPerPx);return t.coarseCut=r==="coarse",t.cutRegion=gn(n,t.capFor(r),Q(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(n){t.settledWindow=n;let r=Q(t.chosenLayoutMode).cutMargins;return t.regionTooLarge||!t.loadCanceled&&t.tierAt(n.bpPerPx)===t.cutTier&&Ba(t.cutRegion,n,r)?!1:(t.recutAt(n),!0)},switchLayout(n){let r=Q(t.chosenLayoutMode);t.setLayoutMode(n);let o=Q(n),a=t.host?Rt(t.host):void 0;return a&&!t.regionTooLarge&&(o.cutMargins!==r.cutMargins||o.wholeWalks!==r.wholeWalks)?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,$.addDisposer)(t,(0,Oe.reaction)(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),(0,$.addDisposer)(t,(0,Oe.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,$.addDisposer)(t,(0,Oe.reaction)(()=>`${t.facet.field} ${t.facetPlacement?.count}`,()=>{let n=t.facetGridIn(t.paneCeiling)?.total??0;(t.facetGrid?.total??0)>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),(0,$.addDisposer)(t,(0,Oe.reaction)(()=>t.host?.coarseDynamicBlocks,n=>{let{host:r}=t,o=n&&r?Rt(r):void 0;o&&t.settleOn(o)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let n=t.host?Rt(t.host):void 0,r=t.sourceTrackId;if(!n||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge)return;let o=Math.floor(n.start),a=Math.ceil(n.end);return{loadedTrackId:r,loadedRegion:{refName:n.refName,assemblyName:n.assemblyName,start:o,end:a},subgraphContext:t.subgraphContext,subgraphHaplotypes:t.chosenHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-o),layoutMode:t.chosenLayoutMode,colorScheme:t.chosenColorScheme,referencePath:t.referencePath,geneTrackId:t.geneTrackId,showGenes:t.showGenes,showBubbles:t.showBubbles,showDeletionEdges:t.showDeletionEdges,walkLayers:t.walkLayers,facet:(0,$.getSnapshot)(t.facet)}}})).actions(t=>({openGraphView(){let n=t.graphViewSpec;n&&(0,vn.getSession)(t).addView("GraphGenomeView",n)}})).views(t=>({trackMenuItems(){let n=t.launchMenuItems();return(0,Ei.pushLaunchViewMenuItem)(n,{label:"Graph genome view",icon:lt,disabled:!t.graphViewSpec,disabledHelpText:"Zoom in until the track cuts a graph",onClick:()=>{t.openGraphView()}}),[...t.graphMenuItems(),{label:"Settings",icon:mo,onClick:()=>{(0,vn.getSession)(t).queueDialog(r=>[Kd,{model:t,open:!0,onClose:r}])}},...n]}}))}function Cn(e){e.addDisplayType(()=>{let t=Ni();return Object.assign(new Vi.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:$i(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,Di.lazy)(()=>import("./chunks/LinearGraphDisplay-742CW5KL.js"))}),{adapterCapabilities:["getSubgraph"]})})}var _i=G(gt(),1);var In=G(te(),1),Wi=G(ie(),1);function Bn(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 qd=(0,In.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,In.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:Wi.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:Bn}),Oi=qd;function En(e){e.addAdapterType(()=>new _i.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:Bn,configSchema:Oi,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-CK7AE4QT.js").then(t=>t.default)}))}var Yi=G(gt(),1);var Et=G(te(),1),Xi=G(ie(),1);function Hi(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function ji(e){let{uri:t,baseUri:n,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:Hi(`${t}.segs.bed.gz`,n,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:Hi(`${t}.links.bed.gz`,n,r)}:e}function Fn(e){let{coarse:t,baseUri:n}=e;return ji(typeof t=="object"&&t!==null?{...e,coarse:ji({baseUri:n,...t})}:e)}var Bt=(e,t)=>(0,Et.ConfigurationSchema)(e,{indexType:{model:Xi.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),Jd=(0,Et.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Bt("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:Bt("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),Zd=(0,Et.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Bt("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:Bt("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:Jd},{explicitlyTyped:!0,preProcessSnapshot:Fn}),zi=Zd;function $n(e){e.addAdapterType(()=>new Yi.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:Fn,configSchema:zi,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-QPKEJZXA.js").then(t=>t.default)}))}var Qd=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function ec(e){return Qn(e).toLowerCase().endsWith(".gbz.db")}function tc(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 nc(e,t,n){if((!n||n==="GbzBaseSyntenyAdapter")&&ec(e))return{type:"GbzBaseSyntenyAdapter",gbzDbLocation:e,...t?{haplotypeIndexLocation:t}:{}};if((!n||n==="RgfaTabixAdapter")&&er(e))return tr({choice:"RgfaTabixAdapter",loc:e,indexLoc:t,assembly:"",sample:""})}function Dn(e){e.addToExtensionPoint("Core-preProcessTrackConfig",tc),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(n,r,o)=>nc(n,r,o)??t(n,r,o)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(n,r)=>Qd.has(n)?"GraphTrack":t(n,r))}var Ji=G(Me(),1),Zi=G(ps(),1),Vn=G(us(),1),Qi=G(ls(),1);function Ui(e){let t;if(Z(e)){let{refName:n,start:r,end:o,assemblyName:a}=e;typeof n=="string"&&typeof r=="number"&&typeof o=="number"&&(t={refName:n,start:r,end:o,assemblyName:typeof a=="string"?a:void 0})}return t}function rc(e,t,n){let r=e.connectedViewId;return r===void 0||r===t||!n.has(r)}function Ki(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function oc(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(n=>Z(n)&&Array.isArray(n.displays)?n.displays.filter(r=>Z(r)&&r.type==="LinearGraphDisplay"):[])}function qi(e,t,n){let r=[],o=$e(e),a=new Set(o.map(i=>Z(i)?i.id:void 0));for(let i of o){if(Z(i)&&i.id===t)for(let s of oc(i)){let d=Ui(s.hoverHighlight);d&&Ki(d,n)&&r.push({key:typeof s.id=="string"?s.id:"graph-track",region:d})}if(Z(i)&&i.type==="GraphGenomeView"&&rc(i,t,a)){let s=Ui(i.hoverHighlight);s&&Ki(s,n)&&r.push({key:typeof i.id=="string"?i.id:"graph",region:s})}}return r}var xe=G(Ge(),1),ac=(0,Qi.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,Zi.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),ic=(0,Vn.observer)(function({model:t,region:n}){let{classes:r}=ac(),o=t.getHighlightCoords(n);return o?(0,xe.jsx)("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:o.left,width:o.width}}):null}),sc=(0,Vn.observer)(function({model:t}){let{views:n}=(0,Ji.getSession)(t);return(0,xe.jsx)(xe.Fragment,{children:qi([...n],t.id,t.assemblyNames).map(({key:r,region:o})=>(0,xe.jsx)(ic,{model:t,region:o},`graph-hover-${r}`))})}),es=sc;var ts=G(Ge(),1),dc="LinearGenomeView-TracksContainerComponent";function Wn(e){e.contributeToExtensionPoint(dc,({model:t})=>(0,ts.jsx)(es,{model:t},"graphgenomeview-hover-highlight"))}var ns="GraphGenomeView";var rs="4.4.0";var On=class extends os.default{constructor(){super(...arguments);this.name=ns;this.version=rs}install(n){Tn(n),Cn(n),Nn(n),Pn(n),Wn(n),$n(n),En(n),Zt(n),en(n),Dn(n),n.addRpcMethod(()=>new Ae(n)),n.addRpcMethod(()=>new Pe(n)),n.addRpcMethod(()=>new Ne(n))}configure(n){try{(0,as.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:lt,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{On as default};
7
7
  //# sourceMappingURL=jbrowse-plugin-graphgenomeviewer.esm.js.map