jbrowse-plugin-graphgenomeviewer 4.0.3 → 4.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/dist/chunks/AddTrackWorkflow-I4EPGFPJ.js +2 -0
  2. package/dist/chunks/{AddTrackWorkflow-TPCKXM2H.js.map → AddTrackWorkflow-I4EPGFPJ.js.map} +2 -2
  3. package/dist/chunks/{GraphGenomeView-WPKSNN4I.js → GraphGenomeView-BQYWWF6Z.js} +2 -2
  4. package/dist/chunks/LinearGraphDisplay-7O3VQHKU.js +2 -0
  5. package/dist/chunks/{LinearGraphDisplay-7POYIRIB.js.map → LinearGraphDisplay-7O3VQHKU.js.map} +2 -2
  6. package/dist/chunks/chunk-5WJPRX4N.js +2 -0
  7. package/dist/chunks/{chunk-A4ZWFDQY.js.map → chunk-5WJPRX4N.js.map} +2 -2
  8. package/dist/chunks/{chunk-SDTCVLC3.js → chunk-RSAY56Y4.js} +2 -2
  9. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +2 -2
  10. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +3 -3
  11. package/package.json +1 -1
  12. package/src/GraphAddTrackWorkflow/buildTrackConfig.test.ts +4 -0
  13. package/src/GraphAddTrackWorkflow/buildTrackConfig.ts +13 -1
  14. package/src/GraphGenomeView/host.ts +26 -7
  15. package/src/GraphGenomeView/layoutModes.ts +10 -0
  16. package/src/GraphGenomeView/model.ts +15 -4
  17. package/src/LinearGraphDisplay/LinearGraphDisplay.test.ts +27 -2
  18. package/src/LinearGraphDisplay/components/LinearGraphDisplay.tsx +1 -0
  19. package/src/version.ts +1 -1
  20. package/dist/chunks/AddTrackWorkflow-TPCKXM2H.js +0 -2
  21. package/dist/chunks/LinearGraphDisplay-7POYIRIB.js +0 -2
  22. package/dist/chunks/chunk-A4ZWFDQY.js +0 -2
  23. /package/dist/chunks/{GraphGenomeView-WPKSNN4I.js.map → GraphGenomeView-BQYWWF6Z.js.map} +0 -0
  24. /package/dist/chunks/{chunk-SDTCVLC3.js.map → chunk-RSAY56Y4.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import{D as ve,E as rt,F as st,J as at,O as it,Q as lt,R as ct,a as T,b as Pn,c as Tn,f as te,j as Je,k as ye,l as Qe,m as Te,n as xe,p as tt,u as nt,z as ot}from"./chunk-A4ZWFDQY.js";import{a as ut}from"./chunk-OHT6UX4C.js";import{F as ne,n as et}from"./chunk-OP7IRVG6.js";import{a as R,b as N,c as F,d as Pe,e as qe}from"./chunk-XEJ47DLD.js";import{a as je,b as p}from"./chunk-FY3BTKY4.js";var mt=je((br,dt)=>{dt.exports=JBrowseExports["@jbrowse/render-core/useRenderingBackend"]});var gn=je((xs,fn)=>{fn.exports=JBrowseExports["@jbrowse/render-core/renderingBackendBase"]});var V=p(qe(),1),de=p(Pe(),1),_n=p(mt(),1);var pt=p(R(),1),ht=(0,T.createSvgIcon)((0,pt.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-6h2zm0-8h-2V7h2z"}),"Info");var W=p(N(),1);var gt=p(N(),1);function Hn(o){return o.length*6.2+8}function Yn(o,e){return o.x0<e.x1&&o.x1>e.x0&&o.y0<e.y1&&o.y1>e.y0}function Me(o,e,t=[]){let n=[...t],r=[],s=19;for(let a of o){let u=Hn(a.text),i=a.y>e.height/2?-1:1;for(let c=0;c<=(a.stack??0);c++){let m=a.y+i*c*s,l={x0:a.x-u/2,x1:a.x+u/2,y0:m-11-4,y1:m+4};if(l.x1<0||l.x0>e.width||l.y1<0||l.y0>e.height)break;if(!n.some(g=>Yn(g,l))){n.push(l),r.push({...a,y:m,w:u});break}}}return r}var ae=p(R(),1);function ie({x:o,y:e,w:t,text:n,color:r,italic:s,small:a,dimmed:u,title:i,testId:c,onClick:m}){return(0,ae.jsxs)("g",{style:{pointerEvents:m?"auto":"none",cursor:m?"pointer":void 0,opacity:u?.35:1},"data-testid":c,onClick:m,children:[i?(0,ae.jsx)("title",{children:i}):null,(0,ae.jsx)("rect",{x:o-t/2,y:e-11-4+2,width:t,height:17,rx:3,fill:"rgba(255,255,255,0.85)",stroke:r,strokeWidth:a?.6:1}),(0,ae.jsx)("text",{x:o,y:e,fontSize:a?10:11,fontFamily:"sans-serif",fontStyle:s?"italic":void 0,fontWeight:s?600:void 0,fill:r,textAnchor:"middle",children:n})]})}var oe=p(R(),1),$n={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"hidden",zIndex:2},zn=3.4,On=240,Dn=8,Vn=(0,gt.observer)(function({model:e}){let{bubbleHalos:t,walkHighlight:n}=e;if(t.length===0)return null;let{scaleX:r,scaleY:s,translateX:a,translateY:u,width:i,canvasHeight:c,contigThickness:m}=e,l=m*zn,g=h=>({x:h.x*r+a,y:h.y*s+u}),M=h=>n!==void 0&&!h.nodeIds.some(f=>n.nodeIds.has(f)),C=h=>n!==void 0&&!h.route.walks.includes(n.name),w=[{x0:i-On,x1:i,y0:0,y1:60}];e.poppedFrom&&w.push({x0:0,x1:60+e.poppedFrom.label.length*6.2*1.2,y0:0,y1:44});let L=[...t].sort((h,f)=>f.members-h.members),b=[...L.map(h=>{let{x:f,y}=g(h.top);return{item:{halo:h},x:f,y:y-l/2-6,text:h.label}}),...L.flatMap(h=>h.routes.map(f=>{let{x:y,y:d}=g(f.at);return{item:{halo:h,route:f},x:y,y:d+4,text:f.text,stack:Dn}}))],E=Me(b,{width:i,height:c},w);return(0,oe.jsxs)("svg",{style:$n,width:i,height:c,"data-testid":"graph-bubble-halos",children:[(0,oe.jsx)("g",{transform:`translate(${a} ${u}) scale(${r} ${s})`,children:t.filter(h=>!h.whole).map(h=>(0,oe.jsx)("path",{d:h.path,fill:"none",stroke:te[h.kind],strokeOpacity:M(h)?.06:.22,strokeWidth:l,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"},`${h.bubble.start}-${h.bubble.end}`))}),E.map(({item:{halo:h,route:f},x:y,y:d,w:v,text:k})=>f?(0,oe.jsx)(ie,{x:y,y:d,w:v,text:k,color:te[h.kind],small:!0,dimmed:C(f),title:`${f.route.walks.length} walk(s): ${f.route.walks.join(", ")}`,testId:"graph-route-label"},`${h.bubble.start}-${h.bubble.end}-${f.route.steps.join(",")}`):(0,oe.jsx)(ie,{x:y,y:d,w:v,text:k,color:te[h.kind],dimmed:M(h),title:`${h.label}
1
+ import{D as ve,E as rt,F as st,J as at,O as it,Q as lt,R as ct,a as T,b as Pn,c as Tn,f as te,j as Je,k as ye,l as Qe,m as Te,n as xe,p as tt,u as nt,z as ot}from"./chunk-5WJPRX4N.js";import{a as ut}from"./chunk-OHT6UX4C.js";import{F as ne,n as et}from"./chunk-OP7IRVG6.js";import{a as R,b as N,c as F,d as Pe,e as qe}from"./chunk-XEJ47DLD.js";import{a as je,b as p}from"./chunk-FY3BTKY4.js";var mt=je((br,dt)=>{dt.exports=JBrowseExports["@jbrowse/render-core/useRenderingBackend"]});var gn=je((xs,fn)=>{fn.exports=JBrowseExports["@jbrowse/render-core/renderingBackendBase"]});var V=p(qe(),1),de=p(Pe(),1),_n=p(mt(),1);var pt=p(R(),1),ht=(0,T.createSvgIcon)((0,pt.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-6h2zm0-8h-2V7h2z"}),"Info");var W=p(N(),1);var gt=p(N(),1);function Hn(o){return o.length*6.2+8}function Yn(o,e){return o.x0<e.x1&&o.x1>e.x0&&o.y0<e.y1&&o.y1>e.y0}function Me(o,e,t=[]){let n=[...t],r=[],s=19;for(let a of o){let u=Hn(a.text),i=a.y>e.height/2?-1:1;for(let c=0;c<=(a.stack??0);c++){let m=a.y+i*c*s,l={x0:a.x-u/2,x1:a.x+u/2,y0:m-11-4,y1:m+4};if(l.x1<0||l.x0>e.width||l.y1<0||l.y0>e.height)break;if(!n.some(g=>Yn(g,l))){n.push(l),r.push({...a,y:m,w:u});break}}}return r}var ae=p(R(),1);function ie({x:o,y:e,w:t,text:n,color:r,italic:s,small:a,dimmed:u,title:i,testId:c,onClick:m}){return(0,ae.jsxs)("g",{style:{pointerEvents:m?"auto":"none",cursor:m?"pointer":void 0,opacity:u?.35:1},"data-testid":c,onClick:m,children:[i?(0,ae.jsx)("title",{children:i}):null,(0,ae.jsx)("rect",{x:o-t/2,y:e-11-4+2,width:t,height:17,rx:3,fill:"rgba(255,255,255,0.85)",stroke:r,strokeWidth:a?.6:1}),(0,ae.jsx)("text",{x:o,y:e,fontSize:a?10:11,fontFamily:"sans-serif",fontStyle:s?"italic":void 0,fontWeight:s?600:void 0,fill:r,textAnchor:"middle",children:n})]})}var oe=p(R(),1),$n={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"hidden",zIndex:2},zn=3.4,On=240,Dn=8,Vn=(0,gt.observer)(function({model:e}){let{bubbleHalos:t,walkHighlight:n}=e;if(t.length===0)return null;let{scaleX:r,scaleY:s,translateX:a,translateY:u,width:i,canvasHeight:c,contigThickness:m}=e,l=m*zn,g=h=>({x:h.x*r+a,y:h.y*s+u}),M=h=>n!==void 0&&!h.nodeIds.some(f=>n.nodeIds.has(f)),C=h=>n!==void 0&&!h.route.walks.includes(n.name),w=[{x0:i-On,x1:i,y0:0,y1:60}];e.poppedFrom&&w.push({x0:0,x1:60+e.poppedFrom.label.length*6.2*1.2,y0:0,y1:44});let L=[...t].sort((h,f)=>f.members-h.members),b=[...L.map(h=>{let{x:f,y}=g(h.top);return{item:{halo:h},x:f,y:y-l/2-6,text:h.label}}),...L.flatMap(h=>h.routes.map(f=>{let{x:y,y:d}=g(f.at);return{item:{halo:h,route:f},x:y,y:d+4,text:f.text,stack:Dn}}))],E=Me(b,{width:i,height:c},w);return(0,oe.jsxs)("svg",{style:$n,width:i,height:c,"data-testid":"graph-bubble-halos",children:[(0,oe.jsx)("g",{transform:`translate(${a} ${u}) scale(${r} ${s})`,children:t.filter(h=>!h.whole).map(h=>(0,oe.jsx)("path",{d:h.path,fill:"none",stroke:te[h.kind],strokeOpacity:M(h)?.06:.22,strokeWidth:l,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"},`${h.bubble.start}-${h.bubble.end}`))}),E.map(({item:{halo:h,route:f},x:y,y:d,w:v,text:k})=>f?(0,oe.jsx)(ie,{x:y,y:d,w:v,text:k,color:te[h.kind],small:!0,dimmed:C(f),title:`${f.route.walks.length} walk(s): ${f.route.walks.join(", ")}`,testId:"graph-route-label"},`${h.bubble.start}-${h.bubble.end}-${f.route.steps.join(",")}`):(0,oe.jsx)(ie,{x:y,y:d,w:v,text:k,color:te[h.kind],dimmed:M(h),title:`${h.label}
2
2
  ${h.bubble.segmentCount} segments \xB7 click to open`,testId:"graph-bubble-halo-label",onClick:()=>{e.popBubble(h.bubble)}},`${h.bubble.start}-${h.bubble.end}-label`))]})}),bt=Vn;var xt=p(F(),1),vt=p(N(),1);var A=p(R(),1),Wn={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"visible",zIndex:3},Fn={position:"absolute",left:8,top:8,zIndex:5,background:"rgba(255,255,255,0.9)",textTransform:"none"},He=15,Zn=8,Kn=150,Un=10;function yt(o,e){let t=12+26*Math.log10(1+o);return Math.min(t,e)}var jn=(0,vt.observer)(function({model:e}){let{bubbleGlyphs:t,poppedFrom:n}=e,r=n?(0,A.jsxs)(xt.Button,{size:"small",variant:"outlined",style:Fn,"data-testid":"graph-unpop-bubble",onClick:()=>{e.unpopBubble()},children:["\u25C0 Back to ",n.label]}):null;if(t.length===0)return r;let{scaleX:s,translateX:a,translateY:u,width:i,canvasHeight:c}=e,m=u,l=b=>b*s+a,g=Math.max(2,Math.min(Zn,Math.floor((m-60)/He))),M=[...t].sort((b,E)=>E.bubble.end-E.bubble.start-(b.bubble.end-b.bubble.start)),C=[],w=M.flatMap(b=>{let E=(l(b.bubble.start)+l(b.bubble.end))/2;if(E<0||E>i)return[];let h=b.label.length*6.2/2,f=Math.min(Math.max(E,h+4),i-Kn-h),y=C.findIndex(v=>v<f-h-10),d=y===-1?C.length:y;return d>=g?[]:(C[d]=f+h,[{g:b,bx:E,cx:f,y:14+d*He}])}),L=Math.max(24,m-C.length*He-14);return(0,A.jsxs)(A.Fragment,{children:[r,(0,A.jsxs)("svg",{style:Wn,width:i,height:c,"data-testid":"graph-bubble-overlay",children:[M.map(({bubble:b,kind:E,label:h})=>{let f=l(b.start),y=l(b.end),d=Math.max(y-f,Un),v=(f+y)/2,k=yt(b.longestAlleleLength,L),S=te[E],X=b.end-b.start-b.shortestAlleleLength,G=X>0?6+10*Math.log10(1+X):0,ee=`${b.start}-${b.end}`;return(0,A.jsxs)("g",{children:[(0,A.jsx)("path",{d:`M${v-d/2},${m} C${v-d/2},${m-k} ${v+d/2},${m-k} ${v+d/2},${m} Z`,fill:S,fillOpacity:.18,stroke:S,strokeWidth:2,style:{pointerEvents:"auto",cursor:"pointer"},onClick:()=>{e.popBubble(b)},children:(0,A.jsx)("title",{children:`${h}
3
3
  ${b.segmentCount} segments \xB7 click to open`})}),G>0?(0,A.jsx)("path",{d:`M${v-d/2},${m} C${v-d/2},${m+G} ${v+d/2},${m+G} ${v+d/2},${m}`,fill:"none",stroke:S,strokeWidth:2,strokeDasharray:"4 3"}):null]},ee)}),w.map(({g:b,bx:E,cx:h,y:f})=>{let y=te[b.kind],d=m-yt(b.bubble.longestAlleleLength,L);return(0,A.jsxs)("g",{children:[(0,A.jsx)("line",{x1:E,x2:E,y1:f+4,y2:d-2,stroke:y,strokeWidth:.7,strokeOpacity:.5}),(0,A.jsx)("text",{x:h,y:f,fontSize:11,fontFamily:"sans-serif",fill:y,textAnchor:"middle",children:b.label})]},`${b.bubble.start}-${b.bubble.end}-label`)})]})]})}),Mt=jn;var wt=p(N(),1);var Z=p(R(),1),qn={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"hidden",zIndex:3},Ye="#1c1c22",Jn=(0,wt.observer)(function({model:e}){let{genePins:t}=e;if(t.length===0)return null;let{scaleX:n,scaleY:r,translateX:s,translateY:a,width:u,canvasHeight:i,contigThickness:c}=e,m=Me([...t].sort((l,g)=>g.gene.end-g.gene.start-(l.gene.end-l.gene.start)).map(l=>({item:l,x:l.at.x*n+s,y:l.at.y*r+a+c+18,text:l.covered<.98?`${l.gene.name} \u2026`:l.gene.name})),{width:u,height:i});return(0,Z.jsxs)("svg",{style:qn,width:u,height:i,"data-testid":"graph-gene-pins",children:[(0,Z.jsx)("g",{transform:`translate(${s} ${a}) scale(${n} ${r})`,children:t.map(l=>l.exons?(0,Z.jsx)("path",{d:l.exons,fill:"none",stroke:Ye,strokeOpacity:.9,strokeWidth:c*.55,strokeLinecap:"round",vectorEffect:"non-scaling-stroke"},`${l.gene.name}-${l.gene.start}`):null)}),m.map(({item:l,x:g,y:M,w:C,text:w})=>(0,Z.jsxs)("g",{children:[(0,Z.jsx)("line",{x1:g,x2:g,y1:M-11-2,y2:l.at.y*r+a+c/2,stroke:Ye,strokeWidth:.8,strokeOpacity:.6}),(0,Z.jsx)(ie,{x:g,y:M,w:C,text:w,color:Ye,italic:!0,title:`${l.gene.name} ${l.gene.refName}:${l.gene.start.toLocaleString()}-${l.gene.end.toLocaleString()}${l.covered<.98?", runs past the cut":""}`,testId:"graph-gene-pin-label"})]},`${l.gene.name}-${l.gene.start}-label`))]})}),St=Jn;var Lt=p(R(),1),Ct=(0,T.createSvgIcon)((0,Lt.jsx)("path",{d:"M3 5v4h2V5h4V3H5c-1.1 0-2 .9-2 2m2 10H3v4c0 1.1.9 2 2 2h4v-2H5zm14 4h-4v2h4c1.1 0 2-.9 2-2v-4h-2zm0-16h-4v2h4v4h2V5c0-1.1-.9-2-2-2"}),"CropFree");var $e=p(R(),1),kt=(0,T.createSvgIcon)([(0,$e.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"},"0"),(0,$e.jsx)("path",{d:"M12 10h-2v2H9v-2H7V9h2V7h1v2h2z"},"1")],"ZoomIn");var Et=p(R(),1),Rt=(0,T.createSvgIcon)((0,Et.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14M7 9h5v1H7z"}),"ZoomOut");var $=p(F(),1),Ve=p(N(),1),Jt=p(ne(),1);var K=p(F(),1),It=p(N(),1),Bt=p(ne(),1);var le=p(R(),1),Qn=(0,Bt.makeStyles)()({formControl:{minWidth:100}}),eo=(0,It.observer)(function({model:e}){let{classes:t}=Qn();return(0,le.jsxs)(K.FormControl,{size:"small",className:t.formControl,children:[(0,le.jsx)(K.InputLabel,{children:"Color"}),(0,le.jsx)(K.Select,{value:e.colorScheme,label:"Color",onChange:n=>{e.setColorScheme(n.target.value)},children:et.map(({value:n,label:r})=>(0,le.jsx)(K.MenuItem,{value:n,children:r},n))})]})}),Gt=eo;var Oe=p(F(),1),De=p(N(),1),_t=p(ne(),1),ce=p(R(),1),Xt=(0,_t.makeStyles)()({stats:{marginLeft:"auto"},perf:{color:"#888",fontVariantNumeric:"tabular-nums"}});function ze(o){return o===void 0?"\u2013":`${Math.round(o)}ms`}var to=(0,De.observer)(function({model:e}){let{classes:t}=Xt(),{lastFetchMs:n,lastLayoutMs:r,lastGeometryMs:s}=e,a=n!==void 0||r!==void 0||s!==void 0;return e.showPerf&&a?(0,ce.jsxs)(Oe.Typography,{variant:"caption",className:t.perf,"data-testid":"graph-perf-stats",children:["fetch ",ze(n)," \xB7 layout ",ze(r)," \xB7 geom"," ",ze(s)]}):null}),no=(0,De.observer)(function({model:e}){let{classes:t}=Xt();return(0,ce.jsxs)("div",{className:t.stats,"data-testid":"graph-stats","data-node-count":e.nodeCount,"data-edge-count":e.edgeCount,"data-path-count":e.pathCount,"data-fetch-ms":e.lastFetchMs??"","data-layout-ms":e.lastLayoutMs??"","data-geometry-ms":e.lastGeometryMs??"","data-geometry-strokes":e.lastGeometryStrokeCount??"","data-recuts":e.recuts,children:[(0,ce.jsxs)(Oe.Typography,{variant:"body2",component:"span",children:[e.nodeCount," nodes, ",e.edgeCount," edges",e.pathCount>0?`, ${e.pathCount} paths`:""]})," ",(0,ce.jsx)(to,{model:e})]})}),At=no;var Y=p(F(),1),Nt=p(N(),1),Pt=p(ne(),1);var U=p(R(),1),oo=(0,Pt.makeStyles)()({formControl:{minWidth:150}}),ro=(0,Nt.observer)(function({model:e}){let{classes:t}=oo(),{graph:n}=e;return(0,U.jsxs)(Y.FormControl,{size:"small",className:t.formControl,children:[(0,U.jsx)(Y.InputLabel,{children:"Layout"}),(0,U.jsx)(Y.Select,{value:e.layoutMode,label:"Layout","data-testid":"graph-layout-select",onChange:r=>{e.switchLayout(r.target.value)},children:ot.map(({value:r,label:s,description:a,available:u})=>(0,U.jsx)(Y.MenuItem,{value:r,disabled:n?!u(n):!1,children:(0,U.jsx)(Y.Tooltip,{title:a,placement:"right",children:(0,U.jsx)("span",{children:s})})},r))})]})}),Tt=ro;var z=p(F(),1),Ht=p(N(),1),Yt=p(ne(),1),j=p(R(),1),so=(0,Yt.makeStyles)()({formControl:{minWidth:130,maxWidth:240}}),ao=(0,Ht.observer)(function({model:e}){let{classes:t}=so(),{repeatChoices:n}=e;if(e.layoutMode!=="walkrows"||n.length===0)return null;let r=new Set(n.map(s=>s.key));return(0,j.jsxs)(z.FormControl,{size:"small",className:t.formControl,children:[(0,j.jsx)(z.InputLabel,{children:"Repeat"}),(0,j.jsxs)(z.Select,{value:r.has(e.repeatKey)?e.repeatKey:"",label:"Repeat","data-testid":"graph-repeat-select",onChange:s=>{e.setRepeatKey(s.target.value)},children:[(0,j.jsx)(z.MenuItem,{value:"",children:(0,j.jsx)("em",{children:"Whole window"})}),n.map(({key:s,name:a,unit:u})=>(0,j.jsxs)(z.MenuItem,{value:s,children:[a," \xB7 ",u.toLocaleString()," bp unit"]},s))]})]})}),$t=ao;var Wt=p(qe(),1),Ft=p(Pe(),1);var zt=p(R(),1),Ot=(0,T.createSvgIcon)((0,zt.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM19 4h-3.5l-1-1h-5l-1 1H5v2h14z"}),"Delete");var Dt=p(R(),1),Vt=(0,T.createSvgIcon)((0,Dt.jsx)("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2m0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2"}),"MoreVert");var Zt=p(N(),1);var q=p(R(),1),io=(0,Zt.observer)(function({model:e}){let[t,n]=(0,Wt.useState)(!1);return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Ft.CascadingMenuButton,{size:"small",menuItems:[{type:"checkbox",label:"Linear layout",checked:e.linearLayout,onClick:()=>{e.setLinearLayout(!e.linearLayout),e.recomputeLayout()}},{type:"checkbox",label:"Show deletion edges",checked:e.showDeletionEdges,onClick:()=>{e.setShowDeletionEdges(!e.showDeletionEdges)}},{type:"checkbox",label:"Show timings",checked:e.showPerf,onClick:()=>{e.setShowPerf(!e.showPerf)}},{type:"divider"},{label:"Settings",icon:ct,onClick:()=>{n(!0)}},{type:"divider"},{label:"Return to import form",icon:Ot,onClick:()=>{e.clearGraph()}}],children:(0,q.jsx)(Vt,{})}),(0,q.jsx)(ut,{model:e,open:t,onClose:()=>{n(!1)}})]})}),Kt=io;var O=p(F(),1),Ut=p(N(),1),jt=p(ne(),1),J=p(R(),1),lo=(0,jt.makeStyles)()({formControl:{minWidth:130,maxWidth:220}}),co=(0,Ut.observer)(function({model:e}){let{classes:t}=lo(),{walkChoices:n}=e;if(n.length===0)return null;let r=new Set(n.map(s=>s.name));return(0,J.jsxs)(O.FormControl,{size:"small",className:t.formControl,children:[(0,J.jsx)(O.InputLabel,{children:"Walk"}),(0,J.jsxs)(O.Select,{value:r.has(e.highlightedPath)?e.highlightedPath:"",label:"Walk","data-testid":"graph-walk-select",onChange:s=>{e.setHighlightedPath(s.target.value)},children:[(0,J.jsx)(O.MenuItem,{value:"",children:(0,J.jsx)("em",{children:"None"})}),n.map(({name:s,label:a})=>(0,J.jsx)(O.MenuItem,{value:s,children:a},s))]})]})}),qt=co;var B=p(R(),1),uo=(0,Jt.makeStyles)()({toolbar:{display:"flex",alignItems:"center",gap:4,padding:"2px 4px",borderBottom:"1px solid #ddd"}}),mo=(0,Ve.observer)(function({model:e}){return(0,B.jsx)($.Typography,{variant:"body2",children:e.zoomPercent})}),po=(0,Ve.observer)(function({model:e}){let{classes:t}=uo();return(0,B.jsxs)("div",{className:t.toolbar,children:[(0,B.jsx)(Tt,{model:e}),(0,B.jsx)(Gt,{model:e}),(0,B.jsx)(qt,{model:e}),(0,B.jsx)($t,{model:e}),(0,B.jsx)($.Tooltip,{title:"Zoom in",children:(0,B.jsx)($.IconButton,{size:"small",onClick:()=>{e.zoom(1.5,e.width/2,e.canvasHeight/2)},children:(0,B.jsx)(kt,{})})}),(0,B.jsx)($.Tooltip,{title:"Zoom out",children:(0,B.jsx)($.IconButton,{size:"small",onClick:()=>{e.zoom(1/1.5,e.width/2,e.canvasHeight/2)},children:(0,B.jsx)(Rt,{})})}),(0,B.jsx)($.Tooltip,{title:"Zoom to fit",children:(0,B.jsx)($.IconButton,{size:"small",onClick:()=>{e.zoomToFit()},children:(0,B.jsx)(Ct,{})})}),(0,B.jsx)(mo,{model:e}),(0,B.jsx)(At,{model:e}),(0,B.jsx)(Kt,{model:e})]})}),Qt=po;var We=p(N(),1);var I=p(R(),1),go={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"visible",zIndex:3},tn="#2f8fd6",nn="#111",on="#9e9e9e",rn="#c62828",sn="#8e3fbf",D=12,bo={background:"rgba(255,255,255,0.82)",padding:"4px 6px",borderRadius:3,fontSize:11,lineHeight:"15px",whiteSpace:"nowrap"},fe={display:"flex",alignItems:"center",gap:5},we={width:18,height:D-4,borderRadius:2},yo={...we,display:"flex",justifyContent:"center"};function en({color:o}){return(0,I.jsx)("div",{style:yo,children:(0,I.jsx)("div",{style:{width:2,backgroundColor:o}})})}var an=(0,We.observer)(function({model:e}){let t=e.walkRowBars;if(!t)return null;let n=t.rows.flatMap(r=>r.call??[]);return(0,I.jsxs)("div",{style:bo,"data-testid":"graph-walk-rows-legend",children:[(0,I.jsxs)("div",{style:fe,children:[(0,I.jsx)("div",{style:{...we,backgroundColor:tn}}),(0,I.jsxs)("span",{children:["sequence ",t.reference.label," also carries"]})]}),(0,I.jsxs)("div",{style:fe,children:[(0,I.jsx)("div",{style:{...we,backgroundColor:sn}}),(0,I.jsx)("span",{children:"sequence it does not"})]}),n.some(r=>r.spanningReads!==0)?(0,I.jsxs)("div",{style:fe,children:[(0,I.jsx)(en,{color:nn}),(0,I.jsx)("span",{children:"allele length called for this walk"})]}):null,n.some(r=>r.spanningReads===0)?(0,I.jsxs)("div",{style:fe,children:[(0,I.jsx)(en,{color:on}),(0,I.jsx)("span",{children:"called with no read spanning it"})]}):null,n.some(r=>r.agrees===!1)?(0,I.jsxs)("div",{style:fe,children:[(0,I.jsx)("div",{style:we}),(0,I.jsxs)("span",{style:{color:rn},children:["walk and call over ",Math.round(.1*100),"% apart"]})]}):null]})});function Se(o){return`${(o/1e3).toFixed(o<1e4?1:0)} kb`}function ln(o,e){return e?` \u2248 ${Math.round(o/e)} units`:""}function xo(o,e,t,n){let r=o-e,s=r===0?"":` (${r>0?"+":"\u2212"}${Se(Math.abs(r))})`;return`${Se(o)}${ln(o,n)}${s}${t?"":" \xB7 partial walk"}`}function vo(o){let e=o.spanningReads===0?" \xB7 no spanning read":"";return` \xB7 called ${Se(o.bp)}${e}`}var Mo=3;function wo(o,e,t){if(t(e)-t(0)<Mo)return[];let n=[];for(let r=e;r<o;r+=e)n.push(r);return n}var So=(0,We.observer)(function({model:e}){let{walkRowBars:t}=e;if(!t)return null;let{scaleX:n,scaleY:r,translateX:s,translateY:a,width:u,canvasHeight:i}=e,c=b=>b*n+s,m=b=>b*20*r+a,{origin:l,unit:g,reference:M,rows:C}=t,w=Math.max(l+M.bp,e.loadedRegion?.end??0),L=(b,E,h,f="#333")=>{let y=c(E)+6,d=y+b.length*6.2<u;return(0,I.jsx)("text",{x:d?y:c(E)-6,y:h+4,fontSize:11,fontFamily:"sans-serif",fill:f,stroke:d?void 0:"white",strokeWidth:d?void 0:3,paintOrder:"stroke",textAnchor:d?"start":"end",children:b})};return(0,I.jsxs)("svg",{style:go,width:u,height:i,"data-testid":"graph-walk-rows",children:[L(`${Se(M.bp)}${ln(M.bp,g)}`,w,m(0)),C.map((b,E)=>{let h=m(E+1);if(h<-D||h>i+D)return null;let{call:f}=b;return(0,I.jsxs)("g",{"data-testid":"graph-walk-row",children:[b.runs.map(y=>(0,I.jsx)("rect",{x:c(l+y.start),y:h-D/2,width:Math.max(1,y.bp*n),height:D,fill:y.onReference?tn:sn},y.start)),g?wo(b.bp,g,y=>y*n).map(y=>(0,I.jsx)("line",{x1:c(l+y),x2:c(l+y),y1:h-D/2,y2:h+D/2,stroke:"white",strokeWidth:1},y)):null,f?(0,I.jsx)("rect",{"data-testid":"graph-walk-call",x:c(l+f.bp)-1,y:h-D/2-3,width:2,height:D+6,fill:f.spanningReads===0?on:nn}):null,L(`${xo(b.bp,M.bp,b.complete,g)}${f?vo(f):""}`,l+b.bp,h,f?.agrees===!1?rn:void 0)]},b.name)})]})}),cn=So;var Lo=26,Co=4e4,ko=8,Eo=8,Ro=5.7,Io=6,Bo=13,ge=3,Le=2;function Ee(o){return(o.length*Ro+Io+ge)/2}var Q=(Bo+ge)/2,Go=Ee("1 bp");function Ce(o,e,t){return{left:e-o,right:e+o,top:t-Q,bottom:t+Q}}function _o(o,e,t){return o.right>0&&o.left<e&&o.bottom>0&&o.top<t}function pn(o,e){return{left:6,right:6+o.length*6.2+8+ge,top:e-8-ge/2,bottom:e+8+ge/2}}function ke(o,e,t){return t<e?o:Math.min(Math.max(o,e),t)}function Xo(o,e){return o.left<e.right&&e.left<o.right&&o.top<e.bottom&&e.top<o.bottom}function Re(o){return o>=1e6?`${+(o/1e6).toFixed(1)} Mb`:o>=1e3?`${+(o/1e3).toFixed(1)} kb`:`${o} bp`}function un(o){return`${Re(o)} del`}function Ao(o,e,t,n){let r=o[0],s=o[o.length-1],a=(e.x-(r.x0+s.x1)/2)*t,u=(e.y-(r.y0+s.y1)/2)*n,i=Math.hypot(a,u);return i===0?{x:0,y:-1}:{x:a/i,y:u/i}}function No(o,e){return Math.abs(e.x)*(o.right-o.left)/2+Math.abs(e.y)*(o.bottom-o.top)/2}function Po(o,e){let t=(o.right-o.left)/2,n=(o.bottom-o.top)/2;return Math.min(e.x===0?1/0:t/Math.abs(e.x),e.y===0?1/0:n/Math.abs(e.y))}function To(o,e,t){let n=0;for(let r=1;r<o.length;r++){let s=o[r-1],a=o[r];n+=Math.hypot((a.x-s.x)*e,(a.y-s.y)*t)}return n}function Ho(o,e){let t=1/0,n=1/0,r=-1/0,s=-1/0;for(let a of o)for(let u of e[a]??[])t=Math.min(t,u.x),r=Math.max(r,u.x),n=Math.min(n,u.y),s=Math.max(s,u.y);return t===1/0?void 0:{minX:t,minY:n,maxX:r,maxY:s}}var dn=new WeakMap;function Yo(o,e){let t=dn.get(o);if(t?.nodeLengths===e)return t.order;let n=Object.entries(o).filter(([r,s])=>s.length>0&&e.has(r)).sort(([r],[s])=>e.get(s)-e.get(r));return dn.set(o,{nodeLengths:e,order:n}),n}var mn=new WeakMap;function $o(o,e,t,n){let{scaleX:r,scaleY:s}=t,a=mn.get(o);if(a?.deletions===e&&a.scaleX===r&&a.scaleY===s&&a.version===n)return a.arcs;let u=[];for(let i of[...e].sort((c,m)=>m.bp-c.bp)){let c=tt(o,i,t),m=c?Je(c):void 0;if(c&&m){let{minX:l,minY:g,maxX:M,maxY:C}=ye(c);u.push({deletion:i,curves:c,apex:m,extent:Math.max((M-l)*r,(C-g)*s)})}}return mn.set(o,{deletions:e,scaleX:r,scaleY:s,version:n,arcs:u}),u}function hn({nodePositions:o,nodeLengths:e,deletions:t,alleleDeletions:n,axis:r,translateX:s,translateY:a,width:u,height:i,reserved:c,version:m=0}){let{scaleX:l,scaleY:g}=r,M=[];for(let{deletion:f,curves:y,apex:d,extent:v}of $o(o,t,r,m))if(v>=Lo){let k=un(f.bp),S=Ee(k),_=Ce(S,0,0),X=d.x*l+s,G=d.y*g+a,ee=v>=S*2/Le,re=Ao(y,d,l,g),be=No(_,re)+Eo,me=ee?X:ke(X+re.x*be,S,u-S),pe=ee?G:ke(G+re.y*be,Q,i-Q),Ae=Math.hypot(me-X,pe-G),Ke;if(Ae>0){let Ne={x:(me-X)/Ae,y:(pe-G)/Ae},Ue=Po(_,Ne);Ke={arcX:X,arcY:G,labelX:me-Ne.x*Ue,labelY:pe-Ne.y*Ue}}M.push({label:{key:`del:${f.edgeIndex}`,text:k,x:me,y:pe,kind:"deletion",leader:Ke},box:Ce(S,me,pe)})}let C=new Set,w=[...n??[]].sort((f,y)=>y.bp-f.bp);for(let f of w){let y=Ho(f.nodeIds,o);if(!y)continue;let d=Math.max(y.minX*l+s,0),v=Math.min(y.maxX*l+s,u),k=Math.max(y.minY*g+a,0),S=Math.min(y.maxY*g+a,i);if(v<d||S<k)continue;let _=Math.max(v-d,S-k),X=un(f.bp),G=Ee(X);if(_>=G*2/Le){for(let be of f.nodeIds)C.add(be);let ee=ke((d+v)/2,G,u-G),re=ke((k+S)/2,Q,i-Q);M.push({label:{key:`alleledel:${f.nodeIds.join(",")}`,text:X,x:ee,y:re,kind:"deletion"},box:Ce(G,ee,re)})}}for(let[f,y]of Yo(o,e)){if(C.has(f))continue;let{x:d,y:v}=nt(y),k=v*g+a;if(k+Q<=0||k-Q>=i)continue;let S=To(y,l,g);if(S<Go*2/Le)continue;let _=Re(e.get(f)),X=Ee(_);if(S>=X*2/Le){let G=d*l+s;M.push({label:{key:`node:${f}`,text:_,x:G,y:k,kind:"node"},box:Ce(X,G,k)})}}let L=Math.max(ko,Math.floor(u*i/Co)),b=[...c??[]],E=[],h=0;for(let{label:f,box:y}of M)f.kind==="node"&&h>=L||_o(y,u,i)&&!b.some(d=>Xo(d,y))&&(b.push(y),E.push(f),f.kind==="node"&&h++);return E}var ue=p(Pn(),1),bn=p(Tn(),1),yn=p(gn(),1);var Be=class extends yn.Canvas2DRenderingBackendBase{constructor(){super(...arguments);this.transform=null;this.batch=null;this.nodeHighlights=new Map;this.highlightedEdge=null;this.highlightFactor=1}resize(t,n){(0,bn.syncCanvasSize)(this.ctx.canvas,t,n)}uploadGeometry(t){this.batch=t,this.highlightedEdge=null}setNodeHighlights(t){this.nodeHighlights=t}setEdgeHighlight(t,n){this.highlightedEdge=t,this.highlightFactor=n}updateTransform(t){this.transform=t}render(t){if(!this.transform)return;let r=this.ctx,{width:s,height:a}=r.canvas;r.fillStyle=(0,ue.normalizedRgbToCssRgba)([t[0],t[1],t[2]],t[3]),r.fillRect(0,0,s,a);let u=this.batch;u&&(r.lineCap="round",r.lineJoin="round",this.renderEdges(u),this.renderNodes(u),this.renderArrows(u))}renderEdges(t){let n=this.transform,r=this.ctx,s=this.highlightedEdge===null?void 0:t.edgeCurveRuns.get(this.highlightedEdge);for(let{color:a,items:u}of Fe(t.edgeCurves,(i,c)=>({color:Ie(s,c)?ve(i.color,this.highlightFactor):i.color,weight:i.thickness,last:Ie(s,c)}))){r.strokeStyle=(0,ue.abgrToCssRgba)(a),r.lineWidth=u[0].thickness*2*n.dpr,r.beginPath();for(let i of u){let c=i.curves[0];r.moveTo(c.x0*n.scaleX+n.translateX,c.y0*n.scaleY+n.translateY);for(let m of i.curves)r.bezierCurveTo(m.cx0*n.scaleX+n.translateX,m.cy0*n.scaleY+n.translateY,m.cx1*n.scaleX+n.translateX,m.cy1*n.scaleY+n.translateY,m.x1*n.scaleX+n.translateX,m.y1*n.scaleY+n.translateY)}r.stroke()}}renderNodes(t){let n=this.transform,r=this.ctx,s=new Map;for(let[a,u]of this.nodeHighlights){let i=t.nodeStrokeRuns.get(a);if(i)for(let c=i.start;c<i.start+i.count;c++)s.set(c,u)}for(let{color:a,items:u}of Fe(t.nodeStrokes,(i,c)=>{let m=s.get(c);return{color:m===void 0?i.color:ve(i.color,m),weight:i.thickness,last:m!==void 0}})){r.strokeStyle=(0,ue.abgrToCssRgba)(a),r.lineWidth=u[0].thickness*2*n.dpr,r.beginPath();for(let i of u){let c=i.points[0];r.moveTo(c.x*n.scaleX+n.translateX,c.y*n.scaleY+n.translateY);for(let m=1,l=i.points.length;m<l;m++){let g=i.points[m];r.lineTo(g.x*n.scaleX+n.translateX,g.y*n.scaleY+n.translateY)}}r.stroke()}}renderArrows(t){let n=this.transform,r=this.ctx,s=this.highlightedEdge===null?void 0:t.arrowRuns.get(this.highlightedEdge);for(let{color:a,items:u}of Fe(t.arrows,(i,c)=>({color:Ie(s,c)?ve(i.color,this.highlightFactor):i.color,weight:0,last:Ie(s,c)}))){r.fillStyle=(0,ue.abgrToCssRgba)(a),r.beginPath();for(let i of u){let c=i.x*n.scaleX+n.translateX,m=i.y*n.scaleY+n.translateY,l=i.size*n.dpr;r.moveTo(c,m),r.lineTo(c-Math.cos(i.angle-.5)*l,m-Math.sin(i.angle-.5)*l),r.lineTo(c-Math.cos(i.angle+.5)*l,m-Math.sin(i.angle+.5)*l),r.closePath()}r.fill()}}dispose(){super.dispose(),this.batch=null,this.nodeHighlights=new Map,this.highlightedEdge=null}};function Ie(o,e){return o!==void 0&&e>=o.start&&e<o.start+o.count}function Fe(o,e){let t=new Map,n=new Map;for(let r=0,s=o.length;r<s;r++){let a=o[r],{color:u,weight:i,last:c}=e(a,r),m=c?n:t,l=`${u}:${i}`,g=m.get(l);g?g.items.push(a):m.set(l,{color:u,items:[a]})}return[...t.values(),...n.values()]}function xn(o){return Promise.resolve(new Be(o))}var zo=50;function vn(o,e){return e>0?Math.max(1,o/e):zo}function Oo(o){let e=new Set,t=1/0,n=-1/0;for(let r of o)e.add(r.minY),t=Math.min(t,r.minY),n=Math.max(n,r.minY);return e.size>1?(n-t)/(e.size-1):void 0}function Do(o,e,t){let n=vn(e,o.length);return{x:n,y:t>0?vn(t,o.length):Oo(o)??n}}function Mn(o,e,t,n){return o===void 0?Do(e,t,n):typeof o=="number"?{x:o,y:o}:o}function Vo(o,e,t){let n=o.get(e);n||(n=new Map,o.set(e,n));let r=n.get(t);return r||(r=[],n.set(t,r)),r}function wn(o,e,t,n,r,s,a){let u=Math.floor(t/e.x),i=Math.floor(r/e.x),c=Math.floor(n/e.y),m=Math.floor(s/e.y);for(let l=u;l<=i;l++)for(let g=c;g<=m;g++)Vo(o,l,g).push(a)}function Sn(o,e,t,n,r,s){let a=Math.floor((t-r)/e.x),u=Math.floor((t+r)/e.x),i=Math.floor((n-s)/e.y),c=Math.floor((n+s)/e.y),m=[],l=new Set;for(let g=a;g<=u;g++){let M=o.get(g);if(M)for(let C=i;C<=c;C++){let w=M.get(C);if(w)for(let L of w)l.has(L)||(l.add(L),m.push(L))}}return m}var Ge=class{constructor(e,t){this.cells=new Map;let n=[],r=0,s=0;for(let[a,u]of Object.entries(e))for(let i=0;i<u.length-1;i++){let c=u[i],m=u[i+1],l=Math.min(c.x,m.x),g=Math.min(c.y,m.y),M=Math.max(c.x,m.x),C=Math.max(c.y,m.y);r+=M-l,s+=C-g,n.push({entry:{nodeId:a,segmentIdx:i},minX:l,minY:g,maxX:M,maxY:C})}this.cellSize=Mn(t,n,r,s);for(let a of n)wn(this.cells,this.cellSize,a.minX,a.minY,a.maxX,a.maxY,a.entry)}query(e,t,n,r=n){return Sn(this.cells,this.cellSize,e,t,n,r)}},_e=class{constructor(e,t,n,r,s,a,u=0){this.cells=new Map;this.edgeCurves=rt(e,t,r,a,u);let i=[],c=0,m=0;for(let l=0;l<t.edges.length;l++){let g=t.edges[l],M=e[g.from],C=e[g.to],w=this.edgeCurves.get(l);if(M?.length&&C?.length&&w){let{minX:L,minY:b,maxX:E,maxY:h}=ye(w),f=g.pathIds?.length??0;if(n&&f>0){let y=0,d=0;for(let v of xe(M,C,f,r))y=Math.max(y,Math.abs(v.x)),d=Math.max(d,Math.abs(v.y));L-=y,b-=d,E+=y,h+=d}c+=E-L,m+=h-b,i.push({ei:l,minX:L,minY:b,maxX:E,maxY:h})}}this.cellSize=Mn(s,i,c,m);for(let l of i)wn(this.cells,this.cellSize,l.minX,l.minY,l.maxX,l.maxY,l.ei)}getCurves(e){return this.edgeCurves.get(e)}query(e,t,n,r=n){return Sn(this.cells,this.cellSize,e,t,n,r)}};function En(o,e,t,n,r,s){let a=r-t,u=s-n,i=a*a+u*u;if(i===0)return Math.hypot(o-t,e-n);let c=Math.max(0,Math.min(1,((o-t)*a+(e-n)*u)/i));return Math.hypot(o-(t+c*a),e-(n+c*u))}function Wo(o,e,t,n,r,s,a,u,i,c){let m=1/0,l=20,g=t,M=n;for(let C=1;C<=l;C++){let w=C/l,L=1-w,b=L*L*L*t+3*L*L*w*r+3*L*w*w*a+w*w*w*i,E=L*L*L*n+3*L*L*w*s+3*L*w*w*u+w*w*w*c;m=Math.min(m,En(o,e,g,M,b,E)),g=b,M=E}return m}function Fo(o,e,t){return Wo(o,e,t.x0,t.y0,t.cx0,t.cy0,t.cx1,t.cy1,t.x1,t.y1)}function Ln(o,e,t,n=1){let r=1/0;for(let s of t){let a=Fo(o,e,n===1?s:{x0:s.x0,y0:s.y0*n,cx0:s.cx0,cy0:s.cy0*n,cx1:s.cx1,cy1:s.cy1*n,x1:s.x1,y1:s.y1*n});a<r&&(r=a)}return r}var Cn=new WeakMap;function Zo(o,e){let t=Cn.get(o);if(t?.version===e)return t.index;let n=new Ge(o);return Cn.set(o,{version:e,index:n}),n}var kn=new WeakMap;function Ko(o,e,t,n,r,s){let a=kn.get(o);if(a?.graph===e&&a.drawPaths===t&&a.scaleX===n.scaleX&&a.scaleY===n.scaleY&&a.version===r&&a.deletions===s)return a.index;let u=new _e(o,e,t,n,void 0,s,r);return kn.set(o,{graph:e,drawPaths:t,scaleX:n.scaleX,scaleY:n.scaleY,version:r,index:u,deletions:s}),u}var Uo=5;function Rn(o,e,t,n,r=0,s){let a=Te(n),u=Zo(o,r),i=M=>Math.max(Uo,M)/n.scaleX,c=i(s?.maxHalfWidthPx??0),m=u.query(e,t,c,c/a),l=null,g=1/0;for(let{nodeId:M,segmentIdx:C}of m){let w=o[M],L=En(e,t*a,w[C].x,w[C].y*a,w[C+1].x,w[C+1].y*a);L<g&&L<i(s?.halfWidthPx(M)??0)&&(g=L,l=M)}return l}function In(o,e,t,n,r,s,a=0,u,i){let c=Te(r),m=10/r.scaleX,l=Ko(o,e,s,r,a,u),g=l.query(t,n,m,m/c),M=null,C=m;for(let w of g){let L=e.edges[w],b=o[L.from],E=o[L.to];if(!b?.length||!E?.length||i?.has(w))continue;let h=L.pathIds?.length??0,f=l.getCurves(w);if(!f)continue;let y;if(!s||h===0)y=Ln(t,n*c,f,c);else{let d=1/0;for(let v of xe(b,E,h,r)){let k=v.x===0&&v.y===0?f:Qe(f,v.x,v.y),S=Ln(t,n*c,k,c);S<d&&(d=S)}y=d}y<C&&(C=y,M=w)}return M}function Bn(o){let e=o.deltaY*(o.deltaMode===1?40:o.deltaMode===2?800:1),t=(o.ctrlKey?10:1)*e/100;return 1.1**-Math.max(-2,Math.min(2,t))}var x=p(R(),1),Gn={position:"absolute",bottom:8,right:8,background:"rgba(0,0,0,0.75)",color:"white",padding:"4px 8px",borderRadius:4,fontSize:12,pointerEvents:"none"},jo={position:"relative"},qo={position:"relative",lineHeight:0},Jo={position:"absolute",inset:0,zIndex:10,lineHeight:"normal",pointerEvents:"none"},Qo={position:"absolute",left:6,transform:"translateY(-50%)",background:"rgba(255,255,255,0.82)",padding:"0 4px",borderRadius:3,fontSize:11,lineHeight:"16px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:4},er=(0,W.observer)(function({model:e}){let t=e.drawnRowLabels;return(0,x.jsx)(x.Fragment,{children:t.map(({label:n,y:r})=>{let s=r*e.scaleY+e.translateY;return s>=0&&s<=e.canvasHeight?(0,x.jsx)("div",{"data-testid":"graph-row-label",style:{...Qo,top:s},children:n},r):null})})}),tr={position:"absolute",top:6,right:6,display:"flex",flexDirection:"column",alignItems:"flex-end",gap:4,pointerEvents:"none",zIndex:4},Ze={background:"rgba(255,255,255,0.82)",padding:"4px 6px",borderRadius:3,fontSize:11,lineHeight:"15px",whiteSpace:"nowrap"},nr={display:"flex",alignItems:"center",gap:5},or={width:18,height:3,borderRadius:2},rr=(0,W.observer)(function({model:e}){let{pathLegend:t}=e;return t.length>0?(0,x.jsx)("div",{style:Ze,"data-testid":"graph-path-legend",children:t.map(({name:n,label:r,color:s})=>(0,x.jsxs)("div",{style:nr,children:[(0,x.jsx)("div",{style:{...or,backgroundColor:s}}),(0,x.jsx)("span",{children:r})]},n))}):null}),sr=(0,W.observer)(function({model:e}){let t=e.walkHighlight;if(!t)return null;let n=e.walkChoices.find(s=>s.name===t.name)?.label??t.name,r=t.referenceBp===void 0?"":t.bp===t.referenceBp?", the reference length":`, ${t.bp>t.referenceBp?"+":"\u2212"}${Math.abs(t.bp-t.referenceBp).toLocaleString()} bp against the reference`;return(0,x.jsxs)("div",{style:Ze,"data-testid":"graph-walk-readout",children:[(0,x.jsx)("strong",{children:n}),": ",t.steps.toLocaleString()," steps,"," ",t.bp.toLocaleString()," bp",r]})}),ar={minWidth:90,height:8,borderRadius:2,background:`linear-gradient(to right, ${Array.from({length:7},(o,e)=>`hsl(${e/6*st}, 70%, 50%) ${e/6*100}%`).join(", ")})`},ir={display:"flex",justifyContent:"space-between",gap:8},lr=(0,W.observer)(function({model:e}){let t=e.referenceRampDomain;return t?(0,x.jsxs)("div",{style:Ze,"data-testid":"graph-ramp-legend",children:[(0,x.jsx)("div",{style:ar}),(0,x.jsxs)("div",{style:ir,children:[(0,x.jsx)("span",{children:t.start.toLocaleString()}),(0,x.jsxs)("span",{children:["(",Re(t.end-t.start),")"]}),(0,x.jsx)("span",{children:t.end.toLocaleString()})]})]}):null}),Xn={position:"absolute",transform:"translate(-50%, -50%)",background:"rgba(255,255,255,0.78)",padding:"0 3px",borderRadius:3,fontSize:10,lineHeight:"13px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:3},cr={...Xn,color:"#18181c",fontWeight:600},ur={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"visible",zIndex:2},dr=(0,W.observer)(function({model:e}){let{nodePositions:t}=e;if(!t)return null;let n=hn({nodePositions:t,nodeLengths:e.nodeLengths,deletions:e.showDeletionEdges?e.deletions:[],alleleDeletions:e.alleleDeletions,axis:e.axisScale,translateX:e.translateX,translateY:e.translateY,width:e.width,height:e.canvasHeight,reserved:e.drawnRowLabels.map(({label:s,y:a})=>pn(s,a*e.scaleY+e.translateY)),version:e.positionsVersion}),r=n.flatMap(({key:s,leader:a})=>a?[{key:s,...a}]:[]);return(0,x.jsxs)(x.Fragment,{children:[r.length>0?(0,x.jsx)("svg",{style:ur,width:e.width,height:e.canvasHeight,children:r.map(({key:s,arcX:a,arcY:u,labelX:i,labelY:c})=>(0,x.jsx)("line",{"data-testid":"graph-label-leader",x1:a,y1:u,x2:i,y2:c,stroke:"#18181c",strokeWidth:1},s))}):null,n.map(({key:s,text:a,x:u,y:i,kind:c})=>(0,x.jsx)("div",{"data-testid":"graph-size-label",style:{...c==="deletion"?cr:Xn,left:u,top:i},children:a},s))]})}),mr=(0,W.observer)(function({model:e}){let t=e.hoveredNode?e.nodeById?.get(e.hoveredNode):null,n=e.hoveredEdge!==null&&e.graph?e.graph.edges[e.hoveredEdge]:null,r=t?at(t):void 0,s=e.hoveredEdge===null?void 0:e.deletions.find(a=>a.edgeIndex===e.hoveredEdge);return(0,x.jsxs)(x.Fragment,{children:[t?(0,x.jsxs)("div",{style:Gn,children:[(0,x.jsx)("strong",{children:t.name})," \u2014 length:"," ",t.length.toLocaleString(),", depth:"," ",t.depth.toFixed(1),r?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)("br",{}),r.sample," ",it(r)," (rank"," ",t.stable?.rank,")"]}):null]}):null,n?(0,x.jsx)("div",{style:Gn,children:s?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)("strong",{children:"Deletion"})," ",s.bp.toLocaleString()," bp",(0,x.jsx)("br",{}),s.refName,":",s.start.toLocaleString(),"-",s.end.toLocaleString()]}):(0,x.jsxs)(x.Fragment,{children:["Edge: ",n.from," \u2192 ",n.to]})}):null]})}),pr=(0,W.observer)(function({model:e,nodeId:t,top:n,left:r,onClose:s}){let{own:a,reference:u,highlight:i}=e.nodeLaunchTargets(t);return(0,x.jsx)(de.Menu,{open:!0,anchorReference:"anchorPosition",anchorPosition:{top:n,left:r},onClose:()=>{s()},onMenuItemClick:c=>{c()},menuItems:[{label:"Node details",icon:ht,onClick:()=>{e.showNodeDetails(t)}},...lt({own:a,reference:u,highlight:i,onShowLinear:c=>{e.showInLinearView(c)},onHighlight:e.canHighlightInLinearView?c=>{e.highlightInLinearView(c)}:void 0})]})}),hr=(0,W.observer)(function({model:e,toolbar:t=!0}){let{canvasRef:n,canvas:r}=(0,_n.useRenderingBackend)(xn,e),s=(0,V.useRef)({x:0,y:0}),a=(0,V.useRef)(!1),u=(0,V.useRef)({frame:0,pan:null,hover:null});(0,V.useEffect)(()=>()=>{cancelAnimationFrame(u.current.frame)},[]);let[i,c]=(0,V.useState)(void 0);(0,V.useEffect)(()=>{if(r){let k=function(S){if(e.hostPlacesX)return;e.host&&S.stopPropagation(),S.preventDefault();let _=v.getBoundingClientRect();e.zoom(Bn(S),S.clientX-_.left,S.clientY-_.top)};var d=k;let v=r;return v.addEventListener("wheel",k,{passive:!1}),()=>{v.removeEventListener("wheel",k)}}},[r,e]);function m(d,v){return{x:(d-e.translateX)/e.scaleX,y:(v-e.translateY)/e.scaleY}}function l(d){let v=d.currentTarget.getBoundingClientRect();return m(d.clientX-v.left,d.clientY-v.top)}function g(d,v){let{nodePositions:k}=e;return k?Rn(k,d,v,e.axisScale,e.positionsVersion,e.nodeInk):null}function M(d){if(d.button===0){if(a.current=!1,e.hostPlacesX)return;e.host&&d.stopPropagation();let{x:v,y:k}=l(d),S=g(v,k);S?e.setDraggingNode(S):e.setPanning(!0),s.current={x:d.clientX,y:d.clientY}}}function C(){let d=u.current;if(d.frame=0,d.pan&&(e.setTransform(e.scale,e.translateX+d.pan.dx,e.translateY+d.pan.dy),d.pan=null),d.hover&&e.nodePositions&&e.graph){let{x:v,y:k}=m(d.hover.x,d.hover.y);d.hover=null;let S=g(v,k);e.setHoveredNode(S),e.setHoveredEdge(S?null:In(e.nodePositions,e.graph,v,k,e.axisScale,e.effectiveDrawPaths,e.positionsVersion,e.deletionEdgeIndexes,e.hiddenEdgeIndexes))}}function w(){u.current.frame||(u.current.frame=requestAnimationFrame(C))}function L(){let d=u.current;cancelAnimationFrame(d.frame),d.frame=0,d.pan=null,d.hover=null}function b(d){let v=d.clientX-s.current.x,k=d.clientY-s.current.y;s.current={x:d.clientX,y:d.clientY},(Math.abs(v)>1||Math.abs(k)>1)&&(a.current=!0);let S=u.current;if(e.draggingNode)e.moveNode(e.draggingNode,v/e.scaleX,k/e.scaleY);else if(e.isPanning)S.pan={dx:(S.pan?.dx??0)+v,dy:(S.pan?.dy??0)+k},w();else{let _=d.currentTarget.getBoundingClientRect();S.hover={x:d.clientX-_.left,y:d.clientY-_.top},w()}}function E(){e.stopDragging()}function h(){L(),e.stopDragging(),e.setHoveredNode(null),e.setHoveredEdge(null)}function f(d){let{x:v,y:k}=l(d),S=g(v,k);S&&(d.preventDefault(),c({nodeId:S,top:d.clientY,left:d.clientX}))}function y(d){if(!a.current){let{x:v,y:k}=l(d),S=g(v,k);e.setSelectedNode(S),S&&e.showNodeDetails(S)}}return(0,x.jsxs)("div",{style:jo,children:[t?(0,x.jsx)(Qt,{model:e}):null,(0,x.jsxs)("div",{style:qo,children:[(0,x.jsx)("canvas",{ref:n,"data-testid":"graph-genome-canvas",style:{width:e.width,height:e.canvasHeight,cursor:e.isPanning||e.draggingNode?"grabbing":"grab",display:"block"},onMouseDown:M,onMouseMove:b,onMouseUp:E,onMouseLeave:h,onClick:y,onContextMenu:f}),(0,x.jsx)(er,{model:e}),(0,x.jsx)(dr,{model:e}),(0,x.jsx)(bt,{model:e}),(0,x.jsx)(St,{model:e}),(0,x.jsx)(Mt,{model:e}),(0,x.jsx)(cn,{model:e}),(0,x.jsxs)("div",{style:tr,children:[(0,x.jsx)(lr,{model:e}),(0,x.jsx)(rr,{model:e}),(0,x.jsx)(an,{model:e}),(0,x.jsx)(sr,{model:e})]}),(0,x.jsx)("div",{style:Jo,children:(0,x.jsx)(de.LoadingOverlay,{isVisible:e.isLoading,immediate:!e.layoutResult,statusMessage:e.statusMessage,onCancel:e.canCancelLoad?()=>{e.cancelLoad()}:void 0})})]}),(0,x.jsx)(mr,{model:e}),i?(0,x.jsx)(pr,{model:e,nodeId:i.nodeId,top:i.top,left:i.left,onClose:()=>{c(void 0)}}):null,e.error?(0,x.jsx)(de.ErrorBanner,{error:e.error,onReset:e.canRetryLoad?()=>{e.retryLoad()}:void 0}):null]})}),Vs=hr;var Xe=p(Pe(),1),H=p(F(),1),An=p(N(),1),Nn=p(ne(),1),P=p(R(),1),fr=(0,Nn.makeStyles)()({paper:{padding:16,margin:8,maxWidth:560,marginInline:"auto",display:"flex",flexDirection:"column",gap:12},row:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8}}),gr=(0,An.observer)(function({model:e}){let{classes:t}=fr();return e.isLoading?(0,P.jsxs)(H.Paper,{className:t.paper,"data-testid":"graph-genome-loading",children:[(0,P.jsxs)("div",{className:t.row,children:[(0,P.jsx)(Xe.LoadingEllipses,{variant:"h6",message:e.statusMessage}),(0,P.jsx)(H.Button,{size:"small","data-testid":"graph-genome-cancel",onClick:()=>{e.cancelLoad()},children:"Cancel"})]}),(0,P.jsx)(H.LinearProgress,{variant:"indeterminate"})]}):e.error?(0,P.jsx)(H.Paper,{className:t.paper,children:(0,P.jsx)(Xe.ErrorBanner,{error:e.error,onReset:()=>{e.retryLoad()}})}):(0,P.jsx)(H.Paper,{className:t.paper,"data-testid":"graph-genome-load-canceled",children:(0,P.jsxs)("div",{className:t.row,children:[(0,P.jsx)(H.Typography,{variant:"h6",children:"Loading canceled"}),(0,P.jsx)(H.Button,{variant:"contained",size:"small","data-testid":"graph-genome-retry",onClick:()=>{e.retryLoad()},children:"Retry"})]})})}),Fs=gr;export{Vs as a,Fs as b};
4
- //# sourceMappingURL=chunk-SDTCVLC3.js.map
4
+ //# sourceMappingURL=chunk-RSAY56Y4.js.map
@@ -1,3 +1,3 @@
1
- import{a as ir}from"./chunks/chunk-KWAXLUPQ.js";import{a as D}from"./chunks/chunk-FCWXYIFC.js";import{a as ht}from"./chunks/chunk-D7XFR2IV.js";import{a as re}from"./chunks/chunk-J4OLMLS5.js";import{A as me,B as Bt,C as Ft,G as Ot,H as $t,I as _t,J as le,K as jt,L as zt,M as Wt,N as he,O as K,P as Yt,R as Xt,a as lt,c as ur,d as St,e as U,g as Lt,h as se,i as de,o as Rt,q as Gt,r as Nt,s as Tt,t as ve,v as pe,w as ge,x as Be,y as Ct,z as vt}from"./chunks/chunk-A4ZWFDQY.js";import{c as xt}from"./chunks/chunk-ZNGDWZ6Z.js";import{D as Fe,E as Ve,F as pr,b as N,d as bt,f as ft,g as yt,i as ie,j as Ce,l as wt,m as kt,n as Mt,o as ce,p as ue,q as At,r as It,s as Pt,u as Vt,v as Et,w as Ht,x as Dt}from"./chunks/chunk-OP7IRVG6.js";import"./chunks/chunk-F4C3BEPV.js";import{a as X,b as sr,c as dr,d as cr,e as ae}from"./chunks/chunk-XEJ47DLD.js";import{a as v,b as y}from"./chunks/chunk-FY3BTKY4.js";var Kt=v((xa,Ut)=>{Ut.exports=JBrowseExports["@jbrowse/core/Plugin"]});var fe=v((Ra,Jt)=>{Jt.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var B=v((Ma,Zt)=>{Zt.exports=JBrowseExports["@jbrowse/core/configuration"]});var rn=v((Aa,on)=>{on.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var q=v((Ia,an)=>{an.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var ln=v((Va,mn)=>{mn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var bn=v((Ea,hn)=>{hn.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var yn=v((Ha,fn)=>{fn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var kn=v((Da,wn)=>{wn.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var $e=v((Oa,xn)=>{xn.exports=JBrowseExports.mobx});var To=v((hs,No)=>{No.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"]});var Io=v((bs,Ao)=>{Ao.exports=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"]});var Fo=v((ks,Bo)=>{Bo.exports=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"]});var rr=y(Kt(),1),ar=y(re(),1);var be=y(X(),1),qt=(0,lt.createSvgIcon)([(0,be.jsx)("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),(0,be.jsx)("circle",{cx:"14.8",cy:"18",r:"2"},"1"),(0,be.jsx)("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var nn=y(fe(),1);var Qt=y(B(),1),en=y(D(),1),gr=(0,Qt.ConfigurationSchema)("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.gbz.db",locationType:"UriLocation"}},haplotypeIndexLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},subgraphSnarls:{type:"stringEnum",model:en.types.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:"contained"},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:1e3,advanced:!0},nodeLimit:{type:"number",defaultValue:1e5,advanced:!0}},{explicitlyTyped:!0,preProcessSnapshot:e=>e.uri?{...e,gbzDbLocation:{uri:e.uri,baseUri:e.baseUri}}:e}),tn=gr;function Ee(e){e.addAdapterType(()=>new nn.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:tn,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-BLSUE5LT.js").then(t=>t.default)}))}var sn=y(rn(),1),dn=y(q(),1);function mr(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var J=class extends dn.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:o,region:r,sessionId:i,opts:a,signal:d}=n,{dataAdapter:g}=await(0,sn.getAdapter)(this.pluginManager,i,o);return mr(g)?g.getSubgraph(r,{...a,signal:d}):(console.warn(`[GetSubgraph] ${g.constructor.name} does not implement getSubgraph`),"")}};var cn=y(ae(),1),un=y(q(),1),pn=y(D(),1),lr=(0,cn.lazy)(()=>import("./chunks/AddTrackWorkflow-TPCKXM2H.js"));function He(e){e.addAddTrackWorkflowType(()=>new un.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:lr,stateModel:pn.types.model({})}))}var gn=y(q(),1);var De;function Oe(){return De??=import("./chunks/bandage-layout-FIOZ7B3E.js").then(e=>e.default()).catch(e=>{throw De=void 0,e}),De}var Z=class extends gn.RpcMethodType{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(n){let{graph:o,options:r,statusCallback:i}=n;i?.("Loading layout engine");let a=await Oe();i?.("Computing layout");let d=performance.now(),g=a.computeLayout(o,r),l=performance.now()-d;return{result:g,duration:l}}};var Ro=y(ae(),1),Mo=y(ln(),1),Go=y(bn(),1);var $=y(B(),1),wo=y(yn(),1),ko=y(cr(),1),G=y(re(),1),xo=y(ir(),1),s=y(D(),1),So=y(kn(),1),Lo=y(ur(),1),T=y($e(),1);var hr=.9,_e=2,br=1e3;function Sn(e,t,n,o=r=>r){let r=new Map(e.nodes.map(a=>[a.name,a])),i=[];for(let a of t){let d=[],g,l=[],x=[];for(let b of se(a)){let f=r.get(b),h=f&&n[f.id];if(!(!f||!h?.length)){if(N(f)&&(f.stable.start<a.start||f.stable.start>=a.end)){x.push(h[Math.floor(h.length/2)]);continue}l.push(f.id),d.push(de(h.length===1?[h[0],h[0]]:h));for(let w of h)(!g||w.y<g.y)&&(g=w)}}if(!g)continue;let M=x.length?{x:x.reduce((b,f)=>b+f.x,0)/x.length,y:x.reduce((b,f)=>b+f.y,0)/x.length}:g,p=new Map;for(let b of a.routes??[])for(let f of new Set(b.steps))p.set(f,(p.get(f)??0)+1);let u=[];for(let b of a.routes??[]){if(a.longestAlleleLength<br)break;if(b.steps.length===0)continue;let f=Math.min(...b.steps.map(c=>p.get(c))),h,w=-1;for(let c of b.steps)if(p.get(c)===f)for(let m of n[c]??[]){let k=Math.hypot(m.x-M.x,m.y-M.y);k>w&&(w=k,h=m)}h&&u.push({route:b,at:h,text:fr(b,o)})}i.push({bubble:a,...U(a),path:d.join(""),top:g,members:l.length,nodeIds:l,whole:l.length>=hr*e.nodes.length,routes:u})}return i}function fr(e,t){let n=[...new Set(e.walks.map(t))].sort(),o=n.slice(0,_e).join(", "),r=n.length>_e?` +${n.length-_e}`:"";return`${o}${r} \xB7 ${St(e.bp)}`}function Ln(e){if(!e.nodes.some(N))return[];let t=new Map(e.nodes.map(p=>[p.id,p])),n=Rt(e),o=new Map(n.map((p,u)=>[p,u])),r=new Int32Array(n.length+1),i=new Map,a=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;a.add(`${p.from}>${p.to}`).add(`${p.to}>${p.from}`);let[f,h]=u<b?[u,b]:[b,u];r[f+1]++,r[h]--;let[w,c]=u<b?[p.from,p.to]:[p.to,p.from];(i.get(w)??i.set(w,new Set).get(w)).add(c)}for(let p=1;p<r.length;p++)r[p]+=r[p-1];let d=e.nodes.filter(N).sort((p,u)=>p.stable.start-u.stable.start),g=new Set([d[0].id,d.at(-1).id]),l=d.map(p=>[p,o.get(p.id)]).filter(([p,u])=>g.has(p.id)||r[u]===0).sort(([p,u],[b,f])=>u-f||p.stable.start-b.stable.start),x=e.paths?.map(p=>{let u=new Map;return p.nodeIds.forEach((b,f)=>{u.has(b)||u.set(b,f)}),u}),M=[];for(let p=0;p+1<l.length;p++){let[u,b]=l[p],[f,h]=l[p+1],w=n.slice(b+1,h);if(w.length===0)continue;let c=new Map([[u.id,{min:0,max:0,n:1}]]);for(let P of[u.id,...w]){let C=c.get(P);if(C)for(let E of i.get(P)??[]){if(o.get(E)>h)continue;let mt=E===f.id?0:t.get(E).length,Pe=c.get(E);c.set(E,{min:Math.min(Pe?.min??1/0,C.min+mt),max:Math.max(Pe?.max??-1/0,C.max+mt),n:Math.min(xt,C.n+(Pe?.n??0))})}}let m=x&&yr(e,t,x,u.id,f.id),k=m?.n?m:void 0,L=k??c.get(f.id)??{min:0,max:0,n:0},R=m!==void 0&&m.left>0,S=u.stable.start+u.length,A=f.stable.start,I=[u.id,...w.filter(P=>N(t.get(P))),f.id],V=I.some((P,C)=>C>0&&!a.has(`${I[C-1]}>${P}`)),W=V||R,O=V&&!k;M.push({refName:u.stable.refName,start:S,end:A,segmentCount:w.length+2,pathCount:L.n,inversion:!1,shortestAlleleLength:O?A-S:L.min,longestAlleleLength:O?A-S:L.max,segments:[u,...w.map(P=>t.get(P)),f].map(P=>P.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:W,routes:k?.routes})}return M}function yr(e,t,n,o,r){let i=new Map,a=1/0,d=-1/0,g=0;return e.paths.forEach((l,x)=>{let M=n[x].get(o),p=n[x].get(r);if(M===void 0||p===void 0){(M!==void 0||p!==void 0)&&g++;return}let u=l.nodeIds.slice(Math.min(M,p)+1,Math.max(M,p));p<M&&u.reverse();let b=0;for(let w of u)b+=t.get(w)?.length??0;let f=u.join(","),h=i.get(f)??{steps:u,bp:b,walks:[]};h.walks.push(l.name),i.set(f,h),a=Math.min(a,b),d=Math.max(d,b)}),i.size||g?{min:a,max:d,n:i.size,left:g,routes:[...i.values()]}:void 0}function Rn(e,t){let n=new Set(t),o=e.nodes.filter(a=>n.has(a.name)),r=new Set(o.map(a=>a.id)),i=e.paths?.map(a=>({...a,nodeIds:a.nodeIds.filter(d=>r.has(d))})).filter(a=>a.nodeIds.length>0);return{name:e.name,nodes:o,edges:e.edges.filter(a=>r.has(a.from)&&r.has(a.to)),...i?.length?{paths:i}:{},anchorPaths:e.anchorPaths,pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}var je=new Set(["Gff3TabixAdapter","Gff3Adapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),wr=/gene|refseq|gencode|ensembl|annotation/i;function Mn(e,t){if(t)return e.find(o=>o.trackId===t);let n=e.filter(o=>je.has(o.adapterType));return n.find(o=>wr.test(`${o.trackId} ${o.name??""}`))??n[0]}function F(e,t){return typeof e.get=="function"?e.get(t):e[t]}function Gn(e,t){F(e,"type")==="exon"&&t.push({start:F(e,"start"),end:F(e,"end")});let o=F(e,"subfeatures");for(let r of o??[])Gn(r,t)}function kr(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 Nn(e){let t=[];for(let n of e){let o=F(n,"gene_name")??F(n,"name")??F(n,"id"),r=F(n,"start"),i=F(n,"end");if(!o||!(i>r))continue;let a=[];Gn(n,a),t.push({name:o,refName:F(n,"refName"),start:r,end:i,strand:F(n,"strand")??0,exons:a.length?kr(a):[{start:r,end:i}]})}return t}function Tn(e){return e.split("#").at(-1)}function An(e,t,n){let o=new Map,r=new Map;for(let a of e.nodes)if(N(a)&&n[a.id]?.length){let{refName:d}=a.stable,g=r.get(d)??r.set(d,Tn(d)).get(d),l=o.get(g)??o.set(g,{nodes:[],reach:0}).get(g);l.nodes.push(a),l.reach=Math.max(l.reach,a.length)}for(let{nodes:a}of o.values())a.sort((d,g)=>d.stable.start-g.stable.start);let i=[];for(let a of t){let d=o.get(Tn(a.refName));if(!d)continue;let g=[],l,x=1/0,M=0,p=(a.start+a.end)/2,{nodes:u,reach:b}=d;for(let f=ft(u,a.start-b);f<u.length&&u[f].stable.start<a.end;f++){let h=u[f],w=h.stable.start,c=w+h.length;if(c<=a.start)continue;let m=n[h.id];M+=Math.min(c,a.end)-Math.max(w,a.start);for(let R of a.exons){let S=Math.max(R.start,w),A=Math.min(R.end,c);if(A<=S)continue;let I=ve(m,(S-w)/h.length,(A-w)/h.length);I.length===1&&I.push({...I[0]}),g.push(de(I))}let k=Math.min(Math.max(p,w),c),L=Math.abs(k-p);if(L<x){x=L;let[R]=ve(m,(k-w)/h.length,(k-w)/h.length);l=R}}l&&i.push({gene:a,exons:g.join(""),at:l,covered:M/(a.end-a.start)})}return i}function xr(e,t){let n=e.indexOf(":"),o=e.indexOf(":",n+1);if(n!==-1&&o!==-1){let r=e.slice(0,n),i=e.slice(n+1,o),a=e.slice(o+1);i==="i"||i==="f"?t[r]=+a:i==="Z"&&(t[r]=a)}}function Q(e){let t={};for(let n of e)xr(n,t);return t}function ze(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 In=62,Sr=60;function Lr(e){let t=[],n="+",o=0;function r(i){i>o&&t.push({id:e.slice(o,i),strand:n})}for(let i=0;i<e.length;i++){let a=e.charCodeAt(i);(a===In||a===Sr)&&(r(i),n=a===In?"+":"-",o=i+1)}return r(e.length),t}function We(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(Q(r))}else if(o.startsWith("S")){let[,r,...i]=o.split(" "),a,d,g,l=!1,x=i[0]??"*";/^\d+$/.test(x)?(a=+x,d=i[1]??"*",g=i.slice(2)):(l=!0,d=x,a=d==="*"?0:d.length,g=i.slice(1));let M=Q(g);l&&"LN"in M&&(a=+M.LN),t.nodes.push({id:r,length:a,sequence:d,tags:M})}else if(o.startsWith("E")){let[,,r,i,,,,,a,...d]=o.split(" ");r&&i&&t.links.push({source:r.slice(0,-1),target:i.slice(0,-1),strand1:r.at(-1),strand2:i.at(-1),cigar:a??"*",tags:Q(d)})}else if(o.startsWith("L")){let[,r,i,a,d,g,...l]=o.split(" ");r&&a&&d&&t.links.push({source:r,target:a,strand1:i,strand2:d,cigar:g??"*",tags:Q(l)})}else if(o.startsWith("W")){let[,r,i,a,d,g,l,...x]=o.split(" ");r&&i&&a&&d&&g&&l&&t.walks.push({sample:r,haplotype:+i,contig:a,start:d==="*"?-1:+d,end:g==="*"?-1:+g,segments:Lr(l),tags:Q(x)})}else if(o.startsWith("P")){let[,r,i,...a]=o.split(" ");r&&i&&t.paths.push({name:r,path:i,rest:a})}}return t}function Rr(e){let t=new Map,n=new Map;function o(i,a){t.has(i)||t.set(i,a)}function r(i,a){o(i,a),n.set(i,(n.get(i)??0)+1)}for(let i of e.links)o(i.source,i.strand1==="-"?"-":"+"),o(i.target,i.strand2==="-"?"-":"+");for(let i of e.paths)for(let a of i.path.split(","))r(a.slice(0,-1),a.endsWith("-")?"-":"+");for(let i of e.walks)for(let a of i.segments)r(a.id,a.strand==="-"?"-":"+");return{canonical:t,traversals:n}}function Mr(e){return[...e.paths.map(t=>({...ue(t.name),steps:t.path.split(",").map(n=>({id:n.slice(0,-1),strand:n.endsWith("-")?"-":"+"}))})),...e.walks.map(t=>({name:`${t.sample}#${t.haplotype}#${t.contig}`,start:t.start===-1?0:t.start,steps:t.segments.map(n=>({id:n.id,strand:n.strand==="-"?"-":"+"}))}))]}function Gr(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 ee=e=>typeof e=="number"&&e>0?e:void 0;function Nr({tags:e,length:t}){let n=ee(e.RC)??ee(e.FC)??ee(e.KC);return ee(e.dp)??ee(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function Tr(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:ze(e),samples:Gr(e)}}function Pn(e,t="Imported GFA"){let n=[],o=[],{canonical:r,traversals:i}=Rr(e),a=u=>`${u}${r.get(u)??"+"}`;for(let u of e.nodes){let b=Nr(u)??Math.max(i.get(u.id)??1,1);n.push(Tr(u,r.get(u.id)??"+",b))}for(let u of e.links)o.push({from:a(u.source),to:a(u.target),fromStrand:u.strand1==="-"?"-":"+",toStrand:u.strand2==="-"?"-":"+"});let d=[],g=new Map,l=(u,b)=>[u,b].sort().join("--");function x(u,b){for(let f=0;f<u.length-1;f++){let h=l(u[f],u[f+1]);g.has(h)||g.set(h,new Set),g.get(h).add(b)}}for(let u of e.paths){let b=u.path.split(",").map(f=>a(f.slice(0,-1)));d.push({name:u.name,nodeIds:b}),x(b,u.name)}for(let u of e.walks){let b=u.segments.map(h=>a(h.id)),f=`${u.sample}#${u.haplotype}#${u.contig}`;d.push({name:f,nodeIds:b,sample:u.sample,haplotype:u.haplotype,contig:u.contig}),x(b,f)}for(let u of o){let b=g.get(l(u.from,u.to));b&&b.size>0&&(u.pathIds=[...b])}let M=new Map(e.nodes.map(u=>[u.id,u.length])),p=e.paths.length>0||e.walks.length>0?At(Mr(e),u=>M.get(u)??0):void 0;return{name:t,nodes:n,edges:o,paths:d.length>0?d:void 0,anchorPaths:p?.anchorPaths,pathVisits:p?.pathVisits,anchoredBy:n.some(u=>u.stable)?"tags":void 0}}function ye(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 Cn(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function vn(e,t){let n=Cn(e.dynamicBlocks.contentBlocks.filter(r=>r.refName===t.refName&&r.assemblyName===t.assemblyName)),{bpPerPx:o}=e;return n&&o>0?{scale:1/o,translateX:n.offsetPx-e.offsetPx-n.start/o}:void 0}function Bn(e){let t=Cn(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 Fn(e,t){let n=e.end-e.start,o=Math.max(0,Math.min(e.span,(t-n)/2));return{refName:e.refName,assemblyName:e.assemblyName,start:Math.max(e.regionStart,Math.floor(e.start-o)),end:Math.min(e.regionEnd,Math.ceil(e.end+o))}}function Vn(e,t){return e?.refName===t.refName&&e.assemblyName===t.assemblyName&&e.start<=t.start&&t.end<=e.end}var En=y(B(),1),Hn=y(D(),1),Ar="rgb(60,65,72)";function Dn({start:e,end:t}){let o=`min(300, max(0, ((get(feature,'start')+get(feature,'end'))/2 - ${e}) / ${t-e} * 300))`;return`jexl:get(feature,'rank')>0 ? '${Ar}' : 'hsl(' + ${o} + ',70%,50%)'`}function Ir(e){return typeof e=="object"&&e!==null&&"id"in e&&Array.isArray(e.tracks)}function On(e,t,n){for(let o of e)if(Ir(o)&&(t===void 0||o.id===t)){let i=o.tracks?.find(a=>a.configuration.trackId===n)?.displays[0];if(i?.type==="LinearBasicDisplay")return i}}function $n(e,t){let{color:n}=(0,Hn.getSnapshot)(e.configuration);(typeof n=="object"&&n!==null&&"value"in n?n.value:n)!==t&&(0,En.setConf)(e,"color",t)}function _n(e,t){let n=e.nodes.filter(h=>N(h)&&(t[h.id]?.length??0)>0);if(n.length<2)return t;let o=n.map(h=>{let w=t[h.id],c=w[Math.floor(w.length/2)];return{x:c.x,y:c.y,r:h.stable.start+h.length/2,w:h.length}}),r=o.reduce((h,w)=>h+w.w,0),i=o.reduce((h,w)=>h+w.x*w.w,0)/r,a=o.reduce((h,w)=>h+w.y*w.w,0)/r,d=o.reduce((h,w)=>h+w.r*w.w,0)/r,g=0,l=0;for(let h of o)g+=h.w*(h.x-i)*(h.r-d),l+=h.w*(h.y-a)*(h.r-d);let x=-Math.atan2(l,g),M=Math.cos(x),p=Math.sin(x),u={};for(let[h,w]of Object.entries(t))u[h]=w.map(c=>{let m=c.x-i,k=c.y-a;return{x:i+M*m-p*k,y:a+p*m+M*k}});let b=0,f=0;for(let h of e.nodes)if(!N(h))for(let w of u[h.id]??[])w.y>a?b++:f++;if(f>b)for(let h of Object.values(u))for(let w of h)w.y=2*a-w.y;return u}var jn=30;function Pr(e,t){let{opts:n}=t,o=new Map(t.nodes.map(p=>[p.id,ie(n,p.length)])),r=p=>o.get(p)??n.minimumNodeLength,i=e.nodes.filter(N).sort((p,u)=>p.stable.start-u.stable.start),a=new Map,d=0;for(let p of i)a.set(p.id,{x:d,y:0}),d+=r(p.id)+n.edgeLength;let g=pe(e),l=new Map(i.map(p=>[p.id,0])),x=i.map(p=>p.id);for(let p of x){let u=a.get(p),b=l.get(p)+1;for(let f of g.get(p)??[])l.has(f)||(l.set(f,b),a.set(f,{x:u.x+r(p)/2,y:jn*b}),x.push(f))}let M=0;for(let p of e.nodes)a.has(p.id)||a.set(p.id,{x:M++*d/e.nodes.length,y:jn*3});return a}function zn(e,t){let n=Pr(e,t);return t.nodes.map(o=>({...o,...n.get(o.id)}))}var Ye=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),Cr=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function Yn(e,t){return t?e.find(o=>o.trackId===t):e.filter(o=>Ye.has(o.adapterType)).find(o=>Cr.test(`${o.trackId} ${o.name??""}`))}function ke(e,t){return typeof e.get=="function"?e.get(t):e[t]}var Xn=/^\w+=[^;]*(;\w+=[^;]*)*$/;function vr(e){let t=ke(e,"name");if(!(typeof t!="string"||!Xn.test(t)))return Object.fromEntries(t.split(";").map(n=>{let o=n.indexOf("=");return[n.slice(0,o),n.slice(o+1)]}))}function we(e,t){let n=ke(e,t);return n!==void 0?n:ke(e,"INFO")?.[t]??vr(e)?.[t]}var Un=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],Br=["RUL","period","PERIOD","consensusSize","unit","unitLength"],Fr=["TRID","REPID","VARID","ID","name","id"];function xe(e,t){for(let n of t){let o=we(e,n),r=String((Array.isArray(o)?o[0]:o)??"").split(",")[0].trim();if(r!==""&&r!==".")return r}}var Vr=/^[ACGTURYSWKMBDHVN]+$/i;function Er(e){let t=Number(xe(e,Br));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=xe(e,Un);return n&&Vr.test(n)?n.length:void 0}function Wn(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 Hr(e){let t=ke(e,"samples"),n={};for(let[o,r]of Object.entries(t??{})){let i=Wn(r.SD),a=Wn(r.AL).flatMap((d,g)=>d!==void 0&&d>0?[i[g]===void 0?{bp:d}:{bp:d,spanningReads:i[g]}]:[]);a.length>0&&(n[o]=a)}return Object.keys(n).length>0?n:void 0}function Kn(e){let t=[];for(let n of e){let o=we(n,"start"),r=we(n,"end"),i=Er(n);if(!(r>o)||i===void 0)continue;let a=we(n,"refName"),d=xe(n,Un),g=xe(n,Fr);t.push({key:`${a}:${o}-${r}`,name:(g&&!Xn.test(g)?g:void 0)??(d&&d.length<=12?`(${d})n`:`${a}:${(o+1).toLocaleString()}-${r.toLocaleString()}`),refName:a,start:o,end:r,unit:i,motif:d,calls:Hr(n)})}return t.sort((n,o)=>n.start-o.start)}function qn(e,t){let n=e.paths?.find(l=>l.name===t);if(!n)return;let o=new Map(e.nodes.map(l=>[l.id,l])),r=new Map;e.edges.forEach((l,x)=>{r.set(`${l.from}>${l.to}`,x)});let i=new Set(n.nodeIds),a=new Set;for(let l=1;l<n.nodeIds.length;l++){let x=n.nodeIds[l-1],M=n.nodeIds[l],p=r.get(`${x}>${M}`)??r.get(`${M}>${x}`);p!==void 0&&a.add(p)}let d=l=>l.reduce((x,M)=>x+(o.get(M)?.length??0),0),g=e.referencePath?e.paths.find(l=>ue(l.name).name===e.referencePath):void 0;return{name:t,nodeIds:i,edgeIndexes:a,steps:n.nodeIds.length,bp:d(n.nodeIds),referenceBp:g&&g!==n?d(g.nodeIds):void 0}}function Se(e){return typeof e=="object"&&e!==null}function Dr(e){return Se(e)&&typeof e.get=="function"}function Or(e){let t=Dr(e)?e.get("name"):Se(e)?e.name:void 0;return typeof t=="string"?t:void 0}function Jn(e){let t;if(Se(e)&&Se(e.hoverPosition)){let{refName:n,coord:o,coord0:r,assemblyName:i}=e.hoverPosition;typeof n=="string"&&typeof o=="number"&&(t={refName:n,coord:typeof r=="number"?r:o-1,assemblyName:typeof i=="string"?i:void 0,featureName:Or(e.hoverFeature)})}return t}function Zn(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function Qn({hover:e,nodes:t}){let n,o;for(let r of t)r.name===e.featureName?n=r.id:o===void 0&&N(r)&&e.coord>=r.stable.start&&e.coord<r.stable.start+r.length&&(o=r.id);return n??o??null}var Xe=y(B(),1);function eo(e){return typeof e=="object"&&e!==null}function $r(e){return eo(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function te(e){return e.flatMap(t=>eo(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function ne({views:e,connectedViewId:t,assemblyName:n}){let o=te(e).filter(i=>$r(i)).filter(i=>i.assemblyNames.includes(n));return o.find(i=>i.id===t)??(o.length===1?o[0]:void 0)}function no(e,t,n){n.catch(o=>{console.error(`[GraphGenomeView] ${t}`,o),e.notifyError?.(`${t}: ${o}`,o)})}var _r=1e3;function Ue(e,t=_r){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 oo(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 ro({session:e,location:t,assembly:n,connectedViewId:o,tracks:r=[]}){let i=ne({views:e.views,connectedViewId:o,assemblyName:n}),a;return i?(no(e,`Could not show ${n} ${K(t)}`,Promise.resolve(i.navToLocString(he(t),n))),a=i.id):a=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${K(t)}`,init:{assembly:n,loc:he(t),tracks:r}}).id,a}function ao({session:e,location:t,assembly:n,connectedViewId:o}){let r=ne({views:e.views,connectedViewId:o,assemblyName:n});return r?.addToHighlights?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),r!==void 0}function to(e,t){if(t===void 0)return[];let n=e.tracks.find(r=>(0,Xe.readConfObject)(r,"trackId")===t),o=n?(0,Xe.readConfObject)(n,"assemblyNames"):[];return Array.isArray(o)?o.filter(r=>typeof r=="string"):[]}function io({session:e,contributors:t,trackId:n,graphTrackId:o}){let r=to(e,o),i=to(e,n),a=t.filter(l=>i.includes(l.sample)),d=a.length>=2?a:t,g={init:{views:d.map(l=>({assembly:l.sample,loc:he(l),...o!==void 0&&r.includes(l.sample)?{tracks:[o]}:{}})),tracks:n?d.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?no(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",g)):e.addView("LinearSyntenyView",g)}var Le=y(B(),1),jr="FeatureTrack";function so({session:e,assemblyName:t,first:n}){let o=[];for(let r of e.tracks){let i=(0,Le.readConfObject)(r,"type"),a=(0,Le.readConfObject)(r,"assemblyNames"),d=(0,Le.readConfObject)(r,"trackId");i===jr&&Array.isArray(a)&&a.includes(t)&&typeof d=="string"&&d!==n&&o.push(d)}return n?[n,...o]:o}var Re=y(B(),1),co=y(ht(),1),zr="SyntenyTrack";function uo(e,t){let n=new Set(t),o=[];for(let r of e.tracks){let i=(0,Re.readConfObject)(r,"type"),a=(0,Re.readConfObject)(r,"assemblyNames"),d=(0,Re.readConfObject)(r,"trackId");if(i===zr&&typeof d=="string"&&Array.isArray(a)){let g=a.filter(l=>n.has(l)).length;g>=2&&o.push({trackId:d,name:(0,co.getTrackName)(r,e),coverage:g})}}return o.sort((r,i)=>i.coverage-r.coverage)}var Ke=y(B(),1),Wr=y(ht(),1);function po(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function go(e){let t=(0,Ke.readConfObject)(e,"assemblyNames"),n=po(t)?t.slice(1):[];return n.length>0?n:void 0}function mo(e){let t=(0,Ke.readConfObject)(e,"assemblyNames");return po(t)?t[0]:void 0}function lo(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}`}var Xr=600,qe=160,Ur=340,ho=".segs.bed.gz";function Kr(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(ho)?n.slice(0,-ho.length):void 0}var _=40,bo=1.4,qr=1.6,Jr=150,Zr=1;function Me(...e){}var Qr=5e6;function Ge(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var ea=2e4,ta=1e-6,na=100;function Je(e){return Math.max(ta,Math.min(na,e))}function Ze(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function fo(e){return{minX:-e.translateX/e.scaleX,minY:-e.translateY/e.scaleY,maxX:(e.width-e.translateX)/e.scaleX,maxY:(e.canvasHeight-e.translateY)/e.scaleY}}function oa(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 yo(e,t,n){let o=t-e.h*n;return _-e.minY*n+Math.max(0,o)/2}function ra(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}var Ne=new WeakMap,aa=4;function ia(e){let t=Ne.get(e);return t||(t=new Map,Ne.set(e,t)),t}function sa(e,t){let n=Ne.get(e);n&&e!==t&&Ne.set(t,n)}function da(e,t,n){e.size>=aa&&e.delete(e.keys().next().value),e.set(t,n)}function oe(){return s.types.compose("GraphGenomeView",wo.BaseViewModel,(0,So.RenderLifecycleMixin)(),s.types.model({type:s.types.literal("GraphGenomeView"),layoutQuality:s.types.optional(s.types.number,2),linearLayout:s.types.optional(s.types.boolean,!1),layoutMode:s.types.optional(s.types.enumeration(me),"force"),colorScheme:s.types.optional(s.types.enumeration(ce),"auto"),bubbleSpread:s.types.optional(s.types.enumeration(wt),"auto"),nodeWidth:s.types.optional(s.types.enumeration(Vt),"depth"),showBubbles:s.types.optional(s.types.boolean,!0),showDeletionEdges:s.types.optional(s.types.boolean,!1),showGenes:s.types.optional(s.types.boolean,!0),geneTrackId:s.types.optional(s.types.string,""),repeatTrackId:s.types.optional(s.types.string,""),repeatKey:s.types.optional(s.types.string,""),walkRowSamples:s.types.maybe(s.types.frozen()),highlightedPath:s.types.optional(s.types.string,""),referencePath:s.types.optional(s.types.string,""),showPerf:s.types.optional(s.types.boolean,!1),contigThickness:s.types.optional(s.types.number,6),connectorThickness:s.types.optional(s.types.number,2),darkMode:s.types.optional(s.types.boolean,!1),scale:s.types.optional(s.types.number,1),translateX:s.types.optional(s.types.number,0),translateY:s.types.optional(s.types.number,0),drawPaths:s.types.optional(s.types.boolean,!1),paneHeight:s.types.maybe(s.types.number),maxGraphNodes:s.types.optional(s.types.number,ea),maxRegionBp:s.types.optional(s.types.number,Qr),loadedTrackId:s.types.optional(s.types.string,""),loadedRegion:s.types.maybe(s.types.frozen()),subgraphHaplotypes:s.types.maybe(s.types.frozen()),subgraphContext:s.types.optional(s.types.number,1),gfaLocation:s.types.maybe(s.types.frozen()),colorDomain:s.types.maybe(s.types.frozen()),connectedViewId:s.types.maybe(s.types.string),coarseCut:s.types.optional(s.types.boolean,!1)})).volatile(()=>({graph:void 0,layoutResult:void 0,indexBubbles:void 0,geneFeatures:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredEdge:null,selectedNode:null,viewportDirty:0,positionsVersion:0,geometryVersion:0,builtViewport:void 0,draggingNode:null,isPanning:!1,viewportOwner:"fit",hostPaneHeight:void 0,cutNote:void 0,recuts:0,viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0})).views(e=>({get nodeById(){if(e.graph){let t=new Map;for(let n of e.graph.nodes)t.set(n.id,n);return t}},get nodeLengths(){let t=new Map;for(let n of e.graph?.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 showLoading(){return e.error===void 0&&(e.isLoading||(e.graph!==void 0||!!(e.loadedTrackId&&e.loadedRegion)||!!e.gfaLocation)&&e.lastGeometryStrokeCount===void 0)},get canRetryLoad(){return!!(e.loadedTrackId&&e.loadedRegion)||!!e.gfaLocation},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?Bt(e.layoutMode,e.graph):!1},get canAnchorLayout(){return e.graph?.nodes.some(t=>t.stable?.rank===0)??!1},get anchorPaths(){return e.graph?.anchorPaths??[]},get pathLegend(){let t=e.graph?.paths;return e.drawPaths&&t&&Fe(t.length)?Ve(t):[]},get walkChoices(){let t=e.graph?.paths;return t?.length?Ve(t):[]},get walkHighlight(){return e.graph&&e.highlightedPath?qn(e.graph,e.highlightedPath):void 0},get effectiveDrawPaths(){return e.drawPaths&&Fe(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get preferredReferencePath(){return e.referencePath===""?e.loadedRegion?.assemblyName:e.referencePath},get rampDomain(){return e.colorDomain??e.loadedRegion},get effectiveColorScheme(){return e.colorScheme!=="auto"?e.colorScheme:e.graph?.anchoredBy?"reference-position":"uniform"},get nodePositions(){return e.layoutResult?.nodePositions},get rowLabels(){return e.layoutResult?.rowLabels??[]},get alleleDeletions(){return e.layoutResult?.alleleDeletions??[]},get pixelRows(){return e.layoutResult?.pixelRows??!1},get zoomPercent(){return`${(e.scale*100).toFixed(1)}%`},get isDefaultViewport(){return e.scale===1&&e.translateX===0&&e.translateY===0}})).views(e=>({get poppedFrom(){return e.popStack.at(-1)},get derivedBubbles(){return e.graph?Ln(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get sourceAdapter(){let t=(0,G.getSession)(e).tracks.find(n=>n.trackId===e.loadedTrackId);return t?(0,$.readConfObject)(t,"adapter"):void 0},get assemblyTrackChoices(){let t=e.loadedRegion;return t?(0,G.getSession)(e).tracks.filter(n=>(0,$.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,$.readConfObject)(n,"name"),adapterType:(0,$.readConfObject)(n,"adapter").type})):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>je.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>Ye.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return Yn(e.repeatTrackChoices,e.repeatTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)}})).views(e=>({get nodeNeighbors(){return e.graph?pe(e.graph):void 0},get nodeInk(){let{contigThickness:t,nodeWidth:n,nodeById:o}=e,r=e.graph?Et(e.graph):0;return{maxHalfWidthPx:Dt(t,n)/2,halfWidthPx:i=>{let a=o?.get(i);return a?Ht(a,t,n,r)/2:t/2}}},get deletions(){return e.graph&&e.layoutMode!=="walkrows"?Gt(e.graph):[]},get walkRowBars(){if(e.layoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?Be(e.graph,t,t.unit):Be(e.graph,e.loadedRegion);if(!n)return;let o=e.walkRowSamples,r=o?n.rows.filter(i=>o.includes(i.sample)).sort((i,a)=>o.indexOf(i.sample)-o.indexOf(a.sample)||i.label.localeCompare(a.label)):n.rows;return{...n,rows:_t(r,t?.calls)}},get drawnRowLabels(){let t=this.walkRowBars;return t?[t.reference,...t.rows].map((n,o)=>({label:n.label,y:o*20})):e.rowLabels},get bubbleGlyphs(){return(e.layoutMode==="variants"?e.bubbles:[]).map(n=>({bubble:n,...U(n)}))},get genePins(){Me(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&e.layoutMode!=="variants"&&e.layoutMode!=="walkrows"&&e.graph&&e.geneFeatures&&t?An(e.graph,e.geneFeatures,t):[]},get bubbleHalos(){Me(e.positionsVersion);let t=e.layoutResult?.nodePositions;if(!e.showBubbles||e.layoutMode==="variants"||e.layoutMode==="walkrows"||!e.graph||!t)return[];let n=new Map(e.walkChoices.map(o=>[o.name,o.label]));return Sn(e.graph,e.bubbles,t,o=>n.get(o)??o)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.graph?Ot(e.graph,e.rampDomain):void 0},get assemblyNames(){let t=e.loadedRegion;return t?[t.assemblyName]:[]},get scaleX(){return Ze(e.scale,e.pixelRows).scaleX},get scaleY(){return Ze(e.scale,e.pixelRows).scaleY},get axisScale(){return Ze(e.scale,e.pixelRows)},get layoutBounds(){let t;if(e.layoutResult){let n=1/0,o=1/0,r=-1/0,i=-1/0;for(let l of Object.values(e.layoutResult.nodePositions))for(let x of l)n=Math.min(n,x.x),o=Math.min(o,x.y),r=Math.max(r,x.x),i=Math.max(i,x.y);let a=e.layoutResult.referenceAxis&&e.popStack.length===0?e.loadedRegion:void 0;a&&a.end>a.start&&(n=a.start,r=a.end);let d=this.walkRowBars,g=d&&e.layoutResult.extent?Ct(d):e.layoutResult.extent;g&&(r=Math.max(r,g.maxX),i=Math.max(i,g.maxY)),t={minX:n,minY:o,w:r-n,h:i-o}}return t},get canvasHeight(){if(e.viewportOwner==="host"&&e.hostPaneHeight!==void 0)return e.hostPaneHeight;let t=this.layoutBounds,n=e.width-_*2,o=Math.max(qe,e.paneHeight??Xr);if(!t)return o;if(e.pixelRows){let r=e.layoutMode==="variants"?Ur:qe;return Math.min(o,Math.max(r,t.h+_*2))}return t.w>0&&n>0?Math.min(o,Math.max(qe,t.h*n/t.w+_*2)):o}})).views(e=>({get geneTrack(){return Mn(e.geneTrackChoices,e.geneTrackId)},get deletionEdgeIndexes(){return new Map(e.deletions.map(t=>[t.edgeIndex,t.bypassed]))},get hiddenEdgeIndexes(){return new Set(e.showDeletionEdges?[]:e.deletions.map(t=>t.edgeIndex))},get referenceRampDomain(){let t=e.referenceRamp;return t?{start:t.start,end:t.start+t.span}:void 0},get hoverHighlight(){let t,n=e.loadedRegion,o=e.hoveredNode,r=e.nodeById,i=e.nodeNeighbors;if(n&&o!==null&&r&&i){let a=ge({nodeId:o,nodeById:r,neighbors:i});a&&(t={refName:n.refName,assemblyName:n.assemblyName,...a})}return t}})).views(e=>({get contributingAssemblies(){let t=e.graph,n=t?bt(t):[];return t?jt(t,{maxGap:n.length>0?yt(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,G.getSession)(e),n=e.sourceAdapter?.assemblyNameToPanSN,o=new Map(Object.entries(n??{}).map(([i,a])=>[a,i])),r=i=>i!==void 0&&t.has(i)?t.get(i)?.name??i:void 0;return i=>r(o.get(i))??r(i)}})).views(e=>({get launchableAssemblies(){return Wt(oo(e.contributingAssemblies,e.loadedRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.loadedRegion;return t!==void 0&&ne({views:[...(0,G.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),o=n?le(n):void 0,r=o?zt(e.assemblyResolver,o):void 0,i=e.loadedRegion,a=e.nodeById,d=e.nodeNeighbors,g=i&&a&&d?ge({nodeId:t,nodeById:a,neighbors:d}):void 0,l=i&&g?{sample:i.assemblyName,haplotype:void 0,refName:i.refName,...g}:void 0;return{own:o&&r?{location:Ue(o),assembly:r}:void 0,reference:i&&l?{location:Ue(l),assembly:i.assemblyName}:void 0,highlight:i&&l?{location:l,assembly:i.assemblyName}:void 0}}})).views(e=>({get coarseAboveBpPerPx(){let n=e.sourceAdapter?.coarse?.aboveBpPerPx;return typeof n=="number"?n:void 0}})).views(e=>({get cutTier(){return e.coarseCut&&e.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(e=>({get regionCapBp(){return e.cutTier==="coarse"?1/0:e.maxRegionBp}})).views(e=>({get host(){let t;try{t=(0,G.getContainingView)(e)}catch{return}return t!==e&&ye(t)?t:void 0}})).views(e=>({get hostPlacesX(){let{host:t,loadedRegion:n,layoutResult:o}=e;return t!==void 0&&t.initialized&&n!==void 0&&o?.referenceAxis===!0&&e.popStack.length===0&&!t.dynamicBlocks.contentBlocks.some(r=>r.refName===n.refName&&r.reversed)}})).views(e=>({get hostFrame(){let{host:t,loadedRegion:n}=e;return e.hostPlacesX&&t&&n?vn(t,n):void 0}})).actions(e=>({setError(t){e.error=t,e.isLoading=!1},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,e.geometryVersion++},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=It(n,t);sa(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},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setHighlightedPath(t){e.highlightedPath=t},setPaneHeight(t){e.paneHeight=t,e.viewportOwner==="host"&&(e.hostPaneHeight=t)},adoptTrack(t){e.loadedTrackId!==t&&(e.loadedTrackId=t,e.loadedRegion=void 0,e.coarseCut=!1,e.graph=void 0,e.layoutResult=void 0)},setSubgraphContext(t){e.subgraphContext=t},setWalkRowSamples(t){e.walkRowSamples=t},setSubgraphHaplotypes(t){e.subgraphHaplotypes=t},setMaxRegionBp(t){e.maxRegionBp=t},pairWithLinearView(t){let n=e.connectedViewId;n!==void 0&&te([...(0,G.getSession)(e).views]).some(r=>r.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=t},setHoveredEdge(t){e.hoveredEdge=t},setSelectedNode(t){e.selectedNode=t},setDraggingNode(t){e.draggingNode=t},setPanning(t){e.isPanning=t},stopDragging(){e.draggingNode=null,e.isPanning=!1},clearInteractionState(){e.hoveredNode=null,e.hoveredEdge=null,e.selectedNode=null,e.draggingNode=null,e.isPanning=!1},showNodeDetails(t){let n=e.nodeById?.get(t),o=e.nodeById,r=e.nodeNeighbors;if(n&&o&&r){let i=(0,G.getSession)(e),a=e.loadedRegion,d=a?ge({nodeId:t,nodeById:o,neighbors:r}):void 0;(0,G.isSessionModelWithWidgets)(i)&&i.showWidget(i.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:le(n)?.sample,contributingHaplotype:le(n)?.haplotype,carriedBy:n.samples?.join(", "),...a&&d?{refName:a.refName,assemblyName:a.assemblyName,start:d.start,end:d.end}:{}}}))}},setTransform(t,n,o){let{host:r}=e;e.viewportOwner==="host"&&r?r.horizontalScroll(e.translateX-n):(e.viewportOwner="user",e.scale=Je(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 i=Je(e.scale*t),a=i/e.scale;e.scale=i,e.translateX=n-(n-e.translateX)*a,e.pixelRows||(e.translateY=o-(o-e.translateY)*a)},setViewportDirty(){e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){let t=e.layoutBounds,n=e.width-_*2,o=e.canvasHeight-_*2;if(e.viewportOwner==="host"){t&&o>0&&(e.translateY=yo(t,o,e.scaleY));return}if(t&&n>0&&o>0&&(t.w>0||!e.pixelRows&&t.h>0)){let r=t.w>0?n/t.w:1/0,i=t.h>0?o/t.h:1/0,a=Je(e.pixelRows?r:Math.min(r,i));e.scale=a,e.translateX=_-t.minX*a+(n-t.w*a)/2,e.translateY=yo(t,o,e.pixelRows?1:a)}},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.hostPaneHeight=e.canvasHeight,e.viewportOwner="host"),e.scale=t,e.translateX=n,o&&e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.hostPaneHeight=void 0,e.layoutResult?.referenceAxis?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportDirtyTimer=setTimeout(()=>{(0,s.isAlive)(e)&&e.setViewportDirty()},Jr)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,s.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(o,r,i){let a=e.layoutResult?.nodePositions;if(a?.[o]){for(let d of a[o])d.x+=r,d.y+=i;n()}},scheduleViewportDirty:t}}).actions(e=>{let t;function n(c,m){let k=(0,G.getSession)(e),{rpcManager:L}=k,R="graph",S=c.nodes.some(N);return L.call(R,"GraphComputeLayout",{graph:{nodes:S?zn(c,m):m.nodes,edges:c.edges},options:{quality:e.layoutQuality,linearLayout:e.linearLayout,...m.opts,...S?{rotateComponents:!1}:{}},signal:t?.signal,statusCallback:A=>{e.setStatusMessage((0,G.statusMessageText)(A)??"")}})}function o(c){let m=c.nodes.some(N);return`${e.layoutQuality}|${e.linearLayout}|${e.bubbleSpread}|${m}|${c.referencePath??""}`}function*r(c){let m=performance.now(),k=Ft(e.layoutMode).run(c,e.loadedRegion,e.host?e.layoutResult?.sampleRows:void 0);if(k)return{result:k,duration:performance.now()-m};let L=ia(c),R=o(c),S=L.get(R);if(S)return{result:S,duration:performance.now()-m};let A=kt(e.bubbleSpread),I=Nt(c),{result:V,duration:W}=yield n(I.graph,Ce(I.graph,A)),O=Ce(c,A),P=new Map(O.nodes.map(Y=>[Y.id,ie(O.opts,Y.length)])),C=Tt(V.nodePositions,I.runs,Y=>P.get(Y)??0),E={...V,nodePositions:c.nodes.some(N)?_n(c,C):C};return da(L,R,E),{result:E,duration:W}}let i=0;function*a(c){let m=++i,k=()=>e.graph===c&&m===i,L=t?.signal,R;try{R=yield*r(c)}catch(A){if(!k()||L?.aborted)return!1;throw A}let S=k();return S&&(e.layoutResult=R.result,e.setLayoutMs(R.duration)),S}function*d(c,m,k=!1){e.setStatusMessage("Parsing GFA");let L=We(c),R=Pt(Pn(L,m),e.preferredReferencePath);if(R.nodes.length===0)throw new Error(`No graph segments in ${m}`);if(R.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${R.nodes.length.toLocaleString()} nodes (limit ${e.maxGraphNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);let S=k?e.selectedNode:null;e.graph=R,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),S!==null&&e.nodeById?.has(S)&&(e.selectedNode=S),e.setStatusMessage("Computing layout"),yield*a(R)}let g=0;function l(){let c=++g;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>c===g,signal:t.signal}}function x(){return e.loadedTrackId?(0,G.getSession)(e).tracks.find(c=>c.trackId===e.loadedTrackId):void 0}function*M(c,m,k){let L=Kr(c);if(!(c.type!=="RgfaTabixAdapter"||L===void 0||e.cutTier==="coarse"))try{let R=yield(0,G.getSession)(e).rpcManager.call("graph","CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${L}.bubbles.bed.gz`,baseUri:c.baseUri,assemblyNameToPanSN:c.assemblyNameToPanSN},regions:[m]});k()&&(e.indexBubbles=R.map(S=>({refName:m.refName,start:S.get("start"),end:S.get("end"),segmentCount:S.get("segmentCount"),pathCount:S.get("pathCount")??0,inversion:S.get("inversion"),shortestAlleleLength:S.get("shortestAlleleLength"),longestAlleleLength:S.get("longestAlleleLength"),segments:S.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(R){console.warn("[GraphGenomeView] no bubble index for this graph",R)}}function*p(c,m,k){let L=(0,G.getSession)(e),R=c?L.tracks.find(S=>S.trackId===c):void 0;if(R)try{return yield L.rpcManager.call("graph","CoreGetFeatures",{adapterConfig:(0,$.readConfObject)(R,"adapter"),regions:[m]})}catch(S){console.warn(`[GraphGenomeView] no ${k} for this graph`,S);return}}function*u(c,m){let k=yield*p(e.geneTrack?.trackId,c,"genes");k&&m()&&(e.geneFeatures=Nn(k))}function*b(c,m){let k=yield*p(e.repeatTrack?.trackId,c,"repeats");k&&m()&&(e.repeatArrays=Kn(k))}function*f(c,m,k={}){let{isLive:L,signal:R}=l(),S=x(),A=m.end-m.start,I=(S&&lo(mo(S),m.assemblyName))??(A>e.regionCapBp?`Region too large (${Ge(A)}) \u2014 zoom in to view graph (max ${Ge(e.regionCapBp)})`:void 0);if(I!==void 0){e.graph=void 0,e.layoutResult=void 0,e.isLoading=!1,e.error=new Error(I);return}e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let V=(0,G.getSession)(e),{rpcManager:W}=V,O="graph",P=performance.now(),C=yield W.call(O,"GetSubgraph",{adapterConfig:c,region:m,opts:k,signal:R});if(!L())return;if(e.setFetchMs(performance.now()-P),!C)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");let E=K(m);if(yield*d(C,E,!0),!L())return;e.setStatusMessage("Reading annotations"),yield Promise.all([(0,s.flow)(M)(c,m,L),(0,s.flow)(u)(m,L),(0,s.flow)(b)(m,L)])}catch(V){L()&&(console.error("[GraphGenomeView.loadFromTabixSubgraph]",V),e.error=V)}finally{L()&&(e.isLoading=!1)}}function*h(){let c=e.loadedRegion,m=x();if(c&&e.loadedTrackId&&!m)e.error=new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`);else if(m&&c){let k=e.cutTier==="coarse";yield*f((0,$.readConfObject)(m,"adapter"),c,{hops:k?0:e.subgraphContext,haplotypes:e.subgraphHaplotypes,tier:k?"coarse":void 0})}}function*w(c,m,k){let{isLive:L,signal:R}=l();e.loadedTrackId="",e.loadedRegion=k,e.coarseCut=!1,e.isLoading=!0,e.error=void 0;try{let S=typeof m=="string"?m:yield m(R);L()&&(yield*d(S,c))}catch(S){L()&&(console.error("[GraphGenomeView.loadWholeGFA]",S),e.error=S)}finally{L()&&(e.isLoading=!1)}return L()}return{clearGraph(){t?.abort(),t=void 0,g++,i++,e.graph=void 0,e.layoutResult=void 0,e.loadedTrackId="",e.loadedRegion=void 0,e.coarseCut=!1,e.cutNote=void 0,e.gfaLocation=void 0,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearInteractionState(),e.clearPerfMetrics()},cancelLoad(){e.canCancelLoad&&(t?.abort(),t=void 0,g++,i++,e.graph=void 0,e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0)},loadGFA:(0,s.flow)(function*(c,m="Imported GFA"){yield*w(m,c)}),loadGFAFromLocation:(0,s.flow)(function*(c){e.setStatusMessage("Fetching GFA");let m=e.loadedRegion,k=yield*w("uri"in c?c.uri.split("/").pop()??"GFA":"GFA",L=>(0,xo.openLocation)(c).readFile({encoding:"utf8",signal:L}),m);m&&k&&e.graph&&(yield*b(m,()=>e.loadedRegion===m))}),loadFromTabixSubgraph:(0,s.flow)(function*(c,m,k={}){e.loadedTrackId=k.trackId??"",e.loadedRegion=k.trackId?m:void 0,e.coarseCut=!1,yield*f(c,m,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes})}),refetchIfNeeded:(0,s.flow)(function*(){e.graph||(yield*h())}),reloadSubgraph:(0,s.flow)(function*(){yield*h()}),reloadRepeats:(0,s.flow)(function*(){let c=e.loadedRegion,m=e.repeatTrack?.trackId;c&&(yield*b(c,()=>e.loadedRegion===c&&e.repeatTrack?.trackId===m))}),reloadGenes:(0,s.flow)(function*(){let c=e.loadedRegion,m=e.geneTrack?.trackId;c&&(yield*u(c,()=>e.loadedRegion===c&&e.geneTrack?.trackId===m))}),popBubble:(0,s.flow)(function*(c){let m=e.graph;if(!m)return;let k=Rn(m,se(c));if(k.nodes.length===0){(0,G.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}=l();e.popStack=[...e.popStack,{graph:m,layoutMode:e.layoutMode,label:m.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let R=`${Lt[U(c).kind]} at ${c.refName}:${c.start.toLocaleString()}`;e.graph={...k,name:R},e.layoutMode==="variants"&&(e.layoutMode="force"),e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*a(e.graph))&&(e.isLoading=!1)}catch(S){L()&&(e.error=S,e.isLoading=!1)}}),unpopBubble:(0,s.flow)(function*(){let c=e.poppedFrom;if(c){e.popStack=e.popStack.slice(0,-1),e.graph=c.graph,e.layoutMode=c.layoutMode,e.indexBubbles=c.indexBubbles,e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*a(c.graph))&&(e.isLoading=!1)}catch(m){e.error=m,e.isLoading=!1}}}),recomputeLayout:(0,s.flow)(function*(){let c=e.graph;if(c){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*a(c))&&(e.isLoading=!1)}catch(m){console.error("[GraphGenomeView.recomputeLayout]",m),e.error=m,e.isLoading=!1}}})}}).actions(e=>({settleOn(t){let n=e.coarseAboveBpPerPx,o=n!==void 0&&t.bpPerPx>n?"coarse":"fine",r=o==="coarse"?1/0:e.maxRegionBp,i=t.end-t.start;e.cutNote=i>r?`Holding the last cut: ${Ge(i)} is past the ${Ge(r)} a cut may span`:void 0,!(e.cutNote!==void 0||o===e.cutTier&&Vn(e.loadedRegion,t))&&(e.coarseCut=o==="coarse",e.loadedRegion=Fn(t,r),e.recuts++,e.reloadSubgraph())}})).actions(e=>({startHosting(){(0,s.addDisposer)(e,(0,T.reaction)(()=>e.hostPlacesX,t=>{t||e.releaseHost()},{name:"GraphHostPlacesX"})),(0,s.addDisposer)(e,(0,T.reaction)(()=>e.hostFrame,t=>{t&&e.hostTransform(t.scale,t.translateX)},{equals:(t,n)=>t?.scale===n?.scale&&t?.translateX===n?.translateX,fireImmediately:!0,name:"GraphHostFrame"})),(0,s.addDisposer)(e,(0,T.reaction)(()=>e.host?.coarseDynamicBlocks,t=>{let{host:n}=e,o=t&&n?Bn(n):void 0;o&&e.settleOn(o)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,s.addDisposer)(e,(0,T.autorun)(()=>{let o=e.rampDomain,r=e.loadedTrackId;if(o&&r&&e.effectiveColorScheme==="reference-position"){let i=(0,T.untracked)(()=>On((0,G.getSession)(e).views,e.connectedViewId,r));i&&$n(i,Dn(o))}})),(0,s.addDisposer)(e,(0,T.autorun)(()=>{e.layoutResult&&(0,T.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,s.addDisposer)(e,(0,T.autorun)(()=>{let o=Jn((0,G.getSession)(e).hovered);(0,T.untracked)(()=>{let r=e.loadedRegion,i=e.graph;r&&i&&e.setHoveredNode(o&&Zn(o,r)?Qn({hover:o,nodes:i.nodes}):null)})})),(0,s.addDisposer)(e,(0,T.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,s.addDisposer)(e,(0,T.autorun)(()=>{let{scale:o}=e,r=fo(e);if(n){n=!1;return}let i=(0,T.untracked)(()=>e.builtViewport);i?.scale===o&&ra(i.bounds,r)||e.scheduleViewportDirty()})),(0,s.addDisposer)(e,(0,T.autorun)(()=>{let o=e.currentRenderingBackend,r=e.hoveredNode,i=e.hoveredEdge,a=e.selectedNode;if(Me(e.geometryVersion),o){let d=new Map;a!==null&&d.set(a,qr),r!==null&&r!==a&&d.set(r,bo),o.setNodeHighlights(d),o.setEdgeHighlight(i,bo),e.renderNow()}}))}e.attachRenderingBackend(t,()=>({upload:n=>{n.resize(e.width,e.canvasHeight);let o=e.nodeById;if(e.nodePositions&&e.graph&&o){Me(e.viewportDirty,e.positionsVersion);let r=performance.now(),i=(0,T.untracked)(()=>oa(fo(e),Zr)),a=$t({nodePositions:e.nodePositions,graph:e.graph,nodeById:o,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:e.effectiveDrawPaths,nodeWidth:e.nodeWidth,highlight:e.walkHighlight,axis:(0,T.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:i,referenceRamp:e.referenceRamp,deletions:e.deletionEdgeIndexes,hiddenEdges:e.hiddenEdgeIndexes,version:e.positionsVersion});return n.uploadGeometry(a),e.setGeometryMetrics(performance.now()-r,a.nodeStrokes.length,{scale:(0,T.untracked)(()=>e.scale),bounds:i}),!0}return!1},render:n=>{if(!e.nodePositions)return!1;let o=(0,Lo.getDpr)();return n.updateTransform({scaleX:e.scaleX*o,scaleY:e.scaleY*o,translateX:e.translateX*o,translateY:e.translateY*o,dpr:o}),n.render(e.darkMode?[.12,.12,.12,1]:[1,1,1,1]),!0}}))}})).actions(e=>({switchLayout(t){return e.setLayoutMode(t),e.recomputeLayout()},retryLoad(){e.loadedTrackId&&e.loadedRegion?e.reloadSubgraph():e.gfaLocation&&e.loadGFAFromLocation(e.gfaLocation)},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user"),e.gfaLocation&&!e.graph&&e.loadGFAFromLocation(e.gfaLocation),e.refetchIfNeeded()}})).actions(e=>({showInLinearView(t){let n=(0,G.getSession)(e),o=t.assembly===e.loadedRegion?.assemblyName,r=ro({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:so({session:n,assemblyName:t.assembly,first:e.loadedTrackId&&o?e.loadedTrackId:void 0})});o&&e.pairWithLinearView(r)},highlightInLinearView(t){ao({session:(0,G.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){io({session:(0,G.getSession)(e),contributors:e.launchableAssemblies,trackId:t,graphTrackId:e.loadedTrackId||void 0})}})).views(e=>({get syntenyLaunchTracks(){let t=e.launchableAssemblies.map(n=>n.sample);return t.length>=2?uo((0,G.getSession)(e),t):[]}})).views(e=>({menuItems(){let t=[];for(let n of Yt({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:o=>{e.showInLinearView(o)},onShowSynteny:o=>{e.showSyntenyView(o)}}))(0,ko.pushLaunchViewMenuItem)(t,n);return t}}))}var ca=(0,Go.defineLaunchKeys)()({});function Qe(e){e.addViewType(()=>new Mo.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:oe(),launchKeys:ca,ReactComponent:(0,Ro.lazy)(()=>import("./chunks/GraphGenomeView-WPKSNN4I.js"))}))}function et(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...o}=t;return n.addView("GraphGenomeView",o),t})}var Oo=y(ae(),1),$o=y(To(),1);var Po=y(B(),1),Co=y(Io(),1),tt=y(D(),1);function vo(){return(0,Po.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:tt.types.enumeration("LayoutMode",me),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:tt.types.enumeration("ColorScheme",ce),defaultValue:"auto"},...(0,Co.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the most the track takes; a layout shorter than it takes only what it needs"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var Vo=y(ae(),1),j=y(B(),1),Eo=y(q(),1),Te=y(re(),1),Ho=y(Fo(),1),H=y(D(),1);var nt=y($e(),1);var ua=(0,Vo.lazy)(()=>import("./chunks/GraphSettingsDialog-KQK4YZN5.js"));function Do(e){let t=oe();return H.types.compose("LinearGraphDisplay",Eo.BaseDisplay,(0,Ho.default)(),H.types.model({type:H.types.literal("LinearGraphDisplay"),configuration:(0,j.ConfigurationReference)(e),pane:H.types.optional(t,()=>({type:"GraphGenomeView"})),configured:H.types.optional(H.types.frozen(),{})})).preProcessSnapshot(n=>{let{pane:o,configured:r}=n;return o?{...n,configured:{layoutMode:o.layoutMode!==void 0,colorScheme:o.colorScheme!==void 0,height:o.paneHeight!==void 0,...r},pane:o.type===void 0?{type:"GraphGenomeView",...o}:o}:n}).views(n=>({get host(){let o;try{o=(0,Te.getContainingView)(n)}catch{return}return ye(o)?o:void 0},get trackId(){return(0,j.getConf)(n.parentTrack,"trackId")}})).views(n=>({trackMenuItems(){let{pane:o}=n,{graph:r}=o,i=o.walkChoices;return[{label:"Layout",subMenu:vt.map(a=>({type:"radio",label:a.label,checked:o.layoutMode===a.value,disabled:r?!a.available(r):!1,onClick:()=>{o.switchLayout(a.value)}}))},{label:"Color",subMenu:Mt.map(a=>({type:"radio",label:a.label,checked:o.colorScheme===a.value,onClick:()=>{o.setColorScheme(a.value)}}))},...i.length>0?[{label:"Walk",subMenu:[{type:"radio",label:"None",checked:o.highlightedPath==="",onClick:()=>{o.setHighlightedPath("")}},...i.map(a=>({type:"radio",label:a.label,checked:o.highlightedPath===a.name,onClick:()=>{o.setHighlightedPath(a.name)}}))]}]:[],...o.layoutMode==="walkrows"&&o.repeatChoices.length>0?[{label:"Repeat",subMenu:[{type:"radio",label:"Whole window",checked:o.repeatKey==="",onClick:()=>{o.setRepeatKey("")}},...o.repeatChoices.map(({key:a,name:d,unit:g})=>({type:"radio",label:`${d} \xB7 ${g.toLocaleString()} bp unit`,checked:o.repeatKey===a,onClick:()=>{o.setRepeatKey(a)}}))]}]:[],...o.hostPlacesX?[]:[{label:"Zoom in",onClick:()=>{o.zoom(1.5,o.width/2,o.canvasHeight/2)}},{label:"Zoom out",onClick:()=>{o.zoom(1/1.5,o.width/2,o.canvasHeight/2)}},{label:"Zoom to fit",onClick:()=>{o.zoomToFit()}}],{type:"checkbox",label:"Mark bubbles",checked:o.showBubbles,onClick:()=>{o.setShowBubbles(!o.showBubbles)}},{type:"checkbox",label:"Show deletion edges",checked:o.showDeletionEdges,onClick:()=>{o.setShowDeletionEdges(!o.showDeletionEdges)}},{type:"checkbox",label:"Genes on the backbone",checked:o.showGenes,onClick:()=>{o.setShowGenes(!o.showGenes)}},{label:"Settings",icon:Xt,onClick:()=>{(0,Te.getSession)(n).queueDialog(a=>[ua,{model:o,open:!0,onClose:a}])}}]}})).actions(n=>({applyConfig(){let{pane:o,configured:r}=n;r.layoutMode||o.setLayoutMode((0,j.getConf)(n,"layoutMode")),r.colorScheme||o.setColorScheme((0,j.getConf)(n,"colorScheme")),r.height||o.setPaneHeight((0,j.getConf)(n,"height")),n.configured={layoutMode:!0,colorScheme:!0,height:!0}},resizeHeight(o){let r=n.height,i=Math.max(r+o,40);return n.pane.setPaneHeight(i),i-r}})).actions(n=>({afterAttach(){let{pane:o}=n;n.applyConfig(),o.adoptTrack(n.trackId),o.subgraphHaplotypes===void 0&&n.adapterConfig.type==="GbzBaseSyntenyAdapter"&&o.setSubgraphHaplotypes(go(n.parentTrack.configuration)),o.startHosting(),(0,H.addDisposer)(n,(0,nt.autorun)(()=>{let{host:r}=n;r&&(o.setWidth(r.width),o.pairWithLinearView(r.id))},{name:"LinearGraphDisplayHost"})),(0,H.addDisposer)(n,(0,nt.autorun)(()=>{let r=o.canvasHeight;n.height!==r&&n.setHeight(r)},{name:"LinearGraphDisplayHeight"}))}}))}function ot(e){e.addDisplayType(()=>{let t=vo();return new $o.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:Do(t),trackType:["FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,Oo.lazy)(()=>import("./chunks/LinearGraphDisplay-7POYIRIB.js"))})})}var zo=y(fe(),1);var rt=y(B(),1),_o=y(D(),1);function at(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 pa=(0,rt.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,rt.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:_o.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:at}),jo=pa;function it(e){e.addAdapterType(()=>new zo.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:at,configSchema:jo,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-FJIBTKQY.js").then(t=>t.default)}))}var Ko=y(fe(),1);var Ie=y(B(),1),Xo=y(D(),1);function Wo(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function Yo(e){let{uri:t,baseUri:n,csi:o}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:Wo(`${t}.segs.bed.gz`,n,o),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:Wo(`${t}.links.bed.gz`,n,o)}:e}function st(e){let{coarse:t,baseUri:n}=e;return Yo(typeof t=="object"&&t!==null?{...e,coarse:Yo({baseUri:n,...t})}:e)}var Ae=(e,t)=>(0,Ie.ConfigurationSchema)(e,{indexType:{model:Xo.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),ga=(0,Ie.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Ae("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:Ae("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),ma=(0,Ie.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Ae("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:Ae("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:ga},{explicitlyTyped:!0,preProcessSnapshot:st}),Uo=ma;function dt(e){e.addAdapterType(()=>new Ko.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:st,configSchema:Uo,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-7ZGKJJYW.js").then(t=>t.default)}))}var Jo=y(re(),1),Zo=y(dr(),1),ut=y(sr(),1),Qo=y(pr(),1);function ct(e){return typeof e=="object"&&e!==null}function la(e){let t;if(ct(e)){let{refName:n,start:o,end:r,assemblyName:i}=e;typeof n=="string"&&typeof o=="number"&&typeof r=="number"&&(t={refName:n,start:o,end:r,assemblyName:typeof i=="string"?i:void 0})}return t}function ha(e,t,n){let o=e.connectedViewId;return o===void 0||o===t||!n.has(o)}function ba(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function qo(e,t,n){let o=[],r=new Set(te(e).map(i=>ct(i)?i.id:void 0));for(let i of e)if(ct(i)&&i.type==="GraphGenomeView"&&ha(i,t,r)){let a=la(i.hoverHighlight);a&&ba(a,n)&&o.push({key:typeof i.id=="string"?i.id:"graph",region:a})}return o}var z=y(X(),1),fa=(0,Qo.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,Zo.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),ya=(0,ut.observer)(function({model:t,region:n}){let{classes:o}=fa(),r=t.getHighlightCoords(n);return r?(0,z.jsx)("div",{"data-testid":"graph-node-highlight",className:o.highlight,style:{left:r.left,width:r.width}}):null}),wa=(0,ut.observer)(function({model:t}){let{views:n}=(0,Jo.getSession)(t);return(0,z.jsx)(z.Fragment,{children:qo([...n],t.id,t.assemblyNames).map(({key:o,region:r})=>(0,z.jsx)(ya,{model:t,region:r},`graph-hover-${o}`))})}),er=wa;var tr=y(X(),1),ka="LinearGenomeView-TracksContainerComponent";function pt(e){e.contributeToExtensionPoint(ka,({model:t})=>(0,tr.jsx)(er,{model:t},"graphgenomeview-hover-highlight"))}var nr="GraphGenomeView";var or="4.0.3";var gt=class extends rr.default{constructor(){super(...arguments);this.name=nr;this.version=or}install(n){Qe(n),ot(n),et(n),pt(n),dt(n),it(n),Ee(n),He(n),n.addRpcMethod(()=>new Z(n)),n.addRpcMethod(()=>new J(n))}configure(n){try{(0,ar.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:qt,onClick:o=>{o.addView("GraphGenomeView",{})}})}catch(o){console.warn("[GraphGenomeView] could not add the Add menu entry",o)}}};export{gt as default};
1
+ import{a as ir}from"./chunks/chunk-KWAXLUPQ.js";import{a as D}from"./chunks/chunk-FCWXYIFC.js";import{a as yt}from"./chunks/chunk-D7XFR2IV.js";import{a as re}from"./chunks/chunk-J4OLMLS5.js";import{A as me,B as Et,C as Fe,G as _t,H as jt,I as zt,J as le,K as Wt,L as Yt,M as Xt,N as he,O as K,P as Ut,R as Kt,a as ft,c as ur,d as Mt,e as U,g as Gt,h as se,i as de,o as Nt,q as At,r as It,s as Pt,t as ve,v as pe,w as ge,x as Be,y as Ft,z as Vt}from"./chunks/chunk-5WJPRX4N.js";import{c as Rt}from"./chunks/chunk-ZNGDWZ6Z.js";import{D as Ve,E as Ee,F as pr,b as N,d as wt,f as kt,g as xt,i as ie,j as Ce,l as St,m as Lt,n as Tt,o as ce,p as ue,q as Ct,r as vt,s as Bt,u as Ht,v as Dt,w as Ot,x as $t}from"./chunks/chunk-OP7IRVG6.js";import"./chunks/chunk-F4C3BEPV.js";import{a as X,b as sr,c as dr,d as cr,e as ae}from"./chunks/chunk-XEJ47DLD.js";import{a as v,b as y}from"./chunks/chunk-FY3BTKY4.js";var Jt=v((xa,qt)=>{qt.exports=JBrowseExports["@jbrowse/core/Plugin"]});var fe=v((Ra,Qt)=>{Qt.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var B=v((Ma,en)=>{en.exports=JBrowseExports["@jbrowse/core/configuration"]});var sn=v((Aa,an)=>{an.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var q=v((Ia,dn)=>{dn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var bn=v((Va,hn)=>{hn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var yn=v((Ea,fn)=>{fn.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var kn=v((Ha,wn)=>{wn.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var Sn=v((Da,xn)=>{xn.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var _e=v((Oa,Ln)=>{Ln.exports=JBrowseExports.mobx});var To=v((hs,No)=>{No.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"]});var Io=v((bs,Ao)=>{Ao.exports=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"]});var Fo=v((ks,Bo)=>{Bo.exports=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"]});var rr=y(Jt(),1),ar=y(re(),1);var be=y(X(),1),Zt=(0,ft.createSvgIcon)([(0,be.jsx)("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),(0,be.jsx)("circle",{cx:"14.8",cy:"18",r:"2"},"1"),(0,be.jsx)("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var rn=y(fe(),1);var tn=y(B(),1),nn=y(D(),1),gr=(0,tn.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"}},subgraphSnarls:{type:"stringEnum",model:nn.types.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:"contained"},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:1e3,advanced:!0},nodeLimit:{type:"number",defaultValue:1e5,advanced:!0}},{explicitlyTyped:!0,preProcessSnapshot:e=>e.uri?{...e,gbzDbLocation:{uri:e.uri,baseUri:e.baseUri}}:e}),on=gr;function He(e){e.addAdapterType(()=>new rn.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:on,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-BLSUE5LT.js").then(t=>t.default)}))}var cn=y(sn(),1),un=y(q(),1);function mr(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var J=class extends un.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:o,region:r,sessionId:i,opts:a,signal:d}=n,{dataAdapter:g}=await(0,cn.getAdapter)(this.pluginManager,i,o);return mr(g)?g.getSubgraph(r,{...a,signal:d}):(console.warn(`[GetSubgraph] ${g.constructor.name} does not implement getSubgraph`),"")}};var pn=y(ae(),1),gn=y(q(),1),mn=y(D(),1),lr=(0,pn.lazy)(()=>import("./chunks/AddTrackWorkflow-I4EPGFPJ.js"));function De(e){e.addAddTrackWorkflowType(()=>new gn.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:lr,stateModel:mn.types.model({})}))}var ln=y(q(),1);var Oe;function $e(){return Oe??=import("./chunks/bandage-layout-FIOZ7B3E.js").then(e=>e.default()).catch(e=>{throw Oe=void 0,e}),Oe}var Z=class extends ln.RpcMethodType{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(n){let{graph:o,options:r,statusCallback:i}=n;i?.("Loading layout engine");let a=await $e();i?.("Computing layout");let d=performance.now(),g=a.computeLayout(o,r),l=performance.now()-d;return{result:g,duration:l}}};var Ro=y(ae(),1),Mo=y(bn(),1),Go=y(yn(),1);var $=y(B(),1),wo=y(kn(),1),ko=y(cr(),1),G=y(re(),1),xo=y(ir(),1),s=y(D(),1),So=y(Sn(),1),Lo=y(ur(),1),T=y(_e(),1);var hr=.9,je=2,br=1e3;function Rn(e,t,n,o=r=>r){let r=new Map(e.nodes.map(a=>[a.name,a])),i=[];for(let a of t){let d=[],g,l=[],x=[];for(let b of se(a)){let f=r.get(b),h=f&&n[f.id];if(!(!f||!h?.length)){if(N(f)&&(f.stable.start<a.start||f.stable.start>=a.end)){x.push(h[Math.floor(h.length/2)]);continue}l.push(f.id),d.push(de(h.length===1?[h[0],h[0]]:h));for(let w of h)(!g||w.y<g.y)&&(g=w)}}if(!g)continue;let M=x.length?{x:x.reduce((b,f)=>b+f.x,0)/x.length,y:x.reduce((b,f)=>b+f.y,0)/x.length}:g,p=new Map;for(let b of a.routes??[])for(let f of new Set(b.steps))p.set(f,(p.get(f)??0)+1);let u=[];for(let b of a.routes??[]){if(a.longestAlleleLength<br)break;if(b.steps.length===0)continue;let f=Math.min(...b.steps.map(c=>p.get(c))),h,w=-1;for(let c of b.steps)if(p.get(c)===f)for(let m of n[c]??[]){let k=Math.hypot(m.x-M.x,m.y-M.y);k>w&&(w=k,h=m)}h&&u.push({route:b,at:h,text:fr(b,o)})}i.push({bubble:a,...U(a),path:d.join(""),top:g,members:l.length,nodeIds:l,whole:l.length>=hr*e.nodes.length,routes:u})}return i}function fr(e,t){let n=[...new Set(e.walks.map(t))].sort(),o=n.slice(0,je).join(", "),r=n.length>je?` +${n.length-je}`:"";return`${o}${r} \xB7 ${Mt(e.bp)}`}function Mn(e){if(!e.nodes.some(N))return[];let t=new Map(e.nodes.map(p=>[p.id,p])),n=Nt(e),o=new Map(n.map((p,u)=>[p,u])),r=new Int32Array(n.length+1),i=new Map,a=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;a.add(`${p.from}>${p.to}`).add(`${p.to}>${p.from}`);let[f,h]=u<b?[u,b]:[b,u];r[f+1]++,r[h]--;let[w,c]=u<b?[p.from,p.to]:[p.to,p.from];(i.get(w)??i.set(w,new Set).get(w)).add(c)}for(let p=1;p<r.length;p++)r[p]+=r[p-1];let d=e.nodes.filter(N).sort((p,u)=>p.stable.start-u.stable.start),g=new Set([d[0].id,d.at(-1).id]),l=d.map(p=>[p,o.get(p.id)]).filter(([p,u])=>g.has(p.id)||r[u]===0).sort(([p,u],[b,f])=>u-f||p.stable.start-b.stable.start),x=e.paths?.map(p=>{let u=new Map;return p.nodeIds.forEach((b,f)=>{u.has(b)||u.set(b,f)}),u}),M=[];for(let p=0;p+1<l.length;p++){let[u,b]=l[p],[f,h]=l[p+1],w=n.slice(b+1,h);if(w.length===0)continue;let c=new Map([[u.id,{min:0,max:0,n:1}]]);for(let P of[u.id,...w]){let C=c.get(P);if(C)for(let E of i.get(P)??[]){if(o.get(E)>h)continue;let bt=E===f.id?0:t.get(E).length,Pe=c.get(E);c.set(E,{min:Math.min(Pe?.min??1/0,C.min+bt),max:Math.max(Pe?.max??-1/0,C.max+bt),n:Math.min(Rt,C.n+(Pe?.n??0))})}}let m=x&&yr(e,t,x,u.id,f.id),k=m?.n?m:void 0,L=k??c.get(f.id)??{min:0,max:0,n:0},R=m!==void 0&&m.left>0,S=u.stable.start+u.length,A=f.stable.start,I=[u.id,...w.filter(P=>N(t.get(P))),f.id],V=I.some((P,C)=>C>0&&!a.has(`${I[C-1]}>${P}`)),W=V||R,O=V&&!k;M.push({refName:u.stable.refName,start:S,end:A,segmentCount:w.length+2,pathCount:L.n,inversion:!1,shortestAlleleLength:O?A-S:L.min,longestAlleleLength:O?A-S:L.max,segments:[u,...w.map(P=>t.get(P)),f].map(P=>P.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:W,routes:k?.routes})}return M}function yr(e,t,n,o,r){let i=new Map,a=1/0,d=-1/0,g=0;return e.paths.forEach((l,x)=>{let M=n[x].get(o),p=n[x].get(r);if(M===void 0||p===void 0){(M!==void 0||p!==void 0)&&g++;return}let u=l.nodeIds.slice(Math.min(M,p)+1,Math.max(M,p));p<M&&u.reverse();let b=0;for(let w of u)b+=t.get(w)?.length??0;let f=u.join(","),h=i.get(f)??{steps:u,bp:b,walks:[]};h.walks.push(l.name),i.set(f,h),a=Math.min(a,b),d=Math.max(d,b)}),i.size||g?{min:a,max:d,n:i.size,left:g,routes:[...i.values()]}:void 0}function Gn(e,t){let n=new Set(t),o=e.nodes.filter(a=>n.has(a.name)),r=new Set(o.map(a=>a.id)),i=e.paths?.map(a=>({...a,nodeIds:a.nodeIds.filter(d=>r.has(d))})).filter(a=>a.nodeIds.length>0);return{name:e.name,nodes:o,edges:e.edges.filter(a=>r.has(a.from)&&r.has(a.to)),...i?.length?{paths:i}:{},anchorPaths:e.anchorPaths,pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}var ze=new Set(["Gff3TabixAdapter","Gff3Adapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),wr=/gene|refseq|gencode|ensembl|annotation/i;function Nn(e,t){if(t)return e.find(o=>o.trackId===t);let n=e.filter(o=>ze.has(o.adapterType));return n.find(o=>wr.test(`${o.trackId} ${o.name??""}`))??n[0]}function F(e,t){return typeof e.get=="function"?e.get(t):e[t]}function Tn(e,t){F(e,"type")==="exon"&&t.push({start:F(e,"start"),end:F(e,"end")});let o=F(e,"subfeatures");for(let r of o??[])Tn(r,t)}function kr(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 An(e){let t=[];for(let n of e){let o=F(n,"gene_name")??F(n,"name")??F(n,"id"),r=F(n,"start"),i=F(n,"end");if(!o||!(i>r))continue;let a=[];Tn(n,a),t.push({name:o,refName:F(n,"refName"),start:r,end:i,strand:F(n,"strand")??0,exons:a.length?kr(a):[{start:r,end:i}]})}return t}function In(e){return e.split("#").at(-1)}function Pn(e,t,n){let o=new Map,r=new Map;for(let a of e.nodes)if(N(a)&&n[a.id]?.length){let{refName:d}=a.stable,g=r.get(d)??r.set(d,In(d)).get(d),l=o.get(g)??o.set(g,{nodes:[],reach:0}).get(g);l.nodes.push(a),l.reach=Math.max(l.reach,a.length)}for(let{nodes:a}of o.values())a.sort((d,g)=>d.stable.start-g.stable.start);let i=[];for(let a of t){let d=o.get(In(a.refName));if(!d)continue;let g=[],l,x=1/0,M=0,p=(a.start+a.end)/2,{nodes:u,reach:b}=d;for(let f=kt(u,a.start-b);f<u.length&&u[f].stable.start<a.end;f++){let h=u[f],w=h.stable.start,c=w+h.length;if(c<=a.start)continue;let m=n[h.id];M+=Math.min(c,a.end)-Math.max(w,a.start);for(let R of a.exons){let S=Math.max(R.start,w),A=Math.min(R.end,c);if(A<=S)continue;let I=ve(m,(S-w)/h.length,(A-w)/h.length);I.length===1&&I.push({...I[0]}),g.push(de(I))}let k=Math.min(Math.max(p,w),c),L=Math.abs(k-p);if(L<x){x=L;let[R]=ve(m,(k-w)/h.length,(k-w)/h.length);l=R}}l&&i.push({gene:a,exons:g.join(""),at:l,covered:M/(a.end-a.start)})}return i}function xr(e,t){let n=e.indexOf(":"),o=e.indexOf(":",n+1);if(n!==-1&&o!==-1){let r=e.slice(0,n),i=e.slice(n+1,o),a=e.slice(o+1);i==="i"||i==="f"?t[r]=+a:i==="Z"&&(t[r]=a)}}function Q(e){let t={};for(let n of e)xr(n,t);return t}function We(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 Cn=62,Sr=60;function Lr(e){let t=[],n="+",o=0;function r(i){i>o&&t.push({id:e.slice(o,i),strand:n})}for(let i=0;i<e.length;i++){let a=e.charCodeAt(i);(a===Cn||a===Sr)&&(r(i),n=a===Cn?"+":"-",o=i+1)}return r(e.length),t}function Ye(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(Q(r))}else if(o.startsWith("S")){let[,r,...i]=o.split(" "),a,d,g,l=!1,x=i[0]??"*";/^\d+$/.test(x)?(a=+x,d=i[1]??"*",g=i.slice(2)):(l=!0,d=x,a=d==="*"?0:d.length,g=i.slice(1));let M=Q(g);l&&"LN"in M&&(a=+M.LN),t.nodes.push({id:r,length:a,sequence:d,tags:M})}else if(o.startsWith("E")){let[,,r,i,,,,,a,...d]=o.split(" ");r&&i&&t.links.push({source:r.slice(0,-1),target:i.slice(0,-1),strand1:r.at(-1),strand2:i.at(-1),cigar:a??"*",tags:Q(d)})}else if(o.startsWith("L")){let[,r,i,a,d,g,...l]=o.split(" ");r&&a&&d&&t.links.push({source:r,target:a,strand1:i,strand2:d,cigar:g??"*",tags:Q(l)})}else if(o.startsWith("W")){let[,r,i,a,d,g,l,...x]=o.split(" ");r&&i&&a&&d&&g&&l&&t.walks.push({sample:r,haplotype:+i,contig:a,start:d==="*"?-1:+d,end:g==="*"?-1:+g,segments:Lr(l),tags:Q(x)})}else if(o.startsWith("P")){let[,r,i,...a]=o.split(" ");r&&i&&t.paths.push({name:r,path:i,rest:a})}}return t}function Rr(e){let t=new Map,n=new Map;function o(i,a){t.has(i)||t.set(i,a)}function r(i,a){o(i,a),n.set(i,(n.get(i)??0)+1)}for(let i of e.links)o(i.source,i.strand1==="-"?"-":"+"),o(i.target,i.strand2==="-"?"-":"+");for(let i of e.paths)for(let a of i.path.split(","))r(a.slice(0,-1),a.endsWith("-")?"-":"+");for(let i of e.walks)for(let a of i.segments)r(a.id,a.strand==="-"?"-":"+");return{canonical:t,traversals:n}}function Mr(e){return[...e.paths.map(t=>({...ue(t.name),steps:t.path.split(",").map(n=>({id:n.slice(0,-1),strand:n.endsWith("-")?"-":"+"}))})),...e.walks.map(t=>({name:`${t.sample}#${t.haplotype}#${t.contig}`,start:t.start===-1?0:t.start,steps:t.segments.map(n=>({id:n.id,strand:n.strand==="-"?"-":"+"}))}))]}function Gr(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 ee=e=>typeof e=="number"&&e>0?e:void 0;function Nr({tags:e,length:t}){let n=ee(e.RC)??ee(e.FC)??ee(e.KC);return ee(e.dp)??ee(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function Tr(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:We(e),samples:Gr(e)}}function vn(e,t="Imported GFA"){let n=[],o=[],{canonical:r,traversals:i}=Rr(e),a=u=>`${u}${r.get(u)??"+"}`;for(let u of e.nodes){let b=Nr(u)??Math.max(i.get(u.id)??1,1);n.push(Tr(u,r.get(u.id)??"+",b))}for(let u of e.links)o.push({from:a(u.source),to:a(u.target),fromStrand:u.strand1==="-"?"-":"+",toStrand:u.strand2==="-"?"-":"+"});let d=[],g=new Map,l=(u,b)=>[u,b].sort().join("--");function x(u,b){for(let f=0;f<u.length-1;f++){let h=l(u[f],u[f+1]);g.has(h)||g.set(h,new Set),g.get(h).add(b)}}for(let u of e.paths){let b=u.path.split(",").map(f=>a(f.slice(0,-1)));d.push({name:u.name,nodeIds:b}),x(b,u.name)}for(let u of e.walks){let b=u.segments.map(h=>a(h.id)),f=`${u.sample}#${u.haplotype}#${u.contig}`;d.push({name:f,nodeIds:b,sample:u.sample,haplotype:u.haplotype,contig:u.contig}),x(b,f)}for(let u of o){let b=g.get(l(u.from,u.to));b&&b.size>0&&(u.pathIds=[...b])}let M=new Map(e.nodes.map(u=>[u.id,u.length])),p=e.paths.length>0||e.walks.length>0?Ct(Mr(e),u=>M.get(u)??0):void 0;return{name:t,nodes:n,edges:o,paths:d.length>0?d:void 0,anchorPaths:p?.anchorPaths,pathVisits:p?.pathVisits,anchoredBy:n.some(u=>u.stable)?"tags":void 0}}function ye(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 Bn(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function Fn(e,t){let n=Bn(e.dynamicBlocks.contentBlocks.filter(r=>r.refName===t.refName&&r.assemblyName===t.assemblyName)),{bpPerPx:o}=e;return n&&o>0?{scale:1/o,translateX:n.offsetPx-e.offsetPx-n.start/o}:void 0}function Xe(e){let t=Bn(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 Ue(e,t,n=!0){let o=e.end-e.start,r=n?Math.max(0,Math.min(e.span,(t-o)/2)):0;return{refName:e.refName,assemblyName:e.assemblyName,start:Math.max(e.regionStart,Math.floor(e.start-r)),end:Math.min(e.regionEnd,Math.ceil(e.end+r))}}function Vn(e,t,n=!0){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;if(n)return e.start<=t.start&&t.end<=e.end;let o=Ue(t,1/0,!1);return Math.abs(e.start-o.start)<1&&Math.abs(e.end-o.end)<1}var En=y(B(),1),Hn=y(D(),1),Ar="rgb(60,65,72)";function Dn({start:e,end:t}){let o=`min(300, max(0, ((get(feature,'start')+get(feature,'end'))/2 - ${e}) / ${t-e} * 300))`;return`jexl:get(feature,'rank')>0 ? '${Ar}' : 'hsl(' + ${o} + ',70%,50%)'`}function Ir(e){return typeof e=="object"&&e!==null&&"id"in e&&Array.isArray(e.tracks)}function On(e,t,n){for(let o of e)if(Ir(o)&&(t===void 0||o.id===t)){let i=o.tracks?.find(a=>a.configuration.trackId===n)?.displays[0];if(i?.type==="LinearBasicDisplay")return i}}function $n(e,t){let{color:n}=(0,Hn.getSnapshot)(e.configuration);(typeof n=="object"&&n!==null&&"value"in n?n.value:n)!==t&&(0,En.setConf)(e,"color",t)}function _n(e,t){let n=e.nodes.filter(h=>N(h)&&(t[h.id]?.length??0)>0);if(n.length<2)return t;let o=n.map(h=>{let w=t[h.id],c=w[Math.floor(w.length/2)];return{x:c.x,y:c.y,r:h.stable.start+h.length/2,w:h.length}}),r=o.reduce((h,w)=>h+w.w,0),i=o.reduce((h,w)=>h+w.x*w.w,0)/r,a=o.reduce((h,w)=>h+w.y*w.w,0)/r,d=o.reduce((h,w)=>h+w.r*w.w,0)/r,g=0,l=0;for(let h of o)g+=h.w*(h.x-i)*(h.r-d),l+=h.w*(h.y-a)*(h.r-d);let x=-Math.atan2(l,g),M=Math.cos(x),p=Math.sin(x),u={};for(let[h,w]of Object.entries(t))u[h]=w.map(c=>{let m=c.x-i,k=c.y-a;return{x:i+M*m-p*k,y:a+p*m+M*k}});let b=0,f=0;for(let h of e.nodes)if(!N(h))for(let w of u[h.id]??[])w.y>a?b++:f++;if(f>b)for(let h of Object.values(u))for(let w of h)w.y=2*a-w.y;return u}var jn=30;function Pr(e,t){let{opts:n}=t,o=new Map(t.nodes.map(p=>[p.id,ie(n,p.length)])),r=p=>o.get(p)??n.minimumNodeLength,i=e.nodes.filter(N).sort((p,u)=>p.stable.start-u.stable.start),a=new Map,d=0;for(let p of i)a.set(p.id,{x:d,y:0}),d+=r(p.id)+n.edgeLength;let g=pe(e),l=new Map(i.map(p=>[p.id,0])),x=i.map(p=>p.id);for(let p of x){let u=a.get(p),b=l.get(p)+1;for(let f of g.get(p)??[])l.has(f)||(l.set(f,b),a.set(f,{x:u.x+r(p)/2,y:jn*b}),x.push(f))}let M=0;for(let p of e.nodes)a.has(p.id)||a.set(p.id,{x:M++*d/e.nodes.length,y:jn*3});return a}function zn(e,t){let n=Pr(e,t);return t.nodes.map(o=>({...o,...n.get(o.id)}))}var Ke=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),Cr=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function Yn(e,t){return t?e.find(o=>o.trackId===t):e.filter(o=>Ke.has(o.adapterType)).find(o=>Cr.test(`${o.trackId} ${o.name??""}`))}function ke(e,t){return typeof e.get=="function"?e.get(t):e[t]}var Xn=/^\w+=[^;]*(;\w+=[^;]*)*$/;function vr(e){let t=ke(e,"name");if(!(typeof t!="string"||!Xn.test(t)))return Object.fromEntries(t.split(";").map(n=>{let o=n.indexOf("=");return[n.slice(0,o),n.slice(o+1)]}))}function we(e,t){let n=ke(e,t);return n!==void 0?n:ke(e,"INFO")?.[t]??vr(e)?.[t]}var Un=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],Br=["RUL","period","PERIOD","consensusSize","unit","unitLength"],Fr=["TRID","REPID","VARID","ID","name","id"];function xe(e,t){for(let n of t){let o=we(e,n),r=String((Array.isArray(o)?o[0]:o)??"").split(",")[0].trim();if(r!==""&&r!==".")return r}}var Vr=/^[ACGTURYSWKMBDHVN]+$/i;function Er(e){let t=Number(xe(e,Br));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=xe(e,Un);return n&&Vr.test(n)?n.length:void 0}function Wn(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 Hr(e){let t=ke(e,"samples"),n={};for(let[o,r]of Object.entries(t??{})){let i=Wn(r.SD),a=Wn(r.AL).flatMap((d,g)=>d!==void 0&&d>0?[i[g]===void 0?{bp:d}:{bp:d,spanningReads:i[g]}]:[]);a.length>0&&(n[o]=a)}return Object.keys(n).length>0?n:void 0}function Kn(e){let t=[];for(let n of e){let o=we(n,"start"),r=we(n,"end"),i=Er(n);if(!(r>o)||i===void 0)continue;let a=we(n,"refName"),d=xe(n,Un),g=xe(n,Fr);t.push({key:`${a}:${o}-${r}`,name:(g&&!Xn.test(g)?g:void 0)??(d&&d.length<=12?`(${d})n`:`${a}:${(o+1).toLocaleString()}-${r.toLocaleString()}`),refName:a,start:o,end:r,unit:i,motif:d,calls:Hr(n)})}return t.sort((n,o)=>n.start-o.start)}function qn(e,t){let n=e.paths?.find(l=>l.name===t);if(!n)return;let o=new Map(e.nodes.map(l=>[l.id,l])),r=new Map;e.edges.forEach((l,x)=>{r.set(`${l.from}>${l.to}`,x)});let i=new Set(n.nodeIds),a=new Set;for(let l=1;l<n.nodeIds.length;l++){let x=n.nodeIds[l-1],M=n.nodeIds[l],p=r.get(`${x}>${M}`)??r.get(`${M}>${x}`);p!==void 0&&a.add(p)}let d=l=>l.reduce((x,M)=>x+(o.get(M)?.length??0),0),g=e.referencePath?e.paths.find(l=>ue(l.name).name===e.referencePath):void 0;return{name:t,nodeIds:i,edgeIndexes:a,steps:n.nodeIds.length,bp:d(n.nodeIds),referenceBp:g&&g!==n?d(g.nodeIds):void 0}}function Se(e){return typeof e=="object"&&e!==null}function Dr(e){return Se(e)&&typeof e.get=="function"}function Or(e){let t=Dr(e)?e.get("name"):Se(e)?e.name:void 0;return typeof t=="string"?t:void 0}function Jn(e){let t;if(Se(e)&&Se(e.hoverPosition)){let{refName:n,coord:o,coord0:r,assemblyName:i}=e.hoverPosition;typeof n=="string"&&typeof o=="number"&&(t={refName:n,coord:typeof r=="number"?r:o-1,assemblyName:typeof i=="string"?i:void 0,featureName:Or(e.hoverFeature)})}return t}function Zn(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function Qn({hover:e,nodes:t}){let n,o;for(let r of t)r.name===e.featureName?n=r.id:o===void 0&&N(r)&&e.coord>=r.stable.start&&e.coord<r.stable.start+r.length&&(o=r.id);return n??o??null}var qe=y(B(),1);function eo(e){return typeof e=="object"&&e!==null}function $r(e){return eo(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function te(e){return e.flatMap(t=>eo(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function ne({views:e,connectedViewId:t,assemblyName:n}){let o=te(e).filter(i=>$r(i)).filter(i=>i.assemblyNames.includes(n));return o.find(i=>i.id===t)??(o.length===1?o[0]:void 0)}function no(e,t,n){n.catch(o=>{console.error(`[GraphGenomeView] ${t}`,o),e.notifyError?.(`${t}: ${o}`,o)})}var _r=1e3;function Je(e,t=_r){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 oo(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 ro({session:e,location:t,assembly:n,connectedViewId:o,tracks:r=[]}){let i=ne({views:e.views,connectedViewId:o,assemblyName:n}),a;return i?(no(e,`Could not show ${n} ${K(t)}`,Promise.resolve(i.navToLocString(he(t),n))),a=i.id):a=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${K(t)}`,init:{assembly:n,loc:he(t),tracks:r}}).id,a}function ao({session:e,location:t,assembly:n,connectedViewId:o}){let r=ne({views:e.views,connectedViewId:o,assemblyName:n});return r?.addToHighlights?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),r!==void 0}function to(e,t){if(t===void 0)return[];let n=e.tracks.find(r=>(0,qe.readConfObject)(r,"trackId")===t),o=n?(0,qe.readConfObject)(n,"assemblyNames"):[];return Array.isArray(o)?o.filter(r=>typeof r=="string"):[]}function io({session:e,contributors:t,trackId:n,graphTrackId:o}){let r=to(e,o),i=to(e,n),a=t.filter(l=>i.includes(l.sample)),d=a.length>=2?a:t,g={init:{views:d.map(l=>({assembly:l.sample,loc:he(l),...o!==void 0&&r.includes(l.sample)?{tracks:[o]}:{}})),tracks:n?d.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?no(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",g)):e.addView("LinearSyntenyView",g)}var Le=y(B(),1),jr="FeatureTrack";function so({session:e,assemblyName:t,first:n}){let o=[];for(let r of e.tracks){let i=(0,Le.readConfObject)(r,"type"),a=(0,Le.readConfObject)(r,"assemblyNames"),d=(0,Le.readConfObject)(r,"trackId");i===jr&&Array.isArray(a)&&a.includes(t)&&typeof d=="string"&&d!==n&&o.push(d)}return n?[n,...o]:o}var Re=y(B(),1),co=y(yt(),1),zr="SyntenyTrack";function uo(e,t){let n=new Set(t),o=[];for(let r of e.tracks){let i=(0,Re.readConfObject)(r,"type"),a=(0,Re.readConfObject)(r,"assemblyNames"),d=(0,Re.readConfObject)(r,"trackId");if(i===zr&&typeof d=="string"&&Array.isArray(a)){let g=a.filter(l=>n.has(l)).length;g>=2&&o.push({trackId:d,name:(0,co.getTrackName)(r,e),coverage:g})}}return o.sort((r,i)=>i.coverage-r.coverage)}var Ze=y(B(),1),Wr=y(yt(),1);function po(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function go(e){let t=(0,Ze.readConfObject)(e,"assemblyNames"),n=po(t)?t.slice(1):[];return n.length>0?n:void 0}function mo(e){let t=(0,Ze.readConfObject)(e,"assemblyNames");return po(t)?t[0]:void 0}function lo(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}`}var Xr=600,Qe=160,Ur=340,ho=".segs.bed.gz";function Kr(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(ho)?n.slice(0,-ho.length):void 0}var _=40,bo=1.4,qr=1.6,Jr=150,Zr=1;function Me(...e){}var Qr=5e6;function Ge(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var ea=2e4,ta=1e-6,na=100;function et(e){return Math.max(ta,Math.min(na,e))}function tt(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function fo(e){return{minX:-e.translateX/e.scaleX,minY:-e.translateY/e.scaleY,maxX:(e.width-e.translateX)/e.scaleX,maxY:(e.canvasHeight-e.translateY)/e.scaleY}}function oa(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 yo(e,t,n){let o=t-e.h*n;return _-e.minY*n+Math.max(0,o)/2}function ra(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}var Ne=new WeakMap,aa=4;function ia(e){let t=Ne.get(e);return t||(t=new Map,Ne.set(e,t)),t}function sa(e,t){let n=Ne.get(e);n&&e!==t&&Ne.set(t,n)}function da(e,t,n){e.size>=aa&&e.delete(e.keys().next().value),e.set(t,n)}function oe(){return s.types.compose("GraphGenomeView",wo.BaseViewModel,(0,So.RenderLifecycleMixin)(),s.types.model({type:s.types.literal("GraphGenomeView"),layoutQuality:s.types.optional(s.types.number,2),linearLayout:s.types.optional(s.types.boolean,!1),layoutMode:s.types.optional(s.types.enumeration(me),"force"),colorScheme:s.types.optional(s.types.enumeration(ce),"auto"),bubbleSpread:s.types.optional(s.types.enumeration(St),"auto"),nodeWidth:s.types.optional(s.types.enumeration(Ht),"depth"),showBubbles:s.types.optional(s.types.boolean,!0),showDeletionEdges:s.types.optional(s.types.boolean,!1),showGenes:s.types.optional(s.types.boolean,!0),geneTrackId:s.types.optional(s.types.string,""),repeatTrackId:s.types.optional(s.types.string,""),repeatKey:s.types.optional(s.types.string,""),walkRowSamples:s.types.maybe(s.types.frozen()),highlightedPath:s.types.optional(s.types.string,""),referencePath:s.types.optional(s.types.string,""),showPerf:s.types.optional(s.types.boolean,!1),contigThickness:s.types.optional(s.types.number,6),connectorThickness:s.types.optional(s.types.number,2),darkMode:s.types.optional(s.types.boolean,!1),scale:s.types.optional(s.types.number,1),translateX:s.types.optional(s.types.number,0),translateY:s.types.optional(s.types.number,0),drawPaths:s.types.optional(s.types.boolean,!1),paneHeight:s.types.maybe(s.types.number),maxGraphNodes:s.types.optional(s.types.number,ea),maxRegionBp:s.types.optional(s.types.number,Qr),loadedTrackId:s.types.optional(s.types.string,""),loadedRegion:s.types.maybe(s.types.frozen()),subgraphHaplotypes:s.types.maybe(s.types.frozen()),subgraphContext:s.types.optional(s.types.number,1),gfaLocation:s.types.maybe(s.types.frozen()),colorDomain:s.types.maybe(s.types.frozen()),connectedViewId:s.types.maybe(s.types.string),coarseCut:s.types.optional(s.types.boolean,!1)})).volatile(()=>({graph:void 0,layoutResult:void 0,indexBubbles:void 0,geneFeatures:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredEdge:null,selectedNode:null,viewportDirty:0,positionsVersion:0,geometryVersion:0,builtViewport:void 0,draggingNode:null,isPanning:!1,viewportOwner:"fit",hostPaneHeight:void 0,cutNote:void 0,recuts:0,viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0})).views(e=>({get nodeById(){if(e.graph){let t=new Map;for(let n of e.graph.nodes)t.set(n.id,n);return t}},get nodeLengths(){let t=new Map;for(let n of e.graph?.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 showLoading(){return e.error===void 0&&(e.isLoading||(e.graph!==void 0||!!(e.loadedTrackId&&e.loadedRegion)||!!e.gfaLocation)&&e.lastGeometryStrokeCount===void 0)},get canRetryLoad(){return!!(e.loadedTrackId&&e.loadedRegion)||!!e.gfaLocation},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?Et(e.layoutMode,e.graph):!1},get canAnchorLayout(){return e.graph?.nodes.some(t=>t.stable?.rank===0)??!1},get anchorPaths(){return e.graph?.anchorPaths??[]},get pathLegend(){let t=e.graph?.paths;return e.drawPaths&&t&&Ve(t.length)?Ee(t):[]},get walkChoices(){let t=e.graph?.paths;return t?.length?Ee(t):[]},get walkHighlight(){return e.graph&&e.highlightedPath?qn(e.graph,e.highlightedPath):void 0},get effectiveDrawPaths(){return e.drawPaths&&Ve(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get preferredReferencePath(){return e.referencePath===""?e.loadedRegion?.assemblyName:e.referencePath},get rampDomain(){return e.colorDomain??e.loadedRegion},get effectiveColorScheme(){return e.colorScheme!=="auto"?e.colorScheme:e.graph?.anchoredBy?"reference-position":"uniform"},get nodePositions(){return e.layoutResult?.nodePositions},get rowLabels(){return e.layoutResult?.rowLabels??[]},get alleleDeletions(){return e.layoutResult?.alleleDeletions??[]},get pixelRows(){return e.layoutResult?.pixelRows??!1},get zoomPercent(){return`${(e.scale*100).toFixed(1)}%`},get isDefaultViewport(){return e.scale===1&&e.translateX===0&&e.translateY===0}})).views(e=>({get poppedFrom(){return e.popStack.at(-1)},get derivedBubbles(){return e.graph?Mn(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get sourceAdapter(){let t=(0,G.getSession)(e).tracks.find(n=>n.trackId===e.loadedTrackId);return t?(0,$.readConfObject)(t,"adapter"):void 0},get assemblyTrackChoices(){let t=e.loadedRegion;return t?(0,G.getSession)(e).tracks.filter(n=>(0,$.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,$.readConfObject)(n,"name"),adapterType:(0,$.readConfObject)(n,"adapter").type})):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>ze.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>Ke.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return Yn(e.repeatTrackChoices,e.repeatTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)}})).views(e=>({get nodeNeighbors(){return e.graph?pe(e.graph):void 0},get nodeInk(){let{contigThickness:t,nodeWidth:n,nodeById:o}=e,r=e.graph?Dt(e.graph):0;return{maxHalfWidthPx:$t(t,n)/2,halfWidthPx:i=>{let a=o?.get(i);return a?Ot(a,t,n,r)/2:t/2}}},get deletions(){return e.graph&&e.layoutMode!=="walkrows"?At(e.graph):[]},get walkRowBars(){if(e.layoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?Be(e.graph,t,t.unit):Be(e.graph,e.loadedRegion);if(!n)return;let o=e.walkRowSamples,r=o?n.rows.filter(i=>o.includes(i.sample)).sort((i,a)=>o.indexOf(i.sample)-o.indexOf(a.sample)||i.label.localeCompare(a.label)):n.rows;return{...n,rows:zt(r,t?.calls)}},get drawnRowLabels(){let t=this.walkRowBars;return t?[t.reference,...t.rows].map((n,o)=>({label:n.label,y:o*20})):e.rowLabels},get bubbleGlyphs(){return(e.layoutMode==="variants"?e.bubbles:[]).map(n=>({bubble:n,...U(n)}))},get genePins(){Me(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&e.layoutMode!=="variants"&&e.layoutMode!=="walkrows"&&e.graph&&e.geneFeatures&&t?Pn(e.graph,e.geneFeatures,t):[]},get bubbleHalos(){Me(e.positionsVersion);let t=e.layoutResult?.nodePositions;if(!e.showBubbles||e.layoutMode==="variants"||e.layoutMode==="walkrows"||!e.graph||!t)return[];let n=new Map(e.walkChoices.map(o=>[o.name,o.label]));return Rn(e.graph,e.bubbles,t,o=>n.get(o)??o)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.graph?_t(e.graph,e.rampDomain):void 0},get assemblyNames(){let t=e.loadedRegion;return t?[t.assemblyName]:[]},get scaleX(){return tt(e.scale,e.pixelRows).scaleX},get scaleY(){return tt(e.scale,e.pixelRows).scaleY},get axisScale(){return tt(e.scale,e.pixelRows)},get layoutBounds(){let t;if(e.layoutResult){let n=1/0,o=1/0,r=-1/0,i=-1/0;for(let l of Object.values(e.layoutResult.nodePositions))for(let x of l)n=Math.min(n,x.x),o=Math.min(o,x.y),r=Math.max(r,x.x),i=Math.max(i,x.y);let a=e.layoutResult.referenceAxis&&e.popStack.length===0?e.loadedRegion:void 0;a&&a.end>a.start&&(n=a.start,r=a.end);let d=this.walkRowBars,g=d&&e.layoutResult.extent?Ft(d):e.layoutResult.extent;g&&(r=Math.max(r,g.maxX),i=Math.max(i,g.maxY)),t={minX:n,minY:o,w:r-n,h:i-o}}return t},get canvasHeight(){if(e.viewportOwner==="host"&&e.hostPaneHeight!==void 0)return e.hostPaneHeight;let t=this.layoutBounds,n=e.width-_*2,o=Math.max(Qe,e.paneHeight??Xr);if(!t)return o;if(e.pixelRows){let r=e.layoutMode==="variants"?Ur:Qe;return Math.min(o,Math.max(r,t.h+_*2))}return t.w>0&&n>0?Math.min(o,Math.max(Qe,t.h*n/t.w+_*2)):o}})).views(e=>({get geneTrack(){return Nn(e.geneTrackChoices,e.geneTrackId)},get deletionEdgeIndexes(){return new Map(e.deletions.map(t=>[t.edgeIndex,t.bypassed]))},get hiddenEdgeIndexes(){return new Set(e.showDeletionEdges?[]:e.deletions.map(t=>t.edgeIndex))},get referenceRampDomain(){let t=e.referenceRamp;return t?{start:t.start,end:t.start+t.span}:void 0},get hoverHighlight(){let t,n=e.loadedRegion,o=e.hoveredNode,r=e.nodeById,i=e.nodeNeighbors;if(n&&o!==null&&r&&i){let a=ge({nodeId:o,nodeById:r,neighbors:i});a&&(t={refName:n.refName,assemblyName:n.assemblyName,...a})}return t}})).views(e=>({get contributingAssemblies(){let t=e.graph,n=t?wt(t):[];return t?Wt(t,{maxGap:n.length>0?xt(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,G.getSession)(e),n=e.sourceAdapter?.assemblyNameToPanSN,o=new Map(Object.entries(n??{}).map(([i,a])=>[a,i])),r=i=>i!==void 0&&t.has(i)?t.get(i)?.name??i:void 0;return i=>r(o.get(i))??r(i)}})).views(e=>({get launchableAssemblies(){return Xt(oo(e.contributingAssemblies,e.loadedRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.loadedRegion;return t!==void 0&&ne({views:[...(0,G.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),o=n?le(n):void 0,r=o?Yt(e.assemblyResolver,o):void 0,i=e.loadedRegion,a=e.nodeById,d=e.nodeNeighbors,g=i&&a&&d?ge({nodeId:t,nodeById:a,neighbors:d}):void 0,l=i&&g?{sample:i.assemblyName,haplotype:void 0,refName:i.refName,...g}:void 0;return{own:o&&r?{location:Je(o),assembly:r}:void 0,reference:i&&l?{location:Je(l),assembly:i.assemblyName}:void 0,highlight:i&&l?{location:l,assembly:i.assemblyName}:void 0}}})).views(e=>({get coarseAboveBpPerPx(){let n=e.sourceAdapter?.coarse?.aboveBpPerPx;return typeof n=="number"?n:void 0}})).views(e=>({get cutTier(){return e.coarseCut&&e.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(e=>({get regionCapBp(){return e.cutTier==="coarse"?1/0:e.maxRegionBp}})).views(e=>({get host(){let t;try{t=(0,G.getContainingView)(e)}catch{return}return t!==e&&ye(t)?t:void 0}})).views(e=>({get hostPlacesX(){let{host:t,loadedRegion:n,layoutResult:o}=e;return t!==void 0&&t.initialized&&n!==void 0&&o?.referenceAxis===!0&&e.popStack.length===0&&!t.dynamicBlocks.contentBlocks.some(r=>r.refName===n.refName&&r.reversed)}})).views(e=>({get hostFrame(){let{host:t,loadedRegion:n}=e;return e.hostPlacesX&&t&&n?Fn(t,n):void 0}})).actions(e=>({setError(t){e.error=t,e.isLoading=!1},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,e.geometryVersion++},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=vt(n,t);sa(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},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setHighlightedPath(t){e.highlightedPath=t},setPaneHeight(t){e.paneHeight=t,e.viewportOwner==="host"&&(e.hostPaneHeight=t)},adoptTrack(t){e.loadedTrackId!==t&&(e.loadedTrackId=t,e.loadedRegion=void 0,e.coarseCut=!1,e.graph=void 0,e.layoutResult=void 0)},setSubgraphContext(t){e.subgraphContext=t},setWalkRowSamples(t){e.walkRowSamples=t},setSubgraphHaplotypes(t){e.subgraphHaplotypes=t},setMaxRegionBp(t){e.maxRegionBp=t},pairWithLinearView(t){let n=e.connectedViewId;n!==void 0&&te([...(0,G.getSession)(e).views]).some(r=>r.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=t},setHoveredEdge(t){e.hoveredEdge=t},setSelectedNode(t){e.selectedNode=t},setDraggingNode(t){e.draggingNode=t},setPanning(t){e.isPanning=t},stopDragging(){e.draggingNode=null,e.isPanning=!1},clearInteractionState(){e.hoveredNode=null,e.hoveredEdge=null,e.selectedNode=null,e.draggingNode=null,e.isPanning=!1},showNodeDetails(t){let n=e.nodeById?.get(t),o=e.nodeById,r=e.nodeNeighbors;if(n&&o&&r){let i=(0,G.getSession)(e),a=e.loadedRegion,d=a?ge({nodeId:t,nodeById:o,neighbors:r}):void 0;(0,G.isSessionModelWithWidgets)(i)&&i.showWidget(i.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:le(n)?.sample,contributingHaplotype:le(n)?.haplotype,carriedBy:n.samples?.join(", "),...a&&d?{refName:a.refName,assemblyName:a.assemblyName,start:d.start,end:d.end}:{}}}))}},setTransform(t,n,o){let{host:r}=e;e.viewportOwner==="host"&&r?r.horizontalScroll(e.translateX-n):(e.viewportOwner="user",e.scale=et(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 i=et(e.scale*t),a=i/e.scale;e.scale=i,e.translateX=n-(n-e.translateX)*a,e.pixelRows||(e.translateY=o-(o-e.translateY)*a)},setViewportDirty(){e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){let t=e.layoutBounds,n=e.width-_*2,o=e.canvasHeight-_*2;if(e.viewportOwner==="host"){t&&o>0&&(e.translateY=yo(t,o,e.scaleY));return}if(t&&n>0&&o>0&&(t.w>0||!e.pixelRows&&t.h>0)){let r=t.w>0?n/t.w:1/0,i=t.h>0?o/t.h:1/0,a=et(e.pixelRows?r:Math.min(r,i));e.scale=a,e.translateX=_-t.minX*a+(n-t.w*a)/2,e.translateY=yo(t,o,e.pixelRows?1:a)}},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.hostPaneHeight=e.canvasHeight,e.viewportOwner="host"),e.scale=t,e.translateX=n,o&&e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.hostPaneHeight=void 0,e.layoutResult?.referenceAxis?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportDirtyTimer=setTimeout(()=>{(0,s.isAlive)(e)&&e.setViewportDirty()},Jr)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,s.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(o,r,i){let a=e.layoutResult?.nodePositions;if(a?.[o]){for(let d of a[o])d.x+=r,d.y+=i;n()}},scheduleViewportDirty:t}}).actions(e=>{let t;function n(c,m){let k=(0,G.getSession)(e),{rpcManager:L}=k,R="graph",S=c.nodes.some(N);return L.call(R,"GraphComputeLayout",{graph:{nodes:S?zn(c,m):m.nodes,edges:c.edges},options:{quality:e.layoutQuality,linearLayout:e.linearLayout,...m.opts,...S?{rotateComponents:!1}:{}},signal:t?.signal,statusCallback:A=>{e.setStatusMessage((0,G.statusMessageText)(A)??"")}})}function o(c){let m=c.nodes.some(N);return`${e.layoutQuality}|${e.linearLayout}|${e.bubbleSpread}|${m}|${c.referencePath??""}`}function*r(c){let m=performance.now(),k=Fe(e.layoutMode).run(c,e.loadedRegion,e.host?e.layoutResult?.sampleRows:void 0);if(k)return{result:k,duration:performance.now()-m};let L=ia(c),R=o(c),S=L.get(R);if(S)return{result:S,duration:performance.now()-m};let A=Lt(e.bubbleSpread),I=It(c),{result:V,duration:W}=yield n(I.graph,Ce(I.graph,A)),O=Ce(c,A),P=new Map(O.nodes.map(Y=>[Y.id,ie(O.opts,Y.length)])),C=Pt(V.nodePositions,I.runs,Y=>P.get(Y)??0),E={...V,nodePositions:c.nodes.some(N)?_n(c,C):C};return da(L,R,E),{result:E,duration:W}}let i=0;function*a(c){let m=++i,k=()=>e.graph===c&&m===i,L=t?.signal,R;try{R=yield*r(c)}catch(A){if(!k()||L?.aborted)return!1;throw A}let S=k();return S&&(e.layoutResult=R.result,e.setLayoutMs(R.duration)),S}function*d(c,m,k=!1){e.setStatusMessage("Parsing GFA");let L=Ye(c),R=Bt(vn(L,m),e.preferredReferencePath);if(R.nodes.length===0)throw new Error(`No graph segments in ${m}`);if(R.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${R.nodes.length.toLocaleString()} nodes (limit ${e.maxGraphNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);let S=k?e.selectedNode:null;e.graph=R,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),S!==null&&e.nodeById?.has(S)&&(e.selectedNode=S),e.setStatusMessage("Computing layout"),yield*a(R)}let g=0;function l(){let c=++g;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>c===g,signal:t.signal}}function x(){return e.loadedTrackId?(0,G.getSession)(e).tracks.find(c=>c.trackId===e.loadedTrackId):void 0}function*M(c,m,k){let L=Kr(c);if(!(c.type!=="RgfaTabixAdapter"||L===void 0||e.cutTier==="coarse"))try{let R=yield(0,G.getSession)(e).rpcManager.call("graph","CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${L}.bubbles.bed.gz`,baseUri:c.baseUri,assemblyNameToPanSN:c.assemblyNameToPanSN},regions:[m]});k()&&(e.indexBubbles=R.map(S=>({refName:m.refName,start:S.get("start"),end:S.get("end"),segmentCount:S.get("segmentCount"),pathCount:S.get("pathCount")??0,inversion:S.get("inversion"),shortestAlleleLength:S.get("shortestAlleleLength"),longestAlleleLength:S.get("longestAlleleLength"),segments:S.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(R){console.warn("[GraphGenomeView] no bubble index for this graph",R)}}function*p(c,m,k){let L=(0,G.getSession)(e),R=c?L.tracks.find(S=>S.trackId===c):void 0;if(R)try{return yield L.rpcManager.call("graph","CoreGetFeatures",{adapterConfig:(0,$.readConfObject)(R,"adapter"),regions:[m]})}catch(S){console.warn(`[GraphGenomeView] no ${k} for this graph`,S);return}}function*u(c,m){let k=yield*p(e.geneTrack?.trackId,c,"genes");k&&m()&&(e.geneFeatures=An(k))}function*b(c,m){let k=yield*p(e.repeatTrack?.trackId,c,"repeats");k&&m()&&(e.repeatArrays=Kn(k))}function*f(c,m,k={}){let{isLive:L,signal:R}=l(),S=x(),A=m.end-m.start,I=(S&&lo(mo(S),m.assemblyName))??(A>e.regionCapBp?`Region too large (${Ge(A)}) \u2014 zoom in to view graph (max ${Ge(e.regionCapBp)})`:void 0);if(I!==void 0){e.graph=void 0,e.layoutResult=void 0,e.isLoading=!1,e.error=new Error(I);return}e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let V=(0,G.getSession)(e),{rpcManager:W}=V,O="graph",P=performance.now(),C=yield W.call(O,"GetSubgraph",{adapterConfig:c,region:m,opts:k,signal:R});if(!L())return;if(e.setFetchMs(performance.now()-P),!C)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");let E=K(m);if(yield*d(C,E,!0),!L())return;e.setStatusMessage("Reading annotations"),yield Promise.all([(0,s.flow)(M)(c,m,L),(0,s.flow)(u)(m,L),(0,s.flow)(b)(m,L)])}catch(V){L()&&(console.error("[GraphGenomeView.loadFromTabixSubgraph]",V),e.error=V)}finally{L()&&(e.isLoading=!1)}}function*h(){let c=e.loadedRegion,m=x();if(c&&e.loadedTrackId&&!m)e.error=new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`);else if(m&&c){let k=e.cutTier==="coarse";yield*f((0,$.readConfObject)(m,"adapter"),c,{hops:k?0:e.subgraphContext,haplotypes:e.subgraphHaplotypes,tier:k?"coarse":void 0})}}function*w(c,m,k){let{isLive:L,signal:R}=l();e.loadedTrackId="",e.loadedRegion=k,e.coarseCut=!1,e.isLoading=!0,e.error=void 0;try{let S=typeof m=="string"?m:yield m(R);L()&&(yield*d(S,c))}catch(S){L()&&(console.error("[GraphGenomeView.loadWholeGFA]",S),e.error=S)}finally{L()&&(e.isLoading=!1)}return L()}return{clearGraph(){t?.abort(),t=void 0,g++,i++,e.graph=void 0,e.layoutResult=void 0,e.loadedTrackId="",e.loadedRegion=void 0,e.coarseCut=!1,e.cutNote=void 0,e.gfaLocation=void 0,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearInteractionState(),e.clearPerfMetrics()},cancelLoad(){e.canCancelLoad&&(t?.abort(),t=void 0,g++,i++,e.graph=void 0,e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0)},loadGFA:(0,s.flow)(function*(c,m="Imported GFA"){yield*w(m,c)}),loadGFAFromLocation:(0,s.flow)(function*(c){e.setStatusMessage("Fetching GFA");let m=e.loadedRegion,k=yield*w("uri"in c?c.uri.split("/").pop()??"GFA":"GFA",L=>(0,xo.openLocation)(c).readFile({encoding:"utf8",signal:L}),m);m&&k&&e.graph&&(yield*b(m,()=>e.loadedRegion===m))}),loadFromTabixSubgraph:(0,s.flow)(function*(c,m,k={}){e.loadedTrackId=k.trackId??"",e.loadedRegion=k.trackId?m:void 0,e.coarseCut=!1,yield*f(c,m,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes})}),refetchIfNeeded:(0,s.flow)(function*(){e.graph||(yield*h())}),reloadSubgraph:(0,s.flow)(function*(){yield*h()}),reloadRepeats:(0,s.flow)(function*(){let c=e.loadedRegion,m=e.repeatTrack?.trackId;c&&(yield*b(c,()=>e.loadedRegion===c&&e.repeatTrack?.trackId===m))}),reloadGenes:(0,s.flow)(function*(){let c=e.loadedRegion,m=e.geneTrack?.trackId;c&&(yield*u(c,()=>e.loadedRegion===c&&e.geneTrack?.trackId===m))}),popBubble:(0,s.flow)(function*(c){let m=e.graph;if(!m)return;let k=Gn(m,se(c));if(k.nodes.length===0){(0,G.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}=l();e.popStack=[...e.popStack,{graph:m,layoutMode:e.layoutMode,label:m.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let R=`${Gt[U(c).kind]} at ${c.refName}:${c.start.toLocaleString()}`;e.graph={...k,name:R},e.layoutMode==="variants"&&(e.layoutMode="force"),e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*a(e.graph))&&(e.isLoading=!1)}catch(S){L()&&(e.error=S,e.isLoading=!1)}}),unpopBubble:(0,s.flow)(function*(){let c=e.poppedFrom;if(c){e.popStack=e.popStack.slice(0,-1),e.graph=c.graph,e.layoutMode=c.layoutMode,e.indexBubbles=c.indexBubbles,e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*a(c.graph))&&(e.isLoading=!1)}catch(m){e.error=m,e.isLoading=!1}}}),recomputeLayout:(0,s.flow)(function*(){let c=e.graph;if(c){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*a(c))&&(e.isLoading=!1)}catch(m){console.error("[GraphGenomeView.recomputeLayout]",m),e.error=m,e.isLoading=!1}}})}}).actions(e=>({settleOn(t){let n=Fe(e.layoutMode).referenceAxis,o=e.coarseAboveBpPerPx,r=o!==void 0&&t.bpPerPx>o?"coarse":"fine",i=r==="coarse"?1/0:e.maxRegionBp,a=t.end-t.start;return e.cutNote=a>i?`Holding the last cut: ${Ge(a)} is past the ${Ge(i)} a cut may span`:void 0,e.cutNote!==void 0||r===e.cutTier&&Vn(e.loadedRegion,t,n)?!1:(e.coarseCut=r==="coarse",e.loadedRegion=Ue(t,i,n),e.recuts++,e.reloadSubgraph(),!0)}})).actions(e=>({startHosting(){(0,s.addDisposer)(e,(0,T.reaction)(()=>e.hostPlacesX,t=>{t||e.releaseHost()},{name:"GraphHostPlacesX"})),(0,s.addDisposer)(e,(0,T.reaction)(()=>e.hostFrame,t=>{t&&e.hostTransform(t.scale,t.translateX)},{equals:(t,n)=>t?.scale===n?.scale&&t?.translateX===n?.translateX,fireImmediately:!0,name:"GraphHostFrame"})),(0,s.addDisposer)(e,(0,T.reaction)(()=>e.host?.coarseDynamicBlocks,t=>{let{host:n}=e,o=t&&n?Xe(n):void 0;o&&e.settleOn(o)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,s.addDisposer)(e,(0,T.autorun)(()=>{let o=e.rampDomain,r=e.loadedTrackId;if(o&&r&&e.effectiveColorScheme==="reference-position"){let i=(0,T.untracked)(()=>On((0,G.getSession)(e).views,e.connectedViewId,r));i&&$n(i,Dn(o))}})),(0,s.addDisposer)(e,(0,T.autorun)(()=>{e.layoutResult&&(0,T.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,s.addDisposer)(e,(0,T.autorun)(()=>{let o=Jn((0,G.getSession)(e).hovered);(0,T.untracked)(()=>{let r=e.loadedRegion,i=e.graph;r&&i&&e.setHoveredNode(o&&Zn(o,r)?Qn({hover:o,nodes:i.nodes}):null)})})),(0,s.addDisposer)(e,(0,T.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,s.addDisposer)(e,(0,T.autorun)(()=>{let{scale:o}=e,r=fo(e);if(n){n=!1;return}let i=(0,T.untracked)(()=>e.builtViewport);i?.scale===o&&ra(i.bounds,r)||e.scheduleViewportDirty()})),(0,s.addDisposer)(e,(0,T.autorun)(()=>{let o=e.currentRenderingBackend,r=e.hoveredNode,i=e.hoveredEdge,a=e.selectedNode;if(Me(e.geometryVersion),o){let d=new Map;a!==null&&d.set(a,qr),r!==null&&r!==a&&d.set(r,bo),o.setNodeHighlights(d),o.setEdgeHighlight(i,bo),e.renderNow()}}))}e.attachRenderingBackend(t,()=>({upload:n=>{n.resize(e.width,e.canvasHeight);let o=e.nodeById;if(e.nodePositions&&e.graph&&o){Me(e.viewportDirty,e.positionsVersion);let r=performance.now(),i=(0,T.untracked)(()=>oa(fo(e),Zr)),a=jt({nodePositions:e.nodePositions,graph:e.graph,nodeById:o,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:e.effectiveDrawPaths,nodeWidth:e.nodeWidth,highlight:e.walkHighlight,axis:(0,T.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:i,referenceRamp:e.referenceRamp,deletions:e.deletionEdgeIndexes,hiddenEdges:e.hiddenEdgeIndexes,version:e.positionsVersion});return n.uploadGeometry(a),e.setGeometryMetrics(performance.now()-r,a.nodeStrokes.length,{scale:(0,T.untracked)(()=>e.scale),bounds:i}),!0}return!1},render:n=>{if(!e.nodePositions)return!1;let o=(0,Lo.getDpr)();return n.updateTransform({scaleX:e.scaleX*o,scaleY:e.scaleY*o,translateX:e.translateX*o,translateY:e.translateY*o,dpr:o}),n.render(e.darkMode?[.12,.12,.12,1]:[1,1,1,1]),!0}}))}})).actions(e=>({switchLayout(t){e.setLayoutMode(t);let{host:n}=e,o=n?Xe(n):void 0;return o&&e.settleOn(o)?Promise.resolve():e.recomputeLayout()},retryLoad(){e.loadedTrackId&&e.loadedRegion?e.reloadSubgraph():e.gfaLocation&&e.loadGFAFromLocation(e.gfaLocation)},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user"),e.gfaLocation&&!e.graph&&e.loadGFAFromLocation(e.gfaLocation),e.refetchIfNeeded()}})).actions(e=>({showInLinearView(t){let n=(0,G.getSession)(e),o=t.assembly===e.loadedRegion?.assemblyName,r=ro({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:so({session:n,assemblyName:t.assembly,first:e.loadedTrackId&&o?e.loadedTrackId:void 0})});o&&e.pairWithLinearView(r)},highlightInLinearView(t){ao({session:(0,G.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){io({session:(0,G.getSession)(e),contributors:e.launchableAssemblies,trackId:t,graphTrackId:e.loadedTrackId||void 0})}})).views(e=>({get syntenyLaunchTracks(){let t=e.launchableAssemblies.map(n=>n.sample);return t.length>=2?uo((0,G.getSession)(e),t):[]}})).views(e=>({menuItems(){let t=[];for(let n of Ut({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:o=>{e.showInLinearView(o)},onShowSynteny:o=>{e.showSyntenyView(o)}}))(0,ko.pushLaunchViewMenuItem)(t,n);return t}}))}var ca=(0,Go.defineLaunchKeys)()({});function nt(e){e.addViewType(()=>new Mo.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:oe(),launchKeys:ca,ReactComponent:(0,Ro.lazy)(()=>import("./chunks/GraphGenomeView-BQYWWF6Z.js"))}))}function ot(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...o}=t;return n.addView("GraphGenomeView",o),t})}var Oo=y(ae(),1),$o=y(To(),1);var Po=y(B(),1),Co=y(Io(),1),rt=y(D(),1);function vo(){return(0,Po.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:rt.types.enumeration("LayoutMode",me),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:rt.types.enumeration("ColorScheme",ce),defaultValue:"auto"},...(0,Co.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the most the track takes; a layout shorter than it takes only what it needs"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var Vo=y(ae(),1),j=y(B(),1),Eo=y(q(),1),Te=y(re(),1),Ho=y(Fo(),1),H=y(D(),1);var at=y(_e(),1);var ua=(0,Vo.lazy)(()=>import("./chunks/GraphSettingsDialog-KQK4YZN5.js"));function Do(e){let t=oe();return H.types.compose("LinearGraphDisplay",Eo.BaseDisplay,(0,Ho.default)(),H.types.model({type:H.types.literal("LinearGraphDisplay"),configuration:(0,j.ConfigurationReference)(e),pane:H.types.optional(t,()=>({type:"GraphGenomeView"})),configured:H.types.optional(H.types.frozen(),{})})).preProcessSnapshot(n=>{let{pane:o,configured:r}=n;return o?{...n,configured:{layoutMode:o.layoutMode!==void 0,colorScheme:o.colorScheme!==void 0,height:o.paneHeight!==void 0,...r},pane:o.type===void 0?{type:"GraphGenomeView",...o}:o}:n}).views(n=>({get host(){let o;try{o=(0,Te.getContainingView)(n)}catch{return}return ye(o)?o:void 0},get trackId(){return(0,j.getConf)(n.parentTrack,"trackId")}})).views(n=>({trackMenuItems(){let{pane:o}=n,{graph:r}=o,i=o.walkChoices;return[{label:"Layout",subMenu:Vt.map(a=>({type:"radio",label:a.label,checked:o.layoutMode===a.value,disabled:r?!a.available(r):!1,onClick:()=>{o.switchLayout(a.value)}}))},{label:"Color",subMenu:Tt.map(a=>({type:"radio",label:a.label,checked:o.colorScheme===a.value,onClick:()=>{o.setColorScheme(a.value)}}))},...i.length>0?[{label:"Walk",subMenu:[{type:"radio",label:"None",checked:o.highlightedPath==="",onClick:()=>{o.setHighlightedPath("")}},...i.map(a=>({type:"radio",label:a.label,checked:o.highlightedPath===a.name,onClick:()=>{o.setHighlightedPath(a.name)}}))]}]:[],...o.layoutMode==="walkrows"&&o.repeatChoices.length>0?[{label:"Repeat",subMenu:[{type:"radio",label:"Whole window",checked:o.repeatKey==="",onClick:()=>{o.setRepeatKey("")}},...o.repeatChoices.map(({key:a,name:d,unit:g})=>({type:"radio",label:`${d} \xB7 ${g.toLocaleString()} bp unit`,checked:o.repeatKey===a,onClick:()=>{o.setRepeatKey(a)}}))]}]:[],...o.hostPlacesX?[]:[{label:"Zoom in",onClick:()=>{o.zoom(1.5,o.width/2,o.canvasHeight/2)}},{label:"Zoom out",onClick:()=>{o.zoom(1/1.5,o.width/2,o.canvasHeight/2)}},{label:"Zoom to fit",onClick:()=>{o.zoomToFit()}}],{type:"checkbox",label:"Mark bubbles",checked:o.showBubbles,onClick:()=>{o.setShowBubbles(!o.showBubbles)}},{type:"checkbox",label:"Show deletion edges",checked:o.showDeletionEdges,onClick:()=>{o.setShowDeletionEdges(!o.showDeletionEdges)}},{type:"checkbox",label:"Genes on the backbone",checked:o.showGenes,onClick:()=>{o.setShowGenes(!o.showGenes)}},{label:"Settings",icon:Kt,onClick:()=>{(0,Te.getSession)(n).queueDialog(a=>[ua,{model:o,open:!0,onClose:a}])}}]}})).actions(n=>({applyConfig(){let{pane:o,configured:r}=n;r.layoutMode||o.setLayoutMode((0,j.getConf)(n,"layoutMode")),r.colorScheme||o.setColorScheme((0,j.getConf)(n,"colorScheme")),r.height||o.setPaneHeight((0,j.getConf)(n,"height")),n.configured={layoutMode:!0,colorScheme:!0,height:!0}},resizeHeight(o){let r=n.height,i=Math.max(r+o,40);return n.pane.setPaneHeight(i),i-r}})).actions(n=>({afterAttach(){let{pane:o}=n;n.applyConfig(),o.adoptTrack(n.trackId),o.subgraphHaplotypes===void 0&&n.adapterConfig.type==="GbzBaseSyntenyAdapter"&&o.setSubgraphHaplotypes(go(n.parentTrack.configuration)),o.startHosting(),(0,H.addDisposer)(n,(0,at.autorun)(()=>{let{host:r}=n;r&&(o.setWidth(r.width),o.pairWithLinearView(r.id))},{name:"LinearGraphDisplayHost"})),(0,H.addDisposer)(n,(0,at.autorun)(()=>{let r=o.canvasHeight;n.height!==r&&n.setHeight(r)},{name:"LinearGraphDisplayHeight"}))}}))}function it(e){e.addDisplayType(()=>{let t=vo();return new $o.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:Do(t),trackType:["FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,Oo.lazy)(()=>import("./chunks/LinearGraphDisplay-7O3VQHKU.js"))})})}var zo=y(fe(),1);var st=y(B(),1),_o=y(D(),1);function dt(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 pa=(0,st.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,st.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:_o.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:dt}),jo=pa;function ct(e){e.addAdapterType(()=>new zo.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:dt,configSchema:jo,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-FJIBTKQY.js").then(t=>t.default)}))}var Ko=y(fe(),1);var Ie=y(B(),1),Xo=y(D(),1);function Wo(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function Yo(e){let{uri:t,baseUri:n,csi:o}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:Wo(`${t}.segs.bed.gz`,n,o),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:Wo(`${t}.links.bed.gz`,n,o)}:e}function ut(e){let{coarse:t,baseUri:n}=e;return Yo(typeof t=="object"&&t!==null?{...e,coarse:Yo({baseUri:n,...t})}:e)}var Ae=(e,t)=>(0,Ie.ConfigurationSchema)(e,{indexType:{model:Xo.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),ga=(0,Ie.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Ae("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:Ae("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),ma=(0,Ie.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:Ae("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:Ae("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:ga},{explicitlyTyped:!0,preProcessSnapshot:ut}),Uo=ma;function pt(e){e.addAdapterType(()=>new Ko.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:ut,configSchema:Uo,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-7ZGKJJYW.js").then(t=>t.default)}))}var Jo=y(re(),1),Zo=y(dr(),1),mt=y(sr(),1),Qo=y(pr(),1);function gt(e){return typeof e=="object"&&e!==null}function la(e){let t;if(gt(e)){let{refName:n,start:o,end:r,assemblyName:i}=e;typeof n=="string"&&typeof o=="number"&&typeof r=="number"&&(t={refName:n,start:o,end:r,assemblyName:typeof i=="string"?i:void 0})}return t}function ha(e,t,n){let o=e.connectedViewId;return o===void 0||o===t||!n.has(o)}function ba(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function qo(e,t,n){let o=[],r=new Set(te(e).map(i=>gt(i)?i.id:void 0));for(let i of e)if(gt(i)&&i.type==="GraphGenomeView"&&ha(i,t,r)){let a=la(i.hoverHighlight);a&&ba(a,n)&&o.push({key:typeof i.id=="string"?i.id:"graph",region:a})}return o}var z=y(X(),1),fa=(0,Qo.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,Zo.alpha)(e.palette.primary.main,.25),borderLeft:`2px solid ${e.palette.primary.main}`,borderRight:`2px solid ${e.palette.primary.main}`,pointerEvents:"none",zIndex:10}})),ya=(0,mt.observer)(function({model:t,region:n}){let{classes:o}=fa(),r=t.getHighlightCoords(n);return r?(0,z.jsx)("div",{"data-testid":"graph-node-highlight",className:o.highlight,style:{left:r.left,width:r.width}}):null}),wa=(0,mt.observer)(function({model:t}){let{views:n}=(0,Jo.getSession)(t);return(0,z.jsx)(z.Fragment,{children:qo([...n],t.id,t.assemblyNames).map(({key:o,region:r})=>(0,z.jsx)(ya,{model:t,region:r},`graph-hover-${o}`))})}),er=wa;var tr=y(X(),1),ka="LinearGenomeView-TracksContainerComponent";function lt(e){e.contributeToExtensionPoint(ka,({model:t})=>(0,tr.jsx)(er,{model:t},"graphgenomeview-hover-highlight"))}var nr="GraphGenomeView";var or="4.0.4";var ht=class extends rr.default{constructor(){super(...arguments);this.name=nr;this.version=or}install(n){nt(n),it(n),ot(n),lt(n),pt(n),ct(n),He(n),De(n),n.addRpcMethod(()=>new Z(n)),n.addRpcMethod(()=>new J(n))}configure(n){try{(0,ar.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:Zt,onClick:o=>{o.addView("GraphGenomeView",{})}})}catch(o){console.warn("[GraphGenomeView] could not add the Add menu entry",o)}}};export{ht as default};
3
3
  //# sourceMappingURL=jbrowse-plugin-graphgenomeviewer.esm.js.map