jbrowse-plugin-graphgenomeviewer 7.4.2 → 7.4.4

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 (122) hide show
  1. package/README.md +53 -24
  2. package/dist/chunks/{AddTrackWorkflow-LK25EC3H.js → AddTrackWorkflow-NLSZYK56.js} +2 -2
  3. package/dist/chunks/{GbzBaseSyntenyAdapter-BVLBK4OO.js → GbzBaseSyntenyAdapter-A5MNPCKX.js} +2 -2
  4. package/dist/chunks/{GbzBaseSyntenyAdapter-BVLBK4OO.js.map → GbzBaseSyntenyAdapter-A5MNPCKX.js.map} +1 -1
  5. package/dist/chunks/{GraphGenomeView-UCOAMRF7.js → GraphGenomeView-SEAPDRXS.js} +2 -2
  6. package/dist/chunks/{GraphTrackSettingsDialog-MR7X75EY.js → GraphTrackSettingsDialog-EVIIGC5G.js} +2 -2
  7. package/dist/chunks/{HighlightColorDialog-ZBAZDYIR.js → HighlightColorDialog-QAYWLO5I.js} +2 -2
  8. package/dist/chunks/{LinearGraphDisplay-AJ5OZN27.js → LinearGraphDisplay-ZC4BQ27J.js} +2 -2
  9. package/dist/chunks/MinigraphBubbleAdapter-3QM4XV47.js +2 -0
  10. package/dist/chunks/{MinigraphBubbleAdapter-PEQK5NII.js.map → MinigraphBubbleAdapter-3QM4XV47.js.map} +1 -1
  11. package/dist/chunks/{RgfaTabixAdapter-Q63YLPK4.js → RgfaTabixAdapter-XSOIEWBK.js} +2 -2
  12. package/dist/chunks/WalkFormsAdapter-FT2SW4H6.js +2 -0
  13. package/dist/chunks/WalkFormsAdapter-FT2SW4H6.js.map +7 -0
  14. package/dist/chunks/{WalkTabixSyntenyAdapter-N5PFI4LS.js → WalkTabixSyntenyAdapter-3WRVNDLB.js} +2 -2
  15. package/dist/chunks/{chunk-2XZYJLCE.js → chunk-2KVE7YAS.js} +1 -1
  16. package/dist/chunks/{chunk-2XZYJLCE.js.map → chunk-2KVE7YAS.js.map} +1 -1
  17. package/dist/chunks/{chunk-RCXOOBLX.js → chunk-6SWXMRAV.js} +1 -1
  18. package/dist/chunks/{chunk-RCXOOBLX.js.map → chunk-6SWXMRAV.js.map} +1 -1
  19. package/dist/chunks/{chunk-WY5W5X62.js → chunk-6VNU7SD4.js} +2 -2
  20. package/dist/chunks/{chunk-WY5W5X62.js.map → chunk-6VNU7SD4.js.map} +1 -1
  21. package/dist/chunks/{chunk-DXNE2CFX.js → chunk-6WUWQX2P.js} +2 -2
  22. package/dist/chunks/{chunk-DXNE2CFX.js.map → chunk-6WUWQX2P.js.map} +1 -1
  23. package/dist/chunks/{chunk-ZG2CQXOW.js → chunk-7RJMG6I2.js} +2 -2
  24. package/dist/chunks/{chunk-ZG2CQXOW.js.map → chunk-7RJMG6I2.js.map} +1 -1
  25. package/dist/chunks/chunk-FTXDTU27.js +3 -0
  26. package/dist/chunks/chunk-FTXDTU27.js.map +7 -0
  27. package/dist/chunks/chunk-G53BI7VK.js +2 -0
  28. package/dist/chunks/{chunk-MEMUEG5Z.js.map → chunk-G53BI7VK.js.map} +4 -4
  29. package/dist/chunks/chunk-GRTN25B6.js +3 -0
  30. package/dist/chunks/chunk-GRTN25B6.js.map +7 -0
  31. package/dist/chunks/{chunk-62AHPP6H.js → chunk-HCDKP3IP.js} +2 -2
  32. package/dist/chunks/{chunk-62AHPP6H.js.map → chunk-HCDKP3IP.js.map} +1 -1
  33. package/dist/chunks/{chunk-HI3YK2SO.js → chunk-HF4H6LQI.js} +2 -2
  34. package/dist/chunks/{chunk-MVVXRZXV.js → chunk-JRJHXLGP.js} +2 -2
  35. package/dist/chunks/{chunk-MVVXRZXV.js.map → chunk-JRJHXLGP.js.map} +2 -2
  36. package/dist/chunks/{chunk-LFTZNUXB.js → chunk-KIYRMZWP.js} +2 -2
  37. package/dist/chunks/{chunk-LFTZNUXB.js.map → chunk-KIYRMZWP.js.map} +1 -1
  38. package/dist/chunks/{chunk-WJGCVNGH.js → chunk-LE43I4PT.js} +2 -2
  39. package/dist/chunks/{chunk-U5PIXAF2.js → chunk-LE7FZM6Y.js} +2 -2
  40. package/dist/chunks/{chunk-U5PIXAF2.js.map → chunk-LE7FZM6Y.js.map} +1 -1
  41. package/dist/chunks/chunk-MUONTMYZ.js +2 -0
  42. package/dist/chunks/chunk-MUONTMYZ.js.map +7 -0
  43. package/dist/chunks/{chunk-SFYSQ52W.js → chunk-OJWBLPPH.js} +2 -2
  44. package/dist/chunks/{chunk-JSRGX4TC.js → chunk-P3FBI5ML.js} +1 -1
  45. package/dist/chunks/{chunk-JSRGX4TC.js.map → chunk-P3FBI5ML.js.map} +1 -1
  46. package/dist/chunks/chunk-QV7SSOMJ.js +2 -0
  47. package/dist/chunks/chunk-S333HOG5.js +2 -0
  48. package/dist/chunks/chunk-S333HOG5.js.map +7 -0
  49. package/dist/chunks/{chunk-QJ43NDYS.js → chunk-TYV6UXJA.js} +2 -2
  50. package/dist/chunks/chunk-VZQ6VOUP.js +2 -0
  51. package/dist/chunks/chunk-VZQ6VOUP.js.map +7 -0
  52. package/dist/chunks/chunk-WLRRI35A.js +3 -0
  53. package/dist/chunks/chunk-WLRRI35A.js.map +7 -0
  54. package/dist/chunks/{chunk-PUREF4BM.js → chunk-XXBE4IFZ.js} +2 -2
  55. package/dist/chunks/{chunk-PUREF4BM.js.map → chunk-XXBE4IFZ.js.map} +1 -1
  56. package/dist/chunks/{renderSvg-Z7YIXVQ5.js → renderSvg-ZIUOPWJQ.js} +2 -2
  57. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +3 -4
  58. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  59. package/package.json +3 -3
  60. package/src/GraphGenomeView/model.test.ts +2 -109
  61. package/src/GraphGenomeView/pane/fitViews.ts +0 -109
  62. package/src/GraphGenomeView/pane/graphViews.ts +0 -4
  63. package/src/GraphGenomeView/pane/launchActions.ts +0 -22
  64. package/src/GraphGenomeView/pane/loadActions.ts +1 -1
  65. package/src/GraphGenomeView/pane/paneBase.ts +0 -7
  66. package/src/GraphGenomeView/viewModel.ts +0 -3
  67. package/src/RgfaTabixAdapter/configSchema.ts +3 -3
  68. package/src/RgfaTabixAdapter/walkFiles.test.ts +6 -6
  69. package/src/WalkFormsAdapter/WalkFormsAdapter.test.ts +204 -0
  70. package/src/WalkFormsAdapter/WalkFormsAdapter.ts +232 -0
  71. package/src/WalkFormsAdapter/configSchema.ts +127 -0
  72. package/src/WalkFormsAdapter/formRows.test.ts +258 -0
  73. package/src/WalkFormsAdapter/formRows.ts +231 -0
  74. package/src/WalkFormsAdapter/formsMenu.test.ts +237 -0
  75. package/src/WalkFormsAdapter/formsMenu.ts +202 -0
  76. package/src/WalkFormsAdapter/index.ts +21 -0
  77. package/src/WalkFormsAdapter/pinned.ts +33 -0
  78. package/src/WalkTabixSyntenyAdapter/WalkTabixSyntenyAdapter.test.ts +5 -5
  79. package/src/WalkTabixSyntenyAdapter/configSchema.ts +2 -2
  80. package/src/index.ts +4 -0
  81. package/src/panSNAliases/panSNAliases.test.ts +2 -2
  82. package/src/version.ts +1 -1
  83. package/dist/chunks/MinigraphBubbleAdapter-PEQK5NII.js +0 -2
  84. package/dist/chunks/chunk-55DIX25J.js +0 -3
  85. package/dist/chunks/chunk-55DIX25J.js.map +0 -7
  86. package/dist/chunks/chunk-AWGMTI73.js +0 -3
  87. package/dist/chunks/chunk-AWGMTI73.js.map +0 -7
  88. package/dist/chunks/chunk-FWVXBJ64.js +0 -3
  89. package/dist/chunks/chunk-FWVXBJ64.js.map +0 -7
  90. package/dist/chunks/chunk-J3AXN7JQ.js +0 -2
  91. package/dist/chunks/chunk-MEMUEG5Z.js +0 -2
  92. package/dist/chunks/chunk-Q3BXNKEL.js +0 -2
  93. package/dist/chunks/chunk-Q3BXNKEL.js.map +0 -7
  94. package/dist/chunks/chunk-S75MFZDE.js +0 -2
  95. package/dist/chunks/chunk-S75MFZDE.js.map +0 -7
  96. /package/dist/chunks/{AddTrackWorkflow-LK25EC3H.js.map → AddTrackWorkflow-NLSZYK56.js.map} +0 -0
  97. /package/dist/chunks/{GraphGenomeView-UCOAMRF7.js.map → GraphGenomeView-SEAPDRXS.js.map} +0 -0
  98. /package/dist/chunks/{GraphTrackSettingsDialog-MR7X75EY.js.map → GraphTrackSettingsDialog-EVIIGC5G.js.map} +0 -0
  99. /package/dist/chunks/{HighlightColorDialog-ZBAZDYIR.js.map → HighlightColorDialog-QAYWLO5I.js.map} +0 -0
  100. /package/dist/chunks/{LinearGraphDisplay-AJ5OZN27.js.map → LinearGraphDisplay-ZC4BQ27J.js.map} +0 -0
  101. /package/dist/chunks/{RgfaTabixAdapter-Q63YLPK4.js.map → RgfaTabixAdapter-XSOIEWBK.js.map} +0 -0
  102. /package/dist/chunks/{WalkTabixSyntenyAdapter-N5PFI4LS.js.map → WalkTabixSyntenyAdapter-3WRVNDLB.js.map} +0 -0
  103. /package/dist/chunks/{chunk-HI3YK2SO.js.map → chunk-HF4H6LQI.js.map} +0 -0
  104. /package/dist/chunks/{chunk-WJGCVNGH.js.map → chunk-LE43I4PT.js.map} +0 -0
  105. /package/dist/chunks/{chunk-SFYSQ52W.js.map → chunk-OJWBLPPH.js.map} +0 -0
  106. /package/dist/chunks/{chunk-J3AXN7JQ.js.map → chunk-QV7SSOMJ.js.map} +0 -0
  107. /package/dist/chunks/{chunk-QJ43NDYS.js.map → chunk-TYV6UXJA.js.map} +0 -0
  108. /package/dist/chunks/{renderSvg-Z7YIXVQ5.js.map → renderSvg-ZIUOPWJQ.js.map} +0 -0
  109. /package/src/RgfaTabixAdapter/test_data/{walks4_follow.GRCh38.walks.bed.gz → walks5_follow.GRCh38.walks.bed.gz} +0 -0
  110. /package/src/RgfaTabixAdapter/test_data/{walks4_follow.GRCh38.walks.bed.gz.tbi → walks5_follow.GRCh38.walks.bed.gz.tbi} +0 -0
  111. /package/src/RgfaTabixAdapter/test_data/{walks4_header.GRCh38.walks.bed.gz → walks5_header.GRCh38.walks.bed.gz} +0 -0
  112. /package/src/RgfaTabixAdapter/test_data/{walks4_header.GRCh38.walks.bed.gz.tbi → walks5_header.GRCh38.walks.bed.gz.tbi} +0 -0
  113. /package/src/RgfaTabixAdapter/test_data/{walks4_inversion.GRCh38.walks.bed.gz → walks5_inversion.GRCh38.walks.bed.gz} +0 -0
  114. /package/src/RgfaTabixAdapter/test_data/{walks4_inversion.GRCh38.walks.bed.gz.tbi → walks5_inversion.GRCh38.walks.bed.gz.tbi} +0 -0
  115. /package/src/RgfaTabixAdapter/test_data/{walks4_lanepairs.GRCh38.walks.bed.gz → walks5_lanepairs.GRCh38.walks.bed.gz} +0 -0
  116. /package/src/RgfaTabixAdapter/test_data/{walks4_lanepairs.GRCh38.walks.bed.gz.tbi → walks5_lanepairs.GRCh38.walks.bed.gz.tbi} +0 -0
  117. /package/src/RgfaTabixAdapter/test_data/{walks4_maxnode.GRCh38.walks.bed.gz → walks5_maxnode.GRCh38.walks.bed.gz} +0 -0
  118. /package/src/RgfaTabixAdapter/test_data/{walks4_maxnode.GRCh38.walks.bed.gz.tbi → walks5_maxnode.GRCh38.walks.bed.gz.tbi} +0 -0
  119. /package/src/RgfaTabixAdapter/test_data/{walks4_rejoin.GRCh38.walks.bed.gz → walks5_rejoin.GRCh38.walks.bed.gz} +0 -0
  120. /package/src/RgfaTabixAdapter/test_data/{walks4_rejoin.GRCh38.walks.bed.gz.tbi → walks5_rejoin.GRCh38.walks.bed.gz.tbi} +0 -0
  121. /package/src/RgfaTabixAdapter/test_data/{walks4_twopart.GRCh38.walks.bed.gz → walks5_twopart.GRCh38.walks.bed.gz} +0 -0
  122. /package/src/RgfaTabixAdapter/test_data/{walks4_twopart.GRCh38.walks.bed.gz.tbi → walks5_twopart.GRCh38.walks.bed.gz.tbi} +0 -0
@@ -1,2 +0,0 @@
1
- import{l as o}from"./chunk-MEMUEG5Z.js";function u(a,r,e){return e?{...a,walkRowRuns:o(a,r)}:a}export{u as a};
2
- //# sourceMappingURL=chunk-J3AXN7JQ.js.map
@@ -1,2 +0,0 @@
1
- import{c as Ct,o as Vt,r as pt}from"./chunk-U5PIXAF2.js";import{a as wt,d as Wt,e as Dt}from"./chunk-RCXOOBLX.js";var ae="ws",ie="we",Zt=["elsewhere","break","end"],be={missing:"not in the graph",elsewhere:"on nodes filed elsewhere",unknown:"gap, cause unknown",abridged:"abridged: steps not loaded"},ve="outside the extracted subgraph";function Xt(t,e,s){if(!e&&!s)return[{bp:t}];let n=Math.min(e?.trimmed??0,t),r=Math.min(s?.trimmed??0,t-n),i=t-n-r,h=e?.kind==="break"?Math.min(e.bp,i):0;i-=h;let c=s?.kind==="break"?Math.min(s.bp,i):0;i-=c;let o=[e,s].find(k=>k?.kind==="elsewhere");return[{bp:n},{bp:h,cause:"missing"},o?.kind==="elsewhere"?{bp:i,cause:"elsewhere",chunk:o.chunk}:{bp:i,cause:"unknown"},{bp:c,cause:"missing"},{bp:r}].filter(k=>k.bp>0)}function xt(t,e){let s=t.bp[e],n=t.chunkRefs[e];return Kt(t.kindNames[t.kinds[e]],Number.isNaN(s)?void 0:s,t.trimmed[e],n<0?void 0:{refName:t.chunkRefNames[n],start:t.chunkStarts[e]})}function Kt(t,e,s,n){let r=s>0?{trimmed:s}:{};return t==="elsewhere"&&n?{kind:t,chunk:n,...e===void 0?{}:{bp:e},...r}:t==="break"&&e!==void 0?{kind:t,bp:e,...n?{chunk:n}:{},...r}:t==="end"?{kind:t,...r}:void 0}function Ht(t){let[e,...s]=t.split(","),n,r=0,i;for(let h of s)if(h.startsWith("bp="))n=+h.slice(3);else if(h.startsWith("trimmed="))r=+h.slice(8);else if(h.startsWith("chunk=")){let c=h.lastIndexOf(":");i={refName:h.slice(6,c),start:+h.slice(c+1)}}return Kt(e,n,r,i)}function Ft(t,e){return{...t?{before:t}:{},...e?{after:e}:{}}}function ke(t){let e=t[ae],s=t[ie];return Ft(typeof e=="string"?Ht(e):void 0,typeof s=="string"?Ht(s):void 0)}var ye=class{constructor(){this.kinds=[],this.bp=[],this.trimmed=[],this.chunkRefs=[],this.chunkStarts=[],this.chunkRefNames=[],this.refIndex=new Map}push(t){this.kinds.push(Zt.indexOf(t.kind)),this.bp.push("bp"in t&&t.bp!==void 0?t.bp:NaN),this.trimmed.push(t.trimmed??0);let e="chunk"in t?t.chunk:void 0;if(e){let s=this.refIndex.get(e.refName);s===void 0&&(s=this.chunkRefNames.length,this.refIndex.set(e.refName,s),this.chunkRefNames.push(e.refName)),this.chunkRefs.push(s),this.chunkStarts.push(e.start)}else this.chunkRefs.push(-1),this.chunkStarts.push(NaN)}table(){return{kinds:Uint8Array.from(this.kinds),kindNames:[...Zt],bp:Float64Array.from(this.bp),trimmed:Float64Array.from(this.trimmed),chunkRefs:Int32Array.from(this.chunkRefs),chunkStarts:Float64Array.from(this.chunkStarts),chunkRefNames:this.chunkRefNames}}};function fe(t,e,s){return e===0?t:`${t}:${e}-${s}`}function Mt(t,e){let s=t.names[e],n=Dt(s),r=t.starts[e],i=t.abridgedSteps?.[e]??Number.NaN,h=Number.isNaN(i)?{}:{abridged:{steps:i,bp:t.abridgedBp?.[e]??0}};return n?{name:`${n.sample}#${n.haplotype}#${n.contig}`,start:r,...n,...Ft(t.before&&xt(t.before,e),t.after&&xt(t.after,e)),...h}:{name:fe(s,r,t.ends[e]),start:r}}function ce(t,e,s,n){let r=new Int32Array(s+1);for(let o of t)r[o+1]++;for(let o=0;o<s;o++)r[o+1]+=r[o];let i=r.slice(0,s),h=new Int32Array(t.length);t.forEach((o,m)=>{h[i[o]++]=e[m]});let c=new Int32Array(n.length).fill(-1);return Array.from({length:s},(o,m)=>{let k=[];for(let I=r[m];I<r[m+1];I++){let B=h[I];c[B]!==m&&(c[B]=m,k.push(n[B]))}return k})}function Tt({nodes:t,links:e,walks:s},n){let r=new Uint8Array(t.names.length),i=(c,o)=>{r[c]===0&&(r[c]=o?2:1)};for(let c=0;c<e.from.length;c++)i(e.from[c],e.strands[c]&1),i(e.to[c],e.strands[c]&2);let h=s.offsets[s.names.length]??0;for(let c=0;c<h;c++){let o=s.steps[c];i(o,s.reversed[c]),n&&n[o]++}return t.names.map((c,o)=>`${c}${r[o]===2?"-":"+"}`)}function Oe({nodes:t,links:e,walks:s},n="Imported GFA"){let r=t.names.length,i=t.lengths.length,h=[];for(let a=0;a<s.names.length;a++)s.offsets[a+1]>s.offsets[a]&&h.push(a);let c=new Int32Array(r),o=Tt({nodes:t,links:e,walks:s},c),m=[];for(let a=0;a<i;a++){let v=t.refs[a];m.push({id:o[a],name:t.names[a],length:t.lengths[a],depth:Math.max(c[a],1),stable:v<0?void 0:{refName:t.refNames[v],start:t.starts[a],rank:t.ranks[a]},samples:void 0})}let k=[],I=new Array(r),B=(a,v)=>{let u=I[a];if(u){for(let w=0;w<u.length;w+=2)if(u[w]===v)return u[w+1]}},D=(a,v,u)=>{let w=I[a];w?w.push(v,u):I[a]=[v,u]},ot=[],Q=0;for(let a=0;a<e.from.length;a++){let v=e.from[a],u=e.to[a];k.push({from:o[v],to:o[u],fromStrand:e.strands[a]&1?"-":"+",toStrand:e.strands[a]&2?"-":"+"});let w=B(v,u);w===void 0&&(w=Q++,D(v,u,w),D(u,v,w)),ot.push(w)}let T=new Int32Array(r+1);for(let a=0;a<r;a++)T[a+1]=T[a]+(I[a]?.length??0)/2;let at=new Int32Array(T[r]),it=new Int32Array(T[r]);I.forEach((a,v)=>{for(let u=0;u<a.length;u+=2)at[T[v]+u/2]=a[u],it[T[v]+u/2]=a[u+1]});let It=(a,v)=>{for(let u=T[a];u<T[a+1];u++)if(at[u]===v)return it[u];return-1},R=new Map,G=[],V=new Int32Array(s.offsets[s.names.length]??0),ft=new Int32Array(V.length),Y=0,O=new Int32Array(Q).fill(-1),gt=[],U=[],Z=s.offsets[s.names.length]??0,ct=new Int32Array(Z),Nt=new Float64Array(Z),H=new Uint8Array(Z),S=new Int32Array(r).fill(-1),P=[],L=[0],lt=[],tt=new Map,et=[];for(let a of h){let v=Mt(s,a),{start:u,name:w}=v,X=v.sample===void 0?s.names[a]:w,f=R.get(X);f===void 0&&(f=G.length,R.set(X,f),G.push(X),lt.push(wt(X)));let d=tt.get(w);d===void 0&&(d=et.length,tt.set(w,d),et.push(w));let E=lt[f],j=s.offsets[a],x=new Array(s.offsets[a+1]-j),y=u,C=-1;for(let F=j;F<s.offsets[a+1];F++){let $=s.steps[F];x[F-j]=o[$],S[$]===-1&&(S[$]=L.at(-1),L.push(S[$]+c[$]),P.push($));let K=S[$]++;if(ct[K]=f,Nt[K]=y,H[K]=s.reversed[F],y+=$<i?t.lengths[$]:0,C>=0){let q=It(C,$);q>=0&&O[q]!==a&&(O[q]=a,V[Y]=q,ft[Y++]=d)}C=$}gt.push({...v,nodeIds:x}),U.push({name:X,sample:E,start:u,length:y-u})}let Rt=ce(V.subarray(0,Y),ft,Q,et);k.forEach((a,v)=>{let u=Rt[ot[v]];u.length>0&&(a.pathIds=u)});let ht=h.length>0;return{name:n,nodes:m,edges:k,paths:ht?gt:void 0,anchorPaths:ht?U:void 0,pathVisits:ht?new Vt({segments:P.map(a=>t.names[a]),offsets:Int32Array.from(L),path:ct.subarray(0,L.at(-1)),start:Nt.subarray(0,L.at(-1)),reversed:H.subarray(0,L.at(-1)),paths:G,samples:lt}):void 0,anchoredBy:m.some(a=>a.stable)?"tags":void 0}}var Pt=1,zt=2,St=4,Jt=[void 0,"missing","elsewhere","unknown","abridged"],Qt=3,le=t=>Jt.indexOf(t)<<Qt;function Yt(t,e,s){return e!==void 0&&t.includes(e)?e:t.find(n=>s.has(n))??t[0]}function he(t){return Yt((t.paths??[]).map(e=>pt(e.name).name),t.referencePath,new Set(t.nodes.flatMap(e=>e.stable?.rank===0?[e.stable.refName]:[])))}function ue(t){let e=new Map,s=[],n=[],r=m=>{let k=e.get(m);return k===void 0&&(k=s.length,e.set(m,k),s.push(m),n.push(0)),k};for(let m of t.nodes)n[r(m.id)]=m.length;let i=t.paths??[],h=new Int32Array(i.length),c=new Int32Array(i.length),o=[];return i.forEach((m,k)=>{h[k]=o.length;for(let I of m.nodeIds)o.push(r(I));c[k]=o.length}),{heads:i,from:h,to:c,steps:Int32Array.from(o),lengths:Int32Array.from(n),names:s,reference:he(t)}}function de(t,e,s){let{nodes:n,walks:r}=t,i=[];for(let o=0;o<r.names.length;o++)r.offsets[o+1]>r.offsets[o]&&i.push(o);let h=i.map(o=>Mt(r,o)),c=new Set;for(let o=0;o<n.lengths.length;o++)n.refs[o]>=0&&n.ranks[o]===0&&c.add(n.refNames[n.refs[o]]);return{heads:h,from:Int32Array.from(i,o=>r.offsets[o]),to:Int32Array.from(i,o=>r.offsets[o+1]),steps:r.steps,lengths:n.lengths,names:s?Tt(t):n.names,reference:Yt(h.map(o=>pt(o.name).name),e,c)}}function te(t){return t.sample??wt(t.name)}function pe(t){return t.haplotype!==void 0&&t.sample!==void 0?`${t.sample}#${t.haplotype}`:te(t)}var qt=class{constructor(t){this.offsets=[0],this.values=Array.from({length:t},()=>[])}get length(){return this.values[0].length}push(t,e,s,n,r){let i=this.values;i[0].push(t),i[1].push(e),i[2].push(s),i[3].push(n),r!==void 0&&i[4].push(r)}endRow(){this.offsets.push(this.length)}reorder(t,e){let s=new Uint32Array(t.length+1);t.forEach((r,i)=>{s[i+1]=s[i]+this.offsets[r+1]-this.offsets[r]});let n=e.map((r,i)=>{let h=this.values[i],c=r(this.length),o=0;for(let m of t)for(let k=this.offsets[m];k<this.offsets[m+1];k++)c[o++]=h[k];return c});return{offsets:s,columns:n}}},mt=t=>new Float64Array(t);function _e(t,e,s={}){let{heads:n,from:r,to:i,steps:h,lengths:c,names:o,reference:m}="walks"in t?de(t,s.referencePath,s.visits):ue(t),k=c.length,I=f=>f<k?c[f]:0,B=f=>pt(n[f].name).name,D=f=>n[f].start,ot=(f,d)=>(D(f)??0)-(D(d)??0),Q=n.map((f,d)=>d),T=Q.filter(f=>B(f)===m).sort(ot),at=T[0],it=Q.filter(f=>B(f)!==m);if(at===void 0||it.length===0)return;let It=Ct(it,B),R=new Float64Array(o.length).fill(Number.NaN),G=new Float64Array(o.length),V=new Map,ft=!1,Y=!1,O=e&&e.end>e.start?e:void 0;for(let f of T){let d=D(f)??0;for(let E=r[f],j=i[f];E<j;E++){let x=h[E],y=I(x);if(Number.isNaN(R[x]))R[x]=d,G[x]=d+y,O&&(ft||=d+y<=O.start,Y||=d>=O.end);else{let C=V.get(x);C?C.push(d):V.set(x,[R[x],d])}d+=y}}let gt=O===void 0||ft&&Y,U=new qt(5),Z=[],ct=new Map,Nt=f=>{if(!f)return-1;let d=`${f.refName}:${f.start}`,E=ct.get(d);return E===void 0&&(E=Z.length,ct.set(d,E),Z.push(f)),E},H=s.visits?new qt(4):void 0,S=new Int32Array(0),P=new Float64Array(0),L=f=>{let d=n[f[0]],E=[...f].sort(ot),j=E.length-1,x=0;for(let l of E)j+=i[l]-r[l]+(n[l].abridged?1:0),x+=n[l].abridged?.steps??0;j>S.length&&(S=new Int32Array(j*2),P=new Float64Array(j*2));let y=0,C=!1,F,$,K=new Map;for(let l of E){let p=D(l);(p===void 0||F!==void 0&&p<F)&&(C=!0),F!==void 0&&p!==void 0&&p>F&&(K.set(y,Xt(p-F,$===void 0?void 0:n[$].after,n[l].before)),S[y]=-(p-F),P[y++]=F);let b=p??0,A=n[l].abridged;for(let g=r[l],N=i[l];g<N;g++){let M=h[g],_=A?A.bp-(b-(p??0))-I(M):0;_>0&&g===N-1&&g>r[l]&&(K.set(y,[{bp:_,cause:"abridged"}]),S[y]=-_,P[y++]=b,b+=_),S[y]=M,P[y++]=b,b+=I(M)}F=p===void 0?void 0:b,$=l}let q=l=>l>=0&&l<y&&S[l]>=0&&!Number.isNaN(R[S[l]]),$t=l=>{let p=S[l];return P[l]+(p<0?-p:I(p))},ee=(l,p)=>{let b=l>=0?l:p,A=-1;for(let J=1;A<0&&J<y;J++)A=[b-J,b+J].find(q)??-1;if(A<0)return;let g=A>b==R[S[A]]>R[S[b]],N=g===(b===l),M=N?y-1:0,_=q(M);return{stop:{contigEnds:_,shortBp:_?Math.max(0,O.start-G[S[M]],R[S[M]]-O.end):0},lo:N?b+1:0,hi:N?y:b,backward:!g,axisStart:g?N?$t(b):P[0]:N?$t(y-1):P[b]}},bt=0,vt=y,ut=!1,_t=!0,dt=-1,Ut=-1,Ot,jt;if(O&&gt){let l=-1,p=-1,b=-1/0,A=1/0;for(let g=0;g<y;g++){let N=S[g];N>=0&&!Number.isNaN(R[N])&&(G[N]<=O.start&&G[N]>b&&(b=G[N],l=g),R[N]>=O.end&&R[N]<A&&(A=R[N],p=g))}if(l<0||p<0){_t=!1;let g=l>=0||p>=0?ee(l,p):void 0;g&&({lo:bt,hi:vt,backward:ut,axisStart:Ot,stop:jt}=g)}else bt=Math.min(l,p)+1,vt=Math.max(l,p),ut=l>p,dt=l,Ut=p}let kt=d.contig??Wt(pt(d.name).name),se=C||y===0?void 0:Ot!==void 0?{contig:kt,start:Ot,reversed:ut}:dt<0?{contig:kt,start:P[0],reversed:!1}:dt<Ut?{contig:kt,start:$t(dt),reversed:!1}:{contig:kt,start:P[dt],reversed:!0},st=0,Bt=0,Gt=0,nt=0,W=-1,rt=0,z=Number.NaN,yt=Number.NaN,ne=l=>{let p=V.get(l);if(!p||Number.isNaN(yt))return R[l];let b=I(l),A=p[0],g=1/0;for(let N of p){let M=Math.min(Math.abs(N-yt),Math.abs(N+b-yt));M<g&&(A=N,g=M)}return A},[,Et,re,oe]=U.values;for(let l=bt;l<vt;l++){let p=ut?vt-1-(l-bt):l,b=S[p];if(b<0){let J=K.get(p);for(let At of ut?[...J].reverse():J)U.push(st,At.bp,Number.NaN,St|le(At.cause),Nt(At.chunk)),st+=At.bp;W=U.length-1,rt=St,z=Number.NaN,Gt+=-b,nt=0;continue}let A=I(b),g=ne(b),N=!Number.isNaN(g);H?.push(b,st,A,N?1:0);let M=W>=0&&!Number.isNaN(z),_=N&&M&&nt>=0&&z+(Et[W]??0)===g,Lt=N&&M&&nt<=0&&g+A===z;!N&&W>=0&&!(rt&(Pt|St))?Et[W]+=A:_||Lt?(Et[W]+=A,_||(z=g,re[W]=g,rt|=zt,oe[W]=rt),nt=_?1:-1):(rt=N?Pt:0,z=N?g:Number.NaN,U.push(st,A,z,rt,-1),W=U.length-1,nt=0),st+=A,N?yt=nt<0?g:g+A:Bt+=A}return U.endRow(),H?.endRow(),{name:d.name,label:pe(d),sample:te(d),haplotype:d.haplotype,bp:st,offReferenceBp:Bt,gapBp:Gt,complete:_t,stop:jt,axis:se,...x>0?{abridgedSteps:x}:{}}},lt=L(T),tt=[...It.values()].map((f,d)=>({meta:L(f),row:d+1}));tt.sort((f,d)=>Number(d.meta.complete)-Number(f.meta.complete)||d.meta.bp-f.meta.bp||f.meta.label.localeCompare(d.meta.label));let et=[0,...tt.map(f=>f.row)],{offsets:Rt,columns:ht}=U.reorder(et,[mt,mt,mt,f=>new Uint8Array(f),f=>new Int32Array(f)]),[a,v,u,w,X]=ht;return{origin:O?O.start:D(at)??0,rows:[lt,...tt.map(f=>f.meta)],offsets:Rt,start:a,bp:v,referenceStart:u,flags:w,chunk:X,chunks:Z,visits:H&&me(H,et,o)}}function me(t,e,s){let{offsets:n,columns:r}=t.reorder(e,[m=>new Int32Array(m),mt,mt,m=>new Uint8Array(m)]),[i,h,c,o]=r;return{offsets:n,node:i,start:h,bp:c,onReference:o,names:s}}function ge(t,e){let s=t.flags[e],n={start:t.start[e],bp:t.bp[e],onReference:(s&Pt)!==0};if(s&St){n.gap=!0;let r=Jt[s>>Qt&7];r&&(n.cause=r);let i=t.chunks[t.chunk[e]];i&&(n.chunk=i)}else n.referenceStart=Number.isNaN(t.referenceStart[e])?void 0:t.referenceStart[e];return s&zt&&(n.reversed=!0),n}function Ne(t,e){let s=[];for(let n=t.offsets[e];n<t.offsets[e+1];n++)s.push({node:t.names[t.node[n]],start:t.start[n],bp:t.bp[n],onReference:t.onReference[n]===1});return s}function Ue(t,e){let s=t.rows.map((n,r)=>{let i=[];for(let h=t.offsets[r];h<t.offsets[r+1];h++)i.push(ge(t,h));return{...n,runs:i,visits:t.visits&&Ne(t.visits,r)}});return{origin:t.origin,unit:e,reference:s[0],rows:s.slice(1)}}export{ae as a,ie as b,be as c,ve as d,Xt as e,Ht as f,ke as g,ye as h,Mt as i,Oe as j,he as k,_e as l,Ue as m};
2
- //# sourceMappingURL=chunk-MEMUEG5Z.js.map
@@ -1,2 +0,0 @@
1
- import{a as lt,c as dt,d as ht,g as C,j as U,l as xt,q as pt,r as R,w as mt,x as Mt}from"./chunk-U5PIXAF2.js";import{b as yt}from"./chunk-RCXOOBLX.js";var bt=20;function fo(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 r=Math.hypot(e-n,o-t);if(r===0)return[o,e];let c=(o-t)/r,a=(e-n)/r;return[o+s*c,e+s*a]}function Y(t,n){let o=1-n,e=o*o*o,s=3*o*o*n,r=3*o*n*n,c=n*n*n;return{x:e*t.x0+s*t.cx0+r*t.cx1+c*t.x1,y:e*t.y0+s*t.cy0+r*t.cy1+c*t.y1}}function Ot(t){let n=t[Math.floor(t.length/2)];return n?Y(n,.5):void 0}function Pt(t){let n=1/0,o=1/0,e=-1/0,s=-1/0;for(let r of t)n=Math.min(n,r.x0,r.cx0,r.cx1,r.x1),e=Math.max(e,r.x0,r.cx0,r.cx1,r.x1),o=Math.min(o,r.y0,r.cy0,r.cy1,r.y1),s=Math.max(s,r.y0,r.cy0,r.cy1,r.y1);return{minX:n,minY:o,maxX:e,maxY:s}}function Kt(t,n,o){let e=Y(t,n),s=Y(t,o),r=(o-n)/3,c=vt(t,n),a=vt(t,o);return{x0:e.x,y0:e.y,cx0:e.x+c.x*r,cy0:e.y+c.y*r,cx1:s.x-a.x*r,cy1:s.y-a.y*r,x1:s.x,y1:s.y}}function vt(t,n){let o=1-n,e=3*o*o,s=6*o*n,r=3*n*n;return{x:e*(t.cx0-t.x0)+s*(t.cx1-t.cx0)+r*(t.x1-t.cx1),y:e*(t.cy0-t.y0)+s*(t.cy1-t.cy0)+r*(t.y1-t.cy1)}}var $=32;function Qt(t,n,o,e){let s=[],r=0;return t.forEach((c,a)=>{let i=n[a],u=i/$,d=Y(c,0);for(let l=1;l<=$;l++){let x=Y(c,l/$);if(Math.max(d.x,x.x)+u>=o.minX&&Math.min(d.x,x.x)-u<=o.maxX&&Math.max(d.y,x.y)+u/e>=o.minY&&Math.min(d.y,x.y)-u/e<=o.maxY){let f=r+i*(l-1)/$,h=r+i*l/$,y=s.at(-1);y&&y[1]>=f?y[1]=h:s.push([f,h])}d=x}r+=i}),s}function uo(t,n,o=1,e){let s=t.map(l=>Math.hypot(l.cx0-l.x0,(l.cy0-l.y0)*o)+Math.hypot(l.cx1-l.cx0,(l.cy1-l.cy0)*o)+Math.hypot(l.x1-l.cx1,(l.y1-l.cy1)*o)),r=s.reduce((l,x)=>l+x,0),c=Math.round(r/n),a=Math.max(3,c%2?c:c+1),i=e?Qt(t,s,e,o):void 0,u=0,d=[];for(let l=0;l<a;l+=2){let x=l/a*r,f=(l+1)/a*r;if(i){for(;u<i.length&&i[u][1]<x;)u++;if(u===i.length)break;if(i[u][0]>f)continue}let h=[],y=0;t.forEach((m,b)=>{let p=s[b],M=y+p;p>0&&M>x&&y<f&&h.push(Kt(m,Math.max(0,(x-y)/p),Math.min(1,(f-y)/p))),y=M}),h.length&&d.push(h)}return d}function lo(t,n,o){let e=new Array(t.length);for(let s=0;s<t.length;s++){let r=t[s];e[s]={x0:r.x0+n,y0:r.y0+o,cx0:r.cx0+n,cy0:r.cy0+o,cx1:r.cx1+n,cy1:r.cy1+o,x1:r.x1+n,y1:r.y1+o}}return e}function H(t,n){let o=t.length-1;return n==="end"?{at:t[o],inward:t[o-1]}:{at:t[0],inward:t[1]}}var Zt=.5,tn=80;function D(t){return t.endsWith("-")?"-":"+"}function G(t){let n=(o,e)=>(e??D(o))===D(o);return{from:n(t.from,t.fromStrand)?"end":"start",to:n(t.to,t.toStrand)?"start":"end"}}function wt(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 At(t,n){return Math.max(0,n.min-t,t-n.max)}function _t(t,n,o){let e=At(t[0].x,n),s=At(t[t.length-1].x,n);return e===s?o:e<s?"start":"end"}function nn(t,n){return{from:_t(t,wt(n),"end"),to:_t(n,wt(t),"start")}}var Et=new WeakMap;function on(t,n){let o=Et.get(t);o||(o=new WeakMap,Et.set(t,o));let e=o.get(n);return e||(e=nn(t,n),o.set(n,e)),e}var en=.75,sn=1.15,rn=.35,cn=3*bt;function an(t,n,o,e,s,r){let c=Math.hypot(o-t,e-n),a=c===0?1:(o-t)/c,i=c===0?0:(e-n)/c,u=0,d=1/0,l=-1/0;for(let y of s){let m=y.x-t,b=y.y-n,p=m*-i+b*a;Math.abs(p)>Math.abs(u)&&(u=p);let M=m*a+b*i;d=Math.min(d,M),l=Math.max(l,M)}let x=s.length?l-d:0,f=Math.max(Math.abs(u)*sn/en,x*rn),h=r===void 0?f:Math.min(f,r);return u<0?-h:h}function St({scaleX:t,scaleY:n}){return n/t}var fn=3;function K(t,n,o){let e=n.x-t.x,s=(n.y-t.y)*o,r=Math.hypot(e,s);return r===0?void 0:{x:e/r,y:s/r}}function ho(t,n,o,e){let s=St(e),r=fn/Math.max(e.scaleX,1e-6),c=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 i=0;i<o;i++){let u=(i-(o-1)/2)*r;a.push({x:-c.y*u,y:c.x*u/s})}return a}function Q(t,n){return t.map(o=>({x:o.x,y:o.y*n}))}function un(t,n){for(let o of t)o.y0/=n,o.cy0/=n,o.cy1/=n,o.y1/=n;return t}function Z(t,n,o){let e=0;for(let s=1;s<t.length;s++){let r=t[s-1],c=t[s];e+=Math.hypot((c.x-r.x)*n,(c.y-r.y)*o)}return e}var ln=12,dn=40;function It(t,n){let o=Z(t,n,n);return Math.min(dn,Math.max(ln,o/2))/Math.max(n,Number.EPSILON)}function hn(t){return t.from!==t.to?!1:t.fromStrand&&t.toStrand&&t.fromStrand!==t.toStrand?t.fromStrand==="+"?"end":"start":!0}function Xt(t,n=!1){let o=hn(t);if(!n)return o;let e=G(t);return o===!1?e:e.from===e.to?e.from:!0}function xn(t,n){let{at:o,inward:e}=t,s=e?o.x-e.x:1,r=e?o.y-e.y:0,c=Math.hypot(s,r)||1,a=s/c,i=r/c,u=o.x,d=o.y,l=u+a*n/3,x=d+i*n/3,f=u+a*n,h=d+i*n,y=-i*n/2,m=a*n/2;return[{x0:u,y0:d,cx0:l,cy0:x,cx1:f+y,cy1:h+m,x1:f,y1:h},{x0:f,y0:h,cx0:f-y,cy0:h-m,cx1:l,cy1:x,x1:u,y1:d}]}function tt(t,n,o,e,s=[],r){let c=e.scaleX,a=St(e),i=r??(e.pixelRows?cn:void 0);if(o===!1&&(o=on(t,n)),a!==1)return un(tt(Q(t,a),Q(n,a),o,{scaleX:c,scaleY:c},Q(s,a),i===void 0?void 0:i*a),a);if(typeof o=="string")return xn(H(t,o),It(t,c));let u=o===!0,d=o===!0?{from:"end",to:"start"}:o,l=H(t,d.from),x=H(n,d.to),f=l.at,h=x.at,y=f.x,m=f.y,b=h.x,p=h.y;if(u){let M=1,A=0;if(l.inward){let P=f.x-l.inward.x,S=f.y-l.inward.y,N=Math.hypot(P,S);N>0&&(M=P/N,A=S/N)}let g=It(t,c),_=-A,w=M,I=(f.x+h.x)/2+_*g,E=(f.y+h.y)/2+w*g,v=y+M*g,X=m+A*g,O=b-M*g,L=p-A*g;return[{x0:y,y0:m,cx0:v,cy0:X,cx1:v+_*g,cy1:X+w*g,x1:I,y1:E},{x0:I,y0:E,cx0:O+_*g,cy0:L+w*g,cx1:O,cy1:L,x1:b,y1:p}]}else{let M=l.inward??{x:f.x-(h.x-f.x),y:f.y-(h.y-f.y)},A=x.inward??{x:h.x-(f.x-h.x),y:h.y-(f.y-h.y)},g=Math.hypot(b-y,p-m),_=(ct,at,qt,Jt)=>{let it=at.x-ct.x,ft=at.y-ct.y,ut=Math.hypot(it,ft),Ut=ut===0?0:(qt*it+Jt*ft)/ut;return Math.max(0,Math.min(g*Zt,tn,Ut*.5))},w=h.x-f.x,I=h.y-f.y,[E,v]=gt(M.x,M.y,f.x,f.y,_(M,f,w,I)),[X,O]=gt(A.x,A.y,h.x,h.y,_(A,h,-w,-I)),L=s.length?an(y,m,b,p,s,i):0,P=g===0?1:g,S=(b-y)/P,N=(p-m)/P,k=-N*L,T=S*L,W=S*Math.abs(L),rt=N*Math.abs(L);return[{x0:y,y0:m,cx0:E+k-W,cy0:v+T-rt,cx1:X+k+W,cy1:O+T+rt,x1:b,y1:p}]}}function Lt(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 Nt(t,n,o,e){let s=H(t,e?.from??Lt(t,o[0])),r=H(n,e?.to??Lt(n,o.at(-1))),c=[s.at,...o,r.at],a=u=>{let d=c[u],l=f=>Math.hypot(f.x-d.x,f.y-d.y),x=(f,h)=>{let y=f?l(f):0,m=l(h);return y===0?{x:h.x-d.x,y:h.y-d.y}:{x:(d.x-f.x)/y*m,y:(d.y-f.y)/y*m}};if(u===0)return x(s.inward,c[1]);if(u===c.length-1){let f=x(r.inward,c[u-1]);return{x:-f.x,y:-f.y}}return{x:(c[u+1].x-c[u-1].x)/2,y:(c[u+1].y-c[u-1].y)/2}},i=[];for(let u=0;u<c.length-1;u++){let d=c[u],l=c[u+1],x=a(u),f=a(u+1);i.push({x0:d.x,y0:d.y,cx0:d.x+x.x/3,cy0:d.y+x.y/3,cx1:l.x-f.x/3,cy1:l.y-f.y/3,x1:l.x,y1:l.y})}return i}function nt(){let t=new WeakMap;return(n,o,e)=>{let s=t.get(n);if(s?.deps.length===o.length&&s.deps.every((c,a)=>Object.is(c,o[a])))return s.value;let r=e();return t.set(n,{deps:o,value:r}),r}}var Ct=11,yn=6.2,V=4;function ot(t){return t.length*yn+V*2}function pn(t,n){return t.x0<n.x1&&t.x1>n.x0&&t.y0<n.y1&&t.y1>n.y0}function Bt(t,n){return t.x1<=0||t.x0>=n.width||t.y1<=0||t.y0>=n.height}function mn(t,n){return t.x0>=0&&t.x1<=n.width&&t.y0>=0&&t.y1<=n.height}function Tt(t,n=[]){let o=[...n];return e=>Bt(e,t)||o.some(s=>pn(s,e))?!1:(o.push(e),!0)}function po(t,n,o){let e=[],s=Ct+V*2,r=(c,a)=>{let i=ot(a),u=c.y>n.height/2?-1:1;for(let d=0;d<=(c.stack??0);d++){let l=c.y+u*d*s,x={x0:c.x-i/2,x1:c.x+i/2,y0:l-Ct-V,y1:l+V};if(Bt(x,n))return;if(mn(x,n)&&(c.fits?.(x)??!0)&&o(x))return{...c,text:a,y:l,w:i}}};for(let c of t){let a=r(c,c.text)??(c.fallback===void 0?void 0:r(c,c.fallback));a&&e.push(a)}return e}function kt(t){return t==="+"?"-":"+"}function vo(t,n=new Set){let o=t.edges.map(G),e=new Map,s=(f,h,y)=>{lt(e,`${f}|${h}`,y)};t.edges.forEach((f,h)=>{s(f.from,o[h].from,h),s(f.to,o[h].to,h)});let r=f=>{let h=e.get(`${f}|end`);if(h?.length!==1)return;let y=h[0],m=t.edges[y];return m.from===f&&m.to!==f&&!n.has(f)&&!n.has(m.to)&&o[y].from==="end"&&o[y].to==="start"&&e.get(`${m.to}|start`)?.length===1?y:void 0},c=new Set,a=new Map,i=new Map;for(let f of t.nodes){let h=e.get(`${f.id}|start`),y=h?.length===1?t.edges[h[0]].from:void 0;if(a.has(f.id)||y!==void 0&&r(y)===h[0])continue;let m=[f.id];for(;;){let b=r(m.at(-1)),p=b===void 0?void 0:t.edges[b].to;if(p===void 0||a.has(p))break;c.add(b),m.push(p)}for(let b of m)a.set(b,f.id);m.length>1&&i.set(f.id,m)}for(let f of t.nodes)a.has(f.id)||a.set(f.id,f.id);let u=new Map(t.nodes.map(f=>[f.id,f])),d=[];for(let f of t.nodes){if(a.get(f.id)!==f.id)continue;let h=i.get(f.id);if(!h){d.push(f);continue}let y=h.map(p=>u.get(p)),m=y.filter(C),b=m.length?m.reduce((p,M)=>p.stable.start<=M.stable.start?p:M):y[0];d.push({id:f.id,name:f.name,length:y.reduce((p,M)=>p+M.length,0),depth:f.depth,stable:b.stable})}let l=new Set,x=[];return t.edges.forEach((f,h)=>{let y=a.get(f.from),m=a.get(f.to),b=o[h],p=`${y}|${b.from}>${m}|${b.to}`;c.has(h)||l.has(p)||(l.add(p),x.push({from:y,to:m,...b.from==="start"?{fromStrand:kt(D(y))}:{},...b.to==="end"?{toStrand:kt(D(m))}:{}}))}),{graph:{...t,nodes:d,edges:x,paths:void 0,pathVisits:void 0},runs:i}}function wo(t,n,o){let e={...t};for(let[s,r]of n){let c=t[s];if(!c?.length)continue;delete e[s];let a=st(c),i=a.at(-1),u=r.map(x=>Math.max(o(x),0)),d=u.reduce((x,f)=>x+f,0),l=0;r.forEach((x,f)=>{let h=d?u[f]/d*i:i/r.length,y=f===r.length-1?i:l+h;e[x]=$t(c,a,l,y),l=y})}return e}function Ao(t,n,o){if(t.length===0)return[];let e=st(t),s=e.at(-1);return $t(t,e,n*s,o*s)}function Wt(t){let n=st(t);return et(t,n,n.at(-1)/2)}function st(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 Rt(t,n){let o=0,e=t.length;for(;o<e;){let s=o+e>>1;t[s]<n?o=s+1:e=s}return o}function et(t,n,o){if(o<=0)return{...t[0]};let e=Rt(n,o);if(e>=n.length)return{...t.at(-1)};let s=n[e]-n[e-1],r=s>0?(o-n[e-1])/s:0,c=t[e-1],a=t[e];return{x:c.x+(a.x-c.x)*r,y:c.y+(a.y-c.y)*r}}function $t(t,n,o,e){let s=[et(t,n,o)];for(let r=Rt(n,o);r<t.length&&n[r]<e;r++)n[r]>o&&s.push({...t[r]});return s.push(et(t,n,e)),s}function Oo(t,n){let o=new Set(t.nodes.filter(i=>C(i)&&U(i,n)).map(i=>i.id)),e=t.paths??[];if(o.size===0||e.length===0)return t;let s=e.map(i=>{let u=-1,d=-1;return i.nodeIds.forEach((l,x)=>{o.has(l)&&(u<0&&(u=x),d=x)}),u<0?void 0:{first:u,last:d}});if(s.every((i,u)=>i?.first===0&&i.last===e[u].nodeIds.length-1))return t;let r=new Set,c=[],a=new Map;return e.forEach((i,u)=>{let d=s[u];if(d){let l=i.nodeIds.slice(d.first,d.last+1);for(let x of l)r.add(x);c.push({...i,nodeIds:l}),a.set(i.name,{first:d.first,nodeIds:l})}}),{...t,nodes:t.nodes.filter(i=>r.has(i.id)),edges:t.edges.filter(i=>r.has(i.from)&&r.has(i.to)),paths:c,pathVisits:t.pathVisits&&Mn(t.pathVisits,e,s,new Map(t.nodes.map(i=>[i.id,i.name]))),anchorPaths:mt(t,a)}}function Mn(t,n,o,e){let s=t.replay(),r=new pt;return n.forEach((c,a)=>{let i=t.pathIndex(R(c.name).name),u=o[a];c.nodeIds.forEach((d,l)=>{let x=e.get(d)??d,f=s(t.slot(x),i);f>=0&&u&&l>=u.first&&l<=u.last&&r.add(x,t.paths[i],t.samples[i],t.start[f],t.reversed[f]===1)})}),r.build()}function Po(t,n,o){let e=t.nodes.map(s=>{if(!C(s))return s;let r=s.stable.start,c=r+s.length,[a,i]=U(s,n)?[Math.max(r,n.start),Math.min(c,n.end)]:c<=n.start?[Math.max(r,c-o),c]:[r,Math.min(c,r+o)];return a===r&&i===c?s:{...s,length:i-a,stable:{...s.stable,start:a},unclipped:{start:r,length:s.length}}});return e.some((s,r)=>s!==t.nodes[r])?{...t,nodes:e}:t}function Ht(t){return t.nodes.some(n=>n.unclipped)?{...t,nodes:t.nodes.map(({unclipped:n,...o})=>n&&o.stable?{...o,length:n.length,stable:{...o.stable,start:n.start}}:o)}:t}var bn=1;function gn(t,n){return n.flatMap(o=>t[o]??[])}function Dt(t,n,o,e,s,r){let c=t[n.from],a=t[n.to];if(!(!c?.length||!a?.length))return s?Nt(c,a,s,r?G(n):void 0):tt(c,a,Xt(n,r),o,e?gn(t,e):[])}function vn(t){let n=dt(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 wn(t,n,o){let e=[];if(t)for(let s=xt(t,n);s<t.length;s++){let r=t[s];if(r.stable.start>=o)break;r.stable.start+r.length<=o&&e.push(r.id)}return e}function An(t,n,o,e){let{fromStrand:s,toStrand:r}=t;if(s===void 0||r===void 0)return!0;let c=s===(n.stable.strand??"+"),a=r===(o.stable.strand??"+");return e?c&&a:!c&&!a}function _n(t,n,o,e){let s;for(let r of e(n))for(let c of e(o)){let a=r<=c,i=a?{start:r+n.length,end:c}:{start:c+o.length,end:r};An(t,n,o,a)&&(!s||Math.abs(i.end-i.start)<Math.abs(s.end-s.start))&&(s=i)}return s}var En=.01;function In(t,n){let o=new Map;for(let[e,s]of t){let r=s.flatMap(c=>{let a=n(c);return a.slice(1).map((i,u)=>({at:a[u],copy:i-a[u]}))});r.length&&o.set(e,r.sort((c,a)=>c.at-a.at))}return o}function Ln(t,n,o){if(!t)return!1;let e=ht(t.length,r=>t[r].at<n),s=[t[e-1],t[e]].filter(r=>r!==void 0).sort((r,c)=>Math.abs(r.at-n)-Math.abs(c.at-n))[0];return s!==void 0&&Math.abs(s.at-n)<=s.copy&&Math.abs(o-s.copy)<=s.copy*En}function Wo(t){let n=Ht(t),o=new Map(n.nodes.map(a=>[a.id,a])),e=vn(n),s=Mt(n),r=In(e,s),c=[];for(let a=0;a<n.edges.length;a++){let i=n.edges[a],u=o.get(i.from),d=o.get(i.to);if(u!==void 0&&d!==void 0&&C(u)&&C(d)&&u.stable.refName===d.stable.refName){let l=_n(i,u,d,s),x=u.stable.refName,f=l?l.end-l.start:0;if(l&&f>=bn&&!Ln(r.get(x),l.start,f)){let{start:h,end:y}=l;c.push({edgeIndex:a,from:i.from,to:i.to,...i.fromStrand?{fromStrand:i.fromStrand}:{},...i.toStrand?{toStrand:i.toStrand}:{},refName:x,start:h,end:y,bp:f,bypassed:wn(e.get(x),h,y)})}}}return c}function On(t,n){let o=new Map,e=c=>{let a=c;for(;o.has(a);)a=o.get(a);return a!==c&&o.set(c,a),a},s=(c,a)=>{let[i,u]=[e(c),e(a)];return i!==u&&o.set(i,u),i!==u},r=new Set(n.map(c=>c.edgeIndex));return t.edges.forEach((c,a)=>{r.has(a)||s(c.from,c.to)}),new Set(n.filter(c=>!s(c.from,c.to)).map(c=>c.edgeIndex))}var Yt=new WeakMap;function Ro(t,n,o=!0){let e=Yt.get(n);e||(e=new Map,Yt.set(n,e));let s=e.get(o);if(!s){let r=o?new Set:On(t,n);s={shown:n.filter(c=>!r.has(c.edgeIndex)),bypassed:new Map(n.map(c=>[c.edgeIndex,c.bypassed])),hidden:r},e.set(o,s)}return s}var Pn=26,Sn=4e4,Xn=8,Nn=8,Cn=5.7,Bn=6,Tn=13,F=3,j=2;function J(t){return(t.length*Cn+Bn+F)/2}var B=(Tn+F)/2,kn=J("1 bp");function z(t,n,o){return{x0:n-t,x1:n+t,y0:o-B,y1:o+B}}function Vo(t,n){return{x0:6,x1:6+ot(t)+F,y0:n-8-F/2,y1:n+8+F/2}}function q(t,n,o){return o<n?t:Math.min(Math.max(t,n),o)}function Vt(t){return String(t).replace(/\B(?=(\d{3})+$)/g,",")}function jt(t){let[n,o]=t>=999500?[t/1e6,"Mb"]:t>=1e3?[t/1e3,"kb"]:[];return n===void 0?`${t} bp`:`${+n.toFixed(n>=100?0:1)} ${o}`}function Gt(t){return`${jt(t)} del`}function Wn(t,n,o,e){let s=t[0],r=t[t.length-1],c=(n.x-(s.x0+r.x1)/2)*o,a=(n.y-(s.y0+r.y1)/2)*e,i=Math.hypot(c,a);return i===0?{x:0,y:-1}:{x:c/i,y:a/i}}function Rn(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 Hn(t,n){let o=1/0,e=1/0,s=-1/0,r=-1/0;for(let c of t)for(let a of n[c]??[])o=Math.min(o,a.x),s=Math.max(s,a.x),e=Math.min(e,a.y),r=Math.max(r,a.y);return o===1/0?void 0:{minX:o,minY:e,maxX:s,maxY:r}}var Yn=nt();function Dn(t,n){return Yn(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=nt();function Fn(t,n,o,e,s,r){let{scaleX:c,scaleY:a}=o;return Gn(t,[n,s,r,c,a,e],()=>{let i=[];for(let u of[...n].sort((d,l)=>l.bp-d.bp)){let d=Dt(t,u,o,u.bypassed,s?.[u.edgeIndex],r),l=d?Ot(d):void 0;if(d&&l){let{minX:x,minY:f,maxX:h,maxY:y}=Pt(d);i.push({deletion:u,curves:d,apex:l,extent:Math.max((h-x)*c,(y-f)*a)})}}return i})}function Vn({nodePositions:t,nodeLengths:n,deletions:o,deletionRoutes:e,stranded:s=!1,alleleDeletions:r,axis:c,translateX:a,translateY:i,width:u,height:d,version:l=0}){let{scaleX:x,scaleY:f}=c,h=[],y=[];for(let{deletion:p,curves:M,apex:A,extent:g}of Fn(t,o,c,l,e,s))if(g>=Pn){let _=Gt(p.bp),w=J(_),I=z(w,0,0),E=A.x*x+a,v=A.y*f+i;if(E<0||E>u||v<0||v>d)continue;let X=g>=w*2/j,O=Wn(M,A,x,f),L=Rn(I,O)+Nn,P=X?E:q(E+O.x*L,w,u-w),S=X?v:q(v+O.y*L,B,d-B),N=Math.hypot(P-E,S-v),k;if(N>0){let T={x:(P-E)/N,y:(S-v)/N},W=$n(I,T);k={arcX:E,arcY:v,labelX:P-T.x*W,labelY:S-T.y*W}}h.push({label:{key:`del:${p.edgeIndex}`,text:_,x:P,y:S,kind:"deletion",leader:k},box:z(w,P,S)})}let m=new Set,b=[...r??[]].sort((p,M)=>M.bp-p.bp);for(let p of b){let M=Hn(p.nodeIds,t);if(!M)continue;let A=Math.max(M.minX*x+a,0),g=Math.min(M.maxX*x+a,u),_=Math.max(M.minY*f+i,0),w=Math.min(M.maxY*f+i,d);if(g<A||w<_)continue;let I=Math.max(g-A,w-_),E=Gt(p.bp),v=J(E);if(I>=v*2/j){for(let L of p.nodeIds)m.add(L);let X=q((A+g)/2,v,u-v),O=q((_+w)/2,B,d-B);h.push({label:{key:`alleledel:${p.nodeIds.join(",")}`,text:E,x:X,y:O,kind:"deletion"},box:z(v,X,O)})}}for(let[p,M]of Dn(t,n)){if(m.has(p))continue;let{x:A,y:g}=Wt(M),_=g*f+i;if(_+B<=0||_-B>=d)continue;let w=Z(M,x,f);if(w<kn*2/j)continue;let I=jt(n.get(p)),E=J(I);if(w>=E*2/j){let v=A*x+a;y.push({label:{key:`node:${p}`,text:I,x:v,y:_,kind:"node"},box:z(E,v,_)})}}return{deletions:h,nodes:y}}function jn(t,n){return Math.max(Xn,Math.floor(t*n/Sn))}function Ft(t,n,o=1/0){let e=[];for(let{label:s,box:r}of t){if(e.length>=o)break;n(r)&&e.push(s)}return e}function jo({reserved:t,take:n,...o}){n??=Tt(o,t);let{deletions:e,nodes:s}=Vn(o);return[...Ft(e,n),...Ft(s,n,jn(o.width,o.height))]}function Ko(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 zn(t,n){return t*360/n}var qn=.7,Jn=.5,Un=16;function Qo(t){return t>0&&t<=Un}function Kn(t,n){return`hsl(${zn(t,n)}, ${qn*100}%, ${Jn*100}%)`}function Zo(t,n){return`hsl(0, 0%, ${n>1?25+45*t/(n-1):45}%)`}function Qn(t){let n=R(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 Zn(t,n){let{start:o}=R(t);return n.map(e=>`${e} @${Vt(o)}`)}function te(t,n){let o=new Map;t.forEach((i,u)=>{o.has(i.name)||o.set(i.name,u)});let e=[...o].map(([i,u])=>({name:i,i:u})),s=e.map(i=>Qn(i.name)),r=[0,1,2].flatMap(i=>[e.map((u,d)=>s[d][i]),e.map((u,d)=>Zn(u.name,s[d])[i])]),a=r.find(i=>new Set(i).size===e.length)??r.at(-1);return e.map(({name:i,i:u},d)=>({name:i,label:a[d],color:n?.[u]??Kn(u,t.length)}))}function ne(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 ee=[{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."}],to=.3,zt=3;function no(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 oo(t,n){return!(n>0)||!(t.depth>0)?1:Math.min(zt,Math.max(to,Math.sqrt(t.depth/n)))}function eo(t,n,o,e){return n*(o==="depth"?oo(t,e):1)}function so(t,n){return t*(n==="depth"?zt:1)}var ro=4;function co(t,n){return Math.max(t/n,ro)}function se(t,n,o,e,s=0){let r=t?no(t):0,c=a=>s>0?co(a,s)*s/2:a/2;return{maxHalfWidthPx:c(so(o,e)),halfWidthPx:a=>{let i=n?.get(a);return c(i?eo(i,o,e,r):o)}}}export{bt as a,fo as b,Pt as c,uo as d,lo as e,D as f,G as g,St as h,ho as i,Z as j,nt as k,Ct as l,yn as m,V as n,ot as o,Tt as p,po as q,vo as r,wo as s,Ao as t,Oo as u,Po as v,Dt as w,Wo as x,Ro as y,Vo as z,Vt as A,jt as B,jo as C,Ko as D,zn as E,qn as F,Jn as G,Un as H,Qo as I,Kn as J,Zo as K,te as L,ne as M,ee as N,no as O,eo as P,co as Q,se as R};
2
- //# sourceMappingURL=chunk-Q3BXNKEL.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-CPMHA4W5.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-VACK24HF.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HMXCN6PG.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-AB35TJST.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-2VMKQKVO.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-TLWXLNLY.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-5NZRT7GL.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-FU57ZNRQ.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-3UGWYQNY.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ZANALBSX.js"],
4
- "sourcesContent": ["// src/layout/rowSpacing.ts\nvar ROW_HEIGHT_PX = 20;\n\nexport {\n ROW_HEIGHT_PX\n};\n", "import {\n ROW_HEIGHT_PX\n} from \"./chunk-CPMHA4W5.js\";\n\n// src/util/geometry.ts\nfunction svgPath(points) {\n const round = (v) => Math.round(v * 100) / 100;\n return points.map((p, i) => `${i ? \"L\" : \"M\"}${round(p.x)},${round(p.y)}`).join(\"\");\n}\nfunction projectLine(x1, y1, x2, y2, distance) {\n const d = Math.hypot(y2 - y1, x2 - x1);\n if (d === 0) {\n return [x2, y2];\n }\n const vx = (x2 - x1) / d;\n const vy = (y2 - y1) / d;\n return [x2 + distance * vx, y2 + distance * vy];\n}\nfunction curvePointAt(c, t) {\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n return {\n x: a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1,\n y: a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1\n };\n}\nfunction curveMidpoint(curves) {\n const mid = curves[Math.floor(curves.length / 2)];\n return mid ? curvePointAt(mid, 0.5) : void 0;\n}\nfunction curveBounds(curves) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const c of curves) {\n minX = Math.min(minX, c.x0, c.cx0, c.cx1, c.x1);\n maxX = Math.max(maxX, c.x0, c.cx0, c.cx1, c.x1);\n minY = Math.min(minY, c.y0, c.cy0, c.cy1, c.y1);\n maxY = Math.max(maxY, c.y0, c.cy0, c.cy1, c.y1);\n }\n return { minX, minY, maxX, maxY };\n}\nfunction subCurve(c, t0, t1) {\n const p0 = curvePointAt(c, t0);\n const p1 = curvePointAt(c, t1);\n const dt = (t1 - t0) / 3;\n const d0 = curveTangentAt(c, t0);\n const d1 = curveTangentAt(c, t1);\n return {\n x0: p0.x,\n y0: p0.y,\n cx0: p0.x + d0.x * dt,\n cy0: p0.y + d0.y * dt,\n cx1: p1.x - d1.x * dt,\n cy1: p1.y - d1.y * dt,\n x1: p1.x,\n y1: p1.y\n };\n}\nfunction curveTangentAt(c, t) {\n const u = 1 - t;\n const a = 3 * u * u;\n const b = 6 * u * t;\n const d = 3 * t * t;\n return {\n x: a * (c.cx0 - c.x0) + b * (c.cx1 - c.cx0) + d * (c.x1 - c.cx1),\n y: a * (c.cy0 - c.y0) + b * (c.cy1 - c.cy0) + d * (c.y1 - c.cy1)\n };\n}\nvar VISIBLE_SAMPLES = 32;\nfunction visibleStretches(curves, lengths, bounds, yToX) {\n const stretches = [];\n let start = 0;\n curves.forEach((c, k) => {\n const length = lengths[k];\n const pad = length / VISIBLE_SAMPLES;\n let last = curvePointAt(c, 0);\n for (let i = 1; i <= VISIBLE_SAMPLES; i++) {\n const next = curvePointAt(c, i / VISIBLE_SAMPLES);\n if (Math.max(last.x, next.x) + pad >= bounds.minX && Math.min(last.x, next.x) - pad <= bounds.maxX && Math.max(last.y, next.y) + pad / yToX >= bounds.minY && Math.min(last.y, next.y) - pad / yToX <= bounds.maxY) {\n const from = start + length * (i - 1) / VISIBLE_SAMPLES;\n const to = start + length * i / VISIBLE_SAMPLES;\n const prev = stretches.at(-1);\n if (prev && prev[1] >= from) {\n prev[1] = to;\n } else {\n stretches.push([from, to]);\n }\n }\n last = next;\n }\n start += length;\n });\n return stretches;\n}\nfunction dashCurves(curves, dashWorld, yToX = 1, bounds) {\n const lengths = curves.map(\n (c) => Math.hypot(c.cx0 - c.x0, (c.cy0 - c.y0) * yToX) + Math.hypot(c.cx1 - c.cx0, (c.cy1 - c.cy0) * yToX) + Math.hypot(c.x1 - c.cx1, (c.y1 - c.cy1) * yToX)\n );\n const total = lengths.reduce((a, b) => a + b, 0);\n const periods = Math.round(total / dashWorld);\n const spans = Math.max(3, periods % 2 ? periods : periods + 1);\n const stretches = bounds ? visibleStretches(curves, lengths, bounds, yToX) : void 0;\n let seen = 0;\n const out = [];\n for (let i = 0; i < spans; i += 2) {\n const from = i / spans * total;\n const to = (i + 1) / spans * total;\n if (stretches) {\n while (seen < stretches.length && stretches[seen][1] < from) {\n seen++;\n }\n if (seen === stretches.length) {\n break;\n }\n if (stretches[seen][0] > to) {\n continue;\n }\n }\n const dash = [];\n let start = 0;\n curves.forEach((c, k) => {\n const length = lengths[k];\n const end = start + length;\n if (length > 0 && end > from && start < to) {\n dash.push(\n subCurve(\n c,\n Math.max(0, (from - start) / length),\n Math.min(1, (to - start) / length)\n )\n );\n }\n start = end;\n });\n if (dash.length) {\n out.push(dash);\n }\n }\n return out;\n}\nfunction translateCurves(curves, dx, dy) {\n const out = new Array(curves.length);\n for (let i = 0; i < curves.length; i++) {\n const c = curves[i];\n out[i] = {\n x0: c.x0 + dx,\n y0: c.y0 + dy,\n cx0: c.cx0 + dx,\n cy0: c.cy0 + dy,\n cx1: c.cx1 + dx,\n cy1: c.cy1 + dy,\n x1: c.x1 + dx,\n y1: c.y1 + dy\n };\n }\n return out;\n}\nfunction attachment(segments, side) {\n const last = segments.length - 1;\n return side === \"end\" ? { at: segments[last], inward: segments[last - 1] } : { at: segments[0], inward: segments[1] };\n}\nvar TANGENT_SPAN_FACTOR = 0.5;\nvar MAX_TANGENT = 80;\nfunction ownStrand(id) {\n return id.endsWith(\"-\") ? \"-\" : \"+\";\n}\nfunction strandSides(edge) {\n const own = (id, strand) => (strand ?? ownStrand(id)) === ownStrand(id);\n return {\n from: own(edge.from, edge.fromStrand) ? \"end\" : \"start\",\n to: own(edge.to, edge.toStrand) ? \"start\" : \"end\"\n };\n}\nfunction spanOf(segments) {\n let min = Infinity;\n let max = -Infinity;\n for (const s of segments) {\n min = Math.min(min, s.x);\n max = Math.max(max, s.x);\n }\n return { min, max };\n}\nfunction distanceToSpan(x, span) {\n return Math.max(0, span.min - x, x - span.max);\n}\nfunction facingSide(segments, other, tieBreak) {\n const startGap = distanceToSpan(segments[0].x, other);\n const endGap = distanceToSpan(segments[segments.length - 1].x, other);\n return startGap === endGap ? tieBreak : startGap < endGap ? \"start\" : \"end\";\n}\nfunction facingSides(fromSegments, toSegments) {\n return {\n from: facingSide(fromSegments, spanOf(toSegments), \"end\"),\n to: facingSide(toSegments, spanOf(fromSegments), \"start\")\n };\n}\nvar laidSides = /* @__PURE__ */ new WeakMap();\nfunction heldFacingSides(fromSegments, toSegments) {\n let byTo = laidSides.get(fromSegments);\n if (!byTo) {\n byTo = /* @__PURE__ */ new WeakMap();\n laidSides.set(fromSegments, byTo);\n }\n let sides = byTo.get(toSegments);\n if (!sides) {\n sides = facingSides(fromSegments, toSegments);\n byTo.set(toSegments, sides);\n }\n return sides;\n}\nvar APEX_FRACTION = 0.75;\nvar BOW_CLEARANCE = 1.15;\nvar ALONG_FRACTION = 0.35;\nvar MAX_ROW_BOW_PX = 3 * ROW_HEIGHT_PX;\nfunction bowAround(p1x, p1y, p2x, p2y, toward, maxBow) {\n const chord = Math.hypot(p2x - p1x, p2y - p1y);\n const ux = chord === 0 ? 1 : (p2x - p1x) / chord;\n const uy = chord === 0 ? 0 : (p2y - p1y) / chord;\n let reach = 0;\n let minAlong = Infinity;\n let maxAlong = -Infinity;\n for (const p of toward) {\n const dx = p.x - p1x;\n const dy = p.y - p1y;\n const perp = dx * -uy + dy * ux;\n if (Math.abs(perp) > Math.abs(reach)) {\n reach = perp;\n }\n const along = dx * ux + dy * uy;\n minAlong = Math.min(minAlong, along);\n maxAlong = Math.max(maxAlong, along);\n }\n const span = toward.length ? maxAlong - minAlong : 0;\n const uncapped = Math.max(\n Math.abs(reach) * BOW_CLEARANCE / APEX_FRACTION,\n span * ALONG_FRACTION\n );\n const size = maxBow === void 0 ? uncapped : Math.min(uncapped, maxBow);\n return reach < 0 ? -size : size;\n}\nfunction yToXOf({ scaleX, scaleY }) {\n return scaleY / scaleX;\n}\nvar PATH_RIBBON_SPACING_PX = 3;\nfunction drawnDirection(a, b, yToX) {\n const dx = b.x - a.x;\n const dy = (b.y - a.y) * yToX;\n const len = Math.hypot(dx, dy);\n return len === 0 ? void 0 : { x: dx / len, y: dy / len };\n}\nfunction pathRibbonOffsets(fromSegments, toSegments, count, axis) {\n const yToX = yToXOf(axis);\n const spacing = PATH_RIBBON_SPACING_PX / Math.max(axis.scaleX, 1e-6);\n const dir = drawnDirection(\n fromSegments[fromSegments.length - 1],\n toSegments[0],\n yToX\n ) ?? drawnDirection(fromSegments[0], fromSegments.at(-1), yToX) ?? drawnDirection(toSegments[0], toSegments.at(-1), yToX) ?? { x: 1, y: 0 };\n const offsets = [];\n for (let i = 0; i < count; i++) {\n const distance = (i - (count - 1) / 2) * spacing;\n offsets.push({ x: -dir.y * distance, y: dir.x * distance / yToX });\n }\n return offsets;\n}\nfunction scaleYOf(points, yToX) {\n return points.map((p) => ({ x: p.x, y: p.y * yToX }));\n}\nfunction unscaleYOf(curves, yToX) {\n for (const c of curves) {\n c.y0 /= yToX;\n c.cy0 /= yToX;\n c.cy1 /= yToX;\n c.y1 /= yToX;\n }\n return curves;\n}\nfunction polylinePx(points, scaleX, scaleY) {\n let total = 0;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1];\n const b = points[i];\n total += Math.hypot((b.x - a.x) * scaleX, (b.y - a.y) * scaleY);\n }\n return total;\n}\nvar SELF_LOOP_MIN_PX = 12;\nvar SELF_LOOP_MAX_PX = 40;\nfunction selfLoopReach(segments, scale) {\n const nodePx = polylinePx(segments, scale, scale);\n const reachPx = Math.min(\n SELF_LOOP_MAX_PX,\n Math.max(SELF_LOOP_MIN_PX, nodePx / 2)\n );\n return reachPx / Math.max(scale, Number.EPSILON);\n}\nfunction selfLinkOf(edge) {\n if (edge.from !== edge.to) {\n return false;\n }\n return edge.fromStrand && edge.toStrand && edge.fromStrand !== edge.toStrand ? edge.fromStrand === \"+\" ? \"end\" : \"start\" : true;\n}\nfunction edgeJoinOf(edge, stranded = false) {\n const self = selfLinkOf(edge);\n if (!stranded) {\n return self;\n }\n const sides = strandSides(edge);\n return self === false ? sides : sides.from === sides.to ? sides.from : true;\n}\nfunction hairpinCurves(attach, reach) {\n const { at, inward } = attach;\n const dx = inward ? at.x - inward.x : 1;\n const dy = inward ? at.y - inward.y : 0;\n const len = Math.hypot(dx, dy) || 1;\n const ux = dx / len;\n const uy = dy / len;\n const px = at.x;\n const py = at.y;\n const nearX = px + ux * reach / 3;\n const nearY = py + uy * reach / 3;\n const apexX = px + ux * reach;\n const apexY = py + uy * reach;\n const sideX = -uy * reach / 2;\n const sideY = ux * reach / 2;\n return [\n {\n x0: px,\n y0: py,\n cx0: nearX,\n cy0: nearY,\n cx1: apexX + sideX,\n cy1: apexY + sideY,\n x1: apexX,\n y1: apexY\n },\n {\n x0: apexX,\n y0: apexY,\n cx0: apexX - sideX,\n cy0: apexY - sideY,\n cx1: nearX,\n cy1: nearY,\n x1: px,\n y1: py\n }\n ];\n}\nfunction computeEdgeCurves(fromSegments, toSegments, join, axis, bypassed = [], maxBowIn) {\n const scale = axis.scaleX;\n const yToX = yToXOf(axis);\n const maxBow = maxBowIn ?? (axis.pixelRows ? MAX_ROW_BOW_PX : void 0);\n if (join === false) {\n join = heldFacingSides(fromSegments, toSegments);\n }\n if (yToX !== 1) {\n return unscaleYOf(\n computeEdgeCurves(\n scaleYOf(fromSegments, yToX),\n scaleYOf(toSegments, yToX),\n join,\n { scaleX: scale, scaleY: scale },\n scaleYOf(bypassed, yToX),\n // the cap is a y measure and the body works in x units, so it converts\n // with everything else that crosses this boundary\n maxBow === void 0 ? void 0 : maxBow * yToX\n ),\n yToX\n );\n }\n if (typeof join === \"string\") {\n return hairpinCurves(\n attachment(fromSegments, join),\n selfLoopReach(fromSegments, scale)\n );\n }\n const loop = join === true;\n const sides = join === true ? { from: \"end\", to: \"start\" } : join;\n const fromAttach = attachment(fromSegments, sides.from);\n const toAttach = attachment(toSegments, sides.to);\n const fromEnd = fromAttach.at;\n const toStart = toAttach.at;\n const p1x = fromEnd.x;\n const p1y = fromEnd.y;\n const p2x = toStart.x;\n const p2y = toStart.y;\n if (loop) {\n let segDirX = 1;\n let segDirY = 0;\n if (fromAttach.inward) {\n const dx = fromEnd.x - fromAttach.inward.x;\n const dy = fromEnd.y - fromAttach.inward.y;\n const len = Math.hypot(dx, dy);\n if (len > 0) {\n segDirX = dx / len;\n segDirY = dy / len;\n }\n }\n const ext = selfLoopReach(fromSegments, scale);\n const perpX = -segDirY;\n const perpY = segDirX;\n const midX = (fromEnd.x + toStart.x) / 2 + perpX * ext;\n const midY = (fromEnd.y + toStart.y) / 2 + perpY * ext;\n const cp1x = p1x + segDirX * ext;\n const cp1y = p1y + segDirY * ext;\n const cp2x = p2x - segDirX * ext;\n const cp2y = p2y - segDirY * ext;\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cp1x,\n cy0: cp1y,\n cx1: cp1x + perpX * ext,\n cy1: cp1y + perpY * ext,\n x1: midX,\n y1: midY\n },\n {\n x0: midX,\n y0: midY,\n cx0: cp2x + perpX * ext,\n cy0: cp2y + perpY * ext,\n cx1: cp2x,\n cy1: cp2y,\n x1: p2x,\n y1: p2y\n }\n ];\n } else {\n const fromPrev = fromAttach.inward ?? {\n x: fromEnd.x - (toStart.x - fromEnd.x),\n y: fromEnd.y - (toStart.y - fromEnd.y)\n };\n const toNext = toAttach.inward ?? {\n x: toStart.x - (fromEnd.x - toStart.x),\n y: toStart.y - (fromEnd.y - toStart.y)\n };\n const dist = Math.hypot(p2x - p1x, p2y - p1y);\n const tangentProj = (prev, at, towardX, towardY) => {\n const dx = at.x - prev.x;\n const dy = at.y - prev.y;\n const len = Math.hypot(dx, dy);\n const along = len === 0 ? 0 : (towardX * dx + towardY * dy) / len;\n return Math.max(\n 0,\n Math.min(dist * TANGENT_SPAN_FACTOR, MAX_TANGENT, along * 0.5)\n );\n };\n const towardToX = toStart.x - fromEnd.x;\n const towardToY = toStart.y - fromEnd.y;\n const [cx1, cy1] = projectLine(\n fromPrev.x,\n fromPrev.y,\n fromEnd.x,\n fromEnd.y,\n tangentProj(fromPrev, fromEnd, towardToX, towardToY)\n );\n const [cx2, cy2] = projectLine(\n toNext.x,\n toNext.y,\n toStart.x,\n toStart.y,\n tangentProj(toNext, toStart, -towardToX, -towardToY)\n );\n const bulge = bypassed.length ? bowAround(p1x, p1y, p2x, p2y, bypassed, maxBow) : 0;\n const chordLen = dist === 0 ? 1 : dist;\n const ux = (p2x - p1x) / chordLen;\n const uy = (p2y - p1y) / chordLen;\n const bulgeX = -uy * bulge;\n const bulgeY = ux * bulge;\n const spreadX = ux * Math.abs(bulge);\n const spreadY = uy * Math.abs(bulge);\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cx1 + bulgeX - spreadX,\n cy0: cy1 + bulgeY - spreadY,\n cx1: cx2 + bulgeX + spreadX,\n cy1: cy2 + bulgeY + spreadY,\n x1: p2x,\n y1: p2y\n }\n ];\n }\n}\nfunction nearerEnd(segments, to) {\n const start = segments[0];\n const end = segments.at(-1);\n return Math.hypot(start.x - to.x, start.y - to.y) < Math.hypot(end.x - to.x, end.y - to.y) ? \"start\" : \"end\";\n}\nfunction routedEdgeCurves(fromSegments, toSegments, route, sides) {\n const fromAttach = attachment(\n fromSegments,\n sides?.from ?? nearerEnd(fromSegments, route[0])\n );\n const toAttach = attachment(\n toSegments,\n sides?.to ?? nearerEnd(toSegments, route.at(-1))\n );\n const points = [fromAttach.at, ...route, toAttach.at];\n const tangent = (i) => {\n const p = points[i];\n const span = (q) => Math.hypot(q.x - p.x, q.y - p.y);\n const along = (inward, next) => {\n const len = inward ? span(inward) : 0;\n const reach = span(next);\n return len === 0 ? { x: next.x - p.x, y: next.y - p.y } : {\n x: (p.x - inward.x) / len * reach,\n y: (p.y - inward.y) / len * reach\n };\n };\n if (i === 0) {\n return along(fromAttach.inward, points[1]);\n }\n if (i === points.length - 1) {\n const out = along(toAttach.inward, points[i - 1]);\n return { x: -out.x, y: -out.y };\n }\n return {\n x: (points[i + 1].x - points[i - 1].x) / 2,\n y: (points[i + 1].y - points[i - 1].y) / 2\n };\n };\n const curves = [];\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i];\n const b = points[i + 1];\n const ta = tangent(i);\n const tb = tangent(i + 1);\n curves.push({\n x0: a.x,\n y0: a.y,\n cx0: a.x + ta.x / 3,\n cy0: a.y + ta.y / 3,\n cx1: b.x - tb.x / 3,\n cy1: b.y - tb.y / 3,\n x1: b.x,\n y1: b.y\n });\n }\n return curves;\n}\n\nexport {\n svgPath,\n projectLine,\n curvePointAt,\n curveMidpoint,\n curveBounds,\n dashCurves,\n translateCurves,\n ownStrand,\n strandSides,\n bowAround,\n yToXOf,\n PATH_RIBBON_SPACING_PX,\n pathRibbonOffsets,\n polylinePx,\n selfLinkOf,\n edgeJoinOf,\n computeEdgeCurves,\n routedEdgeCurves\n};\n", "// src/util/weakMemo.ts\nfunction weakMemo() {\n const cache = /* @__PURE__ */ new WeakMap();\n return (key, deps, compute) => {\n const hit = cache.get(key);\n if (hit?.deps.length === deps.length && hit.deps.every((d, i) => Object.is(d, deps[i]))) {\n return hit.value;\n }\n const value = compute();\n cache.set(key, { deps, value });\n return value;\n };\n}\n\nexport {\n weakMemo\n};\n", "// src/overlayLabels.ts\nvar LABEL_PX = 11;\nvar LABEL_CHAR_PX = 6.2;\nvar LABEL_PAD = 4;\nfunction labelWidth(text) {\n return text.length * LABEL_CHAR_PX + LABEL_PAD * 2;\n}\nfunction overlaps(a, b) {\n return a.x0 < b.x1 && a.x1 > b.x0 && a.y0 < b.y1 && a.y1 > b.y0;\n}\nfunction offFrame(box, frame) {\n return box.x1 <= 0 || box.x0 >= frame.width || box.y1 <= 0 || box.y0 >= frame.height;\n}\nfunction insideFrame(box, frame) {\n return box.x0 >= 0 && box.x1 <= frame.width && box.y0 >= 0 && box.y1 <= frame.height;\n}\nfunction occupancy(frame, reserved = []) {\n const placed = [...reserved];\n return (box) => {\n if (offFrame(box, frame) || placed.some((p) => overlaps(p, box))) {\n return false;\n }\n placed.push(box);\n return true;\n };\n}\nfunction placeLabels(candidates, frame, take) {\n const out = [];\n const row = LABEL_PX + LABEL_PAD * 2;\n const place = (c, text) => {\n const w = labelWidth(text);\n const direction = c.y > frame.height / 2 ? -1 : 1;\n for (let tries = 0; tries <= (c.stack ?? 0); tries++) {\n const y = c.y + direction * tries * row;\n const box = {\n x0: c.x - w / 2,\n x1: c.x + w / 2,\n y0: y - LABEL_PX - LABEL_PAD,\n y1: y + LABEL_PAD\n };\n if (offFrame(box, frame)) {\n return void 0;\n }\n if (insideFrame(box, frame) && (c.fits?.(box) ?? true) && take(box)) {\n return { ...c, text, y, w };\n }\n }\n return void 0;\n };\n for (const c of candidates) {\n const placed = place(c, c.text) ?? (c.fallback === void 0 ? void 0 : place(c, c.fallback));\n if (placed) {\n out.push(placed);\n }\n }\n return out;\n}\n\nexport {\n LABEL_PX,\n LABEL_CHAR_PX,\n LABEL_PAD,\n labelWidth,\n overlaps,\n occupancy,\n placeLabels\n};\n", "import {\n ownStrand,\n strandSides\n} from \"./chunk-VACK24HF.js\";\nimport {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/layout/mergeRuns.ts\nfunction flip(strand) {\n return strand === \"+\" ? \"-\" : \"+\";\n}\nfunction mergeRuns(graph, alone = /* @__PURE__ */ new Set()) {\n const sides = graph.edges.map(strandSides);\n const at = /* @__PURE__ */ new Map();\n const attach = (id, side, ei) => {\n pushTo(at, `${id}|${side}`, ei);\n };\n graph.edges.forEach((edge, ei) => {\n attach(edge.from, sides[ei].from, ei);\n attach(edge.to, sides[ei].to, ei);\n });\n const joinAfter = (a) => {\n const out = at.get(`${a}|end`);\n if (out?.length !== 1) {\n return void 0;\n }\n const ei = out[0];\n const edge = graph.edges[ei];\n return edge.from === a && edge.to !== a && !alone.has(a) && !alone.has(edge.to) && sides[ei].from === \"end\" && sides[ei].to === \"start\" && at.get(`${edge.to}|start`)?.length === 1 ? ei : void 0;\n };\n const joined = /* @__PURE__ */ new Set();\n const runOf = /* @__PURE__ */ new Map();\n const runs = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const into = at.get(`${node.id}|start`);\n const pred = into?.length === 1 ? graph.edges[into[0]].from : void 0;\n if (runOf.has(node.id) || pred !== void 0 && joinAfter(pred) === into[0]) {\n continue;\n }\n const run = [node.id];\n for (; ; ) {\n const ei = joinAfter(run.at(-1));\n const next = ei === void 0 ? void 0 : graph.edges[ei].to;\n if (next === void 0 || runOf.has(next)) {\n break;\n }\n joined.add(ei);\n run.push(next);\n }\n for (const id of run) {\n runOf.set(id, node.id);\n }\n if (run.length > 1) {\n runs.set(node.id, run);\n }\n }\n for (const node of graph.nodes) {\n if (!runOf.has(node.id)) {\n runOf.set(node.id, node.id);\n }\n }\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const nodes = [];\n for (const node of graph.nodes) {\n if (runOf.get(node.id) !== node.id) {\n continue;\n }\n const run = runs.get(node.id);\n if (!run) {\n nodes.push(node);\n continue;\n }\n const members = run.map((id) => byId.get(id));\n const backbone = members.filter(isBackbone);\n const first = backbone.length ? backbone.reduce((a, b) => a.stable.start <= b.stable.start ? a : b) : members[0];\n nodes.push({\n id: node.id,\n name: node.name,\n length: members.reduce((sum, n) => sum + n.length, 0),\n depth: node.depth,\n stable: first.stable\n });\n }\n const seen = /* @__PURE__ */ new Set();\n const edges = [];\n graph.edges.forEach((edge, ei) => {\n const from = runOf.get(edge.from);\n const to = runOf.get(edge.to);\n const side = sides[ei];\n const key = `${from}|${side.from}>${to}|${side.to}`;\n if (joined.has(ei) || seen.has(key)) {\n return;\n }\n seen.add(key);\n edges.push({\n from,\n to,\n ...side.from === \"start\" ? { fromStrand: flip(ownStrand(from)) } : {},\n ...side.to === \"end\" ? { toStrand: flip(ownStrand(to)) } : {}\n });\n });\n return {\n graph: { ...graph, nodes, edges, paths: void 0, pathVisits: void 0 },\n runs\n };\n}\nfunction splitRuns(positions, runs, weightOf) {\n const out = { ...positions };\n for (const [id, members] of runs) {\n const line = positions[id];\n if (!line?.length) {\n continue;\n }\n delete out[id];\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n const weights = members.map((m) => Math.max(weightOf(m), 0));\n const weightSum = weights.reduce((a, b) => a + b, 0);\n let from = 0;\n members.forEach((member, k) => {\n const share = weightSum ? weights[k] / weightSum * total : total / members.length;\n const to = k === members.length - 1 ? total : from + share;\n out[member] = slice(line, arc, from, to);\n from = to;\n });\n }\n return out;\n}\nfunction polylineSlice(line, from, to) {\n if (line.length === 0) {\n return [];\n }\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n return slice(line, arc, from * total, to * total);\n}\nfunction polylineMidpoint(line) {\n const arc = arcPrefix(line);\n return pointAt(line, arc, arc.at(-1) / 2);\n}\nfunction arcPrefix(line) {\n const arc = [0];\n for (let i = 1; i < line.length; i++) {\n arc.push(\n arc[i - 1] + Math.hypot(line[i].x - line[i - 1].x, line[i].y - line[i - 1].y)\n );\n }\n return arc;\n}\nfunction firstReaching(arc, s) {\n let lo = 0;\n let hi = arc.length;\n while (lo < hi) {\n const mid = lo + hi >> 1;\n if (arc[mid] < s) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n}\nfunction pointAt(line, arc, s) {\n if (s <= 0) {\n return { ...line[0] };\n }\n const i = firstReaching(arc, s);\n if (i >= arc.length) {\n return { ...line.at(-1) };\n }\n const span = arc[i] - arc[i - 1];\n const t = span > 0 ? (s - arc[i - 1]) / span : 0;\n const a = line[i - 1];\n const b = line[i];\n return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };\n}\nfunction slice(line, arc, from, to) {\n const points = [pointAt(line, arc, from)];\n for (let i = firstReaching(arc, from); i < line.length && arc[i] < to; i++) {\n if (arc[i] > from) {\n points.push({ ...line[i] });\n }\n }\n points.push(pointAt(line, arc, to));\n return points;\n}\n\nexport {\n mergeRuns,\n splitRuns,\n polylineSlice,\n polylineMidpoint\n};\n", "import {\n pathOrigin,\n trimOrigins\n} from \"./chunk-3YBP46PB.js\";\nimport {\n PathVisitsBuilder\n} from \"./chunk-ZPZ7GNBT.js\";\nimport {\n isBackbone,\n overlapsWindow\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/layout/trimToWindow.ts\nfunction trimToWindow(graph, window) {\n const inWindow = new Set(\n graph.nodes.filter((n) => isBackbone(n) && overlapsWindow(n, window)).map((n) => n.id)\n );\n const paths = graph.paths ?? [];\n if (inWindow.size === 0 || paths.length === 0) {\n return graph;\n }\n const spans = paths.map((path) => {\n let first = -1;\n let last = -1;\n path.nodeIds.forEach((id, i) => {\n if (inWindow.has(id)) {\n if (first < 0) {\n first = i;\n }\n last = i;\n }\n });\n return first < 0 ? void 0 : { first, last };\n });\n if (spans.every(\n (span, i) => span?.first === 0 && span.last === paths[i].nodeIds.length - 1\n )) {\n return graph;\n }\n const kept = /* @__PURE__ */ new Set();\n const trimmed = [];\n const stretches = /* @__PURE__ */ new Map();\n paths.forEach((path, i) => {\n const span = spans[i];\n if (span) {\n const nodeIds = path.nodeIds.slice(span.first, span.last + 1);\n for (const id of nodeIds) {\n kept.add(id);\n }\n trimmed.push({ ...path, nodeIds });\n stretches.set(path.name, { first: span.first, nodeIds });\n }\n });\n return {\n ...graph,\n nodes: graph.nodes.filter((n) => kept.has(n.id)),\n edges: graph.edges.filter((e) => kept.has(e.from) && kept.has(e.to)),\n paths: trimmed,\n pathVisits: graph.pathVisits && trimVisits(\n graph.pathVisits,\n paths,\n spans,\n new Map(graph.nodes.map((n) => [n.id, n.name]))\n ),\n anchorPaths: trimOrigins(graph, stretches)\n };\n}\nfunction trimVisits(visits, paths, spans, nameOf) {\n const next = visits.replay();\n const out = new PathVisitsBuilder();\n paths.forEach((path, p) => {\n const origin = visits.pathIndex(pathOrigin(path.name).name);\n const span = spans[p];\n path.nodeIds.forEach((id, i) => {\n const segment = nameOf.get(id) ?? id;\n const at = next(visits.slot(segment), origin);\n if (at >= 0 && span && i >= span.first && i <= span.last) {\n out.add(\n segment,\n visits.paths[origin],\n visits.samples[origin],\n visits.start[at],\n visits.reversed[at] === 1\n );\n }\n });\n });\n return out.build();\n}\nfunction clipToWindow(graph, window, reachBp) {\n const nodes = graph.nodes.map((node) => {\n if (!isBackbone(node)) {\n return node;\n }\n const from = node.stable.start;\n const to = from + node.length;\n const [start, end] = overlapsWindow(node, window) ? [Math.max(from, window.start), Math.min(to, window.end)] : to <= window.start ? [Math.max(from, to - reachBp), to] : [from, Math.min(to, from + reachBp)];\n return start === from && end === to ? node : {\n ...node,\n length: end - start,\n stable: { ...node.stable, start },\n unclipped: { start: from, length: node.length }\n };\n });\n return nodes.some((node, i) => node !== graph.nodes[i]) ? { ...graph, nodes } : graph;\n}\nfunction unclipped(graph) {\n return graph.nodes.some((n) => n.unclipped) ? {\n ...graph,\n nodes: graph.nodes.map(\n ({ unclipped: full, ...node }) => full && node.stable ? {\n ...node,\n length: full.length,\n stable: { ...node.stable, start: full.start }\n } : node\n )\n } : graph;\n}\n\nexport {\n trimToWindow,\n clipToWindow,\n unclipped\n};\n", "import {\n unclipped\n} from \"./chunk-TLWXLNLY.js\";\nimport {\n referenceVisitStarts\n} from \"./chunk-3YBP46PB.js\";\nimport {\n computeEdgeCurves,\n edgeJoinOf,\n routedEdgeCurves,\n strandSides\n} from \"./chunk-VACK24HF.js\";\nimport {\n groupBy\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n firstNodeAtOrAfter,\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\nimport {\n partitionPoint\n} from \"./chunk-HOAIOEI7.js\";\n\n// src/deletionEdges.ts\nvar MIN_DELETION_BP = 1;\nfunction bypassedPoints(nodePositions, bypassed) {\n return bypassed.flatMap((id) => nodePositions[id] ?? []);\n}\nfunction edgeCurvesOf(nodePositions, edge, axis, bypassed, route, stranded) {\n const from = nodePositions[edge.from];\n const to = nodePositions[edge.to];\n if (!from?.length || !to?.length) {\n return void 0;\n }\n return route ? routedEdgeCurves(\n from,\n to,\n route,\n stranded ? strandSides(edge) : void 0\n ) : computeEdgeCurves(\n from,\n to,\n edgeJoinOf(edge, stranded),\n axis,\n bypassed ? bypassedPoints(nodePositions, bypassed) : []\n );\n}\nfunction backboneBySequence(graph) {\n const bySequence = groupBy(\n graph.nodes.filter(isBackbone),\n (node) => node.stable.refName\n );\n for (const list of bySequence.values()) {\n list.sort((a, b) => a.stable.start - b.stable.start);\n }\n return bySequence;\n}\nfunction bypassedNodes(nodes, start, end) {\n const bypassed = [];\n if (nodes) {\n for (let i = firstNodeAtOrAfter(nodes, start); i < nodes.length; i++) {\n const node = nodes[i];\n if (node.stable.start >= end) {\n break;\n }\n if (node.stable.start + node.length <= end) {\n bypassed.push(node.id);\n }\n }\n }\n return bypassed;\n}\nfunction skipsBetween(edge, from, to, forwards) {\n const { fromStrand, toStrand } = edge;\n if (fromStrand === void 0 || toStrand === void 0) {\n return true;\n }\n const leavesRight = fromStrand === (from.stable.strand ?? \"+\");\n const arrivesLeft = toStrand === (to.stable.strand ?? \"+\");\n return forwards ? leavesRight && arrivesLeft : !leavesRight && !arrivesLeft;\n}\nfunction skippedSpan(edge, from, to, startsOf) {\n let best;\n for (const a of startsOf(from)) {\n for (const b of startsOf(to)) {\n const forwards = a <= b;\n const span = forwards ? { start: a + from.length, end: b } : { start: b + to.length, end: a };\n if (skipsBetween(edge, from, to, forwards) && (!best || Math.abs(span.end - span.start) < Math.abs(best.end - best.start))) {\n best = span;\n }\n }\n }\n return best;\n}\nvar COPY_SWITCH_SHARE = 0.01;\nfunction repeatCopies(backbone, startsOf) {\n const bySequence = /* @__PURE__ */ new Map();\n for (const [refName, nodes] of backbone) {\n const copies = nodes.flatMap((node) => {\n const starts = startsOf(node);\n return starts.slice(1).map((next, i) => ({\n at: starts[i],\n copy: next - starts[i]\n }));\n });\n if (copies.length) {\n bySequence.set(\n refName,\n copies.sort((a, b) => a.at - b.at)\n );\n }\n }\n return bySequence;\n}\nfunction switchesCopy(copies, start, bp) {\n if (!copies) {\n return false;\n }\n const i = partitionPoint(copies.length, (k) => copies[k].at < start);\n const near = [copies[i - 1], copies[i]].filter((c) => c !== void 0).sort((a, b) => Math.abs(a.at - start) - Math.abs(b.at - start))[0];\n return near !== void 0 && Math.abs(near.at - start) <= near.copy && Math.abs(bp - near.copy) <= near.copy * COPY_SWITCH_SHARE;\n}\nfunction deletionEdges(cut) {\n const graph = unclipped(cut);\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const backbone = backboneBySequence(graph);\n const startsOf = referenceVisitStarts(graph);\n const copies = repeatCopies(backbone, startsOf);\n const found = [];\n for (let edgeIndex = 0; edgeIndex < graph.edges.length; edgeIndex++) {\n const edge = graph.edges[edgeIndex];\n const from = byId.get(edge.from);\n const to = byId.get(edge.to);\n if (from !== void 0 && to !== void 0 && isBackbone(from) && isBackbone(to) && from.stable.refName === to.stable.refName) {\n const span = skippedSpan(edge, from, to, startsOf);\n const refName = from.stable.refName;\n const bp = span ? span.end - span.start : 0;\n if (span && bp >= MIN_DELETION_BP && !switchesCopy(copies.get(refName), span.start, bp)) {\n const { start, end } = span;\n found.push({\n edgeIndex,\n from: edge.from,\n to: edge.to,\n ...edge.fromStrand ? { fromStrand: edge.fromStrand } : {},\n ...edge.toStrand ? { toStrand: edge.toStrand } : {},\n refName,\n start,\n end,\n bp,\n bypassed: bypassedNodes(backbone.get(refName), start, end)\n });\n }\n }\n }\n return found;\n}\nfunction closableDeletions(graph, deletions) {\n const parent = /* @__PURE__ */ new Map();\n const root = (id) => {\n let r = id;\n while (parent.has(r)) {\n r = parent.get(r);\n }\n if (r !== id) {\n parent.set(id, r);\n }\n return r;\n };\n const join = (a, b) => {\n const [ra, rb] = [root(a), root(b)];\n if (ra !== rb) {\n parent.set(ra, rb);\n }\n return ra !== rb;\n };\n const candidates = new Set(deletions.map((d) => d.edgeIndex));\n graph.edges.forEach((e, ei) => {\n if (!candidates.has(ei)) {\n join(e.from, e.to);\n }\n });\n return new Set(\n deletions.filter((d) => !join(d.from, d.to)).map((d) => d.edgeIndex)\n );\n}\nvar drawings = /* @__PURE__ */ new WeakMap();\nfunction deletionDrawing(graph, deletions, show = true) {\n let byShow = drawings.get(deletions);\n if (!byShow) {\n byShow = /* @__PURE__ */ new Map();\n drawings.set(deletions, byShow);\n }\n let drawing = byShow.get(show);\n if (!drawing) {\n const hidden = show ? /* @__PURE__ */ new Set() : closableDeletions(graph, deletions);\n drawing = {\n shown: deletions.filter((d) => !hidden.has(d.edgeIndex)),\n bypassed: new Map(deletions.map((d) => [d.edgeIndex, d.bypassed])),\n hidden\n };\n byShow.set(show, drawing);\n }\n return drawing;\n}\n\nexport {\n edgeCurvesOf,\n deletionEdges,\n closableDeletions,\n deletionDrawing\n};\n", "import {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n labelWidth,\n occupancy\n} from \"./chunk-AB35TJST.js\";\nimport {\n polylineMidpoint\n} from \"./chunk-2VMKQKVO.js\";\nimport {\n edgeCurvesOf\n} from \"./chunk-5NZRT7GL.js\";\nimport {\n curveBounds,\n curveMidpoint,\n polylinePx\n} from \"./chunk-VACK24HF.js\";\n\n// src/graphLabels.ts\nvar MIN_DELETION_LABEL_PX = 26;\nvar PX_PER_NODE_LABEL = 4e4;\nvar MIN_NODE_LABELS = 8;\nvar LEADER_GAP_PX = 8;\nvar LABEL_CHAR_PX = 5.7;\nvar LABEL_PAD_PX = 6;\nvar LABEL_HEIGHT_PX = 13;\nvar LABEL_GAP_PX = 3;\nvar MAX_LABEL_OVERHANG = 2;\nfunction labelHalfWidth(text) {\n return (text.length * LABEL_CHAR_PX + LABEL_PAD_PX + LABEL_GAP_PX) / 2;\n}\nvar LABEL_HALF_HEIGHT = (LABEL_HEIGHT_PX + LABEL_GAP_PX) / 2;\nvar MIN_LABEL_HALF_WIDTH = labelHalfWidth(\"1 bp\");\nfunction boxAt(halfW, x, y) {\n return {\n x0: x - halfW,\n x1: x + halfW,\n y0: y - LABEL_HALF_HEIGHT,\n y1: y + LABEL_HALF_HEIGHT\n };\n}\nfunction rowLabelBox(text, screenY) {\n return {\n x0: 6,\n x1: 6 + labelWidth(text) + LABEL_GAP_PX,\n y0: screenY - 8 - LABEL_GAP_PX / 2,\n y1: screenY + 8 + LABEL_GAP_PX / 2\n };\n}\nfunction clamp(v, lo, hi) {\n return hi < lo ? v : Math.min(Math.max(v, lo), hi);\n}\nfunction groupDigits(n) {\n return String(n).replace(/\\B(?=(\\d{3})+$)/g, \",\");\n}\nfunction formatBp(bp) {\n const [value, unit] = bp >= 999500 ? [bp / 1e6, \"Mb\"] : bp >= 1e3 ? [bp / 1e3, \"kb\"] : [];\n if (value === void 0) {\n return `${bp} bp`;\n }\n return `${+value.toFixed(value >= 100 ? 0 : 1)} ${unit}`;\n}\nfunction deletionText(bp) {\n return `${formatBp(bp)} del`;\n}\nfunction arcOutward(curves, apex, scaleX, scaleY) {\n const first = curves[0];\n const last = curves[curves.length - 1];\n const dx = (apex.x - (first.x0 + last.x1) / 2) * scaleX;\n const dy = (apex.y - (first.y0 + last.y1) / 2) * scaleY;\n const len = Math.hypot(dx, dy);\n return len === 0 ? { x: 0, y: -1 } : { x: dx / len, y: dy / len };\n}\nfunction boxSupport(box, dir) {\n return Math.abs(dir.x) * (box.x1 - box.x0) / 2 + Math.abs(dir.y) * (box.y1 - box.y0) / 2;\n}\nfunction boxRayCrossing(box, dir) {\n const halfW = (box.x1 - box.x0) / 2;\n const halfH = (box.y1 - box.y0) / 2;\n return Math.min(\n dir.x === 0 ? Infinity : halfW / Math.abs(dir.x),\n dir.y === 0 ? Infinity : halfH / Math.abs(dir.y)\n );\n}\nfunction runBounds(nodeIds, nodePositions) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const id of nodeIds) {\n for (const p of nodePositions[id] ?? []) {\n minX = Math.min(minX, p.x);\n maxX = Math.max(maxX, p.x);\n minY = Math.min(minY, p.y);\n maxY = Math.max(maxY, p.y);\n }\n }\n return minX === Infinity ? void 0 : { minX, minY, maxX, maxY };\n}\nvar nodeOrderCache = weakMemo();\nfunction labelOrder(nodePositions, nodeLengths) {\n return nodeOrderCache(\n nodePositions,\n [nodeLengths],\n () => Object.entries(nodePositions).filter(([id, segments]) => segments.length > 0 && nodeLengths.has(id)).sort(([a], [b]) => nodeLengths.get(b) - nodeLengths.get(a))\n );\n}\nvar arcCache = weakMemo();\nfunction arcPlacements(nodePositions, deletions, axis, version, routes, stranded) {\n const { scaleX, scaleY } = axis;\n return arcCache(\n nodePositions,\n [deletions, routes, stranded, scaleX, scaleY, version],\n () => {\n const arcs = [];\n for (const deletion of [...deletions].sort((a, b) => b.bp - a.bp)) {\n const curves = edgeCurvesOf(\n nodePositions,\n deletion,\n axis,\n deletion.bypassed,\n routes?.[deletion.edgeIndex],\n stranded\n );\n const apex = curves ? curveMidpoint(curves) : void 0;\n if (curves && apex) {\n const { minX, minY, maxX, maxY } = curveBounds(curves);\n arcs.push({\n deletion,\n curves,\n apex,\n // in screen px, so the two axes' units cannot be added by accident\n extent: Math.max((maxX - minX) * scaleX, (maxY - minY) * scaleY)\n });\n }\n }\n return arcs;\n }\n );\n}\nfunction sizeLabelCandidates({\n nodePositions,\n nodeLengths,\n deletions,\n deletionRoutes,\n stranded = false,\n alleleDeletions,\n axis,\n translateX,\n translateY,\n width,\n height,\n version = 0\n}) {\n const { scaleX, scaleY } = axis;\n const deletionCandidates = [];\n const nodeCandidates = [];\n for (const { deletion, curves, apex, extent } of arcPlacements(\n nodePositions,\n deletions,\n axis,\n version,\n deletionRoutes,\n stranded\n )) {\n if (extent >= MIN_DELETION_LABEL_PX) {\n const text = deletionText(deletion.bp);\n const halfW = labelHalfWidth(text);\n const box = boxAt(halfW, 0, 0);\n const arcX = apex.x * scaleX + translateX;\n const arcY = apex.y * scaleY + translateY;\n if (arcX < 0 || arcX > width || arcY < 0 || arcY > height) {\n continue;\n }\n const fits = extent >= halfW * 2 / MAX_LABEL_OVERHANG;\n const bow = arcOutward(curves, apex, scaleX, scaleY);\n const offset = boxSupport(box, bow) + LEADER_GAP_PX;\n const x = fits ? arcX : clamp(arcX + bow.x * offset, halfW, width - halfW);\n const y = fits ? arcY : clamp(\n arcY + bow.y * offset,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n const away = Math.hypot(x - arcX, y - arcY);\n let leader;\n if (away > 0) {\n const dir = { x: (x - arcX) / away, y: (y - arcY) / away };\n const crossing = boxRayCrossing(box, dir);\n leader = {\n arcX,\n arcY,\n labelX: x - dir.x * crossing,\n labelY: y - dir.y * crossing\n };\n }\n deletionCandidates.push({\n label: {\n key: `del:${deletion.edgeIndex}`,\n text,\n x,\n y,\n kind: \"deletion\",\n leader\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n const labelledByDeletion = /* @__PURE__ */ new Set();\n const alleleRuns = [...alleleDeletions ?? []].sort((a, b) => b.bp - a.bp);\n for (const run of alleleRuns) {\n const drawn = runBounds(run.nodeIds, nodePositions);\n if (!drawn) {\n continue;\n }\n const shownLeft = Math.max(drawn.minX * scaleX + translateX, 0);\n const shownRight = Math.min(drawn.maxX * scaleX + translateX, width);\n const shownTop = Math.max(drawn.minY * scaleY + translateY, 0);\n const shownBottom = Math.min(drawn.maxY * scaleY + translateY, height);\n if (shownRight < shownLeft || shownBottom < shownTop) {\n continue;\n }\n const extent = Math.max(shownRight - shownLeft, shownBottom - shownTop);\n const text = deletionText(run.bp);\n const halfW = labelHalfWidth(text);\n if (extent >= halfW * 2 / MAX_LABEL_OVERHANG) {\n for (const id of run.nodeIds) {\n labelledByDeletion.add(id);\n }\n const x = clamp((shownLeft + shownRight) / 2, halfW, width - halfW);\n const y = clamp(\n (shownTop + shownBottom) / 2,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n deletionCandidates.push({\n label: {\n key: `alleledel:${run.nodeIds.join(\",\")}`,\n text,\n x,\n y,\n kind: \"deletion\"\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n for (const [id, segments] of labelOrder(nodePositions, nodeLengths)) {\n if (labelledByDeletion.has(id)) {\n continue;\n }\n const { x, y } = polylineMidpoint(segments);\n const screenY = y * scaleY + translateY;\n if (screenY + LABEL_HALF_HEIGHT <= 0 || screenY - LABEL_HALF_HEIGHT >= height) {\n continue;\n }\n const drawn = polylinePx(segments, scaleX, scaleY);\n if (drawn < MIN_LABEL_HALF_WIDTH * 2 / MAX_LABEL_OVERHANG) {\n continue;\n }\n const text = formatBp(nodeLengths.get(id));\n const halfW = labelHalfWidth(text);\n if (drawn >= halfW * 2 / MAX_LABEL_OVERHANG) {\n const screenX = x * scaleX + translateX;\n nodeCandidates.push({\n label: {\n key: `node:${id}`,\n text,\n x: screenX,\n y: screenY,\n kind: \"node\"\n },\n box: boxAt(halfW, screenX, screenY)\n });\n }\n }\n return { deletions: deletionCandidates, nodes: nodeCandidates };\n}\nfunction nodeLabelBudget(width, height) {\n return Math.max(\n MIN_NODE_LABELS,\n Math.floor(width * height / PX_PER_NODE_LABEL)\n );\n}\nfunction placeSizeLabels(candidates, take, budget = Infinity) {\n const labels = [];\n for (const { label, box } of candidates) {\n if (labels.length >= budget) {\n break;\n }\n if (take(box)) {\n labels.push(label);\n }\n }\n return labels;\n}\nfunction graphLabels({\n reserved,\n take,\n ...args\n}) {\n take ??= occupancy(args, reserved);\n const { deletions, nodes } = sizeLabelCandidates(args);\n return [\n ...placeSizeLabels(deletions, take),\n ...placeSizeLabels(nodes, take, nodeLabelBudget(args.width, args.height))\n ];\n}\n\nexport {\n rowLabelBox,\n groupDigits,\n formatBp,\n sizeLabelCandidates,\n nodeLabelBudget,\n placeSizeLabels,\n graphLabels\n};\n", "import {\n groupDigits\n} from \"./chunk-FU57ZNRQ.js\";\nimport {\n pathOrigin\n} from \"./chunk-3YBP46PB.js\";\nimport {\n isGenericSample\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/pathColors.ts\nfunction nameHue(name) {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return Math.abs(hash % 360);\n}\nfunction pathHueAt(index, count) {\n return index * 360 / count;\n}\nvar PATH_SATURATION = 0.7;\nvar PATH_LIGHTNESS = 0.5;\nvar MAX_PATH_COLORS = 16;\nfunction pathColorsLegible(pathCount) {\n return pathCount > 0 && pathCount <= MAX_PATH_COLORS;\n}\nfunction pathCssColor(index, count) {\n return `hsl(${pathHueAt(index, count)}, ${PATH_SATURATION * 100}%, ${PATH_LIGHTNESS * 100}%)`;\n}\nfunction pathGreyCssColor(index, count) {\n const lightness = count > 1 ? 25 + 45 * index / (count - 1) : 45;\n return `hsl(0, 0%, ${lightness}%)`;\n}\nfunction labelTiers(name) {\n const parts = pathOrigin(name).name.split(\"#\");\n const full = parts.join(\"#\");\n if (parts.length >= 3 && isGenericSample(parts[0])) {\n const contig = parts.slice(2).join(\"#\");\n return [contig, contig, full];\n }\n return [parts[0], parts.slice(0, 2).join(\"#\"), full];\n}\nfunction offsetTiers(name, tiers) {\n const { start } = pathOrigin(name);\n return tiers.map((t) => `${t} @${groupDigits(start)}`);\n}\nfunction pathLegend(paths, colors) {\n const firstOf = /* @__PURE__ */ new Map();\n paths.forEach((path, i) => {\n if (!firstOf.has(path.name)) {\n firstOf.set(path.name, i);\n }\n });\n const entries = [...firstOf].map(([name, i]) => ({ name, i }));\n const named = entries.map((e) => labelTiers(e.name));\n const candidates = [0, 1, 2].flatMap((t) => [\n entries.map((_, k) => named[k][t]),\n entries.map((e, k) => offsetTiers(e.name, named[k])[t])\n ]);\n const distinct = candidates.find(\n (labels2) => new Set(labels2).size === entries.length\n );\n const labels = distinct ?? candidates.at(-1);\n return entries.map(({ name, i }, k) => ({\n name,\n label: labels[k],\n color: colors?.[i] ?? pathCssColor(i, paths.length)\n }));\n}\nfunction walkLabelsOf(entries) {\n const seen = /* @__PURE__ */ new Map();\n return new Map(\n [...entries].sort((a, b) => a.label.localeCompare(b.label)).map((e) => {\n const n = (seen.get(e.label) ?? 0) + 1;\n seen.set(e.label, n);\n return [e.name, n > 1 ? `${e.label} (${n})` : e.label];\n })\n );\n}\n\nexport {\n nameHue,\n pathHueAt,\n PATH_SATURATION,\n PATH_LIGHTNESS,\n MAX_PATH_COLORS,\n pathColorsLegible,\n pathCssColor,\n pathGreyCssColor,\n pathLegend,\n walkLabelsOf\n};\n", "// src/nodeWidths.ts\nvar NODE_WIDTHS = [\n {\n value: \"depth\",\n label: \"By depth\",\n description: \"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform.\"\n },\n {\n value: \"uniform\",\n label: \"Uniform\",\n description: \"Every node the same thickness.\"\n }\n];\nvar MIN_FACTOR = 0.3;\nvar MAX_FACTOR = 3;\nfunction meanDepth(graph) {\n let weighted = 0;\n let length = 0;\n for (const node of graph.nodes) {\n weighted += node.depth * node.length;\n length += node.length;\n }\n return length > 0 ? weighted / length : 0;\n}\nfunction depthWidthFactor(node, mean) {\n if (!(mean > 0) || !(node.depth > 0)) {\n return 1;\n }\n return Math.min(\n MAX_FACTOR,\n Math.max(MIN_FACTOR, Math.sqrt(node.depth / mean))\n );\n}\nfunction nodeWidthPx(node, contigThickness, nodeWidth, mean) {\n return contigThickness * (nodeWidth === \"depth\" ? depthWidthFactor(node, mean) : 1);\n}\nfunction maxNodeWidthPx(contigThickness, nodeWidth) {\n return contigThickness * (nodeWidth === \"depth\" ? MAX_FACTOR : 1);\n}\nvar MIN_WALK_LANE_PX = 4;\nfunction walkLaneWidthPx(width, lanes) {\n return Math.max(width / lanes, MIN_WALK_LANE_PX);\n}\nfunction nodeInk(graph, nodeById, contigThickness, nodeWidth, lanes = 0) {\n const mean = graph ? meanDepth(graph) : 0;\n const reach = (width) => lanes > 0 ? walkLaneWidthPx(width, lanes) * lanes / 2 : width / 2;\n return {\n maxHalfWidthPx: reach(maxNodeWidthPx(contigThickness, nodeWidth)),\n halfWidthPx: (id) => {\n const node = nodeById?.get(id);\n return reach(\n node ? nodeWidthPx(node, contigThickness, nodeWidth, mean) : contigThickness\n );\n }\n };\n}\n\nexport {\n NODE_WIDTHS,\n meanDepth,\n nodeWidthPx,\n maxNodeWidthPx,\n walkLaneWidthPx,\n nodeInk\n};\n"],
5
- "mappings": "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",
6
- "names": ["ROW_HEIGHT_PX", "svgPath", "points", "round", "v", "p", "i", "projectLine", "x1", "y1", "x2", "y2", "distance", "d", "vx", "vy", "curvePointAt", "c", "t", "u", "a", "b", "e", "curveMidpoint", "curves", "mid", "curveBounds", "minX", "minY", "maxX", "maxY", "subCurve", "t0", "t1", "p0", "p1", "dt", "d0", "curveTangentAt", "d1", "VISIBLE_SAMPLES", "visibleStretches", "lengths", "bounds", "yToX", "stretches", "start", "k", "length", "pad", "last", "next", "from", "to", "prev", "dashCurves", "dashWorld", "total", "periods", "spans", "seen", "out", "dash", "end", "translateCurves", "dx", "dy", "attachment", "segments", "side", "TANGENT_SPAN_FACTOR", "MAX_TANGENT", "ownStrand", "id", "strandSides", "edge", "own", "strand", "spanOf", "min", "max", "s", "distanceToSpan", "x", "span", "facingSide", "other", "tieBreak", "startGap", "endGap", "facingSides", "fromSegments", "toSegments", "laidSides", "heldFacingSides", "byTo", "sides", "APEX_FRACTION", "BOW_CLEARANCE", "ALONG_FRACTION", "MAX_ROW_BOW_PX", "ROW_HEIGHT_PX", "bowAround", "p1x", "p1y", "p2x", "p2y", "toward", "maxBow", "chord", "ux", "uy", "reach", "minAlong", "maxAlong", "perp", "along", "uncapped", "size", "yToXOf", "scaleX", "scaleY", "PATH_RIBBON_SPACING_PX", "drawnDirection", "len", "pathRibbonOffsets", "count", "axis", "spacing", "dir", "offsets", "scaleYOf", "unscaleYOf", "polylinePx", "SELF_LOOP_MIN_PX", "SELF_LOOP_MAX_PX", "selfLoopReach", "scale", "nodePx", "selfLinkOf", "edgeJoinOf", "stranded", "self", "hairpinCurves", "attach", "at", "inward", "px", "py", "nearX", "nearY", "apexX", "apexY", "sideX", "sideY", "computeEdgeCurves", "join", "bypassed", "maxBowIn", "loop", "fromAttach", "toAttach", "fromEnd", "toStart", "segDirX", "segDirY", "ext", "perpX", "perpY", "midX", "midY", "cp1x", "cp1y", "cp2x", "cp2y", "fromPrev", "toNext", "dist", "tangentProj", "towardX", "towardY", "towardToX", "towardToY", "cx1", "cy1", "cx2", "cy2", "bulge", "chordLen", "bulgeX", "bulgeY", "spreadX", "spreadY", "nearerEnd", "routedEdgeCurves", "route", "tangent", "q", "ta", "tb", "weakMemo", "cache", "key", "deps", "compute", "hit", "d", "i", "value", "LABEL_PX", "LABEL_CHAR_PX", "LABEL_PAD", "labelWidth", "text", "overlaps", "a", "b", "offFrame", "box", "frame", "insideFrame", "occupancy", "reserved", "placed", "p", "placeLabels", "candidates", "take", "out", "row", "place", "w", "direction", "tries", "y", "flip", "strand", "mergeRuns", "graph", "alone", "sides", "strandSides", "at", "attach", "id", "side", "ei", "pushTo", "edge", "joinAfter", "a", "out", "joined", "runOf", "runs", "node", "into", "pred", "run", "next", "byId", "n", "nodes", "members", "backbone", "isBackbone", "first", "b", "sum", "seen", "edges", "from", "to", "key", "ownStrand", "splitRuns", "positions", "weightOf", "line", "arc", "arcPrefix", "total", "weights", "m", "weightSum", "member", "k", "share", "slice", "polylineSlice", "polylineMidpoint", "pointAt", "i", "firstReaching", "s", "lo", "hi", "mid", "span", "t", "points", "trimToWindow", "graph", "window", "inWindow", "n", "isBackbone", "overlapsWindow", "paths", "spans", "path", "first", "last", "id", "i", "span", "kept", "trimmed", "stretches", "nodeIds", "e", "trimVisits", "trimOrigins", "visits", "nameOf", "next", "out", "PathVisitsBuilder", "p", "origin", "pathOrigin", "segment", "at", "clipToWindow", "reachBp", "nodes", "node", "from", "to", "start", "end", "unclipped", "full", "MIN_DELETION_BP", "bypassedPoints", "nodePositions", "bypassed", "id", "edgeCurvesOf", "edge", "axis", "route", "stranded", "from", "to", "routedEdgeCurves", "strandSides", "computeEdgeCurves", "edgeJoinOf", "backboneBySequence", "graph", "bySequence", "groupBy", "isBackbone", "node", "list", "a", "b", "bypassedNodes", "nodes", "start", "end", "i", "firstNodeAtOrAfter", "skipsBetween", "forwards", "fromStrand", "toStrand", "leavesRight", "arrivesLeft", "skippedSpan", "startsOf", "best", "span", "COPY_SWITCH_SHARE", "repeatCopies", "backbone", "refName", "copies", "starts", "next", "switchesCopy", "bp", "partitionPoint", "k", "near", "c", "deletionEdges", "cut", "unclipped", "byId", "n", "referenceVisitStarts", "found", "edgeIndex", "closableDeletions", "deletions", "parent", "root", "r", "join", "ra", "rb", "candidates", "d", "e", "ei", "drawings", "deletionDrawing", "show", "byShow", "drawing", "hidden", "MIN_DELETION_LABEL_PX", "PX_PER_NODE_LABEL", "MIN_NODE_LABELS", "LEADER_GAP_PX", "LABEL_CHAR_PX", "LABEL_PAD_PX", "LABEL_HEIGHT_PX", "LABEL_GAP_PX", "MAX_LABEL_OVERHANG", "labelHalfWidth", "text", "LABEL_HALF_HEIGHT", "MIN_LABEL_HALF_WIDTH", "boxAt", "halfW", "x", "y", "rowLabelBox", "screenY", "labelWidth", "clamp", "v", "lo", "hi", "groupDigits", "n", "formatBp", "bp", "value", "unit", "deletionText", "arcOutward", "curves", "apex", "scaleX", "scaleY", "first", "last", "dx", "dy", "len", "boxSupport", "box", "dir", "boxRayCrossing", "halfH", "runBounds", "nodeIds", "nodePositions", "minX", "minY", "maxX", "maxY", "id", "p", "nodeOrderCache", "weakMemo", "labelOrder", "nodeLengths", "segments", "a", "b", "arcCache", "arcPlacements", "deletions", "axis", "version", "routes", "stranded", "arcs", "deletion", "edgeCurvesOf", "curveMidpoint", "curveBounds", "sizeLabelCandidates", "deletionRoutes", "alleleDeletions", "translateX", "translateY", "width", "height", "deletionCandidates", "nodeCandidates", "extent", "arcX", "arcY", "fits", "bow", "offset", "away", "leader", "crossing", "labelledByDeletion", "alleleRuns", "run", "drawn", "shownLeft", "shownRight", "shownTop", "shownBottom", "polylineMidpoint", "polylinePx", "screenX", "nodeLabelBudget", "placeSizeLabels", "candidates", "take", "budget", "labels", "label", "graphLabels", "reserved", "args", "occupancy", "nodes", "nameHue", "name", "hash", "i", "pathHueAt", "index", "count", "PATH_SATURATION", "PATH_LIGHTNESS", "MAX_PATH_COLORS", "pathColorsLegible", "pathCount", "pathCssColor", "pathGreyCssColor", "labelTiers", "parts", "pathOrigin", "full", "isGenericSample", "contig", "offsetTiers", "tiers", "start", "t", "groupDigits", "pathLegend", "paths", "colors", "firstOf", "path", "entries", "named", "e", "candidates", "_", "k", "labels", "labels2", "walkLabelsOf", "seen", "a", "b", "n", "NODE_WIDTHS", "MIN_FACTOR", "MAX_FACTOR", "meanDepth", "graph", "weighted", "length", "node", "depthWidthFactor", "mean", "nodeWidthPx", "contigThickness", "nodeWidth", "maxNodeWidthPx", "MIN_WALK_LANE_PX", "walkLaneWidthPx", "width", "lanes", "nodeInk", "nodeById", "reach", "id"]
7
- }
@@ -1,2 +0,0 @@
1
- import{D as Vt,E as zt,F as Et,G as xt,O as qt,P as lt,Q as Mt,d as Bt,e as gt,g as $t,h as Xt,i as Kt,j as Ut,k as Yt,w as jt}from"./chunk-Q3BXNKEL.js";import{a as J,g as Q}from"./chunk-U5PIXAF2.js";function p(t,n,e,o){return(o<<24|e<<16|n<<8|t)>>>0}function Rt(t){return t&255}function _t(t){return t>>>8&255}function yt(t){return t>>>16&255}function bt(t){return t>>>24&255}function Jt(t){return`rgba(${Rt(t)},${_t(t)},${yt(t)},${bt(t)/255})`}function Ee(t,n){return`rgba(${Math.round(t[0]*255)},${Math.round(t[1]*255)},${Math.round(t[2]*255)},${n})`}function j(t,n){return p(Rt(t),_t(t),yt(t),Math.round(bt(t)*n))}function xe(t,n){let e=Math.max(0,1-1/n),o=r=>Math.round(r+(255-r)*e);return p(o(Rt(t)),o(_t(t)),o(yt(t)),bt(t))}var Qt=300,Z=.7,tt=.5;function bn(t){return`hsl(${t}, ${Z*100}%, ${tt*100}%)`}function nt(t){return Math.max(0,Math.min(1,t))*Qt}function vt(t,n){return nt((t-n.start)/(n.end-n.start))}var vn=30;function Re({start:t,bp:n,reversed:e},o){let r=vt(t,o),s=vt(t+n,o);if(s-r<1)return[(r+s)/2];let a=Math.ceil((s-r)/vn);return Array.from({length:a+1},(i,c)=>vt(t+n*(e?a-c:c)/a,o))}var An=Array.from({length:7},(t,n)=>({offset:n/6,color:bn(n/6*Qt)})),_e=`linear-gradient(to right, ${An.map(t=>`${t.color} ${t.offset*100}%`).join(", ")})`;var Cn=Yt();function Zt(t,n,e,o,r,s,a=!1){return Cn(t,[n,e.scaleX,e.scaleY,o,s,a,r],()=>{let i=new Map;for(let c=0;c<n.edges.length;c++){let l=o?.get(c),d=jt(t,n.edges[c],e,l,l&&s?.[c],a);d&&i.set(c,d)}return i})}var Sn=4;function wn(t){let n=new Map;for(let e of t.edges)J(n,e.from,e.to),J(n,e.to,e.from);return n}function In({nodeId:t,nodeById:n,neighbors:e}){let o=new Set([t]),r=[t],s=1/0,a=-1/0;for(let i=0;i<Sn&&r.length>0;i++){let c=[];for(let l of r){let d=e.get(l);if(d){for(let m of d)if(!o.has(m)){o.add(m);let h=n.get(m);h&&Q(h)?(s=Math.min(s,h.stable.start+h.length),a=Math.max(a,h.stable.start)):c.push(m)}}}r=c}return s===1/0?void 0:{start:Math.min(s,a),end:Math.max(s,a)}}function Tn({nodeId:t,nodeById:n,neighbors:e}){let o=n.get(t);return o===void 0?void 0:Q(o)?{start:o.stable.start,end:o.stable.start+o.length}:In({nodeId:t,nodeById:n,neighbors:e})}function tn(t){let n=new Map(t.nodes.map(r=>[r.id,r])),e=wn(t),o=new Map;for(let r of t.nodes){let s=Tn({nodeId:r.id,nodeById:n,neighbors:e});s&&o.set(r.id,(s.start+s.end)/2)}return o}var Nn=p(119,119,119,217),nn=p(136,136,136,217),Ln=p(24,24,28,240),On=2.2,ln=p(160,160,160,255),et=.18,He=Jt(j(ln,et)),kn=11,Pn=1.2,Dn=1e-6,Fn=7,Hn=3,Gn=3,Wn=1.5,en=3,Bn=.5,$n=.45,At=12,Xn=1e-6,I=new Float64Array(64),D=new Float64Array(64),F=new Float64Array(64);function Kn(t,n,e,o){let r=t.length*At+1;I.length<r&&(I=new Float64Array(r),D=new Float64Array(r),F=new Float64Array(r));let s=t[t.length-1];I[0]=s.x1,D[0]=s.y1,F[0]=0;let a=1,i=0;for(let c=t.length-1;c>=0&&i<o;c--){let l=t[c];for(let d=1;d<=At&&i<o;d++){let m=1-(d/At)**2,h=1-m,R=h*h*h,M=3*h*h*m,T=3*h*m*m,v=m*m*m,N=R*l.x0+M*l.cx0+T*l.cx1+v*l.x1,L=R*l.y0+M*l.cy0+T*l.cy1+v*l.y1;i+=Math.hypot(N-I[a-1],(L-D[a-1])*e)*n,I[a]=N,D[a]=L,F[a]=i,a++}}return a}function on(t,n){let e=1;for(;e<t-1&&F[e]<n;)e++;let o=F[e-1],r=F[e],s=r>o?Math.min(1,Math.max(0,(n-o)/(r-o))):0;return{x:I[e-1]+(I[e]-I[e-1])*s,y:D[e-1]+(D[e]-D[e-1])*s}}function Un({curves:t,edgeHalfWidth:n,nodeHalfWidth:e,scale:o,yToX:r,color:s,fromSegments:a,toSegments:i}){let c=Fn+Hn*n,l=Kn(t,o,r,e+en*c),d=F[l-1],m=d<Xn,h=Math.min(e,d),R=m?Math.min(1,Ut(a,o,o*r)/c):1;if(m?R<Bn:d<en*c)return;let M=on(l,h),T=on(l,h+c*R),v=M.x-T.x,N=(M.y-T.y)*r,L=t[t.length-1];return{x:M.x,y:M.y,angle:Math.hypot(v,N)>0?Math.atan2(N,v):ne(L,r,jn(L,i)),length:c*R,halfWidth:(Gn+Wn*n)*R,color:s}}function Yn(t,n,e,o,r){if(o)return $t(t).from==="start";let s=a=>Math.hypot(a.x-e.x0,(a.y-e.y0)*r);return s(n[0])<s(n.at(-1))}function jn(t,n){if(n.length<2)return;let e=n[0],o=n[n.length-1];return Math.hypot(t.x1-e.x,t.y1-e.y)<=Math.hypot(t.x1-o.x,t.y1-o.y)?{from:e,to:n[1]}:{from:o,to:n[n.length-2]}}function rn(t,n){if(!t||!n)return;let e=n.x-t.x,o=n.y-t.y,r=Math.hypot(e,o);return r>0?{nx:-o/r,ny:e/r}:void 0}function Ct(t,n=1){let e=n===1?t:t.map(o=>({x:o.x,y:o.y*n}));return e.map((o,r)=>{let s=rn(e[r-1],o),a=rn(o,e[r+1]);if(s&&a){let i=(s.nx+a.nx)/2,c=(s.ny+a.ny)/2,l=s.nx*i+s.ny*c;return l>.1?{nx:i/l,ny:c/l}:{nx:i,ny:c}}return s??a??{nx:0,ny:0}})}function sn(t,n,e,o=1){return t.map((r,s)=>({x:r.x+n[s].nx*e,y:r.y+n[s].ny*e/o}))}function wt(t,n,e){let o=(1-Math.abs(2*e-1))*n,r=o*(1-Math.abs(t/60%2-1)),s=e-o/2,a=0,i=0,c=0;return t<60?(a=o,i=r):t<120?(a=r,i=o):t<180?(i=o,c=r):t<240?(i=r,c=o):t<300?(a=r,c=o):(a=o,c=r),[a+s,i+s,c+s]}function ft(t,n,e,o=1){let[r,s,a]=wt(t,n,e);return p(Math.round(r*255),Math.round(s*255),Math.round(a*255),Math.round(o*255))}var Vn=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],zn=[[237,137,44],[158,42,122]],qn=[[220,50,50],[50,120,220]];function St(t,n){let e=Math.max(0,Math.min(1,n))*(t.length-1),o=Math.min(t.length-2,Math.floor(e)),r=e-o,s=t[o],a=t[o+1];return p(Math.round(s[0]+(a[0]-s[0])*r),Math.round(s[1]+(a[1]-s[1])*r),Math.round(s[2]+(a[2]-s[2])*r),255)}function Jn(t,n){return ft(Vt(t),Et,xt,n)}var fn=[60,65,72],It=p(...fn,255),Ge=`rgb(${fn.join(", ")})`;function Qn(t,n){let e=n.midpoints.get(t.id);return Q(t)&&e!==void 0?(e-n.start)/n.span:void 0}function We(t,n){let e=tn(t);if(n&&n.end>n.start)return{start:n.start,span:n.end-n.start,midpoints:e};let o=1/0,r=-1/0;for(let s of e.values())o=Math.min(o,s),r=Math.max(r,s);return{start:o===1/0?0:o,span:r>o?r-o:1,midpoints:e}}function Zn(t,n){let e=1/0,o=-1/0,r=1/0,s=-1/0,a=0;for(let i of t.nodes)i.stable!==void 0&&i.stable.rank>a&&(a=i.stable.rank),i.depth<e&&(e=i.depth),i.depth>o&&(o=i.depth),i.length<r&&(r=i.length),i.length>s&&(s=i.length);return{minDepth:e,maxDepth:o,minLength:r,maxLength:s,maxRank:a,nodeCount:t.nodes.length,referenceRamp:n}}function te(t,n,e,o){switch(e){case"random":return Jn(t.id,1);case"depth":return St(Vn,o.maxDepth>o.minDepth?(t.depth-o.minDepth)/(o.maxDepth-o.minDepth):.5);case"node-length":return St(qn,o.maxLength>o.minLength?(t.length-o.minLength)/(o.maxLength-o.minLength):.5);case"stable-rank":return t.stable===void 0?p(160,160,160,255):t.stable.rank===0?p(52,152,219,255):St(zn,o.maxRank>1?(t.stable.rank-1)/(o.maxRank-1):0);case"reference-position":{let r=o.referenceRamp;if(r===void 0)return p(160,160,160,255);let s=Qn(t,r);return s===void 0?It:ft(nt(s),Z,tt)}case"grey":return p(160,160,160,255);case"rainbow":{let r=o.nodeCount>1?n/o.nodeCount*360:0;return ft(r,.75,.5)}default:return p(52,152,219,255)}}function ne(t,n=1,e){let o=[[t.cx1,t.cy1],[t.cx0,t.cy0],[t.x0,t.y0]];for(let[r,s]of o){let a=t.x1-r,i=(t.y1-s)*n;if(Math.hypot(a,i)>0)return Math.atan2(i,a)}return e?Math.atan2((e.to.y-e.from.y)*n,e.to.x-e.from.x):0}function ee(t,n){let e=!1;for(let o=0;o<t.length-1&&!e;o++){let r=t[o],s=t[o+1];e=Math.max(r.x,s.x)>=n.minX&&Math.min(r.x,s.x)<=n.maxX&&Math.max(r.y,s.y)>=n.minY&&Math.min(r.y,s.y)<=n.maxY}return e}function oe(t,n){for(let e of t){let o=Math.min(e.x0,e.cx0,e.cx1,e.x1),r=Math.max(e.x0,e.cx0,e.cx1,e.x1),s=Math.min(e.y0,e.cy0,e.cy1,e.y1),a=Math.max(e.y0,e.cy0,e.cy1,e.y1);if(r>=n.minX&&o<=n.maxX&&a>=n.minY&&s<=n.maxY)return!0}return!1}var an=new WeakMap;function re(t){let n=an.get(t);if(!n){let e=[],o=new Map,r=t.paths??[];for(let s=0;s<r.length;s++)e.push(ft(zt(s,r.length),Et,xt,.85)),o.has(r[s].name)||o.set(r[s].name,s);n={pathColorByIndex:e,pathIndexByName:o},an.set(t,n)}return n}var cn=new WeakMap,se=new Map;function ae(t){let n=cn.get(t);if(!n){n=new Map;for(let[e,o]of(t.paths??[]).entries())for(let r of new Set(o.nodeIds))J(n,r,e);cn.set(t,n)}return n}function Be(t){let{nodePositions:n,graph:e,nodeById:o,colorScheme:r,contigThickness:s,connectorThickness:a,drawPaths:i,nodeWidth:c="uniform",highlight:l,axis:d,linearLayout:m,viewportBounds:h,referenceRamp:R,deletions:M,deletionRoutes:T,stranded:v,hiddenEdges:N,version:L=0}=t,ut=c==="depth"?qt(e):0,ot=d.scaleX,dt=1/Math.max(ot,Dn),_=Xt(d),gn=Zt(n,e,d,M,L,T,v),H=[],Ot=new Map,rt=[],kt=new Map,G=[],Pt=new Map,En=Zn(e,R),Dt=new Map;if(r==="rainbow")for(let f=0;f<e.nodes.length;f++)Dt.set(e.nodes[f].id,f);let mt=e.paths?.length??0,{pathColorByIndex:Ft,pathIndexByName:xn}=re(e),Mn=f=>Ft[xn.get(f)??-1]??nn,Rn=i&&mt>1?ae(e):se,_n=ot>(m?1:$n);for(let f=0;f<e.edges.length;f++){let u=e.edges[f],y=n[u.from],A=n[u.to],g=gn.get(f);if(!y?.length||!A?.length||!g||N?.has(f))continue;let W=u.pathIds?.length??0,V=M?.get(f)!==void 0,B=l?.edgeIndexes.has(f)??!1,$=a/2*(V?On:1),X=i&&W>0,O=V?Ln:Nn,C=!l||B?O:j(O,et),z=o.get(u.to),K=(z?lt(z,s,c,ut):s)/2,S=x=>!h||oe(x,h),k=(x,b,E)=>{if(V)for(let P of Bt(x,kn/ot,_,h))G.push({curves:P,thickness:b,color:E});else G.push({curves:x,thickness:b,color:E})},w=x=>{let b=_n?Un({curves:x,edgeHalfWidth:a/2,nodeHalfWidth:K,scale:ot,yToX:_,color:C,fromSegments:y,toSegments:A}):void 0;b&&rt.push(b)},U=G.length,at=rt.length,it=l?.walks.length&&B&&!X?l.walks:void 0;if(it){let x=o.get(u.from),b=x?lt(x,s,c,ut):s,E=Mt(b,it.length),P=Ct(y,_),{nx:ct,ny:q}=(Yn(u,y,g[0],v,_)?P[0]:P.at(-1))??{nx:0,ny:0};it.forEach((Y,yn)=>{if(!Y.edgeIndexes.has(f))return;let pt=(yn-(it.length-1)/2)*E*dt,Wt=pt===0?g:gt(g,ct*pt,q*pt/_);S(Wt)&&k(Wt,E/2,Y.colors.get(u.from)??Y.colors.get(u.to)??O)}),G.length>U&&w(g)}else if(!X)S(g)&&(k(g,$,C),w(g));else{let x=Kt(y,A,W,d),b=Math.floor((W-1)/2);for(let E=0;E<W;E++){let{x:P,y:ct}=x[E],q=P===0&&ct===0?g:gt(g,P,ct);if(!S(q))continue;let Y=Mn(u.pathIds[E]);k(q,$,l&&(l.walks.length?!l.names.has(u.pathIds[E]):!B)?j(Y,et):Y),E===b&&w(q)}}let Ht=G.length-U;Ht>0&&Pt.set(f,{start:U,count:Ht});let Gt=rt.length-at;Gt>0&&kt.set(f,{start:at,count:Gt})}for(let[f,u]of Object.entries(n)){let y=o.get(f);if(!y||h&&!ee(u,h))continue;let A=l!==void 0&&!l.nodeIds.has(f),g=A?ln:te(y,Dt.get(f)??0,r,En),W=A?j(g,et):g,st=lt(y,s,c,ut),V=st/2,B=H.length,$=Rn.get(f),X=st/mt,O=u.length>=2,C=l?.walks.length&&!A&&!$?.length?l.walks:void 0;if(O&&C){let K=Mt(st,C.length),S=Ct(u,_);C.forEach((k,w)=>{let U=k.colors.get(f);if(U===void 0)return;let at=(w-(C.length-1)/2)*K*dt;H.push({points:C.length===1?u:sn(u,S,at,_),thickness:K/2,color:U})})}else if(O&&$?.length&&X>=Pn){let K=Ct(u,_);for(let S of $){let k=(S-(mt-1)/2)*X*dt,w=Ft[S]??nn;H.push({points:sn(u,K,k,_),thickness:X/2,color:A?j(w,et):w})}}else O&&H.push({points:u,thickness:V,color:W});let z=H.length-B;z>0&&Ot.set(f,{start:B,count:z})}return{nodeStrokes:H,nodeStrokeRuns:Ot,arrows:rt,arrowRuns:kt,edgeCurves:G,edgeCurveRuns:Pt}}var un=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],Nt=[{value:"grey",label:"Grey to black",ends:["#a3a3a3","#151515"]},{value:"blue",label:"Cyan to navy",ends:["#6ee0f0","#0b2c7a"]},{value:"red",label:"Yellow to red",ends:["#ffd24a","#b3121b"]},{value:"purple",label:"Pink to plum",ends:["#f5a3d8","#5e1a6e"]},{value:"green",label:"Lime to forest",ends:["#b6e36c","#0b5d3b"]},{value:"rainbow",label:"Rainbow"}],hn=["blue","red","purple","green"],ie=t=>un.some(n=>n.value===t),ce=t=>Nt.some(n=>n.value===t);function le(t,n,e,o=!0){let{field:r,scheme:s}=t.color??{},a=ie(r)?r:o?"progress":"walk",i=n?"grey":hn[e%hn.length],c=ce(s)?s==="rainbow"&&a!=="reference"?i:s:i;return{field:a,scheme:c}}var dn=.5,fe=t=>t<=.04045?t/12.92:((t+.055)/1.055)**2.4,he=t=>t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;function ue(t){let[n,e,o]=[1,3,5].map(i=>fe(Number.parseInt(t.slice(i,i+2),16)/255)),r=Math.cbrt(.4122214708*n+.5363325363*e+.0514459929*o),s=Math.cbrt(.2119034982*n+.6806995451*e+.1073969566*o),a=Math.cbrt(.0883024619*n+.2817188376*e+.6299787005*o);return[.2104542553*r+.793617785*s-.0040720468*a,1.9779984951*r-2.428592205*s+.4505937099*a,.0259040371*r+.7827717662*s-.808675766*a]}function de([t,n,e]){let o=(t+.3963377774*n+.2158037573*e)**3,r=(t-.1055613458*n-.0638541728*e)**3,s=(t-.0894841775*n-1.291485548*e)**3;return[4.0767416621*o-3.3077115913*r+.2309699292*s,-1.2684380046*o+2.6097574011*r-.3413193965*s,-.0041960863*o-.7034186147*r+1.707614701*s].map(a=>he(Math.max(0,Math.min(1,a)))*255)}var Tt=new Map;function me(t){if(!Tt.has(t)){let n=Nt.find(e=>e.value===t);Tt.set(t,n&&"ends"in n?n.ends.map(ue):void 0)}return Tt.get(t)}function Lt(t,n){let e=Math.max(0,Math.min(1,n)),o=me(t);if(!o)return wt(nt(e),Z,tt).map(a=>a*255);let[r,s]=o;return de(r.map((a,i)=>a+(s[i]-a)*e))}function mn(t,n){let[e,o,r]=Lt(t,n).map(Math.round);return`rgb(${e}, ${o}, ${r})`}function ht(t,n){let[e,o,r]=Lt(t,n).map(Math.round);return p(e,o,r,255)}function pe({field:t,scheme:n},e){return t==="walk"?ht(n,dn):e===void 0?pn:ht(n,e)}var pn=It;function ge({field:t,scheme:n}){let e=(o,r)=>({offset:o,color:mn(n,r),abgr:ht(n,r)});return t==="walk"?[e(0,dn)]:Array.from({length:7},(o,r)=>e(r/6,r/6))}export{wn as a,Tn as b,p as c,Jt as d,Ee as e,j as f,xe as g,bn as h,Re as i,An as j,_e as k,Zt as l,He as m,wt as n,Ge as o,Qn as p,We as q,Zn as r,te as s,Be as t,un as u,Nt as v,le as w,pe as x,pn as y,ge as z};
2
- //# sourceMappingURL=chunk-S75MFZDE.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-G2FD7S3C.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-GQZVR5DW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-XTF2VWJN.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-VX656OAZ.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-VB4IXIPM.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-I5SGYTRM.js"],
4
- "sourcesContent": ["// src/renderer/colorBits.ts\nfunction packAbgr(r, g, b, a) {\n return (a << 24 | b << 16 | g << 8 | r) >>> 0;\n}\nfunction abgrRed(c) {\n return c & 255;\n}\nfunction abgrGreen(c) {\n return c >>> 8 & 255;\n}\nfunction abgrBlue(c) {\n return c >>> 16 & 255;\n}\nfunction abgrAlpha(c) {\n return c >>> 24 & 255;\n}\nfunction abgrToCssRgba(c) {\n return `rgba(${abgrRed(c)},${abgrGreen(c)},${abgrBlue(c)},${abgrAlpha(c) / 255})`;\n}\nfunction normalizedRgbToCssRgba(c, alpha) {\n return `rgba(${Math.round(c[0] * 255)},${Math.round(c[1] * 255)},${Math.round(c[2] * 255)},${alpha})`;\n}\nfunction fadeAbgr(c, alpha) {\n return packAbgr(\n abgrRed(c),\n abgrGreen(c),\n abgrBlue(c),\n Math.round(abgrAlpha(c) * alpha)\n );\n}\nfunction brightenAbgr(c, factor) {\n const t = Math.max(0, 1 - 1 / factor);\n const lift = (v) => Math.round(v + (255 - v) * t);\n return packAbgr(\n lift(abgrRed(c)),\n lift(abgrGreen(c)),\n lift(abgrBlue(c)),\n abgrAlpha(c)\n );\n}\n\nexport {\n packAbgr,\n abgrRed,\n abgrGreen,\n abgrBlue,\n abgrAlpha,\n abgrToCssRgba,\n normalizedRgbToCssRgba,\n fadeAbgr,\n brightenAbgr\n};\n", "// src/referenceRampCss.ts\nvar REFERENCE_RAMP_MAX_HUE = 300;\nvar REFERENCE_RAMP_SATURATION = 0.7;\nvar REFERENCE_RAMP_LIGHTNESS = 0.5;\nfunction rampHueCss(hue) {\n return `hsl(${hue}, ${REFERENCE_RAMP_SATURATION * 100}%, ${REFERENCE_RAMP_LIGHTNESS * 100}%)`;\n}\nfunction rampHueAt(frac) {\n return Math.max(0, Math.min(1, frac)) * REFERENCE_RAMP_MAX_HUE;\n}\nfunction rampHue(bp, domain) {\n return rampHueAt((bp - domain.start) / (domain.end - domain.start));\n}\nvar HUE_STOP_DEG = 30;\nfunction rampStops({ start, bp, reversed }, domain) {\n const low = rampHue(start, domain);\n const high = rampHue(start + bp, domain);\n if (high - low < 1) {\n return [(low + high) / 2];\n }\n const n = Math.ceil((high - low) / HUE_STOP_DEG);\n return Array.from(\n { length: n + 1 },\n (_, i) => rampHue(start + bp * (reversed ? n - i : i) / n, domain)\n );\n}\nvar RAMP_GRADIENT_STOPS = Array.from({ length: 7 }, (_, i) => ({\n offset: i / 6,\n color: rampHueCss(i / 6 * REFERENCE_RAMP_MAX_HUE)\n}));\nvar RAMP_GRADIENT_CSS = `linear-gradient(to right, ${RAMP_GRADIENT_STOPS.map(\n (s) => `${s.color} ${s.offset * 100}%`\n).join(\", \")})`;\n\nexport {\n REFERENCE_RAMP_MAX_HUE,\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS,\n rampHueCss,\n rampHueAt,\n rampHue,\n rampStops,\n RAMP_GRADIENT_STOPS,\n RAMP_GRADIENT_CSS\n};\n", "import {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n edgeCurvesOf\n} from \"./chunk-5NZRT7GL.js\";\n\n// src/util/edgeCurves.ts\nvar cache = weakMemo();\nfunction baseEdgeCurves(nodePositions, graph, axis, deletions, version, routes, stranded = false) {\n return cache(\n nodePositions,\n [graph, axis.scaleX, axis.scaleY, deletions, routes, stranded, version],\n () => {\n const curves = /* @__PURE__ */ new Map();\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const bypassed = deletions?.get(ei);\n const edgeCurves = edgeCurvesOf(\n nodePositions,\n graph.edges[ei],\n axis,\n bypassed,\n bypassed && routes?.[ei],\n stranded\n );\n if (edgeCurves) {\n curves.set(ei, edgeCurves);\n }\n }\n return curves;\n }\n );\n}\n\nexport {\n baseEdgeCurves\n};\n", "import {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/referenceSpan.ts\nvar MAX_BACKBONE_HOPS = 4;\nfunction buildNeighbors(graph) {\n const neighbors = /* @__PURE__ */ new Map();\n for (const edge of graph.edges) {\n pushTo(neighbors, edge.from, edge.to);\n pushTo(neighbors, edge.to, edge.from);\n }\n return neighbors;\n}\nfunction flankingSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const seen = /* @__PURE__ */ new Set([nodeId]);\n let frontier = [nodeId];\n let minEnd = Infinity;\n let maxStart = -Infinity;\n for (let hop = 0; hop < MAX_BACKBONE_HOPS && frontier.length > 0; hop++) {\n const next = [];\n for (const id of frontier) {\n const adjacent = neighbors.get(id);\n if (adjacent) {\n for (const neighborId of adjacent) {\n if (!seen.has(neighborId)) {\n seen.add(neighborId);\n const neighbor = nodeById.get(neighborId);\n if (neighbor && isBackbone(neighbor)) {\n minEnd = Math.min(minEnd, neighbor.stable.start + neighbor.length);\n maxStart = Math.max(maxStart, neighbor.stable.start);\n } else {\n next.push(neighborId);\n }\n }\n }\n }\n }\n frontier = next;\n }\n return minEnd === Infinity ? void 0 : {\n start: Math.min(minEnd, maxStart),\n end: Math.max(minEnd, maxStart)\n };\n}\nfunction nodeReferenceSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const node = nodeById.get(nodeId);\n return node === void 0 ? void 0 : isBackbone(node) ? { start: node.stable.start, end: node.stable.start + node.length } : flankingSpan({ nodeId, nodeById, neighbors });\n}\nfunction referenceMidpoints(graph) {\n const nodeById = new Map(graph.nodes.map((node) => [node.id, node]));\n const neighbors = buildNeighbors(graph);\n const midpoints = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const span = nodeReferenceSpan({ nodeId: node.id, nodeById, neighbors });\n if (span) {\n midpoints.set(node.id, (span.start + span.end) / 2);\n }\n }\n return midpoints;\n}\n\nexport {\n buildNeighbors,\n nodeReferenceSpan,\n referenceMidpoints\n};\n", "import {\n abgrToCssRgba,\n fadeAbgr,\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n REFERENCE_RAMP_LIGHTNESS,\n REFERENCE_RAMP_SATURATION,\n rampHueAt\n} from \"./chunk-GQZVR5DW.js\";\nimport {\n baseEdgeCurves\n} from \"./chunk-XTF2VWJN.js\";\nimport {\n PATH_LIGHTNESS,\n PATH_SATURATION,\n nameHue,\n pathHueAt\n} from \"./chunk-3UGWYQNY.js\";\nimport {\n meanDepth,\n nodeWidthPx,\n walkLaneWidthPx\n} from \"./chunk-ZANALBSX.js\";\nimport {\n referenceMidpoints\n} from \"./chunk-VX656OAZ.js\";\nimport {\n dashCurves,\n pathRibbonOffsets,\n polylinePx,\n strandSides,\n translateCurves,\n yToXOf\n} from \"./chunk-VACK24HF.js\";\nimport {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/renderer/GeometryBuilder.ts\nvar EDGE_DEFAULT_COLOR = packAbgr(119, 119, 119, 217);\nvar EDGE_PATH_FALLBACK_COLOR = packAbgr(136, 136, 136, 217);\nvar EDGE_DELETION_COLOR = packAbgr(24, 24, 28, 240);\nvar DELETION_THICKNESS_FACTOR = 2.2;\nvar LIFT_BACKDROP_COLOR = packAbgr(160, 160, 160, 255);\nvar FADED_ALPHA = 0.18;\nvar LIFT_BACKDROP_CSS = abgrToCssRgba(\n fadeAbgr(LIFT_BACKDROP_COLOR, FADED_ALPHA)\n);\nvar DELETION_DASH_PX = 11;\nvar MIN_PATH_STRIPE_PX = 1.2;\nvar MIN_SCALE_FOR_OFFSET = 1e-6;\nvar ARROW_LENGTH_BASE_PX = 7;\nvar ARROW_LENGTH_PER_EDGE_PX = 3;\nvar ARROW_HALF_WIDTH_BASE_PX = 3;\nvar ARROW_HALF_WIDTH_PER_EDGE_PX = 1.5;\nvar MIN_LINK_HEADS = 3;\nvar MIN_ARROW_FIT = 0.5;\nvar MIN_ARROW_SCALE = 0.45;\nvar ARROW_CURVE_STEPS = 12;\nvar ABUTTING_PX = 1e-6;\nvar walkX = new Float64Array(64);\nvar walkY = new Float64Array(64);\nvar walkPx = new Float64Array(64);\nfunction backFromEnd(curves, scale, yToX, untilPx) {\n const most = curves.length * ARROW_CURVE_STEPS + 1;\n if (walkX.length < most) {\n walkX = new Float64Array(most);\n walkY = new Float64Array(most);\n walkPx = new Float64Array(most);\n }\n const last = curves[curves.length - 1];\n walkX[0] = last.x1;\n walkY[0] = last.y1;\n walkPx[0] = 0;\n let n = 1;\n let px = 0;\n for (let ci = curves.length - 1; ci >= 0 && px < untilPx; ci--) {\n const c = curves[ci];\n for (let k = 1; k <= ARROW_CURVE_STEPS && px < untilPx; k++) {\n const t = 1 - (k / ARROW_CURVE_STEPS) ** 2;\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n const x = a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1;\n const y = a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1;\n px += Math.hypot(x - walkX[n - 1], (y - walkY[n - 1]) * yToX) * scale;\n walkX[n] = x;\n walkY[n] = y;\n walkPx[n] = px;\n n++;\n }\n }\n return n;\n}\nfunction walkPointAt(n, px) {\n let i = 1;\n while (i < n - 1 && walkPx[i] < px) {\n i++;\n }\n const from = walkPx[i - 1];\n const to = walkPx[i];\n const f = to > from ? Math.min(1, Math.max(0, (px - from) / (to - from))) : 0;\n return {\n x: walkX[i - 1] + (walkX[i] - walkX[i - 1]) * f,\n y: walkY[i - 1] + (walkY[i] - walkY[i - 1]) * f\n };\n}\nfunction arrowheadFor({\n curves,\n edgeHalfWidth,\n nodeHalfWidth,\n scale,\n yToX,\n color,\n fromSegments,\n toSegments\n}) {\n const length = ARROW_LENGTH_BASE_PX + ARROW_LENGTH_PER_EDGE_PX * edgeHalfWidth;\n const n = backFromEnd(\n curves,\n scale,\n yToX,\n nodeHalfWidth + MIN_LINK_HEADS * length\n );\n const lengthPx = walkPx[n - 1];\n const abutting = lengthPx < ABUTTING_PX;\n const inset = Math.min(nodeHalfWidth, lengthPx);\n const fit = abutting ? Math.min(1, polylinePx(fromSegments, scale, scale * yToX) / length) : 1;\n if (abutting ? fit < MIN_ARROW_FIT : lengthPx < MIN_LINK_HEADS * length) {\n return void 0;\n }\n const tip = walkPointAt(n, inset);\n const base = walkPointAt(n, inset + length * fit);\n const dx = tip.x - base.x;\n const dy = (tip.y - base.y) * yToX;\n const last = curves[curves.length - 1];\n return {\n x: tip.x,\n y: tip.y,\n angle: Math.hypot(dx, dy) > 0 ? Math.atan2(dy, dx) : endTangent(last, yToX, intoDirection(last, toSegments)),\n length: length * fit,\n halfWidth: (ARROW_HALF_WIDTH_BASE_PX + ARROW_HALF_WIDTH_PER_EDGE_PX * edgeHalfWidth) * fit,\n color\n };\n}\nfunction leavesStart(edge, segments, first, stranded, yToX) {\n if (stranded) {\n return strandSides(edge).from === \"start\";\n }\n const gap = (p) => Math.hypot(p.x - first.x0, (p.y - first.y0) * yToX);\n return gap(segments[0]) < gap(segments.at(-1));\n}\nfunction intoDirection(last, toSegments) {\n if (toSegments.length < 2) {\n return void 0;\n }\n const first = toSegments[0];\n const final = toSegments[toSegments.length - 1];\n const atStart = Math.hypot(last.x1 - first.x, last.y1 - first.y) <= Math.hypot(last.x1 - final.x, last.y1 - final.y);\n return atStart ? { from: first, to: toSegments[1] } : { from: final, to: toSegments[toSegments.length - 2] };\n}\nfunction normal(a, b) {\n if (!a || !b) {\n return void 0;\n }\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len = Math.hypot(dx, dy);\n return len > 0 ? { nx: -dy / len, ny: dx / len } : void 0;\n}\nfunction pointNormalsOf(rawPoints, yToX = 1) {\n const points = yToX === 1 ? rawPoints : rawPoints.map((p) => ({ x: p.x, y: p.y * yToX }));\n return points.map((p, i) => {\n const before = normal(points[i - 1], p);\n const after = normal(p, points[i + 1]);\n if (before && after) {\n const nx = (before.nx + after.nx) / 2;\n const ny = (before.ny + after.ny) / 2;\n const dot = before.nx * nx + before.ny * ny;\n return dot > 0.1 ? { nx: nx / dot, ny: ny / dot } : { nx, ny };\n }\n return before ?? after ?? { nx: 0, ny: 0 };\n });\n}\nfunction offsetPolyline(points, normals, distance, yToX = 1) {\n return points.map((p, i) => ({\n x: p.x + normals[i].nx * distance,\n y: p.y + normals[i].ny * distance / yToX\n }));\n}\nfunction hslToRgb(h, s, l) {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n return [r + m, g + m, b + m];\n}\nfunction packHsl(h, s, l, a = 1) {\n const [r, g, b] = hslToRgb(h, s, l);\n return packAbgr(\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n Math.round(a * 255)\n );\n}\nvar DEPTH_GRADIENT = [\n [68, 1, 84],\n [59, 82, 139],\n [33, 145, 140],\n [94, 201, 98],\n [253, 231, 37]\n];\nvar STABLE_RANK_GRADIENT = [\n [237, 137, 44],\n [158, 42, 122]\n];\nvar NODE_LENGTH_GRADIENT = [\n [220, 50, 50],\n [50, 120, 220]\n];\nfunction sampleGradient(stops, t) {\n const pos = Math.max(0, Math.min(1, t)) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(pos));\n const f = pos - i;\n const a = stops[i];\n const b = stops[i + 1];\n return packAbgr(\n Math.round(a[0] + (b[0] - a[0]) * f),\n Math.round(a[1] + (b[1] - a[1]) * f),\n Math.round(a[2] + (b[2] - a[2]) * f),\n 255\n );\n}\nfunction hashColor(str, alpha) {\n return packHsl(nameHue(str), PATH_SATURATION, PATH_LIGHTNESS, alpha);\n}\nvar REFERENCE_RAMP_ALT_RGB = [60, 65, 72];\nvar REFERENCE_RAMP_ALT_COLOR = packAbgr(...REFERENCE_RAMP_ALT_RGB, 255);\nvar REFERENCE_RAMP_ALT_CSS = `rgb(${REFERENCE_RAMP_ALT_RGB.join(\", \")})`;\nfunction rampFraction(node, ramp) {\n const mid = ramp.midpoints.get(node.id);\n return isBackbone(node) && mid !== void 0 ? (mid - ramp.start) / ramp.span : void 0;\n}\nfunction computeReferenceRamp(graph, domain) {\n const midpoints = referenceMidpoints(graph);\n if (domain && domain.end > domain.start) {\n return {\n start: domain.start,\n span: domain.end - domain.start,\n midpoints\n };\n }\n let min = Infinity;\n let max = -Infinity;\n for (const mid of midpoints.values()) {\n min = Math.min(min, mid);\n max = Math.max(max, mid);\n }\n return {\n start: min === Infinity ? 0 : min,\n span: max > min ? max - min : 1,\n midpoints\n };\n}\nfunction computeColorSchemeRange(graph, referenceRamp) {\n let minDepth = Infinity;\n let maxDepth = -Infinity;\n let minLength = Infinity;\n let maxLength = -Infinity;\n let maxRank = 0;\n for (const n of graph.nodes) {\n if (n.stable !== void 0 && n.stable.rank > maxRank) {\n maxRank = n.stable.rank;\n }\n if (n.depth < minDepth) {\n minDepth = n.depth;\n }\n if (n.depth > maxDepth) {\n maxDepth = n.depth;\n }\n if (n.length < minLength) {\n minLength = n.length;\n }\n if (n.length > maxLength) {\n maxLength = n.length;\n }\n }\n return {\n minDepth,\n maxDepth,\n minLength,\n maxLength,\n maxRank,\n nodeCount: graph.nodes.length,\n referenceRamp\n };\n}\nfunction getNodeColor(node, nodeIndex, colorScheme, range) {\n switch (colorScheme) {\n case \"random\":\n return hashColor(node.id, 1);\n case \"depth\":\n return sampleGradient(\n DEPTH_GRADIENT,\n range.maxDepth > range.minDepth ? (node.depth - range.minDepth) / (range.maxDepth - range.minDepth) : 0.5\n );\n case \"node-length\":\n return sampleGradient(\n NODE_LENGTH_GRADIENT,\n range.maxLength > range.minLength ? (node.length - range.minLength) / (range.maxLength - range.minLength) : 0.5\n );\n // rGFA states the backbone rather than leaving it to be inferred: rank 0 is\n // the reference, higher ranks are the sequence that diverges from it. A\n // graph with no SR tags draws every node as unranked.\n case \"stable-rank\":\n return node.stable === void 0 ? packAbgr(160, 160, 160, 255) : node.stable.rank === 0 ? packAbgr(52, 152, 219, 255) : sampleGradient(\n STABLE_RANK_GRADIENT,\n range.maxRank > 1 ? (node.stable.rank - 1) / (range.maxRank - 1) : 0\n );\n // Position on the reference, the one quantity both panels of a\n // graph-over-linear figure can state, so only the backbone takes a hue\n case \"reference-position\": {\n const ramp = range.referenceRamp;\n if (ramp === void 0) {\n return packAbgr(160, 160, 160, 255);\n }\n const t = rampFraction(node, ramp);\n return t === void 0 ? REFERENCE_RAMP_ALT_COLOR : packHsl(\n rampHueAt(t),\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n );\n }\n case \"grey\":\n return packAbgr(160, 160, 160, 255);\n case \"rainbow\": {\n const hue = range.nodeCount > 1 ? nodeIndex / range.nodeCount * 360 : 0;\n return packHsl(hue, 0.75, 0.5);\n }\n default:\n return packAbgr(52, 152, 219, 255);\n }\n}\nfunction endTangent(c, yToX = 1, into) {\n const candidates = [\n [c.cx1, c.cy1],\n [c.cx0, c.cy0],\n [c.x0, c.y0]\n ];\n for (const [x, y] of candidates) {\n const dx = c.x1 - x;\n const dy = (c.y1 - y) * yToX;\n if (Math.hypot(dx, dy) > 0) {\n return Math.atan2(dy, dx);\n }\n }\n return into ? Math.atan2((into.to.y - into.from.y) * yToX, into.to.x - into.from.x) : 0;\n}\nfunction isPolylineInBounds(segments, bounds) {\n let hit = false;\n for (let i = 0; i < segments.length - 1 && !hit; i++) {\n const a = segments[i];\n const b = segments[i + 1];\n hit = Math.max(a.x, b.x) >= bounds.minX && Math.min(a.x, b.x) <= bounds.maxX && Math.max(a.y, b.y) >= bounds.minY && Math.min(a.y, b.y) <= bounds.maxY;\n }\n return hit;\n}\nfunction isBezierInBounds(curves, bounds) {\n for (const c of curves) {\n const cMinX = Math.min(c.x0, c.cx0, c.cx1, c.x1);\n const cMaxX = Math.max(c.x0, c.cx0, c.cx1, c.x1);\n const cMinY = Math.min(c.y0, c.cy0, c.cy1, c.y1);\n const cMaxY = Math.max(c.y0, c.cy0, c.cy1, c.y1);\n if (cMaxX >= bounds.minX && cMinX <= bounds.maxX && cMaxY >= bounds.minY && cMinY <= bounds.maxY) {\n return true;\n }\n }\n return false;\n}\nvar paletteCache = /* @__PURE__ */ new WeakMap();\nfunction pathPaletteOf(graph) {\n let palette = paletteCache.get(graph);\n if (!palette) {\n const pathColorByIndex = [];\n const pathIndexByName = /* @__PURE__ */ new Map();\n const paths = graph.paths ?? [];\n for (let i = 0; i < paths.length; i++) {\n pathColorByIndex.push(\n packHsl(\n pathHueAt(i, paths.length),\n PATH_SATURATION,\n PATH_LIGHTNESS,\n 0.85\n )\n );\n if (!pathIndexByName.has(paths[i].name)) {\n pathIndexByName.set(paths[i].name, i);\n }\n }\n palette = { pathColorByIndex, pathIndexByName };\n paletteCache.set(graph, palette);\n }\n return palette;\n}\nvar slotsCache = /* @__PURE__ */ new WeakMap();\nvar NO_SLOTS = /* @__PURE__ */ new Map();\nfunction pathSlotsOf(graph) {\n let slots = slotsCache.get(graph);\n if (!slots) {\n slots = /* @__PURE__ */ new Map();\n for (const [pathIdx, path] of (graph.paths ?? []).entries()) {\n for (const nodeId of new Set(path.nodeIds)) {\n pushTo(slots, nodeId, pathIdx);\n }\n }\n slotsCache.set(graph, slots);\n }\n return slots;\n}\nfunction buildGeometry(options) {\n const {\n nodePositions,\n graph,\n nodeById,\n colorScheme,\n contigThickness,\n connectorThickness,\n drawPaths,\n nodeWidth = \"uniform\",\n highlight,\n axis,\n linearLayout,\n viewportBounds,\n referenceRamp,\n deletions,\n deletionRoutes,\n stranded,\n hiddenEdges,\n version = 0\n } = options;\n const depthNorm = nodeWidth === \"depth\" ? meanDepth(graph) : 0;\n const scale = axis.scaleX;\n const worldPerScreenPx = 1 / Math.max(scale, MIN_SCALE_FOR_OFFSET);\n const yToX = yToXOf(axis);\n const sharedCurves = baseEdgeCurves(\n nodePositions,\n graph,\n axis,\n deletions,\n version,\n deletionRoutes,\n stranded\n );\n const nodeStrokes = [];\n const nodeStrokeRuns = /* @__PURE__ */ new Map();\n const arrows = [];\n const arrowRuns = /* @__PURE__ */ new Map();\n const edgeCurves = [];\n const edgeCurveRuns = /* @__PURE__ */ new Map();\n const colorRange = computeColorSchemeRange(graph, referenceRamp);\n const nodeIndexMap = /* @__PURE__ */ new Map();\n if (colorScheme === \"rainbow\") {\n for (let i = 0; i < graph.nodes.length; i++) {\n nodeIndexMap.set(graph.nodes[i].id, i);\n }\n }\n const pathCount = graph.paths?.length ?? 0;\n const { pathColorByIndex, pathIndexByName } = pathPaletteOf(graph);\n const pathColorByName = (name) => pathColorByIndex[pathIndexByName.get(name) ?? -1] ?? EDGE_PATH_FALLBACK_COLOR;\n const nodePathSlots = drawPaths && pathCount > 1 ? pathSlotsOf(graph) : NO_SLOTS;\n const showArrows = scale > (linearLayout ? 1 : MIN_ARROW_SCALE);\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const edge = graph.edges[ei];\n const fromSegments = nodePositions[edge.from];\n const toSegments = nodePositions[edge.to];\n const baseCurves = sharedCurves.get(ei);\n if (!fromSegments?.length || !toSegments?.length || !baseCurves || hiddenEdges?.has(ei)) {\n continue;\n }\n const numPaths = edge.pathIds?.length ?? 0;\n const bypassed = deletions?.get(ei);\n const isDeletion = bypassed !== void 0;\n const onWalk = highlight?.edgeIndexes.has(ei) ?? false;\n const edgeThickness = connectorThickness / 2 * (isDeletion ? DELETION_THICKNESS_FACTOR : 1);\n const ribbons = drawPaths && numPaths > 0;\n const plainEdgeColor = isDeletion ? EDGE_DELETION_COLOR : EDGE_DEFAULT_COLOR;\n const edgeColor = !highlight || onWalk ? plainEdgeColor : fadeAbgr(plainEdgeColor, FADED_ALPHA);\n const toNode = nodeById.get(edge.to);\n const intoHalfWidth = (toNode ? nodeWidthPx(toNode, contigThickness, nodeWidth, depthNorm) : contigThickness) / 2;\n const inView = (curves) => !viewportBounds || isBezierInBounds(curves, viewportBounds);\n const stroke = (curves, thickness, color) => {\n if (isDeletion) {\n for (const dash of dashCurves(\n curves,\n DELETION_DASH_PX / scale,\n yToX,\n viewportBounds\n )) {\n edgeCurves.push({ curves: dash, thickness, color });\n }\n } else {\n edgeCurves.push({ curves, thickness, color });\n }\n };\n const arrowOn = (curves) => {\n const head = showArrows ? arrowheadFor({\n curves,\n edgeHalfWidth: connectorThickness / 2,\n nodeHalfWidth: intoHalfWidth,\n scale,\n yToX,\n color: edgeColor,\n fromSegments,\n toSegments\n }) : void 0;\n if (head) {\n arrows.push(head);\n }\n };\n const edgeCurveStart = edgeCurves.length;\n const arrowStart = arrows.length;\n const laneWalks = highlight?.walks.length && onWalk && !ribbons ? highlight.walks : void 0;\n if (laneWalks) {\n const fromNode = nodeById.get(edge.from);\n const width = fromNode ? nodeWidthPx(fromNode, contigThickness, nodeWidth, depthNorm) : contigThickness;\n const laneWidth = walkLaneWidthPx(width, laneWalks.length);\n const normals = pointNormalsOf(fromSegments, yToX);\n const { nx, ny } = (leavesStart(\n edge,\n fromSegments,\n baseCurves[0],\n stranded,\n yToX\n ) ? normals[0] : normals.at(-1)) ?? {\n nx: 0,\n ny: 0\n };\n laneWalks.forEach((walk, lane) => {\n if (!walk.edgeIndexes.has(ei)) {\n return;\n }\n const offset = (lane - (laneWalks.length - 1) / 2) * laneWidth * worldPerScreenPx;\n const curves = offset === 0 ? baseCurves : translateCurves(baseCurves, nx * offset, ny * offset / yToX);\n if (inView(curves)) {\n stroke(\n curves,\n laneWidth / 2,\n walk.colors.get(edge.from) ?? walk.colors.get(edge.to) ?? plainEdgeColor\n );\n }\n });\n if (edgeCurves.length > edgeCurveStart) {\n arrowOn(baseCurves);\n }\n } else if (!ribbons) {\n if (inView(baseCurves)) {\n stroke(baseCurves, edgeThickness, edgeColor);\n arrowOn(baseCurves);\n }\n } else {\n const offsets = pathRibbonOffsets(\n fromSegments,\n toSegments,\n numPaths,\n axis\n );\n const arrowRibbon = Math.floor((numPaths - 1) / 2);\n for (let pathIdx = 0; pathIdx < numPaths; pathIdx++) {\n const { x, y } = offsets[pathIdx];\n const curves = x === 0 && y === 0 ? baseCurves : translateCurves(baseCurves, x, y);\n if (!inView(curves)) {\n continue;\n }\n const ribbonColor = pathColorByName(edge.pathIds[pathIdx]);\n stroke(\n curves,\n edgeThickness,\n highlight && (highlight.walks.length ? !highlight.names.has(edge.pathIds[pathIdx]) : !onWalk) ? fadeAbgr(ribbonColor, FADED_ALPHA) : ribbonColor\n );\n if (pathIdx === arrowRibbon) {\n arrowOn(curves);\n }\n }\n }\n const edgeCurveCount = edgeCurves.length - edgeCurveStart;\n if (edgeCurveCount > 0) {\n edgeCurveRuns.set(ei, { start: edgeCurveStart, count: edgeCurveCount });\n }\n const arrowCount = arrows.length - arrowStart;\n if (arrowCount > 0) {\n arrowRuns.set(ei, { start: arrowStart, count: arrowCount });\n }\n }\n for (const [nodeId, segments] of Object.entries(nodePositions)) {\n const node = nodeById.get(nodeId);\n if (!node) {\n continue;\n }\n if (viewportBounds && !isPolylineInBounds(segments, viewportBounds)) {\n continue;\n }\n const faded = highlight !== void 0 && !highlight.nodeIds.has(nodeId);\n const own = faded ? LIFT_BACKDROP_COLOR : getNodeColor(\n node,\n nodeIndexMap.get(nodeId) ?? 0,\n colorScheme,\n colorRange\n );\n const color = faded ? fadeAbgr(own, FADED_ALPHA) : own;\n const width = nodeWidthPx(node, contigThickness, nodeWidth, depthNorm);\n const nodeThickness = width / 2;\n const start = nodeStrokes.length;\n const slots = nodePathSlots.get(nodeId);\n const slotWidth = width / pathCount;\n const drawable = segments.length >= 2;\n const lanes = highlight?.walks.length && !faded && !slots?.length ? highlight.walks : void 0;\n if (drawable && lanes) {\n const laneWidth = walkLaneWidthPx(width, lanes.length);\n const normals = pointNormalsOf(segments, yToX);\n lanes.forEach((walk, lane) => {\n const laneColor = walk.colors.get(nodeId);\n if (laneColor === void 0) {\n return;\n }\n const offset = (lane - (lanes.length - 1) / 2) * laneWidth * worldPerScreenPx;\n nodeStrokes.push({\n points: lanes.length === 1 ? segments : offsetPolyline(segments, normals, offset, yToX),\n thickness: laneWidth / 2,\n color: laneColor\n });\n });\n } else if (drawable && slots?.length && slotWidth >= MIN_PATH_STRIPE_PX) {\n const normals = pointNormalsOf(segments, yToX);\n for (const slot of slots) {\n const offset = (slot - (pathCount - 1) / 2) * slotWidth * worldPerScreenPx;\n const stripe = pathColorByIndex[slot] ?? EDGE_PATH_FALLBACK_COLOR;\n nodeStrokes.push({\n points: offsetPolyline(segments, normals, offset, yToX),\n thickness: slotWidth / 2,\n // a node off the lifted walk fades whichever way it is painted\n color: faded ? fadeAbgr(stripe, FADED_ALPHA) : stripe\n });\n }\n } else if (drawable) {\n nodeStrokes.push({ points: segments, thickness: nodeThickness, color });\n }\n const count = nodeStrokes.length - start;\n if (count > 0) {\n nodeStrokeRuns.set(nodeId, { start, count });\n }\n }\n return {\n nodeStrokes,\n nodeStrokeRuns,\n arrows,\n arrowRuns,\n edgeCurves,\n edgeCurveRuns\n };\n}\n\nexport {\n LIFT_BACKDROP_COLOR,\n FADED_ALPHA,\n LIFT_BACKDROP_CSS,\n hslToRgb,\n REFERENCE_RAMP_ALT_COLOR,\n REFERENCE_RAMP_ALT_CSS,\n rampFraction,\n computeReferenceRamp,\n computeColorSchemeRange,\n getNodeColor,\n endTangent,\n buildGeometry\n};\n", "import {\n REFERENCE_RAMP_ALT_COLOR,\n hslToRgb\n} from \"./chunk-VB4IXIPM.js\";\nimport {\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n REFERENCE_RAMP_LIGHTNESS,\n REFERENCE_RAMP_SATURATION,\n rampHueAt\n} from \"./chunk-GQZVR5DW.js\";\n\n// src/walkEncoding.ts\nvar WALK_FIELDS = [\n { value: \"progress\", label: \"Progress along the walk\" },\n { value: \"walk\", label: \"One colour for the walk\" },\n { value: \"reference\", label: \"Reference position\" }\n];\nvar WALK_SCHEMES = [\n { value: \"grey\", label: \"Grey to black\", ends: [\"#a3a3a3\", \"#151515\"] },\n { value: \"blue\", label: \"Cyan to navy\", ends: [\"#6ee0f0\", \"#0b2c7a\"] },\n { value: \"red\", label: \"Yellow to red\", ends: [\"#ffd24a\", \"#b3121b\"] },\n { value: \"purple\", label: \"Pink to plum\", ends: [\"#f5a3d8\", \"#5e1a6e\"] },\n { value: \"green\", label: \"Lime to forest\", ends: [\"#b6e36c\", \"#0b5d3b\"] },\n { value: \"rainbow\", label: \"Rainbow\" }\n];\nvar FAMILIES = [\"blue\", \"red\", \"purple\", \"green\"];\nvar isField = (v) => WALK_FIELDS.some((f) => f.value === v);\nvar isScheme = (v) => WALK_SCHEMES.some((s) => s.value === v);\nfunction resolveEncoding(layer, reference, picked, alone = true) {\n const { field: askedField, scheme: askedScheme } = layer.color ?? {};\n const field = isField(askedField) ? askedField : alone ? \"progress\" : \"walk\";\n const family = reference ? \"grey\" : FAMILIES[picked % FAMILIES.length];\n const scheme = isScheme(askedScheme) ? askedScheme === \"rainbow\" && field !== \"reference\" ? family : askedScheme : family;\n return { field, scheme };\n}\nvar BASE_T = 0.5;\nvar toLinear = (c) => c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\nvar toGamma = (c) => c <= 31308e-7 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055;\nfunction oklab(hex) {\n const [r, g, b] = [1, 3, 5].map(\n (i) => toLinear(Number.parseInt(hex.slice(i, i + 2), 16) / 255)\n );\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\n return [\n 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n ];\n}\nfunction oklabToRgb([L, a, b]) {\n const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3;\n return [\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s\n ].map((c) => toGamma(Math.max(0, Math.min(1, c))) * 255);\n}\nvar endsCache = /* @__PURE__ */ new Map();\nfunction oklabEnds(scheme) {\n if (!endsCache.has(scheme)) {\n const family = WALK_SCHEMES.find((s) => s.value === scheme);\n endsCache.set(\n scheme,\n family && \"ends\" in family ? family.ends.map(oklab) : void 0\n );\n }\n return endsCache.get(scheme);\n}\nfunction schemeRgb(scheme, t) {\n const x = Math.max(0, Math.min(1, t));\n const ends = oklabEnds(scheme);\n if (!ends) {\n return hslToRgb(\n rampHueAt(x),\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n ).map((c) => c * 255);\n }\n const [from, to] = ends;\n return oklabToRgb(from.map((v, i) => v + (to[i] - v) * x));\n}\nfunction schemeCss(scheme, t) {\n const [r, g, b] = schemeRgb(scheme, t).map(Math.round);\n return `rgb(${r}, ${g}, ${b})`;\n}\nfunction schemeColor(scheme, t) {\n const [r, g, b] = schemeRgb(scheme, t).map(Math.round);\n return packAbgr(r, g, b, 255);\n}\nfunction encodedColor({ field, scheme }, t) {\n return field === \"walk\" ? schemeColor(scheme, BASE_T) : t === void 0 ? NO_VALUE_COLOR : schemeColor(scheme, t);\n}\nvar NO_VALUE_COLOR = REFERENCE_RAMP_ALT_COLOR;\nfunction encodingStops({ field, scheme }) {\n const stop = (offset, t) => ({\n offset,\n color: schemeCss(scheme, t),\n abgr: schemeColor(scheme, t)\n });\n return field === \"walk\" ? [stop(0, BASE_T)] : Array.from({ length: 7 }, (_, i) => stop(i / 6, i / 6));\n}\nfunction encodingSwatchCss(encoding) {\n const stops = encodingStops(encoding);\n return stops.length === 1 ? stops[0].color : `linear-gradient(to right, ${stops.map((s) => `${s.color} ${s.offset * 100}%`).join(\", \")})`;\n}\n\nexport {\n WALK_FIELDS,\n WALK_SCHEMES,\n resolveEncoding,\n schemeRgb,\n schemeCss,\n schemeColor,\n encodedColor,\n NO_VALUE_COLOR,\n encodingStops,\n encodingSwatchCss\n};\n"],
5
- "mappings": "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",
6
- "names": ["packAbgr", "r", "g", "b", "a", "abgrRed", "c", "abgrGreen", "abgrBlue", "abgrAlpha", "abgrToCssRgba", "normalizedRgbToCssRgba", "alpha", "fadeAbgr", "brightenAbgr", "factor", "t", "lift", "v", "REFERENCE_RAMP_MAX_HUE", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "rampHueCss", "hue", "rampHueAt", "frac", "rampHue", "bp", "domain", "HUE_STOP_DEG", "rampStops", "start", "reversed", "low", "high", "n", "_", "i", "RAMP_GRADIENT_STOPS", "RAMP_GRADIENT_CSS", "s", "cache", "weakMemo", "baseEdgeCurves", "nodePositions", "graph", "axis", "deletions", "version", "routes", "stranded", "curves", "ei", "bypassed", "edgeCurves", "edgeCurvesOf", "MAX_BACKBONE_HOPS", "buildNeighbors", "graph", "neighbors", "edge", "pushTo", "flankingSpan", "nodeId", "nodeById", "seen", "frontier", "minEnd", "maxStart", "hop", "next", "id", "adjacent", "neighborId", "neighbor", "isBackbone", "nodeReferenceSpan", "node", "referenceMidpoints", "midpoints", "span", "EDGE_DEFAULT_COLOR", "packAbgr", "EDGE_PATH_FALLBACK_COLOR", "EDGE_DELETION_COLOR", "DELETION_THICKNESS_FACTOR", "LIFT_BACKDROP_COLOR", "FADED_ALPHA", "LIFT_BACKDROP_CSS", "abgrToCssRgba", "fadeAbgr", "DELETION_DASH_PX", "MIN_PATH_STRIPE_PX", "MIN_SCALE_FOR_OFFSET", "ARROW_LENGTH_BASE_PX", "ARROW_LENGTH_PER_EDGE_PX", "ARROW_HALF_WIDTH_BASE_PX", "ARROW_HALF_WIDTH_PER_EDGE_PX", "MIN_LINK_HEADS", "MIN_ARROW_FIT", "MIN_ARROW_SCALE", "ARROW_CURVE_STEPS", "ABUTTING_PX", "walkX", "walkY", "walkPx", "backFromEnd", "curves", "scale", "yToX", "untilPx", "most", "last", "n", "px", "ci", "c", "k", "t", "u", "a", "b", "d", "e", "x", "y", "walkPointAt", "i", "from", "to", "f", "arrowheadFor", "edgeHalfWidth", "nodeHalfWidth", "color", "fromSegments", "toSegments", "length", "lengthPx", "abutting", "inset", "fit", "polylinePx", "tip", "base", "dx", "dy", "endTangent", "intoDirection", "leavesStart", "edge", "segments", "first", "stranded", "strandSides", "gap", "p", "final", "normal", "len", "pointNormalsOf", "rawPoints", "points", "before", "after", "nx", "ny", "dot", "offsetPolyline", "normals", "distance", "hslToRgb", "h", "s", "l", "m", "r", "g", "packHsl", "DEPTH_GRADIENT", "STABLE_RANK_GRADIENT", "NODE_LENGTH_GRADIENT", "sampleGradient", "stops", "pos", "hashColor", "str", "alpha", "nameHue", "PATH_SATURATION", "PATH_LIGHTNESS", "REFERENCE_RAMP_ALT_RGB", "REFERENCE_RAMP_ALT_COLOR", "REFERENCE_RAMP_ALT_CSS", "rampFraction", "node", "ramp", "mid", "isBackbone", "computeReferenceRamp", "graph", "domain", "midpoints", "referenceMidpoints", "min", "max", "computeColorSchemeRange", "referenceRamp", "minDepth", "maxDepth", "minLength", "maxLength", "maxRank", "getNodeColor", "nodeIndex", "colorScheme", "range", "rampHueAt", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "hue", "into", "candidates", "isPolylineInBounds", "bounds", "hit", "isBezierInBounds", "cMinX", "cMaxX", "cMinY", "cMaxY", "paletteCache", "pathPaletteOf", "palette", "pathColorByIndex", "pathIndexByName", "paths", "pathHueAt", "slotsCache", "NO_SLOTS", "pathSlotsOf", "slots", "pathIdx", "path", "nodeId", "pushTo", "buildGeometry", "options", "nodePositions", "nodeById", "contigThickness", "connectorThickness", "drawPaths", "nodeWidth", "highlight", "axis", "linearLayout", "viewportBounds", "deletions", "deletionRoutes", "hiddenEdges", "version", "depthNorm", "meanDepth", "worldPerScreenPx", "yToXOf", "sharedCurves", "baseEdgeCurves", "nodeStrokes", "nodeStrokeRuns", "arrows", "arrowRuns", "edgeCurves", "edgeCurveRuns", "colorRange", "nodeIndexMap", "pathCount", "pathColorByName", "name", "nodePathSlots", "showArrows", "ei", "baseCurves", "numPaths", "isDeletion", "onWalk", "edgeThickness", "ribbons", "plainEdgeColor", "edgeColor", "toNode", "intoHalfWidth", "nodeWidthPx", "inView", "stroke", "thickness", "dash", "dashCurves", "arrowOn", "head", "edgeCurveStart", "arrowStart", "laneWalks", "fromNode", "width", "laneWidth", "walkLaneWidthPx", "walk", "lane", "offset", "translateCurves", "offsets", "pathRibbonOffsets", "arrowRibbon", "ribbonColor", "edgeCurveCount", "arrowCount", "faded", "own", "nodeThickness", "start", "slotWidth", "drawable", "lanes", "laneColor", "slot", "stripe", "count", "WALK_FIELDS", "WALK_SCHEMES", "FAMILIES", "isField", "v", "f", "isScheme", "s", "resolveEncoding", "layer", "reference", "picked", "alone", "askedField", "askedScheme", "field", "family", "scheme", "BASE_T", "toLinear", "c", "toGamma", "oklab", "hex", "r", "g", "b", "l", "m", "oklabToRgb", "L", "a", "endsCache", "oklabEnds", "schemeRgb", "t", "x", "ends", "hslToRgb", "rampHueAt", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "from", "to", "schemeCss", "schemeColor", "packAbgr", "encodedColor", "NO_VALUE_COLOR", "REFERENCE_RAMP_ALT_COLOR", "encodingStops", "stop", "offset", "_", "i"]
7
- }