jbrowse-plugin-graphgenomeviewer 7.3.1 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{GbzBaseSyntenyAdapter-NYI2YVNG.js → GbzBaseSyntenyAdapter-FZWSXPAE.js} +2 -2
- package/dist/chunks/GbzBaseSyntenyAdapter-FZWSXPAE.js.map +7 -0
- package/dist/chunks/{GraphGenomeView-WJ3FIDY2.js → GraphGenomeView-52OPGZER.js} +2 -2
- package/dist/chunks/{GraphTrackSettingsDialog-ZW7ALMDV.js → GraphTrackSettingsDialog-JHIP2F5N.js} +2 -2
- package/dist/chunks/{HighlightColorDialog-VBZRUKD5.js → HighlightColorDialog-S2WPOSDF.js} +2 -2
- package/dist/chunks/{LinearGraphDisplay-SPOPTJEN.js → LinearGraphDisplay-EF2GE7X7.js} +2 -2
- package/dist/chunks/{MinigraphBubbleAdapter-ABZPIZYV.js → MinigraphBubbleAdapter-XC75BCG3.js} +2 -2
- package/dist/chunks/RgfaTabixAdapter-56X2U424.js +2 -0
- package/dist/chunks/RgfaTabixAdapter-56X2U424.js.map +7 -0
- package/dist/chunks/{WalkTabixSyntenyAdapter-ZJJ4SQHH.js → WalkTabixSyntenyAdapter-2SCAD6IN.js} +2 -2
- package/dist/chunks/chunk-2BTNRN57.js +2 -0
- package/dist/chunks/chunk-2BTNRN57.js.map +7 -0
- package/dist/chunks/{chunk-RW775LQN.js → chunk-2Q4D5RHL.js} +2 -2
- package/dist/chunks/{chunk-RW775LQN.js.map → chunk-2Q4D5RHL.js.map} +2 -2
- package/dist/chunks/{chunk-6MUBJVBG.js → chunk-4AAW5P6N.js} +2 -2
- package/dist/chunks/{chunk-6MUBJVBG.js.map → chunk-4AAW5P6N.js.map} +4 -4
- package/dist/chunks/{chunk-DBPEUVUC.js → chunk-4XM5OBD5.js} +2 -2
- package/dist/chunks/{chunk-DBPEUVUC.js.map → chunk-4XM5OBD5.js.map} +2 -2
- package/dist/chunks/chunk-ADZBAET3.js +3 -0
- package/dist/chunks/chunk-ADZBAET3.js.map +7 -0
- package/dist/chunks/chunk-D5PRXUSS.js +2 -0
- package/dist/chunks/chunk-D5PRXUSS.js.map +7 -0
- package/dist/chunks/{chunk-DUR437TH.js → chunk-JXOLZ5IZ.js} +2 -2
- package/dist/chunks/{chunk-DUR437TH.js.map → chunk-JXOLZ5IZ.js.map} +1 -1
- package/dist/chunks/chunk-KPP5H27W.js +2 -0
- package/dist/chunks/chunk-KPP5H27W.js.map +7 -0
- package/dist/chunks/{chunk-FIRQAKMX.js → chunk-LTN6XZR5.js} +1 -1
- package/dist/chunks/{chunk-FIRQAKMX.js.map → chunk-LTN6XZR5.js.map} +1 -1
- package/dist/chunks/chunk-MLVBPMBU.js +2 -0
- package/dist/chunks/chunk-MLVBPMBU.js.map +7 -0
- package/dist/chunks/chunk-OUHKJSKZ.js +3 -0
- package/dist/chunks/chunk-OUHKJSKZ.js.map +7 -0
- package/dist/chunks/{chunk-WUSKVEA6.js → chunk-PLTIGGGS.js} +2 -2
- package/dist/chunks/{chunk-WUSKVEA6.js.map → chunk-PLTIGGGS.js.map} +2 -2
- package/dist/chunks/chunk-QASFRHPG.js +2 -0
- package/dist/chunks/chunk-SI64QXFH.js +4 -0
- package/dist/chunks/{chunk-VQ77X5QU.js.map → chunk-SI64QXFH.js.map} +4 -4
- package/dist/chunks/{chunk-44CJ2N3N.js → chunk-UW7INEQF.js} +2 -2
- package/dist/chunks/{chunk-44CJ2N3N.js.map → chunk-UW7INEQF.js.map} +4 -4
- package/dist/chunks/chunk-VIVPTP5Z.js +2 -0
- package/dist/chunks/{chunk-7HWHWPRW.js.map → chunk-VIVPTP5Z.js.map} +3 -3
- package/dist/chunks/{chunk-RFDSEB2X.js → chunk-XLSVRKFJ.js} +4 -4
- package/dist/chunks/chunk-XLSVRKFJ.js.map +7 -0
- package/dist/chunks/chunk-XT4U7I3D.js +3 -0
- package/dist/chunks/chunk-XT4U7I3D.js.map +7 -0
- package/dist/chunks/chunk-YBZA7LPQ.js +2 -0
- package/dist/chunks/chunk-YBZA7LPQ.js.map +7 -0
- package/dist/chunks/{chunk-YXVEGNFQ.js → chunk-Z4YNEFPC.js} +2 -2
- package/dist/chunks/renderSvg-IXWB7R54.js +2 -0
- package/dist/chunks/renderSvg-IXWB7R54.js.map +7 -0
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +4 -4
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
- package/package.json +3 -3
- package/src/GbzBaseSyntenyAdapter/GbzBaseSyntenyAdapter.test.ts +10 -4
- package/src/GbzBaseSyntenyAdapter/companion.test.ts +4 -2
- package/src/GetSubgraph.ts +2 -0
- package/src/GraphGenomeView/components/ElTree.tsx +1 -1
- package/src/GraphGenomeView/components/FacetPanels.tsx +4 -1
- package/src/GraphGenomeView/components/PaneContextMenu.tsx +14 -0
- package/src/GraphGenomeView/components/PaneSvg.tsx +2 -1
- package/src/GraphGenomeView/legendSections.ts +3 -3
- package/src/GraphGenomeView/model.test.ts +19 -21
- package/src/GraphGenomeView/model.ts +3 -0
- package/src/GraphGenomeView/pane/fitViews.ts +2 -2
- package/src/GraphGenomeView/pane/paneBase.ts +2 -0
- package/src/GraphGenomeView/pane/renderingActions.ts +9 -0
- package/src/GraphGenomeView/repeats/walkCalls.test.ts +2 -2
- package/src/GraphGenomeView/subgraphLoad.test.ts +18 -2
- package/src/GraphGenomeView/tubeMapPanels.test.ts +4 -2
- package/src/GraphGenomeView/tubeMapPanels.ts +2 -2
- package/src/RgfaTabixAdapter/RgfaTabixAdapter.ts +3 -1
- package/src/RgfaTabixAdapter/configSchema.ts +1 -1
- package/src/RgfaTabixAdapter/test_data/walks4_follow.GRCh38.walks.bed.gz +0 -0
- package/src/RgfaTabixAdapter/test_data/walks4_header.GRCh38.walks.bed.gz +0 -0
- package/src/RgfaTabixAdapter/test_data/walks4_inversion.GRCh38.walks.bed.gz +0 -0
- package/src/RgfaTabixAdapter/test_data/walks4_lanepairs.GRCh38.walks.bed.gz +0 -0
- package/src/RgfaTabixAdapter/test_data/walks4_maxnode.GRCh38.walks.bed.gz +0 -0
- package/src/RgfaTabixAdapter/test_data/walks4_rejoin.GRCh38.walks.bed.gz +0 -0
- package/src/RgfaTabixAdapter/test_data/walks4_twopart.GRCh38.walks.bed.gz +0 -0
- package/src/RgfaTabixAdapter/walkFiles.test.ts +15 -3
- package/src/RgfaTabixAdapter/walkReader.ts +9 -2
- package/src/WalkTabixSyntenyAdapter/configSchema.ts +1 -1
- package/src/WalkTabixSyntenyAdapter/gbzParity.test.ts +2 -3
- package/src/panSNTabix.ts +3 -3
- package/src/version.ts +1 -1
- package/dist/chunks/GbzBaseSyntenyAdapter-NYI2YVNG.js.map +0 -7
- package/dist/chunks/RgfaTabixAdapter-3NQC5QPT.js +0 -2
- package/dist/chunks/RgfaTabixAdapter-3NQC5QPT.js.map +0 -7
- package/dist/chunks/chunk-2M4XYSLG.js +0 -2
- package/dist/chunks/chunk-2M4XYSLG.js.map +0 -7
- package/dist/chunks/chunk-6KUHGRHU.js +0 -2
- package/dist/chunks/chunk-6KUHGRHU.js.map +0 -7
- package/dist/chunks/chunk-7HWHWPRW.js +0 -2
- package/dist/chunks/chunk-BKBH3WGW.js +0 -3
- package/dist/chunks/chunk-BKBH3WGW.js.map +0 -7
- package/dist/chunks/chunk-BXRTG7FU.js +0 -2
- package/dist/chunks/chunk-BXRTG7FU.js.map +0 -7
- package/dist/chunks/chunk-JCAZTNYG.js +0 -2
- package/dist/chunks/chunk-N74HGPAW.js +0 -3
- package/dist/chunks/chunk-N74HGPAW.js.map +0 -7
- package/dist/chunks/chunk-PEDWEPNK.js +0 -2
- package/dist/chunks/chunk-PEDWEPNK.js.map +0 -7
- package/dist/chunks/chunk-PYQG3JHP.js +0 -3
- package/dist/chunks/chunk-PYQG3JHP.js.map +0 -7
- package/dist/chunks/chunk-QTOA4RB7.js +0 -2
- package/dist/chunks/chunk-QTOA4RB7.js.map +0 -7
- package/dist/chunks/chunk-RFDSEB2X.js.map +0 -7
- package/dist/chunks/chunk-VQ77X5QU.js +0 -4
- package/dist/chunks/renderSvg-WD6YDV2I.js +0 -2
- package/dist/chunks/renderSvg-WD6YDV2I.js.map +0 -7
- /package/dist/chunks/{GraphGenomeView-WJ3FIDY2.js.map → GraphGenomeView-52OPGZER.js.map} +0 -0
- /package/dist/chunks/{GraphTrackSettingsDialog-ZW7ALMDV.js.map → GraphTrackSettingsDialog-JHIP2F5N.js.map} +0 -0
- /package/dist/chunks/{HighlightColorDialog-VBZRUKD5.js.map → HighlightColorDialog-S2WPOSDF.js.map} +0 -0
- /package/dist/chunks/{LinearGraphDisplay-SPOPTJEN.js.map → LinearGraphDisplay-EF2GE7X7.js.map} +0 -0
- /package/dist/chunks/{MinigraphBubbleAdapter-ABZPIZYV.js.map → MinigraphBubbleAdapter-XC75BCG3.js.map} +0 -0
- /package/dist/chunks/{WalkTabixSyntenyAdapter-ZJJ4SQHH.js.map → WalkTabixSyntenyAdapter-2SCAD6IN.js.map} +0 -0
- /package/dist/chunks/{chunk-JCAZTNYG.js.map → chunk-QASFRHPG.js.map} +0 -0
- /package/dist/chunks/{chunk-YXVEGNFQ.js.map → chunk-Z4YNEFPC.js.map} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as ut,c as lt,d as dt,g as T,l as ht,r as J,x as yt}from"./chunk-4AAW5P6N.js";import{b as xt}from"./chunk-VIVPTP5Z.js";var pt=20;function ro(t){let n=o=>Math.round(o*100)/100;return t.map((o,e)=>`${e?"L":"M"}${n(o.x)},${n(o.y)}`).join("")}function mt(t,n,o,e,r){let s=Math.hypot(e-n,o-t);if(s===0)return[o,e];let c=(o-t)/s,a=(e-n)/s;return[o+r*c,e+r*a]}function W(t,n){let o=1-n,e=o*o*o,r=3*o*o*n,s=3*o*n*n,c=n*n*n;return{x:e*t.x0+r*t.cx0+s*t.cx1+c*t.x1,y:e*t.y0+r*t.cy0+s*t.cy1+c*t.y1}}function Lt(t){let n=t[Math.floor(t.length/2)];return n?W(n,.5):void 0}function Et(t){let n=1/0,o=1/0,e=-1/0,r=-1/0;for(let s of t)n=Math.min(n,s.x0,s.cx0,s.cx1,s.x1),e=Math.max(e,s.x0,s.cx0,s.cx1,s.x1),o=Math.min(o,s.y0,s.cy0,s.cy1,s.y1),r=Math.max(r,s.y0,s.cy0,s.cy1,s.y1);return{minX:n,minY:o,maxX:e,maxY:r}}function zt(t,n,o){let e=W(t,n),r=W(t,o),s=(o-n)/3,c=Mt(t,n),a=Mt(t,o);return{x0:e.x,y0:e.y,cx0:e.x+c.x*s,cy0:e.y+c.y*s,cx1:r.x-a.x*s,cy1:r.y-a.y*s,x1:r.x,y1:r.y}}function Mt(t,n){let o=1-n,e=3*o*o,r=6*o*n,s=3*n*n;return{x:e*(t.cx0-t.x0)+r*(t.cx1-t.cx0)+s*(t.x1-t.cx1),y:e*(t.cy0-t.y0)+r*(t.cy1-t.cy0)+s*(t.y1-t.cy1)}}var $=32;function Vt(t,n,o,e){let r=[],s=0;return t.forEach((c,a)=>{let f=n[a],u=f/$,l=W(c,0);for(let d=1;d<=$;d++){let x=W(c,d/$);if(Math.max(l.x,x.x)+u>=o.minX&&Math.min(l.x,x.x)-u<=o.maxX&&Math.max(l.y,x.y)+u/e>=o.minY&&Math.min(l.y,x.y)-u/e<=o.maxY){let i=s+f*(d-1)/$,h=s+f*d/$,y=r.at(-1);y&&y[1]>=i?y[1]=h:r.push([i,h])}l=x}s+=f}),r}function so(t,n,o=1,e){let r=t.map(d=>Math.hypot(d.cx0-d.x0,(d.cy0-d.y0)*o)+Math.hypot(d.cx1-d.cx0,(d.cy1-d.cy0)*o)+Math.hypot(d.x1-d.cx1,(d.y1-d.cy1)*o)),s=r.reduce((d,x)=>d+x,0),c=Math.round(s/n),a=Math.max(3,c%2?c:c+1),f=e?Vt(t,r,e,o):void 0,u=0,l=[];for(let d=0;d<a;d+=2){let x=d/a*s,i=(d+1)/a*s;if(f){for(;u<f.length&&f[u][1]<x;)u++;if(u===f.length)break;if(f[u][0]>i)continue}let h=[],y=0;t.forEach((m,b)=>{let p=r[b],M=y+p;p>0&&M>x&&y<i&&h.push(zt(m,Math.max(0,(x-y)/p),Math.min(1,(i-y)/p))),y=M}),h.length&&l.push(h)}return l}function co(t,n,o){let e=new Array(t.length);for(let r=0;r<t.length;r++){let s=t[r];e[r]={x0:s.x0+n,y0:s.y0+o,cx0:s.cx0+n,cy0:s.cy0+o,cx1:s.cx1+n,cy1:s.cy1+o,x1:s.x1+n,y1:s.y1+o}}return e}function H(t,n){let o=t.length-1;return n==="end"?{at:t[o],inward:t[o-1]}:{at:t[0],inward:t[1]}}var Jt=.5,Ut=80;function Y(t){return t.endsWith("-")?"-":"+"}function D(t){let n=(o,e)=>(e??Y(o))===Y(o);return{from:n(t.from,t.fromStrand)?"end":"start",to:n(t.to,t.toStrand)?"start":"end"}}function bt(t){let n=1/0,o=-1/0;for(let e of t)n=Math.min(n,e.x),o=Math.max(o,e.x);return{min:n,max:o}}function vt(t,n){return Math.max(0,n.min-t,t-n.max)}function gt(t,n,o){let e=vt(t[0].x,n),r=vt(t[t.length-1].x,n);return e===r?o:e<r?"start":"end"}function Kt(t,n){return{from:gt(t,bt(n),"end"),to:gt(n,bt(t),"start")}}var At=new WeakMap;function Qt(t,n){let o=At.get(t);o||(o=new WeakMap,At.set(t,o));let e=o.get(n);return e||(e=Kt(t,n),o.set(n,e)),e}var Zt=.75,tn=1.15,nn=.35,on=3*pt;function en(t,n,o,e,r,s){let c=Math.hypot(o-t,e-n),a=c===0?1:(o-t)/c,f=c===0?0:(e-n)/c,u=0,l=1/0,d=-1/0;for(let y of r){let m=y.x-t,b=y.y-n,p=m*-f+b*a;Math.abs(p)>Math.abs(u)&&(u=p);let M=m*a+b*f;l=Math.min(l,M),d=Math.max(d,M)}let x=r.length?d-l:0,i=Math.max(Math.abs(u)*tn/Zt,x*nn),h=s===void 0?i:Math.min(i,s);return u<0?-h:h}function It({scaleX:t,scaleY:n}){return n/t}var rn=3;function U(t,n,o){let e=n.x-t.x,r=(n.y-t.y)*o,s=Math.hypot(e,r);return s===0?void 0:{x:e/s,y:r/s}}function ao(t,n,o,e){let r=It(e),s=rn/Math.max(e.scaleX,1e-6),c=U(t[t.length-1],n[0],r)??U(t[0],t.at(-1),r)??U(n[0],n.at(-1),r)??{x:1,y:0},a=[];for(let f=0;f<o;f++){let u=(f-(o-1)/2)*s;a.push({x:-c.y*u,y:c.x*u/r})}return a}function K(t,n){return t.map(o=>({x:o.x,y:o.y*n}))}function sn(t,n){for(let o of t)o.y0/=n,o.cy0/=n,o.cy1/=n,o.y1/=n;return t}function Q(t,n,o){let e=0;for(let r=1;r<t.length;r++){let s=t[r-1],c=t[r];e+=Math.hypot((c.x-s.x)*n,(c.y-s.y)*o)}return e}var cn=12,an=40;function wt(t,n){let o=Q(t,n,n);return Math.min(an,Math.max(cn,o/2))/Math.max(n,Number.EPSILON)}function fn(t){return t.from!==t.to?!1:t.fromStrand&&t.toStrand&&t.fromStrand!==t.toStrand?t.fromStrand==="+"?"end":"start":!0}function Ot(t,n=!1){let o=fn(t);if(!n)return o;let e=D(t);return o===!1?e:e.from===e.to?e.from:!0}function un(t,n){let{at:o,inward:e}=t,r=e?o.x-e.x:1,s=e?o.y-e.y:0,c=Math.hypot(r,s)||1,a=r/c,f=s/c,u=o.x,l=o.y,d=u+a*n/3,x=l+f*n/3,i=u+a*n,h=l+f*n,y=-f*n/2,m=a*n/2;return[{x0:u,y0:l,cx0:d,cy0:x,cx1:i+y,cy1:h+m,x1:i,y1:h},{x0:i,y0:h,cx0:i-y,cy0:h-m,cx1:d,cy1:x,x1:u,y1:l}]}function Z(t,n,o,e,r=[],s){let c=e.scaleX,a=It(e),f=s??(e.pixelRows?on:void 0);if(o===!1&&(o=Qt(t,n)),a!==1)return sn(Z(K(t,a),K(n,a),o,{scaleX:c,scaleY:c},K(r,a),f===void 0?void 0:f*a),a);if(typeof o=="string")return un(H(t,o),wt(t,c));let u=o===!0,l=o===!0?{from:"end",to:"start"}:o,d=H(t,l.from),x=H(n,l.to),i=d.at,h=x.at,y=i.x,m=i.y,b=h.x,p=h.y;if(u){let M=1,w=0;if(d.inward){let P=i.x-d.inward.x,S=i.y-d.inward.y,N=Math.hypot(P,S);N>0&&(M=P/N,w=S/N)}let v=wt(t,c),_=-w,A=M,E=(i.x+h.x)/2+_*v,L=(i.y+h.y)/2+A*v,g=y+M*v,X=m+w*v,O=b-M*v,I=p-w*v;return[{x0:y,y0:m,cx0:g,cy0:X,cx1:g+_*v,cy1:X+A*v,x1:E,y1:L},{x0:E,y0:L,cx0:O+_*v,cy0:I+A*v,cx1:O,cy1:I,x1:b,y1:p}]}else{let M=d.inward??{x:i.x-(h.x-i.x),y:i.y-(h.y-i.y)},w=x.inward??{x:h.x-(i.x-h.x),y:h.y-(i.y-h.y)},v=Math.hypot(b-y,p-m),_=(st,ct,Ft,jt)=>{let at=ct.x-st.x,it=ct.y-st.y,ft=Math.hypot(at,it),qt=ft===0?0:(Ft*at+jt*it)/ft;return Math.max(0,Math.min(v*Jt,Ut,qt*.5))},A=h.x-i.x,E=h.y-i.y,[L,g]=mt(M.x,M.y,i.x,i.y,_(M,i,A,E)),[X,O]=mt(w.x,w.y,h.x,h.y,_(w,h,-A,-E)),I=r.length?en(y,m,b,p,r,f):0,P=v===0?1:v,S=(b-y)/P,N=(p-m)/P,k=-N*I,B=S*I,R=S*Math.abs(I),rt=N*Math.abs(I);return[{x0:y,y0:m,cx0:L+k-R,cy0:g+B-rt,cx1:X+k+R,cy1:O+B+rt,x1:b,y1:p}]}}function _t(t,n){let o=t[0],e=t.at(-1);return Math.hypot(o.x-n.x,o.y-n.y)<Math.hypot(e.x-n.x,e.y-n.y)?"start":"end"}function Pt(t,n,o,e){let r=H(t,e?.from??_t(t,o[0])),s=H(n,e?.to??_t(n,o.at(-1))),c=[r.at,...o,s.at],a=u=>{let l=c[u],d=i=>Math.hypot(i.x-l.x,i.y-l.y),x=(i,h)=>{let y=i?d(i):0,m=d(h);return y===0?{x:h.x-l.x,y:h.y-l.y}:{x:(l.x-i.x)/y*m,y:(l.y-i.y)/y*m}};if(u===0)return x(r.inward,c[1]);if(u===c.length-1){let i=x(s.inward,c[u-1]);return{x:-i.x,y:-i.y}}return{x:(c[u+1].x-c[u-1].x)/2,y:(c[u+1].y-c[u-1].y)/2}},f=[];for(let u=0;u<c.length-1;u++){let l=c[u],d=c[u+1],x=a(u),i=a(u+1);f.push({x0:l.x,y0:l.y,cx0:l.x+x.x/3,cy0:l.y+x.y/3,cx1:d.x-i.x/3,cy1:d.y-i.y/3,x1:d.x,y1:d.y})}return f}function tt(){let t=new WeakMap;return(n,o,e)=>{let r=t.get(n);if(r?.deps.length===o.length&&r.deps.every((c,a)=>Object.is(c,o[a])))return r.value;let s=e();return t.set(n,{deps:o,value:s}),s}}var St=11,ln=6.2,F=4;function nt(t){return t.length*ln+F*2}function dn(t,n){return t.x0<n.x1&&t.x1>n.x0&&t.y0<n.y1&&t.y1>n.y0}function Xt(t,n){return t.x1<=0||t.x0>=n.width||t.y1<=0||t.y0>=n.height}function hn(t,n){return t.x0>=0&&t.x1<=n.width&&t.y0>=0&&t.y1<=n.height}function Nt(t,n=[]){let o=[...n];return e=>Xt(e,t)||o.some(r=>dn(r,e))?!1:(o.push(e),!0)}function uo(t,n,o){let e=[],r=St+F*2,s=(c,a)=>{let f=nt(a),u=c.y>n.height/2?-1:1;for(let l=0;l<=(c.stack??0);l++){let d=c.y+u*l*r,x={x0:c.x-f/2,x1:c.x+f/2,y0:d-St-F,y1:d+F};if(Xt(x,n))return;if(hn(x,n)&&(c.fits?.(x)??!0)&&o(x))return{...c,text:a,y:d,w:f}}};for(let c of t){let a=s(c,c.text)??(c.fallback===void 0?void 0:s(c,c.fallback));a&&e.push(a)}return e}function Ct(t){return t==="+"?"-":"+"}function po(t,n=new Set){let o=t.edges.map(D),e=new Map,r=(i,h,y)=>{ut(e,`${i}|${h}`,y)};t.edges.forEach((i,h)=>{r(i.from,o[h].from,h),r(i.to,o[h].to,h)});let s=i=>{let h=e.get(`${i}|end`);if(h?.length!==1)return;let y=h[0],m=t.edges[y];return m.from===i&&m.to!==i&&!n.has(i)&&!n.has(m.to)&&o[y].from==="end"&&o[y].to==="start"&&e.get(`${m.to}|start`)?.length===1?y:void 0},c=new Set,a=new Map,f=new Map;for(let i of t.nodes){let h=e.get(`${i.id}|start`),y=h?.length===1?t.edges[h[0]].from:void 0;if(a.has(i.id)||y!==void 0&&s(y)===h[0])continue;let m=[i.id];for(;;){let b=s(m.at(-1)),p=b===void 0?void 0:t.edges[b].to;if(p===void 0||a.has(p))break;c.add(b),m.push(p)}for(let b of m)a.set(b,i.id);m.length>1&&f.set(i.id,m)}for(let i of t.nodes)a.has(i.id)||a.set(i.id,i.id);let u=new Map(t.nodes.map(i=>[i.id,i])),l=[];for(let i of t.nodes){if(a.get(i.id)!==i.id)continue;let h=f.get(i.id);if(!h){l.push(i);continue}let y=h.map(p=>u.get(p)),m=y.filter(T),b=m.length?m.reduce((p,M)=>p.stable.start<=M.stable.start?p:M):y[0];l.push({id:i.id,name:i.name,length:y.reduce((p,M)=>p+M.length,0),depth:i.depth,stable:b.stable})}let d=new Set,x=[];return t.edges.forEach((i,h)=>{let y=a.get(i.from),m=a.get(i.to),b=o[h],p=`${y}|${b.from}>${m}|${b.to}`;c.has(h)||d.has(p)||(d.add(p),x.push({from:y,to:m,...b.from==="start"?{fromStrand:Ct(Y(y))}:{},...b.to==="end"?{toStrand:Ct(Y(m))}:{}}))}),{graph:{...t,nodes:l,edges:x,paths:void 0,pathVisits:void 0},runs:f}}function mo(t,n,o){let e={...t};for(let[r,s]of n){let c=t[r];if(!c?.length)continue;delete e[r];let a=et(c),f=a.at(-1),u=s.map(x=>Math.max(o(x),0)),l=u.reduce((x,i)=>x+i,0),d=0;s.forEach((x,i)=>{let h=l?u[i]/l*f:f/s.length,y=i===s.length-1?f:d+h;e[x]=kt(c,a,d,y),d=y})}return e}function Mo(t,n,o){if(t.length===0)return[];let e=et(t),r=e.at(-1);return kt(t,e,n*r,o*r)}function Bt(t){let n=et(t);return ot(t,n,n.at(-1)/2)}function et(t){let n=[0];for(let o=1;o<t.length;o++)n.push(n[o-1]+Math.hypot(t[o].x-t[o-1].x,t[o].y-t[o-1].y));return n}function Tt(t,n){let o=0,e=t.length;for(;o<e;){let r=o+e>>1;t[r]<n?o=r+1:e=r}return o}function ot(t,n,o){if(o<=0)return{...t[0]};let e=Tt(n,o);if(e>=n.length)return{...t.at(-1)};let r=n[e]-n[e-1],s=r>0?(o-n[e-1])/r:0,c=t[e-1],a=t[e];return{x:c.x+(a.x-c.x)*s,y:c.y+(a.y-c.y)*s}}function kt(t,n,o,e){let r=[ot(t,n,o)];for(let s=Tt(n,o);s<t.length&&n[s]<e;s++)n[s]>o&&r.push({...t[s]});return r.push(ot(t,n,e)),r}var xn=1;function yn(t,n){return n.flatMap(o=>t[o]??[])}function $t(t,n,o,e,r,s){let c=t[n.from],a=t[n.to];if(!(!c?.length||!a?.length))return r?Pt(c,a,r,s?D(n):void 0):Z(c,a,Ot(n,s),o,e?yn(t,e):[])}function pn(t){let n=lt(t.nodes.filter(T),o=>o.stable.refName);for(let o of n.values())o.sort((e,r)=>e.stable.start-r.stable.start);return n}function mn(t,n,o){let e=[];if(t)for(let r=ht(t,n);r<t.length;r++){let s=t[r];if(s.stable.start>=o)break;s.stable.start+s.length<=o&&e.push(s.id)}return e}function Mn(t,n,o,e){let{fromStrand:r,toStrand:s}=t;if(r===void 0||s===void 0)return!0;let c=r===(n.stable.strand??"+"),a=s===(o.stable.strand??"+");return e?c&&a:!c&&!a}function bn(t,n,o,e){let r;for(let s of e(n))for(let c of e(o)){let a=s<=c,f=a?{start:s+n.length,end:c}:{start:c+o.length,end:s};Mn(t,n,o,a)&&(!r||Math.abs(f.end-f.start)<Math.abs(r.end-r.start))&&(r=f)}return r}var vn=.01;function gn(t,n){let o=new Map;for(let[e,r]of t){let s=r.flatMap(c=>{let a=n(c);return a.slice(1).map((f,u)=>({at:a[u],copy:f-a[u]}))});s.length&&o.set(e,s.sort((c,a)=>c.at-a.at))}return o}function An(t,n,o){if(!t)return!1;let e=dt(t.length,s=>t[s].at<n),r=[t[e-1],t[e]].filter(s=>s!==void 0).sort((s,c)=>Math.abs(s.at-n)-Math.abs(c.at-n))[0];return r!==void 0&&Math.abs(r.at-n)<=r.copy&&Math.abs(o-r.copy)<=r.copy*vn}function Lo(t){let n=new Map(t.nodes.map(c=>[c.id,c])),o=pn(t),e=yt(t),r=gn(o,e),s=[];for(let c=0;c<t.edges.length;c++){let a=t.edges[c],f=n.get(a.from),u=n.get(a.to);if(f!==void 0&&u!==void 0&&T(f)&&T(u)&&f.stable.refName===u.stable.refName){let l=bn(a,f,u,e),d=f.stable.refName,x=l?l.end-l.start:0;if(l&&x>=xn&&!An(r.get(d),l.start,x)){let{start:i,end:h}=l;s.push({edgeIndex:c,from:a.from,to:a.to,...a.fromStrand?{fromStrand:a.fromStrand}:{},...a.toStrand?{toStrand:a.toStrand}:{},refName:d,start:i,end:h,bp:x,bypassed:mn(o.get(d),i,h)})}}}return s}function wn(t,n){let o=new Map,e=c=>{let a=c;for(;o.has(a);)a=o.get(a);return a!==c&&o.set(c,a),a},r=(c,a)=>{let[f,u]=[e(c),e(a)];return f!==u&&o.set(f,u),f!==u},s=new Set(n.map(c=>c.edgeIndex));return t.edges.forEach((c,a)=>{s.has(a)||r(c.from,c.to)}),new Set(n.filter(c=>!r(c.from,c.to)).map(c=>c.edgeIndex))}var Rt=new WeakMap;function Eo(t,n,o=!0){let e=Rt.get(n);e||(e=new Map,Rt.set(n,e));let r=e.get(o);if(!r){let s=o?new Set:wn(t,n);r={shown:n.filter(c=>!s.has(c.edgeIndex)),bypassed:new Map(n.map(c=>[c.edgeIndex,c.bypassed])),hidden:s},e.set(o,r)}return r}var _n=26,Ln=4e4,En=8,In=8,On=5.7,Pn=6,Sn=13,G=3,j=2;function V(t){return(t.length*On+Pn+G)/2}var C=(Sn+G)/2,Xn=V("1 bp");function q(t,n,o){return{x0:n-t,x1:n+t,y0:o-C,y1:o+C}}function Co(t,n){return{x0:6,x1:6+nt(t)+G,y0:n-8-G/2,y1:n+8+G/2}}function z(t,n,o){return o<n?t:Math.min(Math.max(t,n),o)}function Yt(t){return String(t).replace(/\B(?=(\d{3})+$)/g,",")}function Dt(t){let[n,o]=t>=999500?[t/1e6,"Mb"]:t>=1e3?[t/1e3,"kb"]:[];return n===void 0?`${t} bp`:`${+n.toFixed(n>=100?0:1)} ${o}`}function Ht(t){return`${Dt(t)} del`}function Nn(t,n,o,e){let r=t[0],s=t[t.length-1],c=(n.x-(r.x0+s.x1)/2)*o,a=(n.y-(r.y0+s.y1)/2)*e,f=Math.hypot(c,a);return f===0?{x:0,y:-1}:{x:c/f,y:a/f}}function Cn(t,n){return Math.abs(n.x)*(t.x1-t.x0)/2+Math.abs(n.y)*(t.y1-t.y0)/2}function Bn(t,n){let o=(t.x1-t.x0)/2,e=(t.y1-t.y0)/2;return Math.min(n.x===0?1/0:o/Math.abs(n.x),n.y===0?1/0:e/Math.abs(n.y))}function Tn(t,n){let o=1/0,e=1/0,r=-1/0,s=-1/0;for(let c of t)for(let a of n[c]??[])o=Math.min(o,a.x),r=Math.max(r,a.x),e=Math.min(e,a.y),s=Math.max(s,a.y);return o===1/0?void 0:{minX:o,minY:e,maxX:r,maxY:s}}var kn=tt();function Rn(t,n){return kn(t,[n],()=>Object.entries(t).filter(([o,e])=>e.length>0&&n.has(o)).sort(([o],[e])=>n.get(e)-n.get(o)))}var $n=tt();function Hn(t,n,o,e,r,s){let{scaleX:c,scaleY:a}=o;return $n(t,[n,r,s,c,a,e],()=>{let f=[];for(let u of[...n].sort((l,d)=>d.bp-l.bp)){let l=$t(t,u,o,u.bypassed,r?.[u.edgeIndex],s),d=l?Lt(l):void 0;if(l&&d){let{minX:x,minY:i,maxX:h,maxY:y}=Et(l);f.push({deletion:u,curves:l,apex:d,extent:Math.max((h-x)*c,(y-i)*a)})}}return f})}function Wn({nodePositions:t,nodeLengths:n,deletions:o,deletionRoutes:e,stranded:r=!1,alleleDeletions:s,axis:c,translateX:a,translateY:f,width:u,height:l,version:d=0}){let{scaleX:x,scaleY:i}=c,h=[],y=[];for(let{deletion:p,curves:M,apex:w,extent:v}of Hn(t,o,c,d,e,r))if(v>=_n){let _=Ht(p.bp),A=V(_),E=q(A,0,0),L=w.x*x+a,g=w.y*i+f;if(L<0||L>u||g<0||g>l)continue;let X=v>=A*2/j,O=Nn(M,w,x,i),I=Cn(E,O)+In,P=X?L:z(L+O.x*I,A,u-A),S=X?g:z(g+O.y*I,C,l-C),N=Math.hypot(P-L,S-g),k;if(N>0){let B={x:(P-L)/N,y:(S-g)/N},R=Bn(E,B);k={arcX:L,arcY:g,labelX:P-B.x*R,labelY:S-B.y*R}}h.push({label:{key:`del:${p.edgeIndex}`,text:_,x:P,y:S,kind:"deletion",leader:k},box:q(A,P,S)})}let m=new Set,b=[...s??[]].sort((p,M)=>M.bp-p.bp);for(let p of b){let M=Tn(p.nodeIds,t);if(!M)continue;let w=Math.max(M.minX*x+a,0),v=Math.min(M.maxX*x+a,u),_=Math.max(M.minY*i+f,0),A=Math.min(M.maxY*i+f,l);if(v<w||A<_)continue;let E=Math.max(v-w,A-_),L=Ht(p.bp),g=V(L);if(E>=g*2/j){for(let I of p.nodeIds)m.add(I);let X=z((w+v)/2,g,u-g),O=z((_+A)/2,C,l-C);h.push({label:{key:`alleledel:${p.nodeIds.join(",")}`,text:L,x:X,y:O,kind:"deletion"},box:q(g,X,O)})}}for(let[p,M]of Rn(t,n)){if(m.has(p))continue;let{x:w,y:v}=Bt(M),_=v*i+f;if(_+C<=0||_-C>=l)continue;let A=Q(M,x,i);if(A<Xn*2/j)continue;let E=Dt(n.get(p)),L=V(E);if(A>=L*2/j){let g=w*x+a;y.push({label:{key:`node:${p}`,text:E,x:g,y:_,kind:"node"},box:q(L,g,_)})}}return{deletions:h,nodes:y}}function Yn(t,n){return Math.max(En,Math.floor(t*n/Ln))}function Wt(t,n,o=1/0){let e=[];for(let{label:r,box:s}of t){if(e.length>=o)break;n(s)&&e.push(r)}return e}function Bo({reserved:t,take:n,...o}){n??=Nt(o,t);let{deletions:e,nodes:r}=Wn(o);return[...Wt(e,n),...Wt(r,n,Yn(o.width,o.height))]}function Ho(t){let n=0;for(let o=0;o<t.length;o++)n=t.charCodeAt(o)+((n<<5)-n);return Math.abs(n%360)}function Dn(t,n){return t*360/n}var Gn=.7,Fn=.5,jn=16;function Wo(t){return t>0&&t<=jn}function qn(t,n){return`hsl(${Dn(t,n)}, ${Gn*100}%, ${Fn*100}%)`}function Yo(t,n){return`hsl(0, 0%, ${n>1?25+45*t/(n-1):45}%)`}function zn(t){let n=J(t).name.split("#"),o=n.join("#");if(n.length>=3&&xt(n[0])){let e=n.slice(2).join("#");return[e,e,o]}return[n[0],n.slice(0,2).join("#"),o]}function Vn(t,n){let{start:o}=J(t);return n.map(e=>`${e} @${Yt(o)}`)}function Do(t,n){let o=new Map;t.forEach((f,u)=>{o.has(f.name)||o.set(f.name,u)});let e=[...o].map(([f,u])=>({name:f,i:u})),r=e.map(f=>zn(f.name)),s=[0,1,2].flatMap(f=>[e.map((u,l)=>r[l][f]),e.map((u,l)=>Vn(u.name,r[l])[f])]),a=s.find(f=>new Set(f).size===e.length)??s.at(-1);return e.map(({name:f,i:u},l)=>({name:f,label:a[l],color:n?.[u]??qn(u,t.length)}))}function Go(t){let n=new Map;return new Map([...t].sort((o,e)=>o.label.localeCompare(e.label)).map(o=>{let e=(n.get(o.label)??0)+1;return n.set(o.label,e),[o.name,e>1?`${o.label} (${e})`:o.label]}))}var jo=[{value:"depth",label:"By depth",description:"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform."},{value:"uniform",label:"Uniform",description:"Every node the same thickness."}],Jn=.3,Gt=3;function Un(t){let n=0,o=0;for(let e of t.nodes)n+=e.depth*e.length,o+=e.length;return o>0?n/o:0}function Kn(t,n){return!(n>0)||!(t.depth>0)?1:Math.min(Gt,Math.max(Jn,Math.sqrt(t.depth/n)))}function Qn(t,n,o,e){return n*(o==="depth"?Kn(t,e):1)}function Zn(t,n){return t*(n==="depth"?Gt:1)}var to=4;function no(t,n){return Math.max(t/n,to)}function qo(t,n,o,e,r=0){let s=t?Un(t):0,c=a=>r>0?no(a,r)*r/2:a/2;return{maxHalfWidthPx:c(Zn(o,e)),halfWidthPx:a=>{let f=n?.get(a);return c(f?Qn(f,o,e,s):o)}}}export{pt as a,ro as b,Et as c,so as d,co as e,Y as f,D as g,It as h,ao as i,Q as j,tt as k,St as l,ln as m,F as n,nt as o,Nt as p,uo as q,po as r,mo as s,Mo as t,$t as u,Lo as v,Eo as w,Co as x,Yt as y,Dt as z,Bo as A,Ho as B,Dn as C,Gn as D,Fn as E,jn as F,Wo as G,qn as H,Yo as I,Do as J,Go as K,jo as L,Un as M,Qn as N,no as O,qo as P};
|
|
2
|
+
//# sourceMappingURL=chunk-D5PRXUSS.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-CPMHA4W5.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-VACK24HF.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HMXCN6PG.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-AB35TJST.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-2VMKQKVO.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-DV5B5UU7.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-T3H5ELLA.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BW2NMXRV.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ZANALBSX.js"],
|
|
4
|
+
"sourcesContent": ["// src/layout/rowSpacing.ts\nvar ROW_HEIGHT_PX = 20;\n\nexport {\n ROW_HEIGHT_PX\n};\n", "import {\n ROW_HEIGHT_PX\n} from \"./chunk-CPMHA4W5.js\";\n\n// src/util/geometry.ts\nfunction svgPath(points) {\n const round = (v) => Math.round(v * 100) / 100;\n return points.map((p, i) => `${i ? \"L\" : \"M\"}${round(p.x)},${round(p.y)}`).join(\"\");\n}\nfunction projectLine(x1, y1, x2, y2, distance) {\n const d = Math.hypot(y2 - y1, x2 - x1);\n if (d === 0) {\n return [x2, y2];\n }\n const vx = (x2 - x1) / d;\n const vy = (y2 - y1) / d;\n return [x2 + distance * vx, y2 + distance * vy];\n}\nfunction curvePointAt(c, t) {\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n return {\n x: a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1,\n y: a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1\n };\n}\nfunction curveMidpoint(curves) {\n const mid = curves[Math.floor(curves.length / 2)];\n return mid ? curvePointAt(mid, 0.5) : void 0;\n}\nfunction curveBounds(curves) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const c of curves) {\n minX = Math.min(minX, c.x0, c.cx0, c.cx1, c.x1);\n maxX = Math.max(maxX, c.x0, c.cx0, c.cx1, c.x1);\n minY = Math.min(minY, c.y0, c.cy0, c.cy1, c.y1);\n maxY = Math.max(maxY, c.y0, c.cy0, c.cy1, c.y1);\n }\n return { minX, minY, maxX, maxY };\n}\nfunction subCurve(c, t0, t1) {\n const p0 = curvePointAt(c, t0);\n const p1 = curvePointAt(c, t1);\n const dt = (t1 - t0) / 3;\n const d0 = curveTangentAt(c, t0);\n const d1 = curveTangentAt(c, t1);\n return {\n x0: p0.x,\n y0: p0.y,\n cx0: p0.x + d0.x * dt,\n cy0: p0.y + d0.y * dt,\n cx1: p1.x - d1.x * dt,\n cy1: p1.y - d1.y * dt,\n x1: p1.x,\n y1: p1.y\n };\n}\nfunction curveTangentAt(c, t) {\n const u = 1 - t;\n const a = 3 * u * u;\n const b = 6 * u * t;\n const d = 3 * t * t;\n return {\n x: a * (c.cx0 - c.x0) + b * (c.cx1 - c.cx0) + d * (c.x1 - c.cx1),\n y: a * (c.cy0 - c.y0) + b * (c.cy1 - c.cy0) + d * (c.y1 - c.cy1)\n };\n}\nvar VISIBLE_SAMPLES = 32;\nfunction visibleStretches(curves, lengths, bounds, yToX) {\n const stretches = [];\n let start = 0;\n curves.forEach((c, k) => {\n const length = lengths[k];\n const pad = length / VISIBLE_SAMPLES;\n let last = curvePointAt(c, 0);\n for (let i = 1; i <= VISIBLE_SAMPLES; i++) {\n const next = curvePointAt(c, i / VISIBLE_SAMPLES);\n if (Math.max(last.x, next.x) + pad >= bounds.minX && Math.min(last.x, next.x) - pad <= bounds.maxX && Math.max(last.y, next.y) + pad / yToX >= bounds.minY && Math.min(last.y, next.y) - pad / yToX <= bounds.maxY) {\n const from = start + length * (i - 1) / VISIBLE_SAMPLES;\n const to = start + length * i / VISIBLE_SAMPLES;\n const prev = stretches.at(-1);\n if (prev && prev[1] >= from) {\n prev[1] = to;\n } else {\n stretches.push([from, to]);\n }\n }\n last = next;\n }\n start += length;\n });\n return stretches;\n}\nfunction dashCurves(curves, dashWorld, yToX = 1, bounds) {\n const lengths = curves.map(\n (c) => Math.hypot(c.cx0 - c.x0, (c.cy0 - c.y0) * yToX) + Math.hypot(c.cx1 - c.cx0, (c.cy1 - c.cy0) * yToX) + Math.hypot(c.x1 - c.cx1, (c.y1 - c.cy1) * yToX)\n );\n const total = lengths.reduce((a, b) => a + b, 0);\n const periods = Math.round(total / dashWorld);\n const spans = Math.max(3, periods % 2 ? periods : periods + 1);\n const stretches = bounds ? visibleStretches(curves, lengths, bounds, yToX) : void 0;\n let seen = 0;\n const out = [];\n for (let i = 0; i < spans; i += 2) {\n const from = i / spans * total;\n const to = (i + 1) / spans * total;\n if (stretches) {\n while (seen < stretches.length && stretches[seen][1] < from) {\n seen++;\n }\n if (seen === stretches.length) {\n break;\n }\n if (stretches[seen][0] > to) {\n continue;\n }\n }\n const dash = [];\n let start = 0;\n curves.forEach((c, k) => {\n const length = lengths[k];\n const end = start + length;\n if (length > 0 && end > from && start < to) {\n dash.push(\n subCurve(\n c,\n Math.max(0, (from - start) / length),\n Math.min(1, (to - start) / length)\n )\n );\n }\n start = end;\n });\n if (dash.length) {\n out.push(dash);\n }\n }\n return out;\n}\nfunction translateCurves(curves, dx, dy) {\n const out = new Array(curves.length);\n for (let i = 0; i < curves.length; i++) {\n const c = curves[i];\n out[i] = {\n x0: c.x0 + dx,\n y0: c.y0 + dy,\n cx0: c.cx0 + dx,\n cy0: c.cy0 + dy,\n cx1: c.cx1 + dx,\n cy1: c.cy1 + dy,\n x1: c.x1 + dx,\n y1: c.y1 + dy\n };\n }\n return out;\n}\nfunction attachment(segments, side) {\n const last = segments.length - 1;\n return side === \"end\" ? { at: segments[last], inward: segments[last - 1] } : { at: segments[0], inward: segments[1] };\n}\nvar TANGENT_SPAN_FACTOR = 0.5;\nvar MAX_TANGENT = 80;\nfunction ownStrand(id) {\n return id.endsWith(\"-\") ? \"-\" : \"+\";\n}\nfunction strandSides(edge) {\n const own = (id, strand) => (strand ?? ownStrand(id)) === ownStrand(id);\n return {\n from: own(edge.from, edge.fromStrand) ? \"end\" : \"start\",\n to: own(edge.to, edge.toStrand) ? \"start\" : \"end\"\n };\n}\nfunction spanOf(segments) {\n let min = Infinity;\n let max = -Infinity;\n for (const s of segments) {\n min = Math.min(min, s.x);\n max = Math.max(max, s.x);\n }\n return { min, max };\n}\nfunction distanceToSpan(x, span) {\n return Math.max(0, span.min - x, x - span.max);\n}\nfunction facingSide(segments, other, tieBreak) {\n const startGap = distanceToSpan(segments[0].x, other);\n const endGap = distanceToSpan(segments[segments.length - 1].x, other);\n return startGap === endGap ? tieBreak : startGap < endGap ? \"start\" : \"end\";\n}\nfunction facingSides(fromSegments, toSegments) {\n return {\n from: facingSide(fromSegments, spanOf(toSegments), \"end\"),\n to: facingSide(toSegments, spanOf(fromSegments), \"start\")\n };\n}\nvar laidSides = /* @__PURE__ */ new WeakMap();\nfunction heldFacingSides(fromSegments, toSegments) {\n let byTo = laidSides.get(fromSegments);\n if (!byTo) {\n byTo = /* @__PURE__ */ new WeakMap();\n laidSides.set(fromSegments, byTo);\n }\n let sides = byTo.get(toSegments);\n if (!sides) {\n sides = facingSides(fromSegments, toSegments);\n byTo.set(toSegments, sides);\n }\n return sides;\n}\nvar APEX_FRACTION = 0.75;\nvar BOW_CLEARANCE = 1.15;\nvar ALONG_FRACTION = 0.35;\nvar MAX_ROW_BOW_PX = 3 * ROW_HEIGHT_PX;\nfunction bowAround(p1x, p1y, p2x, p2y, toward, maxBow) {\n const chord = Math.hypot(p2x - p1x, p2y - p1y);\n const ux = chord === 0 ? 1 : (p2x - p1x) / chord;\n const uy = chord === 0 ? 0 : (p2y - p1y) / chord;\n let reach = 0;\n let minAlong = Infinity;\n let maxAlong = -Infinity;\n for (const p of toward) {\n const dx = p.x - p1x;\n const dy = p.y - p1y;\n const perp = dx * -uy + dy * ux;\n if (Math.abs(perp) > Math.abs(reach)) {\n reach = perp;\n }\n const along = dx * ux + dy * uy;\n minAlong = Math.min(minAlong, along);\n maxAlong = Math.max(maxAlong, along);\n }\n const span = toward.length ? maxAlong - minAlong : 0;\n const uncapped = Math.max(\n Math.abs(reach) * BOW_CLEARANCE / APEX_FRACTION,\n span * ALONG_FRACTION\n );\n const size = maxBow === void 0 ? uncapped : Math.min(uncapped, maxBow);\n return reach < 0 ? -size : size;\n}\nfunction yToXOf({ scaleX, scaleY }) {\n return scaleY / scaleX;\n}\nvar PATH_RIBBON_SPACING_PX = 3;\nfunction drawnDirection(a, b, yToX) {\n const dx = b.x - a.x;\n const dy = (b.y - a.y) * yToX;\n const len = Math.hypot(dx, dy);\n return len === 0 ? void 0 : { x: dx / len, y: dy / len };\n}\nfunction pathRibbonOffsets(fromSegments, toSegments, count, axis) {\n const yToX = yToXOf(axis);\n const spacing = PATH_RIBBON_SPACING_PX / Math.max(axis.scaleX, 1e-6);\n const dir = drawnDirection(\n fromSegments[fromSegments.length - 1],\n toSegments[0],\n yToX\n ) ?? drawnDirection(fromSegments[0], fromSegments.at(-1), yToX) ?? drawnDirection(toSegments[0], toSegments.at(-1), yToX) ?? { x: 1, y: 0 };\n const offsets = [];\n for (let i = 0; i < count; i++) {\n const distance = (i - (count - 1) / 2) * spacing;\n offsets.push({ x: -dir.y * distance, y: dir.x * distance / yToX });\n }\n return offsets;\n}\nfunction scaleYOf(points, yToX) {\n return points.map((p) => ({ x: p.x, y: p.y * yToX }));\n}\nfunction unscaleYOf(curves, yToX) {\n for (const c of curves) {\n c.y0 /= yToX;\n c.cy0 /= yToX;\n c.cy1 /= yToX;\n c.y1 /= yToX;\n }\n return curves;\n}\nfunction polylinePx(points, scaleX, scaleY) {\n let total = 0;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1];\n const b = points[i];\n total += Math.hypot((b.x - a.x) * scaleX, (b.y - a.y) * scaleY);\n }\n return total;\n}\nvar SELF_LOOP_MIN_PX = 12;\nvar SELF_LOOP_MAX_PX = 40;\nfunction selfLoopReach(segments, scale) {\n const nodePx = polylinePx(segments, scale, scale);\n const reachPx = Math.min(\n SELF_LOOP_MAX_PX,\n Math.max(SELF_LOOP_MIN_PX, nodePx / 2)\n );\n return reachPx / Math.max(scale, Number.EPSILON);\n}\nfunction selfLinkOf(edge) {\n if (edge.from !== edge.to) {\n return false;\n }\n return edge.fromStrand && edge.toStrand && edge.fromStrand !== edge.toStrand ? edge.fromStrand === \"+\" ? \"end\" : \"start\" : true;\n}\nfunction edgeJoinOf(edge, stranded = false) {\n const self = selfLinkOf(edge);\n if (!stranded) {\n return self;\n }\n const sides = strandSides(edge);\n return self === false ? sides : sides.from === sides.to ? sides.from : true;\n}\nfunction hairpinCurves(attach, reach) {\n const { at, inward } = attach;\n const dx = inward ? at.x - inward.x : 1;\n const dy = inward ? at.y - inward.y : 0;\n const len = Math.hypot(dx, dy) || 1;\n const ux = dx / len;\n const uy = dy / len;\n const px = at.x;\n const py = at.y;\n const nearX = px + ux * reach / 3;\n const nearY = py + uy * reach / 3;\n const apexX = px + ux * reach;\n const apexY = py + uy * reach;\n const sideX = -uy * reach / 2;\n const sideY = ux * reach / 2;\n return [\n {\n x0: px,\n y0: py,\n cx0: nearX,\n cy0: nearY,\n cx1: apexX + sideX,\n cy1: apexY + sideY,\n x1: apexX,\n y1: apexY\n },\n {\n x0: apexX,\n y0: apexY,\n cx0: apexX - sideX,\n cy0: apexY - sideY,\n cx1: nearX,\n cy1: nearY,\n x1: px,\n y1: py\n }\n ];\n}\nfunction computeEdgeCurves(fromSegments, toSegments, join, axis, bypassed = [], maxBowIn) {\n const scale = axis.scaleX;\n const yToX = yToXOf(axis);\n const maxBow = maxBowIn ?? (axis.pixelRows ? MAX_ROW_BOW_PX : void 0);\n if (join === false) {\n join = heldFacingSides(fromSegments, toSegments);\n }\n if (yToX !== 1) {\n return unscaleYOf(\n computeEdgeCurves(\n scaleYOf(fromSegments, yToX),\n scaleYOf(toSegments, yToX),\n join,\n { scaleX: scale, scaleY: scale },\n scaleYOf(bypassed, yToX),\n // the cap is a y measure and the body works in x units, so it converts\n // with everything else that crosses this boundary\n maxBow === void 0 ? void 0 : maxBow * yToX\n ),\n yToX\n );\n }\n if (typeof join === \"string\") {\n return hairpinCurves(\n attachment(fromSegments, join),\n selfLoopReach(fromSegments, scale)\n );\n }\n const loop = join === true;\n const sides = join === true ? { from: \"end\", to: \"start\" } : join;\n const fromAttach = attachment(fromSegments, sides.from);\n const toAttach = attachment(toSegments, sides.to);\n const fromEnd = fromAttach.at;\n const toStart = toAttach.at;\n const p1x = fromEnd.x;\n const p1y = fromEnd.y;\n const p2x = toStart.x;\n const p2y = toStart.y;\n if (loop) {\n let segDirX = 1;\n let segDirY = 0;\n if (fromAttach.inward) {\n const dx = fromEnd.x - fromAttach.inward.x;\n const dy = fromEnd.y - fromAttach.inward.y;\n const len = Math.hypot(dx, dy);\n if (len > 0) {\n segDirX = dx / len;\n segDirY = dy / len;\n }\n }\n const ext = selfLoopReach(fromSegments, scale);\n const perpX = -segDirY;\n const perpY = segDirX;\n const midX = (fromEnd.x + toStart.x) / 2 + perpX * ext;\n const midY = (fromEnd.y + toStart.y) / 2 + perpY * ext;\n const cp1x = p1x + segDirX * ext;\n const cp1y = p1y + segDirY * ext;\n const cp2x = p2x - segDirX * ext;\n const cp2y = p2y - segDirY * ext;\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cp1x,\n cy0: cp1y,\n cx1: cp1x + perpX * ext,\n cy1: cp1y + perpY * ext,\n x1: midX,\n y1: midY\n },\n {\n x0: midX,\n y0: midY,\n cx0: cp2x + perpX * ext,\n cy0: cp2y + perpY * ext,\n cx1: cp2x,\n cy1: cp2y,\n x1: p2x,\n y1: p2y\n }\n ];\n } else {\n const fromPrev = fromAttach.inward ?? {\n x: fromEnd.x - (toStart.x - fromEnd.x),\n y: fromEnd.y - (toStart.y - fromEnd.y)\n };\n const toNext = toAttach.inward ?? {\n x: toStart.x - (fromEnd.x - toStart.x),\n y: toStart.y - (fromEnd.y - toStart.y)\n };\n const dist = Math.hypot(p2x - p1x, p2y - p1y);\n const tangentProj = (prev, at, towardX, towardY) => {\n const dx = at.x - prev.x;\n const dy = at.y - prev.y;\n const len = Math.hypot(dx, dy);\n const along = len === 0 ? 0 : (towardX * dx + towardY * dy) / len;\n return Math.max(\n 0,\n Math.min(dist * TANGENT_SPAN_FACTOR, MAX_TANGENT, along * 0.5)\n );\n };\n const towardToX = toStart.x - fromEnd.x;\n const towardToY = toStart.y - fromEnd.y;\n const [cx1, cy1] = projectLine(\n fromPrev.x,\n fromPrev.y,\n fromEnd.x,\n fromEnd.y,\n tangentProj(fromPrev, fromEnd, towardToX, towardToY)\n );\n const [cx2, cy2] = projectLine(\n toNext.x,\n toNext.y,\n toStart.x,\n toStart.y,\n tangentProj(toNext, toStart, -towardToX, -towardToY)\n );\n const bulge = bypassed.length ? bowAround(p1x, p1y, p2x, p2y, bypassed, maxBow) : 0;\n const chordLen = dist === 0 ? 1 : dist;\n const ux = (p2x - p1x) / chordLen;\n const uy = (p2y - p1y) / chordLen;\n const bulgeX = -uy * bulge;\n const bulgeY = ux * bulge;\n const spreadX = ux * Math.abs(bulge);\n const spreadY = uy * Math.abs(bulge);\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cx1 + bulgeX - spreadX,\n cy0: cy1 + bulgeY - spreadY,\n cx1: cx2 + bulgeX + spreadX,\n cy1: cy2 + bulgeY + spreadY,\n x1: p2x,\n y1: p2y\n }\n ];\n }\n}\nfunction nearerEnd(segments, to) {\n const start = segments[0];\n const end = segments.at(-1);\n return Math.hypot(start.x - to.x, start.y - to.y) < Math.hypot(end.x - to.x, end.y - to.y) ? \"start\" : \"end\";\n}\nfunction routedEdgeCurves(fromSegments, toSegments, route, sides) {\n const fromAttach = attachment(\n fromSegments,\n sides?.from ?? nearerEnd(fromSegments, route[0])\n );\n const toAttach = attachment(\n toSegments,\n sides?.to ?? nearerEnd(toSegments, route.at(-1))\n );\n const points = [fromAttach.at, ...route, toAttach.at];\n const tangent = (i) => {\n const p = points[i];\n const span = (q) => Math.hypot(q.x - p.x, q.y - p.y);\n const along = (inward, next) => {\n const len = inward ? span(inward) : 0;\n const reach = span(next);\n return len === 0 ? { x: next.x - p.x, y: next.y - p.y } : {\n x: (p.x - inward.x) / len * reach,\n y: (p.y - inward.y) / len * reach\n };\n };\n if (i === 0) {\n return along(fromAttach.inward, points[1]);\n }\n if (i === points.length - 1) {\n const out = along(toAttach.inward, points[i - 1]);\n return { x: -out.x, y: -out.y };\n }\n return {\n x: (points[i + 1].x - points[i - 1].x) / 2,\n y: (points[i + 1].y - points[i - 1].y) / 2\n };\n };\n const curves = [];\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i];\n const b = points[i + 1];\n const ta = tangent(i);\n const tb = tangent(i + 1);\n curves.push({\n x0: a.x,\n y0: a.y,\n cx0: a.x + ta.x / 3,\n cy0: a.y + ta.y / 3,\n cx1: b.x - tb.x / 3,\n cy1: b.y - tb.y / 3,\n x1: b.x,\n y1: b.y\n });\n }\n return curves;\n}\n\nexport {\n svgPath,\n projectLine,\n curvePointAt,\n curveMidpoint,\n curveBounds,\n dashCurves,\n translateCurves,\n ownStrand,\n strandSides,\n bowAround,\n yToXOf,\n PATH_RIBBON_SPACING_PX,\n pathRibbonOffsets,\n polylinePx,\n selfLinkOf,\n edgeJoinOf,\n computeEdgeCurves,\n routedEdgeCurves\n};\n", "// src/util/weakMemo.ts\nfunction weakMemo() {\n const cache = /* @__PURE__ */ new WeakMap();\n return (key, deps, compute) => {\n const hit = cache.get(key);\n if (hit?.deps.length === deps.length && hit.deps.every((d, i) => Object.is(d, deps[i]))) {\n return hit.value;\n }\n const value = compute();\n cache.set(key, { deps, value });\n return value;\n };\n}\n\nexport {\n weakMemo\n};\n", "// src/overlayLabels.ts\nvar LABEL_PX = 11;\nvar LABEL_CHAR_PX = 6.2;\nvar LABEL_PAD = 4;\nfunction labelWidth(text) {\n return text.length * LABEL_CHAR_PX + LABEL_PAD * 2;\n}\nfunction overlaps(a, b) {\n return a.x0 < b.x1 && a.x1 > b.x0 && a.y0 < b.y1 && a.y1 > b.y0;\n}\nfunction offFrame(box, frame) {\n return box.x1 <= 0 || box.x0 >= frame.width || box.y1 <= 0 || box.y0 >= frame.height;\n}\nfunction insideFrame(box, frame) {\n return box.x0 >= 0 && box.x1 <= frame.width && box.y0 >= 0 && box.y1 <= frame.height;\n}\nfunction occupancy(frame, reserved = []) {\n const placed = [...reserved];\n return (box) => {\n if (offFrame(box, frame) || placed.some((p) => overlaps(p, box))) {\n return false;\n }\n placed.push(box);\n return true;\n };\n}\nfunction placeLabels(candidates, frame, take) {\n const out = [];\n const row = LABEL_PX + LABEL_PAD * 2;\n const place = (c, text) => {\n const w = labelWidth(text);\n const direction = c.y > frame.height / 2 ? -1 : 1;\n for (let tries = 0; tries <= (c.stack ?? 0); tries++) {\n const y = c.y + direction * tries * row;\n const box = {\n x0: c.x - w / 2,\n x1: c.x + w / 2,\n y0: y - LABEL_PX - LABEL_PAD,\n y1: y + LABEL_PAD\n };\n if (offFrame(box, frame)) {\n return void 0;\n }\n if (insideFrame(box, frame) && (c.fits?.(box) ?? true) && take(box)) {\n return { ...c, text, y, w };\n }\n }\n return void 0;\n };\n for (const c of candidates) {\n const placed = place(c, c.text) ?? (c.fallback === void 0 ? void 0 : place(c, c.fallback));\n if (placed) {\n out.push(placed);\n }\n }\n return out;\n}\n\nexport {\n LABEL_PX,\n LABEL_CHAR_PX,\n LABEL_PAD,\n labelWidth,\n overlaps,\n occupancy,\n placeLabels\n};\n", "import {\n ownStrand,\n strandSides\n} from \"./chunk-VACK24HF.js\";\nimport {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/layout/mergeRuns.ts\nfunction flip(strand) {\n return strand === \"+\" ? \"-\" : \"+\";\n}\nfunction mergeRuns(graph, alone = /* @__PURE__ */ new Set()) {\n const sides = graph.edges.map(strandSides);\n const at = /* @__PURE__ */ new Map();\n const attach = (id, side, ei) => {\n pushTo(at, `${id}|${side}`, ei);\n };\n graph.edges.forEach((edge, ei) => {\n attach(edge.from, sides[ei].from, ei);\n attach(edge.to, sides[ei].to, ei);\n });\n const joinAfter = (a) => {\n const out = at.get(`${a}|end`);\n if (out?.length !== 1) {\n return void 0;\n }\n const ei = out[0];\n const edge = graph.edges[ei];\n return edge.from === a && edge.to !== a && !alone.has(a) && !alone.has(edge.to) && sides[ei].from === \"end\" && sides[ei].to === \"start\" && at.get(`${edge.to}|start`)?.length === 1 ? ei : void 0;\n };\n const joined = /* @__PURE__ */ new Set();\n const runOf = /* @__PURE__ */ new Map();\n const runs = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const into = at.get(`${node.id}|start`);\n const pred = into?.length === 1 ? graph.edges[into[0]].from : void 0;\n if (runOf.has(node.id) || pred !== void 0 && joinAfter(pred) === into[0]) {\n continue;\n }\n const run = [node.id];\n for (; ; ) {\n const ei = joinAfter(run.at(-1));\n const next = ei === void 0 ? void 0 : graph.edges[ei].to;\n if (next === void 0 || runOf.has(next)) {\n break;\n }\n joined.add(ei);\n run.push(next);\n }\n for (const id of run) {\n runOf.set(id, node.id);\n }\n if (run.length > 1) {\n runs.set(node.id, run);\n }\n }\n for (const node of graph.nodes) {\n if (!runOf.has(node.id)) {\n runOf.set(node.id, node.id);\n }\n }\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const nodes = [];\n for (const node of graph.nodes) {\n if (runOf.get(node.id) !== node.id) {\n continue;\n }\n const run = runs.get(node.id);\n if (!run) {\n nodes.push(node);\n continue;\n }\n const members = run.map((id) => byId.get(id));\n const backbone = members.filter(isBackbone);\n const first = backbone.length ? backbone.reduce((a, b) => a.stable.start <= b.stable.start ? a : b) : members[0];\n nodes.push({\n id: node.id,\n name: node.name,\n length: members.reduce((sum, n) => sum + n.length, 0),\n depth: node.depth,\n stable: first.stable\n });\n }\n const seen = /* @__PURE__ */ new Set();\n const edges = [];\n graph.edges.forEach((edge, ei) => {\n const from = runOf.get(edge.from);\n const to = runOf.get(edge.to);\n const side = sides[ei];\n const key = `${from}|${side.from}>${to}|${side.to}`;\n if (joined.has(ei) || seen.has(key)) {\n return;\n }\n seen.add(key);\n edges.push({\n from,\n to,\n ...side.from === \"start\" ? { fromStrand: flip(ownStrand(from)) } : {},\n ...side.to === \"end\" ? { toStrand: flip(ownStrand(to)) } : {}\n });\n });\n return {\n graph: { ...graph, nodes, edges, paths: void 0, pathVisits: void 0 },\n runs\n };\n}\nfunction splitRuns(positions, runs, weightOf) {\n const out = { ...positions };\n for (const [id, members] of runs) {\n const line = positions[id];\n if (!line?.length) {\n continue;\n }\n delete out[id];\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n const weights = members.map((m) => Math.max(weightOf(m), 0));\n const weightSum = weights.reduce((a, b) => a + b, 0);\n let from = 0;\n members.forEach((member, k) => {\n const share = weightSum ? weights[k] / weightSum * total : total / members.length;\n const to = k === members.length - 1 ? total : from + share;\n out[member] = slice(line, arc, from, to);\n from = to;\n });\n }\n return out;\n}\nfunction polylineSlice(line, from, to) {\n if (line.length === 0) {\n return [];\n }\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n return slice(line, arc, from * total, to * total);\n}\nfunction polylineMidpoint(line) {\n const arc = arcPrefix(line);\n return pointAt(line, arc, arc.at(-1) / 2);\n}\nfunction arcPrefix(line) {\n const arc = [0];\n for (let i = 1; i < line.length; i++) {\n arc.push(\n arc[i - 1] + Math.hypot(line[i].x - line[i - 1].x, line[i].y - line[i - 1].y)\n );\n }\n return arc;\n}\nfunction firstReaching(arc, s) {\n let lo = 0;\n let hi = arc.length;\n while (lo < hi) {\n const mid = lo + hi >> 1;\n if (arc[mid] < s) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n}\nfunction pointAt(line, arc, s) {\n if (s <= 0) {\n return { ...line[0] };\n }\n const i = firstReaching(arc, s);\n if (i >= arc.length) {\n return { ...line.at(-1) };\n }\n const span = arc[i] - arc[i - 1];\n const t = span > 0 ? (s - arc[i - 1]) / span : 0;\n const a = line[i - 1];\n const b = line[i];\n return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };\n}\nfunction slice(line, arc, from, to) {\n const points = [pointAt(line, arc, from)];\n for (let i = firstReaching(arc, from); i < line.length && arc[i] < to; i++) {\n if (arc[i] > from) {\n points.push({ ...line[i] });\n }\n }\n points.push(pointAt(line, arc, to));\n return points;\n}\n\nexport {\n mergeRuns,\n splitRuns,\n polylineSlice,\n polylineMidpoint\n};\n", "import {\n referenceVisitStarts\n} from \"./chunk-3YBP46PB.js\";\nimport {\n computeEdgeCurves,\n edgeJoinOf,\n routedEdgeCurves,\n strandSides\n} from \"./chunk-VACK24HF.js\";\nimport {\n groupBy\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n firstNodeAtOrAfter,\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\nimport {\n partitionPoint\n} from \"./chunk-HOAIOEI7.js\";\n\n// src/deletionEdges.ts\nvar MIN_DELETION_BP = 1;\nfunction bypassedPoints(nodePositions, bypassed) {\n return bypassed.flatMap((id) => nodePositions[id] ?? []);\n}\nfunction edgeCurvesOf(nodePositions, edge, axis, bypassed, route, stranded) {\n const from = nodePositions[edge.from];\n const to = nodePositions[edge.to];\n if (!from?.length || !to?.length) {\n return void 0;\n }\n return route ? routedEdgeCurves(\n from,\n to,\n route,\n stranded ? strandSides(edge) : void 0\n ) : computeEdgeCurves(\n from,\n to,\n edgeJoinOf(edge, stranded),\n axis,\n bypassed ? bypassedPoints(nodePositions, bypassed) : []\n );\n}\nfunction backboneBySequence(graph) {\n const bySequence = groupBy(\n graph.nodes.filter(isBackbone),\n (node) => node.stable.refName\n );\n for (const list of bySequence.values()) {\n list.sort((a, b) => a.stable.start - b.stable.start);\n }\n return bySequence;\n}\nfunction bypassedNodes(nodes, start, end) {\n const bypassed = [];\n if (nodes) {\n for (let i = firstNodeAtOrAfter(nodes, start); i < nodes.length; i++) {\n const node = nodes[i];\n if (node.stable.start >= end) {\n break;\n }\n if (node.stable.start + node.length <= end) {\n bypassed.push(node.id);\n }\n }\n }\n return bypassed;\n}\nfunction skipsBetween(edge, from, to, forwards) {\n const { fromStrand, toStrand } = edge;\n if (fromStrand === void 0 || toStrand === void 0) {\n return true;\n }\n const leavesRight = fromStrand === (from.stable.strand ?? \"+\");\n const arrivesLeft = toStrand === (to.stable.strand ?? \"+\");\n return forwards ? leavesRight && arrivesLeft : !leavesRight && !arrivesLeft;\n}\nfunction skippedSpan(edge, from, to, startsOf) {\n let best;\n for (const a of startsOf(from)) {\n for (const b of startsOf(to)) {\n const forwards = a <= b;\n const span = forwards ? { start: a + from.length, end: b } : { start: b + to.length, end: a };\n if (skipsBetween(edge, from, to, forwards) && (!best || Math.abs(span.end - span.start) < Math.abs(best.end - best.start))) {\n best = span;\n }\n }\n }\n return best;\n}\nvar COPY_SWITCH_SHARE = 0.01;\nfunction repeatCopies(backbone, startsOf) {\n const bySequence = /* @__PURE__ */ new Map();\n for (const [refName, nodes] of backbone) {\n const copies = nodes.flatMap((node) => {\n const starts = startsOf(node);\n return starts.slice(1).map((next, i) => ({\n at: starts[i],\n copy: next - starts[i]\n }));\n });\n if (copies.length) {\n bySequence.set(\n refName,\n copies.sort((a, b) => a.at - b.at)\n );\n }\n }\n return bySequence;\n}\nfunction switchesCopy(copies, start, bp) {\n if (!copies) {\n return false;\n }\n const i = partitionPoint(copies.length, (k) => copies[k].at < start);\n const near = [copies[i - 1], copies[i]].filter((c) => c !== void 0).sort((a, b) => Math.abs(a.at - start) - Math.abs(b.at - start))[0];\n return near !== void 0 && Math.abs(near.at - start) <= near.copy && Math.abs(bp - near.copy) <= near.copy * COPY_SWITCH_SHARE;\n}\nfunction deletionEdges(graph) {\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const backbone = backboneBySequence(graph);\n const startsOf = referenceVisitStarts(graph);\n const copies = repeatCopies(backbone, startsOf);\n const found = [];\n for (let edgeIndex = 0; edgeIndex < graph.edges.length; edgeIndex++) {\n const edge = graph.edges[edgeIndex];\n const from = byId.get(edge.from);\n const to = byId.get(edge.to);\n if (from !== void 0 && to !== void 0 && isBackbone(from) && isBackbone(to) && from.stable.refName === to.stable.refName) {\n const span = skippedSpan(edge, from, to, startsOf);\n const refName = from.stable.refName;\n const bp = span ? span.end - span.start : 0;\n if (span && bp >= MIN_DELETION_BP && !switchesCopy(copies.get(refName), span.start, bp)) {\n const { start, end } = span;\n found.push({\n edgeIndex,\n from: edge.from,\n to: edge.to,\n ...edge.fromStrand ? { fromStrand: edge.fromStrand } : {},\n ...edge.toStrand ? { toStrand: edge.toStrand } : {},\n refName,\n start,\n end,\n bp,\n bypassed: bypassedNodes(backbone.get(refName), start, end)\n });\n }\n }\n }\n return found;\n}\nfunction closableDeletions(graph, deletions) {\n const parent = /* @__PURE__ */ new Map();\n const root = (id) => {\n let r = id;\n while (parent.has(r)) {\n r = parent.get(r);\n }\n if (r !== id) {\n parent.set(id, r);\n }\n return r;\n };\n const join = (a, b) => {\n const [ra, rb] = [root(a), root(b)];\n if (ra !== rb) {\n parent.set(ra, rb);\n }\n return ra !== rb;\n };\n const candidates = new Set(deletions.map((d) => d.edgeIndex));\n graph.edges.forEach((e, ei) => {\n if (!candidates.has(ei)) {\n join(e.from, e.to);\n }\n });\n return new Set(\n deletions.filter((d) => !join(d.from, d.to)).map((d) => d.edgeIndex)\n );\n}\nvar drawings = /* @__PURE__ */ new WeakMap();\nfunction deletionDrawing(graph, deletions, show = true) {\n let byShow = drawings.get(deletions);\n if (!byShow) {\n byShow = /* @__PURE__ */ new Map();\n drawings.set(deletions, byShow);\n }\n let drawing = byShow.get(show);\n if (!drawing) {\n const hidden = show ? /* @__PURE__ */ new Set() : closableDeletions(graph, deletions);\n drawing = {\n shown: deletions.filter((d) => !hidden.has(d.edgeIndex)),\n bypassed: new Map(deletions.map((d) => [d.edgeIndex, d.bypassed])),\n hidden\n };\n byShow.set(show, drawing);\n }\n return drawing;\n}\n\nexport {\n edgeCurvesOf,\n deletionEdges,\n closableDeletions,\n deletionDrawing\n};\n", "import {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n labelWidth,\n occupancy\n} from \"./chunk-AB35TJST.js\";\nimport {\n polylineMidpoint\n} from \"./chunk-2VMKQKVO.js\";\nimport {\n edgeCurvesOf\n} from \"./chunk-DV5B5UU7.js\";\nimport {\n curveBounds,\n curveMidpoint,\n polylinePx\n} from \"./chunk-VACK24HF.js\";\n\n// src/graphLabels.ts\nvar MIN_DELETION_LABEL_PX = 26;\nvar PX_PER_NODE_LABEL = 4e4;\nvar MIN_NODE_LABELS = 8;\nvar LEADER_GAP_PX = 8;\nvar LABEL_CHAR_PX = 5.7;\nvar LABEL_PAD_PX = 6;\nvar LABEL_HEIGHT_PX = 13;\nvar LABEL_GAP_PX = 3;\nvar MAX_LABEL_OVERHANG = 2;\nfunction labelHalfWidth(text) {\n return (text.length * LABEL_CHAR_PX + LABEL_PAD_PX + LABEL_GAP_PX) / 2;\n}\nvar LABEL_HALF_HEIGHT = (LABEL_HEIGHT_PX + LABEL_GAP_PX) / 2;\nvar MIN_LABEL_HALF_WIDTH = labelHalfWidth(\"1 bp\");\nfunction boxAt(halfW, x, y) {\n return {\n x0: x - halfW,\n x1: x + halfW,\n y0: y - LABEL_HALF_HEIGHT,\n y1: y + LABEL_HALF_HEIGHT\n };\n}\nfunction rowLabelBox(text, screenY) {\n return {\n x0: 6,\n x1: 6 + labelWidth(text) + LABEL_GAP_PX,\n y0: screenY - 8 - LABEL_GAP_PX / 2,\n y1: screenY + 8 + LABEL_GAP_PX / 2\n };\n}\nfunction clamp(v, lo, hi) {\n return hi < lo ? v : Math.min(Math.max(v, lo), hi);\n}\nfunction groupDigits(n) {\n return String(n).replace(/\\B(?=(\\d{3})+$)/g, \",\");\n}\nfunction formatBp(bp) {\n const [value, unit] = bp >= 999500 ? [bp / 1e6, \"Mb\"] : bp >= 1e3 ? [bp / 1e3, \"kb\"] : [];\n if (value === void 0) {\n return `${bp} bp`;\n }\n return `${+value.toFixed(value >= 100 ? 0 : 1)} ${unit}`;\n}\nfunction deletionText(bp) {\n return `${formatBp(bp)} del`;\n}\nfunction arcOutward(curves, apex, scaleX, scaleY) {\n const first = curves[0];\n const last = curves[curves.length - 1];\n const dx = (apex.x - (first.x0 + last.x1) / 2) * scaleX;\n const dy = (apex.y - (first.y0 + last.y1) / 2) * scaleY;\n const len = Math.hypot(dx, dy);\n return len === 0 ? { x: 0, y: -1 } : { x: dx / len, y: dy / len };\n}\nfunction boxSupport(box, dir) {\n return Math.abs(dir.x) * (box.x1 - box.x0) / 2 + Math.abs(dir.y) * (box.y1 - box.y0) / 2;\n}\nfunction boxRayCrossing(box, dir) {\n const halfW = (box.x1 - box.x0) / 2;\n const halfH = (box.y1 - box.y0) / 2;\n return Math.min(\n dir.x === 0 ? Infinity : halfW / Math.abs(dir.x),\n dir.y === 0 ? Infinity : halfH / Math.abs(dir.y)\n );\n}\nfunction runBounds(nodeIds, nodePositions) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const id of nodeIds) {\n for (const p of nodePositions[id] ?? []) {\n minX = Math.min(minX, p.x);\n maxX = Math.max(maxX, p.x);\n minY = Math.min(minY, p.y);\n maxY = Math.max(maxY, p.y);\n }\n }\n return minX === Infinity ? void 0 : { minX, minY, maxX, maxY };\n}\nvar nodeOrderCache = weakMemo();\nfunction labelOrder(nodePositions, nodeLengths) {\n return nodeOrderCache(\n nodePositions,\n [nodeLengths],\n () => Object.entries(nodePositions).filter(([id, segments]) => segments.length > 0 && nodeLengths.has(id)).sort(([a], [b]) => nodeLengths.get(b) - nodeLengths.get(a))\n );\n}\nvar arcCache = weakMemo();\nfunction arcPlacements(nodePositions, deletions, axis, version, routes, stranded) {\n const { scaleX, scaleY } = axis;\n return arcCache(\n nodePositions,\n [deletions, routes, stranded, scaleX, scaleY, version],\n () => {\n const arcs = [];\n for (const deletion of [...deletions].sort((a, b) => b.bp - a.bp)) {\n const curves = edgeCurvesOf(\n nodePositions,\n deletion,\n axis,\n deletion.bypassed,\n routes?.[deletion.edgeIndex],\n stranded\n );\n const apex = curves ? curveMidpoint(curves) : void 0;\n if (curves && apex) {\n const { minX, minY, maxX, maxY } = curveBounds(curves);\n arcs.push({\n deletion,\n curves,\n apex,\n // in screen px, so the two axes' units cannot be added by accident\n extent: Math.max((maxX - minX) * scaleX, (maxY - minY) * scaleY)\n });\n }\n }\n return arcs;\n }\n );\n}\nfunction sizeLabelCandidates({\n nodePositions,\n nodeLengths,\n deletions,\n deletionRoutes,\n stranded = false,\n alleleDeletions,\n axis,\n translateX,\n translateY,\n width,\n height,\n version = 0\n}) {\n const { scaleX, scaleY } = axis;\n const deletionCandidates = [];\n const nodeCandidates = [];\n for (const { deletion, curves, apex, extent } of arcPlacements(\n nodePositions,\n deletions,\n axis,\n version,\n deletionRoutes,\n stranded\n )) {\n if (extent >= MIN_DELETION_LABEL_PX) {\n const text = deletionText(deletion.bp);\n const halfW = labelHalfWidth(text);\n const box = boxAt(halfW, 0, 0);\n const arcX = apex.x * scaleX + translateX;\n const arcY = apex.y * scaleY + translateY;\n if (arcX < 0 || arcX > width || arcY < 0 || arcY > height) {\n continue;\n }\n const fits = extent >= halfW * 2 / MAX_LABEL_OVERHANG;\n const bow = arcOutward(curves, apex, scaleX, scaleY);\n const offset = boxSupport(box, bow) + LEADER_GAP_PX;\n const x = fits ? arcX : clamp(arcX + bow.x * offset, halfW, width - halfW);\n const y = fits ? arcY : clamp(\n arcY + bow.y * offset,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n const away = Math.hypot(x - arcX, y - arcY);\n let leader;\n if (away > 0) {\n const dir = { x: (x - arcX) / away, y: (y - arcY) / away };\n const crossing = boxRayCrossing(box, dir);\n leader = {\n arcX,\n arcY,\n labelX: x - dir.x * crossing,\n labelY: y - dir.y * crossing\n };\n }\n deletionCandidates.push({\n label: {\n key: `del:${deletion.edgeIndex}`,\n text,\n x,\n y,\n kind: \"deletion\",\n leader\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n const labelledByDeletion = /* @__PURE__ */ new Set();\n const alleleRuns = [...alleleDeletions ?? []].sort((a, b) => b.bp - a.bp);\n for (const run of alleleRuns) {\n const drawn = runBounds(run.nodeIds, nodePositions);\n if (!drawn) {\n continue;\n }\n const shownLeft = Math.max(drawn.minX * scaleX + translateX, 0);\n const shownRight = Math.min(drawn.maxX * scaleX + translateX, width);\n const shownTop = Math.max(drawn.minY * scaleY + translateY, 0);\n const shownBottom = Math.min(drawn.maxY * scaleY + translateY, height);\n if (shownRight < shownLeft || shownBottom < shownTop) {\n continue;\n }\n const extent = Math.max(shownRight - shownLeft, shownBottom - shownTop);\n const text = deletionText(run.bp);\n const halfW = labelHalfWidth(text);\n if (extent >= halfW * 2 / MAX_LABEL_OVERHANG) {\n for (const id of run.nodeIds) {\n labelledByDeletion.add(id);\n }\n const x = clamp((shownLeft + shownRight) / 2, halfW, width - halfW);\n const y = clamp(\n (shownTop + shownBottom) / 2,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n deletionCandidates.push({\n label: {\n key: `alleledel:${run.nodeIds.join(\",\")}`,\n text,\n x,\n y,\n kind: \"deletion\"\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n for (const [id, segments] of labelOrder(nodePositions, nodeLengths)) {\n if (labelledByDeletion.has(id)) {\n continue;\n }\n const { x, y } = polylineMidpoint(segments);\n const screenY = y * scaleY + translateY;\n if (screenY + LABEL_HALF_HEIGHT <= 0 || screenY - LABEL_HALF_HEIGHT >= height) {\n continue;\n }\n const drawn = polylinePx(segments, scaleX, scaleY);\n if (drawn < MIN_LABEL_HALF_WIDTH * 2 / MAX_LABEL_OVERHANG) {\n continue;\n }\n const text = formatBp(nodeLengths.get(id));\n const halfW = labelHalfWidth(text);\n if (drawn >= halfW * 2 / MAX_LABEL_OVERHANG) {\n const screenX = x * scaleX + translateX;\n nodeCandidates.push({\n label: {\n key: `node:${id}`,\n text,\n x: screenX,\n y: screenY,\n kind: \"node\"\n },\n box: boxAt(halfW, screenX, screenY)\n });\n }\n }\n return { deletions: deletionCandidates, nodes: nodeCandidates };\n}\nfunction nodeLabelBudget(width, height) {\n return Math.max(\n MIN_NODE_LABELS,\n Math.floor(width * height / PX_PER_NODE_LABEL)\n );\n}\nfunction placeSizeLabels(candidates, take, budget = Infinity) {\n const labels = [];\n for (const { label, box } of candidates) {\n if (labels.length >= budget) {\n break;\n }\n if (take(box)) {\n labels.push(label);\n }\n }\n return labels;\n}\nfunction graphLabels({\n reserved,\n take,\n ...args\n}) {\n take ??= occupancy(args, reserved);\n const { deletions, nodes } = sizeLabelCandidates(args);\n return [\n ...placeSizeLabels(deletions, take),\n ...placeSizeLabels(nodes, take, nodeLabelBudget(args.width, args.height))\n ];\n}\n\nexport {\n rowLabelBox,\n groupDigits,\n formatBp,\n sizeLabelCandidates,\n nodeLabelBudget,\n placeSizeLabels,\n graphLabels\n};\n", "import {\n groupDigits\n} from \"./chunk-T3H5ELLA.js\";\nimport {\n pathOrigin\n} from \"./chunk-3YBP46PB.js\";\nimport {\n isGenericSample\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/pathColors.ts\nfunction nameHue(name) {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return Math.abs(hash % 360);\n}\nfunction pathHueAt(index, count) {\n return index * 360 / count;\n}\nvar PATH_SATURATION = 0.7;\nvar PATH_LIGHTNESS = 0.5;\nvar MAX_PATH_COLORS = 16;\nfunction pathColorsLegible(pathCount) {\n return pathCount > 0 && pathCount <= MAX_PATH_COLORS;\n}\nfunction pathCssColor(index, count) {\n return `hsl(${pathHueAt(index, count)}, ${PATH_SATURATION * 100}%, ${PATH_LIGHTNESS * 100}%)`;\n}\nfunction pathGreyCssColor(index, count) {\n const lightness = count > 1 ? 25 + 45 * index / (count - 1) : 45;\n return `hsl(0, 0%, ${lightness}%)`;\n}\nfunction labelTiers(name) {\n const parts = pathOrigin(name).name.split(\"#\");\n const full = parts.join(\"#\");\n if (parts.length >= 3 && isGenericSample(parts[0])) {\n const contig = parts.slice(2).join(\"#\");\n return [contig, contig, full];\n }\n return [parts[0], parts.slice(0, 2).join(\"#\"), full];\n}\nfunction offsetTiers(name, tiers) {\n const { start } = pathOrigin(name);\n return tiers.map((t) => `${t} @${groupDigits(start)}`);\n}\nfunction pathLegend(paths, colors) {\n const firstOf = /* @__PURE__ */ new Map();\n paths.forEach((path, i) => {\n if (!firstOf.has(path.name)) {\n firstOf.set(path.name, i);\n }\n });\n const entries = [...firstOf].map(([name, i]) => ({ name, i }));\n const named = entries.map((e) => labelTiers(e.name));\n const candidates = [0, 1, 2].flatMap((t) => [\n entries.map((_, k) => named[k][t]),\n entries.map((e, k) => offsetTiers(e.name, named[k])[t])\n ]);\n const distinct = candidates.find(\n (labels2) => new Set(labels2).size === entries.length\n );\n const labels = distinct ?? candidates.at(-1);\n return entries.map(({ name, i }, k) => ({\n name,\n label: labels[k],\n color: colors?.[i] ?? pathCssColor(i, paths.length)\n }));\n}\nfunction walkLabelsOf(entries) {\n const seen = /* @__PURE__ */ new Map();\n return new Map(\n [...entries].sort((a, b) => a.label.localeCompare(b.label)).map((e) => {\n const n = (seen.get(e.label) ?? 0) + 1;\n seen.set(e.label, n);\n return [e.name, n > 1 ? `${e.label} (${n})` : e.label];\n })\n );\n}\n\nexport {\n nameHue,\n pathHueAt,\n PATH_SATURATION,\n PATH_LIGHTNESS,\n MAX_PATH_COLORS,\n pathColorsLegible,\n pathCssColor,\n pathGreyCssColor,\n pathLegend,\n walkLabelsOf\n};\n", "// src/nodeWidths.ts\nvar NODE_WIDTHS = [\n {\n value: \"depth\",\n label: \"By depth\",\n description: \"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform.\"\n },\n {\n value: \"uniform\",\n label: \"Uniform\",\n description: \"Every node the same thickness.\"\n }\n];\nvar MIN_FACTOR = 0.3;\nvar MAX_FACTOR = 3;\nfunction meanDepth(graph) {\n let weighted = 0;\n let length = 0;\n for (const node of graph.nodes) {\n weighted += node.depth * node.length;\n length += node.length;\n }\n return length > 0 ? weighted / length : 0;\n}\nfunction depthWidthFactor(node, mean) {\n if (!(mean > 0) || !(node.depth > 0)) {\n return 1;\n }\n return Math.min(\n MAX_FACTOR,\n Math.max(MIN_FACTOR, Math.sqrt(node.depth / mean))\n );\n}\nfunction nodeWidthPx(node, contigThickness, nodeWidth, mean) {\n return contigThickness * (nodeWidth === \"depth\" ? depthWidthFactor(node, mean) : 1);\n}\nfunction maxNodeWidthPx(contigThickness, nodeWidth) {\n return contigThickness * (nodeWidth === \"depth\" ? MAX_FACTOR : 1);\n}\nvar MIN_WALK_LANE_PX = 4;\nfunction walkLaneWidthPx(width, lanes) {\n return Math.max(width / lanes, MIN_WALK_LANE_PX);\n}\nfunction nodeInk(graph, nodeById, contigThickness, nodeWidth, lanes = 0) {\n const mean = graph ? meanDepth(graph) : 0;\n const reach = (width) => lanes > 0 ? walkLaneWidthPx(width, lanes) * lanes / 2 : width / 2;\n return {\n maxHalfWidthPx: reach(maxNodeWidthPx(contigThickness, nodeWidth)),\n halfWidthPx: (id) => {\n const node = nodeById?.get(id);\n return reach(\n node ? nodeWidthPx(node, contigThickness, nodeWidth, mean) : contigThickness\n );\n }\n };\n}\n\nexport {\n NODE_WIDTHS,\n meanDepth,\n nodeWidthPx,\n maxNodeWidthPx,\n walkLaneWidthPx,\n nodeInk\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ROW_HEIGHT_PX", "svgPath", "points", "round", "v", "p", "i", "projectLine", "x1", "y1", "x2", "y2", "distance", "d", "vx", "vy", "curvePointAt", "c", "t", "u", "a", "b", "e", "curveMidpoint", "curves", "mid", "curveBounds", "minX", "minY", "maxX", "maxY", "subCurve", "t0", "t1", "p0", "p1", "dt", "d0", "curveTangentAt", "d1", "VISIBLE_SAMPLES", "visibleStretches", "lengths", "bounds", "yToX", "stretches", "start", "k", "length", "pad", "last", "next", "from", "to", "prev", "dashCurves", "dashWorld", "total", "periods", "spans", "seen", "out", "dash", "end", "translateCurves", "dx", "dy", "attachment", "segments", "side", "TANGENT_SPAN_FACTOR", "MAX_TANGENT", "ownStrand", "id", "strandSides", "edge", "own", "strand", "spanOf", "min", "max", "s", "distanceToSpan", "x", "span", "facingSide", "other", "tieBreak", "startGap", "endGap", "facingSides", "fromSegments", "toSegments", "laidSides", "heldFacingSides", "byTo", "sides", "APEX_FRACTION", "BOW_CLEARANCE", "ALONG_FRACTION", "MAX_ROW_BOW_PX", "ROW_HEIGHT_PX", "bowAround", "p1x", "p1y", "p2x", "p2y", "toward", "maxBow", "chord", "ux", "uy", "reach", "minAlong", "maxAlong", "perp", "along", "uncapped", "size", "yToXOf", "scaleX", "scaleY", "PATH_RIBBON_SPACING_PX", "drawnDirection", "len", "pathRibbonOffsets", "count", "axis", "spacing", "dir", "offsets", "scaleYOf", "unscaleYOf", "polylinePx", "SELF_LOOP_MIN_PX", "SELF_LOOP_MAX_PX", "selfLoopReach", "scale", "nodePx", "selfLinkOf", "edgeJoinOf", "stranded", "self", "hairpinCurves", "attach", "at", "inward", "px", "py", "nearX", "nearY", "apexX", "apexY", "sideX", "sideY", "computeEdgeCurves", "join", "bypassed", "maxBowIn", "loop", "fromAttach", "toAttach", "fromEnd", "toStart", "segDirX", "segDirY", "ext", "perpX", "perpY", "midX", "midY", "cp1x", "cp1y", "cp2x", "cp2y", "fromPrev", "toNext", "dist", "tangentProj", "towardX", "towardY", "towardToX", "towardToY", "cx1", "cy1", "cx2", "cy2", "bulge", "chordLen", "bulgeX", "bulgeY", "spreadX", "spreadY", "nearerEnd", "routedEdgeCurves", "route", "tangent", "q", "ta", "tb", "weakMemo", "cache", "key", "deps", "compute", "hit", "d", "i", "value", "LABEL_PX", "LABEL_CHAR_PX", "LABEL_PAD", "labelWidth", "text", "overlaps", "a", "b", "offFrame", "box", "frame", "insideFrame", "occupancy", "reserved", "placed", "p", "placeLabels", "candidates", "take", "out", "row", "place", "w", "direction", "tries", "y", "flip", "strand", "mergeRuns", "graph", "alone", "sides", "strandSides", "at", "attach", "id", "side", "ei", "pushTo", "edge", "joinAfter", "a", "out", "joined", "runOf", "runs", "node", "into", "pred", "run", "next", "byId", "n", "nodes", "members", "backbone", "isBackbone", "first", "b", "sum", "seen", "edges", "from", "to", "key", "ownStrand", "splitRuns", "positions", "weightOf", "line", "arc", "arcPrefix", "total", "weights", "m", "weightSum", "member", "k", "share", "slice", "polylineSlice", "polylineMidpoint", "pointAt", "i", "firstReaching", "s", "lo", "hi", "mid", "span", "t", "points", "MIN_DELETION_BP", "bypassedPoints", "nodePositions", "bypassed", "id", "edgeCurvesOf", "edge", "axis", "route", "stranded", "from", "to", "routedEdgeCurves", "strandSides", "computeEdgeCurves", "edgeJoinOf", "backboneBySequence", "graph", "bySequence", "groupBy", "isBackbone", "node", "list", "a", "b", "bypassedNodes", "nodes", "start", "end", "i", "firstNodeAtOrAfter", "skipsBetween", "forwards", "fromStrand", "toStrand", "leavesRight", "arrivesLeft", "skippedSpan", "startsOf", "best", "span", "COPY_SWITCH_SHARE", "repeatCopies", "backbone", "refName", "copies", "starts", "next", "switchesCopy", "bp", "partitionPoint", "k", "near", "c", "deletionEdges", "byId", "n", "referenceVisitStarts", "found", "edgeIndex", "closableDeletions", "deletions", "parent", "root", "r", "join", "ra", "rb", "candidates", "d", "e", "ei", "drawings", "deletionDrawing", "show", "byShow", "drawing", "hidden", "MIN_DELETION_LABEL_PX", "PX_PER_NODE_LABEL", "MIN_NODE_LABELS", "LEADER_GAP_PX", "LABEL_CHAR_PX", "LABEL_PAD_PX", "LABEL_HEIGHT_PX", "LABEL_GAP_PX", "MAX_LABEL_OVERHANG", "labelHalfWidth", "text", "LABEL_HALF_HEIGHT", "MIN_LABEL_HALF_WIDTH", "boxAt", "halfW", "x", "y", "rowLabelBox", "screenY", "labelWidth", "clamp", "v", "lo", "hi", "groupDigits", "n", "formatBp", "bp", "value", "unit", "deletionText", "arcOutward", "curves", "apex", "scaleX", "scaleY", "first", "last", "dx", "dy", "len", "boxSupport", "box", "dir", "boxRayCrossing", "halfH", "runBounds", "nodeIds", "nodePositions", "minX", "minY", "maxX", "maxY", "id", "p", "nodeOrderCache", "weakMemo", "labelOrder", "nodeLengths", "segments", "a", "b", "arcCache", "arcPlacements", "deletions", "axis", "version", "routes", "stranded", "arcs", "deletion", "edgeCurvesOf", "curveMidpoint", "curveBounds", "sizeLabelCandidates", "deletionRoutes", "alleleDeletions", "translateX", "translateY", "width", "height", "deletionCandidates", "nodeCandidates", "extent", "arcX", "arcY", "fits", "bow", "offset", "away", "leader", "crossing", "labelledByDeletion", "alleleRuns", "run", "drawn", "shownLeft", "shownRight", "shownTop", "shownBottom", "polylineMidpoint", "polylinePx", "screenX", "nodeLabelBudget", "placeSizeLabels", "candidates", "take", "budget", "labels", "label", "graphLabels", "reserved", "args", "occupancy", "nodes", "nameHue", "name", "hash", "i", "pathHueAt", "index", "count", "PATH_SATURATION", "PATH_LIGHTNESS", "MAX_PATH_COLORS", "pathColorsLegible", "pathCount", "pathCssColor", "pathGreyCssColor", "labelTiers", "parts", "pathOrigin", "full", "isGenericSample", "contig", "offsetTiers", "tiers", "start", "t", "groupDigits", "pathLegend", "paths", "colors", "firstOf", "path", "entries", "named", "e", "candidates", "_", "k", "labels", "labels2", "walkLabelsOf", "seen", "a", "b", "n", "NODE_WIDTHS", "MIN_FACTOR", "MAX_FACTOR", "meanDepth", "graph", "weighted", "length", "node", "depthWidthFactor", "mean", "nodeWidthPx", "contigThickness", "nodeWidth", "maxNodeWidthPx", "MIN_WALK_LANE_PX", "walkLaneWidthPx", "width", "lanes", "nodeInk", "nodeById", "reach", "id"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{h as B,k as M,n as F}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{h as B,k as M,n as F}from"./chunk-4XM5OBD5.js";import{b as O,h as _}from"./chunk-UW7INEQF.js";import{F as b,L as A}from"./chunk-D5PRXUSS.js";import{e as R}from"./chunk-YU7T5WOQ.js";import{D as P,E,H as m,d as v,o as T,q as I,r as L,s as w,t as N,w as x,y as D,z as G}from"./chunk-UGCNPRKC.js";import{b as t,c as i,d as k}from"./chunk-JMBDTNUR.js";var S=[{value:0,label:"Fastest"},{value:1,label:"Fast"},{value:2,label:"Default"},{value:3,label:"Fine"},{value:4,label:"Best"}];function f({label:o,value:n,options:e,testId:s,size:c,sx:d,disabled:a,title:h,shown:g,onChange:Q}){let C=R();return i(w,{size:c,sx:d,disabled:a,title:h,children:[t(x,{id:C,shrink:!0,children:o}),t(P,{labelId:C,value:n,label:o,notched:!0,displayEmpty:!0,"data-testid":s,renderValue:l=>g??e.find(z=>z.value===l)?.label??l,onChange:l=>{Q(l.target.value)},children:e.map(l=>t(G,{value:l.value,disabled:l.disabled,title:l.disabled?void 0:l.description,children:t(D,{primary:l.label,secondary:l.disabled?l.description:void 0})},l.value))})]})}var u=F()({section:{marginBottom:24},group:{marginBottom:16},heading:{marginBottom:8}});function r({warn:o=!1,children:n}){return t(m,{variant:"caption",component:"div",color:o?"warning.main":"text.secondary",children:n})}function y({title:o,children:n}){let{classes:e}=u();return i("section",{className:e.group,children:[t(m,{variant:"subtitle1",className:e.heading,children:o}),n]})}function U({label:o,checked:n,onChange:e,children:s}){let{classes:c}=u();return i("div",{className:c.section,children:[t(N,{control:t(E,{checked:n,onChange:d=>{e(d.target.checked)}}),label:o}),s]})}function p({children:o,...n}){let{classes:e}=u();return i("div",{className:e.section,children:[t(f,{sx:{minWidth:200},...n}),o]})}var Y=[5e3,2e4,5e4,1e5];function H(o){return[...new Set([...Y,o])].sort((n,e)=>n-e).map(n=>({value:String(n),label:n.toLocaleString()}))}function W({label:o,choices:n,stored:e,auto:s,testId:c,onChange:d,children:a}){return n.length>0?t(p,{label:o,value:n.some(h=>h.trackId===e)?e:"",options:[{value:"",label:`Automatic (${s?.name??"none"})`},...n.map(({trackId:h,name:g})=>({value:h,label:g}))],testId:c,onChange:d,children:a}):null}var $=k(function(n){let{model:e,onClose:s,children:c}=n,{classes:d}=u();return i(v,{open:!0,onClose:s,title:"Graph settings",children:[i(L,{children:[i(y,{title:"Subgraph",children:[c,t(p,{label:"Node limit",value:String(e.maxGraphNodes),options:H(e.maxGraphNodes),testId:"graph-node-limit-select",onChange:a=>{e.setMaxGraphNodes(Number(a))},children:t(r,{children:"The most nodes a layout draws; past it the graph is declined. Walk rows take no limit."})})]}),i(y,{title:"Drawing",children:[e.anchorPaths.length>1?t(p,{label:"Reference path",value:e.activeReferencePath??"",options:e.anchorPaths.map(({name:a})=>({value:a,label:a})),testId:"graph-reference-path-select",onChange:a=>{e.setReferencePath(a),e.recomputeLayout()},children:t(r,{children:"The path the anchored layouts place x along"})}):null,t(p,{label:"Node width",value:e.nodeWidth,options:A,testId:"graph-node-width-select",onChange:a=>{e.setNodeWidth(a)},children:t(r,{children:"Depth as width. In a cut with walks, depth is how many haplotypes carry the node."})}),i(U,{label:"Draw paths",checked:e.drawPaths,onChange:a=>{e.setLayer("paths",a)},children:[t(r,{children:"Color each node by the paths through it, one lane per path"}),e.drawPaths&&!e.effectiveDrawPaths?t(r,{warn:!0,children:e.pathCount>b?`Off: ${e.pathCount.toLocaleString()} paths is past the ${b} this can tell apart`:"Off: this graph states no paths"}):null]}),t(W,{label:"Gene track",choices:e.geneTrackChoices,stored:e.geneTrackId,auto:M(e.geneTrackChoices,""),testId:"graph-gene-track-select",onChange:a=>{e.setGeneTrackId(a)},children:t(r,{children:"Where genes on the backbone come from"})}),t(W,{label:"Repeat track",choices:e.repeatTrackChoices,stored:e.repeatTrackId,auto:B(e.repeatTrackChoices,""),testId:"graph-repeat-track-select",onChange:a=>{e.setRepeatTrackId(a)},children:t(r,{children:"The tandem repeat annotation walk rows measure and tile by"})})]}),i(y,{title:"Force-directed layout",children:[e.hasGraph&&!e.usesLayoutEngine?t("div",{className:d.section,children:t(r,{warn:!0,children:"No effect on the current layout until Layout is Force-directed"})}):null,t(p,{label:"Engine",value:e.layoutEngine,options:O,testId:"graph-layout-engine-select",onChange:a=>{e.setLayoutEngine(a)},children:t(r,{children:"Stress keeps the reference straight, so a zoom keeps the picture; FMMM lets the whole graph settle."})}),t(p,{label:"Layout quality",value:String(e.layoutQuality),options:S.map(a=>({value:String(a.value),label:a.label})),testId:"graph-layout-quality-select",onChange:a=>{e.setLayoutQuality(Number(a))},children:t(r,{children:"The engine's iteration budget; higher is slower"})}),t(p,{label:"Bubble spread",value:e.bubbleSpread,options:_,testId:"graph-bubble-spread-select",onChange:a=>{e.setBubbleSpread(a)},children:t(r,{children:"How far the layout opens a bubble"})}),e.layoutEngine==="stress"?null:t(U,{label:"Linear layout",checked:e.linearLayout,onChange:a=>{e.setLinearLayout(a)},children:t(r,{children:"Keeps a chain of nodes on one line where it can"})})]})]}),t(I,{children:t(T,{variant:"contained",color:"primary",onClick:s,children:"Close"})})]})}),he=$;export{f as a,he as b};
|
|
2
|
+
//# sourceMappingURL=chunk-JXOLZ5IZ.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-K5SIJGAE.js", "../../src/GraphGenomeView/components/LabelledSelect.tsx", "../../src/GraphGenomeView/components/GraphSettingsDialog.tsx"],
|
|
4
4
|
"sourcesContent": ["// src/layoutQualities.ts\nvar LAYOUT_QUALITIES = [\n { value: 0, label: \"Fastest\" },\n { value: 1, label: \"Fast\" },\n { value: 2, label: \"Default\" },\n { value: 3, label: \"Fine\" },\n { value: 4, label: \"Best\" }\n];\n\nexport {\n LAYOUT_QUALITIES\n};\n", "import { useId } from 'react'\n\nimport {\n FormControl,\n InputLabel,\n ListItemText,\n MenuItem,\n Select,\n} from '@mui/material'\n\nimport type { SxProps } from '@mui/material'\n\ninterface SelectOption<T extends string> {\n value: T\n label: string\n // an option's tooltip, and the reason under a disabled one, whose tooltip\n // cannot open\n description?: string\n disabled?: boolean\n}\n\n// One dropdown with its label tied to it, so a screen reader names the combobox\nexport default function LabelledSelect<T extends string>({\n label,\n value,\n options,\n testId,\n size,\n sx,\n disabled,\n title,\n shown,\n onChange,\n}: {\n label: string\n value: T\n options: readonly SelectOption<T>[]\n testId?: string\n size?: 'small' | 'medium'\n sx?: SxProps\n disabled?: boolean\n title?: string\n // what the closed select reads, when not the picked option's label\n shown?: string\n onChange: (value: T) => void\n}) {\n const labelId = useId()\n return (\n <FormControl size={size} sx={sx} disabled={disabled} title={title}>\n <InputLabel id={labelId} shrink>\n {label}\n </InputLabel>\n <Select\n labelId={labelId}\n value={value}\n label={label}\n notched\n displayEmpty\n data-testid={testId}\n renderValue={picked =>\n shown ?? options.find(o => o.value === picked)?.label ?? picked\n }\n onChange={e => {\n onChange(e.target.value as T)\n }}\n >\n {options.map(o => (\n <MenuItem\n key={o.value}\n value={o.value}\n disabled={o.disabled}\n title={o.disabled ? undefined : o.description}\n >\n <ListItemText\n primary={o.label}\n secondary={o.disabled ? o.description : undefined}\n />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )\n}\n", "import type { ReactNode } from 'react'\n\nimport { BUBBLE_SPREADS } from '@jbrowse/bandage-core/bubbleSpreads'\nimport { LAYOUT_ENGINES } from '@jbrowse/bandage-core/layoutEngines'\nimport { LAYOUT_QUALITIES } from '@jbrowse/bandage-core/layoutQualities'\nimport { NODE_WIDTHS } from '@jbrowse/bandage-core/nodeWidths'\nimport { MAX_PATH_COLORS } from '@jbrowse/bandage-core/pathColors'\nimport { Dialog } from '@jbrowse/core/ui'\nimport {\n Button,\n DialogActions,\n DialogContent,\n FormControlLabel,\n Switch,\n Typography,\n} from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { makeStyles } from 'tss-react/mui'\n\nimport LabelledSelect from './LabelledSelect'\nimport { pickGeneTrack } from '../genes/geneFeatures'\nimport { pickRepeatTrack } from '../repeats/repeatFeatures'\n\nimport type { GraphPaneModel } from '../model'\n\nconst useStyles = makeStyles()({\n section: {\n marginBottom: 24,\n },\n group: {\n marginBottom: 16,\n },\n heading: {\n marginBottom: 8,\n },\n})\n\nfunction Caption({\n warn = false,\n children,\n}: {\n warn?: boolean\n children: ReactNode\n}) {\n return (\n <Typography\n variant=\"caption\"\n component=\"div\"\n color={warn ? 'warning.main' : 'text.secondary'}\n >\n {children}\n </Typography>\n )\n}\n\nfunction Group({ title, children }: { title: string; children: ReactNode }) {\n const { classes } = useStyles()\n return (\n <section className={classes.group}>\n <Typography variant=\"subtitle1\" className={classes.heading}>\n {title}\n </Typography>\n {children}\n </section>\n )\n}\n\nfunction SettingSwitch({\n label,\n checked,\n onChange,\n children,\n}: {\n label: string\n checked: boolean\n onChange: (checked: boolean) => void\n children?: ReactNode\n}) {\n const { classes } = useStyles()\n return (\n <div className={classes.section}>\n <FormControlLabel\n control={\n <Switch\n checked={checked}\n onChange={e => {\n onChange(e.target.checked)\n }}\n />\n }\n label={label}\n />\n {children}\n </div>\n )\n}\n\n// one dropdown setting, at the dialog's width, and its caption\nfunction SettingSelect<T extends string>({\n children,\n ...props\n}: Omit<Parameters<typeof LabelledSelect<T>>[0], 'size' | 'sx'> & {\n children?: ReactNode\n}) {\n const { classes } = useStyles()\n return (\n <div className={classes.section}>\n <LabelledSelect sx={{ minWidth: 200 }} {...props} />\n {children}\n </div>\n )\n}\n\nconst NODE_LIMITS = [5000, 20_000, 50_000, 100_000]\n\n// the presets, with a limit a session states among them\nfunction nodeLimitOptions(current: number) {\n return [...new Set([...NODE_LIMITS, current])]\n .sort((a, b) => a - b)\n .map(limit => ({ value: String(limit), label: limit.toLocaleString() }))\n}\n\ninterface NamedTrack {\n trackId: string\n name: string\n}\n\n// '' leaves the pick to the heuristic, so a session can go back to it\nfunction TrackPickSetting({\n label,\n choices,\n stored,\n auto,\n testId,\n onChange,\n children,\n}: {\n label: string\n choices: NamedTrack[]\n stored: string\n auto: NamedTrack | undefined\n testId: string\n onChange: (trackId: string) => void\n children: ReactNode\n}) {\n return choices.length > 0 ? (\n <SettingSelect\n label={label}\n value={choices.some(t => t.trackId === stored) ? stored : ''}\n options={[\n { value: '', label: `Automatic (${auto?.name ?? 'none'})` },\n ...choices.map(({ trackId, name }) => ({\n value: trackId,\n label: name,\n })),\n ]}\n testId={testId}\n onChange={onChange}\n >\n {children}\n </SettingSelect>\n ) : null\n}\n\n// Toggles the menus already offer (halos, genes, color) stay out of here.\n// `children` is the host's own part of the subgraph group.\nconst GraphSettingsDialog = observer(function GraphSettingsDialog(props: {\n model: GraphPaneModel\n onClose: () => void\n children?: ReactNode\n}) {\n const { model, onClose, children } = props\n const { classes } = useStyles()\n\n return (\n <Dialog open onClose={onClose} title=\"Graph settings\">\n <DialogContent>\n <Group title=\"Subgraph\">\n {children}\n <SettingSelect\n label=\"Node limit\"\n value={String(model.maxGraphNodes)}\n options={nodeLimitOptions(model.maxGraphNodes)}\n testId=\"graph-node-limit-select\"\n onChange={limit => {\n model.setMaxGraphNodes(Number(limit))\n }}\n >\n <Caption>\n The most nodes a layout draws; past it the graph is declined. Walk\n rows take no limit.\n </Caption>\n </SettingSelect>\n </Group>\n\n <Group title=\"Drawing\">\n {model.anchorPaths.length > 1 ? (\n <SettingSelect\n label=\"Reference path\"\n value={model.activeReferencePath ?? ''}\n options={model.anchorPaths.map(({ name }) => ({\n value: name,\n label: name,\n }))}\n testId=\"graph-reference-path-select\"\n onChange={name => {\n model.setReferencePath(name)\n void model.recomputeLayout()\n }}\n >\n <Caption>The path the anchored layouts place x along</Caption>\n </SettingSelect>\n ) : null}\n\n <SettingSelect\n label=\"Node width\"\n value={model.nodeWidth}\n options={NODE_WIDTHS}\n testId=\"graph-node-width-select\"\n onChange={width => {\n model.setNodeWidth(width)\n }}\n >\n <Caption>\n Depth as width. In a cut with walks, depth is how many haplotypes\n carry the node.\n </Caption>\n </SettingSelect>\n\n <SettingSwitch\n label=\"Draw paths\"\n checked={model.drawPaths}\n onChange={draw => {\n model.setLayer('paths', draw)\n }}\n >\n <Caption>\n Color each node by the paths through it, one lane per path\n </Caption>\n {model.drawPaths && !model.effectiveDrawPaths ? (\n <Caption warn>\n {model.pathCount > MAX_PATH_COLORS\n ? `Off: ${model.pathCount.toLocaleString()} paths is past the ${MAX_PATH_COLORS} this can tell apart`\n : 'Off: this graph states no paths'}\n </Caption>\n ) : null}\n </SettingSwitch>\n\n <TrackPickSetting\n label=\"Gene track\"\n choices={model.geneTrackChoices}\n stored={model.geneTrackId}\n auto={pickGeneTrack(model.geneTrackChoices, '')}\n testId=\"graph-gene-track-select\"\n onChange={trackId => {\n model.setGeneTrackId(trackId)\n }}\n >\n <Caption>Where genes on the backbone come from</Caption>\n </TrackPickSetting>\n\n <TrackPickSetting\n label=\"Repeat track\"\n choices={model.repeatTrackChoices}\n stored={model.repeatTrackId}\n auto={pickRepeatTrack(model.repeatTrackChoices, '')}\n testId=\"graph-repeat-track-select\"\n onChange={trackId => {\n model.setRepeatTrackId(trackId)\n }}\n >\n <Caption>\n The tandem repeat annotation walk rows measure and tile by\n </Caption>\n </TrackPickSetting>\n </Group>\n\n <Group title=\"Force-directed layout\">\n {model.hasGraph && !model.usesLayoutEngine ? (\n <div className={classes.section}>\n <Caption warn>\n No effect on the current layout until Layout is Force-directed\n </Caption>\n </div>\n ) : null}\n\n <SettingSelect\n label=\"Engine\"\n value={model.layoutEngine}\n options={LAYOUT_ENGINES}\n testId=\"graph-layout-engine-select\"\n onChange={engine => {\n model.setLayoutEngine(engine)\n }}\n >\n <Caption>\n Stress keeps the reference straight, so a zoom keeps the picture;\n FMMM lets the whole graph settle.\n </Caption>\n </SettingSelect>\n\n <SettingSelect\n label=\"Layout quality\"\n value={String(model.layoutQuality)}\n options={LAYOUT_QUALITIES.map(q => ({\n value: String(q.value),\n label: q.label,\n }))}\n testId=\"graph-layout-quality-select\"\n onChange={quality => {\n model.setLayoutQuality(Number(quality))\n }}\n >\n <Caption>\n The engine's iteration budget; higher is slower\n </Caption>\n </SettingSelect>\n\n <SettingSelect\n label=\"Bubble spread\"\n value={model.bubbleSpread}\n options={BUBBLE_SPREADS}\n testId=\"graph-bubble-spread-select\"\n onChange={spread => {\n model.setBubbleSpread(spread)\n }}\n >\n <Caption>How far the layout opens a bubble</Caption>\n </SettingSelect>\n\n {model.layoutEngine === 'stress' ? null : (\n <SettingSwitch\n label=\"Linear layout\"\n checked={model.linearLayout}\n onChange={linear => {\n model.setLinearLayout(linear)\n }}\n >\n <Caption>Keeps a chain of nodes on one line where it can</Caption>\n </SettingSwitch>\n )}\n </Group>\n </DialogContent>\n\n <DialogActions>\n <Button variant=\"contained\" color=\"primary\" onClick={onClose}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n})\n\nexport default GraphSettingsDialog\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["LAYOUT_QUALITIES", "LabelledSelect", "label", "value", "options", "testId", "size", "sx", "disabled", "title", "shown", "onChange", "labelId", "useId", "jsxs", "FormControl", "jsx", "InputLabel", "Select", "picked", "o", "e", "MenuItem", "ListItemText", "useStyles", "makeStyles", "Caption", "warn", "children", "jsx", "Typography", "Group", "title", "classes", "jsxs", "SettingSwitch", "label", "checked", "onChange", "FormControlLabel", "Switch", "e", "SettingSelect", "props", "LabelledSelect", "NODE_LIMITS", "nodeLimitOptions", "current", "a", "b", "limit", "TrackPickSetting", "choices", "stored", "auto", "testId", "t", "trackId", "name", "GraphSettingsDialog", "observer", "model", "onClose", "Dialog", "DialogContent", "NODE_WIDTHS", "width", "draw", "MAX_PATH_COLORS", "pickGeneTrack", "pickRepeatTrack", "LAYOUT_ENGINES", "engine", "LAYOUT_QUALITIES", "q", "quality", "BUBBLE_SPREADS", "spread", "linear", "DialogActions", "Button", "GraphSettingsDialog_default"]
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as m}from"./chunk-QASFRHPG.js";import{d as u,e as o,g as l,k as g}from"./chunk-OUHKJSKZ.js";import{h as i}from"./chunk-VIVPTP5Z.js";var B={steps:"walkStepBudget",bytes:"walkByteBudget"},b=class{constructor(t,e){this.file=t;this.adapter=e;this.reader=new l(t)}async haplotypeNames(t={}){let{haplotypes:e}=await this.reader.header(t);return e.length>0?e:void 0}budgets(){return{stepBudget:this.adapter.getConf("walkStepBudget"),byteBudget:this.adapter.getConf("walkByteBudget"),budgetNames:B}}async subgraph(t,e,{signal:n,haplotypes:d,walkRows:a,expand:r}){let s=this.budgets(),{graph:h,kept:c,fragments:f}=await this.reader.cut(t,e,{...s,stepBudget:a?1/0:s.stepBudget,signal:n,keep:o(d?.map(p=>i(this.adapter,p)),t),...r?.length?{expand:p=>r.includes(p)}:{}});return m(h.tables(c,f),e,a)}async referenceNodes(t,e,n){let d=[];await g(this.file,t,await this.reader.queryStart(e.start,{...n,refName:t,end:e.end}),e.end,{signal:n.signal,lineCallback:r=>{let s=r.split(" ");s[3]==="ref"&&d.push(s)}});let a=new Set;return u(d).filter(r=>r.refName!==t||r.end<=e.start||r.start>=e.end||a.has(r.id)?!1:(a.add(r.id),!0))}};export{b as a};
|
|
2
|
+
//# sourceMappingURL=chunk-KPP5H27W.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/RgfaTabixAdapter/walkReader.ts"],
|
|
4
|
+
"sourcesContent": ["import { resolvePanSNPrefix } from '@jbrowse/bandage-core/pansn'\nimport { WalkReader, referenceNodes, walksKept } from '@jbrowse/graph-walks'\n\nimport { getLines } from '../tabixRange.ts'\nimport { walkCutFor } from './walkCut.ts'\n\nimport type { SubgraphAdapterOptions } from '../GetSubgraph.ts'\nimport type { TabixIndexedFile } from '@gmod/tabix'\nimport type {\n BaseFeatureDataAdapter,\n BaseOptions,\n} from '@jbrowse/core/data_adapters/BaseAdapter'\n\n// The zoom-in notices name the config slots that set the budgets\nexport const BUDGET_SLOTS = {\n steps: 'walkStepBudget',\n bytes: 'walkByteBudget',\n}\n\n/**\n * A walk file and the answers both walk-indexed adapters give from it,\n * RgfaTabixAdapter and WalkTabixSyntenyAdapter, whose schemas declare the\n * budget slots. @jbrowse/graph-walks reads and cuts the file.\n */\nexport class WalkIndex {\n readonly reader: WalkReader\n\n constructor(\n readonly file: TabixIndexedFile,\n private adapter: BaseFeatureDataAdapter,\n ) {\n this.reader = new WalkReader(file)\n }\n\n /**\n * The haplotypes the header names, `sample#haplotype` in byte order, or\n * undefined when it names none\n */\n async haplotypeNames(opts: BaseOptions = {}) {\n const { haplotypes } = await this.reader.header(opts)\n return haplotypes.length > 0 ? haplotypes : undefined\n }\n\n budgets() {\n return {\n stepBudget: this.adapter.getConf('walkStepBudget') as number,\n byteBudget: this.adapter.getConf('walkByteBudget') as number,\n budgetNames: BUDGET_SLOTS,\n }\n }\n\n /**\n * The graph display's cut of a window: the reference walk, the walks of\n * `haplotypes` (every walk when unset), and the nodes and links they visit.\n * Walk rows draw runs, so the step budget spares them.\n */\n async subgraph(\n refName: string,\n region: { start: number; end: number },\n { signal, haplotypes, walkRows, expand }: SubgraphAdapterOptions,\n ) {\n const budgets = this.budgets()\n const { graph, kept, fragments } = await this.reader.cut(refName, region, {\n ...budgets,\n stepBudget: walkRows ? Infinity : budgets.stepBudget,\n signal,\n keep: walksKept(\n haplotypes?.map(lane => resolvePanSNPrefix(this.adapter, lane)),\n refName,\n ),\n ...(expand?.length\n ? { expand: (name: string) => expand.includes(name) }\n : {}),\n })\n return walkCutFor(graph.tables(kept, fragments), region, walkRows)\n }\n\n /**\n * The reference nodes overlapping a window, from the ref rows of its\n * chunks. A row's tabix interval is its chunk's first base, and gfa-to-tabix\n * files a node crossing in from a chunk before under that chunk, so the read\n * starts at queryStart.\n */\n async referenceNodes(\n refName: string,\n region: { start: number; end: number },\n opts: BaseOptions,\n ) {\n const refRows: string[][] = []\n await getLines(\n this.file,\n refName,\n await this.reader.queryStart(region.start, {\n ...opts,\n refName,\n end: region.end,\n }),\n region.end,\n {\n signal: opts.signal,\n lineCallback: line => {\n const cols = line.split('\\t')\n if (cols[3] === 'ref') {\n refRows.push(cols)\n }\n },\n },\n )\n const seen = new Set<number>()\n return referenceNodes(refRows).filter(node => {\n if (\n node.refName !== refName ||\n node.end <= region.start ||\n node.start >= region.end ||\n seen.has(node.id)\n ) {\n return false\n }\n seen.add(node.id)\n return true\n })\n }\n}\n"],
|
|
5
|
+
"mappings": "6IAcO,IAAMA,EAAe,CAC1B,MAAO,iBACP,MAAO,gBACT,EAOaC,EAAN,KAAgB,CAGrB,YACWC,EACDC,EACR,CAFS,UAAAD,EACD,aAAAC,EAER,KAAK,OAAS,IAAIC,EAAWF,CAAI,CACnC,CAMA,MAAM,eAAeG,EAAoB,CAAC,EAAG,CAC3C,GAAM,CAAE,WAAAC,CAAW,EAAI,MAAM,KAAK,OAAO,OAAOD,CAAI,EACpD,OAAOC,EAAW,OAAS,EAAIA,EAAa,MAC9C,CAEA,SAAU,CACR,MAAO,CACL,WAAY,KAAK,QAAQ,QAAQ,gBAAgB,EACjD,WAAY,KAAK,QAAQ,QAAQ,gBAAgB,EACjD,YAAaN,CACf,CACF,CAOA,MAAM,SACJO,EACAC,EACA,CAAE,OAAAC,EAAQ,WAAAH,EAAY,SAAAI,EAAU,OAAAC,CAAO,EACvC,CACA,IAAMC,EAAU,KAAK,QAAQ,EACvB,CAAE,MAAAC,EAAO,KAAAC,EAAM,UAAAC,CAAU,EAAI,MAAM,KAAK,OAAO,IAAIR,EAASC,EAAQ,CACxE,GAAGI,EACH,WAAYF,EAAW,IAAWE,EAAQ,WAC1C,OAAAH,EACA,KAAMO,EACJV,GAAY,IAAIW,GAAQC,EAAmB,KAAK,QAASD,CAAI,CAAC,EAC9DV,CACF,EACA,GAAII,GAAQ,OACR,CAAE,OAASQ,GAAiBR,EAAO,SAASQ,CAAI,CAAE,EAClD,CAAC,CACP,CAAC,EACD,OAAOC,EAAWP,EAAM,OAAOC,EAAMC,CAAS,EAAGP,EAAQE,CAAQ,CACnE,CAQA,MAAM,eACJH,EACAC,EACAH,EACA,CACA,IAAMgB,EAAsB,CAAC,EAC7B,MAAMC,EACJ,KAAK,KACLf,EACA,MAAM,KAAK,OAAO,WAAWC,EAAO,MAAO,CACzC,GAAGH,EACH,QAAAE,EACA,IAAKC,EAAO,GACd,CAAC,EACDA,EAAO,IACP,CACE,OAAQH,EAAK,OACb,aAAckB,GAAQ,CACpB,IAAMC,EAAOD,EAAK,MAAM,GAAI,EACxBC,EAAK,CAAC,IAAM,OACdH,EAAQ,KAAKG,CAAI,CAErB,CACF,CACF,EACA,IAAMC,EAAO,IAAI,IACjB,OAAOC,EAAeL,CAAO,EAAE,OAAOM,GAElCA,EAAK,UAAYpB,GACjBoB,EAAK,KAAOnB,EAAO,OACnBmB,EAAK,OAASnB,EAAO,KACrBiB,EAAK,IAAIE,EAAK,EAAE,EAET,IAETF,EAAK,IAAIE,EAAK,EAAE,EACT,GACR,CACH,CACF",
|
|
6
|
+
"names": ["BUDGET_SLOTS", "WalkIndex", "file", "adapter", "WalkReader", "opts", "haplotypes", "refName", "region", "signal", "walkRows", "expand", "budgets", "graph", "kept", "fragments", "walksKept", "lane", "resolvePanSNPrefix", "name", "walkCutFor", "refRows", "getLines", "line", "cols", "seen", "referenceNodes", "node"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
function o(t){return t===void 0||t==="*"?void 0:t}function s(t){let e=t.split(" ");return{refName:e[0],start:+e[1],end:+e[2],segmentCount:+e[3],pathCount:+e[4],inversion:e[5]==="1",shortestAlleleLength:+e[6],longestAlleleLength:+e[7],segments:e[11],shortestAllele:o(e[12]),longestAllele:o(e[13])}}function u(t,e){return t.key!==void 0||e.key!==void 0?t.key===e.key:t.refName===e.refName&&t.start===e.start&&t.end===e.end}function i(t){return t.key??`${t.refName}:${t.start}-${t.end}`}function b(t){let{shortestAlleleLength:e,longestAlleleLength:n}=t;return e===n?`${n.toLocaleString()} bp`:`${e.toLocaleString()}-${n.toLocaleString()} bp`}var r=2147483647;function a(t){let{pathCount:e,segmentCount:n,inversion:l}=t;return[`${n} segments`,e===r?"more paths than gfatools counts":`up to ${e.toLocaleString()} paths`,...l?["inversion"]:[]].join(", ")}export{s as a,u as b,i as c,b as d,r as e,a as f};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
//# sourceMappingURL=chunk-LTN6XZR5.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-FX4RDMDN.js"],
|
|
4
4
|
"sourcesContent": ["// src/bubbles/bubbleLine.ts\nfunction sequence(field) {\n return field === void 0 || field === \"*\" ? void 0 : field;\n}\nfunction parseBubbleLine(line) {\n const cols = line.split(\"\t\");\n return {\n refName: cols[0],\n start: +cols[1],\n end: +cols[2],\n segmentCount: +cols[3],\n pathCount: +cols[4],\n inversion: cols[5] === \"1\",\n shortestAlleleLength: +cols[6],\n longestAlleleLength: +cols[7],\n segments: cols[11],\n shortestAllele: sequence(cols[12]),\n longestAllele: sequence(cols[13])\n };\n}\nfunction sameBubble(a, b) {\n return a.key !== void 0 || b.key !== void 0 ? a.key === b.key : a.refName === b.refName && a.start === b.start && a.end === b.end;\n}\nfunction bubbleKey(b) {\n return b.key ?? `${b.refName}:${b.start}-${b.end}`;\n}\nfunction bubbleLabel(bubble) {\n const { shortestAlleleLength: min, longestAlleleLength: max } = bubble;\n return min === max ? `${max.toLocaleString()} bp` : `${min.toLocaleString()}-${max.toLocaleString()} bp`;\n}\nvar SATURATED_PATH_COUNT = 2147483647;\nfunction bubbleDescription(bubble) {\n const { pathCount, segmentCount, inversion } = bubble;\n return [\n `${segmentCount} segments`,\n pathCount === SATURATED_PATH_COUNT ? \"more paths than gfatools counts\" : `up to ${pathCount.toLocaleString()} paths`,\n ...inversion ? [\"inversion\"] : []\n ].join(\", \");\n}\n\nexport {\n parseBubbleLine,\n sameBubble,\n bubbleKey,\n bubbleLabel,\n SATURATED_PATH_COUNT,\n bubbleDescription\n};\n"],
|
|
5
5
|
"mappings": "AACA,SAASA,EAASC,EAAO,CACvB,OAAOA,IAAU,QAAUA,IAAU,IAAM,OAASA,CACtD,CACA,SAASC,EAAgBC,EAAM,CAC7B,IAAMC,EAAOD,EAAK,MAAM,GAAG,EAC3B,MAAO,CACL,QAASC,EAAK,CAAC,EACf,MAAO,CAACA,EAAK,CAAC,EACd,IAAK,CAACA,EAAK,CAAC,EACZ,aAAc,CAACA,EAAK,CAAC,EACrB,UAAW,CAACA,EAAK,CAAC,EAClB,UAAWA,EAAK,CAAC,IAAM,IACvB,qBAAsB,CAACA,EAAK,CAAC,EAC7B,oBAAqB,CAACA,EAAK,CAAC,EAC5B,SAAUA,EAAK,EAAE,EACjB,eAAgBJ,EAASI,EAAK,EAAE,CAAC,EACjC,cAAeJ,EAASI,EAAK,EAAE,CAAC,CAClC,CACF,CACA,SAASC,EAAWC,EAAGC,EAAG,CACxB,OAAOD,EAAE,MAAQ,QAAUC,EAAE,MAAQ,OAASD,EAAE,MAAQC,EAAE,IAAMD,EAAE,UAAYC,EAAE,SAAWD,EAAE,QAAUC,EAAE,OAASD,EAAE,MAAQC,EAAE,GAChI,CACA,SAASC,EAAUD,EAAG,CACpB,OAAOA,EAAE,KAAO,GAAGA,EAAE,OAAO,IAAIA,EAAE,KAAK,IAAIA,EAAE,GAAG,EAClD,CACA,SAASE,EAAYC,EAAQ,CAC3B,GAAM,CAAE,qBAAsBC,EAAK,oBAAqBC,CAAI,EAAIF,EAChE,OAAOC,IAAQC,EAAM,GAAGA,EAAI,eAAe,CAAC,MAAQ,GAAGD,EAAI,eAAe,CAAC,IAAIC,EAAI,eAAe,CAAC,KACrG,CACA,IAAIC,EAAuB,WAC3B,SAASC,EAAkBJ,EAAQ,CACjC,GAAM,CAAE,UAAAK,EAAW,aAAAC,EAAc,UAAAC,CAAU,EAAIP,EAC/C,MAAO,CACL,GAAGM,CAAY,YACfD,IAAcF,EAAuB,kCAAoC,SAASE,EAAU,eAAe,CAAC,SAC5G,GAAGE,EAAY,CAAC,WAAW,EAAI,CAAC,CAClC,EAAE,KAAK,IAAI,CACb",
|
|
6
6
|
"names": ["sequence", "field", "parseBubbleLine", "line", "cols", "sameBubble", "a", "b", "bubbleKey", "bubbleLabel", "bubble", "min", "max", "SATURATED_PATH_COUNT", "bubbleDescription", "pathCount", "segmentCount", "inversion"]
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{B as Vt,C as zt,D as Et,E as xt,M as qt,N as lt,O as Mt,d as Bt,e as gt,g as $t,h as Xt,i as Kt,j as Ut,k as Yt,u as jt}from"./chunk-D5PRXUSS.js";import{a as J,g as Q}from"./chunk-4AAW5P6N.js";function p(t,n,e,o){return(o<<24|e<<16|n<<8|t)>>>0}function Rt(t){return t&255}function _t(t){return t>>>8&255}function yt(t){return t>>>16&255}function bt(t){return t>>>24&255}function Jt(t){return`rgba(${Rt(t)},${_t(t)},${yt(t)},${bt(t)/255})`}function Ee(t,n){return`rgba(${Math.round(t[0]*255)},${Math.round(t[1]*255)},${Math.round(t[2]*255)},${n})`}function j(t,n){return p(Rt(t),_t(t),yt(t),Math.round(bt(t)*n))}function xe(t,n){let e=Math.max(0,1-1/n),o=r=>Math.round(r+(255-r)*e);return p(o(Rt(t)),o(_t(t)),o(yt(t)),bt(t))}var Qt=300,Z=.7,tt=.5;function bn(t){return`hsl(${t}, ${Z*100}%, ${tt*100}%)`}function nt(t){return Math.max(0,Math.min(1,t))*Qt}function vt(t,n){return nt((t-n.start)/(n.end-n.start))}var vn=30;function Re({start:t,bp:n,reversed:e},o){let r=vt(t,o),s=vt(t+n,o);if(s-r<1)return[(r+s)/2];let a=Math.ceil((s-r)/vn);return Array.from({length:a+1},(i,c)=>vt(t+n*(e?a-c:c)/a,o))}var An=Array.from({length:7},(t,n)=>({offset:n/6,color:bn(n/6*Qt)})),_e=`linear-gradient(to right, ${An.map(t=>`${t.color} ${t.offset*100}%`).join(", ")})`;var Cn=Yt();function Zt(t,n,e,o,r,s,a=!1){return Cn(t,[n,e.scaleX,e.scaleY,o,s,a,r],()=>{let i=new Map;for(let c=0;c<n.edges.length;c++){let l=o?.get(c),d=jt(t,n.edges[c],e,l,l&&s?.[c],a);d&&i.set(c,d)}return i})}var Sn=4;function wn(t){let n=new Map;for(let e of t.edges)J(n,e.from,e.to),J(n,e.to,e.from);return n}function In({nodeId:t,nodeById:n,neighbors:e}){let o=new Set([t]),r=[t],s=1/0,a=-1/0;for(let i=0;i<Sn&&r.length>0;i++){let c=[];for(let l of r){let d=e.get(l);if(d){for(let m of d)if(!o.has(m)){o.add(m);let h=n.get(m);h&&Q(h)?(s=Math.min(s,h.stable.start+h.length),a=Math.max(a,h.stable.start)):c.push(m)}}}r=c}return s===1/0?void 0:{start:Math.min(s,a),end:Math.max(s,a)}}function Tn({nodeId:t,nodeById:n,neighbors:e}){let o=n.get(t);return o===void 0?void 0:Q(o)?{start:o.stable.start,end:o.stable.start+o.length}:In({nodeId:t,nodeById:n,neighbors:e})}function tn(t){let n=new Map(t.nodes.map(r=>[r.id,r])),e=wn(t),o=new Map;for(let r of t.nodes){let s=Tn({nodeId:r.id,nodeById:n,neighbors:e});s&&o.set(r.id,(s.start+s.end)/2)}return o}var Nn=p(119,119,119,217),nn=p(136,136,136,217),Ln=p(24,24,28,240),On=2.2,ln=p(160,160,160,255),et=.18,He=Jt(j(ln,et)),kn=11,Pn=1.2,Dn=1e-6,Fn=7,Hn=3,Gn=3,Wn=1.5,en=3,Bn=.5,$n=.45,At=12,Xn=1e-6,I=new Float64Array(64),D=new Float64Array(64),F=new Float64Array(64);function Kn(t,n,e,o){let r=t.length*At+1;I.length<r&&(I=new Float64Array(r),D=new Float64Array(r),F=new Float64Array(r));let s=t[t.length-1];I[0]=s.x1,D[0]=s.y1,F[0]=0;let a=1,i=0;for(let c=t.length-1;c>=0&&i<o;c--){let l=t[c];for(let d=1;d<=At&&i<o;d++){let m=1-(d/At)**2,h=1-m,R=h*h*h,M=3*h*h*m,T=3*h*m*m,v=m*m*m,N=R*l.x0+M*l.cx0+T*l.cx1+v*l.x1,L=R*l.y0+M*l.cy0+T*l.cy1+v*l.y1;i+=Math.hypot(N-I[a-1],(L-D[a-1])*e)*n,I[a]=N,D[a]=L,F[a]=i,a++}}return a}function on(t,n){let e=1;for(;e<t-1&&F[e]<n;)e++;let o=F[e-1],r=F[e],s=r>o?Math.min(1,Math.max(0,(n-o)/(r-o))):0;return{x:I[e-1]+(I[e]-I[e-1])*s,y:D[e-1]+(D[e]-D[e-1])*s}}function Un({curves:t,edgeHalfWidth:n,nodeHalfWidth:e,scale:o,yToX:r,color:s,fromSegments:a,toSegments:i}){let c=Fn+Hn*n,l=Kn(t,o,r,e+en*c),d=F[l-1],m=d<Xn,h=Math.min(e,d),R=m?Math.min(1,Ut(a,o,o*r)/c):1;if(m?R<Bn:d<en*c)return;let M=on(l,h),T=on(l,h+c*R),v=M.x-T.x,N=(M.y-T.y)*r,L=t[t.length-1];return{x:M.x,y:M.y,angle:Math.hypot(v,N)>0?Math.atan2(N,v):ne(L,r,jn(L,i)),length:c*R,halfWidth:(Gn+Wn*n)*R,color:s}}function Yn(t,n,e,o,r){if(o)return $t(t).from==="start";let s=a=>Math.hypot(a.x-e.x0,(a.y-e.y0)*r);return s(n[0])<s(n.at(-1))}function jn(t,n){if(n.length<2)return;let e=n[0],o=n[n.length-1];return Math.hypot(t.x1-e.x,t.y1-e.y)<=Math.hypot(t.x1-o.x,t.y1-o.y)?{from:e,to:n[1]}:{from:o,to:n[n.length-2]}}function rn(t,n){if(!t||!n)return;let e=n.x-t.x,o=n.y-t.y,r=Math.hypot(e,o);return r>0?{nx:-o/r,ny:e/r}:void 0}function Ct(t,n=1){let e=n===1?t:t.map(o=>({x:o.x,y:o.y*n}));return e.map((o,r)=>{let s=rn(e[r-1],o),a=rn(o,e[r+1]);if(s&&a){let i=(s.nx+a.nx)/2,c=(s.ny+a.ny)/2,l=s.nx*i+s.ny*c;return l>.1?{nx:i/l,ny:c/l}:{nx:i,ny:c}}return s??a??{nx:0,ny:0}})}function sn(t,n,e,o=1){return t.map((r,s)=>({x:r.x+n[s].nx*e,y:r.y+n[s].ny*e/o}))}function wt(t,n,e){let o=(1-Math.abs(2*e-1))*n,r=o*(1-Math.abs(t/60%2-1)),s=e-o/2,a=0,i=0,c=0;return t<60?(a=o,i=r):t<120?(a=r,i=o):t<180?(i=o,c=r):t<240?(i=r,c=o):t<300?(a=r,c=o):(a=o,c=r),[a+s,i+s,c+s]}function ft(t,n,e,o=1){let[r,s,a]=wt(t,n,e);return p(Math.round(r*255),Math.round(s*255),Math.round(a*255),Math.round(o*255))}var Vn=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],zn=[[237,137,44],[158,42,122]],qn=[[220,50,50],[50,120,220]];function St(t,n){let e=Math.max(0,Math.min(1,n))*(t.length-1),o=Math.min(t.length-2,Math.floor(e)),r=e-o,s=t[o],a=t[o+1];return p(Math.round(s[0]+(a[0]-s[0])*r),Math.round(s[1]+(a[1]-s[1])*r),Math.round(s[2]+(a[2]-s[2])*r),255)}function Jn(t,n){return ft(Vt(t),Et,xt,n)}var fn=[60,65,72],It=p(...fn,255),Ge=`rgb(${fn.join(", ")})`;function Qn(t,n){let e=n.midpoints.get(t.id);return Q(t)&&e!==void 0?(e-n.start)/n.span:void 0}function We(t,n){let e=tn(t);if(n&&n.end>n.start)return{start:n.start,span:n.end-n.start,midpoints:e};let o=1/0,r=-1/0;for(let s of e.values())o=Math.min(o,s),r=Math.max(r,s);return{start:o===1/0?0:o,span:r>o?r-o:1,midpoints:e}}function Zn(t,n){let e=1/0,o=-1/0,r=1/0,s=-1/0,a=0;for(let i of t.nodes)i.stable!==void 0&&i.stable.rank>a&&(a=i.stable.rank),i.depth<e&&(e=i.depth),i.depth>o&&(o=i.depth),i.length<r&&(r=i.length),i.length>s&&(s=i.length);return{minDepth:e,maxDepth:o,minLength:r,maxLength:s,maxRank:a,nodeCount:t.nodes.length,referenceRamp:n}}function te(t,n,e,o){switch(e){case"random":return Jn(t.id,1);case"depth":return St(Vn,o.maxDepth>o.minDepth?(t.depth-o.minDepth)/(o.maxDepth-o.minDepth):.5);case"node-length":return St(qn,o.maxLength>o.minLength?(t.length-o.minLength)/(o.maxLength-o.minLength):.5);case"stable-rank":return t.stable===void 0?p(160,160,160,255):t.stable.rank===0?p(52,152,219,255):St(zn,o.maxRank>1?(t.stable.rank-1)/(o.maxRank-1):0);case"reference-position":{let r=o.referenceRamp;if(r===void 0)return p(160,160,160,255);let s=Qn(t,r);return s===void 0?It:ft(nt(s),Z,tt)}case"grey":return p(160,160,160,255);case"rainbow":{let r=o.nodeCount>1?n/o.nodeCount*360:0;return ft(r,.75,.5)}default:return p(52,152,219,255)}}function ne(t,n=1,e){let o=[[t.cx1,t.cy1],[t.cx0,t.cy0],[t.x0,t.y0]];for(let[r,s]of o){let a=t.x1-r,i=(t.y1-s)*n;if(Math.hypot(a,i)>0)return Math.atan2(i,a)}return e?Math.atan2((e.to.y-e.from.y)*n,e.to.x-e.from.x):0}function ee(t,n){let e=!1;for(let o=0;o<t.length-1&&!e;o++){let r=t[o],s=t[o+1];e=Math.max(r.x,s.x)>=n.minX&&Math.min(r.x,s.x)<=n.maxX&&Math.max(r.y,s.y)>=n.minY&&Math.min(r.y,s.y)<=n.maxY}return e}function oe(t,n){for(let e of t){let o=Math.min(e.x0,e.cx0,e.cx1,e.x1),r=Math.max(e.x0,e.cx0,e.cx1,e.x1),s=Math.min(e.y0,e.cy0,e.cy1,e.y1),a=Math.max(e.y0,e.cy0,e.cy1,e.y1);if(r>=n.minX&&o<=n.maxX&&a>=n.minY&&s<=n.maxY)return!0}return!1}var an=new WeakMap;function re(t){let n=an.get(t);if(!n){let e=[],o=new Map,r=t.paths??[];for(let s=0;s<r.length;s++)e.push(ft(zt(s,r.length),Et,xt,.85)),o.has(r[s].name)||o.set(r[s].name,s);n={pathColorByIndex:e,pathIndexByName:o},an.set(t,n)}return n}var cn=new WeakMap,se=new Map;function ae(t){let n=cn.get(t);if(!n){n=new Map;for(let[e,o]of(t.paths??[]).entries())for(let r of new Set(o.nodeIds))J(n,r,e);cn.set(t,n)}return n}function Be(t){let{nodePositions:n,graph:e,nodeById:o,colorScheme:r,contigThickness:s,connectorThickness:a,drawPaths:i,nodeWidth:c="uniform",highlight:l,axis:d,linearLayout:m,viewportBounds:h,referenceRamp:R,deletions:M,deletionRoutes:T,stranded:v,hiddenEdges:N,version:L=0}=t,ut=c==="depth"?qt(e):0,ot=d.scaleX,dt=1/Math.max(ot,Dn),_=Xt(d),gn=Zt(n,e,d,M,L,T,v),H=[],Ot=new Map,rt=[],kt=new Map,G=[],Pt=new Map,En=Zn(e,R),Dt=new Map;if(r==="rainbow")for(let f=0;f<e.nodes.length;f++)Dt.set(e.nodes[f].id,f);let mt=e.paths?.length??0,{pathColorByIndex:Ft,pathIndexByName:xn}=re(e),Mn=f=>Ft[xn.get(f)??-1]??nn,Rn=i&&mt>1?ae(e):se,_n=ot>(m?1:$n);for(let f=0;f<e.edges.length;f++){let u=e.edges[f],y=n[u.from],A=n[u.to],g=gn.get(f);if(!y?.length||!A?.length||!g||N?.has(f))continue;let W=u.pathIds?.length??0,V=M?.get(f)!==void 0,B=l?.edgeIndexes.has(f)??!1,$=a/2*(V?On:1),X=i&&W>0,O=V?Ln:Nn,C=!l||B?O:j(O,et),z=o.get(u.to),K=(z?lt(z,s,c,ut):s)/2,S=x=>!h||oe(x,h),k=(x,b,E)=>{if(V)for(let P of Bt(x,kn/ot,_,h))G.push({curves:P,thickness:b,color:E});else G.push({curves:x,thickness:b,color:E})},w=x=>{let b=_n?Un({curves:x,edgeHalfWidth:a/2,nodeHalfWidth:K,scale:ot,yToX:_,color:C,fromSegments:y,toSegments:A}):void 0;b&&rt.push(b)},U=G.length,at=rt.length,it=l?.walks.length&&B&&!X?l.walks:void 0;if(it){let x=o.get(u.from),b=x?lt(x,s,c,ut):s,E=Mt(b,it.length),P=Ct(y,_),{nx:ct,ny:q}=(Yn(u,y,g[0],v,_)?P[0]:P.at(-1))??{nx:0,ny:0};it.forEach((Y,yn)=>{if(!Y.edgeIndexes.has(f))return;let pt=(yn-(it.length-1)/2)*E*dt,Wt=pt===0?g:gt(g,ct*pt,q*pt/_);S(Wt)&&k(Wt,E/2,Y.colors.get(u.from)??Y.colors.get(u.to)??O)}),G.length>U&&w(g)}else if(!X)S(g)&&(k(g,$,C),w(g));else{let x=Kt(y,A,W,d),b=Math.floor((W-1)/2);for(let E=0;E<W;E++){let{x:P,y:ct}=x[E],q=P===0&&ct===0?g:gt(g,P,ct);if(!S(q))continue;let Y=Mn(u.pathIds[E]);k(q,$,l&&(l.walks.length?!l.names.has(u.pathIds[E]):!B)?j(Y,et):Y),E===b&&w(q)}}let Ht=G.length-U;Ht>0&&Pt.set(f,{start:U,count:Ht});let Gt=rt.length-at;Gt>0&&kt.set(f,{start:at,count:Gt})}for(let[f,u]of Object.entries(n)){let y=o.get(f);if(!y||h&&!ee(u,h))continue;let A=l!==void 0&&!l.nodeIds.has(f),g=A?ln:te(y,Dt.get(f)??0,r,En),W=A?j(g,et):g,st=lt(y,s,c,ut),V=st/2,B=H.length,$=Rn.get(f),X=st/mt,O=u.length>=2,C=l?.walks.length&&!A&&!$?.length?l.walks:void 0;if(O&&C){let K=Mt(st,C.length),S=Ct(u,_);C.forEach((k,w)=>{let U=k.colors.get(f);if(U===void 0)return;let at=(w-(C.length-1)/2)*K*dt;H.push({points:C.length===1?u:sn(u,S,at,_),thickness:K/2,color:U})})}else if(O&&$?.length&&X>=Pn){let K=Ct(u,_);for(let S of $){let k=(S-(mt-1)/2)*X*dt,w=Ft[S]??nn;H.push({points:sn(u,K,k,_),thickness:X/2,color:A?j(w,et):w})}}else O&&H.push({points:u,thickness:V,color:W});let z=H.length-B;z>0&&Ot.set(f,{start:B,count:z})}return{nodeStrokes:H,nodeStrokeRuns:Ot,arrows:rt,arrowRuns:kt,edgeCurves:G,edgeCurveRuns:Pt}}var un=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],Nt=[{value:"grey",label:"Grey to black",ends:["#a3a3a3","#151515"]},{value:"blue",label:"Cyan to navy",ends:["#6ee0f0","#0b2c7a"]},{value:"red",label:"Yellow to red",ends:["#ffd24a","#b3121b"]},{value:"purple",label:"Pink to plum",ends:["#f5a3d8","#5e1a6e"]},{value:"green",label:"Lime to forest",ends:["#b6e36c","#0b5d3b"]},{value:"rainbow",label:"Rainbow"}],hn=["blue","red","purple","green"],ie=t=>un.some(n=>n.value===t),ce=t=>Nt.some(n=>n.value===t);function le(t,n,e,o=!0){let{field:r,scheme:s}=t.color??{},a=ie(r)?r:o?"progress":"walk",i=n?"grey":hn[e%hn.length],c=ce(s)?s==="rainbow"&&a!=="reference"?i:s:i;return{field:a,scheme:c}}var dn=.5,fe=t=>t<=.04045?t/12.92:((t+.055)/1.055)**2.4,he=t=>t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;function ue(t){let[n,e,o]=[1,3,5].map(i=>fe(Number.parseInt(t.slice(i,i+2),16)/255)),r=Math.cbrt(.4122214708*n+.5363325363*e+.0514459929*o),s=Math.cbrt(.2119034982*n+.6806995451*e+.1073969566*o),a=Math.cbrt(.0883024619*n+.2817188376*e+.6299787005*o);return[.2104542553*r+.793617785*s-.0040720468*a,1.9779984951*r-2.428592205*s+.4505937099*a,.0259040371*r+.7827717662*s-.808675766*a]}function de([t,n,e]){let o=(t+.3963377774*n+.2158037573*e)**3,r=(t-.1055613458*n-.0638541728*e)**3,s=(t-.0894841775*n-1.291485548*e)**3;return[4.0767416621*o-3.3077115913*r+.2309699292*s,-1.2684380046*o+2.6097574011*r-.3413193965*s,-.0041960863*o-.7034186147*r+1.707614701*s].map(a=>he(Math.max(0,Math.min(1,a)))*255)}var Tt=new Map;function me(t){if(!Tt.has(t)){let n=Nt.find(e=>e.value===t);Tt.set(t,n&&"ends"in n?n.ends.map(ue):void 0)}return Tt.get(t)}function Lt(t,n){let e=Math.max(0,Math.min(1,n)),o=me(t);if(!o)return wt(nt(e),Z,tt).map(a=>a*255);let[r,s]=o;return de(r.map((a,i)=>a+(s[i]-a)*e))}function mn(t,n){let[e,o,r]=Lt(t,n).map(Math.round);return`rgb(${e}, ${o}, ${r})`}function ht(t,n){let[e,o,r]=Lt(t,n).map(Math.round);return p(e,o,r,255)}function pe({field:t,scheme:n},e){return t==="walk"?ht(n,dn):e===void 0?pn:ht(n,e)}var pn=It;function ge({field:t,scheme:n}){let e=(o,r)=>({offset:o,color:mn(n,r),abgr:ht(n,r)});return t==="walk"?[e(0,dn)]:Array.from({length:7},(o,r)=>e(r/6,r/6))}export{wn as a,Tn as b,p as c,Jt as d,Ee as e,j as f,xe as g,bn as h,Re as i,An as j,_e as k,Zt as l,He as m,wt as n,Ge as o,Qn as p,We as q,Zn as r,te as s,Be as t,un as u,Nt as v,le as w,pe as x,pn as y,ge as z};
|
|
2
|
+
//# sourceMappingURL=chunk-MLVBPMBU.js.map
|