jbrowse-plugin-graphgenomeviewer 7.2.0 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist/chunks/GbzBaseSyntenyAdapter-FXMGIM7Z.js +2 -0
  2. package/dist/chunks/{GbzBaseSyntenyAdapter-NB6WBBZH.js.map → GbzBaseSyntenyAdapter-FXMGIM7Z.js.map} +3 -3
  3. package/dist/chunks/{GraphGenomeView-4O5F5I37.js → GraphGenomeView-WJ3FIDY2.js} +2 -2
  4. package/dist/chunks/{GraphTrackSettingsDialog-WZEJAF7F.js → GraphTrackSettingsDialog-ZW7ALMDV.js} +2 -2
  5. package/dist/chunks/{HighlightColorDialog-SRT2FPXP.js → HighlightColorDialog-VBZRUKD5.js} +2 -2
  6. package/dist/chunks/{LinearGraphDisplay-Z33PVCJL.js → LinearGraphDisplay-SPOPTJEN.js} +2 -2
  7. package/dist/chunks/MinigraphBubbleAdapter-QCOMFPLL.js +2 -0
  8. package/dist/chunks/{MinigraphBubbleAdapter-HDLUZ6YF.js.map → MinigraphBubbleAdapter-QCOMFPLL.js.map} +1 -1
  9. package/dist/chunks/RgfaTabixAdapter-O3NMNRZ2.js +2 -0
  10. package/dist/chunks/RgfaTabixAdapter-O3NMNRZ2.js.map +7 -0
  11. package/dist/chunks/WalkTabixSyntenyAdapter-7VDCNSFD.js +2 -0
  12. package/dist/chunks/WalkTabixSyntenyAdapter-7VDCNSFD.js.map +7 -0
  13. package/dist/chunks/chunk-2M4XYSLG.js +2 -0
  14. package/dist/chunks/chunk-2M4XYSLG.js.map +7 -0
  15. package/dist/chunks/{chunk-JLGPQO5L.js → chunk-2O3YVA2I.js} +2 -2
  16. package/dist/chunks/{chunk-CWNJR5XB.js → chunk-44CJ2N3N.js} +1 -1
  17. package/dist/chunks/{chunk-CWNJR5XB.js.map → chunk-44CJ2N3N.js.map} +1 -1
  18. package/dist/chunks/chunk-6KUHGRHU.js +2 -0
  19. package/dist/chunks/chunk-6KUHGRHU.js.map +7 -0
  20. package/dist/chunks/chunk-6MUBJVBG.js +2 -0
  21. package/dist/chunks/chunk-6MUBJVBG.js.map +7 -0
  22. package/dist/chunks/{chunk-GUXZESDR.js → chunk-7HWHWPRW.js} +1 -1
  23. package/dist/chunks/{chunk-GUXZESDR.js.map → chunk-7HWHWPRW.js.map} +1 -1
  24. package/dist/chunks/chunk-B2EP6FOQ.js +3 -0
  25. package/dist/chunks/chunk-B2EP6FOQ.js.map +7 -0
  26. package/dist/chunks/{chunk-44HZPYGC.js → chunk-BXRTG7FU.js} +2 -2
  27. package/dist/chunks/{chunk-44HZPYGC.js.map → chunk-BXRTG7FU.js.map} +1 -1
  28. package/dist/chunks/{chunk-HLKZCTQ3.js → chunk-DBPEUVUC.js} +1 -1
  29. package/dist/chunks/{chunk-HLKZCTQ3.js.map → chunk-DBPEUVUC.js.map} +1 -1
  30. package/dist/chunks/{chunk-FME624X3.js → chunk-DUR437TH.js} +2 -2
  31. package/dist/chunks/{chunk-FME624X3.js.map → chunk-DUR437TH.js.map} +1 -1
  32. package/dist/chunks/{chunk-6WA6WF6A.js → chunk-FIRQAKMX.js} +1 -1
  33. package/dist/chunks/{chunk-6WA6WF6A.js.map → chunk-FIRQAKMX.js.map} +1 -1
  34. package/dist/chunks/chunk-JCAZTNYG.js +2 -0
  35. package/dist/chunks/chunk-JCAZTNYG.js.map +7 -0
  36. package/dist/chunks/chunk-N74HGPAW.js +3 -0
  37. package/dist/chunks/chunk-N74HGPAW.js.map +7 -0
  38. package/dist/chunks/chunk-PEDWEPNK.js +2 -0
  39. package/dist/chunks/chunk-PEDWEPNK.js.map +7 -0
  40. package/dist/chunks/chunk-PYQG3JHP.js +3 -0
  41. package/dist/chunks/chunk-PYQG3JHP.js.map +7 -0
  42. package/dist/chunks/chunk-RFDSEB2X.js +4 -0
  43. package/dist/chunks/chunk-RFDSEB2X.js.map +7 -0
  44. package/dist/chunks/{chunk-O7Y7LYN6.js → chunk-RW775LQN.js} +2 -2
  45. package/dist/chunks/{chunk-O7Y7LYN6.js.map → chunk-RW775LQN.js.map} +1 -1
  46. package/dist/chunks/{chunk-N4WBX2OS.js → chunk-VQ77X5QU.js} +2 -2
  47. package/dist/chunks/{chunk-N4WBX2OS.js.map → chunk-VQ77X5QU.js.map} +1 -1
  48. package/dist/chunks/{chunk-LXCMWL7B.js → chunk-WUSKVEA6.js} +2 -2
  49. package/dist/chunks/{chunk-LXCMWL7B.js.map → chunk-WUSKVEA6.js.map} +1 -1
  50. package/dist/chunks/{chunk-ZNT7TQLN.js → chunk-YKSUKPYY.js} +2 -2
  51. package/dist/chunks/chunk-YKSUKPYY.js.map +7 -0
  52. package/dist/chunks/{renderSvg-RRWCAEGF.js → renderSvg-WD6YDV2I.js} +2 -2
  53. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +4 -4
  54. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  55. package/package.json +3 -3
  56. package/src/GbzBaseSyntenyAdapter/GbzBaseSyntenyAdapter.test.ts +2 -2
  57. package/src/GbzBaseSyntenyAdapter/GbzBaseSyntenyAdapter.ts +1 -1
  58. package/src/GetSubgraph.ts +1 -1
  59. package/src/GraphGenomeView/genes/genes.test.ts +20 -2
  60. package/src/GraphGenomeView/legendSections.test.ts +1 -1
  61. package/src/GraphGenomeView/legendSections.ts +1 -7
  62. package/src/GraphGenomeView/model.test.ts +1 -2
  63. package/src/GraphGenomeView/pane/graphViews.ts +24 -35
  64. package/src/GraphGenomeView/pane/loadActions.ts +4 -3
  65. package/src/GraphGenomeView/pane/paneBase.ts +1 -1
  66. package/src/GraphGenomeView/subgraphLoad.test.ts +41 -1
  67. package/src/GraphGenomeView/walkRowsCut.ts +10 -44
  68. package/src/RgfaTabixAdapter/RgfaTabixAdapter.test.ts +23 -4
  69. package/src/RgfaTabixAdapter/RgfaTabixAdapter.ts +2 -3
  70. package/src/RgfaTabixAdapter/bubbleTier.test.ts +1 -1
  71. package/src/RgfaTabixAdapter/test_data/walks3_inversion.GRCh38.walks.bed.gz +0 -0
  72. package/src/RgfaTabixAdapter/test_data/walks3_inversion.GRCh38.walks.bed.gz.tbi +0 -0
  73. package/src/RgfaTabixAdapter/walkCut.ts +20 -0
  74. package/src/RgfaTabixAdapter/walkFiles.test.ts +2 -2
  75. package/src/RgfaTabixAdapter/walkReader.ts +1 -1
  76. package/src/WalkTabixSyntenyAdapter/WalkTabixSyntenyAdapter.test.ts +77 -1
  77. package/src/WalkTabixSyntenyAdapter/WalkTabixSyntenyAdapter.ts +2 -2
  78. package/src/WalkTabixSyntenyAdapter/walkLanes.ts +55 -18
  79. package/src/version.ts +1 -1
  80. package/dist/chunks/GbzBaseSyntenyAdapter-NB6WBBZH.js +0 -2
  81. package/dist/chunks/MinigraphBubbleAdapter-HDLUZ6YF.js +0 -2
  82. package/dist/chunks/RgfaTabixAdapter-XZRTWQMZ.js +0 -3
  83. package/dist/chunks/RgfaTabixAdapter-XZRTWQMZ.js.map +0 -7
  84. package/dist/chunks/WalkTabixSyntenyAdapter-WBHOZLAN.js +0 -2
  85. package/dist/chunks/WalkTabixSyntenyAdapter-WBHOZLAN.js.map +0 -7
  86. package/dist/chunks/chunk-BWP3XYKD.js +0 -2
  87. package/dist/chunks/chunk-BWP3XYKD.js.map +0 -7
  88. package/dist/chunks/chunk-EDSIYH4H.js +0 -2
  89. package/dist/chunks/chunk-EDSIYH4H.js.map +0 -7
  90. package/dist/chunks/chunk-III4GT4G.js +0 -2
  91. package/dist/chunks/chunk-III4GT4G.js.map +0 -7
  92. package/dist/chunks/chunk-N5GYTUIL.js +0 -3
  93. package/dist/chunks/chunk-N5GYTUIL.js.map +0 -7
  94. package/dist/chunks/chunk-PA4HKAUJ.js +0 -2
  95. package/dist/chunks/chunk-PA4HKAUJ.js.map +0 -7
  96. package/dist/chunks/chunk-PFAHNHMM.js +0 -2
  97. package/dist/chunks/chunk-PFAHNHMM.js.map +0 -7
  98. package/dist/chunks/chunk-UFQTIWSN.js +0 -4
  99. package/dist/chunks/chunk-UFQTIWSN.js.map +0 -7
  100. package/dist/chunks/chunk-VDHDEEMF.js +0 -2
  101. package/dist/chunks/chunk-VDHDEEMF.js.map +0 -7
  102. package/dist/chunks/chunk-WGVATZLM.js +0 -3
  103. package/dist/chunks/chunk-WGVATZLM.js.map +0 -7
  104. package/dist/chunks/chunk-ZNT7TQLN.js.map +0 -7
  105. package/src/RgfaTabixAdapter/rgfaBed.test.ts +0 -254
  106. package/src/RgfaTabixAdapter/rgfaBed.ts +0 -314
  107. package/src/RgfaTabixAdapter/rgfaCut.ts +0 -139
  108. package/src/RgfaTabixAdapter/walkRowRuns.test.ts +0 -192
  109. package/src/RgfaTabixAdapter/walkRowRuns.ts +0 -520
  110. /package/dist/chunks/{GraphGenomeView-4O5F5I37.js.map → GraphGenomeView-WJ3FIDY2.js.map} +0 -0
  111. /package/dist/chunks/{GraphTrackSettingsDialog-WZEJAF7F.js.map → GraphTrackSettingsDialog-ZW7ALMDV.js.map} +0 -0
  112. /package/dist/chunks/{HighlightColorDialog-SRT2FPXP.js.map → HighlightColorDialog-VBZRUKD5.js.map} +0 -0
  113. /package/dist/chunks/{LinearGraphDisplay-Z33PVCJL.js.map → LinearGraphDisplay-SPOPTJEN.js.map} +0 -0
  114. /package/dist/chunks/{chunk-JLGPQO5L.js.map → chunk-2O3YVA2I.js.map} +0 -0
  115. /package/dist/chunks/{renderSvg-RRWCAEGF.js.map → renderSvg-WD6YDV2I.js.map} +0 -0
@@ -1,2 +0,0 @@
1
- import{a as ut,c as W,e as lt,g as C,l as dt,q as xt}from"./chunk-BWP3XYKD.js";import{a as ht,b as yt}from"./chunk-GUXZESDR.js";var jt=/:(\d+)-\d+$/,Ut=/^([^#]*#[^#]*#[^#[]*)#(\d+)(?:\[(\d+)-\d+\])?$/,zt=/\[(\d+)-\d+\]$/;function Y(t){let n=Ut.exec(t);if(n)return{name:n[1],start:+n[2]+ +(n[3]??0)};let o=jt.exec(t)??zt.exec(t);return o?{name:t.slice(0,o.index),start:+o[1]}:{name:t,start:0}}function ao(t,n){let o=[],e=new xt;for(let s of t){let c=ht(s.name),r=e.pathOf(s.name,c),a=s.start;for(let f of s.steps)e.addAt(e.declare(f.id),r,a,f.strand==="-"),a+=n(f.id);o.push({name:s.name,sample:c,start:s.start,length:a-s.start})}return{anchorPaths:o,pathVisits:e.build()}}function qt(t,n){return t.find(e=>e.sample===n||e.name===n)??t[0]}var Jt=1;function Kt(t,n,o,e){let s=n.slot(t.name);if(s<0||n.offsets[s]===n.offsets[s+1])return t;let c=n.firstBy(s,o),r=c>=0?c:n.offsets[s];return{...t,stable:{refName:n.paths[n.path[r]],start:n.start[r],rank:c>=0?lt:Jt,strand:n.strand(r)},samples:e(s)}}function Qt(t){let n=[...new Set(t.samples)].sort(),o=new Map(n.map((r,a)=>[r,a])),e=Int32Array.from(t.samples,r=>o.get(r)),s=new Uint8Array(n.length),c=new Int32Array(n.length);return r=>{let a=0;for(let u=t.offsets[r];u<t.offsets[r+1];u++){let l=e[t.path[u]];s[l]===0&&(s[l]=1,c[a++]=l)}let f;if(a===n.length)f=n,s.fill(0);else if(a*8<n.length){let u=c.subarray(0,a);u.forEach(l=>s[l]=0),f=Array.from(u.sort(),l=>n[l])}else{f=[];for(let u=0;u<n.length;u++)s[u]===1&&(s[u]=0,f.push(n[u]))}return f}}function Zt(t,n){let{anchorPaths:o,pathVisits:e}=t,s=o&&e?qt(o,n):void 0;if(!s||!o||!e)return t;let c=Qt(e),r=e.pathIndex(s.name);return{...t,nodes:t.nodes.map(a=>Kt(a,e,r,c)),anchoredBy:"paths",referencePath:s.name}}function io(t,n){if(t.anchoredBy!=="tags")return Zt(t,n);let o=tn(t);return o?{...t,referencePath:o}:t}function tn(t){let n=t.nodes.find(o=>o.stable?.rank===0)?.stable?.refName;return n!==void 0&&t.anchorPaths?.some(o=>o.name===n)?n:void 0}function fo(t,n){if(!t.anchorPaths)return;let o=new Map(t.nodes.map(c=>[c.id,c.length])),e=(c,r=c.length)=>{let a=0;for(let f=0;f<r;f++)a+=o.get(c[f])??0;return a},s=W(t.paths??[],c=>Y(c.name).name);return t.anchorPaths.map(c=>{let r=s.get(c.name),a=r?.length===1?r[0]:void 0,f=a&&n.get(a.name);return a&&f?{...c,start:c.start+e(a.nodeIds,f.first),length:e(f.nodeIds)}:c})}function q(){let t=new WeakMap;return(n,o,e)=>{let s=t.get(n);if(s?.deps.length===o.length&&s.deps.every((r,a)=>Object.is(r,o[a])))return s.value;let c=e();return t.set(n,{deps:o,value:c}),c}}var pt=11,nn=6.2,D=4;function J(t){return t.length*nn+D*2}function on(t,n){return t.x0<n.x1&&t.x1>n.x0&&t.y0<n.y1&&t.y1>n.y0}function mt(t,n){return t.x1<=0||t.x0>=n.width||t.y1<=0||t.y0>=n.height}function en(t,n){return t.x0>=0&&t.x1<=n.width&&t.y0>=0&&t.y1<=n.height}function Mt(t,n=[]){let o=[...n];return e=>mt(e,t)||o.some(s=>on(s,e))?!1:(o.push(e),!0)}function ho(t,n,o){let e=[],s=pt+D*2,c=(r,a)=>{let f=J(a),u=r.y>n.height/2?-1:1;for(let l=0;l<=(r.stack??0);l++){let h=r.y+u*l*s,y={x0:r.x-f/2,x1:r.x+f/2,y0:h-pt-D,y1:h+D};if(mt(y,n))return;if(en(y,n)&&(r.fits?.(y)??!0)&&o(y))return{...r,text:a,y:h,w:f}}};for(let r of t){let a=c(r,r.text)??(r.fallback===void 0?void 0:c(r,r.fallback));a&&e.push(a)}return e}var bt=20;function mo(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 gt(t,n,o,e,s){let c=Math.hypot(e-n,o-t);if(c===0)return[o,e];let r=(o-t)/c,a=(e-n)/c;return[o+s*r,e+s*a]}function Z(t,n){let o=1-n,e=o*o*o,s=3*o*o*n,c=3*o*n*n,r=n*n*n;return{x:e*t.x0+s*t.cx0+c*t.cx1+r*t.x1,y:e*t.y0+s*t.cy0+c*t.cy1+r*t.y1}}function Lt(t){let n=t[Math.floor(t.length/2)];return n?Z(n,.5):void 0}function Pt(t){let n=1/0,o=1/0,e=-1/0,s=-1/0;for(let c of t)n=Math.min(n,c.x0,c.cx0,c.cx1,c.x1),e=Math.max(e,c.x0,c.cx0,c.cx1,c.x1),o=Math.min(o,c.y0,c.cy0,c.cy1,c.y1),s=Math.max(s,c.y0,c.cy0,c.cy1,c.y1);return{minX:n,minY:o,maxX:e,maxY:s}}function rn(t,n,o){let e=Z(t,n),s=Z(t,o),c=(o-n)/3,r=vt(t,n),a=vt(t,o);return{x0:e.x,y0:e.y,cx0:e.x+r.x*c,cy0:e.y+r.y*c,cx1:s.x-a.x*c,cy1:s.y-a.y*c,x1:s.x,y1:s.y}}function vt(t,n){let o=1-n,e=3*o*o,s=6*o*n,c=3*n*n;return{x:e*(t.cx0-t.x0)+s*(t.cx1-t.cx0)+c*(t.x1-t.cx1),y:e*(t.cy0-t.y0)+s*(t.cy1-t.cy0)+c*(t.y1-t.cy1)}}function Mo(t,n){let o=t.map(r=>Math.hypot(r.cx0-r.x0,r.cy0-r.y0)+Math.hypot(r.cx1-r.cx0,r.cy1-r.cy0)+Math.hypot(r.x1-r.cx1,r.y1-r.cy1)),e=o.reduce((r,a)=>r+a,0),s=Math.max(3,Math.round(e/n)|1),c=[];for(let r=0;r<s;r+=2){let a=r/s*e,f=(r+1)/s*e,u=[],l=0;t.forEach((h,y)=>{let i=o[y],d=l+i;i>0&&d>a&&l<f&&u.push(rn(h,Math.max(0,(a-l)/i),Math.min(1,(f-l)/i))),l=d}),u.length&&c.push(u)}return c}function bo(t,n,o){let e=new Array(t.length);for(let s=0;s<t.length;s++){let c=t[s];e[s]={x0:c.x0+n,y0:c.y0+o,cx0:c.cx0+n,cy0:c.cy0+o,cx1:c.cx1+n,cy1:c.cy1+o,x1:c.x1+n,y1:c.y1+o}}return e}function k(t,n){let o=t.length-1;return n==="end"?{at:t[o],inward:t[o-1]}:{at:t[0],inward:t[1]}}var sn=.5,cn=80;function H(t){return t.endsWith("-")?"-":"+"}function F(t){let n=(o,e)=>(e??H(o))===H(o);return{from:n(t.from,t.fromStrand)?"end":"start",to:n(t.to,t.toStrand)?"start":"end"}}function At(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 wt(t,n){return Math.max(0,n.min-t,t-n.max)}function _t(t,n,o){let e=wt(t[0].x,n),s=wt(t[t.length-1].x,n);return e===s?o:e<s?"start":"end"}function an(t,n){return{from:_t(t,At(n),"end"),to:_t(n,At(t),"start")}}var Et=new WeakMap;function fn(t,n){let o=Et.get(t);o||(o=new WeakMap,Et.set(t,o));let e=o.get(n);return e||(e=an(t,n),o.set(n,e)),e}var un=.75,ln=1.15,dn=.35,hn=3*bt;function yn(t,n,o,e,s,c){let r=Math.hypot(o-t,e-n),a=r===0?1:(o-t)/r,f=r===0?0:(e-n)/r,u=0,l=1/0,h=-1/0;for(let x of s){let m=x.x-t,b=x.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),h=Math.max(h,M)}let y=s.length?h-l:0,i=Math.max(Math.abs(u)*ln/un,y*dn),d=c===void 0?i:Math.min(i,c);return u<0?-d:d}function Xt({scaleX:t,scaleY:n}){return n/t}var xn=3;function K(t,n,o){let e=n.x-t.x,s=(n.y-t.y)*o,c=Math.hypot(e,s);return c===0?void 0:{x:e/c,y:s/c}}function go(t,n,o,e){let s=Xt(e),c=xn/Math.max(e.scaleX,1e-6),r=K(t[t.length-1],n[0],s)??K(t[0],t.at(-1),s)??K(n[0],n.at(-1),s)??{x:1,y:0},a=[];for(let f=0;f<o;f++){let u=(f-(o-1)/2)*c;a.push({x:-r.y*u,y:r.x*u/s})}return a}function Q(t,n){return t.map(o=>({x:o.x,y:o.y*n}))}function pn(t,n){for(let o of t)o.y0/=n,o.cy0/=n,o.cy1/=n,o.y1/=n;return t}function tt(t,n,o){let e=0;for(let s=1;s<t.length;s++){let c=t[s-1],r=t[s];e+=Math.hypot((r.x-c.x)*n,(r.y-c.y)*o)}return e}var mn=12,Mn=40;function It(t,n){let o=tt(t,n,n);return Math.min(Mn,Math.max(mn,o/2))/Math.max(n,Number.EPSILON)}function bn(t){return t.from!==t.to?!1:t.fromStrand&&t.toStrand&&t.fromStrand!==t.toStrand?t.fromStrand==="+"?"end":"start":!0}function Nt(t,n=!1){let o=bn(t);if(!n)return o;let e=F(t);return o===!1?e:e.from===e.to?e.from:!0}function gn(t,n){let{at:o,inward:e}=t,s=e?o.x-e.x:1,c=e?o.y-e.y:0,r=Math.hypot(s,c)||1,a=s/r,f=c/r,u=o.x,l=o.y,h=u+a*n/3,y=l+f*n/3,i=u+a*n,d=l+f*n,x=-f*n/2,m=a*n/2;return[{x0:u,y0:l,cx0:h,cy0:y,cx1:i+x,cy1:d+m,x1:i,y1:d},{x0:i,y0:d,cx0:i-x,cy0:d-m,cx1:h,cy1:y,x1:u,y1:l}]}function nt(t,n,o,e,s=[],c){let r=e.scaleX,a=Xt(e),f=c??(e.pixelRows?hn:void 0);if(o===!1&&(o=fn(t,n)),a!==1)return pn(nt(Q(t,a),Q(n,a),o,{scaleX:r,scaleY:r},Q(s,a),f===void 0?void 0:f*a),a);if(typeof o=="string")return gn(k(t,o),It(t,r));let u=o===!0,l=o===!0?{from:"end",to:"start"}:o,h=k(t,l.from),y=k(n,l.to),i=h.at,d=y.at,x=i.x,m=i.y,b=d.x,p=d.y;if(u){let M=1,w=0;if(h.inward){let P=i.x-h.inward.x,X=i.y-h.inward.y,S=Math.hypot(P,X);S>0&&(M=P/S,w=X/S)}let g=It(t,r),_=-w,A=M,I=(i.x+d.x)/2+_*g,E=(i.y+d.y)/2+A*g,v=x+M*g,N=m+w*g,L=b-M*g,O=p-w*g;return[{x0:x,y0:m,cx0:v,cy0:N,cx1:v+_*g,cy1:N+A*g,x1:I,y1:E},{x0:I,y0:E,cx0:L+_*g,cy0:O+A*g,cx1:L,cy1:O,x1:b,y1:p}]}else{let M=h.inward??{x:i.x-(d.x-i.x),y:i.y-(d.y-i.y)},w=y.inward??{x:d.x-(i.x-d.x),y:d.y-(i.y-d.y)},g=Math.hypot(b-x,p-m),_=(st,ct,Yt,Dt)=>{let at=ct.x-st.x,it=ct.y-st.y,ft=Math.hypot(at,it),Vt=ft===0?0:(Yt*at+Dt*it)/ft;return Math.max(0,Math.min(g*sn,cn,Vt*.5))},A=d.x-i.x,I=d.y-i.y,[E,v]=gt(M.x,M.y,i.x,i.y,_(M,i,A,I)),[N,L]=gt(w.x,w.y,d.x,d.y,_(w,d,-A,-I)),O=s.length?yn(x,m,b,p,s,f):0,P=g===0?1:g,X=(b-x)/P,S=(p-m)/P,T=-S*O,R=X*O,$=X*Math.abs(O),rt=S*Math.abs(O);return[{x0:x,y0:m,cx0:E+T-$,cy0:v+R-rt,cx1:N+T+$,cy1:L+R+rt,x1:b,y1:p}]}}function Ot(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 St(t,n,o,e){let s=k(t,e?.from??Ot(t,o[0])),c=k(n,e?.to??Ot(n,o.at(-1))),r=[s.at,...o,c.at],a=u=>{let l=r[u],h=i=>Math.hypot(i.x-l.x,i.y-l.y),y=(i,d)=>{let x=i?h(i):0,m=h(d);return x===0?{x:d.x-l.x,y:d.y-l.y}:{x:(l.x-i.x)/x*m,y:(l.y-i.y)/x*m}};if(u===0)return y(s.inward,r[1]);if(u===r.length-1){let i=y(c.inward,r[u-1]);return{x:-i.x,y:-i.y}}return{x:(r[u+1].x-r[u-1].x)/2,y:(r[u+1].y-r[u-1].y)/2}},f=[];for(let u=0;u<r.length-1;u++){let l=r[u],h=r[u+1],y=a(u),i=a(u+1);f.push({x0:l.x,y0:l.y,cx0:l.x+y.x/3,cy0:l.y+y.y/3,cx1:h.x-i.x/3,cy1:h.y-i.y/3,x1:h.x,y1:h.y})}return f}function Bt(t){return t==="+"?"-":"+"}function Eo(t,n=new Set){let o=t.edges.map(F),e=new Map,s=(i,d,x)=>{ut(e,`${i}|${d}`,x)};t.edges.forEach((i,d)=>{s(i.from,o[d].from,d),s(i.to,o[d].to,d)});let c=i=>{let d=e.get(`${i}|end`);if(d?.length!==1)return;let x=d[0],m=t.edges[x];return m.from===i&&m.to!==i&&!n.has(i)&&!n.has(m.to)&&o[x].from==="end"&&o[x].to==="start"&&e.get(`${m.to}|start`)?.length===1?x:void 0},r=new Set,a=new Map,f=new Map;for(let i of t.nodes){let d=e.get(`${i.id}|start`),x=d?.length===1?t.edges[d[0]].from:void 0;if(a.has(i.id)||x!==void 0&&c(x)===d[0])continue;let m=[i.id];for(;;){let b=c(m.at(-1)),p=b===void 0?void 0:t.edges[b].to;if(p===void 0||a.has(p))break;r.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 d=f.get(i.id);if(!d){l.push(i);continue}let x=d.map(p=>u.get(p)),m=x.filter(C),b=m.length?m.reduce((p,M)=>p.stable.start<=M.stable.start?p:M):x[0];l.push({id:i.id,name:i.name,length:x.reduce((p,M)=>p+M.length,0),depth:i.depth,stable:b.stable})}let h=new Set,y=[];return t.edges.forEach((i,d)=>{let x=a.get(i.from),m=a.get(i.to),b=o[d],p=`${x}|${b.from}>${m}|${b.to}`;r.has(d)||h.has(p)||(h.add(p),y.push({from:x,to:m,...b.from==="start"?{fromStrand:Bt(H(x))}:{},...b.to==="end"?{toStrand:Bt(H(m))}:{}}))}),{graph:{...t,nodes:l,edges:y,paths:void 0,pathVisits:void 0},runs:f}}function Io(t,n,o){let e={...t};for(let[s,c]of n){let r=t[s];if(!r?.length)continue;delete e[s];let a=et(r),f=a.at(-1),u=c.map(y=>Math.max(o(y),0)),l=u.reduce((y,i)=>y+i,0),h=0;c.forEach((y,i)=>{let d=l?u[i]/l*f:f/c.length,x=i===c.length-1?f:h+d;e[y]=Ct(r,a,h,x),h=x})}return e}function Oo(t,n,o){if(t.length===0)return[];let e=et(t),s=e.at(-1);return Ct(t,e,n*s,o*s)}function Rt(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 ot(t,n,o){if(o<=0)return{...t[0]};let e=1;for(;e<n.length&&n[e]<o;)e++;if(e>=n.length)return{...t.at(-1)};let s=n[e]-n[e-1],c=s>0?(o-n[e-1])/s:0,r=t[e-1],a=t[e];return{x:r.x+(a.x-r.x)*c,y:r.y+(a.y-r.y)*c}}function Ct(t,n,o,e){let s=[ot(t,n,o)];for(let c=0;c<t.length;c++)n[c]>o&&n[c]<e&&s.push({...t[c]});return s.push(ot(t,n,e)),s}var vn=1;function An(t,n){return n.flatMap(o=>t[o]??[])}function $t(t,n,o,e,s,c){let r=t[n.from],a=t[n.to];if(!(!r?.length||!a?.length))return s?St(r,a,s,c?F(n):void 0):nt(r,a,Nt(n,c),o,e?An(t,e):[])}function wn(t){let n=W(t.nodes.filter(C),o=>o.stable.refName);for(let o of n.values())o.sort((e,s)=>e.stable.start-s.stable.start);return n}function _n(t,n,o){let e=[];if(t)for(let s=dt(t,n);s<t.length;s++){let c=t[s];if(c.stable.start>=o)break;c.stable.start+c.length<=o&&e.push(c.id)}return e}function En(t,n,o,e){let{fromStrand:s,toStrand:c}=t;if(s===void 0||c===void 0)return!0;let r=s===(n.stable.strand??"+"),a=c===(o.stable.strand??"+");return e?r&&a:!r&&!a}function So(t){let n=new Map(t.nodes.map(s=>[s.id,s])),o=wn(t),e=[];for(let s=0;s<t.edges.length;s++){let c=t.edges[s],r=n.get(c.from),a=n.get(c.to);if(r!==void 0&&a!==void 0&&C(r)&&C(a)&&r.stable.refName===a.stable.refName){let f=r.stable.start<=a.stable.start,[u,l]=f?[r,a]:[a,r],h=u.stable.start+u.length,y=l.stable.start,i=y-h;if(i>=vn&&En(c,r,a,f)){let d=u.stable.refName;e.push({edgeIndex:s,from:c.from,to:c.to,...c.fromStrand?{fromStrand:c.fromStrand}:{},...c.toStrand?{toStrand:c.toStrand}:{},refName:d,start:h,end:y,bp:i,bypassed:_n(o.get(d),h,y)})}}}return e}function In(t,n){let o=new Map,e=r=>{let a=r;for(;o.has(a);)a=o.get(a);return a!==r&&o.set(r,a),a},s=(r,a)=>{let[f,u]=[e(r),e(a)];return f!==u&&o.set(f,u),f!==u},c=new Set(n.map(r=>r.edgeIndex));return t.edges.forEach((r,a)=>{c.has(a)||s(r.from,r.to)}),new Set(n.filter(r=>!s(r.from,r.to)).map(r=>r.edgeIndex))}var Tt=new WeakMap;function Bo(t,n,o=!0){let e=Tt.get(n);e||(e=new Map,Tt.set(n,e));let s=e.get(o);if(!s){let c=o?new Set:In(t,n);s={shown:n.filter(r=>!c.has(r.edgeIndex)),bypassed:new Map(n.map(r=>[r.edgeIndex,r.bypassed])),hidden:c},e.set(o,s)}return s}var On=26,Ln=4e4,Pn=8,Xn=8,Nn=5.7,Sn=6,Bn=13,G=3,V=2;function z(t){return(t.length*Nn+Sn+G)/2}var B=(Bn+G)/2,Rn=z("1 bp");function j(t,n,o){return{x0:n-t,x1:n+t,y0:o-B,y1:o+B}}function Fo(t,n){return{x0:6,x1:6+J(t)+G,y0:n-8-G/2,y1:n+8+G/2}}function U(t,n,o){return o<n?t:Math.min(Math.max(t,n),o)}function Ft(t){return String(t).replace(/\B(?=(\d{3})+$)/g,",")}function Gt(t){let[n,o]=t>=1e6?[t/1e6,"Mb"]:t>=1e3?[t/1e3,"kb"]:[];return n===void 0?`${t} bp`:`${+n.toFixed(n>=100?0:1)} ${o}`}function kt(t){return`${Gt(t)} del`}function Cn(t,n,o,e){let s=t[0],c=t[t.length-1],r=(n.x-(s.x0+c.x1)/2)*o,a=(n.y-(s.y0+c.y1)/2)*e,f=Math.hypot(r,a);return f===0?{x:0,y:-1}:{x:r/f,y:a/f}}function Tn(t,n){return Math.abs(n.x)*(t.x1-t.x0)/2+Math.abs(n.y)*(t.y1-t.y0)/2}function $n(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 kn(t,n){let o=1/0,e=1/0,s=-1/0,c=-1/0;for(let r of t)for(let a of n[r]??[])o=Math.min(o,a.x),s=Math.max(s,a.x),e=Math.min(e,a.y),c=Math.max(c,a.y);return o===1/0?void 0:{minX:o,minY:e,maxX:s,maxY:c}}var Hn=q();function Fn(t,n){return Hn(t,[n],()=>Object.entries(t).filter(([o,e])=>e.length>0&&n.has(o)).sort(([o],[e])=>n.get(e)-n.get(o)))}var Gn=q();function Wn(t,n,o,e,s,c){let{scaleX:r,scaleY:a}=o;return Gn(t,[n,s,c,r,a,e],()=>{let f=[];for(let u of[...n].sort((l,h)=>h.bp-l.bp)){let l=$t(t,u,o,u.bypassed,s?.[u.edgeIndex],c),h=l?Lt(l):void 0;if(l&&h){let{minX:y,minY:i,maxX:d,maxY:x}=Pt(l);f.push({deletion:u,curves:l,apex:h,extent:Math.max((d-y)*r,(x-i)*a)})}}return f})}function Yn({nodePositions:t,nodeLengths:n,deletions:o,deletionRoutes:e,stranded:s=!1,alleleDeletions:c,axis:r,translateX:a,translateY:f,width:u,height:l,version:h=0}){let{scaleX:y,scaleY:i}=r,d=[],x=[];for(let{deletion:p,curves:M,apex:w,extent:g}of Wn(t,o,r,h,e,s))if(g>=On){let _=kt(p.bp),A=z(_),I=j(A,0,0),E=w.x*y+a,v=w.y*i+f;if(E<0||E>u||v<0||v>l)continue;let N=g>=A*2/V,L=Cn(M,w,y,i),O=Tn(I,L)+Xn,P=N?E:U(E+L.x*O,A,u-A),X=N?v:U(v+L.y*O,B,l-B),S=Math.hypot(P-E,X-v),T;if(S>0){let R={x:(P-E)/S,y:(X-v)/S},$=$n(I,R);T={arcX:E,arcY:v,labelX:P-R.x*$,labelY:X-R.y*$}}d.push({label:{key:`del:${p.edgeIndex}`,text:_,x:P,y:X,kind:"deletion",leader:T},box:j(A,P,X)})}let m=new Set,b=[...c??[]].sort((p,M)=>M.bp-p.bp);for(let p of b){let M=kn(p.nodeIds,t);if(!M)continue;let w=Math.max(M.minX*y+a,0),g=Math.min(M.maxX*y+a,u),_=Math.max(M.minY*i+f,0),A=Math.min(M.maxY*i+f,l);if(g<w||A<_)continue;let I=Math.max(g-w,A-_),E=kt(p.bp),v=z(E);if(I>=v*2/V){for(let O of p.nodeIds)m.add(O);let N=U((w+g)/2,v,u-v),L=U((_+A)/2,B,l-B);d.push({label:{key:`alleledel:${p.nodeIds.join(",")}`,text:E,x:N,y:L,kind:"deletion"},box:j(v,N,L)})}}for(let[p,M]of Fn(t,n)){if(m.has(p))continue;let{x:w,y:g}=Rt(M),_=g*i+f;if(_+B<=0||_-B>=l)continue;let A=tt(M,y,i);if(A<Rn*2/V)continue;let I=Gt(n.get(p)),E=z(I);if(A>=E*2/V){let v=w*y+a;x.push({label:{key:`node:${p}`,text:I,x:v,y:_,kind:"node"},box:j(E,v,_)})}}return{deletions:d,nodes:x}}function Dn(t,n){return Math.max(Pn,Math.floor(t*n/Ln))}function Ht(t,n,o=1/0){let e=[];for(let{label:s,box:c}of t){if(e.length>=o)break;n(c)&&e.push(s)}return e}function Go({reserved:t,take:n,...o}){n??=Mt(o,t);let{deletions:e,nodes:s}=Yn(o);return[...Ht(e,n),...Ht(s,n,Dn(o.width,o.height))]}function jo(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 Vn(t,n){return t*360/n}var jn=.7,Un=.5,zn=16;function Uo(t){return t>0&&t<=zn}function qn(t,n){return`hsl(${Vn(t,n)}, ${jn*100}%, ${Un*100}%)`}function zo(t,n){return`hsl(0, 0%, ${n>1?25+45*t/(n-1):45}%)`}function Jn(t){let n=Y(t).name.split("#"),o=n.join("#");if(n.length>=3&&yt(n[0])){let e=n.slice(2).join("#");return[e,e,o]}return[n[0],n.slice(0,2).join("#"),o]}function Kn(t,n){let{start:o}=Y(t);return n.map(e=>`${e} @${Ft(o)}`)}function qo(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})),s=e.map(f=>Jn(f.name)),c=[0,1,2].flatMap(f=>[e.map((u,l)=>s[l][f]),e.map((u,l)=>Kn(u.name,s[l])[f])]),a=c.find(f=>new Set(f).size===e.length)??c.at(-1);return e.map(({name:f,i:u},l)=>({name:f,label:a[l],color:n?.[u]??qn(u,t.length)}))}function Jo(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 Qo=[{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."}],Qn=.3,Wt=3;function Zn(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 to(t,n){return!(n>0)||!(t.depth>0)?1:Math.min(Wt,Math.max(Qn,Math.sqrt(t.depth/n)))}function no(t,n,o,e){return n*(o==="depth"?to(t,e):1)}function oo(t,n){return t*(n==="depth"?Wt:1)}function Zo(t,n,o,e){let s=t?Zn(t):0;return{maxHalfWidthPx:oo(o,e)/2,halfWidthPx:c=>{let r=n?.get(c);return r?no(r,o,e,s)/2:o/2}}}export{Y as a,ao as b,qt as c,Zt as d,io as e,fo as f,q as g,pt as h,nn as i,D as j,J as k,Mt as l,ho as m,bt as n,mo as o,Pt as p,Mo as q,bo as r,H as s,F as t,Xt as u,go as v,tt as w,Eo as x,Io as y,Oo as z,$t as A,So as B,Bo as C,Fo as D,Ft as E,Gt as F,Go as G,jo as H,Vn as I,jn as J,Un as K,zn as L,Uo as M,qn as N,zo as O,qo as P,Jo as Q,Qo as R,Zn as S,no as T,Zo as U};
2
- //# sourceMappingURL=chunk-PA4HKAUJ.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.0.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-B5X2RLJG.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.0.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HMXCN6PG.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.0.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-AB35TJST.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.0.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-CPMHA4W5.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.0.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-UBQSRCWR.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.0.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BZFOFC4D.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.0.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-CGMSKIEO.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.0.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-PFRQBCGC.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.0.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-3GP3KT5L.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.0.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-CRCD3ODN.js"],
4
- "sourcesContent": ["import {\n PathVisitsBuilder\n} from \"./chunk-ZPZ7GNBT.js\";\nimport {\n groupBy\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n REFERENCE_RANK\n} from \"./chunk-RJWPJCIB.js\";\nimport {\n panSNSample\n} from \"./chunk-4XWZNPQ2.js\";\n\n// src/pathAnchoring.ts\nvar RANGE_SUFFIX = /:(\\d+)-\\d+$/;\nvar VG_FRAGMENT = /^([^#]*#[^#]*#[^#[]*)#(\\d+)(?:\\[(\\d+)-\\d+\\])?$/;\nvar VG_SUBRANGE = /\\[(\\d+)-\\d+\\]$/;\nfunction pathOrigin(pathName) {\n const fragment = VG_FRAGMENT.exec(pathName);\n if (fragment) {\n return { name: fragment[1], start: +fragment[2] + +(fragment[3] ?? 0) };\n }\n const match = RANGE_SUFFIX.exec(pathName) ?? VG_SUBRANGE.exec(pathName);\n return match ? { name: pathName.slice(0, match.index), start: +match[1] } : { name: pathName, start: 0 };\n}\nfunction surveyPaths(paths, lengthOf) {\n const anchorPaths = [];\n const visits = new PathVisitsBuilder();\n for (const path of paths) {\n const sample = panSNSample(path.name);\n const p = visits.pathOf(path.name, sample);\n let pos = path.start;\n for (const step of path.steps) {\n visits.addAt(visits.declare(step.id), p, pos, step.strand === \"-\");\n pos += lengthOf(step.id);\n }\n anchorPaths.push({\n name: path.name,\n sample,\n start: path.start,\n length: pos - path.start\n });\n }\n return { anchorPaths, pathVisits: visits.build() };\n}\nfunction chooseReferencePath(anchorPaths, preferred) {\n const named = anchorPaths.find(\n (p) => p.sample === preferred || p.name === preferred\n );\n return named ?? anchorPaths[0];\n}\nvar OFF_REFERENCE_RANK = 1;\nfunction anchorNode(node, visits, reference, samplesOf) {\n const slot = visits.slot(node.name);\n if (slot < 0 || visits.offsets[slot] === visits.offsets[slot + 1]) {\n return node;\n }\n const own = visits.firstBy(slot, reference);\n const anchor = own >= 0 ? own : visits.offsets[slot];\n return {\n ...node,\n stable: {\n refName: visits.paths[visits.path[anchor]],\n start: visits.start[anchor],\n rank: own >= 0 ? REFERENCE_RANK : OFF_REFERENCE_RANK,\n strand: visits.strand(anchor)\n },\n samples: samplesOf(slot)\n };\n}\nfunction sampleSorter(visits) {\n const sorted = [...new Set(visits.samples)].sort();\n const rank = new Map(sorted.map((sample, i) => [sample, i]));\n const pathRank = Int32Array.from(visits.samples, (s) => rank.get(s));\n const seen = new Uint8Array(sorted.length);\n const ranks = new Int32Array(sorted.length);\n return (slot) => {\n let n = 0;\n for (let i = visits.offsets[slot]; i < visits.offsets[slot + 1]; i++) {\n const r = pathRank[visits.path[i]];\n if (seen[r] === 0) {\n seen[r] = 1;\n ranks[n++] = r;\n }\n }\n let out;\n if (n === sorted.length) {\n out = sorted;\n seen.fill(0);\n } else if (n * 8 < sorted.length) {\n const found = ranks.subarray(0, n);\n found.forEach((r) => seen[r] = 0);\n out = Array.from(found.sort(), (r) => sorted[r]);\n } else {\n out = [];\n for (let r = 0; r < sorted.length; r++) {\n if (seen[r] === 1) {\n seen[r] = 0;\n out.push(sorted[r]);\n }\n }\n }\n return out;\n };\n}\nfunction anchorFromPaths(graph, preferred) {\n const { anchorPaths, pathVisits } = graph;\n const reference = anchorPaths && pathVisits ? chooseReferencePath(anchorPaths, preferred) : void 0;\n if (!reference || !anchorPaths || !pathVisits) {\n return graph;\n }\n const samplesOf = sampleSorter(pathVisits);\n const referenceIndex = pathVisits.pathIndex(reference.name);\n return {\n ...graph,\n nodes: graph.nodes.map(\n (node) => anchorNode(node, pathVisits, referenceIndex, samplesOf)\n ),\n anchoredBy: \"paths\",\n referencePath: reference.name\n };\n}\nfunction anchorGraph(graph, preferred) {\n if (graph.anchoredBy !== \"tags\") {\n return anchorFromPaths(graph, preferred);\n }\n const referencePath = taggedReferencePath(graph);\n return referencePath ? { ...graph, referencePath } : graph;\n}\nfunction taggedReferencePath(graph) {\n const refName = graph.nodes.find((n) => n.stable?.rank === 0)?.stable?.refName;\n return refName !== void 0 && graph.anchorPaths?.some((p) => p.name === refName) ? refName : void 0;\n}\nfunction trimOrigins(graph, kept) {\n if (!graph.anchorPaths) {\n return void 0;\n }\n const lengthOf = new Map(graph.nodes.map((n) => [n.id, n.length]));\n const bp = (ids, end = ids.length) => {\n let sum = 0;\n for (let i = 0; i < end; i++) {\n sum += lengthOf.get(ids[i]) ?? 0;\n }\n return sum;\n };\n const byOrigin = groupBy(graph.paths ?? [], (p) => pathOrigin(p.name).name);\n return graph.anchorPaths.map((o) => {\n const pieces = byOrigin.get(o.name);\n const path = pieces?.length === 1 ? pieces[0] : void 0;\n const stretch = path && kept.get(path.name);\n return path && stretch ? {\n ...o,\n start: o.start + bp(path.nodeIds, stretch.first),\n length: bp(stretch.nodeIds)\n } : o;\n });\n}\n\nexport {\n pathOrigin,\n surveyPaths,\n chooseReferencePath,\n anchorFromPaths,\n anchorGraph,\n trimOrigins\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", "// 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}\nfunction dashCurves(curves, dashWorld) {\n const lengths = curves.map(\n (c) => Math.hypot(c.cx0 - c.x0, c.cy0 - c.y0) + Math.hypot(c.cx1 - c.cx0, c.cy1 - c.cy0) + Math.hypot(c.x1 - c.cx1, c.y1 - c.cy1)\n );\n const total = lengths.reduce((a, b) => a + b, 0);\n const spans = Math.max(3, Math.round(total / dashWorld) | 1);\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 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", "import {\n ownStrand,\n strandSides\n} from \"./chunk-UBQSRCWR.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 pointAt(line, arc, s) {\n if (s <= 0) {\n return { ...line[0] };\n }\n let i = 1;\n while (i < arc.length && arc[i] < s) {\n i++;\n }\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 = 0; i < line.length; i++) {\n if (arc[i] > from && arc[i] < to) {\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 computeEdgeCurves,\n edgeJoinOf,\n routedEdgeCurves,\n strandSides\n} from \"./chunk-UBQSRCWR.js\";\nimport {\n groupBy\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n firstNodeAtOrAfter,\n isBackbone\n} from \"./chunk-RJWPJCIB.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 deletionEdges(graph) {\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const backbone = backboneBySequence(graph);\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 forwards = from.stable.start <= to.stable.start;\n const [left, right] = forwards ? [from, to] : [to, from];\n const start = left.stable.start + left.length;\n const end = right.stable.start;\n const bp = end - start;\n if (bp >= MIN_DELETION_BP && skipsBetween(edge, from, to, forwards)) {\n const refName = left.stable.refName;\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-BZFOFC4D.js\";\nimport {\n edgeCurvesOf\n} from \"./chunk-CGMSKIEO.js\";\nimport {\n curveBounds,\n curveMidpoint,\n polylinePx\n} from \"./chunk-UBQSRCWR.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 >= 1e6 ? [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 pathOrigin\n} from \"./chunk-B5X2RLJG.js\";\nimport {\n groupDigits\n} from \"./chunk-PFRQBCGC.js\";\nimport {\n isGenericSample\n} from \"./chunk-4XWZNPQ2.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}\nfunction nodeInk(graph, nodeById, contigThickness, nodeWidth) {\n const mean = graph ? meanDepth(graph) : 0;\n return {\n maxHalfWidthPx: maxNodeWidthPx(contigThickness, nodeWidth) / 2,\n halfWidthPx: (id) => {\n const node = nodeById?.get(id);\n return node ? nodeWidthPx(node, contigThickness, nodeWidth, mean) / 2 : contigThickness / 2;\n }\n };\n}\n\nexport {\n NODE_WIDTHS,\n meanDepth,\n nodeWidthPx,\n maxNodeWidthPx,\n nodeInk\n};\n"],
5
- "mappings": "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",
6
- "names": ["RANGE_SUFFIX", "VG_FRAGMENT", "VG_SUBRANGE", "pathOrigin", "pathName", "fragment", "match", "surveyPaths", "paths", "lengthOf", "anchorPaths", "visits", "PathVisitsBuilder", "path", "sample", "panSNSample", "p", "pos", "step", "chooseReferencePath", "preferred", "OFF_REFERENCE_RANK", "anchorNode", "node", "reference", "samplesOf", "slot", "own", "anchor", "REFERENCE_RANK", "sampleSorter", "sorted", "rank", "i", "pathRank", "s", "seen", "ranks", "n", "r", "out", "found", "anchorFromPaths", "graph", "pathVisits", "referenceIndex", "anchorGraph", "referencePath", "taggedReferencePath", "refName", "trimOrigins", "kept", "bp", "ids", "end", "sum", "byOrigin", "groupBy", "o", "pieces", "stretch", "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", "c", "w", "direction", "tries", "y", "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", "dashCurves", "dashWorld", "lengths", "total", "spans", "out", "from", "to", "dash", "start", "k", "length", "end", "translateCurves", "dx", "dy", "attachment", "segments", "side", "last", "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", "yToX", "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", "prev", "towardX", "towardY", "towardToX", "towardToY", "cx1", "cy1", "cx2", "cy2", "bulge", "chordLen", "bulgeX", "bulgeY", "spreadX", "spreadY", "nearerEnd", "routedEdgeCurves", "route", "tangent", "q", "next", "ta", "tb", "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", "s", "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", "deletionEdges", "byId", "n", "backbone", "found", "edgeIndex", "left", "right", "bp", "refName", "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", "nodeInk", "nodeById", "id"]
7
- }
@@ -1,2 +0,0 @@
1
- import{e as J,f as $}from"./chunk-VDHDEEMF.js";import{a as gt,c as wt,d as Nt}from"./chunk-GUXZESDR.js";var K=1,St=2,D=4,Rt=[void 0,"missing","elsewhere","unknown"],yt=3,xt=s=>Rt.indexOf(s)<<yt;function Vt(s,n,f){return f?{...s,walkRowRuns:Ct(s,n)}:s}function Et(s){let n=gt(s),f=wt(s);return{name:s,sample:n,haplotype:f===void 0?void 0:+f.slice(n.length+1),contig:Nt(s)}}var Q=class{constructor(){this.start=[];this.bp=[];this.referenceStart=[];this.flags=[];this.chunk=[];this.chunks=[];this.offsets=[0];this.chunkIndex=new Map}get length(){return this.bp.length}push(n,f,i,k,d){this.start.push(n),this.bp.push(f),this.flags.push(i),this.referenceStart.push(k),this.chunk.push(d?this.chunkOf(d):-1)}chunkOf(n){let f=`${n.refName}:${n.start}`,i=this.chunkIndex.get(f);return i===void 0&&(i=this.chunks.length,this.chunkIndex.set(f,i),this.chunks.push(n)),i}endRow(){this.offsets.push(this.bp.length)}};function Ct({nodes:s,walks:n},f){let i=s.lengths.length,k=t=>t<i?s.lengths[t]:0,d=[];for(let t=0;t<n.names.length;t++)if(n.offsets[t+1]>n.offsets[t]){let r=n.before&&$(n.before,t),b=n.after&&$(n.after,t);d.push({...Et(n.names[t]),start:n.starts[t],from:n.offsets[t],to:n.offsets[t+1],...r?{before:r}:{},...b?{after:b}:{}})}let W=d.filter(t=>t.name===d[0]?.name).sort((t,r)=>t.start-r.start),H=W[0],Y=d.filter(t=>t.name!==H?.name);if(!H||Y.length===0)return;let X=new Map;for(let t of Y){let r=X.get(t.name);r?r.push(t):X.set(t.name,[t])}let m=new Float64Array(s.names.length).fill(Number.NaN),C=new Float64Array(s.names.length),Z=!1,tt=!1,g=f&&f.end>f.start?f:void 0;for(let t of W){let r=t.start;for(let b=t.from;b<t.to;b++){let N=n.steps[b],a=k(N);Number.isNaN(m[N])&&(m[N]=r,C[N]=r+a,g&&(Z||=r+a<=g.start,tt||=r>=g.end)),r+=a}}let At=g===void 0||Z&&tt,c=new Q,w=new Int32Array(0),y=new Float64Array(0),et=t=>{let r=t[0],b=[...t].sort((e,o)=>e.start-o.start),N=b.length-1;for(let e of b)N+=e.to-e.from;N>w.length&&(w=new Int32Array(N*2),y=new Float64Array(N*2));let a=0,ut=!1,A,ct,pt=new Map;for(let e of b){A!==void 0&&e.start<A&&(ut=!0),A!==void 0&&e.start>A&&(pt.set(a,J(e.start-A,ct?.after,e.before)),w[a]=-(e.start-A),y[a++]=A);let o=e.start;for(let l=e.from;l<e.to;l++){let p=n.steps[l];w[a]=p,y[a++]=o,o+=p<i?s.lengths[p]:0}A=o,ct=e}let Tt=(e,o)=>{let l=e>=0?e:o,p=-1;for(let E=1;p<0&&E<a;E++)for(let R of[l-E,l+E]){let kt=R>=0&&R<a?w[R]:-1;p<0&&kt>=0&&!Number.isNaN(m[kt])&&(p=R)}if(p<0)return;let h=p>l==m[w[p]]>m[w[l]],u=h===(l===e),M=u?a-1:0,x=w[M],F=x>=0&&!Number.isNaN(m[x]);return{stop:{contigEnds:F,shortBp:F?Math.max(0,g.start-C[x],m[x]-g.end):0},lo:u?l+1:0,hi:u?a:l,backward:!h,axisStart:h?u?V(l):y[0]:u?V(a-1):y[l]}},V=e=>{let o=w[e];return y[e]+(o<0?-o:k(o))},j=0,B=a,_=!1,it=!0,I=-1,ht=-1,q,z;if(g&&At){let e=-1,o=-1,l=-1/0,p=1/0;for(let h=0;h<a;h++){let u=w[h];u>=0&&!Number.isNaN(m[u])&&(C[u]<=g.start&&C[u]>l&&(l=C[u],e=h),m[u]>=g.end&&m[u]<p&&(p=m[u],o=h))}if(e<0||o<0){it=!1;let h=e>=0||o>=0?Tt(e,o):void 0;h&&({lo:j,hi:B,backward:_,axisStart:q,stop:z}=h)}else j=Math.min(e,o)+1,B=Math.max(e,o),_=e>o,I=e,ht=o}let Pt=ut||a===0?void 0:q!==void 0?{contig:r.contig,start:q,reversed:_}:I<0?{contig:r.contig,start:y[0],reversed:!1}:I<ht?{contig:r.contig,start:V(I),reversed:!1}:{contig:r.contig,start:y[I],reversed:!0},O=0,dt=0,mt=0,v=0,S=-1,P=0,U=Number.NaN;for(let e=j;e<B;e++){let o=_?B-1-(e-j):e,l=w[o];if(l<0){let E=pt.get(o)??[{bp:-l}];for(let R of _?[...E].reverse():E)c.push(O,R.bp,D|xt(R.cause),Number.NaN,R.chunk),O+=R.bp;S=c.length-1,P=D,U=Number.NaN,mt+=-l,v=0;continue}let p=k(l),h=m[l],u=!Number.isNaN(h),M=U,x=S>=0&&!Number.isNaN(M),F=u&&x&&v>=0&&M+(c.bp[S]??0)===h,bt=u&&x&&v<=0&&C[l]===M;!u&&S>=0&&!(P&K)&&!(P&D)?c.bp[S]+=p:F||bt?(c.bp[S]+=p,F||(U=h,c.referenceStart[S]=h,P|=St,c.flags[S]=P),v=F?1:-1):(P=u?K:0,U=u?h:Number.NaN,c.push(O,p,P,U),S=c.length-1,v=0),O+=p,u||(dt+=p)}return c.endRow(),{name:r.name,label:r.haplotype===void 0?r.sample:`${r.sample}#${r.haplotype}`,sample:r.sample,haplotype:r.haplotype,bp:O,offReferenceBp:dt,gapBp:mt,complete:it,...z?{stop:z}:{},axis:Pt}},Wt=et(W),L=[...X.values()].map(t=>({meta:et(t),row:c.offsets.length-2}));L.sort((t,r)=>Number(r.meta.complete)-Number(t.meta.complete)||r.meta.bp-t.meta.bp||t.meta.label.localeCompare(r.meta.label));let nt=[0,...L.map(t=>t.row)],G=c.length,st=new Uint32Array(nt.length+1),rt=new Float64Array(G),at=new Float64Array(G),ot=new Float64Array(G),lt=new Uint8Array(G),ft=new Int32Array(G),T=0;return nt.forEach((t,r)=>{let b=c.offsets[t],N=c.offsets[t+1];for(let a=b;a<N;a++,T++)rt[T]=c.start[a],at[T]=c.bp[a],ot[T]=c.referenceStart[a],lt[T]=c.flags[a],ft[T]=c.chunk[a];st[r+1]=T}),{origin:g?g.start:H.start,rows:[Wt,...L.map(t=>t.meta)],offsets:st,start:rt,bp:at,referenceStart:ot,flags:lt,chunk:ft,chunks:c.chunks}}function Ft(s,n){let f=s.flags[n],i={start:s.start[n],bp:s.bp[n],onReference:(f&K)!==0};if(f&D){i.gap=!0;let k=Rt[f>>yt&3];k&&(i.cause=k);let d=s.chunks[s.chunk[n]];d&&(i.chunk=d)}else i.referenceStart=Number.isNaN(s.referenceStart[n])?void 0:s.referenceStart[n];return f&St&&(i.reversed=!0),i}function qt(s,n){let f=s.rows.map((i,k)=>{let d=[];for(let W=s.offsets[k];W<s.offsets[k+1];W++)d.push(Ft(s,W));return{...i,runs:d}});return{origin:s.origin,unit:n,reference:f[0],rows:f.slice(1)}}export{Vt as a,Et as b,Ct as c,qt as d};
2
- //# sourceMappingURL=chunk-PFAHNHMM.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/RgfaTabixAdapter/walkRowRuns.ts"],
4
- "sourcesContent": ["import { gapParts, stopAt } from '@jbrowse/bandage-core/gfa/walkStops'\nimport {\n panSNContig,\n panSNHaplotype,\n panSNSample,\n} from '@jbrowse/bandage-core/pansn'\n\nimport type { GraphTables } from '@jbrowse/bandage-core/gfa/graphTables'\nimport type { GapCause, GapPart } from '@jbrowse/bandage-core/gfa/walkStops'\nimport type {\n WalkAxis,\n WalkRow,\n WalkRows,\n WalkRun,\n WalkStop,\n} from '@jbrowse/bandage-core/layout/walkRows'\nimport type { PathStop, StopChunk } from '@jbrowse/bandage-core/types'\n\nconst RUN_ON_REFERENCE = 1\nconst RUN_REVERSED = 2\nconst RUN_GAP = 4\n// a gap's cause, by index from bit 3\nconst GAP_CAUSES = [undefined, 'missing', 'elsewhere', 'unknown'] as const\nconst CAUSE_SHIFT = 3\n\nconst causeFlags = (cause: GapCause | undefined) =>\n GAP_CAUSES.indexOf(cause) << CAUSE_SHIFT\n\ntype WalkRowMeta = Omit<WalkRow, 'runs'>\n\n/**\n * A cut for walk rows: the tables, and the rows' runs over the window, which\n * the main thread draws without a Graph of the walks' steps\n */\nexport type WalkCut = GraphTables & { walkRowRuns?: WalkRowRuns }\n\nexport function walkCutFor(\n tables: GraphTables,\n region: { start: number; end: number },\n walkRows: boolean | undefined,\n): WalkCut {\n return walkRows\n ? { ...tables, walkRowRuns: walkRowRuns(tables, region) }\n : tables\n}\n\n/**\n * bandage-core's `walkRows` over a cut's tables, each row's runs as typed\n * arrays that cross from the worker beside the tables. Row 0 is the\n * reference.\n */\nexport interface WalkRowRuns {\n origin: number\n rows: WalkRowMeta[]\n offsets: Uint32Array\n start: Float64Array\n bp: Float64Array\n referenceStart: Float64Array\n flags: Uint8Array\n // a gap's chunk elsewhere, as an index into `chunks`, -1 for none\n chunk: Int32Array\n chunks: StopChunk[]\n}\n\n/**\n * A walk's PanSN fields: `HG002#1#chr1`, or a pggb P-line's `chm13#chr1`,\n * which has no haplotype\n */\nexport function walkPath(name: string) {\n const sample = panSNSample(name)\n const haplotype = panSNHaplotype(name)\n return {\n name,\n sample,\n haplotype:\n haplotype === undefined ? undefined : +haplotype.slice(sample.length + 1),\n contig: panSNContig(name),\n }\n}\n\ntype Path = ReturnType<typeof walkPath> & {\n start: number\n from: number\n to: number\n before?: PathStop\n after?: PathStop\n}\n\nclass RunWriter {\n start: number[] = []\n bp: number[] = []\n referenceStart: number[] = []\n flags: number[] = []\n chunk: number[] = []\n chunks: StopChunk[] = []\n offsets = [0]\n private chunkIndex = new Map<string, number>()\n\n get length() {\n return this.bp.length\n }\n\n push(\n start: number,\n bp: number,\n flags: number,\n referenceStart: number,\n chunk?: StopChunk,\n ) {\n this.start.push(start)\n this.bp.push(bp)\n this.flags.push(flags)\n this.referenceStart.push(referenceStart)\n this.chunk.push(chunk ? this.chunkOf(chunk) : -1)\n }\n\n private chunkOf(chunk: StopChunk) {\n const key = `${chunk.refName}:${chunk.start}`\n let i = this.chunkIndex.get(key)\n if (i === undefined) {\n i = this.chunks.length\n this.chunkIndex.set(key, i)\n this.chunks.push(chunk)\n }\n return i\n }\n\n endRow() {\n this.offsets.push(this.bp.length)\n }\n}\n\n/**\n * `walkRows(graphFromTables(tables), region)` for a cut whose first walk is\n * the reference, which every walk-file and GBZ cut is, in as many pieces as\n * the cut breaks it into; a step is a node index. A gap between two pieces of\n * one haplotype is a step of `-bp`, split into its parts by the pieces' stops\n * as walkRows splits it. One difference: a walk reaching only one\n * of the region's flanks measures from that flank, where walkRows takes the\n * whole walk the cut holds, so its length is a lower bound that no longer\n * grows with the cut's context.\n */\nexport function walkRowRuns(\n { nodes: n, walks: w }: GraphTables,\n region?: { start: number; end: number },\n): WalkRowRuns | undefined {\n const declared = n.lengths.length\n const lengthOf = (node: number) => (node < declared ? n.lengths[node]! : 0)\n const paths: Path[] = []\n for (let p = 0; p < w.names.length; p++) {\n if (w.offsets[p + 1]! > w.offsets[p]!) {\n const before = w.before && stopAt(w.before, p)\n const after = w.after && stopAt(w.after, p)\n paths.push({\n ...walkPath(w.names[p]!),\n start: w.starts[p]!,\n from: w.offsets[p]!,\n to: w.offsets[p + 1]!,\n ...(before ? { before } : {}),\n ...(after ? { after } : {}),\n })\n }\n }\n const referencePieces = paths\n .filter(p => p.name === paths[0]?.name)\n .sort((a, b) => a.start - b.start)\n const first = referencePieces[0]\n const others = paths.filter(p => p.name !== first?.name)\n if (!first || others.length === 0) {\n return undefined\n }\n const walks = new Map<string, Path[]>()\n for (const path of others) {\n const list = walks.get(path.name)\n if (list) {\n list.push(path)\n } else {\n walks.set(path.name, [path])\n }\n }\n\n const spanStart = new Float64Array(n.names.length).fill(Number.NaN)\n const spanEnd = new Float64Array(n.names.length)\n let flankedBefore = false\n let flankedAfter = false\n const cut = region && region.end > region.start ? region : undefined\n for (const piece of referencePieces) {\n let pos = piece.start\n for (let s = piece.from; s < piece.to; s++) {\n const node = w.steps[s]!\n const len = lengthOf(node)\n if (Number.isNaN(spanStart[node]!)) {\n spanStart[node] = pos\n spanEnd[node] = pos + len\n if (cut) {\n flankedBefore ||= pos + len <= cut.start\n flankedAfter ||= pos >= cut.end\n }\n }\n pos += len\n }\n }\n const flanked = cut === undefined || (flankedBefore && flankedAfter)\n\n const out = new RunWriter()\n let steps = new Int32Array(0)\n let stepStart = new Float64Array(0)\n const rowOf = (pieces: Path[]): WalkRowMeta => {\n const path = pieces[0]!\n const ordered = [...pieces].sort((a, b) => a.start - b.start)\n // the walk's steps, each piece's gap from the last as a step of -bp\n let count = ordered.length - 1\n for (const piece of ordered) {\n count += piece.to - piece.from\n }\n if (count > steps.length) {\n steps = new Int32Array(count * 2)\n stepStart = new Float64Array(count * 2)\n }\n let length = 0\n let overlaps = false\n let end: number | undefined\n let previous: Path | undefined\n // each gap step's parts, by step index\n const partsAt = new Map<number, GapPart[]>()\n for (const piece of ordered) {\n if (end !== undefined && piece.start < end) {\n overlaps = true\n }\n if (end !== undefined && piece.start > end) {\n partsAt.set(\n length,\n gapParts(piece.start - end, previous?.after, piece.before),\n )\n steps[length] = -(piece.start - end)\n stepStart[length++] = end\n }\n let pos = piece.start\n for (let s = piece.from; s < piece.to; s++) {\n const node = w.steps[s]!\n steps[length] = node\n stepStart[length++] = pos\n pos += node < declared ? n.lengths[node]! : 0\n }\n end = pos\n previous = piece\n }\n // A walk with one flank, whose contig ends inside the window: the steps\n // past that flank, read in the reference's direction. Which side is\n // inside follows the walk's direction along the reference at the\n // flank, from the nearest other step on it.\n const partialSide = (i0: number, i1: number) => {\n const flank = i0 >= 0 ? i0 : i1\n let near = -1\n for (let d = 1; near < 0 && d < length; d++) {\n for (const j of [flank - d, flank + d]) {\n const id = j >= 0 && j < length ? steps[j]! : -1\n if (near < 0 && id >= 0 && !Number.isNaN(spanStart[id]!)) {\n near = j\n }\n }\n }\n if (near < 0) {\n return undefined\n }\n const forward =\n near > flank === spanStart[steps[near]!]! > spanStart[steps[flank]!]!\n const after = forward === (flank === i0)\n const end = after ? length - 1 : 0\n const endId = steps[end]!\n const contigEnds = endId >= 0 && !Number.isNaN(spanStart[endId]!)\n const stop: WalkStop = {\n contigEnds,\n shortBp: contigEnds\n ? Math.max(\n 0,\n cut!.start - spanEnd[endId]!,\n spanStart[endId]! - cut!.end,\n )\n : 0,\n }\n return {\n stop,\n lo: after ? flank + 1 : 0,\n hi: after ? length : flank,\n backward: !forward,\n axisStart: forward\n ? after\n ? stepEnd(flank)\n : stepStart[0]!\n : after\n ? stepEnd(length - 1)\n : stepStart[flank]!,\n }\n }\n const stepEnd = (i: number) => {\n const id = steps[i]!\n return stepStart[i]! + (id < 0 ? -id : lengthOf(id))\n }\n\n let lo = 0\n let hi = length\n let backward = false\n let complete = true\n let from = -1\n let to = -1\n let axisStart: number | undefined\n let stop: WalkStop | undefined\n if (cut && flanked) {\n let i0 = -1\n let i1 = -1\n let bestEnd = -Infinity\n let bestStart = Infinity\n for (let i = 0; i < length; i++) {\n const id = steps[i]!\n if (id >= 0 && !Number.isNaN(spanStart[id]!)) {\n if (spanEnd[id]! <= cut.start && spanEnd[id]! > bestEnd) {\n bestEnd = spanEnd[id]!\n i0 = i\n }\n if (spanStart[id]! >= cut.end && spanStart[id]! < bestStart) {\n bestStart = spanStart[id]!\n i1 = i\n }\n }\n }\n if (i0 < 0 || i1 < 0) {\n complete = false\n const inside = i0 >= 0 || i1 >= 0 ? partialSide(i0, i1) : undefined\n if (inside) {\n ;({ lo, hi, backward, axisStart, stop } = inside)\n }\n } else {\n lo = Math.min(i0, i1) + 1\n hi = Math.max(i0, i1)\n backward = i0 > i1\n from = i0\n to = i1\n }\n }\n const axis: WalkAxis | undefined =\n overlaps || length === 0\n ? undefined\n : axisStart !== undefined\n ? { contig: path.contig, start: axisStart, reversed: backward }\n : from < 0\n ? { contig: path.contig, start: stepStart[0]!, reversed: false }\n : from < to\n ? { contig: path.contig, start: stepEnd(from), reversed: false }\n : { contig: path.contig, start: stepStart[from]!, reversed: true }\n\n let bp = 0\n let offReferenceBp = 0\n let gapBp = 0\n let step = 0\n let lastAt = -1\n let lastFlags = 0\n let lastRef = Number.NaN\n for (let k = lo; k < hi; k++) {\n const index = backward ? hi - 1 - (k - lo) : k\n const id = steps[index]!\n if (id < 0) {\n const parts = partsAt.get(index) ?? [{ bp: -id }]\n // a row read backwards meets a gap's parts last first\n for (const part of backward ? [...parts].reverse() : parts) {\n out.push(\n bp,\n part.bp,\n RUN_GAP | causeFlags(part.cause),\n Number.NaN,\n part.chunk,\n )\n bp += part.bp\n }\n lastAt = out.length - 1\n lastFlags = RUN_GAP\n lastRef = Number.NaN\n gapBp += -id\n step = 0\n continue\n }\n const len = lengthOf(id)\n const sStart = spanStart[id]!\n const onRef = !Number.isNaN(sStart)\n const at = lastRef\n const hasAt = lastAt >= 0 && !Number.isNaN(at)\n const forward =\n onRef && hasAt && step >= 0 && at + (out.bp[lastAt] ?? 0) === sStart\n const back = onRef && hasAt && step <= 0 && spanEnd[id] === at\n if (\n !onRef &&\n lastAt >= 0 &&\n !(lastFlags & RUN_ON_REFERENCE) &&\n !(lastFlags & RUN_GAP)\n ) {\n out.bp[lastAt]! += len\n } else if (forward || back) {\n out.bp[lastAt]! += len\n if (!forward) {\n lastRef = sStart\n out.referenceStart[lastAt] = sStart\n lastFlags |= RUN_REVERSED\n out.flags[lastAt] = lastFlags\n }\n step = forward ? 1 : -1\n } else {\n lastFlags = onRef ? RUN_ON_REFERENCE : 0\n lastRef = onRef ? sStart : Number.NaN\n out.push(bp, len, lastFlags, lastRef)\n lastAt = out.length - 1\n step = 0\n }\n bp += len\n if (!onRef) {\n offReferenceBp += len\n }\n }\n out.endRow()\n return {\n name: path.name,\n label:\n path.haplotype === undefined\n ? path.sample\n : `${path.sample}#${path.haplotype}`,\n sample: path.sample,\n haplotype: path.haplotype,\n bp,\n offReferenceBp,\n gapBp,\n complete,\n ...(stop ? { stop } : {}),\n axis,\n }\n }\n\n const reference = rowOf(referencePieces)\n const rowList = [...walks.values()].map(pieces => ({\n meta: rowOf(pieces),\n row: out.offsets.length - 2,\n }))\n rowList.sort(\n (a, b) =>\n Number(b.meta.complete) - Number(a.meta.complete) ||\n b.meta.bp - a.meta.bp ||\n a.meta.label.localeCompare(b.meta.label),\n )\n // rows in drawn order: the reference, then the sorted walks\n const order = [0, ...rowList.map(r => r.row)]\n const total = out.length\n const offsets = new Uint32Array(order.length + 1)\n const start = new Float64Array(total)\n const bpOut = new Float64Array(total)\n const referenceStart = new Float64Array(total)\n const flags = new Uint8Array(total)\n const chunk = new Int32Array(total)\n let at = 0\n order.forEach((row, i) => {\n const a = out.offsets[row]!\n const b = out.offsets[row + 1]!\n for (let k = a; k < b; k++, at++) {\n start[at] = out.start[k]!\n bpOut[at] = out.bp[k]!\n referenceStart[at] = out.referenceStart[k]!\n flags[at] = out.flags[k]!\n chunk[at] = out.chunk[k]!\n }\n offsets[i + 1] = at\n })\n return {\n origin: cut ? cut.start : first.start,\n rows: [reference, ...rowList.map(r => r.meta)],\n offsets,\n start,\n bp: bpOut,\n referenceStart,\n flags,\n chunk,\n chunks: out.chunks,\n }\n}\n\nfunction runAt(t: WalkRowRuns, k: number): WalkRun {\n const f = t.flags[k]!\n const run: WalkRun = {\n start: t.start[k]!,\n bp: t.bp[k]!,\n onReference: (f & RUN_ON_REFERENCE) !== 0,\n }\n if (f & RUN_GAP) {\n run.gap = true\n const cause = GAP_CAUSES[(f >> CAUSE_SHIFT) & 3]\n if (cause) {\n run.cause = cause\n }\n const chunk = t.chunks[t.chunk[k]!]\n if (chunk) {\n run.chunk = chunk\n }\n } else {\n run.referenceStart = Number.isNaN(t.referenceStart[k]!)\n ? undefined\n : t.referenceStart[k]\n }\n if (f & RUN_REVERSED) {\n run.reversed = true\n }\n return run\n}\n\n/** The rows as bandage-core's `WalkRows`, a run object per run */\nexport function walkRowsOf(t: WalkRowRuns, unit?: number): WalkRows {\n const rows = t.rows.map((meta, i) => {\n const runs: WalkRun[] = []\n for (let k = t.offsets[i]!; k < t.offsets[i + 1]!; k++) {\n runs.push(runAt(t, k))\n }\n return { ...meta, runs }\n })\n return { origin: t.origin, unit, reference: rows[0]!, rows: rows.slice(1) }\n}\n"],
5
- "mappings": "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",
6
- "names": ["RUN_ON_REFERENCE", "RUN_REVERSED", "RUN_GAP", "GAP_CAUSES", "CAUSE_SHIFT", "causeFlags", "cause", "walkCutFor", "tables", "region", "walkRows", "walkRowRuns", "walkPath", "name", "sample", "panSNSample", "haplotype", "panSNHaplotype", "panSNContig", "RunWriter", "start", "bp", "flags", "referenceStart", "chunk", "key", "n", "w", "declared", "lengthOf", "node", "paths", "p", "before", "stopAt", "after", "referencePieces", "a", "b", "first", "others", "walks", "path", "list", "spanStart", "spanEnd", "flankedBefore", "flankedAfter", "cut", "piece", "pos", "s", "len", "flanked", "out", "steps", "stepStart", "rowOf", "pieces", "ordered", "count", "length", "overlaps", "end", "previous", "partsAt", "gapParts", "partialSide", "i0", "i1", "flank", "near", "d", "j", "id", "forward", "endId", "contigEnds", "stepEnd", "i", "lo", "hi", "backward", "complete", "from", "to", "axisStart", "stop", "bestEnd", "bestStart", "inside", "axis", "offReferenceBp", "gapBp", "step", "lastAt", "lastFlags", "lastRef", "k", "index", "parts", "part", "sStart", "onRef", "at", "hasAt", "back", "reference", "rowList", "order", "r", "total", "offsets", "bpOut", "row", "runAt", "t", "run", "walkRowsOf", "unit", "rows", "meta", "runs"]
7
- }
@@ -1,4 +0,0 @@
1
- import{E as _e,Eb as He,F as Ce,G as Ee,Ga as y,Gb as G,H as Ae,Ha as ne,Hb as pe,Ib as ce,K as Oe,Ma as Be,Mb as $e,Na as re,Ob as Ke,Qa as Te,Sb as Ue,Ta as Ne,Ua as oe,Xb as Fe,Ya as ae,a as ge,b as U,bc as Xe,cb as We,dc as Ye,e as z,f as q,ib as Ge,kb as se,nb as De,t as Se,u as Me,v as Pe,w as ee,xa as Ie,y as Le,yb as ie,z as ve,zb as le}from"./chunk-WGVATZLM.js";import{c as ye,j as N,m as Z,n as xe,o as Q,y as te}from"./chunk-III4GT4G.js";import{F as J,h as P,j as X,k as j}from"./chunk-PA4HKAUJ.js";import{b as L,c as W}from"./chunk-6WA6WF6A.js";import{e as K}from"./chunk-NDRLCGPC.js";import{a as me,c as E,d as we,e as ke,f as F,g as Re}from"./chunk-YU7T5WOQ.js";import{a as C,b as p,c as R,d as m}from"./chunk-JMBDTNUR.js";var ct="data-pans-with-drawing";function Ve(e,t){return{position:"absolute",left:0,top:0,pointerEvents:"none",overflow:t,zIndex:e}}var S=m(function({model:t,zIndex:n,overflow:o="hidden",testId:r,pansWithDrawing:s,children:l}){return p("svg",{style:{...Ve(n,o),userSelect:s?"none":void 0},width:t.paneWidth,height:t.canvasHeight,"data-testid":r,...s?{[ct]:""}:{},children:l})}),ze=m(function({model:t,children:n}){let{scaleX:o,scaleY:r,translateX:s,translateY:l}=t;return p("g",{transform:`translate(${s} ${l}) scale(${o} ${r})`,children:n})});function A({model:e,zIndex:t,shown:n=!0,testId:o,paint:r}){let s=Re(null);return we(()=>{if(n)return ge(()=>{let l=s.current,i=l?.getContext("2d");if(l&&i){let c=e.paneWidth,d=e.canvasHeight;Ie(Ye());let u=He(l,c,d);i.setTransform(u,0,0,u,0,0),i.clearRect(0,0,c,d),r(i,u)}})},[e,n,r]),p("canvas",{ref:s,"data-testid":n?o:void 0,style:{...Ve(t),display:n?"block":"none"}})}var ut=m(function({model:t}){let{bubbleHalos:n,hoveredBubble:o}=t;if(n.length===0)return null;let r=t.contigThickness*$e;return p(S,{model:t,zIndex:2,testId:"graph-bubble-halos",children:p(ze,{model:t,children:n.filter(s=>!s.whole&&(!s.tick||o&&L(s.bubble,o))).map(s=>p("path",{d:s.path,fill:"none",stroke:y[s.kind],strokeOpacity:o&&L(s.bubble,o)?.45:t.bubbleFaded(s)?.06:.22,strokeWidth:r,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"},W(s.bubble)))})})}),an=ut;var w=18,O=48,bt="rgb(160, 160, 160)",ft="rgba(160, 160, 160, 0.45)",ht=6,je=7,gt="#b8b8c0",ue=Me-4;function Y(e){return e.kind==="fill"?e.width??w:w}var M=e=>[{offset:0,color:e}];function D(e,t,n,o=w){return{key:e,label:n,swatch:{kind:"fill",stops:M(t),width:o}}}function qe(e){return e.flatMap((t,n)=>[{offset:n/e.length,color:t},{offset:(n+1)/e.length,color:t}])}function mt(e){let t=e.openBubble;if(!t)return[];let n=e.bubbleHalos.find(o=>L(o.bubble,t));return[{key:"open",label:`open: ${n?.label??"bubble"}`,swatch:n?{kind:"halo",color:y[n.kind]}:{kind:"blank"},closesBubble:!0}]}function wt(e){let t=e.walkLift?void 0:e.referenceRampDomain;if(!t)return[];let n=Math.round(t.start),o=Math.round(t.end),{offReference:r,unplaced:s}=e.referenceRampOffKeys;return[{key:"ramp",label:`${n.toLocaleString("en-US")}-${o.toLocaleString("en-US")} (${J(o-n)})`,swatch:{kind:"fill",stops:N,width:O}},...r?[D("off",Q,"off the reference",O)]:[],...s?[D("unplaced",bt,"no reference position",O)]:[]]}function kt(e){let t=e.walkLift;if(t)return t.walks.map(r=>te(r.encoding));if(e.effectiveColorScheme==="reference-position")return[N];let n=e.referenceStripBlocks.map(r=>r.colors[0]).filter((r,s,l)=>r!==l[s-1]),o=Math.min(ht,n.length);return[o===0?M(Z):Array.from({length:o},(r,s)=>({offset:o>1?s/(o-1):0,color:n[o>1?Math.round(s*(n.length-1)/(o-1)):0]}))]}function Rt(e){if(!e.referenceStripShown)return[];let t=(e.walkLift?.walks.length??0)>1;return[{key:"strip",label:`top strip: reference${t?", a row per walk":""}`,swatch:{kind:"bands",bands:kt(e)}},...e.referenceStripFaded?[D("strip-faded",Z,e.walkLift?`reference not on ${t?"that row's walk":e.liftedWalksLabel}`:"reference outside the open bubble")]:[],...e.referenceStripOverhangs?[{key:"overhang",label:"graph runs past this edge",swatch:{kind:"overhang"}}]:[]]}function yt(e){let t=new Map;for(let n of e.bubbleHalos)if(!n.whole){let o=y[n.kind],r=t.get(o)??new Set;r.add(ne[n.kind]),t.set(o,r)}return[...t].map(([n,o])=>{let r=[...o].join(" or ");return{key:`halo-${n}`,label:r===ne.superbubble?r:`${r} bubble`,swatch:{kind:"halo",color:n}}})}function xt(e){return e.genePins.some(t=>t.exonsByNode.length>0)?[{key:"exon",label:"exon",swatch:{kind:"outline",color:G,stroke:2,radius:5,height:8}}]:[]}function St(e){let t=e.foldNote;return t?[{key:"fold",label:t}]:[]}function Mt(e){return e.pathLegend.map(({name:t,label:n,color:o})=>({key:`path-${t}`,label:n,swatch:{kind:"line",color:o}}))}function v(e,t,n){return{key:e,label:n,swatch:{kind:"fill",stops:t,height:je,square:!0}}}function Pt(e){let{roles:t,haplotypeTube:n,bundled:o,values:r,logWidths:s,foldBp:l,forwardReads:i,reverseReads:c,substitution:d,insertion:u,deletion:h}=e.tubeMapKeys,f=e.readsShown,a=[];return r&&a.push(v("value-reference",M(se),"reference"),...r.map(({value:b,color:g})=>v(`value-${b}`,M(g),b))),t&&a.push(v("ref",M(se),"reference"),v("hap",M(n),o?"shared route, \xD7n haplotypes":"haplotype")),i&&a.push(v("fwd",qe(z),"read on the forward strand")),c&&a.push(v("rev",qe(q),"read on the reverse strand")),f&&f.shown<f.total&&a.push({key:"sampled",label:`${f.shown.toLocaleString("en-US")} of ${f.total.toLocaleString("en-US")} reads shown`,swatch:{kind:"blank"}}),d&&a.push({key:"sub",label:"read mismatch",swatch:{kind:"glyph",char:"A"}}),u&&a.push({key:"ins",label:"read insertion",swatch:{kind:"glyph",char:"*"}}),h&&a.push(v("del",M("grey"),"read deletion")),l!==void 0&&a.push({key:"tube-fold",label:`haplotype variant < ${J(l)}`,swatch:{kind:"tick",color:Ne(),height:je,backing:gt}}),s&&a.push({key:"log",label:"width grows with log of length",swatch:{kind:"bracket"}}),a}function Lt(e){return e.kind==="gene"?{kind:"outline",color:Se,stroke:1.5,radius:0,height:ue}:{kind:"fill",stops:e.kind==="bar"&&e.ramp?N:M(e.fill),height:e.kind==="gap"?e.px:ue}}function vt(e){let t=e.walkRowBars;if(!t)return[];let n=[t.reference,...t.rows].flatMap(r=>r.call??[]),o=(r,s,l)=>({key:r,label:l,swatch:{kind:"tick",color:s,height:ue}});return[..._e(t,{ramp:e.referenceRampDomain,genes:e.walkRowGeneKey}).map(r=>({key:`rows-${r.label}`,label:r.label,swatch:r.note?void 0:Lt(r.swatch)})),...n.some(r=>r.spanningReads!==0)?[o("call",Ce,"allele length called for this walk")]:[],...n.some(r=>r.spanningReads===0)?[o("unbacked",Ee,"called with no read spanning it")]:[],...n.some(r=>r.agrees===!1)?[o("disagrees",Ae,`walk and call over ${Math.round(.1*100)}% apart`)]:[]]}function _t(e,t){let n=Ue(t,e.walkReference);return{key:`walk-${t.name}`,strong:e.walkLabel(t.name),label:n.delta+n.gaps+n.reversed,swatch:{kind:"fill",stops:te(t.encoding),width:n.shades?O:w},under:n.scale,title:n.hover,walk:t}}function Je(e,t,n=w){return[...e.liftPaintsOffReference?[D("lift-off",Q,"off the reference",n)]:[],D("faded",ft,t,n)]}function Ct(e){let t=e.walkLift;if(!t||e.facetPanels)return[];let n=t.walks.map(r=>_t(e,r)),o=n.some(r=>Y(r.swatch)===O)?O:w;return[...n,...Je(e,`not on ${e.liftedWalksLabel}`,o)]}function zn(e){return e.facetPanels?Je(e,"not on the panel's walk"):[]}function qn(e){return[{testid:"graph-open-bubble-legend",rows:mt(e)},{testid:"graph-ramp-legend",rows:wt(e)},{testid:"graph-reference-strip-legend",rows:Rt(e)},{testid:"graph-halo-legend",rows:yt(e)},{testid:"graph-gene-legend",rows:xt(e)},{testid:"graph-fold-legend",rows:St(e)},{testid:"graph-path-legend",rows:Mt(e)},{testid:"graph-tube-map-legend",rows:Pt(e)},{testid:"graph-walk-rows-legend",rows:vt(e)},{testid:"graph-walk-readout",rows:Ct(e)}].filter(t=>t.rows.length>0)}function Et(e){return e==="class"?"className":/^(data|aria)-/.test(e)?e:e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}function Ze(e,t){if(typeof e=="string")return e;let n={key:t};for(let[o,r]of Object.entries(e.attrs))r!==void 0&&(n[Et(o)]=r);return me(e.tag,n,...e.children.map(Ze))}function I(){return ke().replaceAll(/[^\w-]/g,"")}function H({el:e}){return Ze(e,0)}function Qe({id:e,x:t,y:n,stops:o,width:r,height:s,square:l}){let i=c=>p("rect",{x:t,y:n,width:r,height:s,rx:l?0:2,fill:c});return o.length>1?R(C,{children:[p("defs",{children:p("linearGradient",{id:e,children:o.map((c,d)=>p("stop",{offset:c.offset,stopColor:c.color},d))})}),i(`url(#${e})`)]}):i(o[0].color)}var et=e=>e.length>1?3:4;function de(e){switch(e.kind){case"fill":return e.height??8;case"bands":return et(e.bands)*e.bands.length;case"line":return 3;case"halo":case"overhang":return 10;case"outline":case"tick":return e.height;case"glyph":return 15;case"bracket":return 7;case"blank":return 0}}function At({swatch:e,x:t,id:n}){switch(e.kind){case"fill":{let r=de(e);return p(Qe,{id:n,x:t,y:-5-r/2,stops:e.stops,width:Y(e),height:r,square:e.square})}case"bands":{let r=et(e.bands),s=-5-de(e)/2;return p(C,{children:e.bands.map((l,i)=>p(Qe,{id:`${n}-${i}`,x:t,y:s+i*r,stops:l,width:w,height:r,square:!0},i))})}case"line":return p("rect",{x:t,y:-5-1.5,width:w,height:3,rx:2,fill:e.color});case"halo":return p("line",{x1:t+5,x2:t+13,y1:-5,y2:-5,stroke:e.color,strokeOpacity:.35,strokeWidth:8,strokeLinecap:"round"});case"outline":{let r=e.stroke/2;return p("rect",{x:t+r,y:-5-e.height/2+r,width:w-e.stroke,height:e.height-e.stroke,rx:Math.max(0,e.radius-r),fill:"none",stroke:e.color,strokeWidth:e.stroke})}case"overhang":return p("path",{transform:`translate(${t} -10)`,d:"M0,5 L8,0 L8,10 Z M18,5 L10,0 L10,10 Z",fill:"#18181c"});case"glyph":return p("text",{x:t+w/2,y:-1,textAnchor:"middle",fontFamily:"monospace",fontSize:12,fill:"currentColor",children:e.char});case"tick":{let r=-5-e.height/2;return R(C,{children:[e.backing?p("rect",{x:t,y:r,width:w,height:e.height,fill:e.backing}):null,p("rect",{x:t+w/2-1,y:r,width:2,height:e.height,fill:e.color})]})}case"bracket":return p("path",{transform:`translate(${t} ${-5-3.5})`,d:`M0.5,6 V1.5 H5.5 V6 M8.5,6 V1.5 H${w-.5} V6`,fill:"none",stroke:Be()});case"blank":return null}}function nr({swatch:e}){let t=I(),n=de(e);return p("svg",{width:Y(e),height:n,overflow:"visible",style:{flex:"none"},children:p("g",{transform:`translate(0 ${n/2+5})`,children:p(At,{swatch:e,x:0,id:t})})})}var Ot=m(function({model:t}){let n=`exon-outline-${I()}`,o=F(()=>U(()=>{let{genePins:h,walkLift:f}=t,a=f?void 0:t.openBubbleFocus,b=a?h.map(g=>({...g,exonsByNode:g.exonsByNode.filter(k=>a.nodeIds.has(k.nodeId))})):h;return pe(b,t.nodeInk.halfWidthPx,f)}),[t]),{scaleX:r,scaleY:s,translateX:l,translateY:i,paneWidth:c,canvasHeight:d}=t,u=ce(o.get(),{id:n,width:c,height:d,transform:`translate(${l} ${i}) scale(${r} ${s})`});return u?p(S,{model:t,zIndex:2,testId:"graph-gene-pins",children:p(H,{el:u})}):null}),ur=Ot;function tt(e,t,n){return{x:e-n/2,y:t-P-X+2,width:n,height:P+X*2-2}}function nt(e,t,n){let o=tt(e.x,e.y,e.w);return t>=o.x&&t<=o.x+o.width&&n>=o.y&&n<=o.y+o.height}function $({x:e,y:t,w:n,text:o,note:r,color:s,edge:l=s,italic:i,dimmed:c,title:d,testId:u,onClick:h,onHover:f}){return R("g",{style:{pointerEvents:h||f?"auto":"none",cursor:h?"pointer":void 0,opacity:c?.35:1},"data-testid":u,onClick:h,onMouseEnter:()=>{f?.(!0)},onMouseLeave:()=>{f?.(!1)},...h&&{role:"button",tabIndex:0,"aria-label":(d??o).replaceAll(`
2
- `,", "),onKeyDown:a=>{(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),h())},onFocus:()=>{f?.(!0)},onBlur:()=>{f?.(!1)}},children:[d?p("title",{children:d}):null,p("rect",{...tt(e,t,n),rx:3,fill:"rgba(255,255,255,0.85)",stroke:l,strokeWidth:1}),R("text",{x:e,y:t,fontSize:P,fontFamily:"sans-serif",fontStyle:i?"italic":void 0,fontWeight:i?600:void 0,fill:s,textAnchor:"middle",children:[o,r?p("tspan",{fontStyle:"normal",fontWeight:"normal",children:r}):null]})]})}var rt="#1c1c22",be=9,fe=3;function Or({genes:e},t,n){let o=e.find(l=>nt(l,t,n))?.item;if(!o)return;let{gene:r}=o,s=Ke(o);return{label:r.name,readout:`${r.refName}:${r.start.toLocaleString()}-${r.end.toLocaleString()}${s?`, ${s} in the cut`:""}`}}var It=m(function({model:t}){let{bubbles:n,genes:o,ticks:r}=t.overlayLabels;if(n.length+o.length+r.length===0)return null;let{scaleY:s,translateY:l,contigThickness:i,hoveredBubble:c}=t,d=c?r.find(a=>L(a.item.bubble,c)):void 0,u=a=>r[Number(a.getAttribute("data-tick"))],h=a=>t.bubbleFaded(a),f=a=>t.bubbleIsOpen(a.bubble);return R(S,{model:t,zIndex:3,testId:"graph-label-layer",pansWithDrawing:!0,children:[p("g",{"data-testid":"graph-bubble-ticks",onClick:a=>{let b=u(a.target);b&&t.toggleBubble(b.item.bubble)},onMouseOver:a=>{let b=u(a.target);b&&t.setHoveredBubble(b.item.bubble)},onMouseOut:()=>{K(t)&&t.setHoveredBubble(null)},onFocus:a=>{let b=u(a.target);b&&t.setHoveredBubble(b.item.bubble)},onBlur:()=>{K(t)&&t.setHoveredBubble(null)},onKeyDown:a=>{let b=u(a.target);b&&(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),t.toggleBubble(b.item.bubble))},children:r.map(({item:a,x:b,y:g},k)=>p("rect",{"data-tick":k,role:"button",tabIndex:0,"aria-label":`${a.label}, ${f(a)?"close":"open"} bubble`,x:b-fe/2,y:g-be,width:fe,height:be,rx:fe/2,fill:y[a.kind],opacity:h(a)?.35:1,style:{pointerEvents:"all",cursor:"pointer"}},W(a.bubble)))}),o.map(({item:a,x:b,y:g,w:k,text:B})=>{let{gene:x}=a;return R("g",{children:[p("line",{x1:b,x2:b,y1:g-P-2,y2:a.at.y*s+l+i/2,stroke:rt,strokeWidth:.8,strokeOpacity:.6}),p($,{x:b,y:g,w:k,text:x.name,note:B.slice(x.name.length)||void 0,color:rt,edge:G,italic:!0,testId:"graph-gene-pin-label"})]},`${x.name}-${x.start}`)}),n.map(({item:a,x:b,y:g,w:k,text:B})=>p($,{x:b,y:g,w:k,text:B,color:y[a.kind],dimmed:h(a),title:`${a.label}
3
- ${a.bubble.segmentCount} segments${a.bubble.covering?"":f(a)?" \xB7 click to close":" \xB7 click to open"}`,testId:"graph-bubble-halo-label",onClick:a.bubble.covering?void 0:()=>{t.toggleBubble(a.bubble)},onHover:x=>{K(t)&&t.setHoveredBubble(x?a.bubble:null)}},W(a.bubble))),d?p($,{x:d.x,y:d.y-be-4,w:j(d.item.label),text:d.item.label,color:y[d.item.kind],testId:"graph-bubble-tick-label"}):null]})}),Ir=It;function Bt(e,t,{lit:n,dpr:o}){let r=t.hostBpFrame;r&&Xe(e,t.referenceStripBlocks,r,{width:t.paneWidth,lit:n,dpr:o})}var Tt=m(function({model:t}){let n=E((o,r)=>{Bt(o,t,{lit:t.referenceStripLit,dpr:r})},[t]);return p(A,{model:t,zIndex:5,shown:t.referenceStripShown,testId:"graph-reference-strip",paint:n})}),Hr=Tt;var Nt=.45;function Wt(e,t,{highlightNode:n}){let o=t.tubeMapPicture,r=t.tubeMapFrame;if(!o||!r)return;let s=t.paneWidth,l=t.tubeMapPanelViews;if(l){Gt(e,t,l,n);return}let i={...r,width:s,highlightNode:n,tubeColors:t.tubeMapTubeColors,nodeColors:t.tubeMapNodeColors};ae(e,o,i);let c=t.layoutResult?.tubeMap;c&&(ie(e,o,c.graph,i),le(e,c,i)),oe(e,t.tubeMapDeviations,i),Te(e,t.tubeMapConnectors,t.connectorZoneBottom,i);let{bounds:d}=o;Fe(e,t.tubeMapGenes,i,r.y(d.minY)-2);let u=t.tubeMapRulerBoxes;u&&re(e,u,i,r.y(d.maxY)+4,t.layoutResult?.referenceAxis)}function Gt(e,t,n,o){let r=t.paneWidth;for(let i of n){if(i.bottom<0||i.titleTop>t.canvasHeight)continue;let c={...i.frame,width:r,highlightNode:o,tubeColors:i.tubeColors,nodeColors:i.nodeColors};ae(e,i.picture,c),ie(e,i.picture,i.panel.result.tubeMap.graph,c),le(e,i.panel.result.tubeMap,c),e.globalAlpha=Nt,oe(e,i.deviations,c),e.globalAlpha=1,e.strokeStyle="rgba(0,0,0,0.15)",e.lineWidth=1,e.beginPath(),e.moveTo(0,Math.round(i.titleTop)+.5),e.lineTo(r,Math.round(i.titleTop)+.5),e.stroke(),e.font=De,e.textAlign="left",e.textBaseline="top",e.fillStyle="rgba(0,0,0,0.85)",e.fillText(i.label,6,i.titleTop+4)}let s=n.at(-1),l=t.tubeMapPanelRulerBoxes;s&&l&&re(e,l,{...s.frame,width:r},s.bottom+4,!0)}var Dt=m(function({model:t}){let n=E(o=>{Wt(o,t,{highlightNode:t.selectedNode})},[t]);return p(A,{model:t,zIndex:1,shown:!!t.tubeMapPicture,testId:"graph-tube-map",paint:n})}),Zr=Dt;var _=JBrowseExports["@jbrowse/render-core/marks"],Ht=e=>_!=null&&e in Object(_)?_[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/render-core/marks' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var ot=Ht("spanMark");var to=_&&_.__esModule?_.default:_;function st(e){if(e.startsWith("#")){let r=Number.parseInt(e.slice(1),16);return[r>>16&255,r>>8&255,r&255]}let[t=0,n=0,o=0]=e.match(/[\d.]+/g).map(Number);return e.startsWith("hsl")?xe(t,n/100,o/100).map(r=>r*255):[t,n,o]}var it=([e,t,n])=>ye(Math.round(e),Math.round(t),Math.round(n),255),at=new Map;function $t(e){let t=at.get(e);return t===void 0&&(t=it(st(e)),at.set(e,t)),t}function Kt(e,t,n){let o=e.start+e.bp,r=ve(e,t);if("fill"in r)return[[e.start,o,$t(r.fill)]];let s=r.stops.map(st),l=r.stops.map(u=>Number(/[\d.]+/.exec(u)[0])),i=Math.abs(l.at(-1)-l[0]),c=Math.max(1,Math.min(Math.ceil(e.bp*n),Math.ceil(i),e.bp)),d=[];for(let u=0;u<c;u++){let h=(u+.5)/c*(s.length-1),f=Math.min(Math.floor(h),s.length-2),a=s[f],b=s[f+1],g=h-f;d.push([Math.round(e.start+e.bp*u/c),Math.round(e.start+e.bp*(u+1)/c),it([0,1,2].map(k=>a[k]+(b[k]-a[k])*g))])}return d}function he(e){return{x:new Uint32Array(e),x2:new Uint32Array(e),row:new Uint32Array(e),color:new Uint32Array(e),count:0}}function V(e,t,n){return{x:e.x.subarray(t,n),x2:e.x2.subarray(t,n),row:e.row.subarray(t,n),color:e.color.subarray(t,n),count:n-t}}function lt(e,t,n){let o=e.map(f=>Oe(f.runs,t).map(a=>({gap:a.gap,hairline:a.gap&&Le(a.cause).px===ee,pieces:Kt(a,n,t)}))),r=0;for(let f of o)for(let a of f)r+=a.pieces.length;let s=he(r),l=he(r),i=he(r),c=new Uint32Array(e.length+1),d=new Uint32Array(e.length+1),u=new Uint32Array(e.length+1),h=1;return o.forEach((f,a)=>{for(let b of f){let g=b.hairline?i:b.gap?l:s;for(let[k,B,x]of b.pieces){let T=g.count++;g.x[T]=k,g.x2[T]=B,g.row[T]=a,g.color[T]=x,h=Math.max(h,g.x2[T])}}c[a+1]=s.count,d[a+1]=l.count,u[a+1]=i.count}),{bars:V(s,0,s.count),gaps:V(l,0,l.count),hairlines:V(i,0,i.count),barRows:c,gapRows:d,hairlineRows:u,longest:h}}function pt(e,t,n){let{longest:o}=t,r={start:0,end:o,screenStartPx:n.origin*n.scaleX+n.translateX,screenEndPx:(n.origin+o)*n.scaleX+n.translateX,reversed:!1,displayedRegionIndex:0},s={canvasWidth:n.width,canvasHeight:n.height},l=n.rowPx*n.scaleY;for(let{first:i,count:c,rowY:d}of n.blocks){let u=l/2-n.translateY-(d-i*n.rowPx)*n.scaleY,h=(d-n.rowPx/2)*n.scaleY+n.translateY;if(!(h>n.height||h+c*l<0))for(let[f,a,b]of[[t.bars,t.barRows,n.barPx],[t.gaps,t.gapRows,Math.min(Pe,n.barPx)],[t.hairlines,t.hairlineRows,Math.min(ee,n.barPx)]])ot.paintBlock(e,V(f,a[i],a[i+c]),r,s,{rowHeight:l,rowProportion:b/l,minWidthPx:1,seamPx:0,scrollTop:u})}}function Ut({model:e}){let t=F(()=>U(()=>{let o=e.walkRowBars;return o?lt([o.reference,...o.rows],e.scaleX,e.referenceRampDomain):void 0}),[e]),n=E(o=>{let r=e.walkRowBars,s=e.walkRowPlacement,l=e.walkRowPitch,i=t.get();if(!r||!s||!l||!i)return;let c=e.walkRowGroups?.sections,d=c?.length?[{first:0,count:1,rowY:s.rowY(0)},...c.map(u=>({first:u.first,count:u.count,rowY:s.rowY(u.first)}))]:[{first:0,count:r.rows.length+1,rowY:s.rowY(0)}];pt(o,i,{...e.screenTransform,width:e.paneWidth,height:e.canvasHeight,rowPx:l.rowPx,barPx:l.barPx,origin:r.origin,blocks:d})},[e,t]);return p(A,{model:e,zIndex:3,testId:"graph-walk-rows-spans",paint:n})}var Ft=m(function({model:t}){let n=t.walkRowBars,o=t.walkRowPlacement,r=t.walkRowPitch;if(!n||!o||!r||!t.hoveredWalkRowText)return null;let s=[n.reference,...n.rows],l=s.findIndex(d=>d.name===t.hoveredWalkRow),i=s[l];if(!i)return null;let c=t.toScreen({x:n.origin,y:o.rowY(l)});return p("rect",{"data-testid":"graph-walk-row-hovered",x:c.x-2,y:c.y-r.rowPx/2-1,width:i.bp*t.scaleX+4,height:r.rowPx+2,fill:"none",stroke:"#111",strokeWidth:1})}),Xt=m(function({model:t,vector:n=!1}){let o=I(),r=t.walkRowBars,s=t.walkRowPlacement,l=t.walkRowPitch;if(!r||!s||!l)return null;let{paneWidth:i,canvasHeight:c}=t,d={...t.screenTransform,width:i,height:c,...l,bars:n};return R(C,{children:[n?null:p(Ut,{model:t}),R(S,{model:t,zIndex:3,overflow:"visible",testId:"graph-walk-rows",children:[Ge(r,t.walkRowGroups?.sections??[],s.rowY,d,{ramp:t.referenceRampDomain,rowGenes:t.walkRowGenes,idPrefix:o}).map((u,h)=>p(H,{el:u},h)),s.headers.map(u=>p("text",{x:10,y:t.toScreen({x:0,y:u.top}).y+We-4,fontFamily:"sans-serif",fontSize:11,fontWeight:"bold",fill:"#333","data-testid":"graph-walk-section",children:u.title},u.key)),p(Ft,{model:t})]})]})}),go=Xt;export{ct as a,Ve as b,S as c,an as d,I as e,H as f,Y as g,Lt as h,_t as i,zn as j,qn as k,At as l,nr as m,ur as n,Or as o,Ir as p,Bt as q,Hr as r,Wt as s,Zr as t,go as u};
4
- //# sourceMappingURL=chunk-UFQTIWSN.js.map