jbrowse-plugin-graphgenomeviewer 8.3.1 → 8.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +7 -2
  2. package/dist/chunks/{GbzBaseSyntenyAdapter-Y5VUDFZP.js → GbzBaseSyntenyAdapter-W5J3E5VT.js} +2 -2
  3. package/dist/chunks/{GbzBaseSyntenyAdapter-Y5VUDFZP.js.map → GbzBaseSyntenyAdapter-W5J3E5VT.js.map} +1 -1
  4. package/dist/chunks/{GraphGenomeView-VW3PEHFP.js → GraphGenomeView-NLPWMIBS.js} +2 -2
  5. package/dist/chunks/{GraphTrackSettingsDialog-TT5TXM5I.js → GraphTrackSettingsDialog-7LHAOYX3.js} +2 -2
  6. package/dist/chunks/{HighlightColorDialog-R3EIOO2M.js → HighlightColorDialog-YQEMRPZ6.js} +2 -2
  7. package/dist/chunks/{LinearGraphDisplay-OBD4R5G3.js → LinearGraphDisplay-BEU7V4JU.js} +2 -2
  8. package/dist/chunks/{MinigraphBubbleAdapter-QXISPSHM.js → MinigraphBubbleAdapter-FZZLY3ZI.js} +2 -2
  9. package/dist/chunks/{RgfaTabixAdapter-SVZ5SSEY.js → RgfaTabixAdapter-DXBQEVFS.js} +2 -2
  10. package/dist/chunks/{WalkFormsAdapter-6LK2XCHQ.js → WalkFormsAdapter-ZKZ5PUYO.js} +2 -2
  11. package/dist/chunks/{WalkTabixSyntenyAdapter-LA22PX4I.js → WalkTabixSyntenyAdapter-HEGPYGKB.js} +2 -2
  12. package/dist/chunks/{chunk-PMM6BEKY.js → chunk-2FCFK2B5.js} +1 -1
  13. package/dist/chunks/{chunk-PMM6BEKY.js.map → chunk-2FCFK2B5.js.map} +1 -1
  14. package/dist/chunks/{chunk-TMFUYJFG.js → chunk-5X3OZSDO.js} +2 -2
  15. package/dist/chunks/chunk-D6NFDQQI.js +4 -0
  16. package/dist/chunks/chunk-D6NFDQQI.js.map +7 -0
  17. package/dist/chunks/chunk-D7MOOK6H.js +4 -0
  18. package/dist/chunks/chunk-D7MOOK6H.js.map +7 -0
  19. package/dist/chunks/chunk-EINURNZ6.js +2 -0
  20. package/dist/chunks/chunk-EKIQ3ATV.js +2 -0
  21. package/dist/chunks/chunk-EKIQ3ATV.js.map +7 -0
  22. package/dist/chunks/{chunk-WA7FCDLQ.js → chunk-HM7XSNBN.js} +1 -1
  23. package/dist/chunks/{chunk-WA7FCDLQ.js.map → chunk-HM7XSNBN.js.map} +1 -1
  24. package/dist/chunks/{chunk-IUBWMYUA.js → chunk-IQQOJGX3.js} +2 -2
  25. package/dist/chunks/{chunk-IUBWMYUA.js.map → chunk-IQQOJGX3.js.map} +1 -1
  26. package/dist/chunks/{chunk-HAVM67SF.js → chunk-JTOW3TOE.js} +2 -2
  27. package/dist/chunks/{chunk-EKGY6PG2.js → chunk-KM2INI7Q.js} +2 -2
  28. package/dist/chunks/{chunk-EKGY6PG2.js.map → chunk-KM2INI7Q.js.map} +1 -1
  29. package/dist/chunks/{chunk-DSKPOCCE.js → chunk-MFMAQO3W.js} +2 -2
  30. package/dist/chunks/{chunk-DSKPOCCE.js.map → chunk-MFMAQO3W.js.map} +1 -1
  31. package/dist/chunks/{chunk-NAC3EXT4.js → chunk-MNFL7BAC.js} +2 -2
  32. package/dist/chunks/{chunk-NAC3EXT4.js.map → chunk-MNFL7BAC.js.map} +1 -1
  33. package/dist/chunks/{chunk-DL2S7QKE.js → chunk-NB4X56M3.js} +2 -2
  34. package/dist/chunks/{chunk-DL2S7QKE.js.map → chunk-NB4X56M3.js.map} +1 -1
  35. package/dist/chunks/{chunk-B2MJV7HN.js → chunk-OMF5XFKR.js} +1 -1
  36. package/dist/chunks/{chunk-B2MJV7HN.js.map → chunk-OMF5XFKR.js.map} +1 -1
  37. package/dist/chunks/{chunk-PEE2MP7K.js → chunk-TNEXOJ5F.js} +1 -1
  38. package/dist/chunks/{chunk-PEE2MP7K.js.map → chunk-TNEXOJ5F.js.map} +1 -1
  39. package/dist/chunks/chunk-VP6AGIRF.js +2 -0
  40. package/dist/chunks/chunk-VP6AGIRF.js.map +7 -0
  41. package/dist/chunks/{chunk-MHIKXNVU.js → chunk-XBZ4C4R3.js} +3 -3
  42. package/dist/chunks/{chunk-MHIKXNVU.js.map → chunk-XBZ4C4R3.js.map} +2 -2
  43. package/dist/chunks/{chunk-QATGAV57.js → chunk-Y7VFVMQI.js} +2 -2
  44. package/dist/chunks/{chunk-QATGAV57.js.map → chunk-Y7VFVMQI.js.map} +1 -1
  45. package/dist/chunks/{chunk-G3L2L62S.js → chunk-YMK7HFJV.js} +2 -2
  46. package/dist/chunks/{chunk-NSBH4FIW.js → chunk-ZWRAQSXC.js} +2 -2
  47. package/dist/chunks/chunk-ZWRAQSXC.js.map +7 -0
  48. package/dist/chunks/{renderSvg-2DPRP5UX.js → renderSvg-XIEGA5N5.js} +2 -2
  49. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +2 -2
  50. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +3 -3
  51. package/package.json +2 -2
  52. package/src/GetSubgraph.ts +2 -0
  53. package/src/GraphGenomeView/legendSections.ts +5 -2
  54. package/src/GraphGenomeView/model.ts +8 -1
  55. package/src/RgfaTabixAdapter/walkFiles.test.ts +14 -0
  56. package/src/RgfaTabixAdapter/walkReader.ts +22 -5
  57. package/src/version.ts +1 -1
  58. package/dist/chunks/chunk-5ZGRAPN5.js +0 -4
  59. package/dist/chunks/chunk-5ZGRAPN5.js.map +0 -7
  60. package/dist/chunks/chunk-73B6AYVV.js +0 -2
  61. package/dist/chunks/chunk-73B6AYVV.js.map +0 -7
  62. package/dist/chunks/chunk-AUQISDXJ.js +0 -2
  63. package/dist/chunks/chunk-AUQISDXJ.js.map +0 -7
  64. package/dist/chunks/chunk-GIIUVBOH.js +0 -4
  65. package/dist/chunks/chunk-GIIUVBOH.js.map +0 -7
  66. package/dist/chunks/chunk-NSBH4FIW.js.map +0 -7
  67. package/dist/chunks/chunk-WO3MEQ25.js +0 -2
  68. /package/dist/chunks/{GraphGenomeView-VW3PEHFP.js.map → GraphGenomeView-NLPWMIBS.js.map} +0 -0
  69. /package/dist/chunks/{GraphTrackSettingsDialog-TT5TXM5I.js.map → GraphTrackSettingsDialog-7LHAOYX3.js.map} +0 -0
  70. /package/dist/chunks/{HighlightColorDialog-R3EIOO2M.js.map → HighlightColorDialog-YQEMRPZ6.js.map} +0 -0
  71. /package/dist/chunks/{LinearGraphDisplay-OBD4R5G3.js.map → LinearGraphDisplay-BEU7V4JU.js.map} +0 -0
  72. /package/dist/chunks/{MinigraphBubbleAdapter-QXISPSHM.js.map → MinigraphBubbleAdapter-FZZLY3ZI.js.map} +0 -0
  73. /package/dist/chunks/{RgfaTabixAdapter-SVZ5SSEY.js.map → RgfaTabixAdapter-DXBQEVFS.js.map} +0 -0
  74. /package/dist/chunks/{WalkFormsAdapter-6LK2XCHQ.js.map → WalkFormsAdapter-ZKZ5PUYO.js.map} +0 -0
  75. /package/dist/chunks/{WalkTabixSyntenyAdapter-LA22PX4I.js.map → WalkTabixSyntenyAdapter-HEGPYGKB.js.map} +0 -0
  76. /package/dist/chunks/{chunk-TMFUYJFG.js.map → chunk-5X3OZSDO.js.map} +0 -0
  77. /package/dist/chunks/{chunk-WO3MEQ25.js.map → chunk-EINURNZ6.js.map} +0 -0
  78. /package/dist/chunks/{chunk-HAVM67SF.js.map → chunk-JTOW3TOE.js.map} +0 -0
  79. /package/dist/chunks/{chunk-G3L2L62S.js.map → chunk-YMK7HFJV.js.map} +0 -0
  80. /package/dist/chunks/{renderSvg-2DPRP5UX.js.map → renderSvg-XIEGA5N5.js.map} +0 -0
@@ -0,0 +1,2 @@
1
+ import{l as o}from"./chunk-Y7VFVMQI.js";function u(a,r,e){return e?{...a,walkRowRuns:o(a,r)}:a}export{u as a};
2
+ //# sourceMappingURL=chunk-EINURNZ6.js.map
@@ -0,0 +1,2 @@
1
+ import{G as jn,H as Jn,I as un,J as dn,S as Qn,U as Qt,V as mn,Y as Zn,Z as te,d as $n,e as Kn,f as hn,h as Un,i as Yn,j as qn,k as Vn,l as $t,y as zn}from"./chunk-ZWRAQSXC.js";import{a as Bt,g as Xt}from"./chunk-MNFL7BAC.js";var Et=2,ae=1.5,Ke=4,ne=12,Ue=64,ee=24,Ye=48,oe="a thread per pass through a node",pn=t=>t.length>1&&t.some(n=>n.mostPasses>1),ce=t=>t*Et+Math.max(0,t-1)*ae,se=t=>t.reduce((n,o)=>n+o,0);function ie(t,n,o){let e=t.map((a,c)=>n[c]>1?ce(a):o*Math.min(1,a)),s=0,r=t.map(a=>{let c=Math.min(1,a),i=Ke*c*s;return s=Math.max(s,c),i});return{widths:e,gaps:r,band:se(e)+se(r)}}var gn=Et+ae;function Kt(t,n,o=t){let{widths:e,gaps:s,band:r}=ie(t,n,Et),a=-r/2;return e.map((c,i)=>{a+=s[i];let f=n[i]>1?Math.max(0,c-ce(o[i])):0,l=a+f/2+Et/2;return a+=c,l})}var nn=t=>ie(t,t,Et).band,en=t=>Math.min(1,Ye/(nn(t)||1)),is=t=>en(t.map(n=>n.mostPasses))<1?`${oe}, thinned to fit`:oe;function Zt(t,n){let o=t.stepOf[n],e=n-t.starts[o];return t.forward[o]?e:t.starts[o+1]-t.starts[o]-1-e}var Nt=(t,n)=>{let o=n.x-t.x,e=n.y-t.y;return Math.sqrt(o*o+e*e)};function Ft(t){let n=new Float64Array(t.length);for(let o=1;o<t.length;o++)n[o]=n[o-1]+Nt(t[o-1],t[o]);return n}function yn(t,n){let o=new Set;return t.map(e=>{let s=new Map;return e.map(r=>r.map(a=>{let c=s.get(a)??0;s.set(a,c+1);let i=n[a],f=!!i?.length&&!o.has(a);return f&&o.add(a),{id:a,visit:c,owned:f,segments:i}}))})}function qe(t,n,o){let e=[];return t.forEach((s,r)=>{let a=0;for(let M of s)for(let{segments:A}of M)a+=A?.length??0;let c=new Float64Array(a),i=new Float64Array(a),f=0,l=0,h=u();function u(){return{walk:r,ids:[],visits:[],forward:[],owned:[],starts:[0]}}let m=()=>{if(h.ids.length){let M=new Int32Array(f-l);for(let A=0;A<h.ids.length;A++)M.fill(A,h.starts[A],h.starts[A+1]);e.push({...h,xs:c.subarray(l,f),ys:i.subarray(l,f),stepOf:M})}h=u(),l=f},w=(M,A,R)=>{let P=R.x-M,k=R.y*n-A;return Math.sqrt(P*P+k*k)};for(let M of s)M.forEach(({id:A,visit:R,owned:P,segments:k},W)=>{if(!k?.length){m();return}let F=k[0],S=k.at(-1),_;if(f>l){let g=c[f-1],E=i[f-1],x=w(g,E,F),C=w(g,E,S);_=x<=C,Math.min(x,C)>o&&m()}else{let g=M[W+1]?.segments,E=x=>g?.length?Math.min(w(x.x,x.y*n,g[0]),w(x.x,x.y*n,g.at(-1))):0;_=E(S)<=E(F)}h.ids.push(A),h.visits.push(R),h.forward.push(_),h.owned.push(P);for(let g=0;g<k.length;g++){let E=k[_?g:k.length-1-g];c[f]=E.x,i[f]=E.y*n,f++}h.starts.push(f-l)}),m()}),e}function xn(t,n,o){let e=[];for(let s=0;s<n.length;s++){if(!n[s])continue;let r=s;for(;r+1<n.length&&n[r+1];)r++;let a=e.at(-1),c=a?a[1]:0,i=s;for(;i>c&&t[s]-t[i-1]<=o;)i--;let f=r;for(;f+1<t.length&&t[f+1]-t[r]<=o;)f++;a&&i<=a[1]+1?a[1]=f:e.push([i,f]),s=r}return e}function Ve(t,n){let o=Ft(t),e=o.at(-1),s=(c,i)=>{let f=t[i],l=t[Math.min(i+1,t.length-1)],h=o[Math.min(i+1,t.length-1)]-o[i],u=h>0?(c-o[i])/h:0;return{x:f.x+(l.x-f.x)*u,y:f.y+(l.y-f.y)*u}},r=0,a=0;return t.map((c,i)=>{let f=Math.max(0,o[i]-n/2),l=Math.min(e,o[i]+n/2);for(;r<t.length-1&&o[r+1]<=f;)r++;for(;a<t.length-1&&o[a+1]<=l;)a++;let h=s(f,r),u=s(l,a),m=Nt(h,u);return m>0?{nx:-(u.y-h.y)/m,ny:(u.x-h.x)/m}:void 0})}function ze(t,n,o){let e=Ft(t),s=t.slice(),r=[];e.forEach((c,i)=>{let f=r.at(-1);(f===void 0||c-e[f]>=n/4)&&r.push(i)}),r.at(-1)!==t.length-1&&r.push(t.length-1);let a=0;for(;a<r.length;){let c=r[a],i=-1;for(let u=a+1;u<r.length&&e[r[u]]-e[c]<=o;u++){let m=r[u];e[m]-e[c]>Math.PI*n&&Nt(t[c],t[m])<=n&&(i=u)}if(i<0){a++;continue}let f=r[i],l=t[c],h=t[f];for(let u=c+1;u<f;u++){let m=(e[u]-e[c])/(e[f]-e[c]);s[u]={...t[u],x:l.x+(h.x-l.x)*m,y:l.y+(h.y-l.y)*m}}a=i}return s}function le(t,n){let o=t.length,e=Ft(t),s=e[o-1],r=new Float64Array(o+1),a=new Float64Array(o+1),c=new Float64Array(o+1);for(let h=0;h<o;h++){let u=t[h],m=(e[Math.min(h+1,o-1)]-e[Math.max(h-1,0)])/2;r[h+1]=r[h]+m,a[h+1]=a[h]+m*u.x,c[h+1]=c[h]+m*u.y}let i=new Array(o),f=0,l=0;for(let h=0;h<o;h++){let u=t[h],m=Math.min(n,e[h],s-e[h]),w=e[h]-m,M=e[h]+m+1e-9*(1+s);for(;f<o&&e[f]<w;)f++;for(;l<o&&e[l]<M;)l++;let A=r[l]-r[f];i[h]=A>0?{x:(a[l]-a[f])/A,y:(c[l]-c[f])/A}:{x:u.x,y:u.y}}return i}function re(t,n){let o=t.length,e=Ft(t),s=e[o-1],r=new Uint8Array(o),a=(f,l)=>{let h=t[f],u=t[f+1];if(!u)return h;let m=e[f+1]-e[f],w=m>0?(l-e[f])/m:0;return{x:h.x+(u.x-h.x)*w,y:h.y+(u.y-h.y)*w}},c=0,i=0;for(let f=0;f<o;f++){if(e[f]<n||s-e[f]<n)continue;for(;c+1<o&&e[c+1]<=e[f]-n;)c++;for(;i+1<o&&e[i+1]<=e[f]+n;)i++;let l=t[f],h=a(c,e[f]-n),u=a(i,e[f]+n),m=Math.abs((u.x-h.x)*(l.y-h.y)-(u.y-h.y)*(l.x-h.x));r[f]=m>0&&Nt(h,u)*Nt(h,l)*Nt(l,u)/(2*m)<n?1:0}return{tight:r,s:e}}function je(t,n){let o=t.slice(),{tight:e,s}=re(o,n),r=xn(s,Array.from(e,a=>a>0),3*n);for(let a=0;a<8&&r.length;a++)r=r.filter(([c,i])=>{let f=o.slice(c,i+1),l=re(f,n);if(!l.tight.includes(1))return!1;let h=tn(l.s,l.tight,n),u=le(f,n);for(let m=0;m<f.length;m++){let w=Math.min(1,3*h[m]);if(w>0){let M=f[m],A=u[m];o[c+m]={x:M.x+(A.x-M.x)*w,y:M.y+(A.y-M.y)*w}}}return!0});return o}function Je(t,n,o,e,s,r){let a=n.length,c=new Float64Array(a),i=0,f=0,l=0,h=0,u=0;for(let m=0;m<a;m++){for(;i<a&&t[i]-t[m]<=r;){let w=o(i),M=n[i];c[i]=w&&M?w.nx*M.nx+w.ny*M.ny:0,l+=c[i],i++}for(;t[m]-t[f]>r;)l-=c[f++];if(Math.abs(l)>1e-9&&(h=l<0?-1:1),!!h)for(;u<=m;u++)s(u,h)}if(u<a){let m=0;for(let w=0;w<a;w++)m+=e(w)?1:-1;for(;u<a;u++)s(u,m<0?-1:1)}}function Qe(t,n,o,e,s=!0){let r=Math.max(o,2*e),a=Math.PI*e,c=s?a+3*e+r/2:r/2,i=new Map,f=new Map,l=[],h=[],u=w=>({normals:new Array(w),shifts:s?new Array(w):[]}),m=(w,M,A,R)=>{let P=i.get(w);P||(P=[],i.set(w,P)),(P[M]??=[])[A]=R};return t.forEach((w,M)=>{let{walk:A,ids:R,visits:P,owned:k,starts:W,xs:F,ys:S,stepOf:_}=w,g=R.length,E=F.length,x=new Array(g);for(let d=0;d<g;d++)k[d]&&(x[d]=u(W[d+1]-W[d]),f.set(R[d],{run:M,step:d,frame:x[d]}),m(R[d],A,P[d],x[d]));let C=new Float64Array(E);for(let d=1;d<E;d++){let I=F[d]-F[d-1],N=S[d]-S[d-1];C[d]=C[d-1]+Math.sqrt(I*I+N*N)}let J=C[E-1],D=new Int32Array(g).fill(-1),B=new Int32Array(g),Y=new Array(g);for(let d=0;d<g;d++){let I=k[d]?void 0:f.get(R[d]);I&&(D[d]=I.run,B[d]=I.step,Y[d]=I.frame)}let et=new Int32Array(g),ct=new Int32Array(g);for(let d=0;d+1<g;d++){let N=D[d]>=0&&D[d+1]===D[d]?B[d+1]-B[d]:0;et[d+1]=et[d]+(N===1?1:0),ct[d+1]=ct[d]+(N===-1?1:0)}let tt=new Array(g),b=0,L=0;for(let d=0;d<g;d++){if(!s){tt[d]=!k[d];continue}let I=C[W[d]]-c,N=C[W[d+1]-1]+c;for(;C[b]<I;)b++;for(;L+1<E&&C[L+1]<=N;)L++;let j=_[Math.max(0,b-1)],st=_[Math.min(E-1,L+1)],H=st-j,it=et[st]-et[j],gt=ct[st]-ct[j];tt[d]=!k[d]&&I>=0&&N<=J&&H>0&&(it===H||gt===H)}for(let d=0;d<g;d++){if(k[d])continue;let I=Y[d];x[d]=!s&&tt[d]?I:tt[d]?{normals:I.normals,shifts:I.shifts}:u(I.normals.length),m(R[d],A,P[d],x[d])}h.push(x);let q=new Array(E);for(let d=0;d<E;d++)q[d]=!tt[_[d]];for(let[d,I]of xn(C,q,c)){let N=[];for(let H=d;H<=I;H++)N.push({x:F[H],y:S[H]});let j=s?je(le(ze(N,e/2,a),e/2),e/2):N,st=Ve(j,r);Je(Ft(j),st,H=>{let it=_[d+H];return(k[it]?x[it]:Y[it])?.normals[Zt(w,d+H)]},H=>w.forward[_[d+H]],(H,it)=>{let gt=d+H,Lt=_[gt];if(tt[Lt])return;let Ht=Zt(w,gt),Rt=st[H];x[Lt].normals[Ht]=Rt&&(it>0?Rt:{nx:-Rt.nx,ny:-Rt.ny}),s&&(x[Lt].shifts[Ht]={dx:j[H].x-N[H].x,dy:(j[H].y-N[H].y)/n})},r)}if(!s){l.push(C);return}let ot=new Float64Array(E),G=0,V=0;for(let d=0;d<E;d++){let I=x[_[d]].shifts[Zt(w,d)],N=F[d]+(I?.dx??0),j=S[d]+(I?.dy??0)*n;ot[d]=d?ot[d-1]+Math.sqrt((N-G)**2+(j-V)**2):0,G=N,V=j}l.push(ot)}),{frames:i,arcs:l,stepFrames:h}}function fe(t,n,o,e){let s=new Array(n.length),r=[],a=0,c=0;for(let i=0;i<n.length;i++){for(;c<n.length&&t[c]-t[i]<=o;){for(;r.length>a&&e*n[r.at(-1)]<=e*n[c];)r.pop();r.push(c++)}for(;t[i]-t[r[a]]>o;)a++;s[i]=n[r[a]]}return s}function tn(t,n,o,e=()=>!0){let s=n.length,r=new Float64Array(s+1),a=new Float64Array(s+1);for(let l=0;l<s;l++){let h=e(n[l])?s>1?(t[Math.min(l+1,s-1)]-t[Math.max(l-1,0)])/2:1:0;r[l+1]=r[l]+h,a[l+1]=a[l]+h*n[l]}let c=new Float64Array(s),i=0,f=0;for(let l=0;l<s;l++){for(;t[l]-t[i]>o;)i++;for(;f<s&&t[f]-t[l]<=o;)f++;let h=r[f]-r[i];c[l]=h>0?(a[f]-a[i])/h:n[l]}return c}var Ze=[0];function to(t){for(let n of t.values())if(n>1)return!0;return!1}function no(t,n,o,e,s){if(!to(n))return{span:n,nodeThreads:new Map,threadPasses:new Map,threadAt:new Map,linkThreads:new Map};let r=new Map,a=[],c=[],i=[],f=[],l=[],h=[],u=[];for(let S of t){let _=[],g=[];for(let b of S){let L=r.get(b);L===void 0&&(L=a.length,r.set(b,L),a.push(b),c.push(0),i.push(0)),g.push(L);let q=o[b],ot=q?.[Math.floor(q.length/2)];_.push(ot?{x:ot.x,y:ot.y*e}:_.at(-1)??{x:0,y:0})}let E=Ft(_),x=S.map(b=>n.get(b)??1),C=fe(E,x,s/2,1),J=g.map(b=>++i[b]),D=S.length,B=new Int32Array(D),Y=-1;for(let b=0;b<D;b++)Y=x[b]===C[b]?b:Y,B[b]=Y;let et=new Int32Array(D);Y=-1;for(let b=D-1;b>=0;b--)Y=x[b]===C[b]?b:Y,et[b]=Y;let ct=new Array(D),tt=new Array(D).fill(NaN);for(let b=0;b<D;b++){let L=B[b],q=et[b],ot=L<0?q:q<0||E[b]-E[L]<=E[q]-E[b]?L:q,G=V=>Math.min(J[V],C[b])-1;if(ct[b]=G(ot),x[b]===1&&L>=0&&q>=0&&G(q)!==G(L)){let V=(E[b]-E[L])/(E[q]-E[L]||1);tt[b]=G(L)+(G(q)-G(L))*V}c[g[b]]=Math.max(c[g[b]],C[b])}f.push(g),l.push(J),h.push(ct),u.push(tt)}let m=[],w=[],M=(S,_)=>{let g=c[S],E=m[S]??=new Set;for(let x=0;x<g;x++)for(let C of[_-x,_+x])if(C>=0&&C<g&&!E.has(C))return C;return _},A=[];f.forEach((S,_)=>{S.forEach((g,E)=>{if(c[g]>1){let x=u[_][E],C=M(g,Number.isNaN(x)?h[_][E]:Math.round(x));m[g].add(C),(w[g]??=[])[l[_][E]]=C,Number.isNaN(x)||((A[g]??=[])[C]=x)}})});let R=new Map,P=new Map,k=new Map,W=new Map;a.forEach((S,_)=>{A[_]&&W.set(S,A[_]),R.set(S,c[_]),P.set(S,m[_]?[...m[_]].sort((E,x)=>E-x):Ze);let g=[];w[_]?.forEach((E,x)=>{g[E]=x-1}),k.set(S,g)});let F=new Map;return f.forEach((S,_)=>{let g=l[_];for(let E=1;E<S.length;E++){let x=S[E-1],C=S[E],J=[w[x]?.[g[E-1]]??0,w[C]?.[g[E]]??0],D=F.get(a[x]);D||(D=new Map,F.set(a[x],D));let B=D.get(a[C]);B?B.some(([Y,et])=>Y===J[0]&&et===J[1])||B.push(J):D.set(a[C],[J])}}),{span:R,nodeThreads:P,threadPasses:k,threadAt:W,linkThreads:F}}function eo(t,n,o,{reach:e,taper:s}){let r=new Map;return t.forEach((a,c)=>{let i=n[c],f=a.ids.map((l,h)=>{let u=a.starts[h+1]-a.starts[h],m=Math.floor(u/2);return i[a.starts[h]+(a.forward[h]?m:u-1-m)]});for(let[l,h]of xn(f,a.owned,e/2+s/2)){let u=f.slice(l,h+1),m=a.ids.slice(l,h+1),w=o.map(M=>{let A=m.map(R=>M.get(R)??0);return A.every(R=>R===A[0])?{slot:A,held:A}:{slot:tn(u,fe(u,A,e/2,1),s/2),held:tn(u,A,s/2,R=>R>0)}});m.forEach((M,A)=>{a.owned[l+A]&&r.set(M,{slot:w.map(R=>R.slot[A]),held:w.map(R=>R.held[A])})})}}),r}function oo(t,n,o,e,s,r,a){let c=Kt(s,s),i=new Map,f=l=>{let h=i.get(l);if(!h){let u=e.get(l);h=u?Kt(u.slot,s,u.held):c,i.set(l,h)}return h};t.forEach((l,h)=>{let{walk:u,ids:m,visits:w,starts:M}=l,{threadPasses:A,threadAt:R}=r[u],P=new Float64Array(l.xs.length);m.forEach((W,F)=>{let S=Math.max(0,A.get(W)?.indexOf(w[F])??0),_=R.get(W)?.[S]??S;P.fill(f(W)[u]+_*gn,M[F],M[F+1])});let k=tn(o[h],P,a);n[h].forEach((W,F)=>{let S=M[F],_=M[F+1],g=!0;for(let x=S+1;g&&x<_;x++)g=Math.abs(k[x]-k[S])<1e-9;if(g){W.offset=k[S];return}let E=new Array(_-S);for(let x=S;x<_;x++)E[Zt(l,x)]=k[x];W.offsets=E})})}function he(t,n,o,e,s=yn(t.map(r=>r.route),n)){let r=pn(t),a=t.map(M=>M.mostPasses),c=Ue*e,i=qe(s,o,ne*e),f=nn(a)*(r?en(a):1)*e,l=Qe(i,o,ne*e,f,r),h=r?t.map(M=>no(M.route,M.passes,n,o,c)):void 0,u=h?eo(i,l.arcs,h.map(M=>M.span),{reach:c,taper:ee*e}):void 0;u&&h&&oo(i,l.stepFrames,l.arcs,u,a,h,ee/2*e);let m={dx:0,dy:0},w=new Set;for(let M of l.frames.values())for(let{shifts:A}of M.flat())if(!w.has(A)){w.add(A);for(let R of A)m.dx=Math.max(m.dx,Math.abs(R?.dx??0)),m.dy=Math.max(m.dy,Math.abs(R?.dy??0))}return{lines:l,threads:h,spans:u,furthestShift:m}}function U(t,n,o,e){return(e<<24|o<<16|n<<8|t)>>>0}function wn(t){return t&255}function Mn(t){return t>>>8&255}function An(t){return t>>>16&255}function En(t){return t>>>24&255}function ue(t){return`rgba(${wn(t)},${Mn(t)},${An(t)},${En(t)/255})`}function fs(t,n){return`rgba(${Math.round(t[0]*255)},${Math.round(t[1]*255)},${Math.round(t[2]*255)},${n})`}function vt(t,n){return U(wn(t),Mn(t),An(t),Math.round(En(t)*n))}function hs(t,n){let o=Math.max(0,1-1/n),e=s=>Math.round(s+(255-s)*o);return U(e(wn(t)),e(Mn(t)),e(An(t)),En(t))}var de=300,Ut=.7,Yt=.5;function so(t){return`hsl(${t}, ${Ut*100}%, ${Yt*100}%)`}function qt(t){return Math.max(0,Math.min(1,t))*de}function vn(t,n){return qt((t-n.start)/(n.end-n.start))}var ro=30;function ds({start:t,bp:n,reversed:o},e){let s=vn(t,e),r=vn(t+n,e);if(r-s<1)return[(s+r)/2];let a=Math.ceil((r-s)/ro);return Array.from({length:a+1},(c,i)=>vn(t+n*(o?a-i:i)/a,e))}var ao=Array.from({length:7},(t,n)=>({offset:n/6,color:so(n/6*de)})),ms=`linear-gradient(to right, ${ao.map(t=>`${t.color} ${t.offset*100}%`).join(", ")})`;var co=$t();function me(t,n,o,e,s,r,a=!1){return co(t,[n,o.scaleX,o.scaleY,e,r,a,s],()=>{let c=new Map;for(let i=0;i<n.edges.length;i++){let f=e?.get(i),l=zn(t,n.edges[i],o,f,f&&r?.[i],a);l&&c.set(i,l)}return c})}var io=4;function lo(t){let n=new Map;for(let o of t.edges)Bt(n,o.from,o.to),Bt(n,o.to,o.from);return n}function fo({nodeId:t,nodeById:n,neighbors:o}){let e=new Set([t]),s=[t],r=1/0,a=-1/0;for(let c=0;c<io&&s.length>0;c++){let i=[];for(let f of s){let l=o.get(f);if(l){for(let h of l)if(!e.has(h)){e.add(h);let u=n.get(h);u&&Xt(u)?(r=Math.min(r,u.stable.start+u.length),a=Math.max(a,u.stable.start)):i.push(h)}}}s=i}return r===1/0?void 0:{start:Math.min(r,a),end:Math.max(r,a)}}function ho({nodeId:t,nodeById:n,neighbors:o}){let e=n.get(t);return e===void 0?void 0:Xt(e)?{start:e.stable.start,end:e.stable.start+e.length}:fo({nodeId:t,nodeById:n,neighbors:o})}function pe(t){let n=new Map(t.nodes.map(s=>[s.id,s])),o=lo(t),e=new Map;for(let s of t.nodes){let r=ho({nodeId:s.id,nodeById:n,neighbors:o});r&&e.set(s.id,(r.start+r.end)/2)}return e}var uo=U(119,119,119,217),ge=U(136,136,136,217),mo=U(24,24,28,240),ye=2.2,Te=U(160,160,160,255),Vt=.18,po=.45,Ns=ue(vt(Te,Vt)),go=11,yo=1.2,xo=1e-6,wo=7,Mo=3,Ao=3,Eo=1.5,xe=3,vo=.5,_o=.45,_n=12,bo=1e-6,pt=new Float64Array(64),_t=new Float64Array(64),bt=new Float64Array(64);function Ro(t,n,o,e){let s=t.length*_n+1;pt.length<s&&(pt=new Float64Array(s),_t=new Float64Array(s),bt=new Float64Array(s));let r=t[t.length-1];pt[0]=r.x1,_t[0]=r.y1,bt[0]=0;let a=1,c=0;for(let i=t.length-1;i>=0&&c<e;i--){let f=t[i];for(let l=1;l<=_n&&c<e;l++){let h=1-(l/_n)**2,u=1-h,m=u*u*u,w=3*u*u*h,M=3*u*h*h,A=h*h*h,R=m*f.x0+w*f.cx0+M*f.cx1+A*f.x1,P=m*f.y0+w*f.cy0+M*f.cy1+A*f.y1;c+=Math.hypot(R-pt[a-1],(P-_t[a-1])*o)*n,pt[a]=R,_t[a]=P,bt[a]=c,a++}}return a}function we(t,n){let o=1;for(;o<t-1&&bt[o]<n;)o++;let e=bt[o-1],s=bt[o],r=s>e?Math.min(1,Math.max(0,(n-e)/(s-e))):0;return{x:pt[o-1]+(pt[o]-pt[o-1])*r,y:_t[o-1]+(_t[o]-_t[o-1])*r}}function So({curves:t,edgeHalfWidth:n,nodeHalfWidth:o,scale:e,yToX:s,color:r,fromSegments:a,toSegments:c}){let i=wo+Mo*n,f=Ro(t,e,s,o+xe*i),l=bt[f-1],h=l<bo,u=Math.min(o,l),m=h?Math.min(1,Vn(a,e,e*s)/i):1;if(h?m<vo:l<xe*i)return;let w=we(f,u),M=we(f,u+i*m),A=w.x-M.x,R=(w.y-M.y)*s,P=t[t.length-1];return{x:w.x,y:w.y,angle:Math.hypot(A,R)>0?Math.atan2(R,A):Wo(P,s,Oo(P,c)),length:i*m,halfWidth:(Ao+Eo*n)*m,color:r}}var Me=[[0,0]],Co=[0],Ae={dx:0,dy:0};function Oe(t,n,o){let e=s=>Math.hypot(s.x-t.x,(s.y-t.y)*o);return e(n[0])<e(n.at(-1))}function To(t,n,o,e,s){return e?Un(t).from==="start":Oe({x:o.x0,y:o.y0},n,s)}function Oo(t,n){if(n.length<2)return;let o=n[0],e=n[n.length-1];return Math.hypot(t.x1-o.x,t.y1-o.y)<=Math.hypot(t.x1-e.x,t.y1-e.y)?{from:o,to:n[1]}:{from:e,to:n[n.length-2]}}function Ee(t,n){if(!t||!n)return;let o=n.x-t.x,e=n.y-t.y,s=Math.hypot(o,e);return s>0?{nx:-e/s,ny:o/s}:void 0}var ke=.1,ko=1/Math.sqrt(ke);function ve(t,n=1){let o=n===1?t:t.map(e=>({x:e.x,y:e.y*n}));return o.map((e,s)=>{let r=Ee(o[s-1],e),a=Ee(e,o[s+1]);if(r&&a){let c=(r.nx+a.nx)/2,i=(r.ny+a.ny)/2,f=r.nx*c+r.ny*i;return f>ke?{nx:c/f,ny:i/f}:{nx:c,ny:i}}return r??a??{nx:0,ny:0}})}function _e(t,n,o,e=1){let s=new Array(t.length);for(let r=0;r<t.length;r++){let a=typeof o=="number"?o:o[r];s[r]={x:t[r].x+n[r].nx*a,y:t[r].y+n[r].ny*a/e}}return s}function Rn(t,n,o){let e=(1-Math.abs(2*o-1))*n,s=e*(1-Math.abs(t/60%2-1)),r=o-e/2,a=0,c=0,i=0;return t<60?(a=e,c=s):t<120?(a=s,c=e):t<180?(c=e,i=s):t<240?(c=s,i=e):t<300?(a=s,i=e):(a=e,i=s),[a+r,c+r,i+r]}function on(t,n,o,e=1){let[s,r,a]=Rn(t,n,o);return U(Math.round(s*255),Math.round(r*255),Math.round(a*255),Math.round(e*255))}var Io=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],Po=[[237,137,44],[158,42,122]],No=[[220,50,50],[50,120,220]];function bn(t,n){let o=Math.max(0,Math.min(1,n))*(t.length-1),e=Math.min(t.length-2,Math.floor(o)),s=o-e,r=t[e],a=t[e+1];return U(Math.round(r[0]+(a[0]-r[0])*s),Math.round(r[1]+(a[1]-r[1])*s),Math.round(r[2]+(a[2]-r[2])*s),255)}function Fo(t,n){return on(jn(t),un,dn,n)}var Ie=[60,65,72],Sn=U(...Ie,255),Fs=`rgb(${Ie.join(", ")})`;function Lo(t,n){let o=n.midpoints.get(t.id);return Xt(t)&&o!==void 0?(o-n.start)/n.span:void 0}function Ls(t,n){let o=pe(t);if(n&&n.end>n.start)return{start:n.start,span:n.end-n.start,midpoints:o};let e=1/0,s=-1/0;for(let r of o.values())e=Math.min(e,r),s=Math.max(s,r);return{start:e===1/0?0:e,span:s>e?s-e:1,midpoints:o}}function Ho(t,n){let o=1/0,e=-1/0,s=1/0,r=-1/0,a=0;for(let c of t.nodes)c.stable!==void 0&&c.stable.rank>a&&(a=c.stable.rank),c.depth<o&&(o=c.depth),c.depth>e&&(e=c.depth),c.length<s&&(s=c.length),c.length>r&&(r=c.length);return{minDepth:o,maxDepth:e,minLength:s,maxLength:r,maxRank:a,nodeCount:t.nodes.length,referenceRamp:n}}function Do(t,n,o,e){switch(o){case"random":return Fo(t.id,1);case"depth":return bn(Io,e.maxDepth>e.minDepth?(t.depth-e.minDepth)/(e.maxDepth-e.minDepth):.5);case"node-length":return bn(No,e.maxLength>e.minLength?(t.length-e.minLength)/(e.maxLength-e.minLength):.5);case"stable-rank":return t.stable===void 0?U(160,160,160,255):t.stable.rank===0?U(52,152,219,255):bn(Po,e.maxRank>1?(t.stable.rank-1)/(e.maxRank-1):0);case"reference-position":{let s=e.referenceRamp;if(s===void 0)return U(160,160,160,255);let r=Lo(t,s);return r===void 0?Sn:on(qt(r),Ut,Yt)}case"grey":return U(160,160,160,255);case"rainbow":{let s=e.nodeCount>1?n/e.nodeCount*360:0;return on(s,.75,.5)}default:return U(52,152,219,255)}}function Wo(t,n=1,o){let e=[[t.cx1,t.cy1],[t.cx0,t.cy0],[t.x0,t.y0]];for(let[s,r]of e){let a=t.x1-s,c=(t.y1-r)*n;if(Math.hypot(a,c)>0)return Math.atan2(c,a)}return o?Math.atan2((o.to.y-o.from.y)*n,o.to.x-o.from.x):0}function Go(t,n){let o=!1;for(let e=0;e<t.length-1&&!o;e++){let s=t[e],r=t[e+1];o=Math.max(s.x,r.x)>=n.minX&&Math.min(s.x,r.x)<=n.maxX&&Math.max(s.y,r.y)>=n.minY&&Math.min(s.y,r.y)<=n.maxY}return o}function be(t,n,o=0,e=0){for(let s of t){let r=Math.min(s.x0,s.cx0,s.cx1,s.x1),a=Math.max(s.x0,s.cx0,s.cx1,s.x1),c=Math.min(s.y0,s.cy0,s.cy1,s.y1),i=Math.max(s.y0,s.cy0,s.cy1,s.y1);if(a>=n.minX-o&&r<=n.maxX+o&&i>=n.minY-e&&c<=n.maxY+e)return!0}return!1}var Re=new WeakMap;function Bo(t){let n=Re.get(t);if(!n){let o=[],e=new Map,s=t.paths??[];for(let r=0;r<s.length;r++)o.push(on(Jn(r,s.length),un,dn,.85)),e.has(s[r].name)||e.set(s[r].name,r);n={pathColorByIndex:o,pathIndexByName:e},Re.set(t,n)}return n}var Se=new WeakMap,Xo=new Map;function $o(t){let n=Se.get(t);if(!n){n=new Map;for(let[o,e]of(t.paths??[]).entries())for(let s of new Set(e.nodeIds))Bt(n,s,o);Se.set(t,n)}return n}var Ko=$t(),Uo=$t(),Ce=new WeakMap;function Yo(t){let n=Ce.get(t);if(!n){n=new Map;for(let{from:o,to:e}of t.edges){let s=n.get(o);s||(s=new Set,n.set(o,s)),s.add(e)}Ce.set(t,n)}return n}function Hs(t){let{nodePositions:n,graph:o,nodeById:e,colorScheme:s,contigThickness:r,connectorThickness:a,drawPaths:c,nodeWidth:i="uniform",edgeWidth:f="uniform",highlight:l,axis:h,linearLayout:u,viewportBounds:m,referenceRamp:w,deletions:M,deletionRoutes:A,stranded:R,hiddenEdges:P,version:k=0}=t,W=Qn(o,i),F=f==="walks"?Zn(o):0,S=h.scaleX,_=1/Math.max(S,xo),g=Yn(h),E=me(n,o,h,M,k,A,R),x=[],C=new Map,J=[],D=new Map,B=[],Y=new Map,et=Ho(o,w),ct=new Map;if(s==="rainbow")for(let p=0;p<o.nodes.length;p++)ct.set(o.nodes[p].id,p);let tt=o.paths?.length??0,{pathColorByIndex:b,pathIndexByName:L}=Bo(o),q=p=>b[L.get(p)??-1]??ge,ot=c&&tt>1?$o(o):Xo,G=l?.walks??[],V=pn(G),d=G.map(p=>p.mostPasses),I=V?en(d):1,N=l&&G.length>1?Ko(l,[n,k,h.scaleX,h.scaleY],()=>he(G,n,g,_,Uo(l,[n,k],()=>yn(G.map(p=>p.route),n)))):void 0,j=N?.lines,st=N?.threads,H=N?.spans,it=V?Kt(d,d):[],gt=new Map,Lt=p=>{let y=gt.get(p);if(!y){let v=H?.get(p);y=v?Kt(v.slot,d,v.held):it,gt.set(p,y)}return y},Ht=(p,y,v,T)=>V?(Lt(p)[v]+T*gn)*I:(v-(G.length-1)/2)*y,Rt=(p,y,v)=>{let T=p?.offsets?.[y]??p?.offset;return T===void 0?v:T*I},Pn=p=>V?Et/2*I:p/2,Nn=new Map,Fn=new WeakMap,Ln=(p,y,v)=>st?.[p]?.threadPasses.get(y)?.[v]??0,rn=(p,y)=>{let v=Nn.get(p);return v||(v=ve(y,g),Nn.set(p,v)),v},We=(p,y,v)=>{if(!v)return rn(p,y);let T=Fn.get(v.normals);return T||(T=rn(p,y).map((O,X)=>v.normals[X]??O),Fn.set(v.normals,T)),T},Hn=new Map,an=p=>{let y=Hn.get(p);if(y===void 0){let v=e.get(p);y=mn(v?Qt(v,r,i,W):r,G.length),Hn.set(p,y)}return y},Dn=(p,y,v,T,O,X)=>{let Q=T?0:v.length-1,z=y?.[O]?.[Ln(O,p,X)],rt=z?.offsets?.[Q]??z?.offset;return{normal:z?.normals[Q]??rn(p,v)[Q]??{nx:0,ny:0},shift:z?.shifts[Q]??Ae,offset:rt===void 0?Ht(p,an(p),O,X):rt*I}},Ge=(p,y)=>{if(!m)return!0;let v=V?nn(d)*I:(G.length-1)/2*an(y),T=ko*v*_;return be(p,m,T+(N?.furthestShift.dx??0),T/g+(N?.furthestShift.dy??0))},Be=(p,y,v)=>{let T=st?.[p]?.linkThreads;if(!T?.size)return Me;let O=T.get(y)?.get(v),X=Yo(o).get(v)?.has(y)?void 0:T.get(v)?.get(y);if(!X)return O??Me;let Q=X.map(([z,rt])=>[rt,z]);return O?[...O,...Q]:Q},cn=(p,y,v)=>G[p]?.passColors.get(y)?.[st?.[p]?.threadPasses.get(y)?.[v]??0],Wn=new WeakMap,Xe=(p,y)=>{if(!y||!V)return p;let v=Wn.get(y.shifts);if(!v){let{shifts:T}=y;v=p.map((O,X)=>{let{dx:Q,dy:z}=T[X]??Ae;return{...O,x:O.x+Q,y:O.y+z}}),Wn.set(y.shifts,v)}return v},$e=S>(u?1:_o);for(let p=0;p<o.edges.length;p++){let y=o.edges[p],v=n[y.from],T=n[y.to],O=E.get(p);if(!v?.length||!T?.length||!O||P?.has(p))continue;let X=y.pathIds?.length??0,z=M?.get(p)!==void 0,rt=l?.edgeIndexes.has(p)??!1,Dt=a/2*(z?ye:1),St=te(X,F,f),Ct=a/2*(z?f==="walks"&&F>0?Math.max(1,St):ye:St),lt=c&&X>0,Tt=z?mo:uo,yt=!l||rt?Tt:vt(Tt,Vt),ut=e.get(y.to),Wt=(ut?Qt(ut,r,i,W):r)/2,$=K=>!m||be(K,m),zt=K=>$n(K,go/S,g,m),jt=(K,Z,nt)=>{if(!z){B.push({curves:K,thickness:Z,color:nt});return}for(let mt of zt(K))B.push({curves:mt.curves,thickness:Z,color:nt})},xt=(K,Z,nt,mt,kt,Mt,It,at,Gn)=>{B.push({curves:K,thickness:Z,color:nt,walk:mt,pass:kt,normal:Mt,offsetX:It,endNormal:at,endOffsetX:Gn})},Ot=K=>{let Z=$e?So({curves:K,edgeHalfWidth:z||lt?a/2:Ct,nodeHalfWidth:Wt,scale:S,yToX:g,color:yt,fromSegments:v,toSegments:T}):void 0;Z&&J.push(Z)},dt=B.length,Gt=J.length,wt=l?.walks.length&&rt&&!lt?l.walks:void 0;if(wt&&!Ge(O,y.from))continue;if(wt){let K=To(y,v,O[0],R,g),Z=O.at(-1),nt=Oe({x:Z.x1,y:Z.y1},T,g),mt=wt.length===1,kt=Pn(an(y.from)),Mt=j?.frames.get(y.from),It=j?.frames.get(y.to);for(let at=0;at<wt.length;at++)if(wt[at].edgeIndexes.has(p))for(let[ln,Bn]of Be(at,y.from,y.to)){let ht=Dn(y.from,Mt,v,K,at,ln),Pt=V?Dn(y.to,It,T,nt,at,Bn):ht,At=mt?0:ht.offset*_,fn=V?Pt.offset*_:At,Xn=V?Kn(O,ht.shift.dx+ht.normal.nx*At,ht.shift.dy+ht.normal.ny*At/g,Pt.shift.dx+Pt.normal.nx*fn,Pt.shift.dy+Pt.normal.ny*fn/g):At===0?O:hn(O,ht.normal.nx*At,ht.normal.ny*At/g);$(Xn)&&xt(Xn,kt,cn(at,y.from,ln)??cn(at,y.to,Bn)??Tt,at,ln,ht.normal,At,Pt.normal,fn)}B.length>dt&&Ot(O)}else if(!lt)$(O)&&(jt(O,Ct,yt),Ot(O));else{let K=qn(v,T,X,h),Z=Math.floor((X-1)/2);for(let nt=0;nt<X;nt++){let{x:mt,y:kt}=K[nt],Mt=mt===0&&kt===0?O:hn(O,mt,kt);if(!$(Mt))continue;let It=q(y.pathIds[nt]);jt(Mt,Dt,l&&(l.walks.length?!l.names.has(y.pathIds[nt]):!rt)?vt(It,Vt):It),nt===Z&&Ot(Mt)}}let Jt=B.length-dt;Jt>0&&Y.set(p,{start:dt,count:Jt});let ft=J.length-Gt;ft>0&&D.set(p,{start:Gt,count:ft})}for(let[p,y]of Object.entries(n)){let v=e.get(p);if(!v||m&&!Go(y,m))continue;let T=l!==void 0&&!l.nodeIds.has(p),O=T?Te:Do(v,ct.get(p)??0,s,et),X=T?vt(O,Vt):v.moved?vt(O,po):O,Q=Qt(v,r,i,W),z=Q/2,rt=x.length,Dt=ot.get(p),St=Q/tt,Ct=y.length>=2,lt=l?.walks.length&&!T&&!Dt?.length?l.walks:void 0;if(Ct&&lt){let yt=mn(Q,lt.length),ut=Pn(yt),Wt=j?.frames.get(p);for(let $=0;$<lt.length;$++){let zt=lt[$].colors.get(p);if(zt===void 0)continue;let jt=st?.[$]?.nodeThreads.get(p)??Co;for(let xt of jt){let Ot=cn($,p,xt)??zt;if(lt.length===1){x.push({points:y,thickness:ut,color:Ot,walk:$,pass:xt});continue}let dt=Wt?.[$]?.[Ln($,p,xt)],Gt=We(p,y,dt),wt=Xe(y,dt),Jt=Ht(p,yt,$,xt),ft=dt?.offsets?.map(Z=>Z*I*_),K=ft?ft[Math.floor(ft.length/2)]:Rt(dt,0,Jt)*_;x.push({points:_e(wt,Gt,ft??K,g),thickness:ut,color:Ot,walk:$,pass:xt,normals:Gt,offsetX:K,...ft&&{offsets:ft}})}}}else if(Ct&&Dt?.length&&St>=yo){let yt=ve(y,g);for(let ut of Dt){let Wt=(ut-(tt-1)/2)*St*_,$=b[ut]??ge;x.push({points:_e(y,yt,Wt,g),thickness:St/2,color:T?vt($,Vt):$})}}else Ct&&x.push({points:y,thickness:z,color:X});let Tt=x.length-rt;Tt>0&&C.set(p,{start:rt,count:Tt})}return{nodeStrokes:x,nodeStrokeRuns:C,arrows:J,arrowRuns:D,edgeCurves:B,edgeCurveRuns:Y}}var Fe=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],On=[{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:"orange",label:"Peach to rust",ends:["#ffc285","#8f3a00"]},{value:"rainbow",label:"Rainbow"}],Cn=["blue","red","purple","green"],qo=t=>Fe.some(n=>n.value===t),Vo=t=>On.some(n=>n.value===t);function zo(t,n,o,e=!0){let{field:s,scheme:r}=t.color??{},a=qo(s)?s:e?"progress":"walk",c=n?"grey":Cn[o%Cn.length],i=Vo(r)?r==="rainbow"&&a!=="reference"?c:r:c,f=Math.floor(o/Cn.length)%Pe.length;return a==="walk"&&i===c&&f>0?{field:a,scheme:i,shade:Pe[f]}:e||a==="walk"?{field:a,scheme:i}:{field:a,scheme:i,darkest:jo}}var jo=.55,kn=.5,Pe=[kn,.85,.2],Jo=.08,Ne=({field:t,scheme:n})=>t!=="walk"&&n!=="rainbow";function Qo(t){let n=new Map;for(let e of t)Ne(e)&&n.set(e.scheme,(n.get(e.scheme)??0)+1);let o=new Map;return t.map(e=>{let s=Ne(e)?n.get(e.scheme):1;if(s<2)return e;let r=o.get(e.scheme)??0;o.set(e.scheme,r+1);let a=Jo/2;return{...e,stretch:[r/s+(r>0?a:0),(r+1)/s-(r<s-1?a:0)]}})}var Le=({stretch:t},n)=>t?t[0]+(t[1]-t[0])*n:n,Zo=t=>t<=.04045?t/12.92:((t+.055)/1.055)**2.4,ts=t=>t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;function ns(t){let[n,o,e]=[1,3,5].map(c=>Zo(Number.parseInt(t.slice(c,c+2),16)/255)),s=Math.cbrt(.4122214708*n+.5363325363*o+.0514459929*e),r=Math.cbrt(.2119034982*n+.6806995451*o+.1073969566*e),a=Math.cbrt(.0883024619*n+.2817188376*o+.6299787005*e);return[.2104542553*s+.793617785*r-.0040720468*a,1.9779984951*s-2.428592205*r+.4505937099*a,.0259040371*s+.7827717662*r-.808675766*a]}function es([t,n,o]){let e=(t+.3963377774*n+.2158037573*o)**3,s=(t-.1055613458*n-.0638541728*o)**3,r=(t-.0894841775*n-1.291485548*o)**3;return[4.0767416621*e-3.3077115913*s+.2309699292*r,-1.2684380046*e+2.6097574011*s-.3413193965*r,-.0041960863*e-.7034186147*s+1.707614701*r].map(a=>ts(Math.max(0,Math.min(1,a)))*255)}var Tn=new Map;function os(t){if(!Tn.has(t)){let n=On.find(o=>o.value===t);Tn.set(t,n&&"ends"in n?n.ends.map(ns):void 0)}return Tn.get(t)}function In(t,n,o=0){let e=Math.max(0,Math.min(1,n)),s=os(t);if(!s)return Rn(qt(e),Ut,Yt).map(l=>l*255);let[r,a]=s,c=r[0],i=a[0],f=i<o&&c>o?(c-o)/(c-i):1;return es(r.map((l,h)=>l+(a[h]-l)*e*f))}function He(t,n,o){let[e,s,r]=In(t,n,o).map(Math.round);return`rgb(${e}, ${s}, ${r})`}function sn(t,n,o){let[e,s,r]=In(t,n,o).map(Math.round);return U(e,s,r,255)}function ss(t,n){let{field:o,scheme:e,darkest:s,shade:r=kn}=t;return o==="walk"?sn(e,r):n===void 0?De:sn(e,Le(t,n),s)}var De=Sn;function rs(t){let{field:n,scheme:o,darkest:e,shade:s=kn}=t,r=(a,c)=>({offset:a,color:He(o,c,e),abgr:sn(o,c,e)});return n==="walk"?[r(0,s)]:Array.from({length:7},(a,c)=>r(c/6,Le(t,c/6)))}export{lo as a,ho as b,Et as c,pn as d,is as e,U as f,ue as g,fs as h,vt as i,hs as j,so as k,ds as l,ao as m,ms as n,me as o,Ns as p,Rn as q,Fs as r,Lo as s,Ls as t,Ho as u,Do as v,Hs as w,Fe as x,On as y,zo as z,Qo as A,ss as B,De as C,rs as D};
2
+ //# sourceMappingURL=chunk-EKIQ3ATV.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-YUIKEUKY.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-G2FD7S3C.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-GQZVR5DW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-URPU4XCM.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-L4DBSRA2.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-YA3VYQH4.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ACGRXI3X.js"],
4
+ "sourcesContent": ["import {\n slideAt\n} from \"./chunk-JJV2GT2Z.js\";\n\n// src/renderer/walkLanes.ts\nvar THREAD_PX = 2;\nvar THREAD_GAP_PX = 1.5;\nvar SLOT_GAP_PX = 4;\nvar LANE_SMOOTHING_PX = 12;\nvar THREAD_REACH_PX = 64;\nvar THREAD_TAPER_PX = 24;\nvar MAX_BAND_PX = 48;\nvar PASSES_KEY = \"a thread per pass through a node\";\nvar threadsPasses = (walks) => walks.length > 1 && walks.some((w) => w.mostPasses > 1);\nvar threadsWidth = (threads) => threads * THREAD_PX + Math.max(0, threads - 1) * THREAD_GAP_PX;\nvar sum = (values) => values.reduce((a, b) => a + b, 0);\nfunction slotLayout(spans, mostPasses, laneWidth) {\n const widths = spans.map(\n (m, i) => mostPasses[i] > 1 ? threadsWidth(m) : laneWidth * Math.min(1, m)\n );\n let seen = 0;\n const gaps = spans.map((m) => {\n const share = Math.min(1, m);\n const gap = SLOT_GAP_PX * share * seen;\n seen = Math.max(seen, share);\n return gap;\n });\n return { widths, gaps, band: sum(widths) + sum(gaps) };\n}\nvar THREAD_PITCH_PX = THREAD_PX + THREAD_GAP_PX;\nfunction slotCentres(spans, mostPasses, held = spans) {\n const { widths, gaps, band } = slotLayout(spans, mostPasses, THREAD_PX);\n let at = -band / 2;\n return widths.map((width, i) => {\n at += gaps[i];\n const slack = mostPasses[i] > 1 ? Math.max(0, width - threadsWidth(held[i])) : 0;\n const centre = at + slack / 2 + THREAD_PX / 2;\n at += width;\n return centre;\n });\n}\nvar bandWidthPx = (mostPasses) => slotLayout(mostPasses, mostPasses, THREAD_PX).band;\nvar bandScale = (mostPasses) => Math.min(1, MAX_BAND_PX / (bandWidthPx(mostPasses) || 1));\nvar passesKey = (walks) => bandScale(walks.map((w) => w.mostPasses)) < 1 ? `${PASSES_KEY}, thinned to fit` : PASSES_KEY;\nfunction laneSlideAt(start, end, along) {\n const vector = ({ normal, offsetX: offsetX2 }) => ({\n dx: normal.nx * offsetX2,\n dy: normal.ny * offsetX2\n });\n const { dx, dy } = slideAt(vector(start), vector(end), along);\n const offsetX = Math.hypot(dx, dy);\n return offsetX > 0 ? { normal: { nx: dx / offsetX, ny: dy / offsetX }, offsetX } : { normal: { nx: 0, ny: 0 }, offsetX: 0 };\n}\nfunction pointIndex(run, p) {\n const i = run.stepOf[p];\n const k = p - run.starts[i];\n return run.forward[i] ? k : run.starts[i + 1] - run.starts[i] - 1 - k;\n}\nvar gapOf = (a, b) => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return Math.sqrt(dx * dx + dy * dy);\n};\nfunction arcOf(run) {\n const s = new Float64Array(run.length);\n for (let i = 1; i < run.length; i++) {\n s[i] = s[i - 1] + gapOf(run[i - 1], run[i]);\n }\n return s;\n}\nfunction walkSteps(walkRoutes, nodePositions) {\n const seen = /* @__PURE__ */ new Set();\n return walkRoutes.map((routes) => {\n const visits = /* @__PURE__ */ new Map();\n return routes.map(\n (route) => route.map((id) => {\n const visit = visits.get(id) ?? 0;\n visits.set(id, visit + 1);\n const segments = nodePositions[id];\n const owned = !!segments?.length && !seen.has(id);\n if (owned) {\n seen.add(id);\n }\n return { id, visit, owned, segments };\n })\n );\n });\n}\nfunction laneRuns(steps, yToX, jump) {\n const runs = [];\n steps.forEach((pieces, walk) => {\n let total = 0;\n for (const piece of pieces) {\n for (const { segments } of piece) {\n total += segments?.length ?? 0;\n }\n }\n const xs = new Float64Array(total);\n const ys = new Float64Array(total);\n let at = 0;\n let from = 0;\n let run = fresh();\n function fresh() {\n return {\n walk,\n ids: [],\n visits: [],\n forward: [],\n owned: [],\n starts: [0]\n };\n }\n const breakRun = () => {\n if (run.ids.length) {\n const stepOf = new Int32Array(at - from);\n for (let i = 0; i < run.ids.length; i++) {\n stepOf.fill(i, run.starts[i], run.starts[i + 1]);\n }\n runs.push({\n ...run,\n xs: xs.subarray(from, at),\n ys: ys.subarray(from, at),\n stepOf\n });\n }\n run = fresh();\n from = at;\n };\n const gap = (x, y, p) => {\n const dx = p.x - x;\n const dy = p.y * yToX - y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n for (const piece of pieces) {\n piece.forEach(({ id, visit, owned, segments }, k) => {\n if (!segments?.length) {\n breakRun();\n return;\n }\n const first = segments[0];\n const last = segments.at(-1);\n let forward;\n if (at > from) {\n const x = xs[at - 1];\n const y = ys[at - 1];\n const toFirst = gap(x, y, first);\n const toLast = gap(x, y, last);\n forward = toFirst <= toLast;\n if (Math.min(toFirst, toLast) > jump) {\n breakRun();\n }\n } else {\n const next = piece[k + 1]?.segments;\n const toNext = (p) => next?.length ? Math.min(\n gap(p.x, p.y * yToX, next[0]),\n gap(p.x, p.y * yToX, next.at(-1))\n ) : 0;\n forward = toNext(last) <= toNext(first);\n }\n run.ids.push(id);\n run.visits.push(visit);\n run.forward.push(forward);\n run.owned.push(owned);\n for (let j = 0; j < segments.length; j++) {\n const p = segments[forward ? j : segments.length - 1 - j];\n xs[at] = p.x;\n ys[at] = p.y * yToX;\n at++;\n }\n run.starts.push(at - from);\n });\n breakRun();\n }\n });\n return runs;\n}\nfunction ownedWindows(s, owned, margin) {\n const windows = [];\n for (let i = 0; i < owned.length; i++) {\n if (!owned[i]) {\n continue;\n }\n let j = i;\n while (j + 1 < owned.length && owned[j + 1]) {\n j++;\n }\n const last = windows.at(-1);\n const floor = last ? last[1] : 0;\n let lo = i;\n while (lo > floor && s[i] - s[lo - 1] <= margin) {\n lo--;\n }\n let hi = j;\n while (hi + 1 < s.length && s[hi + 1] - s[j] <= margin) {\n hi++;\n }\n if (last && lo <= last[1] + 1) {\n last[1] = hi;\n } else {\n windows.push([lo, hi]);\n }\n i = j;\n }\n return windows;\n}\nfunction smoothedNormals(run, reach) {\n const s = arcOf(run);\n const end = s.at(-1);\n const pointAt = (at, j) => {\n const a = run[j];\n const b = run[Math.min(j + 1, run.length - 1)];\n const span = s[Math.min(j + 1, run.length - 1)] - s[j];\n const f = span > 0 ? (at - s[j]) / span : 0;\n return { x: a.x + (b.x - a.x) * f, y: a.y + (b.y - a.y) * f };\n };\n let lo = 0;\n let hi = 0;\n return run.map((_, i) => {\n const back = Math.max(0, s[i] - reach / 2);\n const ahead = Math.min(end, s[i] + reach / 2);\n while (lo < run.length - 1 && s[lo + 1] <= back) {\n lo++;\n }\n while (hi < run.length - 1 && s[hi + 1] <= ahead) {\n hi++;\n }\n const a = pointAt(back, lo);\n const b = pointAt(ahead, hi);\n const len = gapOf(a, b);\n return len > 0 ? { nx: -(b.y - a.y) / len, ny: (b.x - a.x) / len } : void 0;\n });\n}\nfunction cutCurls(run, close, length) {\n const s = arcOf(run);\n const out = run.slice();\n const picks = [];\n s.forEach((at, k) => {\n const last = picks.at(-1);\n if (last === void 0 || at - s[last] >= close / 4) {\n picks.push(k);\n }\n });\n if (picks.at(-1) !== run.length - 1) {\n picks.push(run.length - 1);\n }\n let a = 0;\n while (a < picks.length) {\n const i = picks[a];\n let to = -1;\n for (let b = a + 1; b < picks.length && s[picks[b]] - s[i] <= length; b++) {\n const j2 = picks[b];\n if (s[j2] - s[i] > Math.PI * close && gapOf(run[i], run[j2]) <= close) {\n to = b;\n }\n }\n if (to < 0) {\n a++;\n continue;\n }\n const j = picks[to];\n const p = run[i];\n const q = run[j];\n for (let k = i + 1; k < j; k++) {\n const f = (s[k] - s[i]) / (s[j] - s[i]);\n out[k] = {\n ...run[k],\n x: p.x + (q.x - p.x) * f,\n y: p.y + (q.y - p.y) * f\n };\n }\n a = to;\n }\n return out;\n}\nfunction rounded(run, half) {\n const n = run.length;\n const s = arcOf(run);\n const end = s[n - 1];\n const sumW = new Float64Array(n + 1);\n const sumX = new Float64Array(n + 1);\n const sumY = new Float64Array(n + 1);\n for (let i = 0; i < n; i++) {\n const p = run[i];\n const w = (s[Math.min(i + 1, n - 1)] - s[Math.max(i - 1, 0)]) / 2;\n sumW[i + 1] = sumW[i] + w;\n sumX[i + 1] = sumX[i] + w * p.x;\n sumY[i + 1] = sumY[i] + w * p.y;\n }\n const out = new Array(n);\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n const p = run[i];\n const reach = Math.min(half, s[i], end - s[i]);\n const from = s[i] - reach;\n const to = s[i] + reach + 1e-9 * (1 + end);\n while (lo < n && s[lo] < from) {\n lo++;\n }\n while (hi < n && s[hi] < to) {\n hi++;\n }\n const w = sumW[hi] - sumW[lo];\n out[i] = w > 0 ? { x: (sumX[hi] - sumX[lo]) / w, y: (sumY[hi] - sumY[lo]) / w } : { x: p.x, y: p.y };\n }\n return out;\n}\nfunction tightPoints(line, radius) {\n const n = line.length;\n const s = arcOf(line);\n const end = s[n - 1];\n const tight = new Uint8Array(n);\n const along = (j, at) => {\n const a = line[j];\n const b = line[j + 1];\n if (!b) {\n return a;\n }\n const span = s[j + 1] - s[j];\n const f = span > 0 ? (at - s[j]) / span : 0;\n return { x: a.x + (b.x - a.x) * f, y: a.y + (b.y - a.y) * f };\n };\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n if (s[i] < radius || end - s[i] < radius) {\n continue;\n }\n while (lo + 1 < n && s[lo + 1] <= s[i] - radius) {\n lo++;\n }\n while (hi + 1 < n && s[hi + 1] <= s[i] + radius) {\n hi++;\n }\n const p = line[i];\n const a = along(lo, s[i] - radius);\n const b = along(hi, s[i] + radius);\n const twice = Math.abs(\n (b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x)\n );\n tight[i] = twice > 0 && gapOf(a, b) * gapOf(a, p) * gapOf(p, b) / (2 * twice) < radius ? 1 : 0;\n }\n return { tight, s };\n}\nfunction loosened(line, radius) {\n const out = line.slice();\n const { tight, s } = tightPoints(out, radius);\n let windows = ownedWindows(\n s,\n Array.from(tight, (t) => t > 0),\n 3 * radius\n );\n for (let pass = 0; pass < 8 && windows.length; pass++) {\n windows = windows.filter(([lo, hi]) => {\n const part = out.slice(lo, hi + 1);\n const local = tightPoints(part, radius);\n if (!local.tight.includes(1)) {\n return false;\n }\n const weight = windowMean(local.s, local.tight, radius);\n const smoother = rounded(part, radius);\n for (let k = 0; k < part.length; k++) {\n const w = Math.min(1, 3 * weight[k]);\n if (w > 0) {\n const p = part[k];\n const q = smoother[k];\n out[lo + k] = { x: p.x + (q.x - p.x) * w, y: p.y + (q.y - p.y) * w };\n }\n }\n return true;\n });\n }\n return out;\n}\nfunction runSigns(s, own, canonical, forward, settle, half) {\n const n = own.length;\n const agreement = new Float64Array(n);\n let hi = 0;\n let lo = 0;\n let sum2 = 0;\n let decided = 0;\n let pending = 0;\n for (let i = 0; i < n; i++) {\n while (hi < n && s[hi] - s[i] <= half) {\n const theirs = canonical(hi);\n const mine = own[hi];\n agreement[hi] = theirs && mine ? theirs.nx * mine.nx + theirs.ny * mine.ny : 0;\n sum2 += agreement[hi];\n hi++;\n }\n while (s[i] - s[lo] > half) {\n sum2 -= agreement[lo++];\n }\n if (Math.abs(sum2) > 1e-9) {\n decided = sum2 < 0 ? -1 : 1;\n }\n if (!decided) {\n continue;\n }\n for (; pending <= i; pending++) {\n settle(pending, decided);\n }\n }\n if (pending < n) {\n let along = 0;\n for (let k = 0; k < n; k++) {\n along += forward(k) ? 1 : -1;\n }\n for (; pending < n; pending++) {\n settle(pending, along < 0 ? -1 : 1);\n }\n }\n}\nfunction laneLines(runs, yToX, reach, band, smooth = true) {\n const turn = Math.max(reach, 2 * band);\n const curl = Math.PI * band;\n const context = smooth ? curl + 3 * band + turn / 2 : turn / 2;\n const frames = /* @__PURE__ */ new Map();\n const firsts = /* @__PURE__ */ new Map();\n const arcs = [];\n const stepFrames = [];\n const newFrame = (length) => ({\n normals: new Array(length),\n shifts: smooth ? new Array(length) : []\n });\n const place = (id, walk, visit, f) => {\n let byWalk = frames.get(id);\n if (!byWalk) {\n byWalk = [];\n frames.set(id, byWalk);\n }\n ;\n (byWalk[walk] ??= [])[visit] = f;\n };\n runs.forEach((run, r) => {\n const { walk, ids, visits, owned, starts, xs, ys, stepOf } = run;\n const steps = ids.length;\n const n = xs.length;\n const own = new Array(steps);\n for (let i = 0; i < steps; i++) {\n if (owned[i]) {\n own[i] = newFrame(starts[i + 1] - starts[i]);\n firsts.set(ids[i], { run: r, step: i, frame: own[i] });\n place(ids[i], walk, visits[i], own[i]);\n }\n }\n const raw = new Float64Array(n);\n for (let p = 1; p < n; p++) {\n const dx = xs[p] - xs[p - 1];\n const dy = ys[p] - ys[p - 1];\n raw[p] = raw[p - 1] + Math.sqrt(dx * dx + dy * dy);\n }\n const end = raw[n - 1];\n const firstRun = new Int32Array(steps).fill(-1);\n const firstStep = new Int32Array(steps);\n const firstFrame = new Array(steps);\n for (let i = 0; i < steps; i++) {\n const first = owned[i] ? void 0 : firsts.get(ids[i]);\n if (first) {\n firstRun[i] = first.run;\n firstStep[i] = first.step;\n firstFrame[i] = first.frame;\n }\n }\n const plus = new Int32Array(steps);\n const minus = new Int32Array(steps);\n for (let i = 0; i + 1 < steps; i++) {\n const same = firstRun[i] >= 0 && firstRun[i + 1] === firstRun[i];\n const d = same ? firstStep[i + 1] - firstStep[i] : 0;\n plus[i + 1] = plus[i] + (d === 1 ? 1 : 0);\n minus[i + 1] = minus[i] + (d === -1 ? 1 : 0);\n }\n const shared = new Array(steps);\n let reachFrom = 0;\n let reachTo = 0;\n for (let i = 0; i < steps; i++) {\n if (!smooth) {\n shared[i] = !owned[i];\n continue;\n }\n const from = raw[starts[i]] - context;\n const to = raw[starts[i + 1] - 1] + context;\n while (raw[reachFrom] < from) {\n reachFrom++;\n }\n while (reachTo + 1 < n && raw[reachTo + 1] <= to) {\n reachTo++;\n }\n const lo = stepOf[Math.max(0, reachFrom - 1)];\n const hi = stepOf[Math.min(n - 1, reachTo + 1)];\n const span = hi - lo;\n const forward = plus[hi] - plus[lo];\n const backward = minus[hi] - minus[lo];\n shared[i] = !owned[i] && from >= 0 && to <= end && span > 0 && (forward === span || backward === span);\n }\n for (let i = 0; i < steps; i++) {\n if (owned[i]) {\n continue;\n }\n const first = firstFrame[i];\n own[i] = !smooth && shared[i] ? first : shared[i] ? { normals: first.normals, shifts: first.shifts } : newFrame(first.normals.length);\n place(ids[i], walk, visits[i], own[i]);\n }\n stepFrames.push(own);\n const apart = new Array(n);\n for (let p = 0; p < n; p++) {\n apart[p] = !shared[stepOf[p]];\n }\n for (const [from, to] of ownedWindows(raw, apart, context)) {\n const points = [];\n for (let p = from; p <= to; p++) {\n points.push({ x: xs[p], y: ys[p] });\n }\n const line = smooth ? loosened(\n rounded(cutCurls(points, band / 2, curl), band / 2),\n band / 2\n ) : points;\n const normals = smoothedNormals(line, turn);\n runSigns(\n arcOf(line),\n normals,\n (k) => {\n const i = stepOf[from + k];\n return (owned[i] ? own[i] : firstFrame[i])?.normals[pointIndex(run, from + k)];\n },\n (k) => run.forward[stepOf[from + k]],\n (k, sign) => {\n const p = from + k;\n const i = stepOf[p];\n if (shared[i]) {\n return;\n }\n const index = pointIndex(run, p);\n const m = normals[k];\n own[i].normals[index] = m && (sign > 0 ? m : { nx: -m.nx, ny: -m.ny });\n if (smooth) {\n own[i].shifts[index] = {\n dx: line[k].x - points[k].x,\n dy: (line[k].y - points[k].y) / yToX\n };\n }\n },\n turn\n );\n }\n if (!smooth) {\n arcs.push(raw);\n return;\n }\n const s = new Float64Array(n);\n let px = 0;\n let py = 0;\n for (let p = 0; p < n; p++) {\n const shift = own[stepOf[p]].shifts[pointIndex(run, p)];\n const x = xs[p] + (shift?.dx ?? 0);\n const y = ys[p] + (shift?.dy ?? 0) * yToX;\n s[p] = p ? s[p - 1] + Math.sqrt((x - px) ** 2 + (y - py) ** 2) : 0;\n px = x;\n py = y;\n }\n arcs.push(s);\n });\n return { frames, arcs, stepFrames };\n}\nfunction windowed(s, v, half, sign) {\n const out = new Array(v.length);\n const deque = [];\n let head = 0;\n let next = 0;\n for (let i = 0; i < v.length; i++) {\n while (next < v.length && s[next] - s[i] <= half) {\n while (deque.length > head && sign * v[deque.at(-1)] <= sign * v[next]) {\n deque.pop();\n }\n deque.push(next++);\n }\n while (s[i] - s[deque[head]] > half) {\n head++;\n }\n out[i] = v[deque[head]];\n }\n return out;\n}\nfunction windowMean(s, v, half, counted = () => true) {\n const n = v.length;\n const sumW = new Float64Array(n + 1);\n const sumWV = new Float64Array(n + 1);\n for (let i = 0; i < n; i++) {\n const w = !counted(v[i]) ? 0 : n > 1 ? (s[Math.min(i + 1, n - 1)] - s[Math.max(i - 1, 0)]) / 2 : 1;\n sumW[i + 1] = sumW[i] + w;\n sumWV[i + 1] = sumWV[i] + w * v[i];\n }\n const out = new Float64Array(n);\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n while (s[i] - s[lo] > half) {\n lo++;\n }\n while (hi < n && s[hi] - s[i] <= half) {\n hi++;\n }\n const w = sumW[hi] - sumW[lo];\n out[i] = w > 0 ? (sumWV[hi] - sumWV[lo]) / w : v[i];\n }\n return out;\n}\nvar ONE_THREAD = [0];\nfunction repeats(passes) {\n for (const p of passes.values()) {\n if (p > 1) {\n return true;\n }\n }\n return false;\n}\nfunction walkThreads(route, passes, nodePositions, yToX, reach) {\n if (!repeats(passes)) {\n return {\n span: passes,\n nodeThreads: /* @__PURE__ */ new Map(),\n threadPasses: /* @__PURE__ */ new Map(),\n threadAt: /* @__PURE__ */ new Map(),\n linkThreads: /* @__PURE__ */ new Map()\n };\n }\n const index = /* @__PURE__ */ new Map();\n const ids = [];\n const widths = [];\n const visits = [];\n const steps = [];\n const stepVisits = [];\n const stepWants = [];\n const stepGlides = [];\n for (const piece of route) {\n const points = [];\n const nodes = [];\n for (const id of piece) {\n let k = index.get(id);\n if (k === void 0) {\n k = ids.length;\n index.set(id, k);\n ids.push(id);\n widths.push(0);\n visits.push(0);\n }\n nodes.push(k);\n const segments = nodePositions[id];\n const mid = segments?.[Math.floor(segments.length / 2)];\n points.push(\n mid ? { x: mid.x, y: mid.y * yToX } : points.at(-1) ?? { x: 0, y: 0 }\n );\n }\n const s = arcOf(points);\n const p = piece.map((id) => passes.get(id) ?? 1);\n const most = windowed(s, p, reach / 2, 1);\n const copy = nodes.map((k) => ++visits[k]);\n const n = piece.length;\n const before = new Int32Array(n);\n let last = -1;\n for (let i = 0; i < n; i++) {\n last = p[i] === most[i] ? i : last;\n before[i] = last;\n }\n const after = new Int32Array(n);\n last = -1;\n for (let i = n - 1; i >= 0; i--) {\n last = p[i] === most[i] ? i : last;\n after[i] = last;\n }\n const wants = new Array(n);\n const glides = new Array(n).fill(NaN);\n for (let i = 0; i < n; i++) {\n const b = before[i];\n const a = after[i];\n const nearest = b < 0 ? a : a < 0 ? b : s[i] - s[b] <= s[a] - s[i] ? b : a;\n const want = (k) => Math.min(copy[k], most[i]) - 1;\n wants[i] = want(nearest);\n if (p[i] === 1 && b >= 0 && a >= 0 && want(a) !== want(b)) {\n const f = (s[i] - s[b]) / (s[a] - s[b] || 1);\n glides[i] = want(b) + (want(a) - want(b)) * f;\n }\n widths[nodes[i]] = Math.max(widths[nodes[i]], most[i]);\n }\n steps.push(nodes);\n stepVisits.push(copy);\n stepWants.push(wants);\n stepGlides.push(glides);\n }\n const taken = [];\n const threadOf = [];\n const free = (k, want) => {\n const width = widths[k];\n const own = taken[k] ??= /* @__PURE__ */ new Set();\n for (let d = 0; d < width; d++) {\n for (const c of [want - d, want + d]) {\n if (c >= 0 && c < width && !own.has(c)) {\n return c;\n }\n }\n }\n return want;\n };\n const glideOf = [];\n steps.forEach((nodes, piece) => {\n nodes.forEach((k, i) => {\n if (widths[k] > 1) {\n const glide = stepGlides[piece][i];\n const t = free(\n k,\n Number.isNaN(glide) ? stepWants[piece][i] : Math.round(glide)\n );\n taken[k].add(t);\n (threadOf[k] ??= [])[stepVisits[piece][i]] = t;\n if (!Number.isNaN(glide)) {\n ;\n (glideOf[k] ??= [])[t] = glide;\n }\n }\n });\n });\n const span = /* @__PURE__ */ new Map();\n const nodeThreads = /* @__PURE__ */ new Map();\n const threadPasses = /* @__PURE__ */ new Map();\n const threadAt = /* @__PURE__ */ new Map();\n ids.forEach((id, k) => {\n if (glideOf[k]) {\n threadAt.set(id, glideOf[k]);\n }\n span.set(id, widths[k]);\n nodeThreads.set(\n id,\n taken[k] ? [...taken[k]].sort((a, b) => a - b) : ONE_THREAD\n );\n const passOf = [];\n threadOf[k]?.forEach((thread, visit) => {\n passOf[thread] = visit - 1;\n });\n threadPasses.set(id, passOf);\n });\n const linkThreads = /* @__PURE__ */ new Map();\n steps.forEach((nodes, piece) => {\n const visit = stepVisits[piece];\n for (let i = 1; i < nodes.length; i++) {\n const from = nodes[i - 1];\n const to = nodes[i];\n const pair = [\n threadOf[from]?.[visit[i - 1]] ?? 0,\n threadOf[to]?.[visit[i]] ?? 0\n ];\n let ahead = linkThreads.get(ids[from]);\n if (!ahead) {\n ahead = /* @__PURE__ */ new Map();\n linkThreads.set(ids[from], ahead);\n }\n const list = ahead.get(ids[to]);\n if (!list) {\n ahead.set(ids[to], [pair]);\n } else if (!list.some(([a, b]) => a === pair[0] && b === pair[1])) {\n list.push(pair);\n }\n }\n });\n return { span, nodeThreads, threadPasses, threadAt, linkThreads };\n}\nfunction bandSpans(runs, arcs, spans, { reach, taper }) {\n const out = /* @__PURE__ */ new Map();\n runs.forEach((run, r) => {\n const s = arcs[r];\n const along = run.ids.map((_, i) => {\n const length = run.starts[i + 1] - run.starts[i];\n const middle = Math.floor(length / 2);\n return s[run.starts[i] + (run.forward[i] ? middle : length - 1 - middle)];\n });\n for (const [lo, hi] of ownedWindows(\n along,\n run.owned,\n reach / 2 + taper / 2\n )) {\n const at = along.slice(lo, hi + 1);\n const ids = run.ids.slice(lo, hi + 1);\n const eased = spans.map((own) => {\n const raw = ids.map((id) => own.get(id) ?? 0);\n return raw.every((v) => v === raw[0]) ? { slot: raw, held: raw } : {\n slot: windowMean(at, windowed(at, raw, reach / 2, 1), taper / 2),\n held: windowMean(at, raw, taper / 2, (v) => v > 0)\n };\n });\n ids.forEach((id, i) => {\n if (run.owned[lo + i]) {\n out.set(id, {\n slot: eased.map((e) => e.slot[i]),\n held: eased.map((e) => e.held[i])\n });\n }\n });\n }\n });\n return out;\n}\nfunction easeOffsets(runs, stepFrames, arcs, spans, passes, threads, half) {\n const plain = slotCentres(passes, passes);\n const byNode = /* @__PURE__ */ new Map();\n const centresAt = (id) => {\n let centres = byNode.get(id);\n if (!centres) {\n const own = spans.get(id);\n centres = own ? slotCentres(own.slot, passes, own.held) : plain;\n byNode.set(id, centres);\n }\n return centres;\n };\n runs.forEach((run, r) => {\n const { walk, ids, visits, starts } = run;\n const { threadPasses, threadAt } = threads[walk];\n const raw = new Float64Array(run.xs.length);\n ids.forEach((id, i) => {\n const thread = Math.max(0, threadPasses.get(id)?.indexOf(visits[i]) ?? 0);\n const place = threadAt.get(id)?.[thread] ?? thread;\n raw.fill(\n centresAt(id)[walk] + place * THREAD_PITCH_PX,\n starts[i],\n starts[i + 1]\n );\n });\n const eased = windowMean(arcs[r], raw, half);\n stepFrames[r].forEach((frame, i) => {\n const from = starts[i];\n const to = starts[i + 1];\n let constant = true;\n for (let p = from + 1; constant && p < to; p++) {\n constant = Math.abs(eased[p] - eased[from]) < 1e-9;\n }\n if (constant) {\n frame.offset = eased[from];\n return;\n }\n const offsets = new Array(to - from);\n for (let p = from; p < to; p++) {\n offsets[pointIndex(run, p)] = eased[p];\n }\n frame.offsets = offsets;\n });\n });\n}\nfunction liftLanes(walks, nodePositions, yToX, worldPerScreenPx, steps = walkSteps(\n walks.map((w) => w.route),\n nodePositions\n)) {\n const threaded = threadsPasses(walks);\n const passes = walks.map((w) => w.mostPasses);\n const reach = THREAD_REACH_PX * worldPerScreenPx;\n const runs = laneRuns(steps, yToX, LANE_SMOOTHING_PX * worldPerScreenPx);\n const band = bandWidthPx(passes) * (threaded ? bandScale(passes) : 1) * worldPerScreenPx;\n const lines = laneLines(\n runs,\n yToX,\n LANE_SMOOTHING_PX * worldPerScreenPx,\n band,\n threaded\n );\n const threads = threaded ? walks.map((w) => walkThreads(w.route, w.passes, nodePositions, yToX, reach)) : void 0;\n const spans = threads ? bandSpans(\n runs,\n lines.arcs,\n threads.map((t) => t.span),\n { reach, taper: THREAD_TAPER_PX * worldPerScreenPx }\n ) : void 0;\n if (spans && threads) {\n easeOffsets(\n runs,\n lines.stepFrames,\n lines.arcs,\n spans,\n passes,\n threads,\n THREAD_TAPER_PX / 2 * worldPerScreenPx\n );\n }\n const furthestShift = { dx: 0, dy: 0 };\n const seenShifts = /* @__PURE__ */ new Set();\n for (const byWalk of lines.frames.values()) {\n for (const { shifts } of byWalk.flat()) {\n if (seenShifts.has(shifts)) {\n continue;\n }\n seenShifts.add(shifts);\n for (const shift of shifts) {\n furthestShift.dx = Math.max(furthestShift.dx, Math.abs(shift?.dx ?? 0));\n furthestShift.dy = Math.max(furthestShift.dy, Math.abs(shift?.dy ?? 0));\n }\n }\n }\n return { lines, threads, spans, furthestShift };\n}\n\nexport {\n THREAD_PX,\n THREAD_GAP_PX,\n SLOT_GAP_PX,\n LANE_SMOOTHING_PX,\n THREAD_REACH_PX,\n THREAD_TAPER_PX,\n MAX_BAND_PX,\n PASSES_KEY,\n threadsPasses,\n THREAD_PITCH_PX,\n slotCentres,\n bandWidthPx,\n bandScale,\n passesKey,\n laneSlideAt,\n walkSteps,\n laneRuns,\n laneLines,\n walkThreads,\n bandSpans,\n liftLanes\n};\n", "// src/renderer/colorBits.ts\nfunction packAbgr(r, g, b, a) {\n return (a << 24 | b << 16 | g << 8 | r) >>> 0;\n}\nfunction abgrRed(c) {\n return c & 255;\n}\nfunction abgrGreen(c) {\n return c >>> 8 & 255;\n}\nfunction abgrBlue(c) {\n return c >>> 16 & 255;\n}\nfunction abgrAlpha(c) {\n return c >>> 24 & 255;\n}\nfunction abgrToCssRgba(c) {\n return `rgba(${abgrRed(c)},${abgrGreen(c)},${abgrBlue(c)},${abgrAlpha(c) / 255})`;\n}\nfunction normalizedRgbToCssRgba(c, alpha) {\n return `rgba(${Math.round(c[0] * 255)},${Math.round(c[1] * 255)},${Math.round(c[2] * 255)},${alpha})`;\n}\nfunction fadeAbgr(c, alpha) {\n return packAbgr(\n abgrRed(c),\n abgrGreen(c),\n abgrBlue(c),\n Math.round(abgrAlpha(c) * alpha)\n );\n}\nfunction brightenAbgr(c, factor) {\n const t = Math.max(0, 1 - 1 / factor);\n const lift = (v) => Math.round(v + (255 - v) * t);\n return packAbgr(\n lift(abgrRed(c)),\n lift(abgrGreen(c)),\n lift(abgrBlue(c)),\n abgrAlpha(c)\n );\n}\n\nexport {\n packAbgr,\n abgrRed,\n abgrGreen,\n abgrBlue,\n abgrAlpha,\n abgrToCssRgba,\n normalizedRgbToCssRgba,\n fadeAbgr,\n brightenAbgr\n};\n", "// src/referenceRampCss.ts\nvar REFERENCE_RAMP_MAX_HUE = 300;\nvar REFERENCE_RAMP_SATURATION = 0.7;\nvar REFERENCE_RAMP_LIGHTNESS = 0.5;\nfunction rampHueCss(hue) {\n return `hsl(${hue}, ${REFERENCE_RAMP_SATURATION * 100}%, ${REFERENCE_RAMP_LIGHTNESS * 100}%)`;\n}\nfunction rampHueAt(frac) {\n return Math.max(0, Math.min(1, frac)) * REFERENCE_RAMP_MAX_HUE;\n}\nfunction rampHue(bp, domain) {\n return rampHueAt((bp - domain.start) / (domain.end - domain.start));\n}\nvar HUE_STOP_DEG = 30;\nfunction rampStops({ start, bp, reversed }, domain) {\n const low = rampHue(start, domain);\n const high = rampHue(start + bp, domain);\n if (high - low < 1) {\n return [(low + high) / 2];\n }\n const n = Math.ceil((high - low) / HUE_STOP_DEG);\n return Array.from(\n { length: n + 1 },\n (_, i) => rampHue(start + bp * (reversed ? n - i : i) / n, domain)\n );\n}\nvar RAMP_GRADIENT_STOPS = Array.from({ length: 7 }, (_, i) => ({\n offset: i / 6,\n color: rampHueCss(i / 6 * REFERENCE_RAMP_MAX_HUE)\n}));\nvar RAMP_GRADIENT_CSS = `linear-gradient(to right, ${RAMP_GRADIENT_STOPS.map(\n (s) => `${s.color} ${s.offset * 100}%`\n).join(\", \")})`;\n\nexport {\n REFERENCE_RAMP_MAX_HUE,\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS,\n rampHueCss,\n rampHueAt,\n rampHue,\n rampStops,\n RAMP_GRADIENT_STOPS,\n RAMP_GRADIENT_CSS\n};\n", "import {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n edgeCurvesOf\n} from \"./chunk-ALGYCMMH.js\";\n\n// src/util/edgeCurves.ts\nvar cache = weakMemo();\nfunction baseEdgeCurves(nodePositions, graph, axis, deletions, version, routes, stranded = false) {\n return cache(\n nodePositions,\n [graph, axis.scaleX, axis.scaleY, deletions, routes, stranded, version],\n () => {\n const curves = /* @__PURE__ */ new Map();\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const bypassed = deletions?.get(ei);\n const edgeCurves = edgeCurvesOf(\n nodePositions,\n graph.edges[ei],\n axis,\n bypassed,\n bypassed && routes?.[ei],\n stranded\n );\n if (edgeCurves) {\n curves.set(ei, edgeCurves);\n }\n }\n return curves;\n }\n );\n}\n\nexport {\n baseEdgeCurves\n};\n", "import {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/referenceSpan.ts\nvar MAX_BACKBONE_HOPS = 4;\nfunction buildNeighbors(graph) {\n const neighbors = /* @__PURE__ */ new Map();\n for (const edge of graph.edges) {\n pushTo(neighbors, edge.from, edge.to);\n pushTo(neighbors, edge.to, edge.from);\n }\n return neighbors;\n}\nfunction flankingSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const seen = /* @__PURE__ */ new Set([nodeId]);\n let frontier = [nodeId];\n let minEnd = Infinity;\n let maxStart = -Infinity;\n for (let hop = 0; hop < MAX_BACKBONE_HOPS && frontier.length > 0; hop++) {\n const next = [];\n for (const id of frontier) {\n const adjacent = neighbors.get(id);\n if (adjacent) {\n for (const neighborId of adjacent) {\n if (!seen.has(neighborId)) {\n seen.add(neighborId);\n const neighbor = nodeById.get(neighborId);\n if (neighbor && isBackbone(neighbor)) {\n minEnd = Math.min(minEnd, neighbor.stable.start + neighbor.length);\n maxStart = Math.max(maxStart, neighbor.stable.start);\n } else {\n next.push(neighborId);\n }\n }\n }\n }\n }\n frontier = next;\n }\n return minEnd === Infinity ? void 0 : {\n start: Math.min(minEnd, maxStart),\n end: Math.max(minEnd, maxStart)\n };\n}\nfunction nodeReferenceSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const node = nodeById.get(nodeId);\n return node === void 0 ? void 0 : isBackbone(node) ? { start: node.stable.start, end: node.stable.start + node.length } : flankingSpan({ nodeId, nodeById, neighbors });\n}\nfunction referenceMidpoints(graph) {\n const nodeById = new Map(graph.nodes.map((node) => [node.id, node]));\n const neighbors = buildNeighbors(graph);\n const midpoints = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const span = nodeReferenceSpan({ nodeId: node.id, nodeById, neighbors });\n if (span) {\n midpoints.set(node.id, (span.start + span.end) / 2);\n }\n }\n return midpoints;\n}\nfunction referencePositions(graph) {\n const positions = referenceMidpoints(graph);\n const neighbors = buildNeighbors(graph);\n let frontier = [...positions.keys()];\n while (frontier.length > 0) {\n const next = [];\n for (const id of frontier) {\n for (const neighborId of neighbors.get(id) ?? []) {\n if (!positions.has(neighborId)) {\n positions.set(neighborId, positions.get(id));\n next.push(neighborId);\n }\n }\n }\n frontier = next;\n }\n return positions;\n}\n\nexport {\n buildNeighbors,\n nodeReferenceSpan,\n referenceMidpoints,\n referencePositions\n};\n", "import {\n THREAD_PITCH_PX,\n THREAD_PX,\n bandScale,\n bandWidthPx,\n liftLanes,\n slotCentres,\n threadsPasses,\n walkSteps\n} from \"./chunk-YUIKEUKY.js\";\nimport {\n abgrToCssRgba,\n fadeAbgr,\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n REFERENCE_RAMP_LIGHTNESS,\n REFERENCE_RAMP_SATURATION,\n rampHueAt\n} from \"./chunk-GQZVR5DW.js\";\nimport {\n baseEdgeCurves\n} from \"./chunk-URPU4XCM.js\";\nimport {\n PATH_LIGHTNESS,\n PATH_SATURATION,\n nameHue,\n pathHueAt\n} from \"./chunk-HI5GLE7C.js\";\nimport {\n nodeWidthPx,\n walkLaneWidthPx,\n widthNorm\n} from \"./chunk-XWH4LB56.js\";\nimport {\n referenceMidpoints\n} from \"./chunk-L4DBSRA2.js\";\nimport {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n dashSpans,\n pathRibbonOffsets,\n polylinePx,\n slideCurves,\n strandSides,\n translateCurves,\n yToXOf\n} from \"./chunk-JJV2GT2Z.js\";\nimport {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\nimport {\n busiestEdge,\n edgeWidthFactor\n} from \"./chunk-DAEEMZ74.js\";\n\n// src/renderer/GeometryBuilder.ts\nvar EDGE_DEFAULT_COLOR = packAbgr(119, 119, 119, 217);\nvar EDGE_PATH_FALLBACK_COLOR = packAbgr(136, 136, 136, 217);\nvar EDGE_DELETION_COLOR = packAbgr(24, 24, 28, 240);\nvar DELETION_THICKNESS_FACTOR = 2.2;\nvar LIFT_BACKDROP_COLOR = packAbgr(160, 160, 160, 255);\nvar FADED_ALPHA = 0.18;\nvar MOVED_ALPHA = 0.45;\nvar LIFT_BACKDROP_CSS = abgrToCssRgba(\n fadeAbgr(LIFT_BACKDROP_COLOR, FADED_ALPHA)\n);\nvar DELETION_DASH_PX = 11;\nvar MIN_PATH_STRIPE_PX = 1.2;\nvar MIN_SCALE_FOR_OFFSET = 1e-6;\nvar ARROW_LENGTH_BASE_PX = 7;\nvar ARROW_LENGTH_PER_EDGE_PX = 3;\nvar ARROW_HALF_WIDTH_BASE_PX = 3;\nvar ARROW_HALF_WIDTH_PER_EDGE_PX = 1.5;\nvar MIN_LINK_HEADS = 3;\nvar MIN_ARROW_FIT = 0.5;\nvar MIN_ARROW_SCALE = 0.45;\nvar ARROW_CURVE_STEPS = 12;\nvar ABUTTING_PX = 1e-6;\nvar walkX = new Float64Array(64);\nvar walkY = new Float64Array(64);\nvar walkPx = new Float64Array(64);\nfunction backFromEnd(curves, scale, yToX, untilPx) {\n const most = curves.length * ARROW_CURVE_STEPS + 1;\n if (walkX.length < most) {\n walkX = new Float64Array(most);\n walkY = new Float64Array(most);\n walkPx = new Float64Array(most);\n }\n const last = curves[curves.length - 1];\n walkX[0] = last.x1;\n walkY[0] = last.y1;\n walkPx[0] = 0;\n let n = 1;\n let px = 0;\n for (let ci = curves.length - 1; ci >= 0 && px < untilPx; ci--) {\n const c = curves[ci];\n for (let k = 1; k <= ARROW_CURVE_STEPS && px < untilPx; k++) {\n const t = 1 - (k / ARROW_CURVE_STEPS) ** 2;\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 const x = a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1;\n const y = a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1;\n px += Math.hypot(x - walkX[n - 1], (y - walkY[n - 1]) * yToX) * scale;\n walkX[n] = x;\n walkY[n] = y;\n walkPx[n] = px;\n n++;\n }\n }\n return n;\n}\nfunction walkPointAt(n, px) {\n let i = 1;\n while (i < n - 1 && walkPx[i] < px) {\n i++;\n }\n const from = walkPx[i - 1];\n const to = walkPx[i];\n const f = to > from ? Math.min(1, Math.max(0, (px - from) / (to - from))) : 0;\n return {\n x: walkX[i - 1] + (walkX[i] - walkX[i - 1]) * f,\n y: walkY[i - 1] + (walkY[i] - walkY[i - 1]) * f\n };\n}\nfunction arrowheadFor({\n curves,\n edgeHalfWidth,\n nodeHalfWidth,\n scale,\n yToX,\n color,\n fromSegments,\n toSegments\n}) {\n const length = ARROW_LENGTH_BASE_PX + ARROW_LENGTH_PER_EDGE_PX * edgeHalfWidth;\n const n = backFromEnd(\n curves,\n scale,\n yToX,\n nodeHalfWidth + MIN_LINK_HEADS * length\n );\n const lengthPx = walkPx[n - 1];\n const abutting = lengthPx < ABUTTING_PX;\n const inset = Math.min(nodeHalfWidth, lengthPx);\n const fit = abutting ? Math.min(1, polylinePx(fromSegments, scale, scale * yToX) / length) : 1;\n if (abutting ? fit < MIN_ARROW_FIT : lengthPx < MIN_LINK_HEADS * length) {\n return void 0;\n }\n const tip = walkPointAt(n, inset);\n const base = walkPointAt(n, inset + length * fit);\n const dx = tip.x - base.x;\n const dy = (tip.y - base.y) * yToX;\n const last = curves[curves.length - 1];\n return {\n x: tip.x,\n y: tip.y,\n angle: Math.hypot(dx, dy) > 0 ? Math.atan2(dy, dx) : endTangent(last, yToX, intoDirection(last, toSegments)),\n length: length * fit,\n halfWidth: (ARROW_HALF_WIDTH_BASE_PX + ARROW_HALF_WIDTH_PER_EDGE_PX * edgeHalfWidth) * fit,\n color\n };\n}\nvar FIRST_THREADS = [[0, 0]];\nvar ONE_PASS = [0];\nvar NO_SHIFT = { dx: 0, dy: 0 };\nfunction nearerStart(at, segments, yToX) {\n const gap = (p) => Math.hypot(p.x - at.x, (p.y - at.y) * yToX);\n return gap(segments[0]) < gap(segments.at(-1));\n}\nfunction leavesStart(edge, segments, first, stranded, yToX) {\n return stranded ? strandSides(edge).from === \"start\" : nearerStart({ x: first.x0, y: first.y0 }, segments, yToX);\n}\nfunction intoDirection(last, toSegments) {\n if (toSegments.length < 2) {\n return void 0;\n }\n const first = toSegments[0];\n const final = toSegments[toSegments.length - 1];\n const atStart = Math.hypot(last.x1 - first.x, last.y1 - first.y) <= Math.hypot(last.x1 - final.x, last.y1 - final.y);\n return atStart ? { from: first, to: toSegments[1] } : { from: final, to: toSegments[toSegments.length - 2] };\n}\nfunction normal(a, b) {\n if (!a || !b) {\n return void 0;\n }\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len = Math.hypot(dx, dy);\n return len > 0 ? { nx: -dy / len, ny: dx / len } : void 0;\n}\nvar MITRE_LIMIT = 0.1;\nvar LONGEST_NORMAL = 1 / Math.sqrt(MITRE_LIMIT);\nfunction pointNormalsOf(rawPoints, yToX = 1) {\n const points = yToX === 1 ? rawPoints : rawPoints.map((p) => ({ x: p.x, y: p.y * yToX }));\n return points.map((p, i) => {\n const before = normal(points[i - 1], p);\n const after = normal(p, points[i + 1]);\n if (before && after) {\n const nx = (before.nx + after.nx) / 2;\n const ny = (before.ny + after.ny) / 2;\n const dot = before.nx * nx + before.ny * ny;\n return dot > MITRE_LIMIT ? { nx: nx / dot, ny: ny / dot } : { nx, ny };\n }\n return before ?? after ?? { nx: 0, ny: 0 };\n });\n}\nfunction offsetPolyline(points, normals, distance, yToX = 1) {\n const out = new Array(points.length);\n for (let i = 0; i < points.length; i++) {\n const d = typeof distance === \"number\" ? distance : distance[i];\n out[i] = {\n x: points[i].x + normals[i].nx * d,\n y: points[i].y + normals[i].ny * d / yToX\n };\n }\n return out;\n}\nfunction hslToRgb(h, s, l) {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n return [r + m, g + m, b + m];\n}\nfunction packHsl(h, s, l, a = 1) {\n const [r, g, b] = hslToRgb(h, s, l);\n return packAbgr(\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n Math.round(a * 255)\n );\n}\nvar DEPTH_GRADIENT = [\n [68, 1, 84],\n [59, 82, 139],\n [33, 145, 140],\n [94, 201, 98],\n [253, 231, 37]\n];\nvar STABLE_RANK_GRADIENT = [\n [237, 137, 44],\n [158, 42, 122]\n];\nvar NODE_LENGTH_GRADIENT = [\n [220, 50, 50],\n [50, 120, 220]\n];\nfunction sampleGradient(stops, t) {\n const pos = Math.max(0, Math.min(1, t)) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(pos));\n const f = pos - i;\n const a = stops[i];\n const b = stops[i + 1];\n return packAbgr(\n Math.round(a[0] + (b[0] - a[0]) * f),\n Math.round(a[1] + (b[1] - a[1]) * f),\n Math.round(a[2] + (b[2] - a[2]) * f),\n 255\n );\n}\nfunction hashColor(str, alpha) {\n return packHsl(nameHue(str), PATH_SATURATION, PATH_LIGHTNESS, alpha);\n}\nvar REFERENCE_RAMP_ALT_RGB = [60, 65, 72];\nvar REFERENCE_RAMP_ALT_COLOR = packAbgr(...REFERENCE_RAMP_ALT_RGB, 255);\nvar REFERENCE_RAMP_ALT_CSS = `rgb(${REFERENCE_RAMP_ALT_RGB.join(\", \")})`;\nfunction rampFraction(node, ramp) {\n const mid = ramp.midpoints.get(node.id);\n return isBackbone(node) && mid !== void 0 ? (mid - ramp.start) / ramp.span : void 0;\n}\nfunction computeReferenceRamp(graph, domain) {\n const midpoints = referenceMidpoints(graph);\n if (domain && domain.end > domain.start) {\n return {\n start: domain.start,\n span: domain.end - domain.start,\n midpoints\n };\n }\n let min = Infinity;\n let max = -Infinity;\n for (const mid of midpoints.values()) {\n min = Math.min(min, mid);\n max = Math.max(max, mid);\n }\n return {\n start: min === Infinity ? 0 : min,\n span: max > min ? max - min : 1,\n midpoints\n };\n}\nfunction computeColorSchemeRange(graph, referenceRamp) {\n let minDepth = Infinity;\n let maxDepth = -Infinity;\n let minLength = Infinity;\n let maxLength = -Infinity;\n let maxRank = 0;\n for (const n of graph.nodes) {\n if (n.stable !== void 0 && n.stable.rank > maxRank) {\n maxRank = n.stable.rank;\n }\n if (n.depth < minDepth) {\n minDepth = n.depth;\n }\n if (n.depth > maxDepth) {\n maxDepth = n.depth;\n }\n if (n.length < minLength) {\n minLength = n.length;\n }\n if (n.length > maxLength) {\n maxLength = n.length;\n }\n }\n return {\n minDepth,\n maxDepth,\n minLength,\n maxLength,\n maxRank,\n nodeCount: graph.nodes.length,\n referenceRamp\n };\n}\nfunction getNodeColor(node, nodeIndex, colorScheme, range) {\n switch (colorScheme) {\n case \"random\":\n return hashColor(node.id, 1);\n case \"depth\":\n return sampleGradient(\n DEPTH_GRADIENT,\n range.maxDepth > range.minDepth ? (node.depth - range.minDepth) / (range.maxDepth - range.minDepth) : 0.5\n );\n case \"node-length\":\n return sampleGradient(\n NODE_LENGTH_GRADIENT,\n range.maxLength > range.minLength ? (node.length - range.minLength) / (range.maxLength - range.minLength) : 0.5\n );\n // rGFA states the backbone rather than leaving it to be inferred: rank 0 is\n // the reference, higher ranks are the sequence that diverges from it. A\n // graph with no SR tags draws every node as unranked.\n case \"stable-rank\":\n return node.stable === void 0 ? packAbgr(160, 160, 160, 255) : node.stable.rank === 0 ? packAbgr(52, 152, 219, 255) : sampleGradient(\n STABLE_RANK_GRADIENT,\n range.maxRank > 1 ? (node.stable.rank - 1) / (range.maxRank - 1) : 0\n );\n // Position on the reference, the one quantity both panels of a\n // graph-over-linear figure can state, so only the backbone takes a hue\n case \"reference-position\": {\n const ramp = range.referenceRamp;\n if (ramp === void 0) {\n return packAbgr(160, 160, 160, 255);\n }\n const t = rampFraction(node, ramp);\n return t === void 0 ? REFERENCE_RAMP_ALT_COLOR : packHsl(\n rampHueAt(t),\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n );\n }\n case \"grey\":\n return packAbgr(160, 160, 160, 255);\n case \"rainbow\": {\n const hue = range.nodeCount > 1 ? nodeIndex / range.nodeCount * 360 : 0;\n return packHsl(hue, 0.75, 0.5);\n }\n default:\n return packAbgr(52, 152, 219, 255);\n }\n}\nfunction endTangent(c, yToX = 1, into) {\n const candidates = [\n [c.cx1, c.cy1],\n [c.cx0, c.cy0],\n [c.x0, c.y0]\n ];\n for (const [x, y] of candidates) {\n const dx = c.x1 - x;\n const dy = (c.y1 - y) * yToX;\n if (Math.hypot(dx, dy) > 0) {\n return Math.atan2(dy, dx);\n }\n }\n return into ? Math.atan2((into.to.y - into.from.y) * yToX, into.to.x - into.from.x) : 0;\n}\nfunction isPolylineInBounds(segments, bounds) {\n let hit = false;\n for (let i = 0; i < segments.length - 1 && !hit; i++) {\n const a = segments[i];\n const b = segments[i + 1];\n hit = Math.max(a.x, b.x) >= bounds.minX && Math.min(a.x, b.x) <= bounds.maxX && Math.max(a.y, b.y) >= bounds.minY && Math.min(a.y, b.y) <= bounds.maxY;\n }\n return hit;\n}\nfunction isBezierInBounds(curves, bounds, growX = 0, growY = 0) {\n for (const c of curves) {\n const cMinX = Math.min(c.x0, c.cx0, c.cx1, c.x1);\n const cMaxX = Math.max(c.x0, c.cx0, c.cx1, c.x1);\n const cMinY = Math.min(c.y0, c.cy0, c.cy1, c.y1);\n const cMaxY = Math.max(c.y0, c.cy0, c.cy1, c.y1);\n if (cMaxX >= bounds.minX - growX && cMinX <= bounds.maxX + growX && cMaxY >= bounds.minY - growY && cMinY <= bounds.maxY + growY) {\n return true;\n }\n }\n return false;\n}\nvar paletteCache = /* @__PURE__ */ new WeakMap();\nfunction pathPaletteOf(graph) {\n let palette = paletteCache.get(graph);\n if (!palette) {\n const pathColorByIndex = [];\n const pathIndexByName = /* @__PURE__ */ new Map();\n const paths = graph.paths ?? [];\n for (let i = 0; i < paths.length; i++) {\n pathColorByIndex.push(\n packHsl(\n pathHueAt(i, paths.length),\n PATH_SATURATION,\n PATH_LIGHTNESS,\n 0.85\n )\n );\n if (!pathIndexByName.has(paths[i].name)) {\n pathIndexByName.set(paths[i].name, i);\n }\n }\n palette = { pathColorByIndex, pathIndexByName };\n paletteCache.set(graph, palette);\n }\n return palette;\n}\nvar slotsCache = /* @__PURE__ */ new WeakMap();\nvar NO_SLOTS = /* @__PURE__ */ new Map();\nfunction pathSlotsOf(graph) {\n let slots = slotsCache.get(graph);\n if (!slots) {\n slots = /* @__PURE__ */ new Map();\n for (const [pathIdx, path] of (graph.paths ?? []).entries()) {\n for (const nodeId of new Set(path.nodeIds)) {\n pushTo(slots, nodeId, pathIdx);\n }\n }\n slotsCache.set(graph, slots);\n }\n return slots;\n}\nvar lanesCache = weakMemo();\nvar stepsCache = weakMemo();\nvar linksCache = /* @__PURE__ */ new WeakMap();\nfunction linksOf(graph) {\n let links = linksCache.get(graph);\n if (!links) {\n links = /* @__PURE__ */ new Map();\n for (const { from, to } of graph.edges) {\n let out = links.get(from);\n if (!out) {\n out = /* @__PURE__ */ new Set();\n links.set(from, out);\n }\n out.add(to);\n }\n linksCache.set(graph, links);\n }\n return links;\n}\nfunction buildGeometry(options) {\n const {\n nodePositions,\n graph,\n nodeById,\n colorScheme,\n contigThickness,\n connectorThickness,\n drawPaths,\n nodeWidth = \"uniform\",\n edgeWidth = \"uniform\",\n highlight,\n axis,\n linearLayout,\n viewportBounds,\n referenceRamp,\n deletions,\n deletionRoutes,\n stranded,\n hiddenEdges,\n version = 0\n } = options;\n const widthScale = widthNorm(graph, nodeWidth);\n const busiest = edgeWidth === \"walks\" ? busiestEdge(graph) : 0;\n const scale = axis.scaleX;\n const worldPerScreenPx = 1 / Math.max(scale, MIN_SCALE_FOR_OFFSET);\n const yToX = yToXOf(axis);\n const sharedCurves = baseEdgeCurves(\n nodePositions,\n graph,\n axis,\n deletions,\n version,\n deletionRoutes,\n stranded\n );\n const nodeStrokes = [];\n const nodeStrokeRuns = /* @__PURE__ */ new Map();\n const arrows = [];\n const arrowRuns = /* @__PURE__ */ new Map();\n const edgeCurves = [];\n const edgeCurveRuns = /* @__PURE__ */ new Map();\n const colorRange = computeColorSchemeRange(graph, referenceRamp);\n const nodeIndexMap = /* @__PURE__ */ new Map();\n if (colorScheme === \"rainbow\") {\n for (let i = 0; i < graph.nodes.length; i++) {\n nodeIndexMap.set(graph.nodes[i].id, i);\n }\n }\n const pathCount = graph.paths?.length ?? 0;\n const { pathColorByIndex, pathIndexByName } = pathPaletteOf(graph);\n const pathColorByName = (name) => pathColorByIndex[pathIndexByName.get(name) ?? -1] ?? EDGE_PATH_FALLBACK_COLOR;\n const nodePathSlots = drawPaths && pathCount > 1 ? pathSlotsOf(graph) : NO_SLOTS;\n const liftedWalks = highlight?.walks ?? [];\n const threaded = threadsPasses(liftedWalks);\n const lanePasses = liftedWalks.map((w) => w.mostPasses);\n const thinned = threaded ? bandScale(lanePasses) : 1;\n const fields = highlight && liftedWalks.length > 1 ? lanesCache(\n highlight,\n [nodePositions, version, axis.scaleX, axis.scaleY],\n () => liftLanes(\n liftedWalks,\n nodePositions,\n yToX,\n worldPerScreenPx,\n stepsCache(\n highlight,\n [nodePositions, version],\n () => walkSteps(\n liftedWalks.map((w) => w.route),\n nodePositions\n )\n )\n )\n ) : void 0;\n const lines = fields?.lines;\n const threads = fields?.threads;\n const spanField = fields?.spans;\n const plainCentres = threaded ? slotCentres(lanePasses, lanePasses) : [];\n const centresByNode = /* @__PURE__ */ new Map();\n const centresOf = (nodeId) => {\n let centres = centresByNode.get(nodeId);\n if (!centres) {\n const spans = spanField?.get(nodeId);\n centres = spans ? slotCentres(spans.slot, lanePasses, spans.held) : plainCentres;\n centresByNode.set(nodeId, centres);\n }\n return centres;\n };\n const laneOffset = (nodeId, laneWidth, lane, pass) => threaded ? (centresOf(nodeId)[lane] + pass * THREAD_PITCH_PX) * thinned : (lane - (liftedWalks.length - 1) / 2) * laneWidth;\n const threadOffsetAt = (frame, at, fallback) => {\n const eased = frame?.offsets?.[at] ?? frame?.offset;\n return eased === void 0 ? fallback : eased * thinned;\n };\n const laneHalfWidth = (laneWidth) => threaded ? THREAD_PX / 2 * thinned : laneWidth / 2;\n const plainNormals = /* @__PURE__ */ new Map();\n const visitNormals = /* @__PURE__ */ new WeakMap();\n const visitOf = (lane, nodeId, thread) => threads?.[lane]?.threadPasses.get(nodeId)?.[thread] ?? 0;\n const plainNormalsOf = (nodeId, segments) => {\n let normals = plainNormals.get(nodeId);\n if (!normals) {\n normals = pointNormalsOf(segments, yToX);\n plainNormals.set(nodeId, normals);\n }\n return normals;\n };\n const laneNormalsOf = (nodeId, segments, frame) => {\n if (!frame) {\n return plainNormalsOf(nodeId, segments);\n }\n let normals = visitNormals.get(frame.normals);\n if (!normals) {\n normals = plainNormalsOf(nodeId, segments).map(\n (n, i) => frame.normals[i] ?? n\n );\n visitNormals.set(frame.normals, normals);\n }\n return normals;\n };\n const laneWidths = /* @__PURE__ */ new Map();\n const laneWidthOf = (id) => {\n let width = laneWidths.get(id);\n if (width === void 0) {\n const node = nodeById.get(id);\n width = walkLaneWidthPx(\n node ? nodeWidthPx(node, contigThickness, nodeWidth, widthScale) : contigThickness,\n liftedWalks.length\n );\n laneWidths.set(id, width);\n }\n return width;\n };\n const laneEndOf = (id, frames, segments, atStart, lane, thread) => {\n const at = atStart ? 0 : segments.length - 1;\n const frame = frames?.[lane]?.[visitOf(lane, id, thread)];\n const eased = frame?.offsets?.[at] ?? frame?.offset;\n return {\n normal: frame?.normals[at] ?? plainNormalsOf(id, segments)[at] ?? { nx: 0, ny: 0 },\n shift: frame?.shifts[at] ?? NO_SHIFT,\n offset: eased === void 0 ? laneOffset(id, laneWidthOf(id), lane, thread) : eased * thinned\n };\n };\n const lanesMayShow = (curves, fromId) => {\n if (!viewportBounds) {\n return true;\n }\n const offset = threaded ? bandWidthPx(lanePasses) * thinned : (liftedWalks.length - 1) / 2 * laneWidthOf(fromId);\n const reach = LONGEST_NORMAL * offset * worldPerScreenPx;\n return isBezierInBounds(\n curves,\n viewportBounds,\n reach + (fields?.furthestShift.dx ?? 0),\n reach / yToX + (fields?.furthestShift.dy ?? 0)\n );\n };\n const threadPairs = (lane, from, to) => {\n const own = threads?.[lane]?.linkThreads;\n if (!own?.size) {\n return FIRST_THREADS;\n }\n const ahead = own.get(from)?.get(to);\n const back = linksOf(graph).get(to)?.has(from) ? void 0 : own.get(to)?.get(from);\n if (!back) {\n return ahead ?? FIRST_THREADS;\n }\n const turned = back.map(([a, b]) => [b, a]);\n return ahead ? [...ahead, ...turned] : turned;\n };\n const threadColor = (lane, nodeId, thread) => liftedWalks[lane]?.passColors.get(nodeId)?.[threads?.[lane]?.threadPasses.get(nodeId)?.[thread] ?? 0];\n const visitPoints = /* @__PURE__ */ new WeakMap();\n const lanePointsOf = (segments, frame) => {\n if (!frame || !threaded) {\n return segments;\n }\n let points = visitPoints.get(frame.shifts);\n if (!points) {\n const { shifts } = frame;\n points = segments.map((p, i) => {\n const { dx, dy } = shifts[i] ?? NO_SHIFT;\n return { ...p, x: p.x + dx, y: p.y + dy };\n });\n visitPoints.set(frame.shifts, points);\n }\n return points;\n };\n const showArrows = scale > (linearLayout ? 1 : MIN_ARROW_SCALE);\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const edge = graph.edges[ei];\n const fromSegments = nodePositions[edge.from];\n const toSegments = nodePositions[edge.to];\n const baseCurves = sharedCurves.get(ei);\n if (!fromSegments?.length || !toSegments?.length || !baseCurves || hiddenEdges?.has(ei)) {\n continue;\n }\n const numPaths = edge.pathIds?.length ?? 0;\n const bypassed = deletions?.get(ei);\n const isDeletion = bypassed !== void 0;\n const onWalk = highlight?.edgeIndexes.has(ei) ?? false;\n const ribbonThickness = connectorThickness / 2 * (isDeletion ? DELETION_THICKNESS_FACTOR : 1);\n const walkFactor = edgeWidthFactor(numPaths, busiest, edgeWidth);\n const edgeThickness = connectorThickness / 2 * (!isDeletion ? walkFactor : edgeWidth === \"walks\" && busiest > 0 ? Math.max(1, walkFactor) : DELETION_THICKNESS_FACTOR);\n const ribbons = drawPaths && numPaths > 0;\n const plainEdgeColor = isDeletion ? EDGE_DELETION_COLOR : EDGE_DEFAULT_COLOR;\n const edgeColor = !highlight || onWalk ? plainEdgeColor : fadeAbgr(plainEdgeColor, FADED_ALPHA);\n const toNode = nodeById.get(edge.to);\n const intoHalfWidth = (toNode ? nodeWidthPx(toNode, contigThickness, nodeWidth, widthScale) : contigThickness) / 2;\n const inView = (curves) => !viewportBounds || isBezierInBounds(curves, viewportBounds);\n const dashesOf = (curves) => dashSpans(curves, DELETION_DASH_PX / scale, yToX, viewportBounds);\n const stroke = (curves, thickness, color) => {\n if (!isDeletion) {\n edgeCurves.push({ curves, thickness, color });\n return;\n }\n for (const dash of dashesOf(curves)) {\n edgeCurves.push({ curves: dash.curves, thickness, color });\n }\n };\n const laneStroke = (curves, thickness, color, walk, pass, normal2, offsetX, endNormal, endOffsetX) => {\n edgeCurves.push({\n curves,\n thickness,\n color,\n walk,\n pass,\n normal: normal2,\n offsetX,\n endNormal,\n endOffsetX\n });\n };\n const arrowOn = (curves) => {\n const head = showArrows ? arrowheadFor({\n curves,\n edgeHalfWidth: isDeletion || ribbons ? connectorThickness / 2 : edgeThickness,\n nodeHalfWidth: intoHalfWidth,\n scale,\n yToX,\n color: edgeColor,\n fromSegments,\n toSegments\n }) : void 0;\n if (head) {\n arrows.push(head);\n }\n };\n const edgeCurveStart = edgeCurves.length;\n const arrowStart = arrows.length;\n const laneWalks = highlight?.walks.length && onWalk && !ribbons ? highlight.walks : void 0;\n if (laneWalks && !lanesMayShow(baseCurves, edge.from)) {\n continue;\n }\n if (laneWalks) {\n const fromAtStart = leavesStart(\n edge,\n fromSegments,\n baseCurves[0],\n stranded,\n yToX\n );\n const last = baseCurves.at(-1);\n const toAtStart = nearerStart(\n { x: last.x1, y: last.y1 },\n toSegments,\n yToX\n );\n const single = laneWalks.length === 1;\n const thickness = laneHalfWidth(laneWidthOf(edge.from));\n const fromFrames = lines?.frames.get(edge.from);\n const toFrames = lines?.frames.get(edge.to);\n for (let lane = 0; lane < laneWalks.length; lane++) {\n const walk = laneWalks[lane];\n if (!walk.edgeIndexes.has(ei)) {\n continue;\n }\n for (const [pass, toPass] of threadPairs(lane, edge.from, edge.to)) {\n const from = laneEndOf(\n edge.from,\n fromFrames,\n fromSegments,\n fromAtStart,\n lane,\n pass\n );\n const to = threaded ? laneEndOf(edge.to, toFrames, toSegments, toAtStart, lane, toPass) : from;\n const offsetX = single ? 0 : from.offset * worldPerScreenPx;\n const endOffsetX = threaded ? to.offset * worldPerScreenPx : offsetX;\n const curves = threaded ? slideCurves(\n baseCurves,\n from.shift.dx + from.normal.nx * offsetX,\n from.shift.dy + from.normal.ny * offsetX / yToX,\n to.shift.dx + to.normal.nx * endOffsetX,\n to.shift.dy + to.normal.ny * endOffsetX / yToX\n ) : offsetX === 0 ? baseCurves : translateCurves(\n baseCurves,\n from.normal.nx * offsetX,\n from.normal.ny * offsetX / yToX\n );\n if (inView(curves)) {\n laneStroke(\n curves,\n thickness,\n threadColor(lane, edge.from, pass) ?? threadColor(lane, edge.to, toPass) ?? plainEdgeColor,\n lane,\n pass,\n from.normal,\n offsetX,\n to.normal,\n endOffsetX\n );\n }\n }\n }\n if (edgeCurves.length > edgeCurveStart) {\n arrowOn(baseCurves);\n }\n } else if (!ribbons) {\n if (inView(baseCurves)) {\n stroke(baseCurves, edgeThickness, edgeColor);\n arrowOn(baseCurves);\n }\n } else {\n const offsets = pathRibbonOffsets(\n fromSegments,\n toSegments,\n numPaths,\n axis\n );\n const arrowRibbon = Math.floor((numPaths - 1) / 2);\n for (let pathIdx = 0; pathIdx < numPaths; pathIdx++) {\n const { x, y } = offsets[pathIdx];\n const curves = x === 0 && y === 0 ? baseCurves : translateCurves(baseCurves, x, y);\n if (!inView(curves)) {\n continue;\n }\n const ribbonColor = pathColorByName(edge.pathIds[pathIdx]);\n stroke(\n curves,\n ribbonThickness,\n highlight && (highlight.walks.length ? !highlight.names.has(edge.pathIds[pathIdx]) : !onWalk) ? fadeAbgr(ribbonColor, FADED_ALPHA) : ribbonColor\n );\n if (pathIdx === arrowRibbon) {\n arrowOn(curves);\n }\n }\n }\n const edgeCurveCount = edgeCurves.length - edgeCurveStart;\n if (edgeCurveCount > 0) {\n edgeCurveRuns.set(ei, { start: edgeCurveStart, count: edgeCurveCount });\n }\n const arrowCount = arrows.length - arrowStart;\n if (arrowCount > 0) {\n arrowRuns.set(ei, { start: arrowStart, count: arrowCount });\n }\n }\n for (const [nodeId, segments] of Object.entries(nodePositions)) {\n const node = nodeById.get(nodeId);\n if (!node) {\n continue;\n }\n if (viewportBounds && !isPolylineInBounds(segments, viewportBounds)) {\n continue;\n }\n const faded = highlight !== void 0 && !highlight.nodeIds.has(nodeId);\n const own = faded ? LIFT_BACKDROP_COLOR : getNodeColor(\n node,\n nodeIndexMap.get(nodeId) ?? 0,\n colorScheme,\n colorRange\n );\n const color = faded ? fadeAbgr(own, FADED_ALPHA) : node.moved ? fadeAbgr(own, MOVED_ALPHA) : own;\n const width = nodeWidthPx(node, contigThickness, nodeWidth, widthScale);\n const nodeThickness = width / 2;\n const start = nodeStrokes.length;\n const slots = nodePathSlots.get(nodeId);\n const slotWidth = width / pathCount;\n const drawable = segments.length >= 2;\n const lanes = highlight?.walks.length && !faded && !slots?.length ? highlight.walks : void 0;\n if (drawable && lanes) {\n const laneWidth = walkLaneWidthPx(width, lanes.length);\n const thickness = laneHalfWidth(laneWidth);\n const frames = lines?.frames.get(nodeId);\n for (let lane = 0; lane < lanes.length; lane++) {\n const laneColor = lanes[lane].colors.get(nodeId);\n if (laneColor === void 0) {\n continue;\n }\n const onThreads = threads?.[lane]?.nodeThreads.get(nodeId) ?? ONE_PASS;\n for (const pass of onThreads) {\n const color2 = threadColor(lane, nodeId, pass) ?? laneColor;\n if (lanes.length === 1) {\n nodeStrokes.push({\n points: segments,\n thickness,\n color: color2,\n walk: lane,\n pass\n });\n continue;\n }\n const frame = frames?.[lane]?.[visitOf(lane, nodeId, pass)];\n const normals = laneNormalsOf(nodeId, segments, frame);\n const points = lanePointsOf(segments, frame);\n const plain = laneOffset(nodeId, laneWidth, lane, pass);\n const offsets = frame?.offsets?.map(\n (o) => o * thinned * worldPerScreenPx\n );\n const offsetX = offsets ? offsets[Math.floor(offsets.length / 2)] : threadOffsetAt(frame, 0, plain) * worldPerScreenPx;\n nodeStrokes.push({\n points: offsetPolyline(points, normals, offsets ?? offsetX, yToX),\n thickness,\n color: color2,\n walk: lane,\n pass,\n normals,\n offsetX,\n ...offsets && { offsets }\n });\n }\n }\n } else if (drawable && slots?.length && slotWidth >= MIN_PATH_STRIPE_PX) {\n const normals = pointNormalsOf(segments, yToX);\n for (const slot of slots) {\n const offset = (slot - (pathCount - 1) / 2) * slotWidth * worldPerScreenPx;\n const stripe = pathColorByIndex[slot] ?? EDGE_PATH_FALLBACK_COLOR;\n nodeStrokes.push({\n points: offsetPolyline(segments, normals, offset, yToX),\n thickness: slotWidth / 2,\n // a node off the lifted walk fades whichever way it is painted\n color: faded ? fadeAbgr(stripe, FADED_ALPHA) : stripe\n });\n }\n } else if (drawable) {\n nodeStrokes.push({ points: segments, thickness: nodeThickness, color });\n }\n const count = nodeStrokes.length - start;\n if (count > 0) {\n nodeStrokeRuns.set(nodeId, { start, count });\n }\n }\n return {\n nodeStrokes,\n nodeStrokeRuns,\n arrows,\n arrowRuns,\n edgeCurves,\n edgeCurveRuns\n };\n}\n\nexport {\n LIFT_BACKDROP_COLOR,\n FADED_ALPHA,\n LIFT_BACKDROP_CSS,\n hslToRgb,\n REFERENCE_RAMP_ALT_COLOR,\n REFERENCE_RAMP_ALT_CSS,\n rampFraction,\n computeReferenceRamp,\n computeColorSchemeRange,\n getNodeColor,\n endTangent,\n buildGeometry\n};\n", "import {\n REFERENCE_RAMP_ALT_COLOR,\n hslToRgb\n} from \"./chunk-YA3VYQH4.js\";\nimport {\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n REFERENCE_RAMP_LIGHTNESS,\n REFERENCE_RAMP_SATURATION,\n rampHueAt\n} from \"./chunk-GQZVR5DW.js\";\n\n// src/walkEncoding.ts\nvar WALK_FIELDS = [\n { value: \"progress\", label: \"Progress along the walk\" },\n { value: \"walk\", label: \"One colour for the walk\" },\n { value: \"reference\", label: \"Reference position\" }\n];\nvar WALK_SCHEMES = [\n { value: \"grey\", label: \"Grey to black\", ends: [\"#a3a3a3\", \"#151515\"] },\n { value: \"blue\", label: \"Cyan to navy\", ends: [\"#6ee0f0\", \"#0b2c7a\"] },\n { value: \"red\", label: \"Yellow to red\", ends: [\"#ffd24a\", \"#b3121b\"] },\n { value: \"purple\", label: \"Pink to plum\", ends: [\"#f5a3d8\", \"#5e1a6e\"] },\n { value: \"green\", label: \"Lime to forest\", ends: [\"#b6e36c\", \"#0b5d3b\"] },\n { value: \"orange\", label: \"Peach to rust\", ends: [\"#ffc285\", \"#8f3a00\"] },\n { value: \"rainbow\", label: \"Rainbow\" }\n];\nvar FAMILIES = [\"blue\", \"red\", \"purple\", \"green\"];\nvar isField = (v) => WALK_FIELDS.some((f) => f.value === v);\nvar isScheme = (v) => WALK_SCHEMES.some((s) => s.value === v);\nfunction resolveEncoding(layer, reference, picked, alone = true) {\n const { field: askedField, scheme: askedScheme } = layer.color ?? {};\n const field = isField(askedField) ? askedField : alone ? \"progress\" : \"walk\";\n const family = reference ? \"grey\" : FAMILIES[picked % FAMILIES.length];\n const scheme = isScheme(askedScheme) ? askedScheme === \"rainbow\" && field !== \"reference\" ? family : askedScheme : family;\n const round = Math.floor(picked / FAMILIES.length) % SHADES.length;\n return field === \"walk\" && scheme === family && round > 0 ? { field, scheme, shade: SHADES[round] } : alone || field === \"walk\" ? { field, scheme } : { field, scheme, darkest: TOGETHER_DARKEST };\n}\nvar TOGETHER_DARKEST = 0.55;\nvar BASE_T = 0.5;\nvar SHADES = [BASE_T, 0.85, 0.2];\nvar STRETCH_GAP = 0.08;\nvar rampsOn = ({ field, scheme }) => field !== \"walk\" && scheme !== \"rainbow\";\nfunction splitFamilies(encodings) {\n const counts = /* @__PURE__ */ new Map();\n for (const e of encodings) {\n if (rampsOn(e)) {\n counts.set(e.scheme, (counts.get(e.scheme) ?? 0) + 1);\n }\n }\n const seen = /* @__PURE__ */ new Map();\n return encodings.map((e) => {\n const k = rampsOn(e) ? counts.get(e.scheme) : 1;\n if (k < 2) {\n return e;\n }\n const j = seen.get(e.scheme) ?? 0;\n seen.set(e.scheme, j + 1);\n const half = STRETCH_GAP / 2;\n return {\n ...e,\n stretch: [\n j / k + (j > 0 ? half : 0),\n (j + 1) / k - (j < k - 1 ? half : 0)\n ]\n };\n });\n}\nvar along = ({ stretch }, t) => stretch ? stretch[0] + (stretch[1] - stretch[0]) * t : t;\nvar toLinear = (c) => c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\nvar toGamma = (c) => c <= 31308e-7 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055;\nfunction oklab(hex) {\n const [r, g, b] = [1, 3, 5].map(\n (i) => toLinear(Number.parseInt(hex.slice(i, i + 2), 16) / 255)\n );\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\n return [\n 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n ];\n}\nfunction oklabToRgb([L, a, b]) {\n const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3;\n return [\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s\n ].map((c) => toGamma(Math.max(0, Math.min(1, c))) * 255);\n}\nvar endsCache = /* @__PURE__ */ new Map();\nfunction oklabEnds(scheme) {\n if (!endsCache.has(scheme)) {\n const family = WALK_SCHEMES.find((s) => s.value === scheme);\n endsCache.set(\n scheme,\n family && \"ends\" in family ? family.ends.map(oklab) : void 0\n );\n }\n return endsCache.get(scheme);\n}\nfunction schemeRgb(scheme, t, darkest = 0) {\n const x = Math.max(0, Math.min(1, t));\n const ends = oklabEnds(scheme);\n if (!ends) {\n return hslToRgb(\n rampHueAt(x),\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n ).map((c) => c * 255);\n }\n const [from, to] = ends;\n const light = from[0];\n const dark = to[0];\n const reach = dark < darkest && light > darkest ? (light - darkest) / (light - dark) : 1;\n return oklabToRgb(from.map((v, i) => v + (to[i] - v) * x * reach));\n}\nfunction schemeCss(scheme, t, darkest) {\n const [r, g, b] = schemeRgb(scheme, t, darkest).map(Math.round);\n return `rgb(${r}, ${g}, ${b})`;\n}\nfunction schemeColor(scheme, t, darkest) {\n const [r, g, b] = schemeRgb(scheme, t, darkest).map(Math.round);\n return packAbgr(r, g, b, 255);\n}\nfunction encodedColor(encoding, t) {\n const { field, scheme, darkest, shade = BASE_T } = encoding;\n return field === \"walk\" ? schemeColor(scheme, shade) : t === void 0 ? NO_VALUE_COLOR : schemeColor(scheme, along(encoding, t), darkest);\n}\nvar NO_VALUE_COLOR = REFERENCE_RAMP_ALT_COLOR;\nfunction encodingStops(encoding) {\n const { field, scheme, darkest, shade = BASE_T } = encoding;\n const stop = (offset, t) => ({\n offset,\n color: schemeCss(scheme, t, darkest),\n abgr: schemeColor(scheme, t, darkest)\n });\n return field === \"walk\" ? [stop(0, shade)] : Array.from({ length: 7 }, (_, i) => stop(i / 6, along(encoding, i / 6)));\n}\nfunction encodingSwatchCss(encoding) {\n const stops = encodingStops(encoding);\n return stops.length === 1 ? stops[0].color : `linear-gradient(to right, ${stops.map((s) => `${s.color} ${s.offset * 100}%`).join(\", \")})`;\n}\n\nexport {\n WALK_FIELDS,\n WALK_SCHEMES,\n resolveEncoding,\n splitFamilies,\n schemeRgb,\n schemeCss,\n schemeColor,\n encodedColor,\n NO_VALUE_COLOR,\n encodingStops,\n encodingSwatchCss\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["THREAD_PX", "THREAD_GAP_PX", "SLOT_GAP_PX", "LANE_SMOOTHING_PX", "THREAD_REACH_PX", "THREAD_TAPER_PX", "MAX_BAND_PX", "PASSES_KEY", "threadsPasses", "walks", "w", "threadsWidth", "threads", "sum", "values", "a", "b", "slotLayout", "spans", "mostPasses", "laneWidth", "widths", "m", "i", "seen", "gaps", "share", "gap", "THREAD_PITCH_PX", "slotCentres", "held", "band", "at", "width", "slack", "centre", "bandWidthPx", "bandScale", "passesKey", "pointIndex", "run", "p", "i", "k", "gapOf", "a", "b", "dx", "dy", "arcOf", "s", "walkSteps", "walkRoutes", "nodePositions", "seen", "routes", "visits", "route", "id", "visit", "segments", "owned", "laneRuns", "steps", "yToX", "jump", "runs", "pieces", "walk", "total", "piece", "xs", "ys", "at", "from", "fresh", "breakRun", "stepOf", "gap", "x", "y", "first", "last", "forward", "toFirst", "toLast", "next", "toNext", "j", "ownedWindows", "margin", "windows", "floor", "lo", "hi", "smoothedNormals", "reach", "end", "pointAt", "span", "f", "_", "back", "ahead", "len", "cutCurls", "close", "length", "out", "picks", "to", "j2", "q", "rounded", "half", "n", "sumW", "sumX", "sumY", "w", "tightPoints", "line", "radius", "tight", "along", "twice", "loosened", "t", "pass", "part", "local", "weight", "windowMean", "smoother", "runSigns", "own", "canonical", "settle", "agreement", "sum2", "decided", "pending", "theirs", "mine", "laneLines", "band", "smooth", "turn", "curl", "context", "frames", "firsts", "arcs", "stepFrames", "newFrame", "place", "byWalk", "r", "ids", "starts", "raw", "firstRun", "firstStep", "firstFrame", "plus", "minus", "d", "shared", "reachFrom", "reachTo", "backward", "apart", "points", "normals", "sign", "index", "m", "px", "py", "shift", "windowed", "v", "deque", "head", "counted", "sumWV", "ONE_THREAD", "repeats", "passes", "walkThreads", "widths", "stepVisits", "stepWants", "stepGlides", "nodes", "mid", "most", "copy", "before", "after", "wants", "glides", "nearest", "want", "taken", "threadOf", "free", "width", "c", "glideOf", "glide", "nodeThreads", "threadPasses", "threadAt", "passOf", "thread", "linkThreads", "pair", "list", "bandSpans", "spans", "taper", "middle", "eased", "e", "easeOffsets", "threads", "plain", "slotCentres", "byNode", "centresAt", "centres", "THREAD_PITCH_PX", "frame", "constant", "offsets", "liftLanes", "walks", "worldPerScreenPx", "threaded", "threadsPasses", "THREAD_REACH_PX", "LANE_SMOOTHING_PX", "bandWidthPx", "bandScale", "lines", "THREAD_TAPER_PX", "furthestShift", "seenShifts", "shifts", "packAbgr", "r", "g", "b", "a", "abgrRed", "c", "abgrGreen", "abgrBlue", "abgrAlpha", "abgrToCssRgba", "normalizedRgbToCssRgba", "alpha", "fadeAbgr", "brightenAbgr", "factor", "t", "lift", "v", "REFERENCE_RAMP_MAX_HUE", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "rampHueCss", "hue", "rampHueAt", "frac", "rampHue", "bp", "domain", "HUE_STOP_DEG", "rampStops", "start", "reversed", "low", "high", "n", "_", "RAMP_GRADIENT_STOPS", "i", "RAMP_GRADIENT_CSS", "s", "cache", "weakMemo", "baseEdgeCurves", "nodePositions", "graph", "axis", "deletions", "version", "routes", "stranded", "curves", "ei", "bypassed", "edgeCurves", "edgeCurvesOf", "MAX_BACKBONE_HOPS", "buildNeighbors", "graph", "neighbors", "edge", "pushTo", "flankingSpan", "nodeId", "nodeById", "seen", "frontier", "minEnd", "maxStart", "hop", "next", "id", "adjacent", "neighborId", "neighbor", "isBackbone", "nodeReferenceSpan", "node", "referenceMidpoints", "midpoints", "span", "EDGE_DEFAULT_COLOR", "packAbgr", "EDGE_PATH_FALLBACK_COLOR", "EDGE_DELETION_COLOR", "DELETION_THICKNESS_FACTOR", "LIFT_BACKDROP_COLOR", "FADED_ALPHA", "MOVED_ALPHA", "LIFT_BACKDROP_CSS", "abgrToCssRgba", "fadeAbgr", "DELETION_DASH_PX", "MIN_PATH_STRIPE_PX", "MIN_SCALE_FOR_OFFSET", "ARROW_LENGTH_BASE_PX", "ARROW_LENGTH_PER_EDGE_PX", "ARROW_HALF_WIDTH_BASE_PX", "ARROW_HALF_WIDTH_PER_EDGE_PX", "MIN_LINK_HEADS", "MIN_ARROW_FIT", "MIN_ARROW_SCALE", "ARROW_CURVE_STEPS", "ABUTTING_PX", "walkX", "walkY", "walkPx", "backFromEnd", "curves", "scale", "yToX", "untilPx", "most", "last", "n", "px", "ci", "c", "k", "t", "a", "b", "d", "e", "x", "y", "walkPointAt", "i", "from", "to", "f", "arrowheadFor", "edgeHalfWidth", "nodeHalfWidth", "color", "fromSegments", "toSegments", "length", "lengthPx", "abutting", "inset", "fit", "polylinePx", "tip", "base", "dx", "dy", "endTangent", "intoDirection", "FIRST_THREADS", "ONE_PASS", "NO_SHIFT", "nearerStart", "at", "segments", "gap", "p", "leavesStart", "edge", "first", "stranded", "strandSides", "final", "normal", "len", "MITRE_LIMIT", "LONGEST_NORMAL", "pointNormalsOf", "rawPoints", "points", "before", "after", "nx", "ny", "dot", "offsetPolyline", "normals", "distance", "out", "hslToRgb", "h", "s", "l", "m", "r", "g", "packHsl", "DEPTH_GRADIENT", "STABLE_RANK_GRADIENT", "NODE_LENGTH_GRADIENT", "sampleGradient", "stops", "pos", "hashColor", "str", "alpha", "nameHue", "PATH_SATURATION", "PATH_LIGHTNESS", "REFERENCE_RAMP_ALT_RGB", "REFERENCE_RAMP_ALT_COLOR", "REFERENCE_RAMP_ALT_CSS", "rampFraction", "node", "ramp", "mid", "isBackbone", "computeReferenceRamp", "graph", "domain", "midpoints", "referenceMidpoints", "min", "max", "computeColorSchemeRange", "referenceRamp", "minDepth", "maxDepth", "minLength", "maxLength", "maxRank", "getNodeColor", "nodeIndex", "colorScheme", "range", "rampHueAt", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "hue", "into", "candidates", "isPolylineInBounds", "bounds", "hit", "isBezierInBounds", "growX", "growY", "cMinX", "cMaxX", "cMinY", "cMaxY", "paletteCache", "pathPaletteOf", "palette", "pathColorByIndex", "pathIndexByName", "paths", "pathHueAt", "slotsCache", "NO_SLOTS", "pathSlotsOf", "slots", "pathIdx", "path", "nodeId", "pushTo", "lanesCache", "weakMemo", "stepsCache", "linksCache", "linksOf", "links", "buildGeometry", "options", "nodePositions", "nodeById", "contigThickness", "connectorThickness", "drawPaths", "nodeWidth", "edgeWidth", "highlight", "axis", "linearLayout", "viewportBounds", "deletions", "deletionRoutes", "hiddenEdges", "version", "widthScale", "widthNorm", "busiest", "busiestEdge", "worldPerScreenPx", "yToXOf", "sharedCurves", "baseEdgeCurves", "nodeStrokes", "nodeStrokeRuns", "arrows", "arrowRuns", "edgeCurves", "edgeCurveRuns", "colorRange", "nodeIndexMap", "pathCount", "pathColorByName", "name", "nodePathSlots", "liftedWalks", "threaded", "threadsPasses", "lanePasses", "w", "thinned", "bandScale", "fields", "liftLanes", "walkSteps", "lines", "threads", "spanField", "plainCentres", "slotCentres", "centresByNode", "centresOf", "centres", "spans", "laneOffset", "laneWidth", "lane", "pass", "THREAD_PITCH_PX", "threadOffsetAt", "frame", "fallback", "eased", "laneHalfWidth", "THREAD_PX", "plainNormals", "visitNormals", "visitOf", "thread", "plainNormalsOf", "laneNormalsOf", "laneWidths", "laneWidthOf", "id", "width", "walkLaneWidthPx", "nodeWidthPx", "laneEndOf", "frames", "atStart", "lanesMayShow", "fromId", "offset", "bandWidthPx", "reach", "threadPairs", "own", "ahead", "back", "turned", "threadColor", "visitPoints", "lanePointsOf", "shifts", "showArrows", "ei", "baseCurves", "numPaths", "isDeletion", "onWalk", "ribbonThickness", "walkFactor", "edgeWidthFactor", "edgeThickness", "ribbons", "plainEdgeColor", "edgeColor", "toNode", "intoHalfWidth", "inView", "dashesOf", "dashSpans", "stroke", "thickness", "dash", "laneStroke", "walk", "normal2", "offsetX", "endNormal", "endOffsetX", "arrowOn", "head", "edgeCurveStart", "arrowStart", "laneWalks", "fromAtStart", "toAtStart", "single", "fromFrames", "toFrames", "toPass", "slideCurves", "translateCurves", "offsets", "pathRibbonOffsets", "arrowRibbon", "ribbonColor", "edgeCurveCount", "arrowCount", "faded", "nodeThickness", "start", "slotWidth", "drawable", "lanes", "laneColor", "onThreads", "color2", "plain", "o", "slot", "stripe", "count", "WALK_FIELDS", "WALK_SCHEMES", "FAMILIES", "isField", "v", "f", "isScheme", "s", "resolveEncoding", "layer", "reference", "picked", "alone", "askedField", "askedScheme", "field", "family", "scheme", "round", "SHADES", "TOGETHER_DARKEST", "BASE_T", "STRETCH_GAP", "rampsOn", "splitFamilies", "encodings", "counts", "seen", "k", "j", "half", "along", "stretch", "t", "toLinear", "c", "toGamma", "oklab", "hex", "r", "g", "b", "i", "l", "m", "oklabToRgb", "L", "a", "endsCache", "oklabEnds", "schemeRgb", "darkest", "x", "ends", "hslToRgb", "rampHueAt", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "from", "to", "light", "dark", "reach", "schemeCss", "schemeColor", "packAbgr", "encodedColor", "encoding", "shade", "NO_VALUE_COLOR", "REFERENCE_RAMP_ALT_COLOR", "encodingStops", "stop", "offset", "_"]
7
+ }
@@ -1,2 +1,2 @@
1
1
  import{d as A}from"./chunk-ROZPEXN4.js";import{a as x,d as O}from"./chunk-3VGXCEMQ.js";import{f as I}from"./chunk-6VNDP3UB.js";function G(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function se(e){let t=x(e).slice(1);return t.length>0?t:void 0}function M(e){return e.type==="WalkTabixSyntenyAdapter"||e.type==="RgfaTabixAdapter"&&(typeof e.walksUri=="string"&&e.walksUri!==""||I(e.walksLocation))}function oe(e){return e.type==="GbzBaseSyntenyAdapter"||M(e)}function ie(e){let{defaultHaplotypes:t}=e;return M(e)&&G(t)&&t.length>0?t:void 0}function ae(e){return x(e)[0]}function ce(e){return O(e).adapter}function ue(e,t){return e===void 0||e===t?void 0:`The graph is cut on its reference, ${e}: open it from a view of ${e}`}function i(e,t){return typeof e.get=="function"?e.get(t):e[t]}function b(e,t){return e.find(n=>n.trackId===t)}function l(e){return`${e.trackId} ${e.name??""}`}var U=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),R=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function Ge(e,t){let n=t?b(e,t):void 0;return n||e.filter(s=>U.has(s.adapterType)).find(s=>R.test(l(s)))}var B=/^\w+=[^;]*(;\w+=[^;]*)*$/;function H(e){let t=i(e,"name");if(!(typeof t!="string"||!B.test(t)))return Object.fromEntries(t.split(";").map(n=>{let r=n.indexOf("=");return[n.slice(0,r),n.slice(r+1)]}))}function d(e,t){let n=i(e,t);return n!==void 0?n:i(e,"INFO")?.[t]??H(e)?.[t]}var P=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],v=["RUL","period","PERIOD","consensusSize","unit","unitLength"],j=["TRID","REPID","VARID","ID","name","id"];function h(e,t){for(let n of t){let r=d(e,n),s=String((Array.isArray(r)?r[0]:r)??"").split(",")[0].trim();if(s!==""&&s!==".")return s}}var $=/^[ACGTURYSWKMBDHVN]+$/i;function V(e){let t=Number(h(e,v));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=h(e,P);return n&&$.test(n)?n.length:void 0}function m(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let r=n===""||n===null||n===void 0?NaN:Number(n);return Number.isFinite(r)?r:void 0})}function N(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let r=String(n??"").trim();return r===""||r==="."?void 0:r})}var w="<CNV:TR>";function K(e){let t=N(i(e,"ALT"));if(!t.includes(w))return;let n=m(d(e,"RN")),r=N(d(e,"RUS")),s=m(d(e,"RUL")),o=m(d(e,"RUC")),a=m(d(e,"RB")),c=0;return t.map((u,f)=>{let p=n[f]??(u===w?1:0),k=0,S=0;for(let F=0;F<p;F++,c++){let y=r[c],L=s[c]??(y&&$.test(y)?y.length:void 0),_=o[c],C=a[c]??(L&&_!==void 0?Math.round(L*_):void 0);C!==void 0&&(k+=C,S++)}return u===w&&p>0&&S===p?k:void 0})}function Y(e,t,n){let r=e?.includes("|");return(e??"").split(/[/|]/).flatMap((s,o)=>{let a=s===""?NaN:Number(s),c=a>0?t[a-1]:n;return!Number.isInteger(a)||c===void 0?[]:[{bp:c,...r?{haplotype:o+1}:{}}]})}function W(e,t,n){let r=i(e,"samples"),s={};for(let[o,a]of Object.entries(r??{})){let c=m(a.SD),u=m(a.AL).flatMap((p,k)=>p!==void 0&&p>0?[c[k]===void 0?{bp:p}:{bp:p,spanningReads:c[k]}]:[]),f=u.length>0||!t?u:Y(N(a.GT)[0],t,n);f.length>0&&(s[o]=f)}return Object.keys(s).length>0?s:void 0}function J(e,t){let n=d(e,"start"),r=d(e,"end"),s=m(d(e,"SVLEN"))[0];return t&&s!==void 0?{start:n+1,end:n+1+s}:{start:n,end:r}}function Ue(e){let t=[];for(let n of e){let r=K(n),{start:s,end:o}=J(n,r!==void 0),a=V(n);if(!(o>s)||a===void 0)continue;let c=d(n,"refName"),u=h(n,P),f=h(n,j);t.push({key:`${c}:${s}-${o}`,name:(f&&!B.test(f)?f:void 0)??(u&&u.length<=12?`(${u})n`:`${c}:${(s+1).toLocaleString("en-US")}-${o.toLocaleString("en-US")}`),refName:c,start:s,end:o,unit:a,motif:u,calls:W(n,r,o-s)})}return t.sort((n,r)=>n.start-r.start)}function T(e){let t=[];for(let n of[...e].sort((r,s)=>r.start-s.start)){let r=t.at(-1);r&&n.start<=r.end?r.end=Math.max(r.end,n.end):t.push({...n})}return t}function E(e){let t=[],n=new Map;for(let r of[...e].sort((s,o)=>s.start-o.start)){let s=`${r.refName} ${r.strand} ${r.name}`,o=n.get(s);if(o&&r.start<o.end)o.end=Math.max(o.end,r.end),o.exons=T([...o.exons,...r.exons]);else{let a={...r,exons:T(r.exons)};t.push(a),n.set(s,a)}}return t}var q=new Set(["Gff3TabixAdapter","Gff3Adapter","BedTabixAdapter","BedAdapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),z=/gene|refseq|gencode|ensembl|annotation/i,X=new Set(["BedTabixAdapter","BedAdapter"]);function Qe(e,t){let n=t?b(e,t):void 0;if(n)return n;let r=e.filter(s=>q.has(s.adapterType)&&!R.test(l(s)));return r.find(s=>z.test(l(s)))??r.find(s=>!X.has(s.adapterType))}var Q=/\bTEs?\b|transpos/i;function Ze(e){return e&&Q.test(l(e))?"TE":"gene"}function en(e,t){let n=e.tracks?.find(r=>A(r.configuration,"trackId")===t)?.displays[0];return n?A(n.configuration,"filter")??[]:[]}var Z=new Set(["chromosome","region","contig","supercontig","scaffold"]),ee=new Set(["exon","CDS","five_prime_UTR","three_prime_UTR","UTR"]);function D(e,t){let n=i(e,"type");typeof n=="string"&&ee.has(n)&&t.push({start:i(e,"start"),end:i(e,"end")});let r=i(e,"subfeatures");for(let s of r??[])D(s,t)}function nn(e){let t=[];for(let n of e){let r=i(n,"gene_name")??i(n,"name")??i(n,"gene")??i(n,"gene_id"),s=i(n,"start"),o=i(n,"end");if(!r||!(o>s)||Z.has(i(n,"type")))continue;let a=[];D(n,a),t.push({name:r,refName:i(n,"refName"),start:s,end:o,strand:i(n,"strand")??0,exons:a.length?T(a):[{start:s,end:o}]})}return E(t)}var g=JBrowseExports["tss-react/mui"],ne=e=>g!=null&&e in Object(g)?g[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from 'tss-react/mui' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var rn=ne("makeStyles"),sn=g&&g.__esModule?g.default:g;export{se as a,M as b,oe as c,ie as d,ae as e,ce as f,ue as g,U as h,Ge as i,Ue as j,q as k,Qe as l,Ze as m,en as n,nn as o,rn as p};
2
- //# sourceMappingURL=chunk-WA7FCDLQ.js.map
2
+ //# sourceMappingURL=chunk-HM7XSNBN.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/graphTrackConfig.ts", "../../src/GraphGenomeView/trackFeatures.ts", "../../src/GraphGenomeView/repeats/repeatFeatures.ts", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-EQDQ7P4Y.js", "../../src/GraphGenomeView/genes/geneFeatures.ts", "host:tss-react/mui"],
3
+ "sources": ["../../src/graphTrackConfig.ts", "../../src/GraphGenomeView/trackFeatures.ts", "../../src/GraphGenomeView/repeats/repeatFeatures.ts", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-EQDQ7P4Y.js", "../../src/GraphGenomeView/genes/geneFeatures.ts", "host:tss-react/mui"],
4
4
  "sourcesContent": ["import {\n getConfAssemblyNamesOrNone,\n toTrackConfigEntry,\n} from '@jbrowse/core/util/tracks'\n\nimport { snapshotNamesFile } from './locationName.ts'\n\nimport type { AnyTrackConfig } from '@jbrowse/core/configuration'\n\nfunction isStringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every(item => typeof item === 'string')\n}\n\n// The assemblies the track names after its reference, which is what core's\n// MultiWaySyntenyDisplay opens a lane-declaring source on.\nexport function trackLanes(track: AnyTrackConfig) {\n const lanes = getConfAssemblyNamesOrNone(track).slice(1)\n return lanes.length > 0 ? lanes : undefined\n}\n\n// Whether a track names a walk file, by the `walksUri` shorthand as written\n// or the location it expands to: an rGFA track may, and a\n// WalkTabixSyntenyAdapter one does\nexport function walkIndexed(adapterConfig: Record<string, unknown>) {\n return (\n adapterConfig.type === 'WalkTabixSyntenyAdapter' ||\n (adapterConfig.type === 'RgfaTabixAdapter' &&\n ((typeof adapterConfig.walksUri === 'string' &&\n adapterConfig.walksUri !== '') ||\n snapshotNamesFile(adapterConfig.walksLocation)))\n )\n}\n\n// Whether a track's cut reads `haplotypes`: a GBZ cut does, and so does an\n// rGFA one with a walk file\nexport function cutsByHaplotype(adapterConfig: Record<string, unknown>) {\n return (\n adapterConfig.type === 'GbzBaseSyntenyAdapter' || walkIndexed(adapterConfig)\n )\n}\n\n// The haplotypes a walk-indexed track's config names to cut for until the\n// user picks others\nexport function configHaplotypes(adapterConfig: Record<string, unknown>) {\n const { defaultHaplotypes } = adapterConfig\n return walkIndexed(adapterConfig) &&\n isStringArray(defaultHaplotypes) &&\n defaultHaplotypes.length > 0\n ? defaultHaplotypes\n : undefined\n}\n\n// A graph is cut on the first assembly its track names, the rule\n// GbzBaseSyntenyAdapter states for its anchor. Every other assembly the track\n// names holds its sequence as rank>0 alleles off that reference's backbone, so\n// a window on one has no reference coordinates to frame the cut by.\nexport function graphReferenceAssembly(track: AnyTrackConfig) {\n return getConfAssemblyNamesOrNone(track)[0]\n}\n\n// A track's adapter config, from a live node or a session's frozen entry\nexport function trackAdapterSnapshot(track: AnyTrackConfig) {\n return toTrackConfigEntry(track).adapter as Record<string, unknown>\n}\n\nexport function offReferenceProblem(\n referenceAssembly: string | undefined,\n assemblyName: string,\n) {\n return referenceAssembly === undefined || referenceAssembly === assemblyName\n ? undefined\n : `The graph is cut on its reference, ${referenceAssembly}: open it from a view of ${referenceAssembly}`\n}\n", "import type { Feature } from '@jbrowse/core/util'\n\nexport type FeatureLike = Feature | Record<string, unknown>\n\nexport function ownField(f: FeatureLike, name: string): unknown {\n return typeof (f as Feature).get === 'function'\n ? (f as Feature).get(name)\n : (f as Record<string, unknown>)[name]\n}\n\nexport interface TrackChoice {\n trackId: string\n name?: string\n adapterType: string\n}\n\nexport function namedTrack<T extends TrackChoice>(tracks: T[], named: string) {\n return tracks.find(t => t.trackId === named)\n}\n\n// what a track-name hint such as /repeat|tandem/ is matched against\nexport function trackLabel(t: TrackChoice) {\n return `${t.trackId} ${t.name ?? ''}`\n}\n", "import { namedTrack, ownField, trackLabel } from '../trackFeatures'\n\nimport type { FeatureLike, TrackChoice } from '../trackFeatures'\n\nexport interface RepeatCall {\n bp: number\n // TRGT's `SD`. Zero means the allele is a copy of the one the reads did\n // support, so its length states nothing about a second haplotype; absent\n // where the genotyper writes no such field.\n spanningReads?: number\n // the PanSN haplotype a phased genotype puts this allele on\n haplotype?: number\n}\n\n// A tandem repeat array as the walk rows need it: its span on the reference,\n// which is what the bars measure between, and its unit length, which is what\n// they tile by. Read off whatever repeat annotation the session has, since the\n// tools all state the same two facts under different names: VCF 4.5's\n// `<CNV:TR>` allele gives `RUL` and `RUS` (one entry per repeat sequence,\n// grouped by `RN`), UCSC simpleRepeat and TRF give `period` and the consensus\n// `sequence`, TRGT gives `MOTIFS` and `TRID`, ExpansionHunter `RU` and `REPID`,\n// HipSTR and GangSTR `PERIOD`, vamos its `motifs`. A VCF record's INFO is\n// searched as well as its top level, and a list's first entry is the unit the\n// bars tile by: for a compound array that is the first repeat sequence, which\n// is the expanding one at every such locus in the common catalogues.\nexport interface RepeatArray {\n key: string\n name: string\n refName: string\n start: number\n end: number\n unit: number\n motif?: string\n // Each sample's genotyped alleles, from a genotyper's per-sample `AL`\n // (TRGT) or a genotype over VCF 4.5 <CNV:TR> alleles; absent from a\n // catalogue.\n calls?: Record<string, RepeatCall[]>\n}\n\nexport const REPEAT_ADAPTER_TYPES = new Set([\n 'BedAdapter',\n 'BedTabixAdapter',\n 'BigBedAdapter',\n 'VcfAdapter',\n 'VcfTabixAdapter',\n])\n\nexport const REPEAT_TRACK_HINT =\n /repeat|tandem|\\bstr\\b|vntr|trf|trgt|vamos|expansion|microsat/i\n\nexport function pickRepeatTrack<T extends TrackChoice>(\n tracks: T[],\n named: string,\n) {\n const chosen = named ? namedTrack(tracks, named) : undefined\n if (chosen) {\n return chosen\n }\n const candidates = tracks.filter(t => REPEAT_ADAPTER_TYPES.has(t.adapterType))\n return candidates.find(t => REPEAT_TRACK_HINT.test(trackLabel(t)))\n}\n\n// A TRGT repeat catalogue is a BED whose name column packs the record:\n// `ID=HTT;MOTIFS=CAG,CCG;STRUC=(CAG)nCAACAG(CCG)n`. Read as fields when it\n// has that shape.\nconst PACKED_NAME = /^\\w+=[^;]*(;\\w+=[^;]*)*$/\n\nfunction packedName(f: FeatureLike) {\n const name = ownField(f, 'name')\n if (typeof name !== 'string' || !PACKED_NAME.test(name)) {\n return undefined\n }\n return Object.fromEntries(\n name.split(';').map(pair => {\n const i = pair.indexOf('=')\n return [pair.slice(0, i), pair.slice(i + 1)]\n }),\n )\n}\n\n// A field at the feature's top level, in a VCF record's INFO, or in a packed\n// name column, in that order.\nfunction field(f: FeatureLike, name: string): unknown {\n const top = ownField(f, name)\n if (top !== undefined) {\n return top\n }\n const info = ownField(f, 'INFO') as Record<string, unknown> | undefined\n return info?.[name] ?? packedName(f)?.[name]\n}\n\nconst MOTIF_FIELDS = [\n 'RUS',\n 'MOTIFS',\n 'RU',\n 'motifs',\n 'motif',\n 'sequence',\n 'consensus',\n]\nconst PERIOD_FIELDS = [\n 'RUL',\n 'period',\n 'PERIOD',\n 'consensusSize',\n 'unit',\n 'unitLength',\n]\nconst NAME_FIELDS = ['TRID', 'REPID', 'VARID', 'ID', 'name', 'id']\n\n// The first entry of a list-valued field, whether it arrived parsed or as\n// the comma-joined text a VCF INFO or a BED column holds; VCF's missing \".\"\n// counts as absent.\nfunction first(f: FeatureLike, names: string[]) {\n for (const name of names) {\n const value = field(f, name)\n const one = String((Array.isArray(value) ? value[0] : value) ?? '')\n .split(',')[0]!\n .trim()\n if (one !== '' && one !== '.') {\n return one\n }\n }\n return undefined\n}\n\nconst IUPAC = /^[ACGTURYSWKMBDHVN]+$/i\n\n// The unit in bp: a stated period, else the length of the first motif.\nexport function repeatUnitOf(f: FeatureLike) {\n const period = Number(first(f, PERIOD_FIELDS))\n if (Number.isFinite(period) && period > 0) {\n return Math.round(period)\n }\n const motif = first(f, MOTIF_FIELDS)\n return motif && IUPAC.test(motif) ? motif.length : undefined\n}\n\n// A per-sample list field, parsed or as the comma-joined text a VCF column\n// holds. A missing entry stays missing: read as 0, an absent `SD` would make\n// every allele of every genotyper that writes no such field unspanned.\nfunction numbers(value: unknown) {\n const raw: unknown[] = Array.isArray(value)\n ? value\n : String(value ?? '').split(',')\n return raw.map(one => {\n const n =\n one === '' || one === null || one === undefined ? NaN : Number(one)\n return Number.isFinite(n) ? n : undefined\n })\n}\n\nfunction strings(value: unknown) {\n const raw: unknown[] = Array.isArray(value)\n ? value\n : String(value ?? '').split(',')\n return raw.map(one => {\n const text = String(one ?? '').trim()\n return text === '' || text === '.' ? undefined : text\n })\n}\n\nconst TANDEM_REPEAT = '<CNV:TR>'\n\n// Each ALT allele's length, off VCF 4.5's flattened list-of-lists: RN says how\n// many RUS/RUL/RUC/RB entries each allele takes, and the allele's bases are\n// its runs' RB, or unit length times count where RB is missing. An allele that\n// is not <CNV:TR>, or has a run stating neither, has none.\nfunction tandemAlleleBp(f: FeatureLike) {\n const alts = strings(ownField(f, 'ALT'))\n if (!alts.includes(TANDEM_REPEAT)) {\n return undefined\n }\n const rn = numbers(field(f, 'RN'))\n const rus = strings(field(f, 'RUS'))\n const rul = numbers(field(f, 'RUL'))\n const ruc = numbers(field(f, 'RUC'))\n const rb = numbers(field(f, 'RB'))\n let k = 0\n return alts.map((alt, i) => {\n const n = rn[i] ?? (alt === TANDEM_REPEAT ? 1 : 0)\n let bp = 0\n let known = 0\n for (let j = 0; j < n; j++, k++) {\n const motif = rus[k]\n const unitLength =\n rul[k] ?? (motif && IUPAC.test(motif) ? motif.length : undefined)\n const count = ruc[k]\n const runBp =\n rb[k] ??\n (unitLength && count !== undefined\n ? Math.round(unitLength * count)\n : undefined)\n if (runBp !== undefined) {\n bp += runBp\n known++\n }\n }\n return alt === TANDEM_REPEAT && n > 0 && known === n ? bp : undefined\n })\n}\n\n// A sample's alleles through its genotype: 0 is the reference's, an index\n// past it the ALT allele's. A phased genotype's k-th allele is PanSN\n// haplotype k, the order vg deconstruct writes an assembly's haplotypes in.\nfunction genotyped(\n gt: string | undefined,\n alleleBp: (number | undefined)[],\n referenceBp: number,\n) {\n const phased = gt?.includes('|')\n return (gt ?? '').split(/[/|]/).flatMap((index, k): RepeatCall[] => {\n const i = index === '' ? NaN : Number(index)\n const bp = i > 0 ? alleleBp[i - 1] : referenceBp\n if (!Number.isInteger(i) || bp === undefined) {\n return []\n }\n return [{ bp, ...(phased ? { haplotype: k + 1 } : {}) }]\n })\n}\n\nfunction callsOf(\n f: FeatureLike,\n alleleBp: (number | undefined)[] | undefined,\n referenceBp: number,\n) {\n const samples = ownField(f, 'samples') as\n Record<string, Record<string, unknown>> | undefined\n const called: Record<string, RepeatCall[]> = {}\n for (const [sample, fields] of Object.entries(samples ?? {})) {\n const reads = numbers(fields.SD)\n const lengths = numbers(fields.AL).flatMap((bp, i) =>\n bp !== undefined && bp > 0\n ? [reads[i] === undefined ? { bp } : { bp, spanningReads: reads[i] }]\n : [],\n )\n const calls =\n lengths.length > 0 || !alleleBp\n ? lengths\n : genotyped(strings(fields.GT)[0], alleleBp, referenceBp)\n if (calls.length > 0) {\n called[sample] = calls\n }\n }\n return Object.keys(called).length > 0 ? called : undefined\n}\n\n// A <CNV:TR> record's POS is the base before the array and SVLEN the\n// reference allele's length, while a VCF feature starts at that padding base.\nfunction spanOf(f: FeatureLike, tandem: boolean) {\n const start = field(f, 'start') as number\n const end = field(f, 'end') as number\n const svlen = numbers(field(f, 'SVLEN'))[0]\n return tandem && svlen !== undefined\n ? { start: start + 1, end: start + 1 + svlen }\n : { start, end }\n}\n\nexport function repeatArraysFrom(features: FeatureLike[]): RepeatArray[] {\n const arrays: RepeatArray[] = []\n for (const f of features) {\n const alleleBp = tandemAlleleBp(f)\n const { start, end } = spanOf(f, alleleBp !== undefined)\n const unit = repeatUnitOf(f)\n if (!(end > start) || unit === undefined) {\n continue\n }\n const refName = field(f, 'refName') as string\n const motif = first(f, MOTIF_FIELDS)\n const stated = first(f, NAME_FIELDS)\n arrays.push({\n key: `${refName}:${start}-${end}`,\n name:\n (stated && !PACKED_NAME.test(stated) ? stated : undefined) ??\n (motif && motif.length <= 12\n ? `(${motif})n`\n : `${refName}:${(start + 1).toLocaleString('en-US')}-${end.toLocaleString('en-US')}`),\n refName,\n start,\n end,\n unit,\n motif,\n calls: callsOf(f, alleleBp, end - start),\n })\n }\n return arrays.sort((a, b) => a.start - b.start)\n}\n", "// src/genes/geneFiles.ts\nvar GENE_TYPE = /(gene|gene_segment|RNA|transcript)$/i;\nvar isGene = (type) => GENE_TYPE.test(type) || type === \"CDS\" || type === \"exon\";\nfunction mergedIntervals(intervals) {\n const out = [];\n for (const iv of [...intervals].sort((a, b) => a.start - b.start)) {\n const last = out.at(-1);\n if (last && iv.start <= last.end) {\n last.end = Math.max(last.end, iv.end);\n } else {\n out.push({ ...iv });\n }\n }\n return out;\n}\nfunction strandOf(s) {\n return s === \"+\" ? 1 : s === \"-\" ? -1 : 0;\n}\nfunction unescape(value) {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\nfunction attributes(column) {\n const out = /* @__PURE__ */ new Map();\n for (const pair of column.split(\";\")) {\n const eq = pair.indexOf(\"=\");\n if (eq > 0) {\n out.set(pair.slice(0, eq).trim(), unescape(pair.slice(eq + 1).trim()));\n }\n }\n return out;\n}\nfunction gff3Row(line) {\n const cols = line.split(\"\t\");\n const start = Number(cols[3]);\n const end = Number(cols[4]);\n if (cols.length < 9 || !Number.isInteger(start) || !Number.isInteger(end)) {\n return void 0;\n }\n return {\n refName: cols[0],\n type: cols[2],\n start: start - 1,\n end,\n strand: strandOf(cols[6]),\n attrs: attributes(cols[8])\n };\n}\nfunction genesFromGff3Lines(lines) {\n const rows = [];\n for (const line of lines) {\n if (line.startsWith(\"##FASTA\")) {\n break;\n }\n const row = line.startsWith(\"#\") ? void 0 : gff3Row(line);\n if (row) {\n rows.push(row);\n }\n }\n const parentOf = /* @__PURE__ */ new Map();\n for (const { attrs } of rows) {\n const id = attrs.get(\"ID\");\n const parent = attrs.get(\"Parent\")?.split(\",\")[0];\n if (id && parent) {\n parentOf.set(id, parent);\n }\n }\n const rootOf = (row) => {\n let id = row.attrs.get(\"Parent\")?.split(\",\")[0] ?? row.attrs.get(\"ID\");\n if (!id) {\n return row.attrs.get(\"gene_id\");\n }\n const seen = /* @__PURE__ */ new Set();\n while (id && parentOf.has(id) && !seen.has(id)) {\n seen.add(id);\n id = parentOf.get(id);\n }\n return id;\n };\n const groups = /* @__PURE__ */ new Map();\n rows.forEach((row, i) => {\n const root = rootOf(row) ?? `#${i}`;\n const key = `${row.refName}\t${root}`;\n const group = groups.get(key) ?? groups.set(key, { rows: [] }).get(key);\n group.rows.push(row);\n if (!row.attrs.has(\"Parent\") && !group.top) {\n group.top = row;\n }\n });\n const genes = [];\n for (const [key, { top, rows: rows2 }] of groups) {\n if (top && !isGene(top.type)) {\n continue;\n }\n const first = top ?? rows2[0];\n const start = top?.start ?? Math.min(...rows2.map((r) => r.start));\n const end = top?.end ?? Math.max(...rows2.map((r) => r.end));\n const a = first.attrs;\n const spans = (type) => rows2.filter((r) => r.type === type).map((r) => ({ start: r.start, end: r.end }));\n const exons = spans(\"exon\");\n const coding = spans(\"CDS\");\n const transcribed = rows2.some(\n (r) => r !== top && r.type !== \"exon\" && r.type !== \"CDS\"\n );\n genes.push({\n name: a.get(\"Name\") ?? a.get(\"gene_name\") ?? a.get(\"gene\") ?? a.get(\"gene_id\") ?? key.split(\"\t\")[1],\n refName: first.refName,\n start,\n end,\n strand: first.strand,\n // A range read holds only the rows over its window, so a gene with\n // transcripts but no exon or CDS there is intronic in it. Only a gene\n // with no transcripts, as a bacterium's gene and CDS, is one exon.\n exons: exons.length ? mergedIntervals(exons) : transcribed ? mergedIntervals(coding) : [{ start, end }]\n });\n }\n return genes;\n}\nfunction mergeOverlappingByName(genes) {\n const out = [];\n const open = /* @__PURE__ */ new Map();\n for (const g of [...genes].sort((a, b) => a.start - b.start)) {\n const key = `${g.refName}\t${g.strand}\t${g.name}`;\n const last = open.get(key);\n if (last && g.start < last.end) {\n last.end = Math.max(last.end, g.end);\n last.exons = mergedIntervals([...last.exons, ...g.exons]);\n } else {\n const gene = { ...g, exons: mergedIntervals(g.exons) };\n out.push(gene);\n open.set(key, gene);\n }\n }\n return out;\n}\nvar BED_HEADER = /^(#|track\\s|browser\\s)/;\nfunction genesFromBed(text) {\n const rows = [];\n for (const line of text.split(\"\\n\")) {\n const cols = line.replace(/\\r$/, \"\").split(\"\t\");\n const start = Number(cols[1]);\n const end = Number(cols[2]);\n if (BED_HEADER.test(line) || cols.length < 3 || !Number.isInteger(start) || !(end > start)) {\n continue;\n }\n const refName = cols[0];\n const name = cols[3] && cols[3] !== \".\" ? cols[3] : `${refName}:${start + 1}-${end}`;\n const sizes = cols[10]?.split(\",\").filter((s) => s !== \"\").map(Number);\n const starts = cols[11]?.split(\",\").filter((s) => s !== \"\").map(Number);\n const blocks = sizes?.length && sizes.length === starts?.length ? sizes.map((size, i) => ({\n start: start + starts[i],\n end: start + starts[i] + size\n })) : [{ start, end }];\n rows.push({\n name,\n refName,\n start,\n end,\n strand: strandOf(cols[5]),\n exons: blocks\n });\n }\n return mergeOverlappingByName(rows);\n}\nfunction sniffedFormat(text) {\n const first = text.split(\"\\n\", 1e3).find((l) => l.trim() !== \"\" && !BED_HEADER.test(l));\n const cols = first?.split(\"\t\") ?? [];\n return /^\\d+$/.test(cols[1] ?? \"\") && /^\\d+$/.test(cols[2] ?? \"\") ? \"bed\" : \"gff3\";\n}\nfunction genesFromText(text, format = sniffedFormat(text)) {\n return format === \"bed\" ? genesFromBed(text) : genesFromGff3Lines(text.split(/\\r?\\n/));\n}\n\nexport {\n mergedIntervals,\n genesFromGff3Lines,\n mergeOverlappingByName,\n genesFromBed,\n genesFromText\n};\n", "import {\n mergeOverlappingByName,\n mergedIntervals,\n} from '@jbrowse/bandage-core/genes/geneFiles'\nimport { readConfObject } from '@jbrowse/core/configuration'\n\nimport { REPEAT_TRACK_HINT } from '../repeats/repeatFeatures'\nimport { namedTrack, ownField, trackLabel } from '../trackFeatures'\n\nimport type { FeatureLike, TrackChoice } from '../trackFeatures'\nimport type { GeneModel } from '@jbrowse/bandage-core/genes/genePins'\nimport type { AnyConfigurationModel } from '@jbrowse/core/configuration'\n\n// The adapters whose tracks hold gene models, in the order the session's\n// tracks are searched when no track is named.\nexport const GENE_ADAPTER_TYPES = new Set([\n 'Gff3TabixAdapter',\n 'Gff3Adapter',\n 'BedTabixAdapter',\n 'BedAdapter',\n 'GtfTabixAdapter',\n 'GtfAdapter',\n 'BigBedAdapter',\n 'NCListAdapter',\n])\n\nconst GENE_TRACK_HINT = /gene|refseq|gencode|ensembl|annotation/i\n\n// A BED track is as often peaks or repeats as genes, so one counts only where\n// its name says it is annotation\nconst BED_ADAPTER_TYPES = new Set(['BedTabixAdapter', 'BedAdapter'])\n\n// Which of the session's tracks to read genes from: the named one while the\n// assembly has it (a saved pick can name a track since removed), else the\n// first gene-bearing track on the assembly whose name says it is annotation,\n// else the first non-BED gene-bearing track. A track whose name says repeats is\n// never picked unnamed, as \"RepeatMasker annotation\" would be.\nexport function pickGeneTrack<T extends TrackChoice>(\n tracks: T[],\n named: string,\n) {\n const chosen = named ? namedTrack(tracks, named) : undefined\n if (chosen) {\n return chosen\n }\n const candidates = tracks.filter(\n t =>\n GENE_ADAPTER_TYPES.has(t.adapterType) &&\n !REPEAT_TRACK_HINT.test(trackLabel(t)),\n )\n return (\n candidates.find(t => GENE_TRACK_HINT.test(trackLabel(t))) ??\n candidates.find(t => !BED_ADAPTER_TYPES.has(t.adapterType))\n )\n}\n\nconst TE_TRACK_HINT = /\\bTEs?\\b|transpos/i\n\n// What a walk row's boxes are, for the key: TEs where the annotation track's\n// name says so, else genes\nexport function annotationNoun(track: TrackChoice | undefined) {\n return track && TE_TRACK_HINT.test(trackLabel(track)) ? 'TE' : 'gene'\n}\n\ninterface LaneView {\n tracks?: readonly {\n configuration: AnyConfigurationModel\n displays: readonly { configuration: AnyConfigurationModel }[]\n }[]\n}\n\n// The `filter` of the gene track's lane in the view the graph is drawn in, so\n// the chips name what the lane draws. None where the view shows no such lane,\n// or has no tracks, as a graph genome view of its own.\nexport function laneFilters(view: object, trackId: string | undefined) {\n const lane = (view as LaneView).tracks?.find(\n t => readConfObject(t.configuration, 'trackId') === trackId,\n )?.displays[0]\n return lane\n ? ((readConfObject(lane.configuration, 'filter') as string[] | undefined) ??\n [])\n : []\n}\n\n// Records spanning a whole sequence, the types the GFF3 adapter declines to\n// widen a fetch for. RefSeq opens every molecule with a `region` named\n// ANONYMOUS.\nconst WHOLE_SEQUENCE_TYPES = new Set([\n 'chromosome',\n 'region',\n 'contig',\n 'supercontig',\n 'scaffold',\n])\n\n// JBrowse's BED parser splits a coding BED12 block into CDS and UTR parts and\n// keeps `exon` for non-coding ones, so all of them are exon\nconst EXON_PARTS = new Set([\n 'exon',\n 'CDS',\n 'five_prime_UTR',\n 'three_prime_UTR',\n 'UTR',\n])\n\nfunction exonsOf(f: FeatureLike, into: { start: number; end: number }[]) {\n const type = ownField(f, 'type')\n if (typeof type === 'string' && EXON_PARTS.has(type)) {\n into.push({\n start: ownField(f, 'start') as number,\n end: ownField(f, 'end') as number,\n })\n }\n const children = ownField(f, 'subfeatures') as FeatureLike[] | undefined\n for (const child of children ?? []) {\n exonsOf(child, into)\n }\n}\n\n// Genes from a track's features: every top-level feature but a whole-sequence\n// record, named by the first of gene_name, name, gene and gene_id it carries,\n// with the exons found anywhere under it merged. A feature with no exons is one exon,\n// its whole span. A BED track gives one feature per transcript, so a name's\n// overlapping features merge, while its copies down the contig stay apart.\n// UCSC's ncbiRefSeq.gff gene records carry their symbol only as gene_id. A\n// feature with none of those names is left out: its raw ID, RefSeq's\n// `id-NC_000913.3:1978503..1979270`, only restates where it is.\nexport function geneModelsFrom(features: FeatureLike[]): GeneModel[] {\n const genes: GeneModel[] = []\n for (const f of features) {\n const name =\n (ownField(f, 'gene_name') as string | undefined) ??\n (ownField(f, 'name') as string | undefined) ??\n (ownField(f, 'gene') as string | undefined) ??\n (ownField(f, 'gene_id') as string | undefined)\n const start = ownField(f, 'start') as number\n const end = ownField(f, 'end') as number\n if (\n !name ||\n !(end > start) ||\n WHOLE_SEQUENCE_TYPES.has(ownField(f, 'type') as string)\n ) {\n continue\n }\n const exons: { start: number; end: number }[] = []\n exonsOf(f, exons)\n genes.push({\n name,\n refName: ownField(f, 'refName') as string,\n start,\n end,\n strand: (ownField(f, 'strand') as number | undefined) ?? 0,\n exons: exons.length ? mergedIntervals(exons) : [{ start, end }],\n })\n }\n return mergeOverlappingByName(genes)\n}\n", "const host = JBrowseExports[\"tss-react/mui\"]\nconst read = name =>\n host != null && name in Object(host)\n ? host[name]\n : Object.assign(\n function () {\n throw new Error(\n \"This JBrowse does not provide '\" + name + \"' from '\" + \"tss-react/mui\" + \"' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse\",\n )\n },\n { jbrowseHostMissing: name },\n )\nexport const cx = /* @__PURE__ */ read(\"cx\")\nexport const keyframes = /* @__PURE__ */ read(\"keyframes\")\nexport const makeStyles = /* @__PURE__ */ read(\"makeStyles\")\nexport default host && host.__esModule ? host.default : host"],
5
5
  "mappings": "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",
6
6
  "names": ["isStringArray", "value", "item", "trackLanes", "track", "lanes", "getConfAssemblyNamesOrNone", "walkIndexed", "adapterConfig", "snapshotNamesFile", "cutsByHaplotype", "configHaplotypes", "defaultHaplotypes", "graphReferenceAssembly", "trackAdapterSnapshot", "toTrackConfigEntry", "offReferenceProblem", "referenceAssembly", "assemblyName", "ownField", "f", "name", "namedTrack", "tracks", "named", "t", "trackLabel", "REPEAT_ADAPTER_TYPES", "REPEAT_TRACK_HINT", "pickRepeatTrack", "tracks", "named", "chosen", "namedTrack", "t", "trackLabel", "PACKED_NAME", "packedName", "f", "name", "ownField", "pair", "i", "field", "top", "MOTIF_FIELDS", "PERIOD_FIELDS", "NAME_FIELDS", "first", "names", "value", "one", "IUPAC", "repeatUnitOf", "period", "motif", "numbers", "n", "strings", "text", "TANDEM_REPEAT", "tandemAlleleBp", "alts", "rn", "rus", "rul", "ruc", "rb", "k", "alt", "bp", "known", "j", "unitLength", "count", "runBp", "genotyped", "gt", "alleleBp", "referenceBp", "phased", "index", "callsOf", "samples", "called", "sample", "fields", "reads", "lengths", "calls", "spanOf", "tandem", "start", "end", "svlen", "repeatArraysFrom", "features", "arrays", "unit", "refName", "stated", "a", "b", "mergedIntervals", "intervals", "out", "iv", "a", "b", "last", "mergeOverlappingByName", "genes", "out", "open", "g", "a", "b", "key", "last", "mergedIntervals", "gene", "GENE_ADAPTER_TYPES", "GENE_TRACK_HINT", "BED_ADAPTER_TYPES", "pickGeneTrack", "tracks", "named", "chosen", "namedTrack", "candidates", "t", "REPEAT_TRACK_HINT", "trackLabel", "TE_TRACK_HINT", "annotationNoun", "track", "laneFilters", "view", "trackId", "lane", "readConfObject", "WHOLE_SEQUENCE_TYPES", "EXON_PARTS", "exonsOf", "f", "into", "type", "ownField", "children", "child", "geneModelsFrom", "features", "genes", "name", "start", "end", "exons", "mergedIntervals", "mergeOverlappingByName", "host", "read", "name", "makeStyles", "read", "mui_default", "host"]
@@ -1,2 +1,2 @@
1
- import{i as M,l as W,p as F}from"./chunk-WA7FCDLQ.js";import{b as O,h as A}from"./chunk-PMM6BEKY.js";import{K as b,Q as _,X as B}from"./chunk-NSBH4FIW.js";import{f as R}from"./chunk-NIEZKWQV.js";import{D as E,E as P,H as m,d as v,o as T,q as I,r as L,s as w,t as N,w as D,y as G,z as x}from"./chunk-5Z4VIKXZ.js";import{b as t,c as r,d as C}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:d,sx:p,disabled:a,title:h,shown:g,onChange:z}){let k=R();return r(w,{size:d,sx:p,disabled:a,title:h,children:[t(D,{id:k,shrink:!0,children:o}),t(E,{labelId:k,value:n,label:o,notched:!0,displayEmpty:!0,"data-testid":s,renderValue:i=>g??e.find(H=>H.value===i)?.label??i,onChange:i=>{z(i.target.value)},children:e.map(i=>t(x,{value:i.value,disabled:i.disabled,title:i.disabled?void 0:i.description,children:t(G,{primary:i.label,secondary:i.disabled?i.description:void 0})},i.value))})]})}var u=F()({section:{marginBottom:24},group:{marginBottom:16},heading:{marginBottom:8}});function l({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 r("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:d}=u();return r("div",{className:d.section,children:[t(N,{control:t(P,{checked:n,onChange:p=>{e(p.target.checked)}}),label:o}),s]})}function c({children:o,...n}){let{classes:e}=u();return r("div",{className:e.section,children:[t(f,{sx:{minWidth:200},...n}),o]})}var Y=[5e3,2e4,5e4,1e5];function $(o){return[...new Set([...Y,o])].sort((n,e)=>n-e).map(n=>({value:String(n),label:n.toLocaleString()}))}function Q({label:o,choices:n,stored:e,auto:s,testId:d,onChange:p,children:a}){return n.length>0?t(c,{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:d,onChange:p,children:a}):null}var q=C(function(n){let{model:e,onClose:s,children:d}=n,{classes:p}=u();return r(v,{open:!0,onClose:s,title:"Graph settings",children:[r(L,{children:[r(y,{title:"Subgraph",children:[d,t(c,{label:"Node limit",value:String(e.maxGraphNodes),options:$(e.maxGraphNodes),testId:"graph-node-limit-select",onChange:a=>{e.setMaxGraphNodes(Number(a))},children:t(l,{children:"The most nodes a layout draws; past it the graph is declined. Walk rows take no limit."})})]}),r(y,{title:"Drawing",children:[e.anchorPaths.length>1?t(c,{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(l,{children:"The path the anchored layouts place x along"})}):null,t(c,{label:"Node width",value:e.nodeWidth,options:_,testId:"graph-node-width-select",onChange:a=>{e.setNodeWidth(a)},children:t(l,{children:"Depth as width. In a cut with walks, depth is how many haplotypes carry the node."})}),t(c,{label:"Link width",value:e.linkWidth,options:B,testId:"graph-link-width-select",onChange:a=>{e.setLinkWidth(a)},children:t(l,{children:"Walks as width, so a common route reads heavy and a private one thin."})}),r(U,{label:"Draw paths",checked:e.drawPaths,onChange:a=>{e.setLayer("paths",a)},children:[t(l,{children:"Color each node by the paths through it, one lane per path"}),e.drawPaths&&!e.effectiveDrawPaths?t(l,{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(Q,{label:"Gene track",choices:e.geneTrackChoices,stored:e.geneTrackId,auto:W(e.geneTrackChoices,""),testId:"graph-gene-track-select",onChange:a=>{e.setGeneTrackId(a)},children:t(l,{children:"Where genes on the backbone come from"})}),t(Q,{label:"Repeat track",choices:e.repeatTrackChoices,stored:e.repeatTrackId,auto:M(e.repeatTrackChoices,""),testId:"graph-repeat-track-select",onChange:a=>{e.setRepeatTrackId(a)},children:t(l,{children:"The tandem repeat annotation walk rows measure and tile by"})})]}),r(y,{title:"Force-directed layout",children:[e.hasGraph&&!e.usesLayoutEngine?t("div",{className:p.section,children:t(l,{warn:!0,children:"No effect on the current layout until Layout is Force-directed"})}):null,t(c,{label:"Engine",value:e.layoutEngine,options:O,testId:"graph-layout-engine-select",onChange:a=>{e.setLayoutEngine(a)},children:t(l,{children:"Stress keeps the reference straight, so a zoom keeps the picture; FMMM lets the whole graph settle."})}),t(c,{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(l,{children:"The engine's iteration budget; higher is slower"})}),t(c,{label:"Bubble spread",value:e.bubbleSpread,options:A,testId:"graph-bubble-spread-select",onChange:a=>{e.setBubbleSpread(a)},children:t(l,{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(l,{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"})})]})}),ge=q;export{f as a,ge as b};
2
- //# sourceMappingURL=chunk-IUBWMYUA.js.map
1
+ import{i as M,l as W,p as F}from"./chunk-HM7XSNBN.js";import{b as O,h as A}from"./chunk-2FCFK2B5.js";import{K as b,Q as _,X as B}from"./chunk-ZWRAQSXC.js";import{f as R}from"./chunk-NIEZKWQV.js";import{D as E,E as P,H as m,d as v,o as T,q as I,r as L,s as w,t as N,w as D,y as G,z as x}from"./chunk-5Z4VIKXZ.js";import{b as t,c as r,d as C}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:d,sx:p,disabled:a,title:h,shown:g,onChange:z}){let k=R();return r(w,{size:d,sx:p,disabled:a,title:h,children:[t(D,{id:k,shrink:!0,children:o}),t(E,{labelId:k,value:n,label:o,notched:!0,displayEmpty:!0,"data-testid":s,renderValue:i=>g??e.find(H=>H.value===i)?.label??i,onChange:i=>{z(i.target.value)},children:e.map(i=>t(x,{value:i.value,disabled:i.disabled,title:i.disabled?void 0:i.description,children:t(G,{primary:i.label,secondary:i.disabled?i.description:void 0})},i.value))})]})}var u=F()({section:{marginBottom:24},group:{marginBottom:16},heading:{marginBottom:8}});function l({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 r("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:d}=u();return r("div",{className:d.section,children:[t(N,{control:t(P,{checked:n,onChange:p=>{e(p.target.checked)}}),label:o}),s]})}function c({children:o,...n}){let{classes:e}=u();return r("div",{className:e.section,children:[t(f,{sx:{minWidth:200},...n}),o]})}var Y=[5e3,2e4,5e4,1e5];function $(o){return[...new Set([...Y,o])].sort((n,e)=>n-e).map(n=>({value:String(n),label:n.toLocaleString()}))}function Q({label:o,choices:n,stored:e,auto:s,testId:d,onChange:p,children:a}){return n.length>0?t(c,{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:d,onChange:p,children:a}):null}var q=C(function(n){let{model:e,onClose:s,children:d}=n,{classes:p}=u();return r(v,{open:!0,onClose:s,title:"Graph settings",children:[r(L,{children:[r(y,{title:"Subgraph",children:[d,t(c,{label:"Node limit",value:String(e.maxGraphNodes),options:$(e.maxGraphNodes),testId:"graph-node-limit-select",onChange:a=>{e.setMaxGraphNodes(Number(a))},children:t(l,{children:"The most nodes a layout draws; past it the graph is declined. Walk rows take no limit."})})]}),r(y,{title:"Drawing",children:[e.anchorPaths.length>1?t(c,{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(l,{children:"The path the anchored layouts place x along"})}):null,t(c,{label:"Node width",value:e.nodeWidth,options:_,testId:"graph-node-width-select",onChange:a=>{e.setNodeWidth(a)},children:t(l,{children:"Depth as width. In a cut with walks, depth is how many haplotypes carry the node."})}),t(c,{label:"Link width",value:e.linkWidth,options:B,testId:"graph-link-width-select",onChange:a=>{e.setLinkWidth(a)},children:t(l,{children:"Walks as width, so a common route reads heavy and a private one thin."})}),r(U,{label:"Draw paths",checked:e.drawPaths,onChange:a=>{e.setLayer("paths",a)},children:[t(l,{children:"Color each node by the paths through it, one lane per path"}),e.drawPaths&&!e.effectiveDrawPaths?t(l,{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(Q,{label:"Gene track",choices:e.geneTrackChoices,stored:e.geneTrackId,auto:W(e.geneTrackChoices,""),testId:"graph-gene-track-select",onChange:a=>{e.setGeneTrackId(a)},children:t(l,{children:"Where genes on the backbone come from"})}),t(Q,{label:"Repeat track",choices:e.repeatTrackChoices,stored:e.repeatTrackId,auto:M(e.repeatTrackChoices,""),testId:"graph-repeat-track-select",onChange:a=>{e.setRepeatTrackId(a)},children:t(l,{children:"The tandem repeat annotation walk rows measure and tile by"})})]}),r(y,{title:"Force-directed layout",children:[e.hasGraph&&!e.usesLayoutEngine?t("div",{className:p.section,children:t(l,{warn:!0,children:"No effect on the current layout until Layout is Force-directed"})}):null,t(c,{label:"Engine",value:e.layoutEngine,options:O,testId:"graph-layout-engine-select",onChange:a=>{e.setLayoutEngine(a)},children:t(l,{children:"Stress keeps the reference straight, so a zoom keeps the picture; FMMM lets the whole graph settle."})}),t(c,{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(l,{children:"The engine's iteration budget; higher is slower"})}),t(c,{label:"Bubble spread",value:e.bubbleSpread,options:A,testId:"graph-bubble-spread-select",onChange:a=>{e.setBubbleSpread(a)},children:t(l,{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(l,{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"})})]})}),ge=q;export{f as a,ge as b};
2
+ //# sourceMappingURL=chunk-IQQOJGX3.js.map