jbrowse-plugin-graphgenomeviewer 8.3.0 → 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.
- package/README.md +7 -2
- package/dist/chunks/{GbzBaseSyntenyAdapter-EJIR3HZM.js → GbzBaseSyntenyAdapter-W5J3E5VT.js} +2 -2
- package/dist/chunks/{GbzBaseSyntenyAdapter-EJIR3HZM.js.map → GbzBaseSyntenyAdapter-W5J3E5VT.js.map} +1 -1
- package/dist/chunks/{GraphGenomeView-2AKRM74B.js → GraphGenomeView-NLPWMIBS.js} +2 -2
- package/dist/chunks/{GraphTrackSettingsDialog-7XRZQW6T.js → GraphTrackSettingsDialog-7LHAOYX3.js} +2 -2
- package/dist/chunks/{HighlightColorDialog-LCBGD2ZA.js → HighlightColorDialog-YQEMRPZ6.js} +2 -2
- package/dist/chunks/{LinearGraphDisplay-WWQ73BO5.js → LinearGraphDisplay-BEU7V4JU.js} +2 -2
- package/dist/chunks/{MinigraphBubbleAdapter-4OOBJ44C.js → MinigraphBubbleAdapter-FZZLY3ZI.js} +2 -2
- package/dist/chunks/{RgfaTabixAdapter-CEGFN2QY.js → RgfaTabixAdapter-DXBQEVFS.js} +2 -2
- package/dist/chunks/{WalkFormsAdapter-LTAKACZD.js → WalkFormsAdapter-ZKZ5PUYO.js} +2 -2
- package/dist/chunks/{WalkTabixSyntenyAdapter-B6V3YNW7.js → WalkTabixSyntenyAdapter-HEGPYGKB.js} +2 -2
- package/dist/chunks/{chunk-T2VC3EEL.js → chunk-2FCFK2B5.js} +1 -1
- package/dist/chunks/{chunk-T2VC3EEL.js.map → chunk-2FCFK2B5.js.map} +1 -1
- package/dist/chunks/{chunk-PTOKTIQG.js → chunk-5X3OZSDO.js} +2 -2
- package/dist/chunks/chunk-D6NFDQQI.js +4 -0
- package/dist/chunks/chunk-D6NFDQQI.js.map +7 -0
- package/dist/chunks/chunk-D7MOOK6H.js +4 -0
- package/dist/chunks/chunk-D7MOOK6H.js.map +7 -0
- package/dist/chunks/chunk-EINURNZ6.js +2 -0
- package/dist/chunks/chunk-EKIQ3ATV.js +2 -0
- package/dist/chunks/chunk-EKIQ3ATV.js.map +7 -0
- package/dist/chunks/{chunk-WUOXZAGN.js → chunk-HM7XSNBN.js} +1 -1
- package/dist/chunks/{chunk-WUOXZAGN.js.map → chunk-HM7XSNBN.js.map} +1 -1
- package/dist/chunks/{chunk-UECOGSWM.js → chunk-IQQOJGX3.js} +2 -2
- package/dist/chunks/{chunk-UECOGSWM.js.map → chunk-IQQOJGX3.js.map} +1 -1
- package/dist/chunks/{chunk-CZXJXNZN.js → chunk-JTOW3TOE.js} +2 -2
- package/dist/chunks/{chunk-UHV6XIDG.js → chunk-KM2INI7Q.js} +2 -2
- package/dist/chunks/{chunk-UHV6XIDG.js.map → chunk-KM2INI7Q.js.map} +1 -1
- package/dist/chunks/{chunk-OGXVDZPS.js → chunk-MFMAQO3W.js} +2 -2
- package/dist/chunks/{chunk-OGXVDZPS.js.map → chunk-MFMAQO3W.js.map} +1 -1
- package/dist/chunks/{chunk-IK3MQ4ZJ.js → chunk-MNFL7BAC.js} +2 -2
- package/dist/chunks/{chunk-IK3MQ4ZJ.js.map → chunk-MNFL7BAC.js.map} +1 -1
- package/dist/chunks/{chunk-CNCYMJ5E.js → chunk-NB4X56M3.js} +2 -2
- package/dist/chunks/{chunk-CNCYMJ5E.js.map → chunk-NB4X56M3.js.map} +1 -1
- package/dist/chunks/{chunk-VKZALU57.js → chunk-OMF5XFKR.js} +1 -1
- package/dist/chunks/{chunk-VKZALU57.js.map → chunk-OMF5XFKR.js.map} +1 -1
- package/dist/chunks/{chunk-BJHWGRMP.js → chunk-TNEXOJ5F.js} +1 -1
- package/dist/chunks/{chunk-BJHWGRMP.js.map → chunk-TNEXOJ5F.js.map} +1 -1
- package/dist/chunks/chunk-VP6AGIRF.js +2 -0
- package/dist/chunks/chunk-VP6AGIRF.js.map +7 -0
- package/dist/chunks/{chunk-SL4JJJQJ.js → chunk-XBZ4C4R3.js} +3 -3
- package/dist/chunks/{chunk-SL4JJJQJ.js.map → chunk-XBZ4C4R3.js.map} +2 -2
- package/dist/chunks/chunk-Y7VFVMQI.js +2 -0
- package/dist/chunks/chunk-Y7VFVMQI.js.map +7 -0
- package/dist/chunks/{chunk-QWG7NASD.js → chunk-YMK7HFJV.js} +2 -2
- package/dist/chunks/{chunk-CVHKXFVS.js → chunk-ZWRAQSXC.js} +2 -2
- package/dist/chunks/chunk-ZWRAQSXC.js.map +7 -0
- package/dist/chunks/{renderSvg-E5Q7MLCH.js → renderSvg-XIEGA5N5.js} +2 -2
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +2 -2
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +3 -3
- package/package.json +2 -2
- package/src/GetSubgraph.ts +2 -0
- package/src/GraphGenomeView/legendSections.ts +5 -2
- package/src/GraphGenomeView/model.ts +8 -1
- package/src/RgfaTabixAdapter/walkFiles.test.ts +14 -0
- package/src/RgfaTabixAdapter/walkReader.ts +22 -5
- package/src/version.ts +1 -1
- package/dist/chunks/chunk-CVHKXFVS.js.map +0 -7
- package/dist/chunks/chunk-CZI7IP5S.js +0 -2
- package/dist/chunks/chunk-CZI7IP5S.js.map +0 -7
- package/dist/chunks/chunk-HAAABGE7.js +0 -2
- package/dist/chunks/chunk-MCBYBZZJ.js +0 -4
- package/dist/chunks/chunk-MCBYBZZJ.js.map +0 -7
- package/dist/chunks/chunk-NOXHIOIM.js +0 -2
- package/dist/chunks/chunk-NOXHIOIM.js.map +0 -7
- package/dist/chunks/chunk-OLZZDBQJ.js +0 -4
- package/dist/chunks/chunk-OLZZDBQJ.js.map +0 -7
- package/dist/chunks/chunk-W7IHIVSE.js +0 -2
- package/dist/chunks/chunk-W7IHIVSE.js.map +0 -7
- /package/dist/chunks/{GraphGenomeView-2AKRM74B.js.map → GraphGenomeView-NLPWMIBS.js.map} +0 -0
- /package/dist/chunks/{GraphTrackSettingsDialog-7XRZQW6T.js.map → GraphTrackSettingsDialog-7LHAOYX3.js.map} +0 -0
- /package/dist/chunks/{HighlightColorDialog-LCBGD2ZA.js.map → HighlightColorDialog-YQEMRPZ6.js.map} +0 -0
- /package/dist/chunks/{LinearGraphDisplay-WWQ73BO5.js.map → LinearGraphDisplay-BEU7V4JU.js.map} +0 -0
- /package/dist/chunks/{MinigraphBubbleAdapter-4OOBJ44C.js.map → MinigraphBubbleAdapter-FZZLY3ZI.js.map} +0 -0
- /package/dist/chunks/{RgfaTabixAdapter-CEGFN2QY.js.map → RgfaTabixAdapter-DXBQEVFS.js.map} +0 -0
- /package/dist/chunks/{WalkFormsAdapter-LTAKACZD.js.map → WalkFormsAdapter-ZKZ5PUYO.js.map} +0 -0
- /package/dist/chunks/{WalkTabixSyntenyAdapter-B6V3YNW7.js.map → WalkTabixSyntenyAdapter-HEGPYGKB.js.map} +0 -0
- /package/dist/chunks/{chunk-PTOKTIQG.js.map → chunk-5X3OZSDO.js.map} +0 -0
- /package/dist/chunks/{chunk-HAAABGE7.js.map → chunk-EINURNZ6.js.map} +0 -0
- /package/dist/chunks/{chunk-CZXJXNZN.js.map → chunk-JTOW3TOE.js.map} +0 -0
- /package/dist/chunks/{chunk-QWG7NASD.js.map → chunk-YMK7HFJV.js.map} +0 -0
- /package/dist/chunks/{renderSvg-E5Q7MLCH.js.map → renderSvg-XIEGA5N5.js.map} +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{G as Qn,H as Zn,I as mn,J as pn,S as to,U as tn,V as gn,Y as no,Z as oo,d as Kn,e as Un,f as Yn,g as dn,i as qn,j as Vn,k as zn,l as jn,m as Yt,z as Jn}from"./chunk-CVHKXFVS.js";import{a as Kt,g as Ut}from"./chunk-IK3MQ4ZJ.js";var Rt=2,io=1.5,qo=4,eo=12,Vo=64,so=24,zo=48,ro="a thread per pass through a node",yn=t=>t.length>1&&t.some(n=>n.mostPasses>1),lo=t=>t*Rt+Math.max(0,t-1)*io,ao=t=>t.reduce((n,e)=>n+e,0);function fo(t,n,e){let o=t.map((a,c)=>n[c]>1?lo(a):e*Math.min(1,a)),s=0,r=t.map(a=>{let c=Math.min(1,a),i=qo*c*s;return s=Math.max(s,c),i});return{widths:o,gaps:r,band:ao(o)+ao(r)}}var xn=Rt+io;function qt(t,n,e=t){let{widths:o,gaps:s,band:r}=fo(t,n,Rt),a=-r/2;return o.map((c,i)=>{a+=s[i];let f=n[i]>1?Math.max(0,c-lo(e[i])):0,l=a+f/2+Rt/2;return a+=c,l})}var en=t=>fo(t,t,Rt).band,sn=t=>Math.min(1,zo/(en(t)||1)),ls=t=>sn(t.map(n=>n.mostPasses))<1?`${ro}, thinned to fit`:ro;function wn(t,n,e){let o=({normal:c,offsetX:i})=>({dx:c.nx*i,dy:c.ny*i}),{dx:s,dy:r}=Un(o(t),o(n),e),a=Math.hypot(s,r);return a>0?{normal:{nx:s/a,ny:r/a},offsetX:a}:{normal:{nx:0,ny:0},offsetX:0}}function nn(t,n){let e=t.stepOf[n],o=n-t.starts[e];return t.forward[e]?o:t.starts[e+1]-t.starts[e]-1-o}var Lt=(t,n)=>{let e=n.x-t.x,o=n.y-t.y;return Math.sqrt(e*e+o*o)};function Ht(t){let n=new Float64Array(t.length);for(let e=1;e<t.length;e++)n[e]=n[e-1]+Lt(t[e-1],t[e]);return n}function Mn(t,n){let e=new Set;return t.map(o=>{let s=new Map;return o.map(r=>r.map(a=>{let c=s.get(a)??0;s.set(a,c+1);let i=n[a],f=!!i?.length&&!e.has(a);return f&&e.add(a),{id:a,visit:c,owned:f,segments:i}}))})}function jo(t,n,e){let o=[];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]);o.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),b;if(f>l){let g=c[f-1],E=i[f-1],x=w(g,E,F),C=w(g,E,S);b=x<=C,Math.min(x,C)>e&&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;b=E(S)<=E(F)}h.ids.push(A),h.visits.push(R),h.forward.push(b),h.owned.push(P);for(let g=0;g<k.length;g++){let E=k[b?g:k.length-1-g];c[f]=E.x,i[f]=E.y*n,f++}h.starts.push(f-l)}),m()}),o}function An(t,n,e){let o=[];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=o.at(-1),c=a?a[1]:0,i=s;for(;i>c&&t[s]-t[i-1]<=e;)i--;let f=r;for(;f+1<t.length&&t[f+1]-t[r]<=e;)f++;a&&i<=a[1]+1?a[1]=f:o.push([i,f]),s=r}return o}function Jo(t,n){let e=Ht(t),o=e.at(-1),s=(c,i)=>{let f=t[i],l=t[Math.min(i+1,t.length-1)],h=e[Math.min(i+1,t.length-1)]-e[i],u=h>0?(c-e[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,e[i]-n/2),l=Math.min(o,e[i]+n/2);for(;r<t.length-1&&e[r+1]<=f;)r++;for(;a<t.length-1&&e[a+1]<=l;)a++;let h=s(f,r),u=s(l,a),m=Lt(h,u);return m>0?{nx:-(u.y-h.y)/m,ny:(u.x-h.x)/m}:void 0})}function Qo(t,n,e){let o=Ht(t),s=t.slice(),r=[];o.forEach((c,i)=>{let f=r.at(-1);(f===void 0||c-o[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&&o[r[u]]-o[c]<=e;u++){let m=r[u];o[m]-o[c]>Math.PI*n&&Lt(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=(o[u]-o[c])/(o[f]-o[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 ho(t,n){let e=t.length,o=Ht(t),s=o[e-1],r=new Float64Array(e+1),a=new Float64Array(e+1),c=new Float64Array(e+1);for(let h=0;h<e;h++){let u=t[h],m=(o[Math.min(h+1,e-1)]-o[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(e),f=0,l=0;for(let h=0;h<e;h++){let u=t[h],m=Math.min(n,o[h],s-o[h]),w=o[h]-m,M=o[h]+m+1e-9*(1+s);for(;f<e&&o[f]<w;)f++;for(;l<e&&o[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 co(t,n){let e=t.length,o=Ht(t),s=o[e-1],r=new Uint8Array(e),a=(f,l)=>{let h=t[f],u=t[f+1];if(!u)return h;let m=o[f+1]-o[f],w=m>0?(l-o[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<e;f++){if(o[f]<n||s-o[f]<n)continue;for(;c+1<e&&o[c+1]<=o[f]-n;)c++;for(;i+1<e&&o[i+1]<=o[f]+n;)i++;let l=t[f],h=a(c,o[f]-n),u=a(i,o[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&&Lt(h,u)*Lt(h,l)*Lt(l,u)/(2*m)<n?1:0}return{tight:r,s:o}}function Zo(t,n){let e=t.slice(),{tight:o,s}=co(e,n),r=An(s,Array.from(o,a=>a>0),3*n);for(let a=0;a<8&&r.length;a++)r=r.filter(([c,i])=>{let f=e.slice(c,i+1),l=co(f,n);if(!l.tight.includes(1))return!1;let h=on(l.s,l.tight,n),u=ho(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];e[c+m]={x:M.x+(A.x-M.x)*w,y:M.y+(A.y-M.y)*w}}}return!0});return e}function te(t,n,e,o,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=e(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+=o(w)?1:-1;for(;u<a;u++)s(u,m<0?-1:1)}}function ne(t,n,e,o,s=!0){let r=Math.max(e,2*o),a=Math.PI*o,c=s?a+3*o+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:b}=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 Z=C[E-1],D=new Int32Array(g).fill(-1),G=new Int32Array(g),q=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,G[d]=I.step,q[d]=I.frame)}let st=new Int32Array(g),it=new Int32Array(g);for(let d=0;d+1<g;d++){let N=D[d]>=0&&D[d+1]===D[d]?G[d+1]-G[d]:0;st[d+1]=st[d]+(N===1?1:0),it[d+1]=it[d]+(N===-1?1:0)}let ot=new Array(g),_=0,L=0;for(let d=0;d<g;d++){if(!s){ot[d]=!k[d];continue}let I=C[W[d]]-c,N=C[W[d+1]-1]+c;for(;C[_]<I;)_++;for(;L+1<E&&C[L+1]<=N;)L++;let j=b[Math.max(0,_-1)],at=b[Math.min(E-1,L+1)],H=at-j,ft=st[at]-st[j],wt=it[at]-it[j];ot[d]=!k[d]&&I>=0&&N<=Z&&H>0&&(ft===H||wt===H)}for(let d=0;d<g;d++){if(k[d])continue;let I=q[d];x[d]=!s&&ot[d]?I:ot[d]?{normals:I.normals,shifts:I.shifts}:u(I.normals.length),m(R[d],A,P[d],x[d])}h.push(x);let V=new Array(E);for(let d=0;d<E;d++)V[d]=!ot[b[d]];for(let[d,I]of An(C,V,c)){let N=[];for(let H=d;H<=I;H++)N.push({x:F[H],y:S[H]});let j=s?Zo(ho(Qo(N,o/2,a),o/2),o/2):N,at=Jo(j,r);te(Ht(j),at,H=>{let ft=b[d+H];return(k[ft]?x[ft]:q[ft])?.normals[nn(w,d+H)]},H=>w.forward[b[d+H]],(H,ft)=>{let wt=d+H,Dt=b[wt];if(ot[Dt])return;let Wt=nn(w,wt),Ot=at[H];x[Dt].normals[Wt]=Ot&&(ft>0?Ot:{nx:-Ot.nx,ny:-Ot.ny}),s&&(x[Dt].shifts[Wt]={dx:j[H].x-N[H].x,dy:(j[H].y-N[H].y)/n})},r)}if(!s){l.push(C);return}let rt=new Float64Array(E),X=0,z=0;for(let d=0;d<E;d++){let I=x[b[d]].shifts[nn(w,d)],N=F[d]+(I?.dx??0),j=S[d]+(I?.dy??0)*n;rt[d]=d?rt[d-1]+Math.sqrt((N-X)**2+(j-z)**2):0,X=N,z=j}l.push(rt)}),{frames:i,arcs:l,stepFrames:h}}function uo(t,n,e,o){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]<=e;){for(;r.length>a&&o*n[r.at(-1)]<=o*n[c];)r.pop();r.push(c++)}for(;t[i]-t[r[a]]>e;)a++;s[i]=n[r[a]]}return s}function on(t,n,e,o=()=>!0){let s=n.length,r=new Float64Array(s+1),a=new Float64Array(s+1);for(let l=0;l<s;l++){let h=o(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]>e;)i++;for(;f<s&&t[f]-t[l]<=e;)f++;let h=r[f]-r[i];c[l]=h>0?(a[f]-a[i])/h:n[l]}return c}var oe=[0];function ee(t){for(let n of t.values())if(n>1)return!0;return!1}function se(t,n,e,o,s){if(!ee(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 b=[],g=[];for(let _ of S){let L=r.get(_);L===void 0&&(L=a.length,r.set(_,L),a.push(_),c.push(0),i.push(0)),g.push(L);let V=e[_],rt=V?.[Math.floor(V.length/2)];b.push(rt?{x:rt.x,y:rt.y*o}:b.at(-1)??{x:0,y:0})}let E=Ht(b),x=S.map(_=>n.get(_)??1),C=uo(E,x,s/2,1),Z=g.map(_=>++i[_]),D=S.length,G=new Int32Array(D),q=-1;for(let _=0;_<D;_++)q=x[_]===C[_]?_:q,G[_]=q;let st=new Int32Array(D);q=-1;for(let _=D-1;_>=0;_--)q=x[_]===C[_]?_:q,st[_]=q;let it=new Array(D),ot=new Array(D).fill(NaN);for(let _=0;_<D;_++){let L=G[_],V=st[_],rt=L<0?V:V<0||E[_]-E[L]<=E[V]-E[_]?L:V,X=z=>Math.min(Z[z],C[_])-1;if(it[_]=X(rt),x[_]===1&&L>=0&&V>=0&&X(V)!==X(L)){let z=(E[_]-E[L])/(E[V]-E[L]||1);ot[_]=X(L)+(X(V)-X(L))*z}c[g[_]]=Math.max(c[g[_]],C[_])}f.push(g),l.push(Z),h.push(it),u.push(ot)}let m=[],w=[],M=(S,b)=>{let g=c[S],E=m[S]??=new Set;for(let x=0;x<g;x++)for(let C of[b-x,b+x])if(C>=0&&C<g&&!E.has(C))return C;return b},A=[];f.forEach((S,b)=>{S.forEach((g,E)=>{if(c[g]>1){let x=u[b][E],C=M(g,Number.isNaN(x)?h[b][E]:Math.round(x));m[g].add(C),(w[g]??=[])[l[b][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,b)=>{A[b]&&W.set(S,A[b]),R.set(S,c[b]),P.set(S,m[b]?[...m[b]].sort((E,x)=>E-x):oe);let g=[];w[b]?.forEach((E,x)=>{g[E]=x-1}),k.set(S,g)});let F=new Map;return f.forEach((S,b)=>{let g=l[b];for(let E=1;E<S.length;E++){let x=S[E-1],C=S[E],Z=[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 G=D.get(a[C]);G?G.some(([q,st])=>q===Z[0]&&st===Z[1])||G.push(Z):D.set(a[C],[Z])}}),{span:R,nodeThreads:P,threadPasses:k,threadAt:W,linkThreads:F}}function re(t,n,e,{reach:o,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 An(f,a.owned,o/2+s/2)){let u=f.slice(l,h+1),m=a.ids.slice(l,h+1),w=e.map(M=>{let A=m.map(R=>M.get(R)??0);return A.every(R=>R===A[0])?{slot:A,held:A}:{slot:on(u,uo(u,A,o/2,1),s/2),held:on(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 ae(t,n,e,o,s,r,a){let c=qt(s,s),i=new Map,f=l=>{let h=i.get(l);if(!h){let u=o.get(l);h=u?qt(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),b=R.get(W)?.[S]??S;P.fill(f(W)[u]+b*xn,M[F],M[F+1])});let k=on(e[h],P,a);n[h].forEach((W,F)=>{let S=M[F],b=M[F+1],g=!0;for(let x=S+1;g&&x<b;x++)g=Math.abs(k[x]-k[S])<1e-9;if(g){W.offset=k[S];return}let E=new Array(b-S);for(let x=S;x<b;x++)E[nn(l,x)]=k[x];W.offsets=E})})}function mo(t,n,e,o,s=Mn(t.map(r=>r.route),n)){let r=yn(t),a=t.map(M=>M.mostPasses),c=Vo*o,i=jo(s,e,eo*o),f=en(a)*(r?sn(a):1)*o,l=ne(i,e,eo*o,f,r),h=r?t.map(M=>se(M.route,M.passes,n,e,c)):void 0,u=h?re(i,l.arcs,h.map(M=>M.span),{reach:c,taper:so*o}):void 0;u&&h&&ae(i,l.stepFrames,l.arcs,u,a,h,so/2*o);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 Y(t,n,e,o){return(o<<24|e<<16|n<<8|t)>>>0}function En(t){return t&255}function vn(t){return t>>>8&255}function bn(t){return t>>>16&255}function _n(t){return t>>>24&255}function po(t){return`rgba(${En(t)},${vn(t)},${bn(t)},${_n(t)/255})`}function hs(t,n){return`rgba(${Math.round(t[0]*255)},${Math.round(t[1]*255)},${Math.round(t[2]*255)},${n})`}function St(t,n){return Y(En(t),vn(t),bn(t),Math.round(_n(t)*n))}function us(t,n){let e=Math.max(0,1-1/n),o=s=>Math.round(s+(255-s)*e);return Y(o(En(t)),o(vn(t)),o(bn(t)),_n(t))}var go=300,Vt=.7,zt=.5;function ce(t){return`hsl(${t}, ${Vt*100}%, ${zt*100}%)`}function jt(t){return Math.max(0,Math.min(1,t))*go}function Rn(t,n){return jt((t-n.start)/(n.end-n.start))}var ie=30;function ms({start:t,bp:n,reversed:e},o){let s=Rn(t,o),r=Rn(t+n,o);if(r-s<1)return[(s+r)/2];let a=Math.ceil((r-s)/ie);return Array.from({length:a+1},(c,i)=>Rn(t+n*(e?a-i:i)/a,o))}var le=Array.from({length:7},(t,n)=>({offset:n/6,color:ce(n/6*go)})),ps=`linear-gradient(to right, ${le.map(t=>`${t.color} ${t.offset*100}%`).join(", ")})`;var fe=Yt();function yo(t,n,e,o,s,r,a=!1){return fe(t,[n,e.scaleX,e.scaleY,o,r,a,s],()=>{let c=new Map;for(let i=0;i<n.edges.length;i++){let f=o?.get(i),l=Jn(t,n.edges[i],e,f,f&&r?.[i],a);l&&c.set(i,l)}return c})}var he=4;function ue(t){let n=new Map;for(let e of t.edges)Kt(n,e.from,e.to),Kt(n,e.to,e.from);return n}function de({nodeId:t,nodeById:n,neighbors:e}){let o=new Set([t]),s=[t],r=1/0,a=-1/0;for(let c=0;c<he&&s.length>0;c++){let i=[];for(let f of s){let l=e.get(f);if(l){for(let h of l)if(!o.has(h)){o.add(h);let u=n.get(h);u&&Ut(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 me({nodeId:t,nodeById:n,neighbors:e}){let o=n.get(t);return o===void 0?void 0:Ut(o)?{start:o.stable.start,end:o.stable.start+o.length}:de({nodeId:t,nodeById:n,neighbors:e})}function xo(t){let n=new Map(t.nodes.map(s=>[s.id,s])),e=ue(t),o=new Map;for(let s of t.nodes){let r=me({nodeId:s.id,nodeById:n,neighbors:e});r&&o.set(s.id,(r.start+r.end)/2)}return o}var pe=Y(119,119,119,217),wo=Y(136,136,136,217),ge=Y(24,24,28,240),Mo=2.2,Io=Y(160,160,160,255),Jt=.18,ye=.45,Fs=po(St(Io,Jt)),xe=11,we=1.2,Me=1e-6,Ae=7,Ee=3,ve=3,be=1.5,Ao=3,_e=.5,Re=.45,Sn=12,Se=1e-6,xt=new Float64Array(64),Ct=new Float64Array(64),Tt=new Float64Array(64);function Ce(t,n,e,o){let s=t.length*Sn+1;xt.length<s&&(xt=new Float64Array(s),Ct=new Float64Array(s),Tt=new Float64Array(s));let r=t[t.length-1];xt[0]=r.x1,Ct[0]=r.y1,Tt[0]=0;let a=1,c=0;for(let i=t.length-1;i>=0&&c<o;i--){let f=t[i];for(let l=1;l<=Sn&&c<o;l++){let h=1-(l/Sn)**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-xt[a-1],(P-Ct[a-1])*e)*n,xt[a]=R,Ct[a]=P,Tt[a]=c,a++}}return a}function Eo(t,n){let e=1;for(;e<t-1&&Tt[e]<n;)e++;let o=Tt[e-1],s=Tt[e],r=s>o?Math.min(1,Math.max(0,(n-o)/(s-o))):0;return{x:xt[e-1]+(xt[e]-xt[e-1])*r,y:Ct[e-1]+(Ct[e]-Ct[e-1])*r}}function Te({curves:t,edgeHalfWidth:n,nodeHalfWidth:e,scale:o,yToX:s,color:r,fromSegments:a,toSegments:c}){let i=Ae+Ee*n,f=Ce(t,o,s,e+Ao*i),l=Tt[f-1],h=l<Se,u=Math.min(e,l),m=h?Math.min(1,jn(a,o,o*s)/i):1;if(h?m<_e:l<Ao*i)return;let w=Eo(f,u),M=Eo(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):Xe(P,s,Ie(P,c)),length:i*m,halfWidth:(ve+be*n)*m,color:r}}var vo=[[0,0]],Oe=[0],bo={dx:0,dy:0};function Po(t,n,e){let o=s=>Math.hypot(s.x-t.x,(s.y-t.y)*e);return o(n[0])<o(n.at(-1))}function ke(t,n,e,o,s){return o?qn(t).from==="start":Po({x:e.x0,y:e.y0},n,s)}function Ie(t,n){if(n.length<2)return;let e=n[0],o=n[n.length-1];return Math.hypot(t.x1-e.x,t.y1-e.y)<=Math.hypot(t.x1-o.x,t.y1-o.y)?{from:e,to:n[1]}:{from:o,to:n[n.length-2]}}function _o(t,n){if(!t||!n)return;let e=n.x-t.x,o=n.y-t.y,s=Math.hypot(e,o);return s>0?{nx:-o/s,ny:e/s}:void 0}var No=.1,Pe=1/Math.sqrt(No);function Ro(t,n=1){let e=n===1?t:t.map(o=>({x:o.x,y:o.y*n}));return e.map((o,s)=>{let r=_o(e[s-1],o),a=_o(o,e[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>No?{nx:c/f,ny:i/f}:{nx:c,ny:i}}return r??a??{nx:0,ny:0}})}function So(t,n,e,o=1){let s=new Array(t.length);for(let r=0;r<t.length;r++){let a=typeof e=="number"?e:e[r];s[r]={x:t[r].x+n[r].nx*a,y:t[r].y+n[r].ny*a/o}}return s}function Tn(t,n,e){let o=(1-Math.abs(2*e-1))*n,s=o*(1-Math.abs(t/60%2-1)),r=e-o/2,a=0,c=0,i=0;return t<60?(a=o,c=s):t<120?(a=s,c=o):t<180?(c=o,i=s):t<240?(c=s,i=o):t<300?(a=s,i=o):(a=o,i=s),[a+r,c+r,i+r]}function rn(t,n,e,o=1){let[s,r,a]=Tn(t,n,e);return Y(Math.round(s*255),Math.round(r*255),Math.round(a*255),Math.round(o*255))}var Ne=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],Fe=[[237,137,44],[158,42,122]],Le=[[220,50,50],[50,120,220]];function Cn(t,n){let e=Math.max(0,Math.min(1,n))*(t.length-1),o=Math.min(t.length-2,Math.floor(e)),s=e-o,r=t[o],a=t[o+1];return Y(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 He(t,n){return rn(Qn(t),mn,pn,n)}var Fo=[60,65,72],On=Y(...Fo,255),Ls=`rgb(${Fo.join(", ")})`;function De(t,n){let e=n.midpoints.get(t.id);return Ut(t)&&e!==void 0?(e-n.start)/n.span:void 0}function Hs(t,n){let e=xo(t);if(n&&n.end>n.start)return{start:n.start,span:n.end-n.start,midpoints:e};let o=1/0,s=-1/0;for(let r of e.values())o=Math.min(o,r),s=Math.max(s,r);return{start:o===1/0?0:o,span:s>o?s-o:1,midpoints:e}}function We(t,n){let e=1/0,o=-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<e&&(e=c.depth),c.depth>o&&(o=c.depth),c.length<s&&(s=c.length),c.length>r&&(r=c.length);return{minDepth:e,maxDepth:o,minLength:s,maxLength:r,maxRank:a,nodeCount:t.nodes.length,referenceRamp:n}}function Ge(t,n,e,o){switch(e){case"random":return He(t.id,1);case"depth":return Cn(Ne,o.maxDepth>o.minDepth?(t.depth-o.minDepth)/(o.maxDepth-o.minDepth):.5);case"node-length":return Cn(Le,o.maxLength>o.minLength?(t.length-o.minLength)/(o.maxLength-o.minLength):.5);case"stable-rank":return t.stable===void 0?Y(160,160,160,255):t.stable.rank===0?Y(52,152,219,255):Cn(Fe,o.maxRank>1?(t.stable.rank-1)/(o.maxRank-1):0);case"reference-position":{let s=o.referenceRamp;if(s===void 0)return Y(160,160,160,255);let r=De(t,s);return r===void 0?On:rn(jt(r),Vt,zt)}case"grey":return Y(160,160,160,255);case"rainbow":{let s=o.nodeCount>1?n/o.nodeCount*360:0;return rn(s,.75,.5)}default:return Y(52,152,219,255)}}function Xe(t,n=1,e){let o=[[t.cx1,t.cy1],[t.cx0,t.cy0],[t.x0,t.y0]];for(let[s,r]of o){let a=t.x1-s,c=(t.y1-r)*n;if(Math.hypot(a,c)>0)return Math.atan2(c,a)}return e?Math.atan2((e.to.y-e.from.y)*n,e.to.x-e.from.x):0}function Be(t,n){let e=!1;for(let o=0;o<t.length-1&&!e;o++){let s=t[o],r=t[o+1];e=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 e}function Co(t,n,e=0,o=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-e&&r<=n.maxX+e&&i>=n.minY-o&&c<=n.maxY+o)return!0}return!1}var To=new WeakMap;function $e(t){let n=To.get(t);if(!n){let e=[],o=new Map,s=t.paths??[];for(let r=0;r<s.length;r++)e.push(rn(Zn(r,s.length),mn,pn,.85)),o.has(s[r].name)||o.set(s[r].name,r);n={pathColorByIndex:e,pathIndexByName:o},To.set(t,n)}return n}var Oo=new WeakMap,Ke=new Map;function Ue(t){let n=Oo.get(t);if(!n){n=new Map;for(let[e,o]of(t.paths??[]).entries())for(let s of new Set(o.nodeIds))Kt(n,s,e);Oo.set(t,n)}return n}var Ye=Yt(),qe=Yt(),ko=new WeakMap;function Ve(t){let n=ko.get(t);if(!n){n=new Map;for(let{from:e,to:o}of t.edges){let s=n.get(e);s||(s=new Set,n.set(e,s)),s.add(o)}ko.set(t,n)}return n}function Ds(t){let{nodePositions:n,graph:e,nodeById:o,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=to(e,i),F=f==="walks"?no(e):0,S=h.scaleX,b=1/Math.max(S,Me),g=Vn(h),E=yo(n,e,h,M,k,A,R),x=[],C=new Map,Z=[],D=new Map,G=[],q=new Map,st=We(e,w),it=new Map;if(s==="rainbow")for(let p=0;p<e.nodes.length;p++)it.set(e.nodes[p].id,p);let ot=e.paths?.length??0,{pathColorByIndex:_,pathIndexByName:L}=$e(e),V=p=>_[L.get(p)??-1]??wo,rt=c&&ot>1?Ue(e):Ke,X=l?.walks??[],z=yn(X),d=X.map(p=>p.mostPasses),I=z?sn(d):1,N=l&&X.length>1?Ye(l,[n,k,h.scaleX,h.scaleY],()=>mo(X,n,g,b,qe(l,[n,k],()=>Mn(X.map(p=>p.route),n)))):void 0,j=N?.lines,at=N?.threads,H=N?.spans,ft=z?qt(d,d):[],wt=new Map,Dt=p=>{let y=wt.get(p);if(!y){let v=H?.get(p);y=v?qt(v.slot,d,v.held):ft,wt.set(p,y)}return y},Wt=(p,y,v,T)=>z?(Dt(p)[v]+T*xn)*I:(v-(X.length-1)/2)*y,Ot=(p,y,v)=>{let T=p?.offsets?.[y]??p?.offset;return T===void 0?v:T*I},Ln=p=>z?Rt/2*I:p/2,Hn=new Map,Dn=new WeakMap,Wn=(p,y,v)=>at?.[p]?.threadPasses.get(y)?.[v]??0,cn=(p,y)=>{let v=Hn.get(p);return v||(v=Ro(y,g),Hn.set(p,v)),v},Bo=(p,y,v)=>{if(!v)return cn(p,y);let T=Dn.get(v.normals);return T||(T=cn(p,y).map((O,$)=>v.normals[$]??O),Dn.set(v.normals,T)),T},Gn=new Map,ln=p=>{let y=Gn.get(p);if(y===void 0){let v=o.get(p);y=gn(v?tn(v,r,i,W):r,X.length),Gn.set(p,y)}return y},Xn=(p,y,v,T,O,$)=>{let tt=T?0:v.length-1,K=y?.[O]?.[Wn(O,p,$)],ct=K?.offsets?.[tt]??K?.offset;return{normal:K?.normals[tt]??cn(p,v)[tt]??{nx:0,ny:0},shift:K?.shifts[tt]??bo,offset:ct===void 0?Wt(p,ln(p),O,$):ct*I}},$o=(p,y)=>{if(!m)return!0;let v=z?en(d)*I:(X.length-1)/2*ln(y),T=Pe*v*b;return Co(p,m,T+(N?.furthestShift.dx??0),T/g+(N?.furthestShift.dy??0))},Ko=(p,y,v)=>{let T=at?.[p]?.linkThreads;if(!T?.size)return vo;let O=T.get(y)?.get(v),$=Ve(e).get(v)?.has(y)?void 0:T.get(v)?.get(y);if(!$)return O??vo;let tt=$.map(([K,ct])=>[ct,K]);return O?[...O,...tt]:tt},fn=(p,y,v)=>X[p]?.passColors.get(y)?.[at?.[p]?.threadPasses.get(y)?.[v]??0],Bn=new WeakMap,Uo=(p,y)=>{if(!y||!z)return p;let v=Bn.get(y.shifts);if(!v){let{shifts:T}=y;v=p.map((O,$)=>{let{dx:tt,dy:K}=T[$]??bo;return{...O,x:O.x+tt,y:O.y+K}}),Bn.set(y.shifts,v)}return v},Yo=S>(u?1:Re);for(let p=0;p<e.edges.length;p++){let y=e.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 $=y.pathIds?.length??0,K=M?.get(p)!==void 0,ct=l?.edgeIndexes.has(p)??!1,Gt=a/2*(K?Mo:1),kt=oo($,F,f),It=a/2*(K?f==="walks"&&F>0?Math.max(1,kt):Mo:kt),ht=c&&$>0,Pt=K?ge:pe,Mt=!l||ct?Pt:St(Pt,Jt),pt=o.get(y.to),Xt=(pt?tn(pt,r,i,W):r)/2,U=B=>!m||Co(B,m),Bt=B=>Kn(B,xe/S,g,m),Qt=(B,J,nt)=>{if(!K){G.push({curves:B,thickness:J,color:nt});return}for(let dt of Bt(B))G.push({curves:dt.curves,thickness:J,color:nt})},At=(B,J,nt,dt,vt,yt,bt,et,hn)=>{if(!K){G.push({curves:B,thickness:J,color:nt,walk:dt,pass:vt,normal:yt,offsetX:bt,endNormal:et,endOffsetX:hn});return}let _t={normal:yt,offsetX:bt},Ft={normal:et,offsetX:hn};for(let Q of Bt(B)){let mt=Q.startAlong===0?_t:wn(_t,Ft,Q.startAlong),lt=Q.endAlong===1?Ft:wn(_t,Ft,Q.endAlong);G.push({curves:Q.curves,thickness:J,color:nt,walk:dt,pass:vt,normal:mt.normal,offsetX:mt.offsetX,endNormal:lt.normal,endOffsetX:lt.offsetX})}},Nt=B=>{let J=Yo?Te({curves:B,edgeHalfWidth:K||ht?a/2:It,nodeHalfWidth:Xt,scale:S,yToX:g,color:Mt,fromSegments:v,toSegments:T}):void 0;J&&Z.push(J)},gt=G.length,$t=Z.length,Et=l?.walks.length&&ct&&!ht?l.walks:void 0;if(Et&&!$o(O,y.from))continue;if(Et){let B=ke(y,v,O[0],R,g),J=O.at(-1),nt=Po({x:J.x1,y:J.y1},T,g),dt=Et.length===1,vt=Ln(ln(y.from)),yt=j?.frames.get(y.from),bt=j?.frames.get(y.to);for(let et=0;et<Et.length;et++)if(Et[et].edgeIndexes.has(p))for(let[_t,Ft]of Ko(et,y.from,y.to)){let Q=Xn(y.from,yt,v,B,et,_t),mt=z?Xn(y.to,bt,T,nt,et,Ft):Q,lt=dt?0:Q.offset*b,un=z?mt.offset*b:lt,$n=z?Yn(O,Q.shift.dx+Q.normal.nx*lt,Q.shift.dy+Q.normal.ny*lt/g,mt.shift.dx+mt.normal.nx*un,mt.shift.dy+mt.normal.ny*un/g):lt===0?O:dn(O,Q.normal.nx*lt,Q.normal.ny*lt/g);U($n)&&At($n,vt,fn(et,y.from,_t)??fn(et,y.to,Ft)??Pt,et,_t,Q.normal,lt,mt.normal,un)}G.length>gt&&Nt(O)}else if(!ht)U(O)&&(Qt(O,It,Mt),Nt(O));else{let B=zn(v,T,$,h),J=Math.floor(($-1)/2);for(let nt=0;nt<$;nt++){let{x:dt,y:vt}=B[nt],yt=dt===0&&vt===0?O:dn(O,dt,vt);if(!U(yt))continue;let bt=V(y.pathIds[nt]);Qt(yt,Gt,l&&(l.walks.length?!l.names.has(y.pathIds[nt]):!ct)?St(bt,Jt):bt),nt===J&&Nt(yt)}}let Zt=G.length-gt;Zt>0&&q.set(p,{start:gt,count:Zt});let ut=Z.length-$t;ut>0&&D.set(p,{start:$t,count:ut})}for(let[p,y]of Object.entries(n)){let v=o.get(p);if(!v||m&&!Be(y,m))continue;let T=l!==void 0&&!l.nodeIds.has(p),O=T?Io:Ge(v,it.get(p)??0,s,st),$=T?St(O,Jt):v.moved?St(O,ye):O,tt=tn(v,r,i,W),K=tt/2,ct=x.length,Gt=rt.get(p),kt=tt/ot,It=y.length>=2,ht=l?.walks.length&&!T&&!Gt?.length?l.walks:void 0;if(It&&ht){let Mt=gn(tt,ht.length),pt=Ln(Mt),Xt=j?.frames.get(p);for(let U=0;U<ht.length;U++){let Bt=ht[U].colors.get(p);if(Bt===void 0)continue;let Qt=at?.[U]?.nodeThreads.get(p)??Oe;for(let At of Qt){let Nt=fn(U,p,At)??Bt;if(ht.length===1){x.push({points:y,thickness:pt,color:Nt,walk:U,pass:At});continue}let gt=Xt?.[U]?.[Wn(U,p,At)],$t=Bo(p,y,gt),Et=Uo(y,gt),Zt=Wt(p,Mt,U,At),ut=gt?.offsets?.map(J=>J*I*b),B=ut?ut[Math.floor(ut.length/2)]:Ot(gt,0,Zt)*b;x.push({points:So(Et,$t,ut??B,g),thickness:pt,color:Nt,walk:U,pass:At,normals:$t,offsetX:B,...ut&&{offsets:ut}})}}}else if(It&&Gt?.length&&kt>=we){let Mt=Ro(y,g);for(let pt of Gt){let Xt=(pt-(ot-1)/2)*kt*b,U=_[pt]??wo;x.push({points:So(y,Mt,Xt,g),thickness:kt/2,color:T?St(U,Jt):U})}}else It&&x.push({points:y,thickness:K,color:$});let Pt=x.length-ct;Pt>0&&C.set(p,{start:ct,count:Pt})}return{nodeStrokes:x,nodeStrokeRuns:C,arrows:Z,arrowRuns:D,edgeCurves:G,edgeCurveRuns:q}}var Do=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],Pn=[{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"}],kn=["blue","red","purple","green"],ze=t=>Do.some(n=>n.value===t),je=t=>Pn.some(n=>n.value===t);function Je(t,n,e,o=!0){let{field:s,scheme:r}=t.color??{},a=ze(s)?s:o?"progress":"walk",c=n?"grey":kn[e%kn.length],i=je(r)?r==="rainbow"&&a!=="reference"?c:r:c,f=Math.floor(e/kn.length)%Lo.length;return a==="walk"&&i===c&&f>0?{field:a,scheme:i,shade:Lo[f]}:o||a==="walk"?{field:a,scheme:i}:{field:a,scheme:i,darkest:Qe}}var Qe=.55,Nn=.5,Lo=[Nn,.85,.2],Ze=.08,Ho=({field:t,scheme:n})=>t!=="walk"&&n!=="rainbow";function ts(t){let n=new Map;for(let o of t)Ho(o)&&n.set(o.scheme,(n.get(o.scheme)??0)+1);let e=new Map;return t.map(o=>{let s=Ho(o)?n.get(o.scheme):1;if(s<2)return o;let r=e.get(o.scheme)??0;e.set(o.scheme,r+1);let a=Ze/2;return{...o,stretch:[r/s+(r>0?a:0),(r+1)/s-(r<s-1?a:0)]}})}var Wo=({stretch:t},n)=>t?t[0]+(t[1]-t[0])*n:n,ns=t=>t<=.04045?t/12.92:((t+.055)/1.055)**2.4,os=t=>t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;function es(t){let[n,e,o]=[1,3,5].map(c=>ns(Number.parseInt(t.slice(c,c+2),16)/255)),s=Math.cbrt(.4122214708*n+.5363325363*e+.0514459929*o),r=Math.cbrt(.2119034982*n+.6806995451*e+.1073969566*o),a=Math.cbrt(.0883024619*n+.2817188376*e+.6299787005*o);return[.2104542553*s+.793617785*r-.0040720468*a,1.9779984951*s-2.428592205*r+.4505937099*a,.0259040371*s+.7827717662*r-.808675766*a]}function ss([t,n,e]){let o=(t+.3963377774*n+.2158037573*e)**3,s=(t-.1055613458*n-.0638541728*e)**3,r=(t-.0894841775*n-1.291485548*e)**3;return[4.0767416621*o-3.3077115913*s+.2309699292*r,-1.2684380046*o+2.6097574011*s-.3413193965*r,-.0041960863*o-.7034186147*s+1.707614701*r].map(a=>os(Math.max(0,Math.min(1,a)))*255)}var In=new Map;function rs(t){if(!In.has(t)){let n=Pn.find(e=>e.value===t);In.set(t,n&&"ends"in n?n.ends.map(es):void 0)}return In.get(t)}function Fn(t,n,e=0){let o=Math.max(0,Math.min(1,n)),s=rs(t);if(!s)return Tn(jt(o),Vt,zt).map(l=>l*255);let[r,a]=s,c=r[0],i=a[0],f=i<e&&c>e?(c-e)/(c-i):1;return ss(r.map((l,h)=>l+(a[h]-l)*o*f))}function Go(t,n,e){let[o,s,r]=Fn(t,n,e).map(Math.round);return`rgb(${o}, ${s}, ${r})`}function an(t,n,e){let[o,s,r]=Fn(t,n,e).map(Math.round);return Y(o,s,r,255)}function as(t,n){let{field:e,scheme:o,darkest:s,shade:r=Nn}=t;return e==="walk"?an(o,r):n===void 0?Xo:an(o,Wo(t,n),s)}var Xo=On;function cs(t){let{field:n,scheme:e,darkest:o,shade:s=Nn}=t,r=(a,c)=>({offset:a,color:Go(e,c,o),abgr:an(e,c,o)});return n==="walk"?[r(0,s)]:Array.from({length:7},(a,c)=>r(c/6,Wo(t,c/6)))}export{ue as a,me as b,Rt as c,yn as d,ls as e,Y as f,po as g,hs as h,St as i,us as j,ce as k,ms as l,le as m,ps as n,yo as o,Fs as p,Tn as q,Ls as r,De as s,Hs as t,We as u,Ge as v,Ds as w,Do as x,Pn as y,Je as z,ts as A,as as B,Xo as C,cs as D};
|
|
2
|
-
//# sourceMappingURL=chunk-W7IHIVSE.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-YUIKEUKY.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-G2FD7S3C.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-GQZVR5DW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ZENC2BJH.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-L4DBSRA2.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-DCE56GIC.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-F6KKQIX7.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-T35SFBHW.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 laneSlideAt,\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-ZENC2BJH.js\";\nimport {\n PATH_LIGHTNESS,\n PATH_SATURATION,\n nameHue,\n pathHueAt\n} from \"./chunk-OV7SD6TP.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 if (!isDeletion) {\n edgeCurves.push({\n curves,\n thickness,\n color,\n walk,\n pass,\n normal: normal2,\n offsetX,\n endNormal,\n endOffsetX\n });\n return;\n }\n const start = { normal: normal2, offsetX };\n const end = { normal: endNormal, offsetX: endOffsetX };\n for (const dash of dashesOf(curves)) {\n const a = dash.startAlong === 0 ? start : laneSlideAt(start, end, dash.startAlong);\n const b = dash.endAlong === 1 ? end : laneSlideAt(start, end, dash.endAlong);\n edgeCurves.push({\n curves: dash.curves,\n thickness,\n color,\n walk,\n pass,\n normal: a.normal,\n offsetX: a.offsetX,\n endNormal: b.normal,\n endOffsetX: b.offsetX\n });\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-DCE56GIC.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", "laneSlideAt", "start", "end", "along", "vector", "normal", "offsetX2", "dx", "dy", "slideAt", "offsetX", "pointIndex", "run", "p", "k", "gapOf", "arcOf", "s", "walkSteps", "walkRoutes", "nodePositions", "routes", "visits", "route", "id", "visit", "segments", "owned", "laneRuns", "steps", "yToX", "jump", "runs", "pieces", "walk", "total", "piece", "xs", "ys", "from", "fresh", "breakRun", "stepOf", "x", "y", "first", "last", "forward", "toFirst", "toLast", "next", "toNext", "j", "ownedWindows", "margin", "windows", "floor", "lo", "hi", "smoothedNormals", "reach", "pointAt", "span", "f", "_", "back", "ahead", "len", "cutCurls", "close", "length", "out", "picks", "to", "j2", "q", "rounded", "half", "n", "sumW", "sumX", "sumY", "tightPoints", "line", "radius", "tight", "twice", "loosened", "t", "pass", "part", "local", "weight", "windowMean", "smoother", "runSigns", "own", "canonical", "settle", "agreement", "sum2", "decided", "pending", "theirs", "mine", "laneLines", "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", "px", "py", "shift", "windowed", "v", "deque", "head", "counted", "sumWV", "ONE_THREAD", "repeats", "passes", "walkThreads", "stepVisits", "stepWants", "stepGlides", "nodes", "mid", "most", "copy", "before", "after", "wants", "glides", "nearest", "want", "taken", "threadOf", "free", "c", "glideOf", "glide", "nodeThreads", "threadPasses", "threadAt", "passOf", "thread", "linkThreads", "pair", "list", "bandSpans", "taper", "middle", "eased", "e", "easeOffsets", "plain", "byNode", "centresAt", "centres", "frame", "constant", "offsets", "liftLanes", "worldPerScreenPx", "threaded", "lines", "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", "start", "end", "laneSlideAt", "arrowOn", "head", "edgeCurveStart", "arrowStart", "laneWalks", "fromAtStart", "toAtStart", "single", "fromFrames", "toFrames", "toPass", "slideCurves", "translateCurves", "offsets", "pathRibbonOffsets", "arrowRibbon", "ribbonColor", "edgeCurveCount", "arrowCount", "faded", "nodeThickness", "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", "e", "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
|
-
}
|
|
File without changes
|
|
File without changes
|
/package/dist/chunks/{HighlightColorDialog-LCBGD2ZA.js.map → HighlightColorDialog-YQEMRPZ6.js.map}
RENAMED
|
File without changes
|
/package/dist/chunks/{LinearGraphDisplay-WWQ73BO5.js.map → LinearGraphDisplay-BEU7V4JU.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|