jbrowse-plugin-graphgenomeviewer 7.4.0 → 7.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/chunks/{GbzBaseSyntenyAdapter-FZWSXPAE.js → GbzBaseSyntenyAdapter-BVLBK4OO.js} +2 -2
  2. package/dist/chunks/{GbzBaseSyntenyAdapter-FZWSXPAE.js.map → GbzBaseSyntenyAdapter-BVLBK4OO.js.map} +1 -1
  3. package/dist/chunks/{GraphGenomeView-52OPGZER.js → GraphGenomeView-UCOAMRF7.js} +2 -2
  4. package/dist/chunks/{GraphTrackSettingsDialog-JHIP2F5N.js → GraphTrackSettingsDialog-MR7X75EY.js} +2 -2
  5. package/dist/chunks/{HighlightColorDialog-S2WPOSDF.js → HighlightColorDialog-ZBAZDYIR.js} +2 -2
  6. package/dist/chunks/{LinearGraphDisplay-EF2GE7X7.js → LinearGraphDisplay-AJ5OZN27.js} +2 -2
  7. package/dist/chunks/{MinigraphBubbleAdapter-XC75BCG3.js → MinigraphBubbleAdapter-PEQK5NII.js} +2 -2
  8. package/dist/chunks/{RgfaTabixAdapter-56X2U424.js → RgfaTabixAdapter-Q63YLPK4.js} +2 -2
  9. package/dist/chunks/{WalkTabixSyntenyAdapter-2SCAD6IN.js → WalkTabixSyntenyAdapter-N5PFI4LS.js} +2 -2
  10. package/dist/chunks/{WalkTabixSyntenyAdapter-2SCAD6IN.js.map → WalkTabixSyntenyAdapter-N5PFI4LS.js.map} +3 -3
  11. package/dist/chunks/{chunk-UW7INEQF.js → chunk-2XZYJLCE.js} +1 -1
  12. package/dist/chunks/{chunk-UW7INEQF.js.map → chunk-2XZYJLCE.js.map} +1 -1
  13. package/dist/chunks/{chunk-ADZBAET3.js → chunk-55DIX25J.js} +3 -3
  14. package/dist/chunks/{chunk-ADZBAET3.js.map → chunk-55DIX25J.js.map} +3 -3
  15. package/dist/chunks/{chunk-2BTNRN57.js → chunk-62AHPP6H.js} +2 -2
  16. package/dist/chunks/{chunk-2BTNRN57.js.map → chunk-62AHPP6H.js.map} +1 -1
  17. package/dist/chunks/{chunk-OUHKJSKZ.js → chunk-AWGMTI73.js} +2 -2
  18. package/dist/chunks/{chunk-2Q4D5RHL.js → chunk-DXNE2CFX.js} +2 -2
  19. package/dist/chunks/{chunk-2Q4D5RHL.js.map → chunk-DXNE2CFX.js.map} +1 -1
  20. package/dist/chunks/{chunk-XT4U7I3D.js → chunk-FWVXBJ64.js} +3 -3
  21. package/dist/chunks/{chunk-XT4U7I3D.js.map → chunk-FWVXBJ64.js.map} +2 -2
  22. package/dist/chunks/{chunk-Z4YNEFPC.js → chunk-HI3YK2SO.js} +2 -2
  23. package/dist/chunks/chunk-J3AXN7JQ.js +2 -0
  24. package/dist/chunks/{chunk-LTN6XZR5.js → chunk-JSRGX4TC.js} +1 -1
  25. package/dist/chunks/{chunk-LTN6XZR5.js.map → chunk-JSRGX4TC.js.map} +1 -1
  26. package/dist/chunks/{chunk-SI64QXFH.js → chunk-LFTZNUXB.js} +2 -2
  27. package/dist/chunks/{chunk-SI64QXFH.js.map → chunk-LFTZNUXB.js.map} +1 -1
  28. package/dist/chunks/{chunk-YBZA7LPQ.js → chunk-MEMUEG5Z.js} +2 -2
  29. package/dist/chunks/{chunk-YBZA7LPQ.js.map → chunk-MEMUEG5Z.js.map} +1 -1
  30. package/dist/chunks/{chunk-PLTIGGGS.js → chunk-PUREF4BM.js} +2 -2
  31. package/dist/chunks/{chunk-PLTIGGGS.js.map → chunk-PUREF4BM.js.map} +1 -1
  32. package/dist/chunks/chunk-Q3BXNKEL.js +2 -0
  33. package/dist/chunks/chunk-Q3BXNKEL.js.map +7 -0
  34. package/dist/chunks/{chunk-VIVPTP5Z.js → chunk-RCXOOBLX.js} +1 -1
  35. package/dist/chunks/{chunk-VIVPTP5Z.js.map → chunk-RCXOOBLX.js.map} +1 -1
  36. package/dist/chunks/{chunk-MLVBPMBU.js → chunk-S75MFZDE.js} +2 -2
  37. package/dist/chunks/{chunk-MLVBPMBU.js.map → chunk-S75MFZDE.js.map} +2 -2
  38. package/dist/chunks/{chunk-KPP5H27W.js → chunk-SFYSQ52W.js} +2 -2
  39. package/dist/chunks/{chunk-4AAW5P6N.js → chunk-U5PIXAF2.js} +2 -2
  40. package/dist/chunks/{chunk-4AAW5P6N.js.map → chunk-U5PIXAF2.js.map} +1 -1
  41. package/dist/chunks/{chunk-XLSVRKFJ.js → chunk-WJGCVNGH.js} +2 -2
  42. package/dist/chunks/{chunk-JXOLZ5IZ.js → chunk-WY5W5X62.js} +2 -2
  43. package/dist/chunks/{chunk-JXOLZ5IZ.js.map → chunk-WY5W5X62.js.map} +1 -1
  44. package/dist/chunks/{chunk-4XM5OBD5.js → chunk-ZG2CQXOW.js} +2 -2
  45. package/dist/chunks/{chunk-4XM5OBD5.js.map → chunk-ZG2CQXOW.js.map} +1 -1
  46. package/dist/chunks/{renderSvg-IXWB7R54.js → renderSvg-Z7YIXVQ5.js} +2 -2
  47. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +4 -4
  48. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  49. package/package.json +2 -2
  50. package/src/WalkTabixSyntenyAdapter/WalkTabixSyntenyAdapter.ts +7 -2
  51. package/src/version.ts +1 -1
  52. package/dist/chunks/chunk-D5PRXUSS.js +0 -2
  53. package/dist/chunks/chunk-D5PRXUSS.js.map +0 -7
  54. package/dist/chunks/chunk-QASFRHPG.js +0 -2
  55. /package/dist/chunks/{GraphGenomeView-52OPGZER.js.map → GraphGenomeView-UCOAMRF7.js.map} +0 -0
  56. /package/dist/chunks/{GraphTrackSettingsDialog-JHIP2F5N.js.map → GraphTrackSettingsDialog-MR7X75EY.js.map} +0 -0
  57. /package/dist/chunks/{HighlightColorDialog-S2WPOSDF.js.map → HighlightColorDialog-ZBAZDYIR.js.map} +0 -0
  58. /package/dist/chunks/{LinearGraphDisplay-EF2GE7X7.js.map → LinearGraphDisplay-AJ5OZN27.js.map} +0 -0
  59. /package/dist/chunks/{MinigraphBubbleAdapter-XC75BCG3.js.map → MinigraphBubbleAdapter-PEQK5NII.js.map} +0 -0
  60. /package/dist/chunks/{RgfaTabixAdapter-56X2U424.js.map → RgfaTabixAdapter-Q63YLPK4.js.map} +0 -0
  61. /package/dist/chunks/{chunk-OUHKJSKZ.js.map → chunk-AWGMTI73.js.map} +0 -0
  62. /package/dist/chunks/{chunk-Z4YNEFPC.js.map → chunk-HI3YK2SO.js.map} +0 -0
  63. /package/dist/chunks/{chunk-QASFRHPG.js.map → chunk-J3AXN7JQ.js.map} +0 -0
  64. /package/dist/chunks/{chunk-KPP5H27W.js.map → chunk-SFYSQ52W.js.map} +0 -0
  65. /package/dist/chunks/{chunk-XLSVRKFJ.js.map → chunk-WJGCVNGH.js.map} +0 -0
  66. /package/dist/chunks/{renderSvg-IXWB7R54.js.map → renderSvg-Z7YIXVQ5.js.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jbrowse-plugin-graphgenomeviewer",
3
- "version": "7.4.0",
3
+ "version": "7.4.2",
4
4
  "description": "JBrowse 2 graph genome (pangenome) view: rGFA reference-anchored layouts, the Bandage force-directed engine, and haplotype lanes read from a gbz-base database",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "repository": {
@@ -40,7 +40,7 @@
40
40
  "@emotion/react": "^11.14.0",
41
41
  "@emotion/styled": "^11.14.1",
42
42
  "@eslint/js": "^10.0.1",
43
- "@jbrowse/bandage-core": "^11.7.0",
43
+ "@jbrowse/bandage-core": "^11.7.1",
44
44
  "@jbrowse/cli": "^4.3.0",
45
45
  "@jbrowse/mobx-state-tree": "^6.9.0",
46
46
  "@jbrowse/plugin-linear-genome-view": "5.0.0-beta.11",
@@ -111,7 +111,10 @@ export default class WalkTabixSyntenyAdapter extends ComparativeAdapterBase<Walk
111
111
  }
112
112
 
113
113
  // The window's walks for the haplotypes named and the reference, with no
114
- // link read; a window past a budget fails as a zoom-in notice for lanes
114
+ // link read; a window past a budget fails as a zoom-in notice for lanes.
115
+ // Named lanes come back in full where format 5 abridged them: an abridged
116
+ // walk is two reference steps, which drew 15 of the HPRC MHC launch's 32
117
+ // lanes empty.
115
118
  private async laneWalks(
116
119
  refName: string,
117
120
  region: Region,
@@ -119,12 +122,14 @@ export default class WalkTabixSyntenyAdapter extends ComparativeAdapterBase<Walk
119
122
  opts: LaneFeatureOptions,
120
123
  status: string,
121
124
  ) {
125
+ const keep = walksKept(prefixes, refName)
122
126
  return updateStatus(status, opts.statusCallback, () =>
123
127
  this.walks.reader
124
128
  .cut(refName, region, {
125
129
  ...this.walks.budgets(),
126
130
  signal: opts.signal,
127
- keep: walksKept(prefixes, refName),
131
+ keep,
132
+ expand: keep,
128
133
  links: false,
129
134
  })
130
135
  .catch((error: unknown) => {
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '7.4.0'
1
+ export const version = '7.4.2'
@@ -1,2 +0,0 @@
1
- import{a as ut,c as lt,d as dt,g as T,l as ht,r as J,x as yt}from"./chunk-4AAW5P6N.js";import{b as xt}from"./chunk-VIVPTP5Z.js";var pt=20;function ro(t){let n=o=>Math.round(o*100)/100;return t.map((o,e)=>`${e?"L":"M"}${n(o.x)},${n(o.y)}`).join("")}function mt(t,n,o,e,r){let s=Math.hypot(e-n,o-t);if(s===0)return[o,e];let c=(o-t)/s,a=(e-n)/s;return[o+r*c,e+r*a]}function W(t,n){let o=1-n,e=o*o*o,r=3*o*o*n,s=3*o*n*n,c=n*n*n;return{x:e*t.x0+r*t.cx0+s*t.cx1+c*t.x1,y:e*t.y0+r*t.cy0+s*t.cy1+c*t.y1}}function Lt(t){let n=t[Math.floor(t.length/2)];return n?W(n,.5):void 0}function Et(t){let n=1/0,o=1/0,e=-1/0,r=-1/0;for(let s of t)n=Math.min(n,s.x0,s.cx0,s.cx1,s.x1),e=Math.max(e,s.x0,s.cx0,s.cx1,s.x1),o=Math.min(o,s.y0,s.cy0,s.cy1,s.y1),r=Math.max(r,s.y0,s.cy0,s.cy1,s.y1);return{minX:n,minY:o,maxX:e,maxY:r}}function zt(t,n,o){let e=W(t,n),r=W(t,o),s=(o-n)/3,c=Mt(t,n),a=Mt(t,o);return{x0:e.x,y0:e.y,cx0:e.x+c.x*s,cy0:e.y+c.y*s,cx1:r.x-a.x*s,cy1:r.y-a.y*s,x1:r.x,y1:r.y}}function Mt(t,n){let o=1-n,e=3*o*o,r=6*o*n,s=3*n*n;return{x:e*(t.cx0-t.x0)+r*(t.cx1-t.cx0)+s*(t.x1-t.cx1),y:e*(t.cy0-t.y0)+r*(t.cy1-t.cy0)+s*(t.y1-t.cy1)}}var $=32;function Vt(t,n,o,e){let r=[],s=0;return t.forEach((c,a)=>{let f=n[a],u=f/$,l=W(c,0);for(let d=1;d<=$;d++){let x=W(c,d/$);if(Math.max(l.x,x.x)+u>=o.minX&&Math.min(l.x,x.x)-u<=o.maxX&&Math.max(l.y,x.y)+u/e>=o.minY&&Math.min(l.y,x.y)-u/e<=o.maxY){let i=s+f*(d-1)/$,h=s+f*d/$,y=r.at(-1);y&&y[1]>=i?y[1]=h:r.push([i,h])}l=x}s+=f}),r}function so(t,n,o=1,e){let r=t.map(d=>Math.hypot(d.cx0-d.x0,(d.cy0-d.y0)*o)+Math.hypot(d.cx1-d.cx0,(d.cy1-d.cy0)*o)+Math.hypot(d.x1-d.cx1,(d.y1-d.cy1)*o)),s=r.reduce((d,x)=>d+x,0),c=Math.round(s/n),a=Math.max(3,c%2?c:c+1),f=e?Vt(t,r,e,o):void 0,u=0,l=[];for(let d=0;d<a;d+=2){let x=d/a*s,i=(d+1)/a*s;if(f){for(;u<f.length&&f[u][1]<x;)u++;if(u===f.length)break;if(f[u][0]>i)continue}let h=[],y=0;t.forEach((m,b)=>{let p=r[b],M=y+p;p>0&&M>x&&y<i&&h.push(zt(m,Math.max(0,(x-y)/p),Math.min(1,(i-y)/p))),y=M}),h.length&&l.push(h)}return l}function co(t,n,o){let e=new Array(t.length);for(let r=0;r<t.length;r++){let s=t[r];e[r]={x0:s.x0+n,y0:s.y0+o,cx0:s.cx0+n,cy0:s.cy0+o,cx1:s.cx1+n,cy1:s.cy1+o,x1:s.x1+n,y1:s.y1+o}}return e}function H(t,n){let o=t.length-1;return n==="end"?{at:t[o],inward:t[o-1]}:{at:t[0],inward:t[1]}}var Jt=.5,Ut=80;function Y(t){return t.endsWith("-")?"-":"+"}function D(t){let n=(o,e)=>(e??Y(o))===Y(o);return{from:n(t.from,t.fromStrand)?"end":"start",to:n(t.to,t.toStrand)?"start":"end"}}function bt(t){let n=1/0,o=-1/0;for(let e of t)n=Math.min(n,e.x),o=Math.max(o,e.x);return{min:n,max:o}}function vt(t,n){return Math.max(0,n.min-t,t-n.max)}function gt(t,n,o){let e=vt(t[0].x,n),r=vt(t[t.length-1].x,n);return e===r?o:e<r?"start":"end"}function Kt(t,n){return{from:gt(t,bt(n),"end"),to:gt(n,bt(t),"start")}}var At=new WeakMap;function Qt(t,n){let o=At.get(t);o||(o=new WeakMap,At.set(t,o));let e=o.get(n);return e||(e=Kt(t,n),o.set(n,e)),e}var Zt=.75,tn=1.15,nn=.35,on=3*pt;function en(t,n,o,e,r,s){let c=Math.hypot(o-t,e-n),a=c===0?1:(o-t)/c,f=c===0?0:(e-n)/c,u=0,l=1/0,d=-1/0;for(let y of r){let m=y.x-t,b=y.y-n,p=m*-f+b*a;Math.abs(p)>Math.abs(u)&&(u=p);let M=m*a+b*f;l=Math.min(l,M),d=Math.max(d,M)}let x=r.length?d-l:0,i=Math.max(Math.abs(u)*tn/Zt,x*nn),h=s===void 0?i:Math.min(i,s);return u<0?-h:h}function It({scaleX:t,scaleY:n}){return n/t}var rn=3;function U(t,n,o){let e=n.x-t.x,r=(n.y-t.y)*o,s=Math.hypot(e,r);return s===0?void 0:{x:e/s,y:r/s}}function ao(t,n,o,e){let r=It(e),s=rn/Math.max(e.scaleX,1e-6),c=U(t[t.length-1],n[0],r)??U(t[0],t.at(-1),r)??U(n[0],n.at(-1),r)??{x:1,y:0},a=[];for(let f=0;f<o;f++){let u=(f-(o-1)/2)*s;a.push({x:-c.y*u,y:c.x*u/r})}return a}function K(t,n){return t.map(o=>({x:o.x,y:o.y*n}))}function sn(t,n){for(let o of t)o.y0/=n,o.cy0/=n,o.cy1/=n,o.y1/=n;return t}function Q(t,n,o){let e=0;for(let r=1;r<t.length;r++){let s=t[r-1],c=t[r];e+=Math.hypot((c.x-s.x)*n,(c.y-s.y)*o)}return e}var cn=12,an=40;function wt(t,n){let o=Q(t,n,n);return Math.min(an,Math.max(cn,o/2))/Math.max(n,Number.EPSILON)}function fn(t){return t.from!==t.to?!1:t.fromStrand&&t.toStrand&&t.fromStrand!==t.toStrand?t.fromStrand==="+"?"end":"start":!0}function Ot(t,n=!1){let o=fn(t);if(!n)return o;let e=D(t);return o===!1?e:e.from===e.to?e.from:!0}function un(t,n){let{at:o,inward:e}=t,r=e?o.x-e.x:1,s=e?o.y-e.y:0,c=Math.hypot(r,s)||1,a=r/c,f=s/c,u=o.x,l=o.y,d=u+a*n/3,x=l+f*n/3,i=u+a*n,h=l+f*n,y=-f*n/2,m=a*n/2;return[{x0:u,y0:l,cx0:d,cy0:x,cx1:i+y,cy1:h+m,x1:i,y1:h},{x0:i,y0:h,cx0:i-y,cy0:h-m,cx1:d,cy1:x,x1:u,y1:l}]}function Z(t,n,o,e,r=[],s){let c=e.scaleX,a=It(e),f=s??(e.pixelRows?on:void 0);if(o===!1&&(o=Qt(t,n)),a!==1)return sn(Z(K(t,a),K(n,a),o,{scaleX:c,scaleY:c},K(r,a),f===void 0?void 0:f*a),a);if(typeof o=="string")return un(H(t,o),wt(t,c));let u=o===!0,l=o===!0?{from:"end",to:"start"}:o,d=H(t,l.from),x=H(n,l.to),i=d.at,h=x.at,y=i.x,m=i.y,b=h.x,p=h.y;if(u){let M=1,w=0;if(d.inward){let P=i.x-d.inward.x,S=i.y-d.inward.y,N=Math.hypot(P,S);N>0&&(M=P/N,w=S/N)}let v=wt(t,c),_=-w,A=M,E=(i.x+h.x)/2+_*v,L=(i.y+h.y)/2+A*v,g=y+M*v,X=m+w*v,O=b-M*v,I=p-w*v;return[{x0:y,y0:m,cx0:g,cy0:X,cx1:g+_*v,cy1:X+A*v,x1:E,y1:L},{x0:E,y0:L,cx0:O+_*v,cy0:I+A*v,cx1:O,cy1:I,x1:b,y1:p}]}else{let M=d.inward??{x:i.x-(h.x-i.x),y:i.y-(h.y-i.y)},w=x.inward??{x:h.x-(i.x-h.x),y:h.y-(i.y-h.y)},v=Math.hypot(b-y,p-m),_=(st,ct,Ft,jt)=>{let at=ct.x-st.x,it=ct.y-st.y,ft=Math.hypot(at,it),qt=ft===0?0:(Ft*at+jt*it)/ft;return Math.max(0,Math.min(v*Jt,Ut,qt*.5))},A=h.x-i.x,E=h.y-i.y,[L,g]=mt(M.x,M.y,i.x,i.y,_(M,i,A,E)),[X,O]=mt(w.x,w.y,h.x,h.y,_(w,h,-A,-E)),I=r.length?en(y,m,b,p,r,f):0,P=v===0?1:v,S=(b-y)/P,N=(p-m)/P,k=-N*I,B=S*I,R=S*Math.abs(I),rt=N*Math.abs(I);return[{x0:y,y0:m,cx0:L+k-R,cy0:g+B-rt,cx1:X+k+R,cy1:O+B+rt,x1:b,y1:p}]}}function _t(t,n){let o=t[0],e=t.at(-1);return Math.hypot(o.x-n.x,o.y-n.y)<Math.hypot(e.x-n.x,e.y-n.y)?"start":"end"}function Pt(t,n,o,e){let r=H(t,e?.from??_t(t,o[0])),s=H(n,e?.to??_t(n,o.at(-1))),c=[r.at,...o,s.at],a=u=>{let l=c[u],d=i=>Math.hypot(i.x-l.x,i.y-l.y),x=(i,h)=>{let y=i?d(i):0,m=d(h);return y===0?{x:h.x-l.x,y:h.y-l.y}:{x:(l.x-i.x)/y*m,y:(l.y-i.y)/y*m}};if(u===0)return x(r.inward,c[1]);if(u===c.length-1){let i=x(s.inward,c[u-1]);return{x:-i.x,y:-i.y}}return{x:(c[u+1].x-c[u-1].x)/2,y:(c[u+1].y-c[u-1].y)/2}},f=[];for(let u=0;u<c.length-1;u++){let l=c[u],d=c[u+1],x=a(u),i=a(u+1);f.push({x0:l.x,y0:l.y,cx0:l.x+x.x/3,cy0:l.y+x.y/3,cx1:d.x-i.x/3,cy1:d.y-i.y/3,x1:d.x,y1:d.y})}return f}function tt(){let t=new WeakMap;return(n,o,e)=>{let r=t.get(n);if(r?.deps.length===o.length&&r.deps.every((c,a)=>Object.is(c,o[a])))return r.value;let s=e();return t.set(n,{deps:o,value:s}),s}}var St=11,ln=6.2,F=4;function nt(t){return t.length*ln+F*2}function dn(t,n){return t.x0<n.x1&&t.x1>n.x0&&t.y0<n.y1&&t.y1>n.y0}function Xt(t,n){return t.x1<=0||t.x0>=n.width||t.y1<=0||t.y0>=n.height}function hn(t,n){return t.x0>=0&&t.x1<=n.width&&t.y0>=0&&t.y1<=n.height}function Nt(t,n=[]){let o=[...n];return e=>Xt(e,t)||o.some(r=>dn(r,e))?!1:(o.push(e),!0)}function uo(t,n,o){let e=[],r=St+F*2,s=(c,a)=>{let f=nt(a),u=c.y>n.height/2?-1:1;for(let l=0;l<=(c.stack??0);l++){let d=c.y+u*l*r,x={x0:c.x-f/2,x1:c.x+f/2,y0:d-St-F,y1:d+F};if(Xt(x,n))return;if(hn(x,n)&&(c.fits?.(x)??!0)&&o(x))return{...c,text:a,y:d,w:f}}};for(let c of t){let a=s(c,c.text)??(c.fallback===void 0?void 0:s(c,c.fallback));a&&e.push(a)}return e}function Ct(t){return t==="+"?"-":"+"}function po(t,n=new Set){let o=t.edges.map(D),e=new Map,r=(i,h,y)=>{ut(e,`${i}|${h}`,y)};t.edges.forEach((i,h)=>{r(i.from,o[h].from,h),r(i.to,o[h].to,h)});let s=i=>{let h=e.get(`${i}|end`);if(h?.length!==1)return;let y=h[0],m=t.edges[y];return m.from===i&&m.to!==i&&!n.has(i)&&!n.has(m.to)&&o[y].from==="end"&&o[y].to==="start"&&e.get(`${m.to}|start`)?.length===1?y:void 0},c=new Set,a=new Map,f=new Map;for(let i of t.nodes){let h=e.get(`${i.id}|start`),y=h?.length===1?t.edges[h[0]].from:void 0;if(a.has(i.id)||y!==void 0&&s(y)===h[0])continue;let m=[i.id];for(;;){let b=s(m.at(-1)),p=b===void 0?void 0:t.edges[b].to;if(p===void 0||a.has(p))break;c.add(b),m.push(p)}for(let b of m)a.set(b,i.id);m.length>1&&f.set(i.id,m)}for(let i of t.nodes)a.has(i.id)||a.set(i.id,i.id);let u=new Map(t.nodes.map(i=>[i.id,i])),l=[];for(let i of t.nodes){if(a.get(i.id)!==i.id)continue;let h=f.get(i.id);if(!h){l.push(i);continue}let y=h.map(p=>u.get(p)),m=y.filter(T),b=m.length?m.reduce((p,M)=>p.stable.start<=M.stable.start?p:M):y[0];l.push({id:i.id,name:i.name,length:y.reduce((p,M)=>p+M.length,0),depth:i.depth,stable:b.stable})}let d=new Set,x=[];return t.edges.forEach((i,h)=>{let y=a.get(i.from),m=a.get(i.to),b=o[h],p=`${y}|${b.from}>${m}|${b.to}`;c.has(h)||d.has(p)||(d.add(p),x.push({from:y,to:m,...b.from==="start"?{fromStrand:Ct(Y(y))}:{},...b.to==="end"?{toStrand:Ct(Y(m))}:{}}))}),{graph:{...t,nodes:l,edges:x,paths:void 0,pathVisits:void 0},runs:f}}function mo(t,n,o){let e={...t};for(let[r,s]of n){let c=t[r];if(!c?.length)continue;delete e[r];let a=et(c),f=a.at(-1),u=s.map(x=>Math.max(o(x),0)),l=u.reduce((x,i)=>x+i,0),d=0;s.forEach((x,i)=>{let h=l?u[i]/l*f:f/s.length,y=i===s.length-1?f:d+h;e[x]=kt(c,a,d,y),d=y})}return e}function Mo(t,n,o){if(t.length===0)return[];let e=et(t),r=e.at(-1);return kt(t,e,n*r,o*r)}function Bt(t){let n=et(t);return ot(t,n,n.at(-1)/2)}function et(t){let n=[0];for(let o=1;o<t.length;o++)n.push(n[o-1]+Math.hypot(t[o].x-t[o-1].x,t[o].y-t[o-1].y));return n}function Tt(t,n){let o=0,e=t.length;for(;o<e;){let r=o+e>>1;t[r]<n?o=r+1:e=r}return o}function ot(t,n,o){if(o<=0)return{...t[0]};let e=Tt(n,o);if(e>=n.length)return{...t.at(-1)};let r=n[e]-n[e-1],s=r>0?(o-n[e-1])/r:0,c=t[e-1],a=t[e];return{x:c.x+(a.x-c.x)*s,y:c.y+(a.y-c.y)*s}}function kt(t,n,o,e){let r=[ot(t,n,o)];for(let s=Tt(n,o);s<t.length&&n[s]<e;s++)n[s]>o&&r.push({...t[s]});return r.push(ot(t,n,e)),r}var xn=1;function yn(t,n){return n.flatMap(o=>t[o]??[])}function $t(t,n,o,e,r,s){let c=t[n.from],a=t[n.to];if(!(!c?.length||!a?.length))return r?Pt(c,a,r,s?D(n):void 0):Z(c,a,Ot(n,s),o,e?yn(t,e):[])}function pn(t){let n=lt(t.nodes.filter(T),o=>o.stable.refName);for(let o of n.values())o.sort((e,r)=>e.stable.start-r.stable.start);return n}function mn(t,n,o){let e=[];if(t)for(let r=ht(t,n);r<t.length;r++){let s=t[r];if(s.stable.start>=o)break;s.stable.start+s.length<=o&&e.push(s.id)}return e}function Mn(t,n,o,e){let{fromStrand:r,toStrand:s}=t;if(r===void 0||s===void 0)return!0;let c=r===(n.stable.strand??"+"),a=s===(o.stable.strand??"+");return e?c&&a:!c&&!a}function bn(t,n,o,e){let r;for(let s of e(n))for(let c of e(o)){let a=s<=c,f=a?{start:s+n.length,end:c}:{start:c+o.length,end:s};Mn(t,n,o,a)&&(!r||Math.abs(f.end-f.start)<Math.abs(r.end-r.start))&&(r=f)}return r}var vn=.01;function gn(t,n){let o=new Map;for(let[e,r]of t){let s=r.flatMap(c=>{let a=n(c);return a.slice(1).map((f,u)=>({at:a[u],copy:f-a[u]}))});s.length&&o.set(e,s.sort((c,a)=>c.at-a.at))}return o}function An(t,n,o){if(!t)return!1;let e=dt(t.length,s=>t[s].at<n),r=[t[e-1],t[e]].filter(s=>s!==void 0).sort((s,c)=>Math.abs(s.at-n)-Math.abs(c.at-n))[0];return r!==void 0&&Math.abs(r.at-n)<=r.copy&&Math.abs(o-r.copy)<=r.copy*vn}function Lo(t){let n=new Map(t.nodes.map(c=>[c.id,c])),o=pn(t),e=yt(t),r=gn(o,e),s=[];for(let c=0;c<t.edges.length;c++){let a=t.edges[c],f=n.get(a.from),u=n.get(a.to);if(f!==void 0&&u!==void 0&&T(f)&&T(u)&&f.stable.refName===u.stable.refName){let l=bn(a,f,u,e),d=f.stable.refName,x=l?l.end-l.start:0;if(l&&x>=xn&&!An(r.get(d),l.start,x)){let{start:i,end:h}=l;s.push({edgeIndex:c,from:a.from,to:a.to,...a.fromStrand?{fromStrand:a.fromStrand}:{},...a.toStrand?{toStrand:a.toStrand}:{},refName:d,start:i,end:h,bp:x,bypassed:mn(o.get(d),i,h)})}}}return s}function wn(t,n){let o=new Map,e=c=>{let a=c;for(;o.has(a);)a=o.get(a);return a!==c&&o.set(c,a),a},r=(c,a)=>{let[f,u]=[e(c),e(a)];return f!==u&&o.set(f,u),f!==u},s=new Set(n.map(c=>c.edgeIndex));return t.edges.forEach((c,a)=>{s.has(a)||r(c.from,c.to)}),new Set(n.filter(c=>!r(c.from,c.to)).map(c=>c.edgeIndex))}var Rt=new WeakMap;function Eo(t,n,o=!0){let e=Rt.get(n);e||(e=new Map,Rt.set(n,e));let r=e.get(o);if(!r){let s=o?new Set:wn(t,n);r={shown:n.filter(c=>!s.has(c.edgeIndex)),bypassed:new Map(n.map(c=>[c.edgeIndex,c.bypassed])),hidden:s},e.set(o,r)}return r}var _n=26,Ln=4e4,En=8,In=8,On=5.7,Pn=6,Sn=13,G=3,j=2;function V(t){return(t.length*On+Pn+G)/2}var C=(Sn+G)/2,Xn=V("1 bp");function q(t,n,o){return{x0:n-t,x1:n+t,y0:o-C,y1:o+C}}function Co(t,n){return{x0:6,x1:6+nt(t)+G,y0:n-8-G/2,y1:n+8+G/2}}function z(t,n,o){return o<n?t:Math.min(Math.max(t,n),o)}function Yt(t){return String(t).replace(/\B(?=(\d{3})+$)/g,",")}function Dt(t){let[n,o]=t>=999500?[t/1e6,"Mb"]:t>=1e3?[t/1e3,"kb"]:[];return n===void 0?`${t} bp`:`${+n.toFixed(n>=100?0:1)} ${o}`}function Ht(t){return`${Dt(t)} del`}function Nn(t,n,o,e){let r=t[0],s=t[t.length-1],c=(n.x-(r.x0+s.x1)/2)*o,a=(n.y-(r.y0+s.y1)/2)*e,f=Math.hypot(c,a);return f===0?{x:0,y:-1}:{x:c/f,y:a/f}}function Cn(t,n){return Math.abs(n.x)*(t.x1-t.x0)/2+Math.abs(n.y)*(t.y1-t.y0)/2}function Bn(t,n){let o=(t.x1-t.x0)/2,e=(t.y1-t.y0)/2;return Math.min(n.x===0?1/0:o/Math.abs(n.x),n.y===0?1/0:e/Math.abs(n.y))}function Tn(t,n){let o=1/0,e=1/0,r=-1/0,s=-1/0;for(let c of t)for(let a of n[c]??[])o=Math.min(o,a.x),r=Math.max(r,a.x),e=Math.min(e,a.y),s=Math.max(s,a.y);return o===1/0?void 0:{minX:o,minY:e,maxX:r,maxY:s}}var kn=tt();function Rn(t,n){return kn(t,[n],()=>Object.entries(t).filter(([o,e])=>e.length>0&&n.has(o)).sort(([o],[e])=>n.get(e)-n.get(o)))}var $n=tt();function Hn(t,n,o,e,r,s){let{scaleX:c,scaleY:a}=o;return $n(t,[n,r,s,c,a,e],()=>{let f=[];for(let u of[...n].sort((l,d)=>d.bp-l.bp)){let l=$t(t,u,o,u.bypassed,r?.[u.edgeIndex],s),d=l?Lt(l):void 0;if(l&&d){let{minX:x,minY:i,maxX:h,maxY:y}=Et(l);f.push({deletion:u,curves:l,apex:d,extent:Math.max((h-x)*c,(y-i)*a)})}}return f})}function Wn({nodePositions:t,nodeLengths:n,deletions:o,deletionRoutes:e,stranded:r=!1,alleleDeletions:s,axis:c,translateX:a,translateY:f,width:u,height:l,version:d=0}){let{scaleX:x,scaleY:i}=c,h=[],y=[];for(let{deletion:p,curves:M,apex:w,extent:v}of Hn(t,o,c,d,e,r))if(v>=_n){let _=Ht(p.bp),A=V(_),E=q(A,0,0),L=w.x*x+a,g=w.y*i+f;if(L<0||L>u||g<0||g>l)continue;let X=v>=A*2/j,O=Nn(M,w,x,i),I=Cn(E,O)+In,P=X?L:z(L+O.x*I,A,u-A),S=X?g:z(g+O.y*I,C,l-C),N=Math.hypot(P-L,S-g),k;if(N>0){let B={x:(P-L)/N,y:(S-g)/N},R=Bn(E,B);k={arcX:L,arcY:g,labelX:P-B.x*R,labelY:S-B.y*R}}h.push({label:{key:`del:${p.edgeIndex}`,text:_,x:P,y:S,kind:"deletion",leader:k},box:q(A,P,S)})}let m=new Set,b=[...s??[]].sort((p,M)=>M.bp-p.bp);for(let p of b){let M=Tn(p.nodeIds,t);if(!M)continue;let w=Math.max(M.minX*x+a,0),v=Math.min(M.maxX*x+a,u),_=Math.max(M.minY*i+f,0),A=Math.min(M.maxY*i+f,l);if(v<w||A<_)continue;let E=Math.max(v-w,A-_),L=Ht(p.bp),g=V(L);if(E>=g*2/j){for(let I of p.nodeIds)m.add(I);let X=z((w+v)/2,g,u-g),O=z((_+A)/2,C,l-C);h.push({label:{key:`alleledel:${p.nodeIds.join(",")}`,text:L,x:X,y:O,kind:"deletion"},box:q(g,X,O)})}}for(let[p,M]of Rn(t,n)){if(m.has(p))continue;let{x:w,y:v}=Bt(M),_=v*i+f;if(_+C<=0||_-C>=l)continue;let A=Q(M,x,i);if(A<Xn*2/j)continue;let E=Dt(n.get(p)),L=V(E);if(A>=L*2/j){let g=w*x+a;y.push({label:{key:`node:${p}`,text:E,x:g,y:_,kind:"node"},box:q(L,g,_)})}}return{deletions:h,nodes:y}}function Yn(t,n){return Math.max(En,Math.floor(t*n/Ln))}function Wt(t,n,o=1/0){let e=[];for(let{label:r,box:s}of t){if(e.length>=o)break;n(s)&&e.push(r)}return e}function Bo({reserved:t,take:n,...o}){n??=Nt(o,t);let{deletions:e,nodes:r}=Wn(o);return[...Wt(e,n),...Wt(r,n,Yn(o.width,o.height))]}function Ho(t){let n=0;for(let o=0;o<t.length;o++)n=t.charCodeAt(o)+((n<<5)-n);return Math.abs(n%360)}function Dn(t,n){return t*360/n}var Gn=.7,Fn=.5,jn=16;function Wo(t){return t>0&&t<=jn}function qn(t,n){return`hsl(${Dn(t,n)}, ${Gn*100}%, ${Fn*100}%)`}function Yo(t,n){return`hsl(0, 0%, ${n>1?25+45*t/(n-1):45}%)`}function zn(t){let n=J(t).name.split("#"),o=n.join("#");if(n.length>=3&&xt(n[0])){let e=n.slice(2).join("#");return[e,e,o]}return[n[0],n.slice(0,2).join("#"),o]}function Vn(t,n){let{start:o}=J(t);return n.map(e=>`${e} @${Yt(o)}`)}function Do(t,n){let o=new Map;t.forEach((f,u)=>{o.has(f.name)||o.set(f.name,u)});let e=[...o].map(([f,u])=>({name:f,i:u})),r=e.map(f=>zn(f.name)),s=[0,1,2].flatMap(f=>[e.map((u,l)=>r[l][f]),e.map((u,l)=>Vn(u.name,r[l])[f])]),a=s.find(f=>new Set(f).size===e.length)??s.at(-1);return e.map(({name:f,i:u},l)=>({name:f,label:a[l],color:n?.[u]??qn(u,t.length)}))}function Go(t){let n=new Map;return new Map([...t].sort((o,e)=>o.label.localeCompare(e.label)).map(o=>{let e=(n.get(o.label)??0)+1;return n.set(o.label,e),[o.name,e>1?`${o.label} (${e})`:o.label]}))}var jo=[{value:"depth",label:"By depth",description:"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform."},{value:"uniform",label:"Uniform",description:"Every node the same thickness."}],Jn=.3,Gt=3;function Un(t){let n=0,o=0;for(let e of t.nodes)n+=e.depth*e.length,o+=e.length;return o>0?n/o:0}function Kn(t,n){return!(n>0)||!(t.depth>0)?1:Math.min(Gt,Math.max(Jn,Math.sqrt(t.depth/n)))}function Qn(t,n,o,e){return n*(o==="depth"?Kn(t,e):1)}function Zn(t,n){return t*(n==="depth"?Gt:1)}var to=4;function no(t,n){return Math.max(t/n,to)}function qo(t,n,o,e,r=0){let s=t?Un(t):0,c=a=>r>0?no(a,r)*r/2:a/2;return{maxHalfWidthPx:c(Zn(o,e)),halfWidthPx:a=>{let f=n?.get(a);return c(f?Qn(f,o,e,s):o)}}}export{pt as a,ro as b,Et as c,so as d,co as e,Y as f,D as g,It as h,ao as i,Q as j,tt as k,St as l,ln as m,F as n,nt as o,Nt as p,uo as q,po as r,mo as s,Mo as t,$t as u,Lo as v,Eo as w,Co as x,Yt as y,Dt as z,Bo as A,Ho as B,Dn as C,Gn as D,Fn as E,jn as F,Wo as G,qn as H,Yo as I,Do as J,Go as K,jo as L,Un as M,Qn as N,no as O,qo as P};
2
- //# sourceMappingURL=chunk-D5PRXUSS.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-CPMHA4W5.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-VACK24HF.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HMXCN6PG.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-AB35TJST.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-2VMKQKVO.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-DV5B5UU7.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-T3H5ELLA.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BW2NMXRV.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ZANALBSX.js"],
4
- "sourcesContent": ["// src/layout/rowSpacing.ts\nvar ROW_HEIGHT_PX = 20;\n\nexport {\n ROW_HEIGHT_PX\n};\n", "import {\n ROW_HEIGHT_PX\n} from \"./chunk-CPMHA4W5.js\";\n\n// src/util/geometry.ts\nfunction svgPath(points) {\n const round = (v) => Math.round(v * 100) / 100;\n return points.map((p, i) => `${i ? \"L\" : \"M\"}${round(p.x)},${round(p.y)}`).join(\"\");\n}\nfunction projectLine(x1, y1, x2, y2, distance) {\n const d = Math.hypot(y2 - y1, x2 - x1);\n if (d === 0) {\n return [x2, y2];\n }\n const vx = (x2 - x1) / d;\n const vy = (y2 - y1) / d;\n return [x2 + distance * vx, y2 + distance * vy];\n}\nfunction curvePointAt(c, t) {\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n return {\n x: a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1,\n y: a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1\n };\n}\nfunction curveMidpoint(curves) {\n const mid = curves[Math.floor(curves.length / 2)];\n return mid ? curvePointAt(mid, 0.5) : void 0;\n}\nfunction curveBounds(curves) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const c of curves) {\n minX = Math.min(minX, c.x0, c.cx0, c.cx1, c.x1);\n maxX = Math.max(maxX, c.x0, c.cx0, c.cx1, c.x1);\n minY = Math.min(minY, c.y0, c.cy0, c.cy1, c.y1);\n maxY = Math.max(maxY, c.y0, c.cy0, c.cy1, c.y1);\n }\n return { minX, minY, maxX, maxY };\n}\nfunction subCurve(c, t0, t1) {\n const p0 = curvePointAt(c, t0);\n const p1 = curvePointAt(c, t1);\n const dt = (t1 - t0) / 3;\n const d0 = curveTangentAt(c, t0);\n const d1 = curveTangentAt(c, t1);\n return {\n x0: p0.x,\n y0: p0.y,\n cx0: p0.x + d0.x * dt,\n cy0: p0.y + d0.y * dt,\n cx1: p1.x - d1.x * dt,\n cy1: p1.y - d1.y * dt,\n x1: p1.x,\n y1: p1.y\n };\n}\nfunction curveTangentAt(c, t) {\n const u = 1 - t;\n const a = 3 * u * u;\n const b = 6 * u * t;\n const d = 3 * t * t;\n return {\n x: a * (c.cx0 - c.x0) + b * (c.cx1 - c.cx0) + d * (c.x1 - c.cx1),\n y: a * (c.cy0 - c.y0) + b * (c.cy1 - c.cy0) + d * (c.y1 - c.cy1)\n };\n}\nvar VISIBLE_SAMPLES = 32;\nfunction visibleStretches(curves, lengths, bounds, yToX) {\n const stretches = [];\n let start = 0;\n curves.forEach((c, k) => {\n const length = lengths[k];\n const pad = length / VISIBLE_SAMPLES;\n let last = curvePointAt(c, 0);\n for (let i = 1; i <= VISIBLE_SAMPLES; i++) {\n const next = curvePointAt(c, i / VISIBLE_SAMPLES);\n if (Math.max(last.x, next.x) + pad >= bounds.minX && Math.min(last.x, next.x) - pad <= bounds.maxX && Math.max(last.y, next.y) + pad / yToX >= bounds.minY && Math.min(last.y, next.y) - pad / yToX <= bounds.maxY) {\n const from = start + length * (i - 1) / VISIBLE_SAMPLES;\n const to = start + length * i / VISIBLE_SAMPLES;\n const prev = stretches.at(-1);\n if (prev && prev[1] >= from) {\n prev[1] = to;\n } else {\n stretches.push([from, to]);\n }\n }\n last = next;\n }\n start += length;\n });\n return stretches;\n}\nfunction dashCurves(curves, dashWorld, yToX = 1, bounds) {\n const lengths = curves.map(\n (c) => Math.hypot(c.cx0 - c.x0, (c.cy0 - c.y0) * yToX) + Math.hypot(c.cx1 - c.cx0, (c.cy1 - c.cy0) * yToX) + Math.hypot(c.x1 - c.cx1, (c.y1 - c.cy1) * yToX)\n );\n const total = lengths.reduce((a, b) => a + b, 0);\n const periods = Math.round(total / dashWorld);\n const spans = Math.max(3, periods % 2 ? periods : periods + 1);\n const stretches = bounds ? visibleStretches(curves, lengths, bounds, yToX) : void 0;\n let seen = 0;\n const out = [];\n for (let i = 0; i < spans; i += 2) {\n const from = i / spans * total;\n const to = (i + 1) / spans * total;\n if (stretches) {\n while (seen < stretches.length && stretches[seen][1] < from) {\n seen++;\n }\n if (seen === stretches.length) {\n break;\n }\n if (stretches[seen][0] > to) {\n continue;\n }\n }\n const dash = [];\n let start = 0;\n curves.forEach((c, k) => {\n const length = lengths[k];\n const end = start + length;\n if (length > 0 && end > from && start < to) {\n dash.push(\n subCurve(\n c,\n Math.max(0, (from - start) / length),\n Math.min(1, (to - start) / length)\n )\n );\n }\n start = end;\n });\n if (dash.length) {\n out.push(dash);\n }\n }\n return out;\n}\nfunction translateCurves(curves, dx, dy) {\n const out = new Array(curves.length);\n for (let i = 0; i < curves.length; i++) {\n const c = curves[i];\n out[i] = {\n x0: c.x0 + dx,\n y0: c.y0 + dy,\n cx0: c.cx0 + dx,\n cy0: c.cy0 + dy,\n cx1: c.cx1 + dx,\n cy1: c.cy1 + dy,\n x1: c.x1 + dx,\n y1: c.y1 + dy\n };\n }\n return out;\n}\nfunction attachment(segments, side) {\n const last = segments.length - 1;\n return side === \"end\" ? { at: segments[last], inward: segments[last - 1] } : { at: segments[0], inward: segments[1] };\n}\nvar TANGENT_SPAN_FACTOR = 0.5;\nvar MAX_TANGENT = 80;\nfunction ownStrand(id) {\n return id.endsWith(\"-\") ? \"-\" : \"+\";\n}\nfunction strandSides(edge) {\n const own = (id, strand) => (strand ?? ownStrand(id)) === ownStrand(id);\n return {\n from: own(edge.from, edge.fromStrand) ? \"end\" : \"start\",\n to: own(edge.to, edge.toStrand) ? \"start\" : \"end\"\n };\n}\nfunction spanOf(segments) {\n let min = Infinity;\n let max = -Infinity;\n for (const s of segments) {\n min = Math.min(min, s.x);\n max = Math.max(max, s.x);\n }\n return { min, max };\n}\nfunction distanceToSpan(x, span) {\n return Math.max(0, span.min - x, x - span.max);\n}\nfunction facingSide(segments, other, tieBreak) {\n const startGap = distanceToSpan(segments[0].x, other);\n const endGap = distanceToSpan(segments[segments.length - 1].x, other);\n return startGap === endGap ? tieBreak : startGap < endGap ? \"start\" : \"end\";\n}\nfunction facingSides(fromSegments, toSegments) {\n return {\n from: facingSide(fromSegments, spanOf(toSegments), \"end\"),\n to: facingSide(toSegments, spanOf(fromSegments), \"start\")\n };\n}\nvar laidSides = /* @__PURE__ */ new WeakMap();\nfunction heldFacingSides(fromSegments, toSegments) {\n let byTo = laidSides.get(fromSegments);\n if (!byTo) {\n byTo = /* @__PURE__ */ new WeakMap();\n laidSides.set(fromSegments, byTo);\n }\n let sides = byTo.get(toSegments);\n if (!sides) {\n sides = facingSides(fromSegments, toSegments);\n byTo.set(toSegments, sides);\n }\n return sides;\n}\nvar APEX_FRACTION = 0.75;\nvar BOW_CLEARANCE = 1.15;\nvar ALONG_FRACTION = 0.35;\nvar MAX_ROW_BOW_PX = 3 * ROW_HEIGHT_PX;\nfunction bowAround(p1x, p1y, p2x, p2y, toward, maxBow) {\n const chord = Math.hypot(p2x - p1x, p2y - p1y);\n const ux = chord === 0 ? 1 : (p2x - p1x) / chord;\n const uy = chord === 0 ? 0 : (p2y - p1y) / chord;\n let reach = 0;\n let minAlong = Infinity;\n let maxAlong = -Infinity;\n for (const p of toward) {\n const dx = p.x - p1x;\n const dy = p.y - p1y;\n const perp = dx * -uy + dy * ux;\n if (Math.abs(perp) > Math.abs(reach)) {\n reach = perp;\n }\n const along = dx * ux + dy * uy;\n minAlong = Math.min(minAlong, along);\n maxAlong = Math.max(maxAlong, along);\n }\n const span = toward.length ? maxAlong - minAlong : 0;\n const uncapped = Math.max(\n Math.abs(reach) * BOW_CLEARANCE / APEX_FRACTION,\n span * ALONG_FRACTION\n );\n const size = maxBow === void 0 ? uncapped : Math.min(uncapped, maxBow);\n return reach < 0 ? -size : size;\n}\nfunction yToXOf({ scaleX, scaleY }) {\n return scaleY / scaleX;\n}\nvar PATH_RIBBON_SPACING_PX = 3;\nfunction drawnDirection(a, b, yToX) {\n const dx = b.x - a.x;\n const dy = (b.y - a.y) * yToX;\n const len = Math.hypot(dx, dy);\n return len === 0 ? void 0 : { x: dx / len, y: dy / len };\n}\nfunction pathRibbonOffsets(fromSegments, toSegments, count, axis) {\n const yToX = yToXOf(axis);\n const spacing = PATH_RIBBON_SPACING_PX / Math.max(axis.scaleX, 1e-6);\n const dir = drawnDirection(\n fromSegments[fromSegments.length - 1],\n toSegments[0],\n yToX\n ) ?? drawnDirection(fromSegments[0], fromSegments.at(-1), yToX) ?? drawnDirection(toSegments[0], toSegments.at(-1), yToX) ?? { x: 1, y: 0 };\n const offsets = [];\n for (let i = 0; i < count; i++) {\n const distance = (i - (count - 1) / 2) * spacing;\n offsets.push({ x: -dir.y * distance, y: dir.x * distance / yToX });\n }\n return offsets;\n}\nfunction scaleYOf(points, yToX) {\n return points.map((p) => ({ x: p.x, y: p.y * yToX }));\n}\nfunction unscaleYOf(curves, yToX) {\n for (const c of curves) {\n c.y0 /= yToX;\n c.cy0 /= yToX;\n c.cy1 /= yToX;\n c.y1 /= yToX;\n }\n return curves;\n}\nfunction polylinePx(points, scaleX, scaleY) {\n let total = 0;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1];\n const b = points[i];\n total += Math.hypot((b.x - a.x) * scaleX, (b.y - a.y) * scaleY);\n }\n return total;\n}\nvar SELF_LOOP_MIN_PX = 12;\nvar SELF_LOOP_MAX_PX = 40;\nfunction selfLoopReach(segments, scale) {\n const nodePx = polylinePx(segments, scale, scale);\n const reachPx = Math.min(\n SELF_LOOP_MAX_PX,\n Math.max(SELF_LOOP_MIN_PX, nodePx / 2)\n );\n return reachPx / Math.max(scale, Number.EPSILON);\n}\nfunction selfLinkOf(edge) {\n if (edge.from !== edge.to) {\n return false;\n }\n return edge.fromStrand && edge.toStrand && edge.fromStrand !== edge.toStrand ? edge.fromStrand === \"+\" ? \"end\" : \"start\" : true;\n}\nfunction edgeJoinOf(edge, stranded = false) {\n const self = selfLinkOf(edge);\n if (!stranded) {\n return self;\n }\n const sides = strandSides(edge);\n return self === false ? sides : sides.from === sides.to ? sides.from : true;\n}\nfunction hairpinCurves(attach, reach) {\n const { at, inward } = attach;\n const dx = inward ? at.x - inward.x : 1;\n const dy = inward ? at.y - inward.y : 0;\n const len = Math.hypot(dx, dy) || 1;\n const ux = dx / len;\n const uy = dy / len;\n const px = at.x;\n const py = at.y;\n const nearX = px + ux * reach / 3;\n const nearY = py + uy * reach / 3;\n const apexX = px + ux * reach;\n const apexY = py + uy * reach;\n const sideX = -uy * reach / 2;\n const sideY = ux * reach / 2;\n return [\n {\n x0: px,\n y0: py,\n cx0: nearX,\n cy0: nearY,\n cx1: apexX + sideX,\n cy1: apexY + sideY,\n x1: apexX,\n y1: apexY\n },\n {\n x0: apexX,\n y0: apexY,\n cx0: apexX - sideX,\n cy0: apexY - sideY,\n cx1: nearX,\n cy1: nearY,\n x1: px,\n y1: py\n }\n ];\n}\nfunction computeEdgeCurves(fromSegments, toSegments, join, axis, bypassed = [], maxBowIn) {\n const scale = axis.scaleX;\n const yToX = yToXOf(axis);\n const maxBow = maxBowIn ?? (axis.pixelRows ? MAX_ROW_BOW_PX : void 0);\n if (join === false) {\n join = heldFacingSides(fromSegments, toSegments);\n }\n if (yToX !== 1) {\n return unscaleYOf(\n computeEdgeCurves(\n scaleYOf(fromSegments, yToX),\n scaleYOf(toSegments, yToX),\n join,\n { scaleX: scale, scaleY: scale },\n scaleYOf(bypassed, yToX),\n // the cap is a y measure and the body works in x units, so it converts\n // with everything else that crosses this boundary\n maxBow === void 0 ? void 0 : maxBow * yToX\n ),\n yToX\n );\n }\n if (typeof join === \"string\") {\n return hairpinCurves(\n attachment(fromSegments, join),\n selfLoopReach(fromSegments, scale)\n );\n }\n const loop = join === true;\n const sides = join === true ? { from: \"end\", to: \"start\" } : join;\n const fromAttach = attachment(fromSegments, sides.from);\n const toAttach = attachment(toSegments, sides.to);\n const fromEnd = fromAttach.at;\n const toStart = toAttach.at;\n const p1x = fromEnd.x;\n const p1y = fromEnd.y;\n const p2x = toStart.x;\n const p2y = toStart.y;\n if (loop) {\n let segDirX = 1;\n let segDirY = 0;\n if (fromAttach.inward) {\n const dx = fromEnd.x - fromAttach.inward.x;\n const dy = fromEnd.y - fromAttach.inward.y;\n const len = Math.hypot(dx, dy);\n if (len > 0) {\n segDirX = dx / len;\n segDirY = dy / len;\n }\n }\n const ext = selfLoopReach(fromSegments, scale);\n const perpX = -segDirY;\n const perpY = segDirX;\n const midX = (fromEnd.x + toStart.x) / 2 + perpX * ext;\n const midY = (fromEnd.y + toStart.y) / 2 + perpY * ext;\n const cp1x = p1x + segDirX * ext;\n const cp1y = p1y + segDirY * ext;\n const cp2x = p2x - segDirX * ext;\n const cp2y = p2y - segDirY * ext;\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cp1x,\n cy0: cp1y,\n cx1: cp1x + perpX * ext,\n cy1: cp1y + perpY * ext,\n x1: midX,\n y1: midY\n },\n {\n x0: midX,\n y0: midY,\n cx0: cp2x + perpX * ext,\n cy0: cp2y + perpY * ext,\n cx1: cp2x,\n cy1: cp2y,\n x1: p2x,\n y1: p2y\n }\n ];\n } else {\n const fromPrev = fromAttach.inward ?? {\n x: fromEnd.x - (toStart.x - fromEnd.x),\n y: fromEnd.y - (toStart.y - fromEnd.y)\n };\n const toNext = toAttach.inward ?? {\n x: toStart.x - (fromEnd.x - toStart.x),\n y: toStart.y - (fromEnd.y - toStart.y)\n };\n const dist = Math.hypot(p2x - p1x, p2y - p1y);\n const tangentProj = (prev, at, towardX, towardY) => {\n const dx = at.x - prev.x;\n const dy = at.y - prev.y;\n const len = Math.hypot(dx, dy);\n const along = len === 0 ? 0 : (towardX * dx + towardY * dy) / len;\n return Math.max(\n 0,\n Math.min(dist * TANGENT_SPAN_FACTOR, MAX_TANGENT, along * 0.5)\n );\n };\n const towardToX = toStart.x - fromEnd.x;\n const towardToY = toStart.y - fromEnd.y;\n const [cx1, cy1] = projectLine(\n fromPrev.x,\n fromPrev.y,\n fromEnd.x,\n fromEnd.y,\n tangentProj(fromPrev, fromEnd, towardToX, towardToY)\n );\n const [cx2, cy2] = projectLine(\n toNext.x,\n toNext.y,\n toStart.x,\n toStart.y,\n tangentProj(toNext, toStart, -towardToX, -towardToY)\n );\n const bulge = bypassed.length ? bowAround(p1x, p1y, p2x, p2y, bypassed, maxBow) : 0;\n const chordLen = dist === 0 ? 1 : dist;\n const ux = (p2x - p1x) / chordLen;\n const uy = (p2y - p1y) / chordLen;\n const bulgeX = -uy * bulge;\n const bulgeY = ux * bulge;\n const spreadX = ux * Math.abs(bulge);\n const spreadY = uy * Math.abs(bulge);\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cx1 + bulgeX - spreadX,\n cy0: cy1 + bulgeY - spreadY,\n cx1: cx2 + bulgeX + spreadX,\n cy1: cy2 + bulgeY + spreadY,\n x1: p2x,\n y1: p2y\n }\n ];\n }\n}\nfunction nearerEnd(segments, to) {\n const start = segments[0];\n const end = segments.at(-1);\n return Math.hypot(start.x - to.x, start.y - to.y) < Math.hypot(end.x - to.x, end.y - to.y) ? \"start\" : \"end\";\n}\nfunction routedEdgeCurves(fromSegments, toSegments, route, sides) {\n const fromAttach = attachment(\n fromSegments,\n sides?.from ?? nearerEnd(fromSegments, route[0])\n );\n const toAttach = attachment(\n toSegments,\n sides?.to ?? nearerEnd(toSegments, route.at(-1))\n );\n const points = [fromAttach.at, ...route, toAttach.at];\n const tangent = (i) => {\n const p = points[i];\n const span = (q) => Math.hypot(q.x - p.x, q.y - p.y);\n const along = (inward, next) => {\n const len = inward ? span(inward) : 0;\n const reach = span(next);\n return len === 0 ? { x: next.x - p.x, y: next.y - p.y } : {\n x: (p.x - inward.x) / len * reach,\n y: (p.y - inward.y) / len * reach\n };\n };\n if (i === 0) {\n return along(fromAttach.inward, points[1]);\n }\n if (i === points.length - 1) {\n const out = along(toAttach.inward, points[i - 1]);\n return { x: -out.x, y: -out.y };\n }\n return {\n x: (points[i + 1].x - points[i - 1].x) / 2,\n y: (points[i + 1].y - points[i - 1].y) / 2\n };\n };\n const curves = [];\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i];\n const b = points[i + 1];\n const ta = tangent(i);\n const tb = tangent(i + 1);\n curves.push({\n x0: a.x,\n y0: a.y,\n cx0: a.x + ta.x / 3,\n cy0: a.y + ta.y / 3,\n cx1: b.x - tb.x / 3,\n cy1: b.y - tb.y / 3,\n x1: b.x,\n y1: b.y\n });\n }\n return curves;\n}\n\nexport {\n svgPath,\n projectLine,\n curvePointAt,\n curveMidpoint,\n curveBounds,\n dashCurves,\n translateCurves,\n ownStrand,\n strandSides,\n bowAround,\n yToXOf,\n PATH_RIBBON_SPACING_PX,\n pathRibbonOffsets,\n polylinePx,\n selfLinkOf,\n edgeJoinOf,\n computeEdgeCurves,\n routedEdgeCurves\n};\n", "// src/util/weakMemo.ts\nfunction weakMemo() {\n const cache = /* @__PURE__ */ new WeakMap();\n return (key, deps, compute) => {\n const hit = cache.get(key);\n if (hit?.deps.length === deps.length && hit.deps.every((d, i) => Object.is(d, deps[i]))) {\n return hit.value;\n }\n const value = compute();\n cache.set(key, { deps, value });\n return value;\n };\n}\n\nexport {\n weakMemo\n};\n", "// src/overlayLabels.ts\nvar LABEL_PX = 11;\nvar LABEL_CHAR_PX = 6.2;\nvar LABEL_PAD = 4;\nfunction labelWidth(text) {\n return text.length * LABEL_CHAR_PX + LABEL_PAD * 2;\n}\nfunction overlaps(a, b) {\n return a.x0 < b.x1 && a.x1 > b.x0 && a.y0 < b.y1 && a.y1 > b.y0;\n}\nfunction offFrame(box, frame) {\n return box.x1 <= 0 || box.x0 >= frame.width || box.y1 <= 0 || box.y0 >= frame.height;\n}\nfunction insideFrame(box, frame) {\n return box.x0 >= 0 && box.x1 <= frame.width && box.y0 >= 0 && box.y1 <= frame.height;\n}\nfunction occupancy(frame, reserved = []) {\n const placed = [...reserved];\n return (box) => {\n if (offFrame(box, frame) || placed.some((p) => overlaps(p, box))) {\n return false;\n }\n placed.push(box);\n return true;\n };\n}\nfunction placeLabels(candidates, frame, take) {\n const out = [];\n const row = LABEL_PX + LABEL_PAD * 2;\n const place = (c, text) => {\n const w = labelWidth(text);\n const direction = c.y > frame.height / 2 ? -1 : 1;\n for (let tries = 0; tries <= (c.stack ?? 0); tries++) {\n const y = c.y + direction * tries * row;\n const box = {\n x0: c.x - w / 2,\n x1: c.x + w / 2,\n y0: y - LABEL_PX - LABEL_PAD,\n y1: y + LABEL_PAD\n };\n if (offFrame(box, frame)) {\n return void 0;\n }\n if (insideFrame(box, frame) && (c.fits?.(box) ?? true) && take(box)) {\n return { ...c, text, y, w };\n }\n }\n return void 0;\n };\n for (const c of candidates) {\n const placed = place(c, c.text) ?? (c.fallback === void 0 ? void 0 : place(c, c.fallback));\n if (placed) {\n out.push(placed);\n }\n }\n return out;\n}\n\nexport {\n LABEL_PX,\n LABEL_CHAR_PX,\n LABEL_PAD,\n labelWidth,\n overlaps,\n occupancy,\n placeLabels\n};\n", "import {\n ownStrand,\n strandSides\n} from \"./chunk-VACK24HF.js\";\nimport {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/layout/mergeRuns.ts\nfunction flip(strand) {\n return strand === \"+\" ? \"-\" : \"+\";\n}\nfunction mergeRuns(graph, alone = /* @__PURE__ */ new Set()) {\n const sides = graph.edges.map(strandSides);\n const at = /* @__PURE__ */ new Map();\n const attach = (id, side, ei) => {\n pushTo(at, `${id}|${side}`, ei);\n };\n graph.edges.forEach((edge, ei) => {\n attach(edge.from, sides[ei].from, ei);\n attach(edge.to, sides[ei].to, ei);\n });\n const joinAfter = (a) => {\n const out = at.get(`${a}|end`);\n if (out?.length !== 1) {\n return void 0;\n }\n const ei = out[0];\n const edge = graph.edges[ei];\n return edge.from === a && edge.to !== a && !alone.has(a) && !alone.has(edge.to) && sides[ei].from === \"end\" && sides[ei].to === \"start\" && at.get(`${edge.to}|start`)?.length === 1 ? ei : void 0;\n };\n const joined = /* @__PURE__ */ new Set();\n const runOf = /* @__PURE__ */ new Map();\n const runs = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const into = at.get(`${node.id}|start`);\n const pred = into?.length === 1 ? graph.edges[into[0]].from : void 0;\n if (runOf.has(node.id) || pred !== void 0 && joinAfter(pred) === into[0]) {\n continue;\n }\n const run = [node.id];\n for (; ; ) {\n const ei = joinAfter(run.at(-1));\n const next = ei === void 0 ? void 0 : graph.edges[ei].to;\n if (next === void 0 || runOf.has(next)) {\n break;\n }\n joined.add(ei);\n run.push(next);\n }\n for (const id of run) {\n runOf.set(id, node.id);\n }\n if (run.length > 1) {\n runs.set(node.id, run);\n }\n }\n for (const node of graph.nodes) {\n if (!runOf.has(node.id)) {\n runOf.set(node.id, node.id);\n }\n }\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const nodes = [];\n for (const node of graph.nodes) {\n if (runOf.get(node.id) !== node.id) {\n continue;\n }\n const run = runs.get(node.id);\n if (!run) {\n nodes.push(node);\n continue;\n }\n const members = run.map((id) => byId.get(id));\n const backbone = members.filter(isBackbone);\n const first = backbone.length ? backbone.reduce((a, b) => a.stable.start <= b.stable.start ? a : b) : members[0];\n nodes.push({\n id: node.id,\n name: node.name,\n length: members.reduce((sum, n) => sum + n.length, 0),\n depth: node.depth,\n stable: first.stable\n });\n }\n const seen = /* @__PURE__ */ new Set();\n const edges = [];\n graph.edges.forEach((edge, ei) => {\n const from = runOf.get(edge.from);\n const to = runOf.get(edge.to);\n const side = sides[ei];\n const key = `${from}|${side.from}>${to}|${side.to}`;\n if (joined.has(ei) || seen.has(key)) {\n return;\n }\n seen.add(key);\n edges.push({\n from,\n to,\n ...side.from === \"start\" ? { fromStrand: flip(ownStrand(from)) } : {},\n ...side.to === \"end\" ? { toStrand: flip(ownStrand(to)) } : {}\n });\n });\n return {\n graph: { ...graph, nodes, edges, paths: void 0, pathVisits: void 0 },\n runs\n };\n}\nfunction splitRuns(positions, runs, weightOf) {\n const out = { ...positions };\n for (const [id, members] of runs) {\n const line = positions[id];\n if (!line?.length) {\n continue;\n }\n delete out[id];\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n const weights = members.map((m) => Math.max(weightOf(m), 0));\n const weightSum = weights.reduce((a, b) => a + b, 0);\n let from = 0;\n members.forEach((member, k) => {\n const share = weightSum ? weights[k] / weightSum * total : total / members.length;\n const to = k === members.length - 1 ? total : from + share;\n out[member] = slice(line, arc, from, to);\n from = to;\n });\n }\n return out;\n}\nfunction polylineSlice(line, from, to) {\n if (line.length === 0) {\n return [];\n }\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n return slice(line, arc, from * total, to * total);\n}\nfunction polylineMidpoint(line) {\n const arc = arcPrefix(line);\n return pointAt(line, arc, arc.at(-1) / 2);\n}\nfunction arcPrefix(line) {\n const arc = [0];\n for (let i = 1; i < line.length; i++) {\n arc.push(\n arc[i - 1] + Math.hypot(line[i].x - line[i - 1].x, line[i].y - line[i - 1].y)\n );\n }\n return arc;\n}\nfunction firstReaching(arc, s) {\n let lo = 0;\n let hi = arc.length;\n while (lo < hi) {\n const mid = lo + hi >> 1;\n if (arc[mid] < s) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n}\nfunction pointAt(line, arc, s) {\n if (s <= 0) {\n return { ...line[0] };\n }\n const i = firstReaching(arc, s);\n if (i >= arc.length) {\n return { ...line.at(-1) };\n }\n const span = arc[i] - arc[i - 1];\n const t = span > 0 ? (s - arc[i - 1]) / span : 0;\n const a = line[i - 1];\n const b = line[i];\n return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };\n}\nfunction slice(line, arc, from, to) {\n const points = [pointAt(line, arc, from)];\n for (let i = firstReaching(arc, from); i < line.length && arc[i] < to; i++) {\n if (arc[i] > from) {\n points.push({ ...line[i] });\n }\n }\n points.push(pointAt(line, arc, to));\n return points;\n}\n\nexport {\n mergeRuns,\n splitRuns,\n polylineSlice,\n polylineMidpoint\n};\n", "import {\n referenceVisitStarts\n} from \"./chunk-3YBP46PB.js\";\nimport {\n computeEdgeCurves,\n edgeJoinOf,\n routedEdgeCurves,\n strandSides\n} from \"./chunk-VACK24HF.js\";\nimport {\n groupBy\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n firstNodeAtOrAfter,\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\nimport {\n partitionPoint\n} from \"./chunk-HOAIOEI7.js\";\n\n// src/deletionEdges.ts\nvar MIN_DELETION_BP = 1;\nfunction bypassedPoints(nodePositions, bypassed) {\n return bypassed.flatMap((id) => nodePositions[id] ?? []);\n}\nfunction edgeCurvesOf(nodePositions, edge, axis, bypassed, route, stranded) {\n const from = nodePositions[edge.from];\n const to = nodePositions[edge.to];\n if (!from?.length || !to?.length) {\n return void 0;\n }\n return route ? routedEdgeCurves(\n from,\n to,\n route,\n stranded ? strandSides(edge) : void 0\n ) : computeEdgeCurves(\n from,\n to,\n edgeJoinOf(edge, stranded),\n axis,\n bypassed ? bypassedPoints(nodePositions, bypassed) : []\n );\n}\nfunction backboneBySequence(graph) {\n const bySequence = groupBy(\n graph.nodes.filter(isBackbone),\n (node) => node.stable.refName\n );\n for (const list of bySequence.values()) {\n list.sort((a, b) => a.stable.start - b.stable.start);\n }\n return bySequence;\n}\nfunction bypassedNodes(nodes, start, end) {\n const bypassed = [];\n if (nodes) {\n for (let i = firstNodeAtOrAfter(nodes, start); i < nodes.length; i++) {\n const node = nodes[i];\n if (node.stable.start >= end) {\n break;\n }\n if (node.stable.start + node.length <= end) {\n bypassed.push(node.id);\n }\n }\n }\n return bypassed;\n}\nfunction skipsBetween(edge, from, to, forwards) {\n const { fromStrand, toStrand } = edge;\n if (fromStrand === void 0 || toStrand === void 0) {\n return true;\n }\n const leavesRight = fromStrand === (from.stable.strand ?? \"+\");\n const arrivesLeft = toStrand === (to.stable.strand ?? \"+\");\n return forwards ? leavesRight && arrivesLeft : !leavesRight && !arrivesLeft;\n}\nfunction skippedSpan(edge, from, to, startsOf) {\n let best;\n for (const a of startsOf(from)) {\n for (const b of startsOf(to)) {\n const forwards = a <= b;\n const span = forwards ? { start: a + from.length, end: b } : { start: b + to.length, end: a };\n if (skipsBetween(edge, from, to, forwards) && (!best || Math.abs(span.end - span.start) < Math.abs(best.end - best.start))) {\n best = span;\n }\n }\n }\n return best;\n}\nvar COPY_SWITCH_SHARE = 0.01;\nfunction repeatCopies(backbone, startsOf) {\n const bySequence = /* @__PURE__ */ new Map();\n for (const [refName, nodes] of backbone) {\n const copies = nodes.flatMap((node) => {\n const starts = startsOf(node);\n return starts.slice(1).map((next, i) => ({\n at: starts[i],\n copy: next - starts[i]\n }));\n });\n if (copies.length) {\n bySequence.set(\n refName,\n copies.sort((a, b) => a.at - b.at)\n );\n }\n }\n return bySequence;\n}\nfunction switchesCopy(copies, start, bp) {\n if (!copies) {\n return false;\n }\n const i = partitionPoint(copies.length, (k) => copies[k].at < start);\n const near = [copies[i - 1], copies[i]].filter((c) => c !== void 0).sort((a, b) => Math.abs(a.at - start) - Math.abs(b.at - start))[0];\n return near !== void 0 && Math.abs(near.at - start) <= near.copy && Math.abs(bp - near.copy) <= near.copy * COPY_SWITCH_SHARE;\n}\nfunction deletionEdges(graph) {\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const backbone = backboneBySequence(graph);\n const startsOf = referenceVisitStarts(graph);\n const copies = repeatCopies(backbone, startsOf);\n const found = [];\n for (let edgeIndex = 0; edgeIndex < graph.edges.length; edgeIndex++) {\n const edge = graph.edges[edgeIndex];\n const from = byId.get(edge.from);\n const to = byId.get(edge.to);\n if (from !== void 0 && to !== void 0 && isBackbone(from) && isBackbone(to) && from.stable.refName === to.stable.refName) {\n const span = skippedSpan(edge, from, to, startsOf);\n const refName = from.stable.refName;\n const bp = span ? span.end - span.start : 0;\n if (span && bp >= MIN_DELETION_BP && !switchesCopy(copies.get(refName), span.start, bp)) {\n const { start, end } = span;\n found.push({\n edgeIndex,\n from: edge.from,\n to: edge.to,\n ...edge.fromStrand ? { fromStrand: edge.fromStrand } : {},\n ...edge.toStrand ? { toStrand: edge.toStrand } : {},\n refName,\n start,\n end,\n bp,\n bypassed: bypassedNodes(backbone.get(refName), start, end)\n });\n }\n }\n }\n return found;\n}\nfunction closableDeletions(graph, deletions) {\n const parent = /* @__PURE__ */ new Map();\n const root = (id) => {\n let r = id;\n while (parent.has(r)) {\n r = parent.get(r);\n }\n if (r !== id) {\n parent.set(id, r);\n }\n return r;\n };\n const join = (a, b) => {\n const [ra, rb] = [root(a), root(b)];\n if (ra !== rb) {\n parent.set(ra, rb);\n }\n return ra !== rb;\n };\n const candidates = new Set(deletions.map((d) => d.edgeIndex));\n graph.edges.forEach((e, ei) => {\n if (!candidates.has(ei)) {\n join(e.from, e.to);\n }\n });\n return new Set(\n deletions.filter((d) => !join(d.from, d.to)).map((d) => d.edgeIndex)\n );\n}\nvar drawings = /* @__PURE__ */ new WeakMap();\nfunction deletionDrawing(graph, deletions, show = true) {\n let byShow = drawings.get(deletions);\n if (!byShow) {\n byShow = /* @__PURE__ */ new Map();\n drawings.set(deletions, byShow);\n }\n let drawing = byShow.get(show);\n if (!drawing) {\n const hidden = show ? /* @__PURE__ */ new Set() : closableDeletions(graph, deletions);\n drawing = {\n shown: deletions.filter((d) => !hidden.has(d.edgeIndex)),\n bypassed: new Map(deletions.map((d) => [d.edgeIndex, d.bypassed])),\n hidden\n };\n byShow.set(show, drawing);\n }\n return drawing;\n}\n\nexport {\n edgeCurvesOf,\n deletionEdges,\n closableDeletions,\n deletionDrawing\n};\n", "import {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n labelWidth,\n occupancy\n} from \"./chunk-AB35TJST.js\";\nimport {\n polylineMidpoint\n} from \"./chunk-2VMKQKVO.js\";\nimport {\n edgeCurvesOf\n} from \"./chunk-DV5B5UU7.js\";\nimport {\n curveBounds,\n curveMidpoint,\n polylinePx\n} from \"./chunk-VACK24HF.js\";\n\n// src/graphLabels.ts\nvar MIN_DELETION_LABEL_PX = 26;\nvar PX_PER_NODE_LABEL = 4e4;\nvar MIN_NODE_LABELS = 8;\nvar LEADER_GAP_PX = 8;\nvar LABEL_CHAR_PX = 5.7;\nvar LABEL_PAD_PX = 6;\nvar LABEL_HEIGHT_PX = 13;\nvar LABEL_GAP_PX = 3;\nvar MAX_LABEL_OVERHANG = 2;\nfunction labelHalfWidth(text) {\n return (text.length * LABEL_CHAR_PX + LABEL_PAD_PX + LABEL_GAP_PX) / 2;\n}\nvar LABEL_HALF_HEIGHT = (LABEL_HEIGHT_PX + LABEL_GAP_PX) / 2;\nvar MIN_LABEL_HALF_WIDTH = labelHalfWidth(\"1 bp\");\nfunction boxAt(halfW, x, y) {\n return {\n x0: x - halfW,\n x1: x + halfW,\n y0: y - LABEL_HALF_HEIGHT,\n y1: y + LABEL_HALF_HEIGHT\n };\n}\nfunction rowLabelBox(text, screenY) {\n return {\n x0: 6,\n x1: 6 + labelWidth(text) + LABEL_GAP_PX,\n y0: screenY - 8 - LABEL_GAP_PX / 2,\n y1: screenY + 8 + LABEL_GAP_PX / 2\n };\n}\nfunction clamp(v, lo, hi) {\n return hi < lo ? v : Math.min(Math.max(v, lo), hi);\n}\nfunction groupDigits(n) {\n return String(n).replace(/\\B(?=(\\d{3})+$)/g, \",\");\n}\nfunction formatBp(bp) {\n const [value, unit] = bp >= 999500 ? [bp / 1e6, \"Mb\"] : bp >= 1e3 ? [bp / 1e3, \"kb\"] : [];\n if (value === void 0) {\n return `${bp} bp`;\n }\n return `${+value.toFixed(value >= 100 ? 0 : 1)} ${unit}`;\n}\nfunction deletionText(bp) {\n return `${formatBp(bp)} del`;\n}\nfunction arcOutward(curves, apex, scaleX, scaleY) {\n const first = curves[0];\n const last = curves[curves.length - 1];\n const dx = (apex.x - (first.x0 + last.x1) / 2) * scaleX;\n const dy = (apex.y - (first.y0 + last.y1) / 2) * scaleY;\n const len = Math.hypot(dx, dy);\n return len === 0 ? { x: 0, y: -1 } : { x: dx / len, y: dy / len };\n}\nfunction boxSupport(box, dir) {\n return Math.abs(dir.x) * (box.x1 - box.x0) / 2 + Math.abs(dir.y) * (box.y1 - box.y0) / 2;\n}\nfunction boxRayCrossing(box, dir) {\n const halfW = (box.x1 - box.x0) / 2;\n const halfH = (box.y1 - box.y0) / 2;\n return Math.min(\n dir.x === 0 ? Infinity : halfW / Math.abs(dir.x),\n dir.y === 0 ? Infinity : halfH / Math.abs(dir.y)\n );\n}\nfunction runBounds(nodeIds, nodePositions) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const id of nodeIds) {\n for (const p of nodePositions[id] ?? []) {\n minX = Math.min(minX, p.x);\n maxX = Math.max(maxX, p.x);\n minY = Math.min(minY, p.y);\n maxY = Math.max(maxY, p.y);\n }\n }\n return minX === Infinity ? void 0 : { minX, minY, maxX, maxY };\n}\nvar nodeOrderCache = weakMemo();\nfunction labelOrder(nodePositions, nodeLengths) {\n return nodeOrderCache(\n nodePositions,\n [nodeLengths],\n () => Object.entries(nodePositions).filter(([id, segments]) => segments.length > 0 && nodeLengths.has(id)).sort(([a], [b]) => nodeLengths.get(b) - nodeLengths.get(a))\n );\n}\nvar arcCache = weakMemo();\nfunction arcPlacements(nodePositions, deletions, axis, version, routes, stranded) {\n const { scaleX, scaleY } = axis;\n return arcCache(\n nodePositions,\n [deletions, routes, stranded, scaleX, scaleY, version],\n () => {\n const arcs = [];\n for (const deletion of [...deletions].sort((a, b) => b.bp - a.bp)) {\n const curves = edgeCurvesOf(\n nodePositions,\n deletion,\n axis,\n deletion.bypassed,\n routes?.[deletion.edgeIndex],\n stranded\n );\n const apex = curves ? curveMidpoint(curves) : void 0;\n if (curves && apex) {\n const { minX, minY, maxX, maxY } = curveBounds(curves);\n arcs.push({\n deletion,\n curves,\n apex,\n // in screen px, so the two axes' units cannot be added by accident\n extent: Math.max((maxX - minX) * scaleX, (maxY - minY) * scaleY)\n });\n }\n }\n return arcs;\n }\n );\n}\nfunction sizeLabelCandidates({\n nodePositions,\n nodeLengths,\n deletions,\n deletionRoutes,\n stranded = false,\n alleleDeletions,\n axis,\n translateX,\n translateY,\n width,\n height,\n version = 0\n}) {\n const { scaleX, scaleY } = axis;\n const deletionCandidates = [];\n const nodeCandidates = [];\n for (const { deletion, curves, apex, extent } of arcPlacements(\n nodePositions,\n deletions,\n axis,\n version,\n deletionRoutes,\n stranded\n )) {\n if (extent >= MIN_DELETION_LABEL_PX) {\n const text = deletionText(deletion.bp);\n const halfW = labelHalfWidth(text);\n const box = boxAt(halfW, 0, 0);\n const arcX = apex.x * scaleX + translateX;\n const arcY = apex.y * scaleY + translateY;\n if (arcX < 0 || arcX > width || arcY < 0 || arcY > height) {\n continue;\n }\n const fits = extent >= halfW * 2 / MAX_LABEL_OVERHANG;\n const bow = arcOutward(curves, apex, scaleX, scaleY);\n const offset = boxSupport(box, bow) + LEADER_GAP_PX;\n const x = fits ? arcX : clamp(arcX + bow.x * offset, halfW, width - halfW);\n const y = fits ? arcY : clamp(\n arcY + bow.y * offset,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n const away = Math.hypot(x - arcX, y - arcY);\n let leader;\n if (away > 0) {\n const dir = { x: (x - arcX) / away, y: (y - arcY) / away };\n const crossing = boxRayCrossing(box, dir);\n leader = {\n arcX,\n arcY,\n labelX: x - dir.x * crossing,\n labelY: y - dir.y * crossing\n };\n }\n deletionCandidates.push({\n label: {\n key: `del:${deletion.edgeIndex}`,\n text,\n x,\n y,\n kind: \"deletion\",\n leader\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n const labelledByDeletion = /* @__PURE__ */ new Set();\n const alleleRuns = [...alleleDeletions ?? []].sort((a, b) => b.bp - a.bp);\n for (const run of alleleRuns) {\n const drawn = runBounds(run.nodeIds, nodePositions);\n if (!drawn) {\n continue;\n }\n const shownLeft = Math.max(drawn.minX * scaleX + translateX, 0);\n const shownRight = Math.min(drawn.maxX * scaleX + translateX, width);\n const shownTop = Math.max(drawn.minY * scaleY + translateY, 0);\n const shownBottom = Math.min(drawn.maxY * scaleY + translateY, height);\n if (shownRight < shownLeft || shownBottom < shownTop) {\n continue;\n }\n const extent = Math.max(shownRight - shownLeft, shownBottom - shownTop);\n const text = deletionText(run.bp);\n const halfW = labelHalfWidth(text);\n if (extent >= halfW * 2 / MAX_LABEL_OVERHANG) {\n for (const id of run.nodeIds) {\n labelledByDeletion.add(id);\n }\n const x = clamp((shownLeft + shownRight) / 2, halfW, width - halfW);\n const y = clamp(\n (shownTop + shownBottom) / 2,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n deletionCandidates.push({\n label: {\n key: `alleledel:${run.nodeIds.join(\",\")}`,\n text,\n x,\n y,\n kind: \"deletion\"\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n for (const [id, segments] of labelOrder(nodePositions, nodeLengths)) {\n if (labelledByDeletion.has(id)) {\n continue;\n }\n const { x, y } = polylineMidpoint(segments);\n const screenY = y * scaleY + translateY;\n if (screenY + LABEL_HALF_HEIGHT <= 0 || screenY - LABEL_HALF_HEIGHT >= height) {\n continue;\n }\n const drawn = polylinePx(segments, scaleX, scaleY);\n if (drawn < MIN_LABEL_HALF_WIDTH * 2 / MAX_LABEL_OVERHANG) {\n continue;\n }\n const text = formatBp(nodeLengths.get(id));\n const halfW = labelHalfWidth(text);\n if (drawn >= halfW * 2 / MAX_LABEL_OVERHANG) {\n const screenX = x * scaleX + translateX;\n nodeCandidates.push({\n label: {\n key: `node:${id}`,\n text,\n x: screenX,\n y: screenY,\n kind: \"node\"\n },\n box: boxAt(halfW, screenX, screenY)\n });\n }\n }\n return { deletions: deletionCandidates, nodes: nodeCandidates };\n}\nfunction nodeLabelBudget(width, height) {\n return Math.max(\n MIN_NODE_LABELS,\n Math.floor(width * height / PX_PER_NODE_LABEL)\n );\n}\nfunction placeSizeLabels(candidates, take, budget = Infinity) {\n const labels = [];\n for (const { label, box } of candidates) {\n if (labels.length >= budget) {\n break;\n }\n if (take(box)) {\n labels.push(label);\n }\n }\n return labels;\n}\nfunction graphLabels({\n reserved,\n take,\n ...args\n}) {\n take ??= occupancy(args, reserved);\n const { deletions, nodes } = sizeLabelCandidates(args);\n return [\n ...placeSizeLabels(deletions, take),\n ...placeSizeLabels(nodes, take, nodeLabelBudget(args.width, args.height))\n ];\n}\n\nexport {\n rowLabelBox,\n groupDigits,\n formatBp,\n sizeLabelCandidates,\n nodeLabelBudget,\n placeSizeLabels,\n graphLabels\n};\n", "import {\n groupDigits\n} from \"./chunk-T3H5ELLA.js\";\nimport {\n pathOrigin\n} from \"./chunk-3YBP46PB.js\";\nimport {\n isGenericSample\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/pathColors.ts\nfunction nameHue(name) {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return Math.abs(hash % 360);\n}\nfunction pathHueAt(index, count) {\n return index * 360 / count;\n}\nvar PATH_SATURATION = 0.7;\nvar PATH_LIGHTNESS = 0.5;\nvar MAX_PATH_COLORS = 16;\nfunction pathColorsLegible(pathCount) {\n return pathCount > 0 && pathCount <= MAX_PATH_COLORS;\n}\nfunction pathCssColor(index, count) {\n return `hsl(${pathHueAt(index, count)}, ${PATH_SATURATION * 100}%, ${PATH_LIGHTNESS * 100}%)`;\n}\nfunction pathGreyCssColor(index, count) {\n const lightness = count > 1 ? 25 + 45 * index / (count - 1) : 45;\n return `hsl(0, 0%, ${lightness}%)`;\n}\nfunction labelTiers(name) {\n const parts = pathOrigin(name).name.split(\"#\");\n const full = parts.join(\"#\");\n if (parts.length >= 3 && isGenericSample(parts[0])) {\n const contig = parts.slice(2).join(\"#\");\n return [contig, contig, full];\n }\n return [parts[0], parts.slice(0, 2).join(\"#\"), full];\n}\nfunction offsetTiers(name, tiers) {\n const { start } = pathOrigin(name);\n return tiers.map((t) => `${t} @${groupDigits(start)}`);\n}\nfunction pathLegend(paths, colors) {\n const firstOf = /* @__PURE__ */ new Map();\n paths.forEach((path, i) => {\n if (!firstOf.has(path.name)) {\n firstOf.set(path.name, i);\n }\n });\n const entries = [...firstOf].map(([name, i]) => ({ name, i }));\n const named = entries.map((e) => labelTiers(e.name));\n const candidates = [0, 1, 2].flatMap((t) => [\n entries.map((_, k) => named[k][t]),\n entries.map((e, k) => offsetTiers(e.name, named[k])[t])\n ]);\n const distinct = candidates.find(\n (labels2) => new Set(labels2).size === entries.length\n );\n const labels = distinct ?? candidates.at(-1);\n return entries.map(({ name, i }, k) => ({\n name,\n label: labels[k],\n color: colors?.[i] ?? pathCssColor(i, paths.length)\n }));\n}\nfunction walkLabelsOf(entries) {\n const seen = /* @__PURE__ */ new Map();\n return new Map(\n [...entries].sort((a, b) => a.label.localeCompare(b.label)).map((e) => {\n const n = (seen.get(e.label) ?? 0) + 1;\n seen.set(e.label, n);\n return [e.name, n > 1 ? `${e.label} (${n})` : e.label];\n })\n );\n}\n\nexport {\n nameHue,\n pathHueAt,\n PATH_SATURATION,\n PATH_LIGHTNESS,\n MAX_PATH_COLORS,\n pathColorsLegible,\n pathCssColor,\n pathGreyCssColor,\n pathLegend,\n walkLabelsOf\n};\n", "// src/nodeWidths.ts\nvar NODE_WIDTHS = [\n {\n value: \"depth\",\n label: \"By depth\",\n description: \"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform.\"\n },\n {\n value: \"uniform\",\n label: \"Uniform\",\n description: \"Every node the same thickness.\"\n }\n];\nvar MIN_FACTOR = 0.3;\nvar MAX_FACTOR = 3;\nfunction meanDepth(graph) {\n let weighted = 0;\n let length = 0;\n for (const node of graph.nodes) {\n weighted += node.depth * node.length;\n length += node.length;\n }\n return length > 0 ? weighted / length : 0;\n}\nfunction depthWidthFactor(node, mean) {\n if (!(mean > 0) || !(node.depth > 0)) {\n return 1;\n }\n return Math.min(\n MAX_FACTOR,\n Math.max(MIN_FACTOR, Math.sqrt(node.depth / mean))\n );\n}\nfunction nodeWidthPx(node, contigThickness, nodeWidth, mean) {\n return contigThickness * (nodeWidth === \"depth\" ? depthWidthFactor(node, mean) : 1);\n}\nfunction maxNodeWidthPx(contigThickness, nodeWidth) {\n return contigThickness * (nodeWidth === \"depth\" ? MAX_FACTOR : 1);\n}\nvar MIN_WALK_LANE_PX = 4;\nfunction walkLaneWidthPx(width, lanes) {\n return Math.max(width / lanes, MIN_WALK_LANE_PX);\n}\nfunction nodeInk(graph, nodeById, contigThickness, nodeWidth, lanes = 0) {\n const mean = graph ? meanDepth(graph) : 0;\n const reach = (width) => lanes > 0 ? walkLaneWidthPx(width, lanes) * lanes / 2 : width / 2;\n return {\n maxHalfWidthPx: reach(maxNodeWidthPx(contigThickness, nodeWidth)),\n halfWidthPx: (id) => {\n const node = nodeById?.get(id);\n return reach(\n node ? nodeWidthPx(node, contigThickness, nodeWidth, mean) : contigThickness\n );\n }\n };\n}\n\nexport {\n NODE_WIDTHS,\n meanDepth,\n nodeWidthPx,\n maxNodeWidthPx,\n walkLaneWidthPx,\n nodeInk\n};\n"],
5
- "mappings": "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",
6
- "names": ["ROW_HEIGHT_PX", "svgPath", "points", "round", "v", "p", "i", "projectLine", "x1", "y1", "x2", "y2", "distance", "d", "vx", "vy", "curvePointAt", "c", "t", "u", "a", "b", "e", "curveMidpoint", "curves", "mid", "curveBounds", "minX", "minY", "maxX", "maxY", "subCurve", "t0", "t1", "p0", "p1", "dt", "d0", "curveTangentAt", "d1", "VISIBLE_SAMPLES", "visibleStretches", "lengths", "bounds", "yToX", "stretches", "start", "k", "length", "pad", "last", "next", "from", "to", "prev", "dashCurves", "dashWorld", "total", "periods", "spans", "seen", "out", "dash", "end", "translateCurves", "dx", "dy", "attachment", "segments", "side", "TANGENT_SPAN_FACTOR", "MAX_TANGENT", "ownStrand", "id", "strandSides", "edge", "own", "strand", "spanOf", "min", "max", "s", "distanceToSpan", "x", "span", "facingSide", "other", "tieBreak", "startGap", "endGap", "facingSides", "fromSegments", "toSegments", "laidSides", "heldFacingSides", "byTo", "sides", "APEX_FRACTION", "BOW_CLEARANCE", "ALONG_FRACTION", "MAX_ROW_BOW_PX", "ROW_HEIGHT_PX", "bowAround", "p1x", "p1y", "p2x", "p2y", "toward", "maxBow", "chord", "ux", "uy", "reach", "minAlong", "maxAlong", "perp", "along", "uncapped", "size", "yToXOf", "scaleX", "scaleY", "PATH_RIBBON_SPACING_PX", "drawnDirection", "len", "pathRibbonOffsets", "count", "axis", "spacing", "dir", "offsets", "scaleYOf", "unscaleYOf", "polylinePx", "SELF_LOOP_MIN_PX", "SELF_LOOP_MAX_PX", "selfLoopReach", "scale", "nodePx", "selfLinkOf", "edgeJoinOf", "stranded", "self", "hairpinCurves", "attach", "at", "inward", "px", "py", "nearX", "nearY", "apexX", "apexY", "sideX", "sideY", "computeEdgeCurves", "join", "bypassed", "maxBowIn", "loop", "fromAttach", "toAttach", "fromEnd", "toStart", "segDirX", "segDirY", "ext", "perpX", "perpY", "midX", "midY", "cp1x", "cp1y", "cp2x", "cp2y", "fromPrev", "toNext", "dist", "tangentProj", "towardX", "towardY", "towardToX", "towardToY", "cx1", "cy1", "cx2", "cy2", "bulge", "chordLen", "bulgeX", "bulgeY", "spreadX", "spreadY", "nearerEnd", "routedEdgeCurves", "route", "tangent", "q", "ta", "tb", "weakMemo", "cache", "key", "deps", "compute", "hit", "d", "i", "value", "LABEL_PX", "LABEL_CHAR_PX", "LABEL_PAD", "labelWidth", "text", "overlaps", "a", "b", "offFrame", "box", "frame", "insideFrame", "occupancy", "reserved", "placed", "p", "placeLabels", "candidates", "take", "out", "row", "place", "w", "direction", "tries", "y", "flip", "strand", "mergeRuns", "graph", "alone", "sides", "strandSides", "at", "attach", "id", "side", "ei", "pushTo", "edge", "joinAfter", "a", "out", "joined", "runOf", "runs", "node", "into", "pred", "run", "next", "byId", "n", "nodes", "members", "backbone", "isBackbone", "first", "b", "sum", "seen", "edges", "from", "to", "key", "ownStrand", "splitRuns", "positions", "weightOf", "line", "arc", "arcPrefix", "total", "weights", "m", "weightSum", "member", "k", "share", "slice", "polylineSlice", "polylineMidpoint", "pointAt", "i", "firstReaching", "s", "lo", "hi", "mid", "span", "t", "points", "MIN_DELETION_BP", "bypassedPoints", "nodePositions", "bypassed", "id", "edgeCurvesOf", "edge", "axis", "route", "stranded", "from", "to", "routedEdgeCurves", "strandSides", "computeEdgeCurves", "edgeJoinOf", "backboneBySequence", "graph", "bySequence", "groupBy", "isBackbone", "node", "list", "a", "b", "bypassedNodes", "nodes", "start", "end", "i", "firstNodeAtOrAfter", "skipsBetween", "forwards", "fromStrand", "toStrand", "leavesRight", "arrivesLeft", "skippedSpan", "startsOf", "best", "span", "COPY_SWITCH_SHARE", "repeatCopies", "backbone", "refName", "copies", "starts", "next", "switchesCopy", "bp", "partitionPoint", "k", "near", "c", "deletionEdges", "byId", "n", "referenceVisitStarts", "found", "edgeIndex", "closableDeletions", "deletions", "parent", "root", "r", "join", "ra", "rb", "candidates", "d", "e", "ei", "drawings", "deletionDrawing", "show", "byShow", "drawing", "hidden", "MIN_DELETION_LABEL_PX", "PX_PER_NODE_LABEL", "MIN_NODE_LABELS", "LEADER_GAP_PX", "LABEL_CHAR_PX", "LABEL_PAD_PX", "LABEL_HEIGHT_PX", "LABEL_GAP_PX", "MAX_LABEL_OVERHANG", "labelHalfWidth", "text", "LABEL_HALF_HEIGHT", "MIN_LABEL_HALF_WIDTH", "boxAt", "halfW", "x", "y", "rowLabelBox", "screenY", "labelWidth", "clamp", "v", "lo", "hi", "groupDigits", "n", "formatBp", "bp", "value", "unit", "deletionText", "arcOutward", "curves", "apex", "scaleX", "scaleY", "first", "last", "dx", "dy", "len", "boxSupport", "box", "dir", "boxRayCrossing", "halfH", "runBounds", "nodeIds", "nodePositions", "minX", "minY", "maxX", "maxY", "id", "p", "nodeOrderCache", "weakMemo", "labelOrder", "nodeLengths", "segments", "a", "b", "arcCache", "arcPlacements", "deletions", "axis", "version", "routes", "stranded", "arcs", "deletion", "edgeCurvesOf", "curveMidpoint", "curveBounds", "sizeLabelCandidates", "deletionRoutes", "alleleDeletions", "translateX", "translateY", "width", "height", "deletionCandidates", "nodeCandidates", "extent", "arcX", "arcY", "fits", "bow", "offset", "away", "leader", "crossing", "labelledByDeletion", "alleleRuns", "run", "drawn", "shownLeft", "shownRight", "shownTop", "shownBottom", "polylineMidpoint", "polylinePx", "screenX", "nodeLabelBudget", "placeSizeLabels", "candidates", "take", "budget", "labels", "label", "graphLabels", "reserved", "args", "occupancy", "nodes", "nameHue", "name", "hash", "i", "pathHueAt", "index", "count", "PATH_SATURATION", "PATH_LIGHTNESS", "MAX_PATH_COLORS", "pathColorsLegible", "pathCount", "pathCssColor", "pathGreyCssColor", "labelTiers", "parts", "pathOrigin", "full", "isGenericSample", "contig", "offsetTiers", "tiers", "start", "t", "groupDigits", "pathLegend", "paths", "colors", "firstOf", "path", "entries", "named", "e", "candidates", "_", "k", "labels", "labels2", "walkLabelsOf", "seen", "a", "b", "n", "NODE_WIDTHS", "MIN_FACTOR", "MAX_FACTOR", "meanDepth", "graph", "weighted", "length", "node", "depthWidthFactor", "mean", "nodeWidthPx", "contigThickness", "nodeWidth", "maxNodeWidthPx", "MIN_WALK_LANE_PX", "walkLaneWidthPx", "width", "lanes", "nodeInk", "nodeById", "reach", "id"]
7
- }
@@ -1,2 +0,0 @@
1
- import{l as o}from"./chunk-YBZA7LPQ.js";function u(a,r,e){return e?{...a,walkRowRuns:o(a,r)}:a}export{u as a};
2
- //# sourceMappingURL=chunk-QASFRHPG.js.map