jbrowse-plugin-graphgenomeviewer 8.2.0 → 8.3.1

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 (77) hide show
  1. package/dist/chunks/{AddTrackWorkflow-7CXTSSMR.js → AddTrackWorkflow-JAIB6H2T.js} +2 -2
  2. package/dist/chunks/{GbzBaseSyntenyAdapter-EJIR3HZM.js → GbzBaseSyntenyAdapter-Y5VUDFZP.js} +2 -2
  3. package/dist/chunks/{GbzBaseSyntenyAdapter-EJIR3HZM.js.map → GbzBaseSyntenyAdapter-Y5VUDFZP.js.map} +1 -1
  4. package/dist/chunks/{GraphGenomeView-2AKRM74B.js → GraphGenomeView-VW3PEHFP.js} +2 -2
  5. package/dist/chunks/{GraphTrackSettingsDialog-7XRZQW6T.js → GraphTrackSettingsDialog-TT5TXM5I.js} +2 -2
  6. package/dist/chunks/{HighlightColorDialog-LCBGD2ZA.js → HighlightColorDialog-R3EIOO2M.js} +2 -2
  7. package/dist/chunks/{LinearGraphDisplay-WWQ73BO5.js → LinearGraphDisplay-OBD4R5G3.js} +2 -2
  8. package/dist/chunks/{MinigraphBubbleAdapter-4OOBJ44C.js → MinigraphBubbleAdapter-QXISPSHM.js} +2 -2
  9. package/dist/chunks/{RgfaTabixAdapter-CEGFN2QY.js → RgfaTabixAdapter-SVZ5SSEY.js} +2 -2
  10. package/dist/chunks/{WalkFormsAdapter-LTAKACZD.js → WalkFormsAdapter-6LK2XCHQ.js} +2 -2
  11. package/dist/chunks/{WalkTabixSyntenyAdapter-B6V3YNW7.js → WalkTabixSyntenyAdapter-LA22PX4I.js} +2 -2
  12. package/dist/chunks/{chunk-MCBYBZZJ.js → chunk-5ZGRAPN5.js} +2 -2
  13. package/dist/chunks/{chunk-NOXHIOIM.js → chunk-73B6AYVV.js} +2 -2
  14. package/dist/chunks/{chunk-W7IHIVSE.js → chunk-AUQISDXJ.js} +2 -2
  15. package/dist/chunks/{chunk-W7IHIVSE.js.map → chunk-AUQISDXJ.js.map} +1 -1
  16. package/dist/chunks/{chunk-VKZALU57.js → chunk-B2MJV7HN.js} +1 -1
  17. package/dist/chunks/{chunk-VKZALU57.js.map → chunk-B2MJV7HN.js.map} +1 -1
  18. package/dist/chunks/{chunk-CNCYMJ5E.js → chunk-DL2S7QKE.js} +2 -2
  19. package/dist/chunks/{chunk-CNCYMJ5E.js.map → chunk-DL2S7QKE.js.map} +1 -1
  20. package/dist/chunks/{chunk-OGXVDZPS.js → chunk-DSKPOCCE.js} +2 -2
  21. package/dist/chunks/{chunk-OGXVDZPS.js.map → chunk-DSKPOCCE.js.map} +1 -1
  22. package/dist/chunks/{chunk-UHV6XIDG.js → chunk-EKGY6PG2.js} +2 -2
  23. package/dist/chunks/{chunk-UHV6XIDG.js.map → chunk-EKGY6PG2.js.map} +1 -1
  24. package/dist/chunks/{chunk-QWG7NASD.js → chunk-G3L2L62S.js} +2 -2
  25. package/dist/chunks/{chunk-OLZZDBQJ.js → chunk-GIIUVBOH.js} +2 -2
  26. package/dist/chunks/{chunk-OLZZDBQJ.js.map → chunk-GIIUVBOH.js.map} +2 -2
  27. package/dist/chunks/{chunk-CZXJXNZN.js → chunk-HAVM67SF.js} +2 -2
  28. package/dist/chunks/{chunk-UECOGSWM.js → chunk-IUBWMYUA.js} +2 -2
  29. package/dist/chunks/{chunk-UECOGSWM.js.map → chunk-IUBWMYUA.js.map} +1 -1
  30. package/dist/chunks/{chunk-SL4JJJQJ.js → chunk-MHIKXNVU.js} +3 -3
  31. package/dist/chunks/{chunk-SL4JJJQJ.js.map → chunk-MHIKXNVU.js.map} +2 -2
  32. package/dist/chunks/{chunk-IK3MQ4ZJ.js → chunk-NAC3EXT4.js} +2 -2
  33. package/dist/chunks/{chunk-IK3MQ4ZJ.js.map → chunk-NAC3EXT4.js.map} +1 -1
  34. package/dist/chunks/{chunk-CVHKXFVS.js → chunk-NSBH4FIW.js} +2 -2
  35. package/dist/chunks/{chunk-CVHKXFVS.js.map → chunk-NSBH4FIW.js.map} +1 -1
  36. package/dist/chunks/{chunk-BJHWGRMP.js → chunk-PEE2MP7K.js} +1 -1
  37. package/dist/chunks/{chunk-BJHWGRMP.js.map → chunk-PEE2MP7K.js.map} +1 -1
  38. package/dist/chunks/{chunk-T2VC3EEL.js → chunk-PMM6BEKY.js} +1 -1
  39. package/dist/chunks/{chunk-T2VC3EEL.js.map → chunk-PMM6BEKY.js.map} +1 -1
  40. package/dist/chunks/chunk-QATGAV57.js +2 -0
  41. package/dist/chunks/chunk-QATGAV57.js.map +7 -0
  42. package/dist/chunks/{chunk-PTOKTIQG.js → chunk-TMFUYJFG.js} +2 -2
  43. package/dist/chunks/{chunk-WUOXZAGN.js → chunk-WA7FCDLQ.js} +1 -1
  44. package/dist/chunks/{chunk-WUOXZAGN.js.map → chunk-WA7FCDLQ.js.map} +1 -1
  45. package/dist/chunks/chunk-WO3MEQ25.js +2 -0
  46. package/dist/chunks/chunk-ZEE3HTOT.js +2 -0
  47. package/dist/chunks/chunk-ZEE3HTOT.js.map +7 -0
  48. package/dist/chunks/{renderSvg-E5Q7MLCH.js → renderSvg-2DPRP5UX.js} +2 -2
  49. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +2 -2
  50. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +2 -2
  51. package/package.json +2 -2
  52. package/src/GraphAddTrackWorkflow/buildTrackConfig.test.ts +18 -0
  53. package/src/GraphAddTrackWorkflow/buildTrackConfig.ts +10 -0
  54. package/src/GraphAddTrackWorkflow/graphManifest.test.ts +12 -0
  55. package/src/GraphAddTrackWorkflow/graphManifest.ts +10 -2
  56. package/src/version.ts +1 -1
  57. package/dist/chunks/chunk-5FNGR33G.js +0 -2
  58. package/dist/chunks/chunk-5FNGR33G.js.map +0 -7
  59. package/dist/chunks/chunk-CZI7IP5S.js +0 -2
  60. package/dist/chunks/chunk-CZI7IP5S.js.map +0 -7
  61. package/dist/chunks/chunk-HAAABGE7.js +0 -2
  62. /package/dist/chunks/{AddTrackWorkflow-7CXTSSMR.js.map → AddTrackWorkflow-JAIB6H2T.js.map} +0 -0
  63. /package/dist/chunks/{GraphGenomeView-2AKRM74B.js.map → GraphGenomeView-VW3PEHFP.js.map} +0 -0
  64. /package/dist/chunks/{GraphTrackSettingsDialog-7XRZQW6T.js.map → GraphTrackSettingsDialog-TT5TXM5I.js.map} +0 -0
  65. /package/dist/chunks/{HighlightColorDialog-LCBGD2ZA.js.map → HighlightColorDialog-R3EIOO2M.js.map} +0 -0
  66. /package/dist/chunks/{LinearGraphDisplay-WWQ73BO5.js.map → LinearGraphDisplay-OBD4R5G3.js.map} +0 -0
  67. /package/dist/chunks/{MinigraphBubbleAdapter-4OOBJ44C.js.map → MinigraphBubbleAdapter-QXISPSHM.js.map} +0 -0
  68. /package/dist/chunks/{RgfaTabixAdapter-CEGFN2QY.js.map → RgfaTabixAdapter-SVZ5SSEY.js.map} +0 -0
  69. /package/dist/chunks/{WalkFormsAdapter-LTAKACZD.js.map → WalkFormsAdapter-6LK2XCHQ.js.map} +0 -0
  70. /package/dist/chunks/{WalkTabixSyntenyAdapter-B6V3YNW7.js.map → WalkTabixSyntenyAdapter-LA22PX4I.js.map} +0 -0
  71. /package/dist/chunks/{chunk-MCBYBZZJ.js.map → chunk-5ZGRAPN5.js.map} +0 -0
  72. /package/dist/chunks/{chunk-NOXHIOIM.js.map → chunk-73B6AYVV.js.map} +0 -0
  73. /package/dist/chunks/{chunk-QWG7NASD.js.map → chunk-G3L2L62S.js.map} +0 -0
  74. /package/dist/chunks/{chunk-CZXJXNZN.js.map → chunk-HAVM67SF.js.map} +0 -0
  75. /package/dist/chunks/{chunk-PTOKTIQG.js.map → chunk-TMFUYJFG.js.map} +0 -0
  76. /package/dist/chunks/{chunk-HAAABGE7.js.map → chunk-WO3MEQ25.js.map} +0 -0
  77. /package/dist/chunks/{renderSvg-E5Q7MLCH.js.map → renderSvg-2DPRP5UX.js.map} +0 -0
@@ -1,2 +1,2 @@
1
- import{a as u}from"./chunk-VKZALU57.js";function b(t,s,e){let n=t.get(s);n?n.push(e):t.set(s,[e])}function S(t,s,e){let n=t.get(s);n?n.add(e):t.set(s,new Set([e]))}function m(t,s){let e=new Map;for(let n of t)b(e,s(n),n);return e}function g(t,s){let e=0,n=t;for(;e<n;){let r=e+n>>1;s(r)?e=r+1:n=r}return e}var l=0;function _(t){return t.stable!==void 0}function w(t){return t.stable?.rank===l}function G(t){return t.stable!==void 0&&t.stable.rank>l}function U(t){return t.nodes.filter(w)}function C(t,s){return t.stable.start<s.end&&t.stable.start+t.length>s.start}function K(t){let s={};for(let e of t)s[e.id]=[{x:e.stable.start,y:0},{x:e.stable.start+e.length,y:0}];return s}function T(t,s){return g(t.length,e=>t[e].stable.start<s)}function y(t){let s=1/0,e=-1/0;for(let n of t)s=Math.min(s,n.stable.start),e=Math.max(e,n.stable.start+n.length);return e-s}function $(t,s){return s&&s.end>s.start?s.end-s.start:y(t)}var A=class{constructor(t){this.segments=t.segments,this.offsets=t.offsets,this.path=t.path,this.start=t.start,this.reversed=t.reversed,this.paths=t.paths,this.samples=t.samples,this.slots=new Map(this.segments.map((s,e)=>[s,e]))}static from(t){let s=new d;for(let[e,n]of t){s.declare(e);for(let r of n)s.add(e,r.path,r.sample,r.start,r.strand==="-")}return s.build()}get size(){return this.segments.length}slot(t){return this.slots.get(t)??-1}pathIndex(t){return this.paths.indexOf(t)}firstBy(t,s){for(let e=this.offsets[t];e<this.offsets[t+1];e++)if(this.path[e]===s)return e;return-1}firstByName(t){let s=this.offsets[t];for(let e=s+1;e<this.offsets[t+1];e++){let n=this.paths[this.path[e]],r=this.paths[this.path[s]];(n<r||n===r&&this.start[e]<this.start[s])&&(s=e)}return s}replay(){let t=new Map;return(s,e)=>{if(s<0||e<0)return-1;let n=s*this.paths.length+e,r=this.offsets[s+1],a=t.get(n)??this.offsets[s];for(;a<r&&this.path[a]!==e;)a++;return t.set(n,a+1),a<r?a:-1}}filter(t,s=()=>!0){let e=this.paths.map(t),n=new d;return this.segments.forEach((r,a)=>{if(!s(r))return;let h=n.declare(r);for(let o=this.offsets[a];o<this.offsets[a+1];o++){let i=this.path[o];e[i]&&n.addAt(h,n.pathOf(this.paths[i],this.samples[i]),this.start[o],this.reversed[o]===1)}}),n.build()}strand(t){return this.reversed[t]?"-":"+"}visit(t){let s=this.path[t];return{path:this.paths[s],sample:this.samples[s],start:this.start[t],strand:this.strand(t)}}visitsAt(t){let s=[];for(let e=this.offsets[t];e<this.offsets[t+1];e++)s.push(this.visit(e));return s}get(t){let s=this.slot(t);return s<0?void 0:this.visitsAt(s)}has(t){return this.slots.has(t)}keys(){return this.segments[Symbol.iterator]()}*values(){for(let t=0;t<this.segments.length;t++)yield this.visitsAt(t)}*entries(){for(let t=0;t<this.segments.length;t++)yield[this.segments[t],this.visitsAt(t)]}[Symbol.iterator](){return this.entries()}},p=class{constructor(t){this.data=t,this.length=0}push(t){if(this.length===this.data.length){let s=new this.data.constructor(this.data.length*2);s.set(this.data),this.data=s}this.data[this.length++]=t}},d=class{constructor(){this.segments=[],this.slots=new Map,this.paths=[],this.samples=[],this.pathIndex=new Map,this.slot=new p(new Int32Array(1024)),this.path=new p(new Int32Array(1024)),this.start=new p(new Float64Array(1024)),this.reversed=new p(new Uint8Array(1024))}declare(t){let s=this.slots.get(t);return s===void 0&&(s=this.segments.length,this.slots.set(t,s),this.segments.push(t)),s}pathOf(t,s){let e=this.pathIndex.get(t);return e===void 0&&(e=this.paths.length,this.pathIndex.set(t,e),this.paths.push(t),this.samples.push(s)),e}add(t,s,e,n,r){this.addAt(this.declare(t),this.pathOf(s,e),n,r)}addAt(t,s,e,n){this.slot.push(t),this.path.push(s),this.start.push(e),this.reversed.push(n?1:0)}build(){let t=this.slot.length,s=this.segments.length,e=new Int32Array(s+1),n=this.slot.data;for(let i=0;i<t;i++)e[n[i]+1]++;for(let i=0;i<s;i++)e[i+1]+=e[i];let r=e.slice(0,s),a=new Int32Array(t),h=new Float64Array(t),o=new Uint8Array(t);for(let i=0;i<t;i++){let f=r[n[i]]++;a[f]=this.path.data[i],h[f]=this.start.data[i],o[f]=this.reversed.data[i]}return new A({segments:this.segments,offsets:e,path:a,start:h,reversed:o,paths:this.paths,samples:this.samples})}};var v=/:(\d+)-\d+$/,x=/^([^#]*#[^#]*#[^#[]*)#(\d+)(?:\[(\d+)-\d+\])?$/,I=/\[(\d+)-\d+\]$/;function E(t){let s=x.exec(t);if(s)return{name:s[1],start:+s[2]+ +(s[3]??0)};let e=v.exec(t)??I.exec(t);return e?{name:t.slice(0,e.index),start:+e[1]}:{name:t,start:0}}function Q(t,s){let e=[],n=new d;for(let r of t){let a=u(r.name),h=n.pathOf(r.name,a),o=r.start;for(let i of r.steps)n.addAt(n.declare(i.id),h,o,i.strand==="-"),o+=s(i.id);e.push({name:r.name,sample:a,start:r.start,length:o-r.start})}return{anchorPaths:e,pathVisits:n.build()}}function P(t,s){return t.find(n=>n.sample===s||n.name===s)??t[0]}var R=1;function N(t,s,e,n){let r=s.slot(t.name);if(r<0||s.offsets[r]===s.offsets[r+1])return t;let a=s.firstBy(r,e),h=a>=0?a:s.firstByName(r);return{...t,stable:{refName:s.paths[s.path[h]],start:s.start[h],rank:a>=0?l:R,strand:s.strand(h)},samples:n(r)}}function O(t){let s=[...new Set(t.samples)].sort(),e=new Map(s.map((h,o)=>[h,o])),n=Int32Array.from(t.samples,h=>e.get(h)),r=new Uint8Array(s.length),a=new Int32Array(s.length);return h=>{let o=0;for(let f=t.offsets[h];f<t.offsets[h+1];f++){let c=n[t.path[f]];r[c]===0&&(r[c]=1,a[o++]=c)}let i;if(o===s.length)i=s,r.fill(0);else if(o*8<s.length){let f=a.subarray(0,o);f.forEach(c=>r[c]=0),i=Array.from(f.sort(),c=>s[c])}else{i=[];for(let f=0;f<s.length;f++)r[f]===1&&(r[f]=0,i.push(s[f]))}return i}}function k(t,s){let{anchorPaths:e,pathVisits:n}=t,r=e&&n?P(e,s):void 0;if(!r||!e||!n)return t;let a=O(n),h=n.pathIndex(r.name);return{...t,nodes:t.nodes.map(o=>N(o,n,h,a)),anchoredBy:"paths",referencePath:r.name}}function Y(t,s){if(t.anchoredBy!=="tags")return k(t,s);let e=B(t);return e?{...t,referencePath:e}:t}function B(t){let s=t.nodes.find(e=>e.stable?.rank===0)?.stable?.refName;return s!==void 0&&t.anchorPaths?.some(e=>e.name===s)?s:void 0}function Z(t,s){if(!t.anchorPaths)return;let e=new Map(t.nodes.map(a=>[a.id,a.length])),n=(a,h=a.length)=>{let o=0;for(let i=0;i<h;i++)o+=e.get(a[i])??0;return o},r=m(t.paths??[],a=>E(a.name).name);return t.anchorPaths.map(a=>{let h=r.get(a.name),o=h?.length===1?h[0]:void 0,i=o&&s.get(o.name);return o&&i?{...a,start:a.start+n(o.nodeIds,i.first),length:n(i.nodeIds)}:a})}function tt(t){let{pathVisits:s}=t,e=new Map;return n=>{let r=e.get(n.id);if(!r){r=[];let a=s?s.slot(n.name):-1,h=a>=0?s.pathIndex(n.stable.refName):-1;if(h>=0)for(let o=s.offsets[a];o<s.offsets[a+1];o++)s.path[o]===h&&r.push(s.start[o]);r.length<2&&(r=[n.stable.start]),e.set(n.id,r)}return r}}export{b as a,S as b,m as c,g as d,l as e,_ as f,w as g,G as h,U as i,C as j,K as k,T as l,y as m,$ as n,A as o,p,d as q,E as r,Q as s,P as t,k as u,Y as v,Z as w,tt as x};
2
- //# sourceMappingURL=chunk-IK3MQ4ZJ.js.map
1
+ import{a as u}from"./chunk-B2MJV7HN.js";function b(t,s,e){let n=t.get(s);n?n.push(e):t.set(s,[e])}function S(t,s,e){let n=t.get(s);n?n.add(e):t.set(s,new Set([e]))}function m(t,s){let e=new Map;for(let n of t)b(e,s(n),n);return e}function g(t,s){let e=0,n=t;for(;e<n;){let r=e+n>>1;s(r)?e=r+1:n=r}return e}var l=0;function _(t){return t.stable!==void 0}function w(t){return t.stable?.rank===l}function G(t){return t.stable!==void 0&&t.stable.rank>l}function U(t){return t.nodes.filter(w)}function C(t,s){return t.stable.start<s.end&&t.stable.start+t.length>s.start}function K(t){let s={};for(let e of t)s[e.id]=[{x:e.stable.start,y:0},{x:e.stable.start+e.length,y:0}];return s}function T(t,s){return g(t.length,e=>t[e].stable.start<s)}function y(t){let s=1/0,e=-1/0;for(let n of t)s=Math.min(s,n.stable.start),e=Math.max(e,n.stable.start+n.length);return e-s}function $(t,s){return s&&s.end>s.start?s.end-s.start:y(t)}var A=class{constructor(t){this.segments=t.segments,this.offsets=t.offsets,this.path=t.path,this.start=t.start,this.reversed=t.reversed,this.paths=t.paths,this.samples=t.samples,this.slots=new Map(this.segments.map((s,e)=>[s,e]))}static from(t){let s=new d;for(let[e,n]of t){s.declare(e);for(let r of n)s.add(e,r.path,r.sample,r.start,r.strand==="-")}return s.build()}get size(){return this.segments.length}slot(t){return this.slots.get(t)??-1}pathIndex(t){return this.paths.indexOf(t)}firstBy(t,s){for(let e=this.offsets[t];e<this.offsets[t+1];e++)if(this.path[e]===s)return e;return-1}firstByName(t){let s=this.offsets[t];for(let e=s+1;e<this.offsets[t+1];e++){let n=this.paths[this.path[e]],r=this.paths[this.path[s]];(n<r||n===r&&this.start[e]<this.start[s])&&(s=e)}return s}replay(){let t=new Map;return(s,e)=>{if(s<0||e<0)return-1;let n=s*this.paths.length+e,r=this.offsets[s+1],a=t.get(n)??this.offsets[s];for(;a<r&&this.path[a]!==e;)a++;return t.set(n,a+1),a<r?a:-1}}filter(t,s=()=>!0){let e=this.paths.map(t),n=new d;return this.segments.forEach((r,a)=>{if(!s(r))return;let h=n.declare(r);for(let o=this.offsets[a];o<this.offsets[a+1];o++){let i=this.path[o];e[i]&&n.addAt(h,n.pathOf(this.paths[i],this.samples[i]),this.start[o],this.reversed[o]===1)}}),n.build()}strand(t){return this.reversed[t]?"-":"+"}visit(t){let s=this.path[t];return{path:this.paths[s],sample:this.samples[s],start:this.start[t],strand:this.strand(t)}}visitsAt(t){let s=[];for(let e=this.offsets[t];e<this.offsets[t+1];e++)s.push(this.visit(e));return s}get(t){let s=this.slot(t);return s<0?void 0:this.visitsAt(s)}has(t){return this.slots.has(t)}keys(){return this.segments[Symbol.iterator]()}*values(){for(let t=0;t<this.segments.length;t++)yield this.visitsAt(t)}*entries(){for(let t=0;t<this.segments.length;t++)yield[this.segments[t],this.visitsAt(t)]}[Symbol.iterator](){return this.entries()}},p=class{constructor(t){this.data=t,this.length=0}push(t){if(this.length===this.data.length){let s=new this.data.constructor(this.data.length*2);s.set(this.data),this.data=s}this.data[this.length++]=t}},d=class{constructor(){this.segments=[],this.slots=new Map,this.paths=[],this.samples=[],this.pathIndex=new Map,this.slot=new p(new Int32Array(1024)),this.path=new p(new Int32Array(1024)),this.start=new p(new Float64Array(1024)),this.reversed=new p(new Uint8Array(1024))}declare(t){let s=this.slots.get(t);return s===void 0&&(s=this.segments.length,this.slots.set(t,s),this.segments.push(t)),s}pathOf(t,s){let e=this.pathIndex.get(t);return e===void 0&&(e=this.paths.length,this.pathIndex.set(t,e),this.paths.push(t),this.samples.push(s)),e}add(t,s,e,n,r){this.addAt(this.declare(t),this.pathOf(s,e),n,r)}addAt(t,s,e,n){this.slot.push(t),this.path.push(s),this.start.push(e),this.reversed.push(n?1:0)}build(){let t=this.slot.length,s=this.segments.length,e=new Int32Array(s+1),n=this.slot.data;for(let i=0;i<t;i++)e[n[i]+1]++;for(let i=0;i<s;i++)e[i+1]+=e[i];let r=e.slice(0,s),a=new Int32Array(t),h=new Float64Array(t),o=new Uint8Array(t);for(let i=0;i<t;i++){let f=r[n[i]]++;a[f]=this.path.data[i],h[f]=this.start.data[i],o[f]=this.reversed.data[i]}return new A({segments:this.segments,offsets:e,path:a,start:h,reversed:o,paths:this.paths,samples:this.samples})}};var v=/:(\d+)-\d+$/,x=/^([^#]*#[^#]*#[^#[]*)#(\d+)(?:\[(\d+)-\d+\])?$/,I=/\[(\d+)-\d+\]$/;function E(t){let s=x.exec(t);if(s)return{name:s[1],start:+s[2]+ +(s[3]??0)};let e=v.exec(t)??I.exec(t);return e?{name:t.slice(0,e.index),start:+e[1]}:{name:t,start:0}}function Q(t,s){let e=[],n=new d;for(let r of t){let a=u(r.name),h=n.pathOf(r.name,a),o=r.start;for(let i of r.steps)n.addAt(n.declare(i.id),h,o,i.strand==="-"),o+=s(i.id);e.push({name:r.name,sample:a,start:r.start,length:o-r.start})}return{anchorPaths:e,pathVisits:n.build()}}function P(t,s){return t.find(n=>n.sample===s||n.name===s)??t[0]}var R=1;function N(t,s,e,n){let r=s.slot(t.name);if(r<0||s.offsets[r]===s.offsets[r+1])return t;let a=s.firstBy(r,e),h=a>=0?a:s.firstByName(r);return{...t,stable:{refName:s.paths[s.path[h]],start:s.start[h],rank:a>=0?l:R,strand:s.strand(h)},samples:n(r)}}function O(t){let s=[...new Set(t.samples)].sort(),e=new Map(s.map((h,o)=>[h,o])),n=Int32Array.from(t.samples,h=>e.get(h)),r=new Uint8Array(s.length),a=new Int32Array(s.length);return h=>{let o=0;for(let f=t.offsets[h];f<t.offsets[h+1];f++){let c=n[t.path[f]];r[c]===0&&(r[c]=1,a[o++]=c)}let i;if(o===s.length)i=s,r.fill(0);else if(o*8<s.length){let f=a.subarray(0,o);f.forEach(c=>r[c]=0),i=Array.from(f.sort(),c=>s[c])}else{i=[];for(let f=0;f<s.length;f++)r[f]===1&&(r[f]=0,i.push(s[f]))}return i}}function k(t,s){let{anchorPaths:e,pathVisits:n}=t,r=e&&n?P(e,s):void 0;if(!r||!e||!n)return t;let a=O(n),h=n.pathIndex(r.name);return{...t,nodes:t.nodes.map(o=>N(o,n,h,a)),anchoredBy:"paths",referencePath:r.name}}function Y(t,s){if(t.anchoredBy!=="tags")return k(t,s);let e=B(t);return e?{...t,referencePath:e}:t}function B(t){let s=t.nodes.find(e=>e.stable?.rank===0)?.stable?.refName;return s!==void 0&&t.anchorPaths?.some(e=>e.name===s)?s:void 0}function Z(t,s){if(!t.anchorPaths)return;let e=new Map(t.nodes.map(a=>[a.id,a.length])),n=(a,h=a.length)=>{let o=0;for(let i=0;i<h;i++)o+=e.get(a[i])??0;return o},r=m(t.paths??[],a=>E(a.name).name);return t.anchorPaths.map(a=>{let h=r.get(a.name),o=h?.length===1?h[0]:void 0,i=o&&s.get(o.name);return o&&i?{...a,start:a.start+n(o.nodeIds,i.first),length:n(i.nodeIds)}:a})}function tt(t){let{pathVisits:s}=t,e=new Map;return n=>{let r=e.get(n.id);if(!r){r=[];let a=s?s.slot(n.name):-1,h=a>=0?s.pathIndex(n.stable.refName):-1;if(h>=0)for(let o=s.offsets[a];o<s.offsets[a+1];o++)s.path[o]===h&&r.push(s.start[o]);r.length<2&&(r=[n.stable.start]),e.set(n.id,r)}return r}}export{b as a,S as b,m as c,g as d,l as e,_ as f,w as g,G as h,U as i,C as j,K as k,T as l,y as m,$ as n,A as o,p,d as q,E as r,Q as s,P as t,k as u,Y as v,Z as w,tt as x};
2
+ //# sourceMappingURL=chunk-NAC3EXT4.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BSOZW3FC.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HOAIOEI7.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-RJWPJCIB.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BEUTROKU.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BRH73RCH.js"],
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BSOZW3FC.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HOAIOEI7.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-RJWPJCIB.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BEUTROKU.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BRH73RCH.js"],
4
4
  "sourcesContent": ["// src/util/groups.ts\nfunction pushTo(map, key, value) {\n const list = map.get(key);\n if (list) {\n list.push(value);\n } else {\n map.set(key, [value]);\n }\n}\nfunction addTo(map, key, value) {\n const set = map.get(key);\n if (set) {\n set.add(value);\n } else {\n map.set(key, /* @__PURE__ */ new Set([value]));\n }\n}\nfunction groupBy(items, keyOf) {\n const groups = /* @__PURE__ */ new Map();\n for (const item of items) {\n pushTo(groups, keyOf(item), item);\n }\n return groups;\n}\n\nexport {\n pushTo,\n addTo,\n groupBy\n};\n", "// src/util/partitionPoint.ts\nfunction partitionPoint(n, pred) {\n let lo = 0;\n let hi = n;\n while (lo < hi) {\n const mid = lo + hi >> 1;\n if (pred(mid)) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n}\n\nexport {\n partitionPoint\n};\n", "import {\n partitionPoint\n} from \"./chunk-HOAIOEI7.js\";\n\n// src/anchoredNodes.ts\nvar REFERENCE_RANK = 0;\nfunction isAnchored(node) {\n return node.stable !== void 0;\n}\nfunction isBackbone(node) {\n return node.stable?.rank === REFERENCE_RANK;\n}\nfunction isOffReference(node) {\n return node.stable !== void 0 && node.stable.rank > REFERENCE_RANK;\n}\nfunction backboneNodes(graph) {\n return graph.nodes.filter(isBackbone);\n}\nfunction overlapsWindow(node, window) {\n return node.stable.start < window.end && node.stable.start + node.length > window.start;\n}\nfunction backbonePositions(backbone) {\n const positions = {};\n for (const node of backbone) {\n positions[node.id] = [\n { x: node.stable.start, y: 0 },\n { x: node.stable.start + node.length, y: 0 }\n ];\n }\n return positions;\n}\nfunction firstNodeAtOrAfter(nodes, bp) {\n return partitionPoint(nodes.length, (i) => nodes[i].stable.start < bp);\n}\nfunction backboneSpan(backbone) {\n let min = Infinity;\n let max = -Infinity;\n for (const node of backbone) {\n min = Math.min(min, node.stable.start);\n max = Math.max(max, node.stable.start + node.length);\n }\n return max - min;\n}\nfunction referenceSpan(backbone, region) {\n return region && region.end > region.start ? region.end - region.start : backboneSpan(backbone);\n}\n\nexport {\n REFERENCE_RANK,\n isAnchored,\n isBackbone,\n isOffReference,\n backboneNodes,\n overlapsWindow,\n backbonePositions,\n firstNodeAtOrAfter,\n backboneSpan,\n referenceSpan\n};\n", "// src/pathVisits.ts\nvar PathVisits = class {\n constructor(columns) {\n this.segments = columns.segments;\n this.offsets = columns.offsets;\n this.path = columns.path;\n this.start = columns.start;\n this.reversed = columns.reversed;\n this.paths = columns.paths;\n this.samples = columns.samples;\n this.slots = new Map(this.segments.map((s, i) => [s, i]));\n }\n static from(entries) {\n const builder = new PathVisitsBuilder();\n for (const [segment, visits] of entries) {\n builder.declare(segment);\n for (const v of visits) {\n builder.add(segment, v.path, v.sample, v.start, v.strand === \"-\");\n }\n }\n return builder.build();\n }\n get size() {\n return this.segments.length;\n }\n // the segment's index into `segments` and `offsets`, -1 when unvisited\n slot(segment) {\n return this.slots.get(segment) ?? -1;\n }\n pathIndex(path) {\n return this.paths.indexOf(path);\n }\n // the first of `slot`'s visits by path `p`, -1 for none\n firstBy(slot, p) {\n for (let i = this.offsets[slot]; i < this.offsets[slot + 1]; i++) {\n if (this.path[i] === p) {\n return i;\n }\n }\n return -1;\n }\n // the visit of `slot` on the path first in name order, at its lowest offset\n // there: where gfa-to-tabix places a segment the reference doesn't visit, so\n // both place it alike whatever order the file lists its paths in\n firstByName(slot) {\n let best = this.offsets[slot];\n for (let i = best + 1; i < this.offsets[slot + 1]; i++) {\n const a = this.paths[this.path[i]];\n const b = this.paths[this.path[best]];\n if (a < b || a === b && this.start[i] < this.start[best]) {\n best = i;\n }\n }\n return best;\n }\n // Paths' steps replayed in walk order against their visits: the k-th call\n // for one path and segment answers that path's k-th visit there, -1 past\n // its last. A walk in pieces lists its pieces in path order, so replaying\n // the pieces in order reads each step's own visit.\n replay() {\n const cursor = /* @__PURE__ */ new Map();\n return (slot, p) => {\n if (slot < 0 || p < 0) {\n return -1;\n }\n const key = slot * this.paths.length + p;\n const end = this.offsets[slot + 1];\n let at = cursor.get(key) ?? this.offsets[slot];\n while (at < end && this.path[at] !== p) {\n at++;\n }\n cursor.set(key, at + 1);\n return at < end ? at : -1;\n };\n }\n // the visits of paths `keepPath` accepts, at segments `keepSegment` does\n filter(keepPath, keepSegment = () => true) {\n const kept = this.paths.map(keepPath);\n const builder = new PathVisitsBuilder();\n this.segments.forEach((segment, s) => {\n if (!keepSegment(segment)) {\n return;\n }\n const slot = builder.declare(segment);\n for (let i = this.offsets[s]; i < this.offsets[s + 1]; i++) {\n const p = this.path[i];\n if (kept[p]) {\n builder.addAt(\n slot,\n builder.pathOf(this.paths[p], this.samples[p]),\n this.start[i],\n this.reversed[i] === 1\n );\n }\n }\n });\n return builder.build();\n }\n strand(i) {\n return this.reversed[i] ? \"-\" : \"+\";\n }\n visit(i) {\n const p = this.path[i];\n return {\n path: this.paths[p],\n sample: this.samples[p],\n start: this.start[i],\n strand: this.strand(i)\n };\n }\n visitsAt(slot) {\n const out = [];\n for (let i = this.offsets[slot]; i < this.offsets[slot + 1]; i++) {\n out.push(this.visit(i));\n }\n return out;\n }\n get(segment) {\n const slot = this.slot(segment);\n return slot < 0 ? void 0 : this.visitsAt(slot);\n }\n has(segment) {\n return this.slots.has(segment);\n }\n keys() {\n return this.segments[Symbol.iterator]();\n }\n *values() {\n for (let s = 0; s < this.segments.length; s++) {\n yield this.visitsAt(s);\n }\n }\n *entries() {\n for (let s = 0; s < this.segments.length; s++) {\n yield [this.segments[s], this.visitsAt(s)];\n }\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n};\nvar Column = class {\n constructor(data) {\n this.data = data;\n this.length = 0;\n }\n push(value) {\n if (this.length === this.data.length) {\n const grown = new this.data.constructor(\n this.data.length * 2\n );\n grown.set(this.data);\n this.data = grown;\n }\n this.data[this.length++] = value;\n }\n};\nvar PathVisitsBuilder = class {\n constructor() {\n this.segments = [];\n this.slots = /* @__PURE__ */ new Map();\n this.paths = [];\n this.samples = [];\n this.pathIndex = /* @__PURE__ */ new Map();\n this.slot = new Column(new Int32Array(1024));\n this.path = new Column(new Int32Array(1024));\n this.start = new Column(new Float64Array(1024));\n this.reversed = new Column(new Uint8Array(1024));\n }\n // a segment's place in iteration order, though it has no visits yet\n declare(segment) {\n let s = this.slots.get(segment);\n if (s === void 0) {\n s = this.segments.length;\n this.slots.set(segment, s);\n this.segments.push(segment);\n }\n return s;\n }\n // a path's index, so a caller adding many of its visits names it once\n pathOf(path, sample) {\n let p = this.pathIndex.get(path);\n if (p === void 0) {\n p = this.paths.length;\n this.pathIndex.set(path, p);\n this.paths.push(path);\n this.samples.push(sample);\n }\n return p;\n }\n add(segment, path, sample, start, reversed) {\n this.addAt(\n this.declare(segment),\n this.pathOf(path, sample),\n start,\n reversed\n );\n }\n addAt(slot, path, start, reversed) {\n this.slot.push(slot);\n this.path.push(path);\n this.start.push(start);\n this.reversed.push(reversed ? 1 : 0);\n }\n build() {\n const n = this.slot.length;\n const segments = this.segments.length;\n const offsets = new Int32Array(segments + 1);\n const slot = this.slot.data;\n for (let i = 0; i < n; i++) {\n offsets[slot[i] + 1]++;\n }\n for (let s = 0; s < segments; s++) {\n offsets[s + 1] += offsets[s];\n }\n const fill = offsets.slice(0, segments);\n const path = new Int32Array(n);\n const start = new Float64Array(n);\n const reversed = new Uint8Array(n);\n for (let i = 0; i < n; i++) {\n const at = fill[slot[i]]++;\n path[at] = this.path.data[i];\n start[at] = this.start.data[i];\n reversed[at] = this.reversed.data[i];\n }\n return new PathVisits({\n segments: this.segments,\n offsets,\n path,\n start,\n reversed,\n paths: this.paths,\n samples: this.samples\n });\n }\n};\n\nexport {\n PathVisits,\n Column,\n PathVisitsBuilder\n};\n", "import {\n PathVisitsBuilder\n} from \"./chunk-BEUTROKU.js\";\nimport {\n groupBy\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n REFERENCE_RANK\n} from \"./chunk-RJWPJCIB.js\";\nimport {\n panSNSample\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/pathAnchoring.ts\nvar RANGE_SUFFIX = /:(\\d+)-\\d+$/;\nvar VG_FRAGMENT = /^([^#]*#[^#]*#[^#[]*)#(\\d+)(?:\\[(\\d+)-\\d+\\])?$/;\nvar VG_SUBRANGE = /\\[(\\d+)-\\d+\\]$/;\nfunction pathOrigin(pathName) {\n const fragment = VG_FRAGMENT.exec(pathName);\n if (fragment) {\n return { name: fragment[1], start: +fragment[2] + +(fragment[3] ?? 0) };\n }\n const match = RANGE_SUFFIX.exec(pathName) ?? VG_SUBRANGE.exec(pathName);\n return match ? { name: pathName.slice(0, match.index), start: +match[1] } : { name: pathName, start: 0 };\n}\nfunction surveyPaths(paths, lengthOf) {\n const anchorPaths = [];\n const visits = new PathVisitsBuilder();\n for (const path of paths) {\n const sample = panSNSample(path.name);\n const p = visits.pathOf(path.name, sample);\n let pos = path.start;\n for (const step of path.steps) {\n visits.addAt(visits.declare(step.id), p, pos, step.strand === \"-\");\n pos += lengthOf(step.id);\n }\n anchorPaths.push({\n name: path.name,\n sample,\n start: path.start,\n length: pos - path.start\n });\n }\n return { anchorPaths, pathVisits: visits.build() };\n}\nfunction chooseReferencePath(anchorPaths, preferred) {\n const named = anchorPaths.find(\n (p) => p.sample === preferred || p.name === preferred\n );\n return named ?? anchorPaths[0];\n}\nvar OFF_REFERENCE_RANK = 1;\nfunction anchorNode(node, visits, reference, samplesOf) {\n const slot = visits.slot(node.name);\n if (slot < 0 || visits.offsets[slot] === visits.offsets[slot + 1]) {\n return node;\n }\n const own = visits.firstBy(slot, reference);\n const anchor = own >= 0 ? own : visits.firstByName(slot);\n return {\n ...node,\n stable: {\n refName: visits.paths[visits.path[anchor]],\n start: visits.start[anchor],\n rank: own >= 0 ? REFERENCE_RANK : OFF_REFERENCE_RANK,\n strand: visits.strand(anchor)\n },\n samples: samplesOf(slot)\n };\n}\nfunction sampleSorter(visits) {\n const sorted = [...new Set(visits.samples)].sort();\n const rank = new Map(sorted.map((sample, i) => [sample, i]));\n const pathRank = Int32Array.from(visits.samples, (s) => rank.get(s));\n const seen = new Uint8Array(sorted.length);\n const ranks = new Int32Array(sorted.length);\n return (slot) => {\n let n = 0;\n for (let i = visits.offsets[slot]; i < visits.offsets[slot + 1]; i++) {\n const r = pathRank[visits.path[i]];\n if (seen[r] === 0) {\n seen[r] = 1;\n ranks[n++] = r;\n }\n }\n let out;\n if (n === sorted.length) {\n out = sorted;\n seen.fill(0);\n } else if (n * 8 < sorted.length) {\n const found = ranks.subarray(0, n);\n found.forEach((r) => seen[r] = 0);\n out = Array.from(found.sort(), (r) => sorted[r]);\n } else {\n out = [];\n for (let r = 0; r < sorted.length; r++) {\n if (seen[r] === 1) {\n seen[r] = 0;\n out.push(sorted[r]);\n }\n }\n }\n return out;\n };\n}\nfunction anchorFromPaths(graph, preferred) {\n const { anchorPaths, pathVisits } = graph;\n const reference = anchorPaths && pathVisits ? chooseReferencePath(anchorPaths, preferred) : void 0;\n if (!reference || !anchorPaths || !pathVisits) {\n return graph;\n }\n const samplesOf = sampleSorter(pathVisits);\n const referenceIndex = pathVisits.pathIndex(reference.name);\n return {\n ...graph,\n nodes: graph.nodes.map(\n (node) => anchorNode(node, pathVisits, referenceIndex, samplesOf)\n ),\n anchoredBy: \"paths\",\n referencePath: reference.name\n };\n}\nfunction anchorGraph(graph, preferred) {\n if (graph.anchoredBy !== \"tags\") {\n return anchorFromPaths(graph, preferred);\n }\n const referencePath = taggedReferencePath(graph);\n return referencePath ? { ...graph, referencePath } : graph;\n}\nfunction taggedReferencePath(graph) {\n const refName = graph.nodes.find((n) => n.stable?.rank === 0)?.stable?.refName;\n return refName !== void 0 && graph.anchorPaths?.some((p) => p.name === refName) ? refName : void 0;\n}\nfunction trimOrigins(graph, kept) {\n if (!graph.anchorPaths) {\n return void 0;\n }\n const lengthOf = new Map(graph.nodes.map((n) => [n.id, n.length]));\n const bp = (ids, end = ids.length) => {\n let sum = 0;\n for (let i = 0; i < end; i++) {\n sum += lengthOf.get(ids[i]) ?? 0;\n }\n return sum;\n };\n const byOrigin = groupBy(graph.paths ?? [], (p) => pathOrigin(p.name).name);\n return graph.anchorPaths.map((o) => {\n const pieces = byOrigin.get(o.name);\n const path = pieces?.length === 1 ? pieces[0] : void 0;\n const stretch = path && kept.get(path.name);\n return path && stretch ? {\n ...o,\n start: o.start + bp(path.nodeIds, stretch.first),\n length: bp(stretch.nodeIds)\n } : o;\n });\n}\nfunction referenceVisitStarts(graph) {\n const { pathVisits } = graph;\n const cache = /* @__PURE__ */ new Map();\n return (node) => {\n let starts = cache.get(node.id);\n if (!starts) {\n starts = [];\n const slot = pathVisits ? pathVisits.slot(node.name) : -1;\n const p = slot >= 0 ? pathVisits.pathIndex(node.stable.refName) : -1;\n if (p >= 0) {\n for (let i = pathVisits.offsets[slot]; i < pathVisits.offsets[slot + 1]; i++) {\n if (pathVisits.path[i] === p) {\n starts.push(pathVisits.start[i]);\n }\n }\n }\n if (starts.length < 2) {\n starts = [node.stable.start];\n }\n cache.set(node.id, starts);\n }\n return starts;\n };\n}\n\nexport {\n pathOrigin,\n surveyPaths,\n chooseReferencePath,\n anchorFromPaths,\n anchorGraph,\n trimOrigins,\n referenceVisitStarts\n};\n"],
5
5
  "mappings": "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",
6
6
  "names": ["pushTo", "map", "key", "value", "list", "addTo", "set", "groupBy", "items", "keyOf", "groups", "item", "partitionPoint", "n", "pred", "lo", "hi", "mid", "REFERENCE_RANK", "isAnchored", "node", "isBackbone", "isOffReference", "backboneNodes", "graph", "overlapsWindow", "window", "backbonePositions", "backbone", "positions", "firstNodeAtOrAfter", "nodes", "bp", "partitionPoint", "i", "backboneSpan", "min", "max", "referenceSpan", "region", "PathVisits", "columns", "i", "entries", "builder", "PathVisitsBuilder", "segment", "visits", "v", "path", "slot", "p", "best", "a", "b", "cursor", "key", "end", "at", "keepPath", "keepSegment", "kept", "s", "out", "Column", "data", "value", "grown", "sample", "start", "reversed", "n", "segments", "offsets", "fill", "RANGE_SUFFIX", "VG_FRAGMENT", "VG_SUBRANGE", "pathOrigin", "pathName", "fragment", "match", "surveyPaths", "paths", "lengthOf", "anchorPaths", "visits", "PathVisitsBuilder", "path", "sample", "panSNSample", "p", "pos", "step", "chooseReferencePath", "preferred", "OFF_REFERENCE_RANK", "anchorNode", "node", "reference", "samplesOf", "slot", "own", "anchor", "REFERENCE_RANK", "sampleSorter", "sorted", "rank", "i", "pathRank", "s", "seen", "ranks", "n", "r", "out", "found", "anchorFromPaths", "graph", "pathVisits", "referenceIndex", "anchorGraph", "referencePath", "taggedReferencePath", "refName", "trimOrigins", "kept", "bp", "ids", "end", "sum", "byOrigin", "groupBy", "o", "pieces", "stretch", "referenceVisitStarts", "cache", "starts"]
@@ -1,2 +1,2 @@
1
- import{a as dt,c as ht,d as yt,g as C,j as K,l as xt,q as Mt,r as $,w as bt,x as vt}from"./chunk-IK3MQ4ZJ.js";import{b as pt,c as mt}from"./chunk-VKZALU57.js";var gt=20;function be(t){let n=e=>Math.round(e*100)/100;return t.map((e,o)=>`${o?"L":"M"}${n(e.x)},${n(e.y)}`).join("")}function wt(t,n,e,o,r){let s=Math.hypot(o-n,e-t);if(s===0)return[e,o];let c=(e-t)/s,a=(o-n)/s;return[e+r*c,o+r*a]}function Y(t,n){let e=1-n,o=e*e*e,r=3*e*e*n,s=3*e*n*n,c=n*n*n;return{x:o*t.x0+r*t.cx0+s*t.cx1+c*t.x1,y:o*t.y0+r*t.cy0+s*t.cy1+c*t.y1}}function Pt(t){let n=t[Math.floor(t.length/2)];return n?Y(n,.5):void 0}function Nt(t){let n=1/0,e=1/0,o=-1/0,r=-1/0;for(let s of t)n=Math.min(n,s.x0,s.cx0,s.cx1,s.x1),o=Math.max(o,s.x0,s.cx0,s.cx1,s.x1),e=Math.min(e,s.y0,s.cy0,s.cy1,s.y1),r=Math.max(r,s.y0,s.cy0,s.cy1,s.y1);return{minX:n,minY:e,maxX:o,maxY:r}}function tn(t,n,e){let o=Y(t,n),r=Y(t,e),s=(e-n)/3,c=At(t,n),a=At(t,e);return{x0:o.x,y0:o.y,cx0:o.x+c.x*s,cy0:o.y+c.y*s,cx1:r.x-a.x*s,cy1:r.y-a.y*s,x1:r.x,y1:r.y}}function At(t,n){let e=1-n,o=3*e*e,r=6*e*n,s=3*n*n;return{x:o*(t.cx0-t.x0)+r*(t.cx1-t.cx0)+s*(t.x1-t.cx1),y:o*(t.cy0-t.y0)+r*(t.cy1-t.cy0)+s*(t.y1-t.cy1)}}var H=32;function nn(t,n,e,o){let r=[],s=0;return t.forEach((c,a)=>{let i=n[a],d=i/H,l=Y(c,0);for(let u=1;u<=H;u++){let h=Y(c,u/H);if(Math.max(l.x,h.x)+d>=e.minX&&Math.min(l.x,h.x)-d<=e.maxX&&Math.max(l.y,h.y)+d/o>=e.minY&&Math.min(l.y,h.y)-d/o<=e.maxY){let f=s+i*(u-1)/H,y=s+i*u/H,x=r.at(-1);x&&x[1]>=f?x[1]=y:r.push([f,y])}l=h}s+=i}),r}function ve(t,n,e=1,o){let r=t.map(u=>Math.hypot(u.cx0-u.x0,(u.cy0-u.y0)*e)+Math.hypot(u.cx1-u.cx0,(u.cy1-u.cy0)*e)+Math.hypot(u.x1-u.cx1,(u.y1-u.cy1)*e)),s=r.reduce((u,h)=>u+h,0),c=Math.round(s/n),a=Math.max(3,c%2?c:c+1),i=o?nn(t,r,o,e):void 0,d=0,l=[];for(let u=0;u<a;u+=2){let h=u/a*s,f=(u+1)/a*s;if(i){for(;d<i.length&&i[d][1]<h;)d++;if(d===i.length)break;if(i[d][0]>f)continue}let y=[],x=[],p=0;t.forEach((b,m)=>{let M=r[m],g=p+M;if(M>0&&g>h&&p<f){let v=Math.max(0,(h-p)/M),w=Math.min(1,(f-p)/M);y.push(tn(b,v,w)),x.push((m+v)/t.length,(m+w)/t.length)}p=g}),y.length&&l.push({curves:y,startAlong:x[0],endAlong:x.at(-1)})}return l}var ge=(t,n,e)=>({dx:t.dx+(n.dx-t.dx)*e,dy:t.dy+(n.dy-t.dy)*e});function we(t,n,e,o,r){let s=t.length,c=new Array(s);for(let a=0;a<s;a++){let i=t[a],d=a/s,l=(a+1)/s,u=n+(o-n)*d,h=e+(r-e)*d,f=n+(o-n)*l,y=e+(r-e)*l;c[a]={x0:i.x0+u,y0:i.y0+h,cx0:i.cx0+u,cy0:i.cy0+h,cx1:i.cx1+f,cy1:i.cy1+y,x1:i.x1+f,y1:i.y1+y}}return c}function Ae(t,n,e){let o=new Array(t.length);for(let r=0;r<t.length;r++){let s=t[r];o[r]={x0:s.x0+n,y0:s.y0+e,cx0:s.cx0+n,cy0:s.cy0+e,cx1:s.cx1+n,cy1:s.cy1+e,x1:s.x1+n,y1:s.y1+e}}return o}function W(t,n){let e=t.length-1;return n==="end"?{at:t[e],inward:t[e-1]}:{at:t[0],inward:t[1]}}var en=.5,on=80;function F(t){return t.endsWith("-")?"-":"+"}function q(t){let n=(e,o)=>(o??F(e))===F(e);return{from:n(t.from,t.fromStrand)?"end":"start",to:n(t.to,t.toStrand)?"start":"end"}}function _t(t){let n=1/0,e=-1/0;for(let o of t)n=Math.min(n,o.x),e=Math.max(e,o.x);return{min:n,max:e}}function Et(t,n){return Math.max(0,n.min-t,t-n.max)}function It(t,n,e){let o=Et(t[0].x,n),r=Et(t[t.length-1].x,n);return o===r?e:o<r?"start":"end"}function rn(t,n){return{from:It(t,_t(n),"end"),to:It(n,_t(t),"start")}}var Lt=new WeakMap;function sn(t,n){let e=Lt.get(t);e||(e=new WeakMap,Lt.set(t,e));let o=e.get(n);return o||(o=rn(t,n),e.set(n,o)),o}var cn=.75,an=1.15,fn=.35,un=3*gt;function ln(t,n,e,o,r,s){let c=Math.hypot(e-t,o-n),a=c===0?1:(e-t)/c,i=c===0?0:(o-n)/c,d=0,l=1/0,u=-1/0;for(let x of r){let p=x.x-t,b=x.y-n,m=p*-i+b*a;Math.abs(m)>Math.abs(d)&&(d=m);let M=p*a+b*i;l=Math.min(l,M),u=Math.max(u,M)}let h=r.length?u-l:0,f=Math.max(Math.abs(d)*an/cn,h*fn),y=s===void 0?f:Math.min(f,s);return d<0?-y:y}function Xt({scaleX:t,scaleY:n}){return n/t}var dn=3;function J(t,n,e){let o=n.x-t.x,r=(n.y-t.y)*e,s=Math.hypot(o,r);return s===0?void 0:{x:o/s,y:r/s}}function _e(t,n,e,o){let r=Xt(o),s=dn/Math.max(o.scaleX,1e-6),c=J(t[t.length-1],n[0],r)??J(t[0],t.at(-1),r)??J(n[0],n.at(-1),r)??{x:1,y:0},a=[];for(let i=0;i<e;i++){let d=(i-(e-1)/2)*s;a.push({x:-c.y*d,y:c.x*d/r})}return a}function Q(t,n){return t.map(e=>({x:e.x,y:e.y*n}))}function hn(t,n){for(let e of t)e.y0/=n,e.cy0/=n,e.cy1/=n,e.y1/=n;return t}function Z(t,n,e){let o=0;for(let r=1;r<t.length;r++){let s=t[r-1],c=t[r];o+=Math.hypot((c.x-s.x)*n,(c.y-s.y)*e)}return o}var yn=12,xn=40;function Ot(t,n){let e=Z(t,n,n);return Math.min(xn,Math.max(yn,e/2))/Math.max(n,Number.EPSILON)}function pn(t){return t.from!==t.to?!1:t.fromStrand&&t.toStrand&&t.fromStrand!==t.toStrand?t.fromStrand==="+"?"end":"start":!0}function Ct(t,n=!1){let e=pn(t);if(!n)return e;let o=q(t);return e===!1?o:o.from===o.to?o.from:!0}function mn(t,n){let{at:e,inward:o}=t,r=o?e.x-o.x:1,s=o?e.y-o.y:0,c=Math.hypot(r,s)||1,a=r/c,i=s/c,d=e.x,l=e.y,u=d+a*n/3,h=l+i*n/3,f=d+a*n,y=l+i*n,x=-i*n/2,p=a*n/2;return[{x0:d,y0:l,cx0:u,cy0:h,cx1:f+x,cy1:y+p,x1:f,y1:y},{x0:f,y0:y,cx0:f-x,cy0:y-p,cx1:u,cy1:h,x1:d,y1:l}]}function tt(t,n,e,o,r=[],s){let c=o.scaleX,a=Xt(o),i=s??(o.pixelRows?un:void 0);if(e===!1&&(e=sn(t,n)),a!==1)return hn(tt(Q(t,a),Q(n,a),e,{scaleX:c,scaleY:c},Q(r,a),i===void 0?void 0:i*a),a);if(typeof e=="string")return mn(W(t,e),Ot(t,c));let d=e===!0,l=e===!0?{from:"end",to:"start"}:e,u=W(t,l.from),h=W(n,l.to),f=u.at,y=h.at,x=f.x,p=f.y,b=y.x,m=y.y;if(d){let M=1,g=0;if(u.inward){let S=f.x-u.inward.x,P=f.y-u.inward.y,X=Math.hypot(S,P);X>0&&(M=S/X,g=P/X)}let v=Ot(t,c),w=-g,_=M,I=(f.x+y.x)/2+w*v,E=(f.y+y.y)/2+_*v,A=x+M*v,N=p+g*v,O=b-M*v,L=m-g*v;return[{x0:x,y0:p,cx0:A,cy0:N,cx1:A+w*v,cy1:N+_*v,x1:I,y1:E},{x0:I,y0:E,cx0:O+w*v,cy0:L+_*v,cx1:O,cy1:L,x1:b,y1:m}]}else{let M=u.inward??{x:f.x-(y.x-f.x),y:f.y-(y.y-f.y)},g=h.inward??{x:y.x-(f.x-y.x),y:y.y-(f.y-y.y)},v=Math.hypot(b-x,m-p),w=(at,it,Jt,Qt)=>{let ft=it.x-at.x,ut=it.y-at.y,lt=Math.hypot(ft,ut),Zt=lt===0?0:(Jt*ft+Qt*ut)/lt;return Math.max(0,Math.min(v*en,on,Zt*.5))},_=y.x-f.x,I=y.y-f.y,[E,A]=wt(M.x,M.y,f.x,f.y,w(M,f,_,I)),[N,O]=wt(g.x,g.y,y.x,y.y,w(g,y,-_,-I)),L=r.length?ln(x,p,b,m,r,i):0,S=v===0?1:v,P=(b-x)/S,X=(m-p)/S,T=-X*L,B=P*L,R=P*Math.abs(L),ct=X*Math.abs(L);return[{x0:x,y0:p,cx0:E+T-R,cy0:A+B-ct,cx1:N+T+R,cy1:O+B+ct,x1:b,y1:m}]}}function St(t,n){let e=t[0],o=t.at(-1);return Math.hypot(e.x-n.x,e.y-n.y)<Math.hypot(o.x-n.x,o.y-n.y)?"start":"end"}function kt(t,n,e,o){let r=W(t,o?.from??St(t,e[0])),s=W(n,o?.to??St(n,e.at(-1))),c=[r.at,...e,s.at],a=d=>{let l=c[d],u=f=>Math.hypot(f.x-l.x,f.y-l.y),h=(f,y)=>{let x=f?u(f):0,p=u(y);return x===0?{x:y.x-l.x,y:y.y-l.y}:{x:(l.x-f.x)/x*p,y:(l.y-f.y)/x*p}};if(d===0)return h(r.inward,c[1]);if(d===c.length-1){let f=h(s.inward,c[d-1]);return{x:-f.x,y:-f.y}}return{x:(c[d+1].x-c[d-1].x)/2,y:(c[d+1].y-c[d-1].y)/2}},i=[];for(let d=0;d<c.length-1;d++){let l=c[d],u=c[d+1],h=a(d),f=a(d+1);i.push({x0:l.x,y0:l.y,cx0:l.x+h.x/3,cy0:l.y+h.y/3,cx1:u.x-f.x/3,cy1:u.y-f.y/3,x1:u.x,y1:u.y})}return i}function nt(){let t=new WeakMap;return(n,e,o)=>{let r=t.get(n);if(r?.deps.length===e.length&&r.deps.every((c,a)=>Object.is(c,e[a])))return r.value;let s=o();return t.set(n,{deps:e,value:s}),s}}var Bt=11,Mn=6.2,D=4;function et(t){return t.length*Mn+D*2}function bn(t,n){return t.x0<n.x1&&t.x1>n.x0&&t.y0<n.y1&&t.y1>n.y0}function Tt(t,n){return t.x1<=0||t.x0>=n.width||t.y1<=0||t.y0>=n.height}function vn(t,n){return t.x0>=0&&t.x1<=n.width&&t.y0>=0&&t.y1<=n.height}function Rt(t,n=[]){let e=[...n];return o=>Tt(o,t)||e.some(r=>bn(r,o))?!1:(e.push(o),!0)}function Le(t,n,e){let o=[],r=Bt+D*2,s=(c,a)=>{let i=et(a),d=c.y>n.height/2?-1:1;for(let l=0;l<=(c.stack??0);l++){let u=c.y+d*l*r,h={x0:c.x-i/2,x1:c.x+i/2,y0:u-Bt-D,y1:u+D};if(Tt(h,n))return;if(vn(h,n)&&(c.fits?.(h)??!0)&&e(h))return{...c,text:a,y:u,w:i}}};for(let c of t){let a=s(c,c.text)??(c.fallback===void 0?void 0:s(c,c.fallback));a&&o.push(a)}return o}function $t(t){return t==="+"?"-":"+"}function Xe(t,n=new Set){let e=t.edges.map(q),o=new Map,r=(f,y,x)=>{dt(o,`${f}|${y}`,x)};t.edges.forEach((f,y)=>{r(f.from,e[y].from,y),r(f.to,e[y].to,y)});let s=f=>{let y=o.get(`${f}|end`);if(y?.length!==1)return;let x=y[0],p=t.edges[x];return p.from===f&&p.to!==f&&!n.has(f)&&!n.has(p.to)&&e[x].from==="end"&&e[x].to==="start"&&o.get(`${p.to}|start`)?.length===1?x:void 0},c=new Set,a=new Map,i=new Map;for(let f of t.nodes){let y=o.get(`${f.id}|start`),x=y?.length===1?t.edges[y[0]].from:void 0;if(a.has(f.id)||x!==void 0&&s(x)===y[0])continue;let p=[f.id];for(;;){let b=s(p.at(-1)),m=b===void 0?void 0:t.edges[b].to;if(m===void 0||a.has(m))break;c.add(b),p.push(m)}for(let b of p)a.set(b,f.id);p.length>1&&i.set(f.id,p)}for(let f of t.nodes)a.has(f.id)||a.set(f.id,f.id);let d=new Map(t.nodes.map(f=>[f.id,f])),l=[];for(let f of t.nodes){if(a.get(f.id)!==f.id)continue;let y=i.get(f.id);if(!y){l.push(f);continue}let x=y.map(m=>d.get(m)),p=x.filter(C),b=p.length?p.reduce((m,M)=>m.stable.start<=M.stable.start?m:M):x[0];l.push({id:f.id,name:f.name,length:x.reduce((m,M)=>m+M.length,0),depth:f.depth,stable:b.stable})}let u=new Set,h=[];return t.edges.forEach((f,y)=>{let x=a.get(f.from),p=a.get(f.to),b=e[y],m=`${x}|${b.from}>${p}|${b.to}`;c.has(y)||u.has(m)||(u.add(m),h.push({from:x,to:p,...b.from==="start"?{fromStrand:$t(F(x))}:{},...b.to==="end"?{toStrand:$t(F(p))}:{}}))}),{graph:{...t,nodes:l,edges:h,paths:void 0,pathVisits:void 0},runs:i}}function Ce(t,n,e){let o={...t};for(let[r,s]of n){let c=t[r];if(!c?.length)continue;delete o[r];let a=rt(c),i=a.at(-1),d=s.map(h=>Math.max(e(h),0)),l=d.reduce((h,f)=>h+f,0),u=0;s.forEach((h,f)=>{let y=l?d[f]/l*i:i/s.length,x=f===s.length-1?i:u+y;o[h]=Yt(c,a,u,x),u=x})}return o}function ke(t,n,e){if(t.length===0)return[];let o=rt(t),r=o.at(-1);return Yt(t,o,n*r,e*r)}function Ht(t){let n=rt(t);return ot(t,n,n.at(-1)/2)}function rt(t){let n=[0];for(let e=1;e<t.length;e++)n.push(n[e-1]+Math.hypot(t[e].x-t[e-1].x,t[e].y-t[e-1].y));return n}function Wt(t,n){let e=0,o=t.length;for(;e<o;){let r=e+o>>1;t[r]<n?e=r+1:o=r}return e}function ot(t,n,e){if(e<=0)return{...t[0]};let o=Wt(n,e);if(o>=n.length)return{...t.at(-1)};let r=n[o]-n[o-1],s=r>0?(e-n[o-1])/r:0,c=t[o-1],a=t[o];return{x:c.x+(a.x-c.x)*s,y:c.y+(a.y-c.y)*s}}function Yt(t,n,e,o){let r=[ot(t,n,e)];for(let s=Wt(n,e);s<t.length&&n[s]<o;s++)n[s]>e&&r.push({...t[s]});return r.push(ot(t,n,o)),r}function He(t,n){let e=new Set(t.nodes.filter(i=>C(i)&&K(i,n)).map(i=>i.id)),o=t.paths??[];if(e.size===0||o.length===0)return t;let r=o.map(i=>{let d=-1,l=-1;return i.nodeIds.forEach((u,h)=>{e.has(u)&&(d<0&&(d=h),l=h)}),d<0?void 0:{first:d,last:l}});if(r.every((i,d)=>i?.first===0&&i.last===o[d].nodeIds.length-1))return t;let s=new Set,c=[],a=new Map;return o.forEach((i,d)=>{let l=r[d];if(l){let u=i.nodeIds.slice(l.first,l.last+1);for(let h of u)s.add(h);c.push({...i,nodeIds:u}),a.set(i.name,{first:l.first,nodeIds:u})}}),{...t,nodes:t.nodes.filter(i=>s.has(i.id)),edges:t.edges.filter(i=>s.has(i.from)&&s.has(i.to)),paths:c,pathVisits:t.pathVisits&&gn(t.pathVisits,o,r,new Map(t.nodes.map(i=>[i.id,i.name]))),anchorPaths:bt(t,a)}}function gn(t,n,e,o){let r=t.replay(),s=new Mt;return n.forEach((c,a)=>{let i=t.pathIndex($(c.name).name),d=e[a];c.nodeIds.forEach((l,u)=>{let h=o.get(l)??l,f=r(t.slot(h),i);f>=0&&d&&u>=d.first&&u<=d.last&&s.add(h,t.paths[i],t.samples[i],t.start[f],t.reversed[f]===1)})}),s.build()}function We(t,n,e){let o=t.nodes.map(r=>{if(!C(r))return r;let s=r.stable.start,c=s+r.length,[a,i]=K(r,n)?[Math.max(s,n.start),Math.min(c,n.end)]:c<=n.start?[Math.max(s,c-e),c]:[s,Math.min(c,s+e)];return a===s&&i===c?r:{...r,length:i-a,stable:{...r.stable,start:a},unclipped:{start:s,length:r.length}}});return o.some((r,s)=>r!==t.nodes[s])?{...t,nodes:o}:t}function Ft(t){return t.nodes.some(n=>n.unclipped)?{...t,nodes:t.nodes.map(({unclipped:n,...e})=>n&&e.stable?{...e,length:n.length,stable:{...e.stable,start:n.start}}:e)}:t}var wn=1,je=t=>`skips ${t??"the reference"} sequence (a deletion)`;function An(t,n){return n.flatMap(e=>t[e]??[])}function Gt(t,n,e,o,r,s){let c=t[n.from],a=t[n.to];if(!(!c?.length||!a?.length))return r?kt(c,a,r,s?q(n):void 0):tt(c,a,Ct(n,s),e,o?An(t,o):[])}function _n(t){let n=ht(t.nodes.filter(C),e=>e.stable.refName);for(let e of n.values())e.sort((o,r)=>o.stable.start-r.stable.start);return n}function En(t,n,e){let o=[];if(t)for(let r=xt(t,n);r<t.length;r++){let s=t[r];if(s.stable.start>=e)break;s.stable.start+s.length<=e&&o.push(s.id)}return o}function In(t,n,e,o){let{fromStrand:r,toStrand:s}=t;if(r===void 0||s===void 0)return!0;let c=r===(n.stable.strand??"+"),a=s===(e.stable.strand??"+");return o?c&&a:!c&&!a}function Ln(t,n,e,o){let r;for(let s of o(n))for(let c of o(e)){let a=s<=c,i=a?{start:s+n.length,end:c}:{start:c+e.length,end:s};In(t,n,e,a)&&(!r||Math.abs(i.end-i.start)<Math.abs(r.end-r.start))&&(r=i)}return r}var On=.01;function Sn(t,n){let e=new Map;for(let[o,r]of t){let s=r.flatMap(c=>{let a=n(c);return a.slice(1).map((i,d)=>({at:a[d],copy:i-a[d]}))});s.length&&e.set(o,s.sort((c,a)=>c.at-a.at))}return e}function Pn(t,n,e){if(!t)return!1;let o=yt(t.length,s=>t[s].at<n),r=[t[o-1],t[o]].filter(s=>s!==void 0).sort((s,c)=>Math.abs(s.at-n)-Math.abs(c.at-n))[0];return r!==void 0&&Math.abs(r.at-n)<=r.copy&&Math.abs(e-r.copy)<=r.copy*On}function Ue(t){let n=Ft(t),e=new Map(n.nodes.map(a=>[a.id,a])),o=_n(n),r=vt(n),s=Sn(o,r),c=[];for(let a=0;a<n.edges.length;a++){let i=n.edges[a],d=e.get(i.from),l=e.get(i.to);if(!i.foldBridge&&d!==void 0&&l!==void 0&&C(d)&&C(l)&&d.stable.refName===l.stable.refName){let u=Ln(i,d,l,r),h=d.stable.refName,f=u?u.end-u.start:0;if(u&&f>=wn&&!Pn(s.get(h),u.start,f)){let{start:y,end:x}=u;c.push({edgeIndex:a,from:i.from,to:i.to,...i.fromStrand?{fromStrand:i.fromStrand}:{},...i.toStrand?{toStrand:i.toStrand}:{},refName:h,start:y,end:x,bp:f,bypassed:En(o.get(h),y,x)})}}}return c}function Nn(t,n){let e=new Map,o=c=>{let a=c;for(;e.has(a);)a=e.get(a);return a!==c&&e.set(c,a),a},r=(c,a)=>{let[i,d]=[o(c),o(a)];return i!==d&&e.set(i,d),i!==d},s=new Set(n.map(c=>c.edgeIndex));return t.edges.forEach((c,a)=>{s.has(a)||r(c.from,c.to)}),new Set(n.filter(c=>!r(c.from,c.to)).map(c=>c.edgeIndex))}var qt=new WeakMap;function Ke(t,n,e=!0){let o=qt.get(n);o||(o=new Map,qt.set(n,o));let r=o.get(e);if(!r){let s=e?new Set:Nn(t,n);r={shown:n.filter(c=>!s.has(c.edgeIndex)),bypassed:new Map(n.map(c=>[c.edgeIndex,c.bypassed])),hidden:s},o.set(e,r)}return r}var Xn=26,Cn=4e4,kn=8,Bn=8,Tn=5.7,Rn=6,$n=13,G=3,V=2;function U(t){return(t.length*Tn+Rn+G)/2}var k=($n+G)/2,Hn=U("1 bp");function z(t,n,e){return{x0:n-t,x1:n+t,y0:e-k,y1:e+k}}function oo(t,n){return{x0:6,x1:6+et(t)+G,y0:n-8-G/2,y1:n+8+G/2}}function j(t,n,e){return e<n?t:Math.min(Math.max(t,n),e)}function zt(t){return String(t).replace(/\B(?=(\d{3})+$)/g,",")}function jt(t){let[n,e]=t>=999500?[t/1e6,"Mb"]:t>=1e3?[t/1e3,"kb"]:[];return n===void 0?`${t} bp`:`${+n.toFixed(n>=100?0:1)} ${e}`}function Dt(t){return`${jt(t)} del`}function Wn(t,n,e,o){let r=t[0],s=t[t.length-1],c=(n.x-(r.x0+s.x1)/2)*e,a=(n.y-(r.y0+s.y1)/2)*o,i=Math.hypot(c,a);return i===0?{x:0,y:-1}:{x:c/i,y:a/i}}function Yn(t,n){return Math.abs(n.x)*(t.x1-t.x0)/2+Math.abs(n.y)*(t.y1-t.y0)/2}function Fn(t,n){let e=(t.x1-t.x0)/2,o=(t.y1-t.y0)/2;return Math.min(n.x===0?1/0:e/Math.abs(n.x),n.y===0?1/0:o/Math.abs(n.y))}function qn(t,n){let e=1/0,o=1/0,r=-1/0,s=-1/0;for(let c of t)for(let a of n[c]??[])e=Math.min(e,a.x),r=Math.max(r,a.x),o=Math.min(o,a.y),s=Math.max(s,a.y);return e===1/0?void 0:{minX:e,minY:o,maxX:r,maxY:s}}var Gn=nt();function Dn(t,n){return Gn(t,[n],()=>Object.entries(t).filter(([e,o])=>o.length>0&&n.has(e)).sort(([e],[o])=>n.get(o)-n.get(e)))}var Vn=nt();function zn(t,n,e,o,r,s){let{scaleX:c,scaleY:a}=e;return Vn(t,[n,r,s,c,a,o],()=>{let i=[];for(let d of[...n].sort((l,u)=>u.bp-l.bp)){let l=Gt(t,d,e,d.bypassed,r?.[d.edgeIndex],s),u=l?Pt(l):void 0;if(l&&u){let{minX:h,minY:f,maxX:y,maxY:x}=Nt(l);i.push({deletion:d,curves:l,apex:u,extent:Math.max((y-h)*c,(x-f)*a)})}}return i})}function jn({nodePositions:t,nodeLengths:n,deletions:e,deletionRoutes:o,stranded:r=!1,alleleDeletions:s,axis:c,translateX:a,translateY:i,width:d,height:l,version:u=0}){let{scaleX:h,scaleY:f}=c,y=[],x=[];for(let{deletion:m,curves:M,apex:g,extent:v}of zn(t,e,c,u,o,r))if(v>=Xn){let w=Dt(m.bp),_=U(w),I=z(_,0,0),E=g.x*h+a,A=g.y*f+i;if(E<0||E>d||A<0||A>l)continue;let N=v>=_*2/V,O=Wn(M,g,h,f),L=Yn(I,O)+Bn,S=N?E:j(E+O.x*L,_,d-_),P=N?A:j(A+O.y*L,k,l-k),X=Math.hypot(S-E,P-A),T;if(X>0){let B={x:(S-E)/X,y:(P-A)/X},R=Fn(I,B);T={arcX:E,arcY:A,labelX:S-B.x*R,labelY:P-B.y*R}}y.push({label:{key:`del:${m.edgeIndex}`,text:w,x:S,y:P,kind:"deletion",leader:T},box:z(_,S,P)})}let p=new Set,b=[...s??[]].sort((m,M)=>M.bp-m.bp);for(let m of b){let M=qn(m.nodeIds,t);if(!M)continue;let g=Math.max(M.minX*h+a,0),v=Math.min(M.maxX*h+a,d),w=Math.max(M.minY*f+i,0),_=Math.min(M.maxY*f+i,l);if(v<g||_<w)continue;let I=Math.max(v-g,_-w),E=Dt(m.bp),A=U(E);if(I>=A*2/V){for(let L of m.nodeIds)p.add(L);let N=j((g+v)/2,A,d-A),O=j((w+_)/2,k,l-k);y.push({label:{key:`alleledel:${m.nodeIds.join(",")}`,text:E,x:N,y:O,kind:"deletion"},box:z(A,N,O)})}}for(let[m,M]of Dn(t,n)){if(p.has(m))continue;let{x:g,y:v}=Ht(M),w=v*f+i;if(w+k<=0||w-k>=l)continue;let _=Z(M,h,f);if(_<Hn*2/V)continue;let I=jt(n.get(m)),E=U(I);if(_>=E*2/V){let A=g*h+a;x.push({label:{key:`node:${m}`,text:I,x:A,y:w,kind:"node"},box:z(E,A,w)})}}return{deletions:y,nodes:x}}function Un(t,n){return Math.max(kn,Math.floor(t*n/Cn))}function Vt(t,n,e=1/0){let o=[];for(let{label:r,box:s}of t){if(o.length>=e)break;n(s)&&o.push(r)}return o}function ro({reserved:t,take:n,...e}){n??=Rt(e,t);let{deletions:o,nodes:r}=jn(e);return[...Vt(o,n),...Vt(r,n,Un(e.width,e.height))]}function fo(t){let n=0;for(let e=0;e<t.length;e++)n=t.charCodeAt(e)+((n<<5)-n);return Math.abs(n%360)}function Kn(t,n){return t*360/n}var Jn=.7,Qn=.5,Zn=16;function uo(t){return t>0&&t<=Zn}function te(t,n){return`hsl(${Kn(t,n)}, ${Jn*100}%, ${Qn*100}%)`}function lo(t,n){return`hsl(0, 0%, ${n>1?25+45*t/(n-1):45}%)`}function ne(t){let n=$(t).name.split("#"),e=n.join("#");if(n.length>=3&&pt(n[0])){let o=n.slice(2).join("#");return[o,o,e]}return[n[0],n.slice(0,2).join("#"),e]}function ee(t,n){let{start:e}=$(t);return n.map(o=>`${o} @${zt(e)}`)}function ho(t,n){let e=new Map;t.forEach((l,u)=>{e.has(l.name)||e.set(l.name,u)});let o=[...e].map(([l,u])=>({name:l,i:u})),r=o.map(l=>ne(l.name)),s=l=>o.map((u,h)=>r[h][l]),c=l=>o.map((u,h)=>ee(u.name,r[h])[l]),a=[s(0),s(1),c(0),s(2),c(1),c(2)],d=a.find(l=>new Set(l).size===o.length)??a.at(-1);return o.map(({name:l,i:u},h)=>({name:l,label:d[h],color:n?.[u]??te(u,t.length)}))}function yo(t){let n=new Map;return new Map([...t].sort((e,o)=>e.label.localeCompare(o.label)).map(e=>{let o=(n.get(e.label)??0)+1;return n.set(e.label,o),[e.name,o>1?`${e.label} (${o})`:e.label]}))}var mo=[{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:"frequency",label:"By frequency",description:"As wide as the share of haplotypes that pass a node, or its AF tag: full width at 100%, half at 50%, and wider where a haplotype passes it more than once."},{value:"uniform",label:"Uniform",description:"Every node the same thickness."}],oe=.3,st=3,re=.05;function se(t){let n=0,e=0;for(let o of t.nodes)n+=o.depth*o.length,e+=o.length;return e>0?n/e:0}function ce(t){return t.sample===void 0?mt(t.name)??t.name:`${t.sample}#${t.haplotype??0}`}function ae(t){return new Set((t.paths??[]).map(ce)).size}function ie(t,n){return t.frequency??(n>0?t.depth/n:void 0)}function fe(t,n){return n==="depth"?se(t):n==="frequency"?ae(t):0}function Ut(t){return Math.min(st,Math.max(re,t))}function ue(t,n){let e=ie(t,n);return e===void 0?1:Ut(e)}function Mo(t){return[1,.5,.1].map(n=>({label:`${n*100}%`,widthPx:t*Ut(n)}))}function le(t,n){return!(n>0)||!(t.depth>0)?1:Math.min(st,Math.max(oe,Math.sqrt(t.depth/n)))}function de(t,n,e,o){return n*(e==="depth"?le(t,o):e==="frequency"?ue(t,o):1)}function he(t,n){return t*(n==="uniform"?1:st)}var ye=4;function xe(t,n){return Math.max(t/n,ye)}function bo(t,n,e,o,r=0){let s=t?fe(t,o):0,c=a=>r>0?xe(a,r)*r/2:a/2;return{maxHalfWidthPx:c(he(e,o)),halfWidthPx:a=>{let i=n?.get(a);return c(i?de(i,e,o,s):e)}}}var go=[{value:"uniform",label:"Uniform",description:"Every link the same thickness."},{value:"walks",label:"By walks",description:"Thicker the more walks take a link, on the square root of its count against the busiest link in the cut. A graph without walks draws uniform."}],Kt=.5,pe=4;function wo(t){let n=0;for(let e of t.edges)n=Math.max(n,e.pathIds?.length??0);return n}function Ao(t,n,e){return e==="uniform"||n===0?1:Kt+(pe-Kt)*Math.sqrt(t/n)}export{gt as a,be as b,Nt as c,ve as d,ge as e,we as f,Ae as g,F as h,q as i,Xt as j,_e as k,Z as l,nt as m,Bt as n,Mn as o,D as p,et as q,Rt as r,Le as s,Xe as t,Ce as u,ke as v,He as w,We as x,je as y,Gt as z,Ue as A,Ke as B,oo as C,zt as D,jt as E,ro as F,fo as G,Kn as H,Jn as I,Qn as J,Zn as K,uo as L,te as M,lo as N,ho as O,yo as P,mo as Q,se as R,fe as S,Mo as T,de as U,xe as V,bo as W,go as X,wo as Y,Ao as Z};
2
- //# sourceMappingURL=chunk-CVHKXFVS.js.map
1
+ import{a as dt,c as ht,d as yt,g as C,j as K,l as xt,q as Mt,r as $,w as bt,x as vt}from"./chunk-NAC3EXT4.js";import{b as pt,c as mt}from"./chunk-B2MJV7HN.js";var gt=20;function be(t){let n=e=>Math.round(e*100)/100;return t.map((e,o)=>`${o?"L":"M"}${n(e.x)},${n(e.y)}`).join("")}function wt(t,n,e,o,r){let s=Math.hypot(o-n,e-t);if(s===0)return[e,o];let c=(e-t)/s,a=(o-n)/s;return[e+r*c,o+r*a]}function Y(t,n){let e=1-n,o=e*e*e,r=3*e*e*n,s=3*e*n*n,c=n*n*n;return{x:o*t.x0+r*t.cx0+s*t.cx1+c*t.x1,y:o*t.y0+r*t.cy0+s*t.cy1+c*t.y1}}function Pt(t){let n=t[Math.floor(t.length/2)];return n?Y(n,.5):void 0}function Nt(t){let n=1/0,e=1/0,o=-1/0,r=-1/0;for(let s of t)n=Math.min(n,s.x0,s.cx0,s.cx1,s.x1),o=Math.max(o,s.x0,s.cx0,s.cx1,s.x1),e=Math.min(e,s.y0,s.cy0,s.cy1,s.y1),r=Math.max(r,s.y0,s.cy0,s.cy1,s.y1);return{minX:n,minY:e,maxX:o,maxY:r}}function tn(t,n,e){let o=Y(t,n),r=Y(t,e),s=(e-n)/3,c=At(t,n),a=At(t,e);return{x0:o.x,y0:o.y,cx0:o.x+c.x*s,cy0:o.y+c.y*s,cx1:r.x-a.x*s,cy1:r.y-a.y*s,x1:r.x,y1:r.y}}function At(t,n){let e=1-n,o=3*e*e,r=6*e*n,s=3*n*n;return{x:o*(t.cx0-t.x0)+r*(t.cx1-t.cx0)+s*(t.x1-t.cx1),y:o*(t.cy0-t.y0)+r*(t.cy1-t.cy0)+s*(t.y1-t.cy1)}}var H=32;function nn(t,n,e,o){let r=[],s=0;return t.forEach((c,a)=>{let i=n[a],d=i/H,l=Y(c,0);for(let u=1;u<=H;u++){let h=Y(c,u/H);if(Math.max(l.x,h.x)+d>=e.minX&&Math.min(l.x,h.x)-d<=e.maxX&&Math.max(l.y,h.y)+d/o>=e.minY&&Math.min(l.y,h.y)-d/o<=e.maxY){let f=s+i*(u-1)/H,y=s+i*u/H,x=r.at(-1);x&&x[1]>=f?x[1]=y:r.push([f,y])}l=h}s+=i}),r}function ve(t,n,e=1,o){let r=t.map(u=>Math.hypot(u.cx0-u.x0,(u.cy0-u.y0)*e)+Math.hypot(u.cx1-u.cx0,(u.cy1-u.cy0)*e)+Math.hypot(u.x1-u.cx1,(u.y1-u.cy1)*e)),s=r.reduce((u,h)=>u+h,0),c=Math.round(s/n),a=Math.max(3,c%2?c:c+1),i=o?nn(t,r,o,e):void 0,d=0,l=[];for(let u=0;u<a;u+=2){let h=u/a*s,f=(u+1)/a*s;if(i){for(;d<i.length&&i[d][1]<h;)d++;if(d===i.length)break;if(i[d][0]>f)continue}let y=[],x=[],p=0;t.forEach((b,m)=>{let M=r[m],g=p+M;if(M>0&&g>h&&p<f){let v=Math.max(0,(h-p)/M),w=Math.min(1,(f-p)/M);y.push(tn(b,v,w)),x.push((m+v)/t.length,(m+w)/t.length)}p=g}),y.length&&l.push({curves:y,startAlong:x[0],endAlong:x.at(-1)})}return l}var ge=(t,n,e)=>({dx:t.dx+(n.dx-t.dx)*e,dy:t.dy+(n.dy-t.dy)*e});function we(t,n,e,o,r){let s=t.length,c=new Array(s);for(let a=0;a<s;a++){let i=t[a],d=a/s,l=(a+1)/s,u=n+(o-n)*d,h=e+(r-e)*d,f=n+(o-n)*l,y=e+(r-e)*l;c[a]={x0:i.x0+u,y0:i.y0+h,cx0:i.cx0+u,cy0:i.cy0+h,cx1:i.cx1+f,cy1:i.cy1+y,x1:i.x1+f,y1:i.y1+y}}return c}function Ae(t,n,e){let o=new Array(t.length);for(let r=0;r<t.length;r++){let s=t[r];o[r]={x0:s.x0+n,y0:s.y0+e,cx0:s.cx0+n,cy0:s.cy0+e,cx1:s.cx1+n,cy1:s.cy1+e,x1:s.x1+n,y1:s.y1+e}}return o}function W(t,n){let e=t.length-1;return n==="end"?{at:t[e],inward:t[e-1]}:{at:t[0],inward:t[1]}}var en=.5,on=80;function F(t){return t.endsWith("-")?"-":"+"}function q(t){let n=(e,o)=>(o??F(e))===F(e);return{from:n(t.from,t.fromStrand)?"end":"start",to:n(t.to,t.toStrand)?"start":"end"}}function _t(t){let n=1/0,e=-1/0;for(let o of t)n=Math.min(n,o.x),e=Math.max(e,o.x);return{min:n,max:e}}function Et(t,n){return Math.max(0,n.min-t,t-n.max)}function It(t,n,e){let o=Et(t[0].x,n),r=Et(t[t.length-1].x,n);return o===r?e:o<r?"start":"end"}function rn(t,n){return{from:It(t,_t(n),"end"),to:It(n,_t(t),"start")}}var Lt=new WeakMap;function sn(t,n){let e=Lt.get(t);e||(e=new WeakMap,Lt.set(t,e));let o=e.get(n);return o||(o=rn(t,n),e.set(n,o)),o}var cn=.75,an=1.15,fn=.35,un=3*gt;function ln(t,n,e,o,r,s){let c=Math.hypot(e-t,o-n),a=c===0?1:(e-t)/c,i=c===0?0:(o-n)/c,d=0,l=1/0,u=-1/0;for(let x of r){let p=x.x-t,b=x.y-n,m=p*-i+b*a;Math.abs(m)>Math.abs(d)&&(d=m);let M=p*a+b*i;l=Math.min(l,M),u=Math.max(u,M)}let h=r.length?u-l:0,f=Math.max(Math.abs(d)*an/cn,h*fn),y=s===void 0?f:Math.min(f,s);return d<0?-y:y}function Xt({scaleX:t,scaleY:n}){return n/t}var dn=3;function J(t,n,e){let o=n.x-t.x,r=(n.y-t.y)*e,s=Math.hypot(o,r);return s===0?void 0:{x:o/s,y:r/s}}function _e(t,n,e,o){let r=Xt(o),s=dn/Math.max(o.scaleX,1e-6),c=J(t[t.length-1],n[0],r)??J(t[0],t.at(-1),r)??J(n[0],n.at(-1),r)??{x:1,y:0},a=[];for(let i=0;i<e;i++){let d=(i-(e-1)/2)*s;a.push({x:-c.y*d,y:c.x*d/r})}return a}function Q(t,n){return t.map(e=>({x:e.x,y:e.y*n}))}function hn(t,n){for(let e of t)e.y0/=n,e.cy0/=n,e.cy1/=n,e.y1/=n;return t}function Z(t,n,e){let o=0;for(let r=1;r<t.length;r++){let s=t[r-1],c=t[r];o+=Math.hypot((c.x-s.x)*n,(c.y-s.y)*e)}return o}var yn=12,xn=40;function Ot(t,n){let e=Z(t,n,n);return Math.min(xn,Math.max(yn,e/2))/Math.max(n,Number.EPSILON)}function pn(t){return t.from!==t.to?!1:t.fromStrand&&t.toStrand&&t.fromStrand!==t.toStrand?t.fromStrand==="+"?"end":"start":!0}function Ct(t,n=!1){let e=pn(t);if(!n)return e;let o=q(t);return e===!1?o:o.from===o.to?o.from:!0}function mn(t,n){let{at:e,inward:o}=t,r=o?e.x-o.x:1,s=o?e.y-o.y:0,c=Math.hypot(r,s)||1,a=r/c,i=s/c,d=e.x,l=e.y,u=d+a*n/3,h=l+i*n/3,f=d+a*n,y=l+i*n,x=-i*n/2,p=a*n/2;return[{x0:d,y0:l,cx0:u,cy0:h,cx1:f+x,cy1:y+p,x1:f,y1:y},{x0:f,y0:y,cx0:f-x,cy0:y-p,cx1:u,cy1:h,x1:d,y1:l}]}function tt(t,n,e,o,r=[],s){let c=o.scaleX,a=Xt(o),i=s??(o.pixelRows?un:void 0);if(e===!1&&(e=sn(t,n)),a!==1)return hn(tt(Q(t,a),Q(n,a),e,{scaleX:c,scaleY:c},Q(r,a),i===void 0?void 0:i*a),a);if(typeof e=="string")return mn(W(t,e),Ot(t,c));let d=e===!0,l=e===!0?{from:"end",to:"start"}:e,u=W(t,l.from),h=W(n,l.to),f=u.at,y=h.at,x=f.x,p=f.y,b=y.x,m=y.y;if(d){let M=1,g=0;if(u.inward){let S=f.x-u.inward.x,P=f.y-u.inward.y,X=Math.hypot(S,P);X>0&&(M=S/X,g=P/X)}let v=Ot(t,c),w=-g,_=M,I=(f.x+y.x)/2+w*v,E=(f.y+y.y)/2+_*v,A=x+M*v,N=p+g*v,O=b-M*v,L=m-g*v;return[{x0:x,y0:p,cx0:A,cy0:N,cx1:A+w*v,cy1:N+_*v,x1:I,y1:E},{x0:I,y0:E,cx0:O+w*v,cy0:L+_*v,cx1:O,cy1:L,x1:b,y1:m}]}else{let M=u.inward??{x:f.x-(y.x-f.x),y:f.y-(y.y-f.y)},g=h.inward??{x:y.x-(f.x-y.x),y:y.y-(f.y-y.y)},v=Math.hypot(b-x,m-p),w=(at,it,Jt,Qt)=>{let ft=it.x-at.x,ut=it.y-at.y,lt=Math.hypot(ft,ut),Zt=lt===0?0:(Jt*ft+Qt*ut)/lt;return Math.max(0,Math.min(v*en,on,Zt*.5))},_=y.x-f.x,I=y.y-f.y,[E,A]=wt(M.x,M.y,f.x,f.y,w(M,f,_,I)),[N,O]=wt(g.x,g.y,y.x,y.y,w(g,y,-_,-I)),L=r.length?ln(x,p,b,m,r,i):0,S=v===0?1:v,P=(b-x)/S,X=(m-p)/S,T=-X*L,B=P*L,R=P*Math.abs(L),ct=X*Math.abs(L);return[{x0:x,y0:p,cx0:E+T-R,cy0:A+B-ct,cx1:N+T+R,cy1:O+B+ct,x1:b,y1:m}]}}function St(t,n){let e=t[0],o=t.at(-1);return Math.hypot(e.x-n.x,e.y-n.y)<Math.hypot(o.x-n.x,o.y-n.y)?"start":"end"}function kt(t,n,e,o){let r=W(t,o?.from??St(t,e[0])),s=W(n,o?.to??St(n,e.at(-1))),c=[r.at,...e,s.at],a=d=>{let l=c[d],u=f=>Math.hypot(f.x-l.x,f.y-l.y),h=(f,y)=>{let x=f?u(f):0,p=u(y);return x===0?{x:y.x-l.x,y:y.y-l.y}:{x:(l.x-f.x)/x*p,y:(l.y-f.y)/x*p}};if(d===0)return h(r.inward,c[1]);if(d===c.length-1){let f=h(s.inward,c[d-1]);return{x:-f.x,y:-f.y}}return{x:(c[d+1].x-c[d-1].x)/2,y:(c[d+1].y-c[d-1].y)/2}},i=[];for(let d=0;d<c.length-1;d++){let l=c[d],u=c[d+1],h=a(d),f=a(d+1);i.push({x0:l.x,y0:l.y,cx0:l.x+h.x/3,cy0:l.y+h.y/3,cx1:u.x-f.x/3,cy1:u.y-f.y/3,x1:u.x,y1:u.y})}return i}function nt(){let t=new WeakMap;return(n,e,o)=>{let r=t.get(n);if(r?.deps.length===e.length&&r.deps.every((c,a)=>Object.is(c,e[a])))return r.value;let s=o();return t.set(n,{deps:e,value:s}),s}}var Bt=11,Mn=6.2,D=4;function et(t){return t.length*Mn+D*2}function bn(t,n){return t.x0<n.x1&&t.x1>n.x0&&t.y0<n.y1&&t.y1>n.y0}function Tt(t,n){return t.x1<=0||t.x0>=n.width||t.y1<=0||t.y0>=n.height}function vn(t,n){return t.x0>=0&&t.x1<=n.width&&t.y0>=0&&t.y1<=n.height}function Rt(t,n=[]){let e=[...n];return o=>Tt(o,t)||e.some(r=>bn(r,o))?!1:(e.push(o),!0)}function Le(t,n,e){let o=[],r=Bt+D*2,s=(c,a)=>{let i=et(a),d=c.y>n.height/2?-1:1;for(let l=0;l<=(c.stack??0);l++){let u=c.y+d*l*r,h={x0:c.x-i/2,x1:c.x+i/2,y0:u-Bt-D,y1:u+D};if(Tt(h,n))return;if(vn(h,n)&&(c.fits?.(h)??!0)&&e(h))return{...c,text:a,y:u,w:i}}};for(let c of t){let a=s(c,c.text)??(c.fallback===void 0?void 0:s(c,c.fallback));a&&o.push(a)}return o}function $t(t){return t==="+"?"-":"+"}function Xe(t,n=new Set){let e=t.edges.map(q),o=new Map,r=(f,y,x)=>{dt(o,`${f}|${y}`,x)};t.edges.forEach((f,y)=>{r(f.from,e[y].from,y),r(f.to,e[y].to,y)});let s=f=>{let y=o.get(`${f}|end`);if(y?.length!==1)return;let x=y[0],p=t.edges[x];return p.from===f&&p.to!==f&&!n.has(f)&&!n.has(p.to)&&e[x].from==="end"&&e[x].to==="start"&&o.get(`${p.to}|start`)?.length===1?x:void 0},c=new Set,a=new Map,i=new Map;for(let f of t.nodes){let y=o.get(`${f.id}|start`),x=y?.length===1?t.edges[y[0]].from:void 0;if(a.has(f.id)||x!==void 0&&s(x)===y[0])continue;let p=[f.id];for(;;){let b=s(p.at(-1)),m=b===void 0?void 0:t.edges[b].to;if(m===void 0||a.has(m))break;c.add(b),p.push(m)}for(let b of p)a.set(b,f.id);p.length>1&&i.set(f.id,p)}for(let f of t.nodes)a.has(f.id)||a.set(f.id,f.id);let d=new Map(t.nodes.map(f=>[f.id,f])),l=[];for(let f of t.nodes){if(a.get(f.id)!==f.id)continue;let y=i.get(f.id);if(!y){l.push(f);continue}let x=y.map(m=>d.get(m)),p=x.filter(C),b=p.length?p.reduce((m,M)=>m.stable.start<=M.stable.start?m:M):x[0];l.push({id:f.id,name:f.name,length:x.reduce((m,M)=>m+M.length,0),depth:f.depth,stable:b.stable})}let u=new Set,h=[];return t.edges.forEach((f,y)=>{let x=a.get(f.from),p=a.get(f.to),b=e[y],m=`${x}|${b.from}>${p}|${b.to}`;c.has(y)||u.has(m)||(u.add(m),h.push({from:x,to:p,...b.from==="start"?{fromStrand:$t(F(x))}:{},...b.to==="end"?{toStrand:$t(F(p))}:{}}))}),{graph:{...t,nodes:l,edges:h,paths:void 0,pathVisits:void 0},runs:i}}function Ce(t,n,e){let o={...t};for(let[r,s]of n){let c=t[r];if(!c?.length)continue;delete o[r];let a=rt(c),i=a.at(-1),d=s.map(h=>Math.max(e(h),0)),l=d.reduce((h,f)=>h+f,0),u=0;s.forEach((h,f)=>{let y=l?d[f]/l*i:i/s.length,x=f===s.length-1?i:u+y;o[h]=Yt(c,a,u,x),u=x})}return o}function ke(t,n,e){if(t.length===0)return[];let o=rt(t),r=o.at(-1);return Yt(t,o,n*r,e*r)}function Ht(t){let n=rt(t);return ot(t,n,n.at(-1)/2)}function rt(t){let n=[0];for(let e=1;e<t.length;e++)n.push(n[e-1]+Math.hypot(t[e].x-t[e-1].x,t[e].y-t[e-1].y));return n}function Wt(t,n){let e=0,o=t.length;for(;e<o;){let r=e+o>>1;t[r]<n?e=r+1:o=r}return e}function ot(t,n,e){if(e<=0)return{...t[0]};let o=Wt(n,e);if(o>=n.length)return{...t.at(-1)};let r=n[o]-n[o-1],s=r>0?(e-n[o-1])/r:0,c=t[o-1],a=t[o];return{x:c.x+(a.x-c.x)*s,y:c.y+(a.y-c.y)*s}}function Yt(t,n,e,o){let r=[ot(t,n,e)];for(let s=Wt(n,e);s<t.length&&n[s]<o;s++)n[s]>e&&r.push({...t[s]});return r.push(ot(t,n,o)),r}function He(t,n){let e=new Set(t.nodes.filter(i=>C(i)&&K(i,n)).map(i=>i.id)),o=t.paths??[];if(e.size===0||o.length===0)return t;let r=o.map(i=>{let d=-1,l=-1;return i.nodeIds.forEach((u,h)=>{e.has(u)&&(d<0&&(d=h),l=h)}),d<0?void 0:{first:d,last:l}});if(r.every((i,d)=>i?.first===0&&i.last===o[d].nodeIds.length-1))return t;let s=new Set,c=[],a=new Map;return o.forEach((i,d)=>{let l=r[d];if(l){let u=i.nodeIds.slice(l.first,l.last+1);for(let h of u)s.add(h);c.push({...i,nodeIds:u}),a.set(i.name,{first:l.first,nodeIds:u})}}),{...t,nodes:t.nodes.filter(i=>s.has(i.id)),edges:t.edges.filter(i=>s.has(i.from)&&s.has(i.to)),paths:c,pathVisits:t.pathVisits&&gn(t.pathVisits,o,r,new Map(t.nodes.map(i=>[i.id,i.name]))),anchorPaths:bt(t,a)}}function gn(t,n,e,o){let r=t.replay(),s=new Mt;return n.forEach((c,a)=>{let i=t.pathIndex($(c.name).name),d=e[a];c.nodeIds.forEach((l,u)=>{let h=o.get(l)??l,f=r(t.slot(h),i);f>=0&&d&&u>=d.first&&u<=d.last&&s.add(h,t.paths[i],t.samples[i],t.start[f],t.reversed[f]===1)})}),s.build()}function We(t,n,e){let o=t.nodes.map(r=>{if(!C(r))return r;let s=r.stable.start,c=s+r.length,[a,i]=K(r,n)?[Math.max(s,n.start),Math.min(c,n.end)]:c<=n.start?[Math.max(s,c-e),c]:[s,Math.min(c,s+e)];return a===s&&i===c?r:{...r,length:i-a,stable:{...r.stable,start:a},unclipped:{start:s,length:r.length}}});return o.some((r,s)=>r!==t.nodes[s])?{...t,nodes:o}:t}function Ft(t){return t.nodes.some(n=>n.unclipped)?{...t,nodes:t.nodes.map(({unclipped:n,...e})=>n&&e.stable?{...e,length:n.length,stable:{...e.stable,start:n.start}}:e)}:t}var wn=1,je=t=>`skips ${t??"the reference"} sequence (a deletion)`;function An(t,n){return n.flatMap(e=>t[e]??[])}function Gt(t,n,e,o,r,s){let c=t[n.from],a=t[n.to];if(!(!c?.length||!a?.length))return r?kt(c,a,r,s?q(n):void 0):tt(c,a,Ct(n,s),e,o?An(t,o):[])}function _n(t){let n=ht(t.nodes.filter(C),e=>e.stable.refName);for(let e of n.values())e.sort((o,r)=>o.stable.start-r.stable.start);return n}function En(t,n,e){let o=[];if(t)for(let r=xt(t,n);r<t.length;r++){let s=t[r];if(s.stable.start>=e)break;s.stable.start+s.length<=e&&o.push(s.id)}return o}function In(t,n,e,o){let{fromStrand:r,toStrand:s}=t;if(r===void 0||s===void 0)return!0;let c=r===(n.stable.strand??"+"),a=s===(e.stable.strand??"+");return o?c&&a:!c&&!a}function Ln(t,n,e,o){let r;for(let s of o(n))for(let c of o(e)){let a=s<=c,i=a?{start:s+n.length,end:c}:{start:c+e.length,end:s};In(t,n,e,a)&&(!r||Math.abs(i.end-i.start)<Math.abs(r.end-r.start))&&(r=i)}return r}var On=.01;function Sn(t,n){let e=new Map;for(let[o,r]of t){let s=r.flatMap(c=>{let a=n(c);return a.slice(1).map((i,d)=>({at:a[d],copy:i-a[d]}))});s.length&&e.set(o,s.sort((c,a)=>c.at-a.at))}return e}function Pn(t,n,e){if(!t)return!1;let o=yt(t.length,s=>t[s].at<n),r=[t[o-1],t[o]].filter(s=>s!==void 0).sort((s,c)=>Math.abs(s.at-n)-Math.abs(c.at-n))[0];return r!==void 0&&Math.abs(r.at-n)<=r.copy&&Math.abs(e-r.copy)<=r.copy*On}function Ue(t){let n=Ft(t),e=new Map(n.nodes.map(a=>[a.id,a])),o=_n(n),r=vt(n),s=Sn(o,r),c=[];for(let a=0;a<n.edges.length;a++){let i=n.edges[a],d=e.get(i.from),l=e.get(i.to);if(!i.foldBridge&&d!==void 0&&l!==void 0&&C(d)&&C(l)&&d.stable.refName===l.stable.refName){let u=Ln(i,d,l,r),h=d.stable.refName,f=u?u.end-u.start:0;if(u&&f>=wn&&!Pn(s.get(h),u.start,f)){let{start:y,end:x}=u;c.push({edgeIndex:a,from:i.from,to:i.to,...i.fromStrand?{fromStrand:i.fromStrand}:{},...i.toStrand?{toStrand:i.toStrand}:{},refName:h,start:y,end:x,bp:f,bypassed:En(o.get(h),y,x)})}}}return c}function Nn(t,n){let e=new Map,o=c=>{let a=c;for(;e.has(a);)a=e.get(a);return a!==c&&e.set(c,a),a},r=(c,a)=>{let[i,d]=[o(c),o(a)];return i!==d&&e.set(i,d),i!==d},s=new Set(n.map(c=>c.edgeIndex));return t.edges.forEach((c,a)=>{s.has(a)||r(c.from,c.to)}),new Set(n.filter(c=>!r(c.from,c.to)).map(c=>c.edgeIndex))}var qt=new WeakMap;function Ke(t,n,e=!0){let o=qt.get(n);o||(o=new Map,qt.set(n,o));let r=o.get(e);if(!r){let s=e?new Set:Nn(t,n);r={shown:n.filter(c=>!s.has(c.edgeIndex)),bypassed:new Map(n.map(c=>[c.edgeIndex,c.bypassed])),hidden:s},o.set(e,r)}return r}var Xn=26,Cn=4e4,kn=8,Bn=8,Tn=5.7,Rn=6,$n=13,G=3,V=2;function U(t){return(t.length*Tn+Rn+G)/2}var k=($n+G)/2,Hn=U("1 bp");function z(t,n,e){return{x0:n-t,x1:n+t,y0:e-k,y1:e+k}}function oo(t,n){return{x0:6,x1:6+et(t)+G,y0:n-8-G/2,y1:n+8+G/2}}function j(t,n,e){return e<n?t:Math.min(Math.max(t,n),e)}function zt(t){return String(t).replace(/\B(?=(\d{3})+$)/g,",")}function jt(t){let[n,e]=t>=999500?[t/1e6,"Mb"]:t>=1e3?[t/1e3,"kb"]:[];return n===void 0?`${t} bp`:`${+n.toFixed(n>=100?0:1)} ${e}`}function Dt(t){return`${jt(t)} del`}function Wn(t,n,e,o){let r=t[0],s=t[t.length-1],c=(n.x-(r.x0+s.x1)/2)*e,a=(n.y-(r.y0+s.y1)/2)*o,i=Math.hypot(c,a);return i===0?{x:0,y:-1}:{x:c/i,y:a/i}}function Yn(t,n){return Math.abs(n.x)*(t.x1-t.x0)/2+Math.abs(n.y)*(t.y1-t.y0)/2}function Fn(t,n){let e=(t.x1-t.x0)/2,o=(t.y1-t.y0)/2;return Math.min(n.x===0?1/0:e/Math.abs(n.x),n.y===0?1/0:o/Math.abs(n.y))}function qn(t,n){let e=1/0,o=1/0,r=-1/0,s=-1/0;for(let c of t)for(let a of n[c]??[])e=Math.min(e,a.x),r=Math.max(r,a.x),o=Math.min(o,a.y),s=Math.max(s,a.y);return e===1/0?void 0:{minX:e,minY:o,maxX:r,maxY:s}}var Gn=nt();function Dn(t,n){return Gn(t,[n],()=>Object.entries(t).filter(([e,o])=>o.length>0&&n.has(e)).sort(([e],[o])=>n.get(o)-n.get(e)))}var Vn=nt();function zn(t,n,e,o,r,s){let{scaleX:c,scaleY:a}=e;return Vn(t,[n,r,s,c,a,o],()=>{let i=[];for(let d of[...n].sort((l,u)=>u.bp-l.bp)){let l=Gt(t,d,e,d.bypassed,r?.[d.edgeIndex],s),u=l?Pt(l):void 0;if(l&&u){let{minX:h,minY:f,maxX:y,maxY:x}=Nt(l);i.push({deletion:d,curves:l,apex:u,extent:Math.max((y-h)*c,(x-f)*a)})}}return i})}function jn({nodePositions:t,nodeLengths:n,deletions:e,deletionRoutes:o,stranded:r=!1,alleleDeletions:s,axis:c,translateX:a,translateY:i,width:d,height:l,version:u=0}){let{scaleX:h,scaleY:f}=c,y=[],x=[];for(let{deletion:m,curves:M,apex:g,extent:v}of zn(t,e,c,u,o,r))if(v>=Xn){let w=Dt(m.bp),_=U(w),I=z(_,0,0),E=g.x*h+a,A=g.y*f+i;if(E<0||E>d||A<0||A>l)continue;let N=v>=_*2/V,O=Wn(M,g,h,f),L=Yn(I,O)+Bn,S=N?E:j(E+O.x*L,_,d-_),P=N?A:j(A+O.y*L,k,l-k),X=Math.hypot(S-E,P-A),T;if(X>0){let B={x:(S-E)/X,y:(P-A)/X},R=Fn(I,B);T={arcX:E,arcY:A,labelX:S-B.x*R,labelY:P-B.y*R}}y.push({label:{key:`del:${m.edgeIndex}`,text:w,x:S,y:P,kind:"deletion",leader:T},box:z(_,S,P)})}let p=new Set,b=[...s??[]].sort((m,M)=>M.bp-m.bp);for(let m of b){let M=qn(m.nodeIds,t);if(!M)continue;let g=Math.max(M.minX*h+a,0),v=Math.min(M.maxX*h+a,d),w=Math.max(M.minY*f+i,0),_=Math.min(M.maxY*f+i,l);if(v<g||_<w)continue;let I=Math.max(v-g,_-w),E=Dt(m.bp),A=U(E);if(I>=A*2/V){for(let L of m.nodeIds)p.add(L);let N=j((g+v)/2,A,d-A),O=j((w+_)/2,k,l-k);y.push({label:{key:`alleledel:${m.nodeIds.join(",")}`,text:E,x:N,y:O,kind:"deletion"},box:z(A,N,O)})}}for(let[m,M]of Dn(t,n)){if(p.has(m))continue;let{x:g,y:v}=Ht(M),w=v*f+i;if(w+k<=0||w-k>=l)continue;let _=Z(M,h,f);if(_<Hn*2/V)continue;let I=jt(n.get(m)),E=U(I);if(_>=E*2/V){let A=g*h+a;x.push({label:{key:`node:${m}`,text:I,x:A,y:w,kind:"node"},box:z(E,A,w)})}}return{deletions:y,nodes:x}}function Un(t,n){return Math.max(kn,Math.floor(t*n/Cn))}function Vt(t,n,e=1/0){let o=[];for(let{label:r,box:s}of t){if(o.length>=e)break;n(s)&&o.push(r)}return o}function ro({reserved:t,take:n,...e}){n??=Rt(e,t);let{deletions:o,nodes:r}=jn(e);return[...Vt(o,n),...Vt(r,n,Un(e.width,e.height))]}function fo(t){let n=0;for(let e=0;e<t.length;e++)n=t.charCodeAt(e)+((n<<5)-n);return Math.abs(n%360)}function Kn(t,n){return t*360/n}var Jn=.7,Qn=.5,Zn=16;function uo(t){return t>0&&t<=Zn}function te(t,n){return`hsl(${Kn(t,n)}, ${Jn*100}%, ${Qn*100}%)`}function lo(t,n){return`hsl(0, 0%, ${n>1?25+45*t/(n-1):45}%)`}function ne(t){let n=$(t).name.split("#"),e=n.join("#");if(n.length>=3&&pt(n[0])){let o=n.slice(2).join("#");return[o,o,e]}return[n[0],n.slice(0,2).join("#"),e]}function ee(t,n){let{start:e}=$(t);return n.map(o=>`${o} @${zt(e)}`)}function ho(t,n){let e=new Map;t.forEach((l,u)=>{e.has(l.name)||e.set(l.name,u)});let o=[...e].map(([l,u])=>({name:l,i:u})),r=o.map(l=>ne(l.name)),s=l=>o.map((u,h)=>r[h][l]),c=l=>o.map((u,h)=>ee(u.name,r[h])[l]),a=[s(0),s(1),c(0),s(2),c(1),c(2)],d=a.find(l=>new Set(l).size===o.length)??a.at(-1);return o.map(({name:l,i:u},h)=>({name:l,label:d[h],color:n?.[u]??te(u,t.length)}))}function yo(t){let n=new Map;return new Map([...t].sort((e,o)=>e.label.localeCompare(o.label)).map(e=>{let o=(n.get(e.label)??0)+1;return n.set(e.label,o),[e.name,o>1?`${e.label} (${o})`:e.label]}))}var mo=[{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:"frequency",label:"By frequency",description:"As wide as the share of haplotypes that pass a node, or its AF tag: full width at 100%, half at 50%, and wider where a haplotype passes it more than once."},{value:"uniform",label:"Uniform",description:"Every node the same thickness."}],oe=.3,st=3,re=.05;function se(t){let n=0,e=0;for(let o of t.nodes)n+=o.depth*o.length,e+=o.length;return e>0?n/e:0}function ce(t){return t.sample===void 0?mt(t.name)??t.name:`${t.sample}#${t.haplotype??0}`}function ae(t){return new Set((t.paths??[]).map(ce)).size}function ie(t,n){return t.frequency??(n>0?t.depth/n:void 0)}function fe(t,n){return n==="depth"?se(t):n==="frequency"?ae(t):0}function Ut(t){return Math.min(st,Math.max(re,t))}function ue(t,n){let e=ie(t,n);return e===void 0?1:Ut(e)}function Mo(t){return[1,.5,.1].map(n=>({label:`${n*100}%`,widthPx:t*Ut(n)}))}function le(t,n){return!(n>0)||!(t.depth>0)?1:Math.min(st,Math.max(oe,Math.sqrt(t.depth/n)))}function de(t,n,e,o){return n*(e==="depth"?le(t,o):e==="frequency"?ue(t,o):1)}function he(t,n){return t*(n==="uniform"?1:st)}var ye=4;function xe(t,n){return Math.max(t/n,ye)}function bo(t,n,e,o,r=0){let s=t?fe(t,o):0,c=a=>r>0?xe(a,r)*r/2:a/2;return{maxHalfWidthPx:c(he(e,o)),halfWidthPx:a=>{let i=n?.get(a);return c(i?de(i,e,o,s):e)}}}var go=[{value:"uniform",label:"Uniform",description:"Every link the same thickness."},{value:"walks",label:"By walks",description:"Thicker the more walks take a link, on the square root of its count against the busiest link in the cut. A graph without walks draws uniform."}],Kt=.5,pe=4;function wo(t){let n=0;for(let e of t.edges)n=Math.max(n,e.pathIds?.length??0);return n}function Ao(t,n,e){return e==="uniform"||n===0?1:Kt+(pe-Kt)*Math.sqrt(t/n)}export{gt as a,be as b,Nt as c,ve as d,ge as e,we as f,Ae as g,F as h,q as i,Xt as j,_e as k,Z as l,nt as m,Bt as n,Mn as o,D as p,et as q,Rt as r,Le as s,Xe as t,Ce as u,ke as v,He as w,We as x,je as y,Gt as z,Ue as A,Ke as B,oo as C,zt as D,jt as E,ro as F,fo as G,Kn as H,Jn as I,Qn as J,Zn as K,uo as L,te as M,lo as N,ho as O,yo as P,mo as Q,se as R,fe as S,Mo as T,de as U,xe as V,bo as W,go as X,wo as Y,Ao as Z};
2
+ //# sourceMappingURL=chunk-NSBH4FIW.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-CPMHA4W5.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-JJV2GT2Z.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HMXCN6PG.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-AB35TJST.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HNNP5QUN.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-H4UHV22B.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-T35SFBHW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-X4IP4DAD.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-OV7SD6TP.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-XWH4LB56.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-DAEEMZ74.js"],
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-CPMHA4W5.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-JJV2GT2Z.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HMXCN6PG.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-AB35TJST.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HNNP5QUN.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-H4UHV22B.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-T35SFBHW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-X4IP4DAD.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-OV7SD6TP.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-XWH4LB56.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-DAEEMZ74.js"],
4
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}\nvar dashCurves = (curves, dashWorld, yToX = 1, bounds) => dashSpans(curves, dashWorld, yToX, bounds).map((d) => d.curves);\nfunction dashSpans(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 const along = [];\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 const t0 = Math.max(0, (from - start) / length);\n const t1 = Math.min(1, (to - start) / length);\n dash.push(subCurve(c, t0, t1));\n along.push((k + t0) / curves.length, (k + t1) / curves.length);\n }\n start = end;\n });\n if (dash.length) {\n out.push({\n curves: dash,\n startAlong: along[0],\n endAlong: along.at(-1)\n });\n }\n }\n return out;\n}\nvar slideAt = (from, to, along) => ({\n dx: from.dx + (to.dx - from.dx) * along,\n dy: from.dy + (to.dy - from.dy) * along\n});\nfunction slideCurves(curves, fromDx, fromDy, toDx, toDy) {\n const n = curves.length;\n const out = new Array(n);\n for (let i = 0; i < n; i++) {\n const c = curves[i];\n const a = i / n;\n const b = (i + 1) / n;\n const adx = fromDx + (toDx - fromDx) * a;\n const ady = fromDy + (toDy - fromDy) * a;\n const bdx = fromDx + (toDx - fromDx) * b;\n const bdy = fromDy + (toDy - fromDy) * b;\n out[i] = {\n x0: c.x0 + adx,\n y0: c.y0 + ady,\n cx0: c.cx0 + adx,\n cy0: c.cy0 + ady,\n cx1: c.cx1 + bdx,\n cy1: c.cy1 + bdy,\n x1: c.x1 + bdx,\n y1: c.y1 + bdy\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 dashSpans,\n slideAt,\n slideCurves,\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-JJV2GT2Z.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-BRH73RCH.js\";\nimport {\n PathVisitsBuilder\n} from \"./chunk-BEUTROKU.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-H4UHV22B.js\";\nimport {\n referenceVisitStarts\n} from \"./chunk-BRH73RCH.js\";\nimport {\n computeEdgeCurves,\n edgeJoinOf,\n routedEdgeCurves,\n strandSides\n} from \"./chunk-JJV2GT2Z.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;\nvar deletionKey = (reference) => `skips ${reference ?? \"the reference\"} sequence (a deletion)`;\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 (!edge.foldBridge && 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 deletionKey,\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-HNNP5QUN.js\";\nimport {\n edgeCurvesOf\n} from \"./chunk-T35SFBHW.js\";\nimport {\n curveBounds,\n curveMidpoint,\n polylinePx\n} from \"./chunk-JJV2GT2Z.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-X4IP4DAD.js\";\nimport {\n pathOrigin\n} from \"./chunk-BRH73RCH.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(([name2, i]) => ({ name: name2, i }));\n const named = entries.map((e) => labelTiers(e.name));\n const name = (t) => entries.map((_, k) => named[k][t]);\n const offset = (t) => entries.map((e, k) => offsetTiers(e.name, named[k])[t]);\n const candidates = [\n name(0),\n name(1),\n offset(0),\n name(2),\n offset(1),\n offset(2)\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: name2, i }, k) => ({\n name: name2,\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", "import {\n panSNHaplotype\n} from \"./chunk-2JL2JVZ2.js\";\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: \"frequency\",\n label: \"By frequency\",\n description: \"As wide as the share of haplotypes that pass a node, or its AF tag: full width at 100%, half at 50%, and wider where a haplotype passes it more than once.\"\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;\nvar MIN_FREQUENCY_FACTOR = 0.05;\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 haplotypeOf(path) {\n return path.sample === void 0 ? panSNHaplotype(path.name) ?? path.name : `${path.sample}#${path.haplotype ?? 0}`;\n}\nfunction haplotypeCount(graph) {\n return new Set((graph.paths ?? []).map(haplotypeOf)).size;\n}\nfunction nodeFrequency(node, haplotypes) {\n return node.frequency ?? (haplotypes > 0 ? node.depth / haplotypes : void 0);\n}\nfunction withFrequencies(graph, frequencies) {\n if (!frequencies) {\n return graph;\n }\n const nodes = graph.nodes.map((node) => {\n const frequency = frequencies[node.name];\n return frequency === void 0 ? node : { ...node, frequency };\n });\n return { ...graph, nodes };\n}\nfunction widthNorm(graph, nodeWidth) {\n return nodeWidth === \"depth\" ? meanDepth(graph) : nodeWidth === \"frequency\" ? haplotypeCount(graph) : 0;\n}\nfunction frequencyFactor(f) {\n return Math.min(MAX_FACTOR, Math.max(MIN_FREQUENCY_FACTOR, f));\n}\nfunction frequencyWidthFactor(node, haplotypes) {\n const f = nodeFrequency(node, haplotypes);\n return f === void 0 ? 1 : frequencyFactor(f);\n}\nfunction frequencyKey(contigThickness) {\n return [1, 0.5, 0.1].map((f) => ({\n label: `${f * 100}%`,\n widthPx: contigThickness * frequencyFactor(f)\n }));\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, norm) {\n return contigThickness * (nodeWidth === \"depth\" ? depthWidthFactor(node, norm) : nodeWidth === \"frequency\" ? frequencyWidthFactor(node, norm) : 1);\n}\nfunction maxNodeWidthPx(contigThickness, nodeWidth) {\n return contigThickness * (nodeWidth === \"uniform\" ? 1 : MAX_FACTOR);\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 norm = graph ? widthNorm(graph, nodeWidth) : 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, norm) : contigThickness\n );\n }\n };\n}\n\nexport {\n NODE_WIDTHS,\n meanDepth,\n haplotypeCount,\n nodeFrequency,\n withFrequencies,\n widthNorm,\n frequencyKey,\n nodeWidthPx,\n maxNodeWidthPx,\n walkLaneWidthPx,\n nodeInk\n};\n", "// src/edgeWidths.ts\nvar EDGE_WIDTHS = [\n {\n value: \"uniform\",\n label: \"Uniform\",\n description: \"Every link the same thickness.\"\n },\n {\n value: \"walks\",\n label: \"By walks\",\n description: \"Thicker the more walks take a link, on the square root of its count against the busiest link in the cut. A graph without walks draws uniform.\"\n }\n];\nvar MIN_FACTOR = 0.5;\nvar MAX_FACTOR = 4;\nfunction busiestEdge(graph) {\n let most = 0;\n for (const edge of graph.edges) {\n most = Math.max(most, edge.pathIds?.length ?? 0);\n }\n return most;\n}\nfunction edgeWidthFactor(walks, busiest, edgeWidth) {\n if (edgeWidth === \"uniform\" || busiest === 0) {\n return 1;\n }\n return MIN_FACTOR + (MAX_FACTOR - MIN_FACTOR) * Math.sqrt(walks / busiest);\n}\n\nexport {\n EDGE_WIDTHS,\n busiestEdge,\n edgeWidthFactor\n};\n"],
5
5
  "mappings": "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",
6
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", "dashSpans", "curves", "dashWorld", "yToX", "bounds", "lengths", "c", "total", "a", "b", "periods", "spans", "stretches", "visibleStretches", "seen", "out", "i", "from", "to", "dash", "along", "start", "k", "length", "end", "t0", "t1", "subCurve", "slideAt", "slideCurves", "fromDx", "fromDy", "toDx", "toDy", "n", "adx", "ady", "bdx", "bdy", "translateCurves", "dx", "dy", "attachment", "segments", "side", "last", "TANGENT_SPAN_FACTOR", "MAX_TANGENT", "ownStrand", "id", "strandSides", "edge", "own", "strand", "spanOf", "min", "max", "s", "distanceToSpan", "x", "span", "facingSide", "other", "tieBreak", "startGap", "endGap", "facingSides", "fromSegments", "toSegments", "laidSides", "heldFacingSides", "byTo", "sides", "APEX_FRACTION", "BOW_CLEARANCE", "ALONG_FRACTION", "MAX_ROW_BOW_PX", "ROW_HEIGHT_PX", "bowAround", "p1x", "p1y", "p2x", "p2y", "toward", "maxBow", "chord", "ux", "uy", "reach", "minAlong", "maxAlong", "p", "perp", "uncapped", "size", "yToXOf", "scaleX", "scaleY", "PATH_RIBBON_SPACING_PX", "drawnDirection", "len", "pathRibbonOffsets", "count", "axis", "spacing", "dir", "offsets", "distance", "scaleYOf", "points", "unscaleYOf", "polylinePx", "SELF_LOOP_MIN_PX", "SELF_LOOP_MAX_PX", "selfLoopReach", "scale", "nodePx", "selfLinkOf", "edgeJoinOf", "stranded", "self", "hairpinCurves", "attach", "at", "inward", "px", "py", "nearX", "nearY", "apexX", "apexY", "sideX", "sideY", "computeEdgeCurves", "join", "bypassed", "maxBowIn", "loop", "fromAttach", "toAttach", "fromEnd", "toStart", "segDirX", "segDirY", "ext", "perpX", "perpY", "midX", "midY", "cp1x", "cp1y", "cp2x", "cp2y", "fromPrev", "toNext", "dist", "tangentProj", "prev", "towardX", "towardY", "towardToX", "towardToY", "cx1", "cy1", "projectLine", "cx2", "cy2", "bulge", "chordLen", "bulgeX", "bulgeY", "spreadX", "spreadY", "nearerEnd", "routedEdgeCurves", "route", "tangent", "q", "next", "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", "deletionKey", "reference", "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", "name2", "named", "e", "_", "k", "offset", "candidates", "labels", "labels2", "walkLabelsOf", "seen", "a", "b", "n", "NODE_WIDTHS", "MIN_FACTOR", "MAX_FACTOR", "MIN_FREQUENCY_FACTOR", "meanDepth", "graph", "weighted", "length", "node", "haplotypeOf", "path", "panSNHaplotype", "haplotypeCount", "nodeFrequency", "haplotypes", "widthNorm", "graph", "nodeWidth", "meanDepth", "haplotypeCount", "frequencyFactor", "f", "MAX_FACTOR", "MIN_FREQUENCY_FACTOR", "frequencyWidthFactor", "node", "haplotypes", "nodeFrequency", "frequencyKey", "contigThickness", "depthWidthFactor", "mean", "MIN_FACTOR", "nodeWidthPx", "norm", "maxNodeWidthPx", "MIN_WALK_LANE_PX", "walkLaneWidthPx", "width", "lanes", "nodeInk", "nodeById", "reach", "id", "EDGE_WIDTHS", "MIN_FACTOR", "MAX_FACTOR", "busiestEdge", "graph", "most", "edge", "edgeWidthFactor", "walks", "busiest", "edgeWidth"]
@@ -1,2 +1,2 @@
1
1
  function o(t){return t===void 0||t==="*"?void 0:t}function s(t){let e=t.split(" ");return{refName:e[0],start:+e[1],end:+e[2],segmentCount:+e[3],pathCount:+e[4],inversion:e[5]==="1",shortestAlleleLength:+e[6],longestAlleleLength:+e[7],segments:e[11],shortestAllele:o(e[12]),longestAllele:o(e[13])}}function u(t,e){return t.key!==void 0||e.key!==void 0?t.key===e.key:t.refName===e.refName&&t.start===e.start&&t.end===e.end}function i(t){return t.key??`${t.refName}:${t.start}-${t.end}`}function b(t){let{shortestAlleleLength:e,longestAlleleLength:n}=t;return e===n?`${n.toLocaleString()} bp`:`${e.toLocaleString()}-${n.toLocaleString()} bp`}var r=2147483647;function a(t){let{pathCount:e,segmentCount:n,inversion:l}=t;return[`${n} segments`,e===r?"more paths than gfatools counts":`up to ${e.toLocaleString()} paths`,...l?["inversion"]:[]].join(", ")}export{s as a,u as b,i as c,b as d,r as e,a as f};
2
- //# sourceMappingURL=chunk-BJHWGRMP.js.map
2
+ //# sourceMappingURL=chunk-PEE2MP7K.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-FX4RDMDN.js"],
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.2/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-FX4RDMDN.js"],
4
4
  "sourcesContent": ["// src/bubbles/bubbleLine.ts\nfunction sequence(field) {\n return field === void 0 || field === \"*\" ? void 0 : field;\n}\nfunction parseBubbleLine(line) {\n const cols = line.split(\"\t\");\n return {\n refName: cols[0],\n start: +cols[1],\n end: +cols[2],\n segmentCount: +cols[3],\n pathCount: +cols[4],\n inversion: cols[5] === \"1\",\n shortestAlleleLength: +cols[6],\n longestAlleleLength: +cols[7],\n segments: cols[11],\n shortestAllele: sequence(cols[12]),\n longestAllele: sequence(cols[13])\n };\n}\nfunction sameBubble(a, b) {\n return a.key !== void 0 || b.key !== void 0 ? a.key === b.key : a.refName === b.refName && a.start === b.start && a.end === b.end;\n}\nfunction bubbleKey(b) {\n return b.key ?? `${b.refName}:${b.start}-${b.end}`;\n}\nfunction bubbleLabel(bubble) {\n const { shortestAlleleLength: min, longestAlleleLength: max } = bubble;\n return min === max ? `${max.toLocaleString()} bp` : `${min.toLocaleString()}-${max.toLocaleString()} bp`;\n}\nvar SATURATED_PATH_COUNT = 2147483647;\nfunction bubbleDescription(bubble) {\n const { pathCount, segmentCount, inversion } = bubble;\n return [\n `${segmentCount} segments`,\n pathCount === SATURATED_PATH_COUNT ? \"more paths than gfatools counts\" : `up to ${pathCount.toLocaleString()} paths`,\n ...inversion ? [\"inversion\"] : []\n ].join(\", \");\n}\n\nexport {\n parseBubbleLine,\n sameBubble,\n bubbleKey,\n bubbleLabel,\n SATURATED_PATH_COUNT,\n bubbleDescription\n};\n"],
5
5
  "mappings": "AACA,SAASA,EAASC,EAAO,CACvB,OAAOA,IAAU,QAAUA,IAAU,IAAM,OAASA,CACtD,CACA,SAASC,EAAgBC,EAAM,CAC7B,IAAMC,EAAOD,EAAK,MAAM,GAAG,EAC3B,MAAO,CACL,QAASC,EAAK,CAAC,EACf,MAAO,CAACA,EAAK,CAAC,EACd,IAAK,CAACA,EAAK,CAAC,EACZ,aAAc,CAACA,EAAK,CAAC,EACrB,UAAW,CAACA,EAAK,CAAC,EAClB,UAAWA,EAAK,CAAC,IAAM,IACvB,qBAAsB,CAACA,EAAK,CAAC,EAC7B,oBAAqB,CAACA,EAAK,CAAC,EAC5B,SAAUA,EAAK,EAAE,EACjB,eAAgBJ,EAASI,EAAK,EAAE,CAAC,EACjC,cAAeJ,EAASI,EAAK,EAAE,CAAC,CAClC,CACF,CACA,SAASC,EAAWC,EAAGC,EAAG,CACxB,OAAOD,EAAE,MAAQ,QAAUC,EAAE,MAAQ,OAASD,EAAE,MAAQC,EAAE,IAAMD,EAAE,UAAYC,EAAE,SAAWD,EAAE,QAAUC,EAAE,OAASD,EAAE,MAAQC,EAAE,GAChI,CACA,SAASC,EAAUD,EAAG,CACpB,OAAOA,EAAE,KAAO,GAAGA,EAAE,OAAO,IAAIA,EAAE,KAAK,IAAIA,EAAE,GAAG,EAClD,CACA,SAASE,EAAYC,EAAQ,CAC3B,GAAM,CAAE,qBAAsBC,EAAK,oBAAqBC,CAAI,EAAIF,EAChE,OAAOC,IAAQC,EAAM,GAAGA,EAAI,eAAe,CAAC,MAAQ,GAAGD,EAAI,eAAe,CAAC,IAAIC,EAAI,eAAe,CAAC,KACrG,CACA,IAAIC,EAAuB,WAC3B,SAASC,EAAkBJ,EAAQ,CACjC,GAAM,CAAE,UAAAK,EAAW,aAAAC,EAAc,UAAAC,CAAU,EAAIP,EAC/C,MAAO,CACL,GAAGM,CAAY,YACfD,IAAcF,EAAuB,kCAAoC,SAASE,EAAU,eAAe,CAAC,SAC5G,GAAGE,EAAY,CAAC,WAAW,EAAI,CAAC,CAClC,EAAE,KAAK,IAAI,CACb",
6
6
  "names": ["sequence", "field", "parseBubbleLine", "line", "cols", "sameBubble", "a", "b", "bubbleKey", "bubbleLabel", "bubble", "min", "max", "SATURATED_PATH_COUNT", "bubbleDescription", "pathCount", "segmentCount", "inversion"]
@@ -1,2 +1,2 @@
1
1
  var tt;function ut(){return tt??(tt=import("./bandage-layout-UZEOCKMS.js").then(o=>o.default()).catch(o=>{throw tt=void 0,o})),tt}async function dt(o){return(await ut()).computeLayout(o.graph,o.options)}var Bt="\0deletion:";var kt=25*Math.PI/180,Pt=.25,St=150,nn=[0,-.35,.35,-.7,.7,-1.05,1.05,-1.4,1.4],pt=[0,1];function _t(o){return o?0:1}function lt(o,t){let n=t.x-o.x,e=t.y-o.y,s=Math.hypot(n,e)||1;return{x:n/s,y:e/s}}function gt(o,t,n){return{x:o.x+(t.x-o.x)*n,y:o.y+(t.y-o.y)*n}}function Dt(o){let t=0,n=0;for(let e of o)t+=e.x,n+=e.y;return{x:t/o.length,y:n/o.length}}function Gt(o){let t=new Float64Array(o.length);for(let n=1;n<o.length;n++)t[n]=t[n-1]+Math.hypot(o[n].x-o[n-1].x,o[n].y-o[n-1].y);return t}function Ut(o){var t;return(t=Gt(o)[o.length-1])!==null&&t!==void 0?t:0}var at=new Map;function en(o){let t=at.get(o);if(t!==void 0)return t;let n=on(o);return at.size>1e4&&at.clear(),at.set(o,n),n}function on(o){let t=1e-6,n=2*Math.PI-1e-6;for(let e=0;e<60;e++){let s=(t+n)/2;s/(2*Math.sin(s/2))<o?t=s:n=s}return(t+n)/2}function sn(o,t){if(o<1e-9)return Math.PI*t;let n=(o*o/4+t*t)/(2*t),e=2*Math.asin(Math.min(1,o/(2*n)));return n*(t>n?2*Math.PI-e:e)}function mt(o,t,n,e){let s=t-2*n,i=o<1e-9?2*Math.PI:en(s/o),r=s/i,l=Math.cos(i/2),d=o/2,c=e+n-r*l;return{at:a=>{if(a<=n)return{u:0,v:e+a};if(a>=t-n)return{u:o,v:e+t-a};let h=(a-n)/r-i/2;return{u:d+r*Math.sin(h),v:c+r*Math.cos(h)}},apex:e+n+r*(1-l),length:t}}function It(o,t,n){if(!n)return o;let e=Math.cos(n),s=Math.sin(n);return{...o,at:i=>{let{u:r,v:l}=o.at(i),d=r-t/2;return{u:t/2+d*e-l*s,v:d*s+l*e}}}}function rn(o){for(let t=0;t<=32;t++)if(o.at(o.length*t/32).v<-1e-6)return!0;return!1}function Ot(o,t,n,e,s){return{at:i=>({u:o+n*i,v:t+e*i}),apex:t+Math.max(0,e)*s,length:s}}var ot=class{constructor(t,n,e=!1){var s;this.pts=t,this.normals=n,this.straight=e,this.arc=Gt(t),this.total=(s=this.arc[t.length-1])!==null&&s!==void 0?s:0}segment(t){let{arc:n}=this,e=1,s=n.length-1;for(;e<s;){let i=e+s>>1;n[i]<t?e=i+1:s=i}return e}fraction(t,n){let e=this.arc[t]-this.arc[t-1];return e>0?(n-this.arc[t-1])/e:0}pointAt(t){let{pts:n}=this,e=n.length-1;if(e===0)return{...n[0]};if(t<=0){let i=lt(n[0],n[1]);return{x:n[0].x+i.x*t,y:n[0].y+i.y*t}}if(t>=this.total){let i=lt(n[e-1],n[e]),r=t-this.total;return{x:n[e].x+i.x*r,y:n[e].y+i.y*r}}let s=this.segment(t);return gt(n[s-1],n[s],this.fraction(s,t))}normalAt(t){let{normals:n}=this;if(n.length===1||t<=0)return n[0];if(t>=this.total)return n[n.length-1];let e=this.segment(t),{x:s,y:i}=gt(n[e-1],n[e],this.fraction(e,t)),r=Math.hypot(s,i)||1;return{x:s/r,y:i/r}}};function an(o,t){let n=Dt(o);return o.map((e,s)=>{let i=lt(o[Math.max(0,s-1)],o[Math.min(o.length-1,s+1)]),r={x:-i.y,y:i.x},l=e.x-n.x,d=e.y-n.y,c=Math.hypot(l,d),a=r.x*l+r.y*d,h=t[s],f=c>1e-9&&Math.abs(a)>.3*c?Math.sign(a):Math.sign(r.x*h.x+r.y*h.y)||1;return{x:r.x*f,y:r.y*f}})}function xt(o,t,n,e,s){let i=Math.min(s,Math.max(e.length/24,.5)),r=[],l=[];for(let d=0;d<=e.length+1e-9;d+=i){let{u:c,v:a}=e.at(Math.min(d,e.length)),h=o.pointAt(t+c),f=o.normalAt(t+c),u=f.x*n,g=f.y*n;r.push({x:h.x+u*a,y:h.y+g*a}),l.push({x:u,y:g})}return{pts:r,refs:l}}var Ft=5,cn=10.5/2;function yt(o,t,n,e,s,i){let r=s,l=xt(o,t,n,e(r),i);if(o.straight)return l;for(let d=0;d<6;d++){let c=Ut(l.pts);if(!(c>0)||Math.abs(c/s-1)<.001)break;r*=s/c,l=xt(o,t,n,e(r),i)}return l}function ct(o,t){return Array.from({length:t},(n,e)=>o+e*15/2)}function Tt(o){if(o.length===0)return 1/0;let t=1/0,n=-1/0;for(let e of o)t=Math.min(t,e.point.x),n=Math.max(n,e.point.x);return n-t}function Rt(o,t){return o*73856093^t*19349663}var ht=class{constructor(t){this.c=t,this.grid=new Map;let{ids:n,first:e,count:s,per:i,seedX:r,seedY:l,backbone:d}=t,c=n.length;this.points=Array.from({length:c},()=>{}),this.params=Array.from({length:c},()=>{}),this.curves=Array.from({length:c},()=>{}),this.links=t.links.map((f,u)=>f.map(g=>g.filter(([M])=>M!==u))),this.route=n.map(f=>f.startsWith(Bt));let a=1/0,h=-1/0;for(let f=0;f<c;f++){let u=e[f];!d[u]||Number.isNaN(r[u])||(a=Math.min(a,r[u]),h=Math.max(h,r[u]+i[f]*(s[f]-1)))}this.backbone=new ot([{x:a,y:0},{x:h,y:0}],[{x:0,y:1},{x:0,y:1}],!0),this.backboneCentroid={x:(a+h)/2,y:0};for(let f=0;f<c;f++){let u=e[f];if(!d[u]||Number.isNaN(r[u]))continue;let g=[],M=[];for(let b=0;b<s[f];b++){let U=r[u]+b*i[f];g.push({x:U,y:l[u]}),M.push(U-a)}this.points[f]=g,this.params[f]=M,this.curves[f]=this.backbone,this.occupy(g,this.backbone)}}static hasBackbone(t){for(let n=0;n<t.ids.length;n++){let e=t.first[n];if(t.backbone[e]&&!Number.isNaN(t.seedX[e]))return!0}return!1}run(){let t=[];for(let e=0;e<this.points.length;e++)this.points[e]||t.push(e);let n=this.componentsOf(t).map(e=>({members:e,anchors:this.anchorsOf(e)})).filter(e=>e.anchors.length).map(e=>({members:e.members,span:Tt(e.anchors),drawn:e.members.reduce((s,i)=>s+this.drawn(i),0),feet:e.anchors.map(s=>`${s.point.x},${s.point.y}`).sort().join(" ")})).sort((e,s)=>e.span-s.span||(e.feet===s.feet?s.drawn-e.drawn:e.drawn-s.drawn));for(let e of n)this.placePiece(e.members,this.backboneCentroid)}write(t,n){let{first:e}=this.c;this.points.forEach((s,i)=>{s?.forEach((r,l)=>{t[e[i]+l]=r.x,n[e[i]+l]=r.y})})}drawn(t){return this.c.per[t]*(this.c.count[t]-1)}endIndex(t,n){return n?this.c.count[t]-1:0}occupy(t,n){for(let e of t){let s=Rt(Math.floor(e.x/10.5),Math.floor(e.y/10.5)),i=this.grid.get(s),r={x:e.x,y:e.y,curve:n};i?i.push(r):this.grid.set(s,[r])}}violations(t,n,e,s){var i;let r=0;for(let l of t){if(e.some(a=>Math.hypot(l.x-a.x,l.y-a.y)<15))continue;let d=Math.floor(l.x/10.5),c=Math.floor(l.y/10.5);for(let a=d-1;a<=d+1;a++)for(let h=c-1;h<=c+1;h++)for(let f of(i=this.grid.get(Rt(a,h)))!==null&&i!==void 0?i:[])if(f.curve!==n&&Math.hypot(l.x-f.x,l.y-f.y)<10.5&&(r++,r>=s))return r}return r}choose(t,n,e){let s,i=1/0;for(let r of t){let l=this.violations(r(cn).pts,n,e,i);if(l===0)return r(Ft);l<i&&(i=l,s=r)}return s(Ft)}anchorsOf(t){let n=new Set(t),e=[];for(let s of t)for(let i of pt)for(let[r,l]of this.links[s][i]){let d=this.points[r];if(n.has(r)||!d)continue;let c=this.endIndex(r,l);e.push({u:s,uSide:i,v:r,vSide:l,point:d[c],curve:this.curves[r],t:this.params[r][c]})}return e}componentsOf(t){let n=new Set(t),e=new Set,s=[];for(let i of t){if(e.has(i))continue;let r=[i];e.add(i);for(let l of r)for(let d of pt)for(let[c]of this.links[l][d])n.has(c)&&!e.has(c)&&(e.add(c),r.push(c));s.push(r)}return s}spinePath(t,n,e,s,i){let r=new Set(t),l=(u,g)=>u*2+g,d=(u,g)=>u===s&&_t(g)===i,c=new Map([[l(n,e),-1]]),a=[[n,e]],h=[n,e];for(let[u,g]of a){if(h=[u,g],s!==void 0&&d(u,g))break;for(let[M,b]of this.links[u][_t(g)])!r.has(M)||c.has(l(M,b))||(c.set(l(M,b),l(u,g)),a.push([M,b]))}if(s!==void 0&&!d(h[0],h[1]))return;let f=[];for(let u=l(h[0],h[1]);u!==-1;u=c.get(u))f.push({k:u>>1,enter:u&1});return f.reverse()}loosePath(t,n,e){let s=new Set(t),i=new Map([[n,-1]]),r=new Map([[n,0]]),l=[n];for(let c of l){if(c===e)break;for(let a of pt)for(let[h,f]of this.links[c][a])!s.has(h)||i.has(h)||(i.set(h,c),r.set(h,f),l.push(h))}let d=[];for(let c=e;c!==-1;c=i.get(c))d.push({k:c,enter:r.get(c)});return d.reverse()}spineLength(t){let{link:n}=this.c;return t.reduce((e,{k:s})=>e+this.drawn(s)+n,n)}layAlong(t,n,e,s){let{count:i,per:r,link:l}=this.c,d=e,c=[];for(let{k:a,enter:h}of t){let f=s??r[a],u=[],g=[];for(let M=0;M<i[a];M++)u.push(n.pointAt(d+M*f)),g.push(d+M*f);h===1&&(u.reverse(),g.reverse()),this.points[a]=u,this.params[a]=g,this.curves[a]=n,c.push(...u),d+=f*(i[a]-1)+l}return c}arcCandidates(t,n,e,s,i){let r=(i-s)/2-1e-6,l=i>2*s?nn:[0],d=[];for(let c of ct(0,8))for(let a of l)for(let h=0;h<=16;h++){let f=r*h/16,u=It(mt(s,i,f,c),s,a);h<16&&u.apex<12||rn(u)||d.push(g=>yt(t,n,e,M=>It(mt(s,M,Math.min(f,(M-s)/2-1e-6),c),s,a),i,g))}return d}placePiece(t,n){var e;let{count:s,link:i}=this.c,r=this.anchorsOf(t);if(r.length===0)return;let l=t.every(x=>this.route[x]),d=r.every(x=>x.curve===r[0].curve)?r[0].curve:void 0,c,a,h,f;if(d)r.sort((x,T)=>x.t-T.t),c=d,a=r[0].t,h=r[r.length-1].t,f=c===this.backbone&&l?-1:1;else{r.sort((q,Q)=>q.point.x-Q.point.x||q.point.y-Q.point.y);let x=r[0].point,T=r[r.length-1].point,W=Math.hypot(T.x-x.x,T.y-x.y),B=W>1e-9?lt(x,T):{x:1,y:0},D={x:-B.y,y:B.x},H=gt(x,T,.5);f=r.some(q=>q.curve===this.backbone)?(l?-1:1)*(Math.sign(D.y)||1):(H.x-n.x)*D.x+(H.y-n.y)*D.y>=0?1:-1,c=new ot([x,T],[D,D],!0),a=0,h=W}let u=r[0],g=r[r.length-1],M=h-a,b=r.length===1||u.u===g.u&&u.uSide===g.uSide&&M<1e-9,U=[u.point,g.point],v=x=>this.choose(x,d,U),N,y,L=i,w;if(b){N=this.spinePath(t,u.u,u.uSide);let x=this.spineLength(N),T=u.vSide?Math.max(0,s[u.v]-2):Math.min(1,s[u.v]-1),B=(u.t>=this.params[u.v][T]?1:-1)*Math.cos(kt),D=Math.sin(kt);y=v(ct(0,12).map(H=>q=>yt(c,a,f,Q=>Ot(0,H,B,D,Q),x,q)))}else{N=(e=this.spinePath(t,u.u,u.uSide,g.u,g.uSide))!==null&&e!==void 0?e:this.loosePath(t,u.u,g.u);let x=this.spineLength(N);if(l){let T=Math.max(12,Math.min(Pt*M,St));y=v(ct(T,12).map(B=>D=>xt(c,a,f,mt(M,sn(M,B),0,0),D)));let W=Ut(y.pts);w=Math.max(.001,(W-2*i)/(s[N[0].k]-1))}else if(x>M+1e-6)y=v(this.arcCandidates(c,a,f,M,x));else{let T=x-2*i,W=Math.max(12,Math.min(Pt*(M-T),St));y=v(ct(W,12).map(B=>D=>yt(c,a,f,H=>Ot(M/2-H/2,B,1,0,H),T,D))),L=0}}let E=new ot(y.pts,an(y.pts,y.refs)),O=this.layAlong(N,E,L,w);this.occupy(O,E);let _=Dt(O),R=t.filter(x=>!this.points[x]),F=this.componentsOf(R).map(x=>({members:x,span:Tt(this.anchorsOf(x))})).sort((x,T)=>x.span-T.span);for(let x of F)this.placePiece(x.members,_)}};function Mt(o){let t=new Float64Array(o.n).fill(NaN),n=new Float64Array(o.n).fill(NaN);if(ht.hasBackbone(o)){let e=new ht(o);e.run(),e.write(t,n)}return{X:t,Y:n}}var ln=[{walks:2,iterations:15},{walks:4,iterations:30},{walks:8,iterations:60},{walks:12,iterations:90},{walks:16,iterations:120}],hn=20,fn=3,wt=.3,un=2,dn=200,pn=.1,mn=.5,yn=o=>{var t;return((t=o.stable)===null||t===void 0?void 0:t.rank)===0};function Ht(o,t){let n=t.at(-1);return(o==="+"||o==="-")&&(n==="+"||n==="-")&&o!==n}function gn(o){let t=Math.imul(o,2654435761)>>>0||1;return()=>(t^=t<<13,t>>>=0,t^=t>>>17,t^=t<<5,t>>>=0,t/4294967296)}function z(o,t){return typeof o=="number"&&Number.isFinite(o)?o:t}function Nt(o,t){return Math.max(z(o.nodeLengthPerMegabase,1e3)*t/1e6,z(o.minimumNodeLength,1))}function Ct(o){let{nodes:t,edges:n}=o.graph,e=o.options,s=z(e.nodeSegmentLength,1),i=z(e.edgeLength,1),r=t.map(w=>w.id),l=new Int32Array(t.length),d=new Int32Array(t.length),c=new Float64Array(t.length),a=0;t.forEach((w,E)=>{let O=Nt(e,w.length),_=Math.max(1,Math.ceil(O/s));l[E]=a,d[E]=_+1,c[E]=O/_,a+=_+1});let h=new Int32Array(a),f=new Int32Array(a),u=new Float64Array(a).fill(NaN),g=new Float64Array(a).fill(NaN),M=new Uint8Array(a),b=Array.from({length:a},()=>[]);t.forEach((w,E)=>{let O=typeof w.x=="number"&&typeof w.y=="number",_=yn(w)?1:0;for(let R=0;R<d[E];R++){let F=l[E]+R;h[F]=E,f[F]=R,M[F]=_,O&&(u[F]=w.x+R*c[E],g[F]=w.y),R>0&&(b[F-1].push([F,c[E]]),b[F].push([F-1,c[E]]))}});let U=new Map(r.map((w,E)=>[w,E])),v=t.map(()=>[[],[]]);for(let w of n){let E=U.get(w.from),O=U.get(w.to);if(E===void 0||O===void 0||E===O&&d[E]<=2)continue;let _=Ht(w.fromStrand,w.from)?0:1,R=Ht(w.toStrand,w.to)?1:0,F=l[E]+(_?d[E]-1:0),x=l[O]+(R?d[O]-1:0);b[F].push([x,i]),b[x].push([F,i]),v[E][_].push([O,R]),v[O][R].push([E,_])}let N=new Int32Array(a+1);for(let w=0;w<a;w++)N[w+1]=N[w]+b[w].length;let y=new Int32Array(N[a]),L=new Float64Array(N[a]);for(let w=0;w<a;w++)b[w].forEach(([E,O],_)=>{y[N[w]+_]=E,L[N[w]+_]=O});return{ids:r,first:l,count:d,per:c,links:v,chainOf:h,indexOf:f,seedX:u,seedY:g,backbone:M,off:N,nb:y,wt:L,n:a,link:i}}function xn(o){let{n:t,off:n,nb:e}=o,s=new Int32Array(t).fill(-1),i=[];for(let r=0;r<t;r++){if(s[r]>=0)continue;let l=[r];s[r]=i.length;for(let d of l)for(let c=n[d];c<n[d+1];c++){let a=e[c];s[a]<0&&(s[a]=i.length,l.push(a))}i.push(l)}return{comp:s,members:i}}function At(o,t={}){var n,e,s;let i=Ct(o),{n:r,off:l,nb:d,wt:c,seedX:a,seedY:h,first:f,count:u,per:g,link:M}=i,b=o.options,U=ln[Math.max(0,Math.min(4,z((n=t.quality)!==null&&n!==void 0?n:b.quality,2)))],v=z((e=t.componentSeparation)!==null&&e!==void 0?e:b.componentSeparation,15),N=gn(z((s=t.seed)!==null&&s!==void 0?s:b.seed,1)),y=new Float64Array(r),L=new Float64Array(r),w={};if(r===0)return{nodePositions:w};let{comp:E,members:O}=xn(i),_=1/0,R=0;for(let p=0;p<d.length;p++)_=Math.min(_,c[p]),R+=c[p];R/=2;let F=!1;for(let p=0;p<r;p++)if(!Number.isNaN(a[p])){F=!0;break}let x=F?Mt(i):void 0,T=Math.sqrt(r)*20;for(let p=0;p<r;p++)x&&!Number.isNaN(x.X[p])?(y[p]=x.X[p],L[p]=x.Y[p]):F&&!Number.isNaN(a[p])?(y[p]=a[p]+N()-.5,L[p]=h[p]+N()-.5):(y[p]=N()*T,L[p]=N()*T);let W=O.map(p=>x!==void 0&&p.every(A=>!Number.isNaN(x.X[A]))),B=[],D=!0;for(let p=0;p<r;p++)W[E[p]]||(B.push(p),D&&(D=!Number.isNaN(a[p])));let H=Math.max(R/4,_*10),q=H*H,Q=pn*_*_,{walks:Jt,iterations:rt}=U,Qt=Math.log(q/Q)/Math.max(1,rt-1),bt=Math.log(_),Zt=Math.log(H),Lt=(p,A,m,k)=>{let S=k/(m*m);S>1&&(S=1);let P=y[p]-y[A],I=L[p]-L[A],V=Math.sqrt(P*P+I*I)||1e-9,G=S*(V-m)/(2*V),j=G*P,C=G*I;y[p]=y[p]-j,L[p]=L[p]-C,y[A]=y[A]+j,L[A]=L[A]+C},et=0,Yt=(p,A)=>{let m=i.chainOf[p],k=i.indexOf[p],S=N()<.5?-1:1,P=A;for(let I=0;I<dn;I++){let V=u[m],G=g[m],j=(S>0?V-1-k:k)*G;if(P<=j){let J=Math.round(P/G);return et=A-P+J*G,f[m]+k+S*J}P-=j;let C=i.links[m][S>0?1:0];if(C.length===0)return et=A-P,f[m]+(S>0?V-1:0);let[Y,$]=C[Math.floor(N()*C.length)];if(P-=M,m=Y,S=$===0?1:-1,k=$===0?0:u[Y]-1,P<=0)return et=A-P,f[m]+k}return-1},Et=(p,A)=>{for(let m=l[p];m<l[p+1];m++){let k=d[m];k>p&&Lt(p,k,c[m],A)}},Z=Int32Array.from(B),Xt=D?Math.floor(mn*rt):0;for(let p=B.length?Xt:rt;p<rt;p++){let A=q*Math.exp(-Qt*p);for(let m=Z.length-1;m>0;m--){let k=Math.floor(N()*(m+1)),S=Z[m];Z[m]=Z[k],Z[k]=S}for(let m of Z){Et(m,A);for(let k=0;k<Jt;k++){let S=Math.exp(bt+N()*(Zt-bt)),P=Yt(m,S);P>=0&&P!==m&&et>0&&Lt(m,P,et,A)}}}let K=fn*M,tn=(p,A)=>Math.floor(p/K)*73856093^Math.floor(A/K)*19349663;for(let p=0;p<(B.length?hn:0);p++){let A=new Map;for(let m of B){let k=tn(y[m],L[m]),S=A.get(k);S?S.push(m):A.set(k,[m])}for(let m of B){let k=Math.floor(y[m]/K),S=Math.floor(L[m]/K);for(let P=k-1;P<=k+1;P++)for(let I=S-1;I<=S+1;I++){let V=A.get(P*73856093^I*19349663);if(V)for(let G of V){if(G<=m)continue;let j=!1;for(let X=l[m];X<l[m+1];X++)if(d[X]===G){j=!0;break}if(j)continue;let C=y[m]-y[G],Y=L[m]-L[G],$=Math.sqrt(C*C+Y*Y);if($>=K)continue;let J,it;if($>1e-6){let X=wt*(K-$)/(2*$);J=X*C,it=X*Y}else J=wt*K*(N()-.5),it=wt*K*(N()-.5);y[m]=y[m]+J,L[m]=L[m]+it,y[G]=y[G]-J,L[G]=L[G]-it}}}for(let m of B)Et(m,1/0)}for(let p=0;p<u.length;p++){let A=f[p],m=u[p];if(!(m<3)){for(let k=0;k<un;k++){let S=y.slice(A,A+m),P=L.slice(A,A+m);for(let I=1;I+1<m;I++)y[A+I]=.5*S[I]+.25*(S[I-1]+S[I+1]),L[A+I]=.5*P[I]+.25*(P[I-1]+P[I+1])}Mn(y,L,A,m,g[p])}}Nn(E,O,y,L,F,v);for(let p=0;p<i.ids.length;p++){let A=[];for(let m=0;m<u[p];m++)A.push({x:y[f[p]+m],y:L[f[p]+m]});w[i.ids[p]]=A}return{nodePositions:w}}function Mn(o,t,n,e,s){wn(o,t,n,e,s*(e-1));let i=new Float64Array(e);for(let a=1;a<e;a++)i[a]=i[a-1]+Math.hypot(o[n+a]-o[n+a-1],t[n+a]-t[n+a-1]);if(!i[e-1])return;let r=i[e-1],l=o.slice(n,n+e),d=t.slice(n,n+e),c=1;for(let a=1;a+1<e;a++){let h=r*a/(e-1);for(;c<e-1&&i[c]<h;)c++;let f=i[c]-i[c-1],u=f>0?(h-i[c-1])/f:0;o[n+a]=l[c-1]+(l[c]-l[c-1])*u,t[n+a]=d[c-1]+(d[c]-d[c-1])*u}}function wn(o,t,n,e,s){let i=n+e-1,r=o[n],l=t[n],d=Math.hypot(o[i]-r,t[i]-l),c=d>1e-9?(o[i]-r)/d:1,a=d>1e-9?(t[i]-l)/d:0,h=new Float64Array(e),f=new Float64Array(e),u=!0;for(let v=0;v<e;v++){let N=o[n+v]-r,y=t[n+v]-l;h[v]=N*c+y*a,f[v]=y*c-N*a,u&&(u=Math.abs(f[v])<1e-6)}let g=v=>{let N=0;for(let y=1;y<e;y++)N+=Math.hypot(h[y]-h[y-1],v*(f[y]-f[y-1]));return N};if(u||g(1)>=s)return;let M=1,b=2;for(;g(b)<s&&b<1e6;)M=b,b*=2;for(let v=0;v<40;v++){let N=(M+b)/2;g(N)<s?M=N:b=N}let U=(M+b)/2;for(let v=1;v+1<e;v++)o[n+v]=r+h[v]*c-U*f[v]*a,t[n+v]=l+h[v]*a+U*f[v]*c}function Nn(o,t,n,e,s,i){if(!s)for(let h of t)An(n,e,h);if(t.length<2)return;let r=new Float64Array(t.length).fill(1/0),l=new Float64Array(t.length).fill(1/0),d=new Float64Array(t.length).fill(-1/0);for(let h=0;h<n.length;h++){let f=o[h];r[f]=Math.min(r[f],n[h]),l[f]=Math.min(l[f],e[h]),d[f]=Math.max(d[f],e[h])}let c=new Float64Array(t.length),a=0;for(let h=0;h<t.length;h++)c[h]=a-l[h],a+=d[h]-l[h]+i;for(let h=0;h<n.length;h++){let f=o[h];n[h]=n[h]-r[f],e[h]=e[h]+c[f]}}function An(o,t,n){if(n.length<3)return;let e=0,s=0;for(let h of n)e+=o[h],s+=t[h];e/=n.length,s/=n.length;let i=0,r=0,l=0;for(let h of n){let f=o[h]-e,u=t[h]-s;i+=f*f,r+=u*u,l+=f*u}let d=-.5*Math.atan2(2*l,i-r),c=Math.cos(d),a=Math.sin(d);for(let h of n){let f=o[h]-e,u=t[h]-s;o[h]=e+c*f-a*u,t[h]=s+a*f+c*u}}var Wt=[{value:"fmmm",label:"Bandage (FMMM)",description:"Bandage's force-directed layout: OGDF's fast multipole multilevel method, compiled to wasm."},{value:"stress",label:"Stress",description:"Plain JS: the reference drawn straight and each variant placed against it, an allele as a lens, a repeat loop as a ring, a deletion as an arch; stress by stochastic gradient descent for components with no reference."}],vn=Wt.map(o=>o.value);var bn=async o=>{let t=performance.now();return{result:o.options.engine==="stress"?At(o):await dt(o),duration:performance.now()-t}};var st=40,Kt=500,ft=5;function Ln(o,t){return Math.max(o.nodeLengthPerMegabase*t/1e6,o.minimumNodeLength)}function Vt(o,t=ft){let e=o.nodes.reduce((i,r)=>i+r.length,0)/1e6,s=Math.max(o.nodes.length*st,Kt);return{nodeLengthPerMegabase:e>0?s/e:1e4,minimumNodeLength:Math.max(ft,t),edgeLength:5,nodeSegmentLength:20}}var nt={power:1,effect:1};function jt(o){return o.power===1&&o.effect===1}function zt(o,t){let n=o.nodes.length,e=o.nodes.reduce((r,l)=>r+l.length,0),s=n>0?e/n:0,i=n>0?Math.max(n*st,Kt)/n:st;return r=>{if(s<=0)return i;let l=(r/s)**t.power;return Math.max(i*((l-1)*t.effect+1),ft)}}var qt=1e3,$t={law:nt,minNodeLength:0};function Qn(o,t=$t){let{law:n,minNodeLength:e}=t,s=Vt(o,e);if(jt(n))return{nodes:o.nodes,opts:s};let i=zt(o,n);return{nodes:o.nodes.map(r=>({...r,length:Math.round(i(r.length)*qt)})),opts:{...s,nodeLengthPerMegabase:1e6/qt,minimumNodeLength:ft}}}function Zn(o,t=$t){if(jt(t.law)){let n=Vt(o,t.minNodeLength);return e=>Ln(n,e)}return zt(o,t.law)}var vt=[{value:"auto",label:"Proportional",description:"Bandage's own scale: a node draws proportional to its length, so a 1 bp allele is a speck.",law:nt,minNodeFactor:0},{value:"open",label:"Open bubbles",description:"Give every allele a drawn length, so a bubble reads as two arms rather than a knot.",law:nt,minNodeFactor:2.5},{value:"wide",label:"Wide bubbles",description:"As open, spread further. Best on a window of a dozen bubbles.",law:nt,minNodeFactor:10},{value:"compress",label:"Compress lengths",description:"Pull the longest and shortest nodes towards the graph\u2019s mean, so a cut spanning kb and bp fits one pane.",law:{power:.5,effect:.5},minNodeFactor:0}],En=vt.map(o=>o.value);function kn(o){let t=vt.find(n=>n.value===o);return{law:t?.law??nt,minNodeLength:(t?.minNodeFactor??0)*st}}export{Bt as a,Wt as b,vn as c,bn as d,Ln as e,Qn as f,Zn as g,vt as h,En as i,kn as j};
2
- //# sourceMappingURL=chunk-T2VC3EEL.js.map
2
+ //# sourceMappingURL=chunk-PMM6BEKY.js.map