jbrowse-plugin-graphgenomeviewer 4.3.0 → 4.4.1

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