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