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