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