jbrowse-plugin-graphgenomeviewer 4.0.21 → 4.0.22

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 (42) hide show
  1. package/README.md +5 -2
  2. package/dist/chunks/AddTrackWorkflow-NKKGI6SM.js +2 -0
  3. package/dist/chunks/{AddTrackWorkflow-WYRVQYH2.js.map → AddTrackWorkflow-NKKGI6SM.js.map} +1 -1
  4. package/dist/chunks/{GbzBaseSyntenyAdapter-7ZKFAEJG.js → GbzBaseSyntenyAdapter-HNETLUW4.js} +2 -2
  5. package/dist/chunks/{GraphGenomeView-CLUMXH4K.js → GraphGenomeView-GMHRO7E4.js} +2 -2
  6. package/dist/chunks/{GraphGenomeView-CLUMXH4K.js.map → GraphGenomeView-GMHRO7E4.js.map} +1 -1
  7. package/dist/chunks/LinearGraphDisplay-I2OOPQKB.js +2 -0
  8. package/dist/chunks/{LinearGraphDisplay-4CMVCEM5.js.map → LinearGraphDisplay-I2OOPQKB.js.map} +1 -1
  9. package/dist/chunks/{MinigraphBubbleAdapter-NRDD66AK.js → MinigraphBubbleAdapter-FIFZYJ27.js} +2 -2
  10. package/dist/chunks/chunk-2PYVZZ3R.js +3 -0
  11. package/dist/chunks/chunk-2PYVZZ3R.js.map +7 -0
  12. package/dist/chunks/chunk-D7XFR2IV.js +2 -0
  13. package/dist/chunks/chunk-D7XFR2IV.js.map +7 -0
  14. package/dist/chunks/chunk-DMYUVGGI.js +3 -0
  15. package/dist/chunks/{chunk-QSH263Y6.js.map → chunk-DMYUVGGI.js.map} +4 -4
  16. package/dist/chunks/chunk-JXSDDOKD.js +3 -0
  17. package/dist/chunks/chunk-JXSDDOKD.js.map +7 -0
  18. package/dist/chunks/chunk-OSTJHAAK.js +2 -0
  19. package/dist/chunks/chunk-OSTJHAAK.js.map +7 -0
  20. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +1 -2
  21. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  22. package/package.json +2 -2
  23. package/src/GraphGenomeView/components/FacetPanels.tsx +204 -0
  24. package/src/GraphGenomeView/components/GenePins.tsx +12 -5
  25. package/src/GraphGenomeView/components/GraphCanvas.tsx +86 -42
  26. package/src/GraphGenomeView/components/ReferenceStripOverlay.tsx +19 -7
  27. package/src/GraphGenomeView/model.test.ts +36 -10
  28. package/src/GraphGenomeView/model.ts +130 -9
  29. package/src/version.ts +1 -1
  30. package/dist/chunks/AddTrackWorkflow-WYRVQYH2.js +0 -2
  31. package/dist/chunks/LinearGraphDisplay-4CMVCEM5.js +0 -2
  32. package/dist/chunks/chunk-3FGJLRG2.js +0 -2
  33. package/dist/chunks/chunk-3FGJLRG2.js.map +0 -7
  34. package/dist/chunks/chunk-3SZJ4AFI.js +0 -3
  35. package/dist/chunks/chunk-3SZJ4AFI.js.map +0 -7
  36. package/dist/chunks/chunk-QSH263Y6.js +0 -2
  37. package/dist/chunks/chunk-SCMIJAAX.js +0 -3
  38. package/dist/chunks/chunk-SCMIJAAX.js.map +0 -7
  39. package/dist/chunks/chunk-XK7OPCRQ.js +0 -2
  40. package/dist/chunks/chunk-XK7OPCRQ.js.map +0 -7
  41. /package/dist/chunks/{GbzBaseSyntenyAdapter-7ZKFAEJG.js.map → GbzBaseSyntenyAdapter-HNETLUW4.js.map} +0 -0
  42. /package/dist/chunks/{MinigraphBubbleAdapter-NRDD66AK.js.map → MinigraphBubbleAdapter-FIFZYJ27.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["global-externals:@jbrowse/core/util/tracks"],
4
+ "sourcesContent": ["module.exports = JBrowseExports[\"@jbrowse/core/util/tracks\"];"],
5
+ "mappings": "wCAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,CAAAA,EAAO,QAAU,eAAe,2BAA2B",
6
+ "names": ["require_tracks", "__commonJSMin", "exports", "module"]
7
+ }
@@ -0,0 +1,3 @@
1
+ import{b as m}from"./chunk-EFVAQ2KM.js";import{a as c,b as u,c as d,d as f}from"./chunk-KULNKXPT.js";var y=new Map([["hg38","GRCh38"],["hg19","GRCh37"],["hs1","CHM13"],["t2t-chm13","CHM13"],["chm13v2","CHM13"]]);function x(t){return y.get(t.toLowerCase())}function g(t){let e=t.includes("#")?c(t):void 0;return e===void 0||u(e)?void 0:e}function h(t){return d(t)??c(t)}function l(t){let e=new Set((t.anchorPaths??[]).map(n=>n.name));for(let n of t.nodes)n.stable&&e.add(n.stable.refName);let s=new Map;for(let n of e){let r=g(n);r!==void 0&&(s.get(r)??s.set(r,new Set).get(r)).add(h(n))}return s}function b(t,e){let s=new Set(t.map(p=>g(p.refName))),[n]=s;if(s.size!==1||n===void 0)return{contigs:t,prefixes:[],named:!1};let r=new Set(t.map(p=>h(p.refName))),i=[...e.get(n)??[]].every(p=>r.has(p)),a=new Set(t.map(p=>d(p.refName))),[o]=a;return{contigs:t,prefixes:[...i?[n]:[],...a.size===1&&o?[o]:[]],named:!0}}function M(t){let e=new Map;for(let n of t.nodes)if(m(n)){let{refName:r,start:i}=n.stable,a=i+n.length,o=e.get(r);o?(o.start=Math.min(o.start,i),o.end=Math.max(o.end,a)):e.set(r,{refName:r,contig:f(r),start:i,end:a})}let s=[...e.values()];return s.length?b(s,l(t)):void 0}function S(t,e){let s=a=>[a.name,...a.aliases??[]],n=a=>o=>s(o).some(p=>p.toLowerCase()===a.toLowerCase()),r=[...t?.prefixes??[]].reverse(),i=t?.prefixes.find(a=>!a.includes("#"))?.toLowerCase();for(let a of r){let o=e.find(n(a));if(o)return o}return i===void 0?void 0:e.find(a=>s(a).some(o=>x(o)?.toLowerCase()===i))}function k(t,e){let s=l(t);return t.anchorPaths?.find(n=>S(b([{refName:n.name,contig:f(n.name),start:n.start,end:n.start+n.length}],s),[e]))}function C(t){let e=new Set(t),s=new Map;for(let n of e){let r=f(n);s.set(r,s.has(r)?void 0:n)}return n=>e.has(n)?n:s.get(n)}function q(t,e){let s=C(e.contigs.map(n=>n.refName));return t.flatMap(n=>{let r=s(n.refName);return r===void 0?[]:[r===n.refName?n:{...n,refName:r}]})}var N=/([><])([^><]+)/g;function G(t){if(!t.startsWith(">")&&!t.startsWith("<"))return;let e=[];for(let[,s,n]of t.matchAll(N))e.push({name:n,strand:s===">"?"+":"-"});return e}function w(t){let e=t.split(" ");if(e.length<12||t.startsWith("#"))return;let s=G(e[5]);if(!s)return;let n,r=!1;for(let i=12;i<e.length;i++){let a=e[i];a.startsWith("cs:Z:")?n=a.slice(5):a==="tp:A:S"&&(r=!0)}return{name:e[0],queryLength:+e[1],queryStart:+e[2],queryEnd:+e[3],strand:e[4]==="-"?"-":"+",path:s,pathLength:+e[6],pathStart:+e[7],pathEnd:+e[8],matches:+e[9],blockLength:+e[10],mappingQuality:+e[11],secondary:r,...n===void 0?{}:{cs:n}}}function z(t){let e=[];for(let s of t.split(`
2
+ `)){let n=w(s.trimEnd());n&&e.push(n)}return e}var L=/:(\d+)|=([A-Za-z]+)|\*[a-zA-Z]([a-zA-Z])|\+([A-Za-z]+)|-([A-Za-z]+)|~[a-z]{2}(\d+)[a-z]{2}/g;function T(t){let e=[];for(let s of t.matchAll(L))s[1]!==void 0?e.push({op:"match",length:+s[1]}):s[2]!==void 0?e.push({op:"match",length:s[2].length}):s[3]!==void 0?e.push({op:"substitution",seq:s[3].toUpperCase()}):s[4]!==void 0?e.push({op:"insertion",seq:s[4].toUpperCase()}):s[5]!==void 0?e.push({op:"deletion",length:s[5].length}):s[6]!==void 0&&e.push({op:"match",length:+s[6]});return e}export{x as a,M as b,S as c,k as d,q as e,w as f,z as g,T as h};
3
+ //# sourceMappingURL=chunk-DMYUVGGI.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../packages/core/src/reference.ts"],
4
- "sourcesContent": ["import { isBackbone } from './anchoredNodes'\nimport {\n isGenericSample,\n panSNContig,\n panSNHaplotype,\n panSNSample,\n} from './pansn'\n\nimport type { Graph, PathOrigin } from './types'\n\n// A graph's backbone names the sample it lies on (`GRCh38#0#chr6`), not an\n// assembly, and a bare contig (`chr6`) is in every human assembly at once. A\n// backbone binds to an assembly where its PanSN prefix is that assembly's name,\n// one of its aliases, or its well-known sample. One that names no sample binds\n// only where the host knows the assembly otherwise, as a track's config does.\n\nexport interface BackboneContig {\n // as the graph names it, `GRCh38#0#chr6`\n refName: string\n // as an assembly names it, `chr6`\n contig: string\n start: number\n end: number\n}\n\nexport interface Backbone {\n contigs: BackboneContig[]\n // The PanSN prefixes that name the backbone, sample then haplotype:\n // `GRCh38`, `GRCh38#0`. The sample drops out where the graph walks another\n // haplotype of it, as a diploid's `HG002` names `HG002#1` and `HG002#2`.\n prefixes: string[]\n // Whether the contigs name one real sample: false where every contig is bare\n // (`chr6`) or generic (`_gbwt_ref#0#chr6`), or where the samples differ\n named: boolean\n}\n\nexport interface AssemblyNames {\n name: string\n aliases?: string[]\n}\n\n// The sample a reference assembly's graphs name it by, keyed by the assembly's\n// name in lower case: HPRC writes `CHM13` where UCSC's assembly is `hs1`.\nexport const WELL_KNOWN_SAMPLES: ReadonlyMap<string, string> = new Map([\n ['hg38', 'GRCh38'],\n ['hg19', 'GRCh37'],\n ['hs1', 'CHM13'],\n ['t2t-chm13', 'CHM13'],\n ['chm13v2', 'CHM13'],\n])\n\nexport function wellKnownSample(assemblyName: string) {\n return WELL_KNOWN_SAMPLES.get(assemblyName.toLowerCase())\n}\n\nfunction sampleOf(refName: string) {\n const sample = refName.includes('#') ? panSNSample(refName) : undefined\n return sample === undefined || isGenericSample(sample) ? undefined : sample\n}\n\n// `HG002#1`, or the sample of a two-part name, which states no haplotype\nfunction haplotypeOf(refName: string) {\n return panSNHaplotype(refName) ?? panSNSample(refName)\n}\n\n// Each sample's haplotypes among the graph's walks and node refNames\nfunction graphHaplotypes(graph: Graph) {\n const refNames = new Set((graph.anchorPaths ?? []).map(p => p.name))\n for (const node of graph.nodes) {\n if (node.stable) {\n refNames.add(node.stable.refName)\n }\n }\n const bySample = new Map<string, Set<string>>()\n for (const refName of refNames) {\n const sample = sampleOf(refName)\n if (sample !== undefined) {\n const haplotypes =\n bySample.get(sample) ?? bySample.set(sample, new Set()).get(sample)!\n haplotypes.add(haplotypeOf(refName))\n }\n }\n return bySample\n}\n\nfunction backboneFrom(\n contigs: BackboneContig[],\n haplotypes: Map<string, Set<string>>,\n): Backbone {\n const samples = new Set(contigs.map(c => sampleOf(c.refName)))\n const [sample] = samples\n if (samples.size !== 1 || sample === undefined) {\n return { contigs, prefixes: [], named: false }\n }\n const own = new Set(contigs.map(c => haplotypeOf(c.refName)))\n const unique = [...(haplotypes.get(sample) ?? [])].every(h => own.has(h))\n const shared = new Set(contigs.map(c => panSNHaplotype(c.refName)))\n const [haplotype] = shared\n return {\n contigs,\n prefixes: [\n ...(unique ? [sample] : []),\n ...(shared.size === 1 && haplotype ? [haplotype] : []),\n ],\n named: true,\n }\n}\n\n// The rank-0 nodes' refNames and the span each covers\nexport function graphBackbone(graph: Graph): Backbone | undefined {\n const spans = new Map<string, BackboneContig>()\n for (const node of graph.nodes) {\n if (isBackbone(node)) {\n const { refName, start } = node.stable\n const end = start + node.length\n const span = spans.get(refName)\n if (span) {\n span.start = Math.min(span.start, start)\n span.end = Math.max(span.end, end)\n } else {\n spans.set(refName, {\n refName,\n contig: panSNContig(refName),\n start,\n end,\n })\n }\n }\n }\n const contigs = [...spans.values()]\n return contigs.length\n ? backboneFrom(contigs, graphHaplotypes(graph))\n : undefined\n}\n\n// The assembly the backbone's haplotype names by its name or an alias, else\n// the one its sample names, else the one whose well-known sample it is. A\n// backbone with no prefix binds to none.\nexport function backboneAssembly<T extends AssemblyNames>(\n backbone: Backbone | undefined,\n assemblies: T[],\n): T | undefined {\n const names = (a: T) => [a.name, ...(a.aliases ?? [])]\n const naming = (prefix: string) => (a: T) =>\n names(a).some(n => n.toLowerCase() === prefix.toLowerCase())\n const prefixes = [...(backbone?.prefixes ?? [])].reverse()\n const sample = backbone?.prefixes.find(p => !p.includes('#'))?.toLowerCase()\n for (const prefix of prefixes) {\n const assembly = assemblies.find(naming(prefix))\n if (assembly) {\n return assembly\n }\n }\n return sample === undefined\n ? undefined\n : assemblies.find(a =>\n names(a).some(n => wellKnownSample(n)?.toLowerCase() === sample),\n )\n}\n\n// The first of the graph's walks that a backbone along it would bind to\n// `assembly`, for putting x on the assembly a cut was made for\nexport function assemblyWalk(\n graph: Graph,\n assembly: AssemblyNames,\n): PathOrigin | undefined {\n const haplotypes = graphHaplotypes(graph)\n return graph.anchorPaths?.find(walk =>\n backboneAssembly(\n backboneFrom(\n [\n {\n refName: walk.name,\n contig: panSNContig(walk.name),\n start: walk.start,\n end: walk.start + walk.length,\n },\n ],\n haplotypes,\n ),\n [assembly],\n ),\n )\n}\n\n// Which of `refNames` a feature's refName names: the one it equals, else the\n// only one whose contig it is. A contig two refNames share names neither.\nexport function refNameBinding(refNames: Iterable<string>) {\n const exact = new Set(refNames)\n const byContig = new Map<string, string | undefined>()\n for (const refName of exact) {\n const contig = panSNContig(refName)\n byContig.set(contig, byContig.has(contig) ? undefined : refName)\n }\n return (name: string) => (exact.has(name) ? name : byContig.get(name))\n}\n\n// An assembly's features on a backbone that binds to it, each renamed to the\n// backbone's refName for it, so the assembly's `chr6` becomes the graph's\n// `GRCh38#0#chr6`. genePins and tubeMapGenes take only the renamed.\nexport function featuresOnBackbone<T extends { refName: string }>(\n features: readonly T[],\n backbone: Backbone,\n): T[] {\n const bind = refNameBinding(backbone.contigs.map(c => c.refName))\n return features.flatMap(f => {\n const refName = bind(f.refName)\n return refName === undefined\n ? []\n : [refName === f.refName ? f : { ...f, refName }]\n })\n}\n"],
5
- "mappings": "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",
6
- "names": ["WELL_KNOWN_SAMPLES", "wellKnownSample", "assemblyName", "sampleOf", "refName", "sample", "panSNSample", "isGenericSample", "haplotypeOf", "panSNHaplotype", "graphHaplotypes", "graph", "refNames", "p", "node", "bySample", "backboneFrom", "contigs", "haplotypes", "samples", "c", "own", "unique", "h", "shared", "haplotype", "graphBackbone", "spans", "isBackbone", "start", "end", "span", "panSNContig", "backboneAssembly", "backbone", "assemblies", "names", "a", "naming", "prefix", "n", "prefixes", "assembly", "assemblyWalk", "walk", "refNameBinding", "exact", "byContig", "contig", "name", "featuresOnBackbone", "features", "bind", "f"]
3
+ "sources": ["../../packages/core/src/reference.ts", "../../packages/core/src/gaf/parseGaf.ts"],
4
+ "sourcesContent": ["import { isBackbone } from './anchoredNodes'\nimport {\n isGenericSample,\n panSNContig,\n panSNHaplotype,\n panSNSample,\n} from './pansn'\n\nimport type { Graph, PathOrigin } from './types'\n\n// A graph's backbone names the sample it lies on (`GRCh38#0#chr6`), not an\n// assembly, and a bare contig (`chr6`) is in every human assembly at once. A\n// backbone binds to an assembly where its PanSN prefix is that assembly's name,\n// one of its aliases, or its well-known sample. One that names no sample binds\n// only where the host knows the assembly otherwise, as a track's config does.\n\nexport interface BackboneContig {\n // as the graph names it, `GRCh38#0#chr6`\n refName: string\n // as an assembly names it, `chr6`\n contig: string\n start: number\n end: number\n}\n\nexport interface Backbone {\n contigs: BackboneContig[]\n // The PanSN prefixes that name the backbone, sample then haplotype:\n // `GRCh38`, `GRCh38#0`. The sample drops out where the graph walks another\n // haplotype of it, as a diploid's `HG002` names `HG002#1` and `HG002#2`.\n prefixes: string[]\n // Whether the contigs name one real sample: false where every contig is bare\n // (`chr6`) or generic (`_gbwt_ref#0#chr6`), or where the samples differ\n named: boolean\n}\n\nexport interface AssemblyNames {\n name: string\n aliases?: string[]\n}\n\n// The sample a reference assembly's graphs name it by, keyed by the assembly's\n// name in lower case: HPRC writes `CHM13` where UCSC's assembly is `hs1`.\nexport const WELL_KNOWN_SAMPLES: ReadonlyMap<string, string> = new Map([\n ['hg38', 'GRCh38'],\n ['hg19', 'GRCh37'],\n ['hs1', 'CHM13'],\n ['t2t-chm13', 'CHM13'],\n ['chm13v2', 'CHM13'],\n])\n\nexport function wellKnownSample(assemblyName: string) {\n return WELL_KNOWN_SAMPLES.get(assemblyName.toLowerCase())\n}\n\nfunction sampleOf(refName: string) {\n const sample = refName.includes('#') ? panSNSample(refName) : undefined\n return sample === undefined || isGenericSample(sample) ? undefined : sample\n}\n\n// `HG002#1`, or the sample of a two-part name, which states no haplotype\nfunction haplotypeOf(refName: string) {\n return panSNHaplotype(refName) ?? panSNSample(refName)\n}\n\n// Each sample's haplotypes among the graph's walks and node refNames\nfunction graphHaplotypes(graph: Graph) {\n const refNames = new Set((graph.anchorPaths ?? []).map(p => p.name))\n for (const node of graph.nodes) {\n if (node.stable) {\n refNames.add(node.stable.refName)\n }\n }\n const bySample = new Map<string, Set<string>>()\n for (const refName of refNames) {\n const sample = sampleOf(refName)\n if (sample !== undefined) {\n const haplotypes =\n bySample.get(sample) ?? bySample.set(sample, new Set()).get(sample)!\n haplotypes.add(haplotypeOf(refName))\n }\n }\n return bySample\n}\n\nfunction backboneFrom(\n contigs: BackboneContig[],\n haplotypes: Map<string, Set<string>>,\n): Backbone {\n const samples = new Set(contigs.map(c => sampleOf(c.refName)))\n const [sample] = samples\n if (samples.size !== 1 || sample === undefined) {\n return { contigs, prefixes: [], named: false }\n }\n const own = new Set(contigs.map(c => haplotypeOf(c.refName)))\n const unique = [...(haplotypes.get(sample) ?? [])].every(h => own.has(h))\n const shared = new Set(contigs.map(c => panSNHaplotype(c.refName)))\n const [haplotype] = shared\n return {\n contigs,\n prefixes: [\n ...(unique ? [sample] : []),\n ...(shared.size === 1 && haplotype ? [haplotype] : []),\n ],\n named: true,\n }\n}\n\n// The rank-0 nodes' refNames and the span each covers\nexport function graphBackbone(graph: Graph): Backbone | undefined {\n const spans = new Map<string, BackboneContig>()\n for (const node of graph.nodes) {\n if (isBackbone(node)) {\n const { refName, start } = node.stable\n const end = start + node.length\n const span = spans.get(refName)\n if (span) {\n span.start = Math.min(span.start, start)\n span.end = Math.max(span.end, end)\n } else {\n spans.set(refName, {\n refName,\n contig: panSNContig(refName),\n start,\n end,\n })\n }\n }\n }\n const contigs = [...spans.values()]\n return contigs.length\n ? backboneFrom(contigs, graphHaplotypes(graph))\n : undefined\n}\n\n// The assembly the backbone's haplotype names by its name or an alias, else\n// the one its sample names, else the one whose well-known sample it is. A\n// backbone with no prefix binds to none.\nexport function backboneAssembly<T extends AssemblyNames>(\n backbone: Backbone | undefined,\n assemblies: T[],\n): T | undefined {\n const names = (a: T) => [a.name, ...(a.aliases ?? [])]\n const naming = (prefix: string) => (a: T) =>\n names(a).some(n => n.toLowerCase() === prefix.toLowerCase())\n const prefixes = [...(backbone?.prefixes ?? [])].reverse()\n const sample = backbone?.prefixes.find(p => !p.includes('#'))?.toLowerCase()\n for (const prefix of prefixes) {\n const assembly = assemblies.find(naming(prefix))\n if (assembly) {\n return assembly\n }\n }\n return sample === undefined\n ? undefined\n : assemblies.find(a =>\n names(a).some(n => wellKnownSample(n)?.toLowerCase() === sample),\n )\n}\n\n// The first of the graph's walks that a backbone along it would bind to\n// `assembly`, for putting x on the assembly a cut was made for\nexport function assemblyWalk(\n graph: Graph,\n assembly: AssemblyNames,\n): PathOrigin | undefined {\n const haplotypes = graphHaplotypes(graph)\n return graph.anchorPaths?.find(walk =>\n backboneAssembly(\n backboneFrom(\n [\n {\n refName: walk.name,\n contig: panSNContig(walk.name),\n start: walk.start,\n end: walk.start + walk.length,\n },\n ],\n haplotypes,\n ),\n [assembly],\n ),\n )\n}\n\n// Which of `refNames` a feature's refName names: the one it equals, else the\n// only one whose contig it is. A contig two refNames share names neither.\nexport function refNameBinding(refNames: Iterable<string>) {\n const exact = new Set(refNames)\n const byContig = new Map<string, string | undefined>()\n for (const refName of exact) {\n const contig = panSNContig(refName)\n byContig.set(contig, byContig.has(contig) ? undefined : refName)\n }\n return (name: string) => (exact.has(name) ? name : byContig.get(name))\n}\n\n// An assembly's features on a backbone that binds to it, each renamed to the\n// backbone's refName for it, so the assembly's `chr6` becomes the graph's\n// `GRCh38#0#chr6`. genePins and tubeMapGenes take only the renamed.\nexport function featuresOnBackbone<T extends { refName: string }>(\n features: readonly T[],\n backbone: Backbone,\n): T[] {\n const bind = refNameBinding(backbone.contigs.map(c => c.refName))\n return features.flatMap(f => {\n const refName = bind(f.refName)\n return refName === undefined\n ? []\n : [refName === f.refName ? f : { ...f, refName }]\n })\n}\n", "// GAF, the graph alignment format that vg giraffe, minigraph and GraphAligner\n// write: one read per line, aligned along an oriented walk of segments.\n// https://github.com/lh3/gfatools/blob/master/doc/rGFA.md#the-graph-alignment-format-gaf\n\nexport interface GafStep {\n name: string\n strand: '+' | '-'\n}\n\nexport interface GafRecord {\n name: string\n queryLength: number\n queryStart: number\n queryEnd: number\n strand: '+' | '-'\n path: GafStep[]\n // bp of the walk, and where on it the alignment starts and ends\n pathLength: number\n pathStart: number\n pathEnd: number\n matches: number\n blockLength: number\n // 255 is missing\n mappingQuality: number\n secondary: boolean\n cs?: string\n}\n\nconst STEP = /([><])([^><]+)/g\n\n// A walk of oriented segments; undefined for a path column that names a\n// stable sequence instead (`chr1`), which places the read on no segment.\nexport function parseGafPath(column: string) {\n if (!column.startsWith('>') && !column.startsWith('<')) {\n return undefined\n }\n const steps: GafStep[] = []\n for (const [, arrow, name] of column.matchAll(STEP)) {\n steps.push({ name: name!, strand: arrow === '>' ? '+' : '-' })\n }\n return steps\n}\n\nexport function parseGafLine(line: string): GafRecord | undefined {\n const columns = line.split('\\t')\n if (columns.length < 12 || line.startsWith('#')) {\n return undefined\n }\n const path = parseGafPath(columns[5]!)\n if (!path) {\n return undefined\n }\n let cs: string | undefined\n let secondary = false\n for (let i = 12; i < columns.length; i++) {\n const tag = columns[i]!\n if (tag.startsWith('cs:Z:')) {\n cs = tag.slice(5)\n } else if (tag === 'tp:A:S') {\n secondary = true\n }\n }\n return {\n name: columns[0]!,\n queryLength: +columns[1]!,\n queryStart: +columns[2]!,\n queryEnd: +columns[3]!,\n strand: columns[4] === '-' ? '-' : '+',\n path,\n pathLength: +columns[6]!,\n pathStart: +columns[7]!,\n pathEnd: +columns[8]!,\n matches: +columns[9]!,\n blockLength: +columns[10]!,\n mappingQuality: +columns[11]!,\n secondary,\n ...(cs === undefined ? {} : { cs }),\n }\n}\n\nexport function parseGaf(text: string) {\n const records: GafRecord[] = []\n for (const line of text.split('\\n')) {\n const record = parseGafLine(line.trimEnd())\n if (record) {\n records.push(record)\n }\n }\n return records\n}\n\nexport type CsOp =\n | { op: 'match'; length: number }\n | { op: 'substitution'; seq: string }\n | { op: 'insertion'; seq: string }\n | { op: 'deletion'; length: number }\n\nconst CS_OP =\n /:(\\d+)|=([A-Za-z]+)|\\*[a-zA-Z]([a-zA-Z])|\\+([A-Za-z]+)|-([A-Za-z]+)|~[a-z]{2}(\\d+)[a-z]{2}/g\n\n// The cs tag's edits along the walk, in the walk's own orientation. An intron\n// (`~`) skips walk the way a deletion does but is not an error of the read, so\n// it reads as a match.\nexport function parseCs(cs: string): CsOp[] {\n const ops: CsOp[] = []\n for (const m of cs.matchAll(CS_OP)) {\n if (m[1] !== undefined) {\n ops.push({ op: 'match', length: +m[1] })\n } else if (m[2] !== undefined) {\n ops.push({ op: 'match', length: m[2].length })\n } else if (m[3] !== undefined) {\n ops.push({ op: 'substitution', seq: m[3].toUpperCase() })\n } else if (m[4] !== undefined) {\n ops.push({ op: 'insertion', seq: m[4].toUpperCase() })\n } else if (m[5] !== undefined) {\n ops.push({ op: 'deletion', length: m[5].length })\n } else if (m[6] !== undefined) {\n ops.push({ op: 'match', length: +m[6] })\n }\n }\n return ops\n}\n"],
5
+ "mappings": "qGA2CO,IAAMA,EAAkD,IAAI,IAAI,CACrE,CAAC,OAAQ,QAAQ,EACjB,CAAC,OAAQ,QAAQ,EACjB,CAAC,MAAO,OAAO,EACf,CAAC,YAAa,OAAO,EACrB,CAAC,UAAW,OAAO,CACrB,CAAC,EAEM,SAASC,EAAgBC,EAAsB,CACpD,OAAOF,EAAmB,IAAIE,EAAa,YAAY,CAAC,CAC1D,CAEA,SAASC,EAASC,EAAiB,CACjC,IAAMC,EAASD,EAAQ,SAAS,GAAG,EAAIE,EAAYF,CAAO,EAAI,OAC9D,OAAOC,IAAW,QAAaE,EAAgBF,CAAM,EAAI,OAAYA,CACvE,CAGA,SAASG,EAAYJ,EAAiB,CACpC,OAAOK,EAAeL,CAAO,GAAKE,EAAYF,CAAO,CACvD,CAGA,SAASM,EAAgBC,EAAc,CACrC,IAAMC,EAAW,IAAI,KAAKD,EAAM,aAAe,CAAC,GAAG,IAAIE,GAAKA,EAAE,IAAI,CAAC,EACnE,QAAWC,KAAQH,EAAM,MACnBG,EAAK,QACPF,EAAS,IAAIE,EAAK,OAAO,OAAO,EAGpC,IAAMC,EAAW,IAAI,IACrB,QAAWX,KAAWQ,EAAU,CAC9B,IAAMP,EAASF,EAASC,CAAO,EAC3BC,IAAW,SAEXU,EAAS,IAAIV,CAAM,GAAKU,EAAS,IAAIV,EAAQ,IAAI,GAAK,EAAE,IAAIA,CAAM,GACzD,IAAIG,EAAYJ,CAAO,CAAC,CAEvC,CACA,OAAOW,CACT,CAEA,SAASC,EACPC,EACAC,EACU,CACV,IAAMC,EAAU,IAAI,IAAIF,EAAQ,IAAIG,GAAKjB,EAASiB,EAAE,OAAO,CAAC,CAAC,EACvD,CAACf,CAAM,EAAIc,EACjB,GAAIA,EAAQ,OAAS,GAAKd,IAAW,OACnC,MAAO,CAAE,QAAAY,EAAS,SAAU,CAAC,EAAG,MAAO,EAAM,EAE/C,IAAMI,EAAM,IAAI,IAAIJ,EAAQ,IAAIG,GAAKZ,EAAYY,EAAE,OAAO,CAAC,CAAC,EACtDE,EAAS,CAAC,GAAIJ,EAAW,IAAIb,CAAM,GAAK,CAAC,CAAE,EAAE,MAAMkB,GAAKF,EAAI,IAAIE,CAAC,CAAC,EAClEC,EAAS,IAAI,IAAIP,EAAQ,IAAIG,GAAKX,EAAeW,EAAE,OAAO,CAAC,CAAC,EAC5D,CAACK,CAAS,EAAID,EACpB,MAAO,CACL,QAAAP,EACA,SAAU,CACR,GAAIK,EAAS,CAACjB,CAAM,EAAI,CAAC,EACzB,GAAImB,EAAO,OAAS,GAAKC,EAAY,CAACA,CAAS,EAAI,CAAC,CACtD,EACA,MAAO,EACT,CACF,CAGO,SAASC,EAAcf,EAAoC,CAChE,IAAMgB,EAAQ,IAAI,IAClB,QAAWb,KAAQH,EAAM,MACvB,GAAIiB,EAAWd,CAAI,EAAG,CACpB,GAAM,CAAE,QAAAV,EAAS,MAAAyB,CAAM,EAAIf,EAAK,OAC1BgB,EAAMD,EAAQf,EAAK,OACnBiB,EAAOJ,EAAM,IAAIvB,CAAO,EAC1B2B,GACFA,EAAK,MAAQ,KAAK,IAAIA,EAAK,MAAOF,CAAK,EACvCE,EAAK,IAAM,KAAK,IAAIA,EAAK,IAAKD,CAAG,GAEjCH,EAAM,IAAIvB,EAAS,CACjB,QAAAA,EACA,OAAQ4B,EAAY5B,CAAO,EAC3B,MAAAyB,EACA,IAAAC,CACF,CAAC,CAEL,CAEF,IAAMb,EAAU,CAAC,GAAGU,EAAM,OAAO,CAAC,EAClC,OAAOV,EAAQ,OACXD,EAAaC,EAASP,EAAgBC,CAAK,CAAC,EAC5C,MACN,CAKO,SAASsB,EACdC,EACAC,EACe,CACf,IAAMC,EAAS,GAAS,CAAC,EAAE,KAAM,GAAI,EAAE,SAAW,CAAC,CAAE,EAC/CC,EAAUC,GAAoBC,GAClCH,EAAMG,CAAC,EAAE,KAAKC,GAAKA,EAAE,YAAY,IAAMF,EAAO,YAAY,CAAC,EACvDG,EAAW,CAAC,GAAIP,GAAU,UAAY,CAAC,CAAE,EAAE,QAAQ,EACnD7B,EAAS6B,GAAU,SAAS,KAAKrB,GAAK,CAACA,EAAE,SAAS,GAAG,CAAC,GAAG,YAAY,EAC3E,QAAWyB,KAAUG,EAAU,CAC7B,IAAMC,EAAWP,EAAW,KAAKE,EAAOC,CAAM,CAAC,EAC/C,GAAII,EACF,OAAOA,CAEX,CACA,OAAOrC,IAAW,OACd,OACA8B,EAAW,KAAK,GACdC,EAAM,CAAC,EAAE,KAAKI,GAAKvC,EAAgBuC,CAAC,GAAG,YAAY,IAAMnC,CAAM,CACjE,CACN,CAIO,SAASsC,EACdhC,EACA+B,EACwB,CACxB,IAAMxB,EAAaR,EAAgBC,CAAK,EACxC,OAAOA,EAAM,aAAa,KAAKiC,GAC7BX,EACEjB,EACE,CACE,CACE,QAAS4B,EAAK,KACd,OAAQZ,EAAYY,EAAK,IAAI,EAC7B,MAAOA,EAAK,MACZ,IAAKA,EAAK,MAAQA,EAAK,MACzB,CACF,EACA1B,CACF,EACA,CAACwB,CAAQ,CACX,CACF,CACF,CAIO,SAASG,EAAejC,EAA4B,CACzD,IAAMkC,EAAQ,IAAI,IAAIlC,CAAQ,EACxBmC,EAAW,IAAI,IACrB,QAAW3C,KAAW0C,EAAO,CAC3B,IAAME,EAAShB,EAAY5B,CAAO,EAClC2C,EAAS,IAAIC,EAAQD,EAAS,IAAIC,CAAM,EAAI,OAAY5C,CAAO,CACjE,CACA,OAAQ6C,GAAkBH,EAAM,IAAIG,CAAI,EAAIA,EAAOF,EAAS,IAAIE,CAAI,CACtE,CAKO,SAASC,EACdC,EACAjB,EACK,CACL,IAAMkB,EAAOP,EAAeX,EAAS,QAAQ,IAAId,GAAKA,EAAE,OAAO,CAAC,EAChE,OAAO+B,EAAS,QAAQE,GAAK,CAC3B,IAAMjD,EAAUgD,EAAKC,EAAE,OAAO,EAC9B,OAAOjD,IAAY,OACf,CAAC,EACD,CAACA,IAAYiD,EAAE,QAAUA,EAAI,CAAE,GAAGA,EAAG,QAAAjD,CAAQ,CAAC,CACpD,CAAC,CACH,CCvLA,IAAMkD,EAAO,kBAIN,SAASC,EAAaC,EAAgB,CAC3C,GAAI,CAACA,EAAO,WAAW,GAAG,GAAK,CAACA,EAAO,WAAW,GAAG,EACnD,OAEF,IAAMC,EAAmB,CAAC,EAC1B,OAAW,CAAC,CAAEC,EAAOC,CAAI,IAAKH,EAAO,SAASF,CAAI,EAChDG,EAAM,KAAK,CAAE,KAAME,EAAO,OAAQD,IAAU,IAAM,IAAM,GAAI,CAAC,EAE/D,OAAOD,CACT,CAEO,SAASG,EAAaC,EAAqC,CAChE,IAAMC,EAAUD,EAAK,MAAM,GAAI,EAC/B,GAAIC,EAAQ,OAAS,IAAMD,EAAK,WAAW,GAAG,EAC5C,OAEF,IAAME,EAAOR,EAAaO,EAAQ,CAAC,CAAE,EACrC,GAAI,CAACC,EACH,OAEF,IAAIC,EACAC,EAAY,GAChB,QAAS,EAAI,GAAI,EAAIH,EAAQ,OAAQ,IAAK,CACxC,IAAMI,EAAMJ,EAAQ,CAAC,EACjBI,EAAI,WAAW,OAAO,EACxBF,EAAKE,EAAI,MAAM,CAAC,EACPA,IAAQ,WACjBD,EAAY,GAEhB,CACA,MAAO,CACL,KAAMH,EAAQ,CAAC,EACf,YAAa,CAACA,EAAQ,CAAC,EACvB,WAAY,CAACA,EAAQ,CAAC,EACtB,SAAU,CAACA,EAAQ,CAAC,EACpB,OAAQA,EAAQ,CAAC,IAAM,IAAM,IAAM,IACnC,KAAAC,EACA,WAAY,CAACD,EAAQ,CAAC,EACtB,UAAW,CAACA,EAAQ,CAAC,EACrB,QAAS,CAACA,EAAQ,CAAC,EACnB,QAAS,CAACA,EAAQ,CAAC,EACnB,YAAa,CAACA,EAAQ,EAAE,EACxB,eAAgB,CAACA,EAAQ,EAAE,EAC3B,UAAAG,EACA,GAAID,IAAO,OAAY,CAAC,EAAI,CAAE,GAAAA,CAAG,CACnC,CACF,CAEO,SAASG,EAASC,EAAc,CACrC,IAAMC,EAAuB,CAAC,EAC9B,QAAWR,KAAQO,EAAK,MAAM;AAAA,CAAI,EAAG,CACnC,IAAME,EAASV,EAAaC,EAAK,QAAQ,CAAC,EACtCS,GACFD,EAAQ,KAAKC,CAAM,CAEvB,CACA,OAAOD,CACT,CAQA,IAAME,EACJ,8FAKK,SAASC,EAAQR,EAAoB,CAC1C,IAAMS,EAAc,CAAC,EACrB,QAAWC,KAAKV,EAAG,SAASO,CAAK,EAC3BG,EAAE,CAAC,IAAM,OACXD,EAAI,KAAK,CAAE,GAAI,QAAS,OAAQ,CAACC,EAAE,CAAC,CAAE,CAAC,EAC9BA,EAAE,CAAC,IAAM,OAClBD,EAAI,KAAK,CAAE,GAAI,QAAS,OAAQC,EAAE,CAAC,EAAE,MAAO,CAAC,EACpCA,EAAE,CAAC,IAAM,OAClBD,EAAI,KAAK,CAAE,GAAI,eAAgB,IAAKC,EAAE,CAAC,EAAE,YAAY,CAAE,CAAC,EAC/CA,EAAE,CAAC,IAAM,OAClBD,EAAI,KAAK,CAAE,GAAI,YAAa,IAAKC,EAAE,CAAC,EAAE,YAAY,CAAE,CAAC,EAC5CA,EAAE,CAAC,IAAM,OAClBD,EAAI,KAAK,CAAE,GAAI,WAAY,OAAQC,EAAE,CAAC,EAAE,MAAO,CAAC,EACvCA,EAAE,CAAC,IAAM,QAClBD,EAAI,KAAK,CAAE,GAAI,QAAS,OAAQ,CAACC,EAAE,CAAC,CAAE,CAAC,EAG3C,OAAOD,CACT",
6
+ "names": ["WELL_KNOWN_SAMPLES", "wellKnownSample", "assemblyName", "sampleOf", "refName", "sample", "panSNSample", "isGenericSample", "haplotypeOf", "panSNHaplotype", "graphHaplotypes", "graph", "refNames", "p", "node", "bySample", "backboneFrom", "contigs", "haplotypes", "samples", "c", "own", "unique", "h", "shared", "haplotype", "graphBackbone", "spans", "isBackbone", "start", "end", "span", "panSNContig", "backboneAssembly", "backbone", "assemblies", "names", "naming", "prefix", "a", "n", "prefixes", "assembly", "assemblyWalk", "walk", "refNameBinding", "exact", "byContig", "contig", "name", "featuresOnBackbone", "features", "bind", "f", "STEP", "parseGafPath", "column", "steps", "arrow", "name", "parseGafLine", "line", "columns", "path", "cs", "secondary", "tag", "parseGaf", "text", "records", "record", "CS_OP", "parseCs", "ops", "m"]
7
7
  }
@@ -0,0 +1,3 @@
1
+ import{b as eo,d as Ct}from"./chunk-UQEPPJEO.js";import{b as Wr,c as $r,d as Hr,e as Xr,h as Yr}from"./chunk-DMYUVGGI.js";import{a as ic}from"./chunk-KWAXLUPQ.js";import{a as xn}from"./chunk-FCWXYIFC.js";import{a as cc}from"./chunk-D7XFR2IV.js";import{a as ac}from"./chunk-J4OLMLS5.js";import{A as ao,a as j,b as qr,c as Vr,d as wn,e as zr,f as jr,g as Ur,h as Mn,i as Sn,k as Rn,l as Kr,m as Zr,n as Ln,o as vt,p as Nn,r as Qr,s as Jr,t as to,u as no,v as ro,x as oo,y as so,z as It}from"./chunk-VIFXYTIS.js";import{a as rt,b as v,c as At,d as Le,e as Ve,f as kt,g as Dr,h as Tt}from"./chunk-EFVAQ2KM.js";import{a as Nt,c as Fr,d as Et}from"./chunk-KULNKXPT.js";import{a as Lt,d as dc}from"./chunk-XEJ47DLD.js";import{a as Re,b as H}from"./chunk-FY3BTKY4.js";var co=Re((jp,io)=>{io.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var lo=Re((Up,uo)=>{uo.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var go=Re((Zp,ho)=>{ho.exports=JBrowseExports["@mui/material/SvgIcon"]});var ot=Re((Jp,bo)=>{bo.exports=JBrowseExports["@jbrowse/core/configuration"]});var ct=Re((yf,Yo)=>{Yo.exports=JBrowseExports["@jbrowse/core/util/colorBits"]});var Rs=Re((Zf,Ss)=>{Ss.exports=JBrowseExports.mobx});var si=Re((Xh,oi)=>{oi.exports=JBrowseExports["@jbrowse/render-core/canvas2dUtils"]});var Ni=Re((Sg,Li)=>{Li.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var po=H(co(),1),fo=H(lo(),1);function uc(e){return"getReads"in e&&typeof e.getReads=="function"}var lc=e=>typeof e=="object"&&e!==null&&Object.entries(e).some(([t,n])=>["uri","localPath","blobId"].includes(t)&&typeof n=="string"&&n!=="");function mo(e){return typeof e.reads=="string"&&e.reads!==""||lc(e.readsLocation)}var En=class extends fo.RpcMethodType{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(n){let{adapterConfig:r,nodeNames:o,sessionId:s,signal:a}=n,{dataAdapter:i}=await(0,po.getAdapter)(this.pluginManager,s,r);return uc(i)?i.getReads(o,{signal:a}):{records:[],total:0}}};var me=H(go(),1);function Pt(e){let t=n=>Math.round(n*100)/100;return e.map((n,r)=>`${r?"L":"M"}${t(n.x)},${t(n.y)}`).join("")}function yo(e,t,n,r,o){let s=Math.hypot(r-t,n-e);if(s===0)return[n,r];let a=(n-e)/s,i=(r-t)/s;return[n+o*a,r+o*i]}function vn(e,t){let n=1-t,r=n*n*n,o=3*n*n*t,s=3*n*t*t,a=t*t*t;return{x:r*e.x0+o*e.cx0+s*e.cx1+a*e.x1,y:r*e.y0+o*e.cy0+s*e.cy1+a*e.y1}}function Lo(e){let t=e[Math.floor(e.length/2)];return t?vn(t,.5):void 0}function No(e){let t=1/0,n=1/0,r=-1/0,o=-1/0;for(let s of e)t=Math.min(t,s.x0,s.cx0,s.cx1,s.x1),r=Math.max(r,s.x0,s.cx0,s.cx1,s.x1),n=Math.min(n,s.y0,s.cy0,s.cy1,s.y1),o=Math.max(o,s.y0,s.cy0,s.cy1,s.y1);return{minX:t,minY:n,maxX:r,maxY:o}}function pc(e,t,n){let r=vn(e,t),o=vn(e,n),s=(n-t)/3,a=xo(e,t),i=xo(e,n);return{x0:r.x,y0:r.y,cx0:r.x+a.x*s,cy0:r.y+a.y*s,cx1:o.x-i.x*s,cy1:o.y-i.y*s,x1:o.x,y1:o.y}}function xo(e,t){let n=1-t,r=3*n*n,o=6*n*t,s=3*t*t;return{x:r*(e.cx0-e.x0)+o*(e.cx1-e.cx0)+s*(e.x1-e.cx1),y:r*(e.cy0-e.y0)+o*(e.cy1-e.cy0)+s*(e.y1-e.cy1)}}function Eo(e,t){let n=[];for(let r of e){let o=Math.hypot(r.cx0-r.x0,r.cy0-r.y0)+Math.hypot(r.cx1-r.cx0,r.cy1-r.cy0)+Math.hypot(r.x1-r.cx1,r.y1-r.cy1),s=Math.max(3,Math.round(o/t)|1);for(let a=0;a<s;a+=2)n.push([pc(r,a/s,(a+1)/s)])}return n}function Cn(e,t,n){let r=new Array(e.length);for(let o=0;o<e.length;o++){let s=e[o];r[o]={x0:s.x0+t,y0:s.y0+n,cx0:s.cx0+t,cy0:s.cy0+n,cx1:s.cx1+t,cy1:s.cy1+n,x1:s.x1+t,y1:s.y1+n}}return r}function An(e,t){let n=e.length-1;return t==="end"?{at:e[n],inward:e[n-1]}:{at:e[0],inward:e[1]}}var fc=.5,mc=80;function wo(e){let t=1/0,n=-1/0;for(let r of e)t=Math.min(t,r.x),n=Math.max(n,r.x);return{min:t,max:n}}function Mo(e,t){return Math.max(0,t.min-e,e-t.max)}function So(e,t,n){let r=Mo(e[0].x,t),o=Mo(e[e.length-1].x,t);return r===o?n:r<o?"start":"end"}function hc(e,t){return{from:So(e,wo(t),"end"),to:So(t,wo(e),"start")}}var gc=.75,bc=1.15,yc=.35,xc=60;function wc(e,t,n,r,o,s){let a=Math.hypot(n-e,r-t),i=a===0?1:(n-e)/a,c=a===0?0:(r-t)/a,d=0,p=1/0,u=-1/0;for(let h of o){let b=h.x-e,g=h.y-t,y=b*-c+g*i;Math.abs(y)>Math.abs(d)&&(d=y);let w=b*i+g*c;p=Math.min(p,w),u=Math.max(u,w)}let l=o.length?u-p:0,f=Math.max(Math.abs(d)*bc/gc,l*yc),m=s===void 0?f:Math.min(f,s);return d<0?-m:m}function Gt({scaleX:e,scaleY:t}){return t/e}var Mc=3;function kn(e,t,n){let r=t.x-e.x,o=(t.y-e.y)*n,s=Math.hypot(r,o);return s===0?void 0:{x:r/s,y:o/s}}function Ao(e,t,n,r,o=Mc){let s=Gt(r),a=kn(e[e.length-1],t[0],s)??kn(e[0],e.at(-1),s)??kn(t[0],t.at(-1),s)??{x:1,y:0},i=[];for(let c=0;c<n;c++){let d=(c-(n-1)/2)*o;i.push({x:-a.y*d,y:a.x*d/s})}return i}function Tn(e,t){return e.map(n=>({x:n.x,y:n.y*t}))}function Sc(e,t){for(let n of e)n.y0/=t,n.cy0/=t,n.cy1/=t,n.y1/=t;return e}var Rc=12,Lc=40;function Ro(e,t){let n=0;for(let s=1;s<e.length;s++)n+=Math.hypot(e[s].x-e[s-1].x,e[s].y-e[s-1].y);let r=n*t;return Math.min(Lc,Math.max(Rc,r/2))/Math.max(t,Number.EPSILON)}function ko(e){return e.from!==e.to?!1:e.fromStrand&&e.toStrand&&e.fromStrand!==e.toStrand?e.fromStrand==="+"?"end":"start":!0}function Nc(e,t,n,r){let{at:o,inward:s}=e,a=s?o.x-s.x:1,i=s?o.y-s.y:0,c=Math.hypot(a,i)||1,d=a/c,p=i/c,u=o.x+n,l=o.y+r,f=u+d*t/3,m=l+p*t/3,h=u+d*t,b=l+p*t,g=-p*t/2,y=d*t/2;return[{x0:u,y0:l,cx0:f,cy0:m,cx1:h+g,cy1:b+y,x1:h,y1:b},{x0:h,y0:b,cx0:h-g,cy0:b-y,cx1:f,cy1:m,x1:u,y1:l}]}function st(e,t,n,r,o,s,a=[],i){let c=s.scaleX,d=Gt(s),p=i??(s.pixelRows?xc:void 0);if(d!==1)return Sc(st(Tn(e,d),Tn(t,d),n,r,o*d,{scaleX:c,scaleY:c},Tn(a,d),p===void 0?void 0:p*d),d);if(typeof n=="string")return Nc(An(e,n),Ro(e,c),r,o);let u=n?{from:"end",to:"start"}:hc(e,t),l=An(e,u.from),f=An(t,u.to),m=l.at,h=f.at,b=m.x+r,g=m.y+o,y=h.x+r,w=h.y+o;if(n){let M=1,S=0;if(l.inward){let U=m.x-l.inward.x,ee=m.y-l.inward.y,T=Math.hypot(U,ee);T>0&&(M=U/T,S=ee/T)}let x=Ro(e,c),R=-S,L=M,k=(m.x+h.x)/2+r+R*x,P=(m.y+h.y)/2+o+L*x,_=b+M*x,$=g+S*x,F=y-M*x,X=w-S*x;return[{x0:b,y0:g,cx0:_,cy0:$,cx1:_+R*x,cy1:$+L*x,x1:k,y1:P},{x0:k,y0:P,cx0:F+R*x,cy0:X+L*x,cx1:F,cy1:X,x1:y,y1:w}]}else{let M=l.inward??{x:m.x-(h.x-m.x),y:m.y-(h.y-m.y)},S=f.inward??{x:h.x-(m.x-h.x),y:h.y-(m.y-h.y)},x=Math.hypot(y-b,w-g),R=(K,q,ye,$e)=>{let xe=q.x-K.x,we=q.y-K.y,ce=Math.hypot(xe,we),Me=ce===0?0:(ye*xe+$e*we)/ce;return Math.max(0,Math.min(x*fc,mc,Me*.5))},L=h.x-m.x,k=h.y-m.y,[P,_]=yo(M.x,M.y,m.x,m.y,R(M,m,L,k)),[$,F]=yo(S.x,S.y,h.x,h.y,R(S,h,-L,-k)),X=a.length?wc(b,g,y,w,a,p):0,U=x===0?1:x,ee=(y-b)/U,T=(w-g)/U,V=-T*X,I=ee*X,D=ee*Math.abs(X),z=T*Math.abs(X);return[{x0:b,y0:g,cx0:P+r+V-D,cy0:_+o+I-z,cx1:$+r+V+D,cy1:F+o+I+z,x1:y,y1:w}]}}var Ec=1;function In(e,t){return t.flatMap(n=>e[n]??[])}function To(e,t,n){let r=e[t.from],o=e[t.to];return r?.length&&o?.length?st(r,o,t.from===t.to,0,0,n,In(e,t.bypassed)):void 0}function Ac(e){let t=new Map;for(let n of e.nodes)if(v(n)){let r=t.get(n.stable.refName);r?r.push(n):t.set(n.stable.refName,[n])}for(let n of t.values())n.sort((r,o)=>r.stable.start-o.stable.start);return t}function kc(e,t,n){let r=[];if(e)for(let o=kt(e,t);o<e.length;o++){let s=e[o];if(s.stable.start>=n)break;s.stable.start+s.length<=n&&r.push(s.id)}return r}function Tc(e,t,n,r){let{fromStrand:o,toStrand:s}=e;if(o===void 0||s===void 0)return!0;let a=o===(t.stable.strand??"+"),i=s===(n.stable.strand??"+");return r?a&&i:!a&&!i}function vo(e){let t=new Map(e.nodes.map(o=>[o.id,o])),n=Ac(e),r=[];for(let o=0;o<e.edges.length;o++){let s=e.edges[o],a=t.get(s.from),i=t.get(s.to);if(a!==void 0&&i!==void 0&&v(a)&&v(i)&&a.stable.refName===i.stable.refName){let c=a.stable.start<=i.stable.start,[d,p]=c?[a,i]:[i,a],u=d.stable.start+d.length,l=p.stable.start,f=l-u;if(f>=Ec&&Tc(s,a,i,c)){let m=d.stable.refName;r.push({edgeIndex:o,from:s.from,to:s.to,refName:m,start:u,end:l,bp:f,bypassed:kc(n.get(m),u,l)})}}}return r}function ze(e){return e.endsWith("-")?"-":"+"}function Co(e){return e==="+"?"-":"+"}function vc(e){let t=(e.fromStrand??ze(e.from))===ze(e.from)?"end":"start",n=(e.toStrand??ze(e.to))===ze(e.to)?"start":"end";return{from:t,to:n}}function Io(e){let t=e.edges.map(vc),n=new Map,r=(l,f,m)=>{let h=`${l}|${f}`,b=n.get(h);b?b.push(m):n.set(h,[m])};e.edges.forEach((l,f)=>{r(l.from,t[f].from,f),r(l.to,t[f].to,f)});let o=l=>{let f=n.get(`${l}|end`);if(f?.length!==1)return;let m=f[0],h=e.edges[m];return h.from===l&&h.to!==l&&t[m].from==="end"&&t[m].to==="start"&&n.get(`${h.to}|start`)?.length===1?m:void 0},s=new Set,a=new Map,i=new Map;for(let l of e.nodes){let f=n.get(`${l.id}|start`),m=f?.length===1?e.edges[f[0]].from:void 0;if(a.has(l.id)||m!==void 0&&o(m)===f[0])continue;let h=[l.id];for(;;){let b=o(h.at(-1)),g=b===void 0?void 0:e.edges[b].to;if(g===void 0||a.has(g))break;s.add(b),h.push(g)}for(let b of h)a.set(b,l.id);h.length>1&&i.set(l.id,h)}for(let l of e.nodes)a.has(l.id)||a.set(l.id,l.id);let c=new Map(e.nodes.map(l=>[l.id,l])),d=[];for(let l of e.nodes){if(a.get(l.id)!==l.id)continue;let f=i.get(l.id);if(!f){d.push(l);continue}let m=f.map(g=>c.get(g)),h=m.filter(v),b=h.length?h.reduce((g,y)=>g.stable.start<=y.stable.start?g:y):m[0];d.push({id:l.id,name:l.name,length:m.reduce((g,y)=>g+y.length,0),depth:l.depth,stable:b.stable})}let p=new Set,u=[];return e.edges.forEach((l,f)=>{let m=a.get(l.from),h=a.get(l.to),b=t[f],g=`${m}|${b.from}>${h}|${b.to}`;s.has(f)||p.has(g)||(p.add(g),u.push({from:m,to:h,...b.from==="start"?{fromStrand:Co(ze(m))}:{},...b.to==="end"?{toStrand:Co(ze(h))}:{}}))}),{graph:{...e,nodes:d,edges:u,paths:void 0,pathVisits:void 0},runs:i}}function Po(e,t,n){let r={...e};for(let[o,s]of t){let a=e[o];if(!a?.length)continue;delete r[o];let i=Bn(a),c=i.at(-1),d=s.map(l=>Math.max(n(l),0)),p=d.reduce((l,f)=>l+f,0)||s.length,u=0;s.forEach((l,f)=>{let m=p?d[f]/p*c:c/s.length,h=f===s.length-1?c:u+m;r[l]=Bo(a,i,u,h),u=h})}return r}function Gn(e,t,n){if(e.length===0)return[];let r=Bn(e),o=r.at(-1);return Bo(e,r,t*o,n*o)}function Go(e){let t=Bn(e);return Pn(e,t,t.at(-1)/2)}function Bn(e){let t=[0];for(let n=1;n<e.length;n++)t.push(t[n-1]+Math.hypot(e[n].x-e[n-1].x,e[n].y-e[n-1].y));return t}function Pn(e,t,n){if(n<=0)return{...e[0]};let r=1;for(;r<t.length&&t[r]<n;)r++;if(r>=t.length)return{...e.at(-1)};let o=t[r]-t[r-1],s=o>0?(n-t[r-1])/o:0,a=e[r-1],i=e[r];return{x:a.x+(i.x-a.x)*s,y:a.y+(i.y-a.y)*s}}function Bo(e,t,n,r){let o=[Pn(e,t,n)];for(let s=0;s<e.length;s++)t[s]>n&&t[s]<r&&o.push({...e[s]});return o.push(Pn(e,t,r)),o}function Cc(e){return e.length*6.2+8}function Ic(e,t){return e.x0<t.x1&&e.x1>t.x0&&e.y0<t.y1&&e.y1>t.y0}function _o(e,t){return e.x1<=0||e.x0>=t.width||e.y1<=0||e.y0>=t.height}function Pc(e,t){return e.x0>=0&&e.x1<=t.width&&e.y0>=0&&e.y1<=t.height}function _n(e,t=[]){let n=[...t];return r=>_o(r,e)||n.some(o=>Ic(o,r))?!1:(n.push(r),!0)}function Bt(e,t,n){let r=[];for(let s of e){let a=Cc(s.text),i=s.y>t.height/2?-1:1;for(let c=0;c<=(s.stack??0);c++){let d=s.y+i*c*19,p={x0:s.x-a/2,x1:s.x+a/2,y0:d-11-4,y1:d+4};if(_o(p,t))break;if(Pc(p,t)&&n(p)){r.push({...s,y:d,w:a});break}}}return r}var Gc=26,Bc=4e4,_c=8,Oc=8,Fc=5.7,Dc=6,Wc=13,at=3,_t=2;function Dt(e){return(e.length*Fc+Dc+at)/2}var Ne=(Wc+at)/2,$c=Dt("1 bp");function Ot(e,t,n){return{x0:t-e,x1:t+e,y0:n-Ne,y1:n+Ne}}function Wt(e,t){return{x0:6,x1:6+e.length*6.2+8+at,y0:t-8-at/2,y1:t+8+at/2}}function Ft(e,t,n){return n<t?e:Math.min(Math.max(e,t),n)}function $t(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:e>=1e3?`${+(e/1e3).toFixed(1)} kb`:`${e} bp`}function Oo(e){return`${$t(e)} del`}function Hc(e,t,n,r){let o=e[0],s=e[e.length-1],a=(t.x-(o.x0+s.x1)/2)*n,i=(t.y-(o.y0+s.y1)/2)*r,c=Math.hypot(a,i);return c===0?{x:0,y:-1}:{x:a/c,y:i/c}}function Xc(e,t){return Math.abs(t.x)*(e.x1-e.x0)/2+Math.abs(t.y)*(e.y1-e.y0)/2}function Yc(e,t){let n=(e.x1-e.x0)/2,r=(e.y1-e.y0)/2;return Math.min(t.x===0?1/0:n/Math.abs(t.x),t.y===0?1/0:r/Math.abs(t.y))}function qc(e,t,n){let r=0;for(let o=1;o<e.length;o++){let s=e[o-1],a=e[o];r+=Math.hypot((a.x-s.x)*t,(a.y-s.y)*n)}return r}function Vc(e,t){let n=1/0,r=1/0,o=-1/0,s=-1/0;for(let a of e)for(let i of t[a]??[])n=Math.min(n,i.x),o=Math.max(o,i.x),r=Math.min(r,i.y),s=Math.max(s,i.y);return n===1/0?void 0:{minX:n,minY:r,maxX:o,maxY:s}}var Fo=new WeakMap;function zc(e,t){let n=Fo.get(e);if(n?.nodeLengths===t)return n.order;let r=Object.entries(e).filter(([o,s])=>s.length>0&&t.has(o)).sort(([o],[s])=>t.get(s)-t.get(o));return Fo.set(e,{nodeLengths:t,order:r}),r}var Do=new WeakMap;function jc(e,t,n,r){let{scaleX:o,scaleY:s}=n,a=Do.get(e);if(a?.deletions===t&&a.scaleX===o&&a.scaleY===s&&a.version===r)return a.arcs;let i=[];for(let c of[...t].sort((d,p)=>p.bp-d.bp)){let d=To(e,c,n),p=d?Lo(d):void 0;if(d&&p){let{minX:u,minY:l,maxX:f,maxY:m}=No(d);i.push({deletion:c,curves:d,apex:p,extent:Math.max((f-u)*o,(m-l)*s)})}}return Do.set(e,{deletions:t,scaleX:o,scaleY:s,version:r,arcs:i}),i}function Wo({nodePositions:e,nodeLengths:t,deletions:n,alleleDeletions:r,axis:o,translateX:s,translateY:a,width:i,height:c,version:d=0}){let{scaleX:p,scaleY:u}=o,l=[],f=[];for(let{deletion:b,curves:g,apex:y,extent:w}of jc(e,n,o,d))if(w>=Gc){let M=Oo(b.bp),S=Dt(M),x=Ot(S,0,0),R=y.x*p+s,L=y.y*u+a,k=w>=S*2/_t,P=Hc(g,y,p,u),_=Xc(x,P)+Oc,$=k?R:Ft(R+P.x*_,S,i-S),F=k?L:Ft(L+P.y*_,Ne,c-Ne),X=Math.hypot($-R,F-L),U;if(X>0){let ee={x:($-R)/X,y:(F-L)/X},T=Yc(x,ee);U={arcX:R,arcY:L,labelX:$-ee.x*T,labelY:F-ee.y*T}}l.push({label:{key:`del:${b.edgeIndex}`,text:M,x:$,y:F,kind:"deletion",leader:U},box:Ot(S,$,F)})}let m=new Set,h=[...r??[]].sort((b,g)=>g.bp-b.bp);for(let b of h){let g=Vc(b.nodeIds,e);if(!g)continue;let y=Math.max(g.minX*p+s,0),w=Math.min(g.maxX*p+s,i),M=Math.max(g.minY*u+a,0),S=Math.min(g.maxY*u+a,c);if(w<y||S<M)continue;let x=Math.max(w-y,S-M),R=Oo(b.bp),L=Dt(R);if(x>=L*2/_t){for(let _ of b.nodeIds)m.add(_);let k=Ft((y+w)/2,L,i-L),P=Ft((M+S)/2,Ne,c-Ne);l.push({label:{key:`alleledel:${b.nodeIds.join(",")}`,text:R,x:k,y:P,kind:"deletion"},box:Ot(L,k,P)})}}for(let[b,g]of zc(e,t)){if(m.has(b))continue;let{x:y,y:w}=Go(g),M=w*u+a;if(M+Ne<=0||M-Ne>=c)continue;let S=qc(g,p,u);if(S<$c*2/_t)continue;let x=$t(t.get(b)),R=Dt(x);if(S>=R*2/_t){let L=y*p+s;f.push({label:{key:`node:${b}`,text:x,x:L,y:M,kind:"node"},box:Ot(R,L,M)})}}return{deletions:l,nodes:f}}function $o(e,t){return Math.max(_c,Math.floor(e*t/Bc))}function On(e,t,n=1/0){let r=[];for(let{label:o,box:s}of e){if(r.length>=n)break;t(s)&&r.push(o)}return r}var Qc=3.4,it=6,Jc=8,ed=18,td=2,nd=15;function Ho(e,t){return[...e].sort((n,r)=>t(r)-t(n))}function Xo(e){let{paneWidth:t,canvasHeight:n,translateX:r,translateY:o}=e,{scaleX:s,scaleY:a}=e.axisScale,i={width:t,height:n},c=x=>({x:x.x*s+r,y:x.y*a+o}),d=e.drawnRowLabels.map(({label:x,y:R})=>Wt(x,R*a+o)),p=e.referenceStripZonePx??0;p>0&&d.push({x0:0,x1:t,y0:0,y1:p}),e.legendSize.width>0&&d.push({x0:t-it-e.legendSize.width,x1:t,y0:0,y1:p+it+e.legendSize.height}),e.poppedFrom&&d.push({x0:0,x1:60+e.poppedFrom.label.length*6.2*1.2,y0:0,y1:44});let u=_n(i,d),l=e.drawnRowLabels.length>0,f=l?Math.min(...e.drawnRowLabels.map(x=>x.y)):1/0,m=e.contigThickness*Qc,h=Ho(e.bubbleHalos,x=>x.members),b=Bt(h.map(x=>{let{x:R,y:L}=c({x:x.labelAt.x,y:Math.min(x.labelAt.y,f)}),k=L-m/2-6;return{item:x,x:R,y:l?Math.max(k,nd):k,text:x.label}}),i,u),g=Bt(Ho(e.genePins,x=>x.gene.end-x.gene.start).map(x=>{let{x:R,y:L}=c(x.at);return{item:x,x:R,y:L+e.contigThickness+ed,text:x.covered<.98?`${x.gene.name} \u2026`:x.gene.name,stack:td}}),i,u),y=e.nodePositions&&e.labelsNodeSizes?Wo({nodePositions:e.nodePositions,nodeLengths:e.nodeLengths,deletions:e.showDeletionEdges?e.deletions:[],alleleDeletions:e.alleleDeletions,axis:e.axisScale,translateX:r,translateY:o,width:t,height:n,version:e.positionsVersion}):{deletions:[],nodes:[]},w=On(y.deletions,u),M=Bt(h.flatMap(x=>x.routes.map(R=>{let{x:L,y:k}=c(R.at);return{item:{halo:x,route:R},x:L,y:k+4,text:R.text,stack:Jc}})),i,u),S=On(y.nodes,u,$o(t,n));return{bubbles:b,genes:g,routes:M,sizes:[...w,...S]}}var is=H(ct(),1);var oe=H(ct(),1);var te=H(ct(),1);function Pe(e,t){return(0,te.packAbgr)((0,te.abgrRed)(e),(0,te.abgrGreen)(e),(0,te.abgrBlue)(e),Math.round((0,te.abgrAlpha)(e)*t))}function xf(e,t){return(0,te.packAbgr)(Math.min(255,Math.round((0,te.abgrRed)(e)*t)),Math.min(255,Math.round((0,te.abgrGreen)(e)*t)),Math.min(255,Math.round((0,te.abgrBlue)(e)*t)),(0,te.abgrAlpha)(e))}var rd=4;function he(e){let t=new Map;function n(r,o){let s=t.get(r);s?s.push(o):t.set(r,[o])}for(let r of e.edges)n(r.from,r.to),n(r.to,r.from);return t}function od({nodeId:e,nodeById:t,neighbors:n}){let r=new Set([e]),o=[e],s=1/0,a=-1/0;for(let i=0;i<rd&&o.length>0;i++){let c=[];for(let d of o){let p=n.get(d);if(p){for(let u of p)if(!r.has(u)){r.add(u);let l=t.get(u);l&&v(l)?(s=Math.min(s,l.stable.start+l.length),a=Math.max(a,l.stable.start)):c.push(u)}}}o=c}return s===1/0?void 0:{start:Math.min(s,a),end:Math.max(s,a)}}function dt({nodeId:e,nodeById:t,neighbors:n}){let r=t.get(e);return r===void 0?void 0:v(r)?{start:r.stable.start,end:r.stable.start+r.length}:od({nodeId:e,nodeById:t,neighbors:n})}function qo(e){let t=new Map(e.nodes.map(o=>[o.id,o])),n=he(e),r=new Map;for(let o of e.nodes){let s=dt({nodeId:o.id,nodeById:t,neighbors:n});s&&r.set(o.id,(s.start+s.end)/2)}return r}var Vo=new WeakMap;function zo(e,t,n,r,o){let{scaleX:s,scaleY:a}=n,i=Vo.get(e);if(i?.graph===t&&i.scaleX===s&&i.scaleY===a&&i.deletions===r&&i.version===o)return i.curves;let c=new Map;for(let d=0;d<t.edges.length;d++){let p=t.edges[d],u=e[p.from],l=e[p.to];if(u?.length&&l?.length){let f=r?.get(d);c.set(d,st(u,l,ko(p),0,0,n,f?In(e,f):[]))}}return Vo.set(e,{graph:t,scaleX:s,scaleY:a,deletions:r,version:o,curves:c}),c}var sd=(0,oe.packAbgr)(119,119,119,217),jo=(0,oe.packAbgr)(136,136,136,217),ad=(0,oe.packAbgr)(24,24,28,240),id=2.2,Hn=(0,oe.packAbgr)(160,160,160,255),je=.18,cd=11,dd=1.2,Uo=4,Fn=1e-6,ud=7,ld=3,pd=3,fd=1.5,md=.5,hd=.45,Dn=12,gd=1e-6,Ee=new Float64Array(64),Ge=new Float64Array(64),Be=new Float64Array(64);function bd(e,t,n,r){let o=e.length*Dn+1;Ee.length<o&&(Ee=new Float64Array(o),Ge=new Float64Array(o),Be=new Float64Array(o));let s=e[e.length-1];Ee[0]=s.x1,Ge[0]=s.y1,Be[0]=0;let a=1,i=0;for(let c=e.length-1;c>=0&&i<r;c--){let d=e[c];for(let p=1;p<=Dn&&i<r;p++){let u=1-(p/Dn)**2,l=1-u,f=l*l*l,m=3*l*l*u,h=3*l*u*u,b=u*u*u,g=f*d.x0+m*d.cx0+h*d.cx1+b*d.x1,y=f*d.y0+m*d.cy0+h*d.cy1+b*d.y1;i+=Math.hypot(g-Ee[a-1],(y-Ge[a-1])*n)*t,Ee[a]=g,Ge[a]=y,Be[a]=i,a++}}return a}function Ko(e,t){let n=1;for(;n<e-1&&Be[n]<t;)n++;let r=Be[n-1],o=Be[n],s=o>r?Math.min(1,Math.max(0,(t-r)/(o-r))):0;return{x:Ee[n-1]+(Ee[n]-Ee[n-1])*s,y:Ge[n-1]+(Ge[n]-Ge[n-1])*s}}function yd({curves:e,edgeHalfWidth:t,nodeHalfWidth:n,scale:r,yToX:o,color:s,fromSegments:a,toSegments:i}){let c=ud+ld*t,d=bd(e,r,o,n+c),p=Be[d-1],u=Math.min(n,p),l=p<gd?xd(a,r,o):p-u,f=Math.min(1,l/c);if(f<md)return;let m=Ko(d,u),h=Ko(d,u+c*f),b=m.x-h.x,g=(m.y-h.y)*o,y=e[e.length-1];return{x:m.x,y:m.y,angle:Math.hypot(b,g)>0?Math.atan2(g,b):kd(y,o,wd(y,i)),length:c*f,halfWidth:(pd+fd*t)*f,color:s}}function xd(e,t,n){let r=0;for(let o=1;o<e.length;o++)r+=Math.hypot(e[o].x-e[o-1].x,(e[o].y-e[o-1].y)*n);return r*t}function wd(e,t){if(t.length<2)return;let n=t[0],r=t[t.length-1];return Math.hypot(e.x1-n.x,e.y1-n.y)<=Math.hypot(e.x1-r.x,e.y1-r.y)?{from:n,to:t[1]}:{from:r,to:t[t.length-2]}}function Wn(e,t=1){let n=t===1?e:e.map(o=>({x:o.x,y:o.y*t})),r=[];for(let o=0;o<n.length;o++){let s=0,a=0;if(o===0){let i=n[1].x-n[0].x,c=n[1].y-n[0].y,d=Math.hypot(i,c);d>0&&(s=-c/d,a=i/d)}else if(o===n.length-1){let i=n[o].x-n[o-1].x,c=n[o].y-n[o-1].y,d=Math.hypot(i,c);d>0&&(s=-c/d,a=i/d)}else{let i=n[o].x-n[o-1].x,c=n[o].y-n[o-1].y,d=Math.hypot(i,c),p=n[o+1].x-n[o].x,u=n[o+1].y-n[o].y,l=Math.hypot(p,u);if(d>0&&l>0){let f=-c/d,m=i/d,h=-u/l,b=p/l;s=(f+h)/2,a=(m+b)/2;let g=f*s+m*a;g>.1&&(s/=g,a/=g)}else d>0?(s=-c/d,a=i/d):l>0&&(s=-u/l,a=p/l)}r.push({nx:s,ny:a})}return r}function Zo(e,t,n,r=1){return e.map((o,s)=>({x:o.x+t[s].nx*n,y:o.y+t[s].ny*n/r}))}function Ht(e,t,n,r){return(0,oe.packAbgr)(Math.round(e*255),Math.round(t*255),Math.round(n*255),Math.round(r*255))}function Ue(e,t,n){let r=(1-Math.abs(2*n-1))*t,o=r*(1-Math.abs(e/60%2-1)),s=n-r/2,a=0,i=0,c=0;return e<60?(a=r,i=o):e<120?(a=o,i=r):e<180?(i=r,c=o):e<240?(i=o,c=r):e<300?(a=o,c=r):(a=r,c=o),[a+s,i+s,c+s]}var Md=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],Sd=[[237,137,44],[158,42,122]],Rd=[[220,50,50],[50,120,220]];function $n(e,t){let n=Math.max(0,Math.min(1,t))*(e.length-1),r=Math.min(e.length-2,Math.floor(n)),o=n-r,s=e[r],a=e[r+1];return(0,oe.packAbgr)(Math.round(s[0]+(a[0]-s[0])*o),Math.round(s[1]+(a[1]-s[1])*o),Math.round(s[2]+(a[2]-s[2])*o),255)}function Ld(e,t){let[n,r,o]=Ue(jr(e),Mn,Sn);return Ht(n,r,o,t)}var Xn=300,Nd=.7,Ed=.5,ts=[60,65,72],Yn=(0,oe.packAbgr)(...ts,255),Ad=`rgb(${ts.join(", ")})`;function Xt(e,t){let n=qo(e);if(t&&t.end>t.start)return{start:t.start,span:t.end-t.start,midpoints:n};let r=1/0,o=-1/0;for(let s of n.values())r=Math.min(r,s),o=Math.max(o,s);return{start:r===1/0?0:r,span:o>r?o-r:1,midpoints:n}}function qn(e){let t=1/0,n=-1/0,r=1/0,o=-1/0,s=0;for(let a of e.nodes)a.stable!==void 0&&a.stable.rank>s&&(s=a.stable.rank),a.depth<t&&(t=a.depth),a.depth>n&&(n=a.depth),a.length<r&&(r=a.length),a.length>o&&(o=a.length);return{minDepth:t,maxDepth:n,minLength:r,maxLength:o,maxRank:s,nodeCount:e.nodes.length}}function Vn(e,t,n,r){switch(n){case"random":return Ld(e.id,1);case"depth":return $n(Md,r.maxDepth>r.minDepth?(e.depth-r.minDepth)/(r.maxDepth-r.minDepth):.5);case"node-length":return $n(Rd,r.maxLength>r.minLength?(e.length-r.minLength)/(r.maxLength-r.minLength):.5);case"stable-rank":return e.stable===void 0?(0,oe.packAbgr)(160,160,160,255):e.stable.rank===0?(0,oe.packAbgr)(52,152,219,255):$n(Sd,r.maxRank>1?(e.stable.rank-1)/(r.maxRank-1):0);case"reference-position":{let o=r.referenceRamp,s=o?.midpoints.get(e.id);if(o===void 0||s===void 0)return(0,oe.packAbgr)(160,160,160,255);if(e.stable!==void 0&&e.stable.rank>0)return Yn;let a=Math.max(0,Math.min(1,(s-o.start)/o.span)),[i,c,d]=Ue(a*Xn,Nd,Ed);return Ht(i,c,d,1)}case"grey":return(0,oe.packAbgr)(160,160,160,255);case"rainbow":{let o=r.nodeCount>1?t/r.nodeCount*360:0,[s,a,i]=Ue(o,.75,.5);return Ht(s,a,i,1)}default:return(0,oe.packAbgr)(52,152,219,255)}}function kd(e,t=1,n){let r=[[e.cx1,e.cy1],[e.cx0,e.cy0],[e.x0,e.y0]];for(let[o,s]of r){let a=e.x1-o,i=(e.y1-s)*t;if(Math.hypot(a,i)>0)return Math.atan2(i,a)}return n?Math.atan2((n.to.y-n.from.y)*t,n.to.x-n.from.x):0}function Td(e,t){let n=!1;for(let r=0;r<e.length-1&&!n;r++){let o=e[r],s=e[r+1];n=Math.max(o.x,s.x)>=t.minX&&Math.min(o.x,s.x)<=t.maxX&&Math.max(o.y,s.y)>=t.minY&&Math.min(o.y,s.y)<=t.maxY}return n}function Qo(e,t){for(let n of e){let r=Math.min(n.x0,n.cx0,n.cx1,n.x1),o=Math.max(n.x0,n.cx0,n.cx1,n.x1),s=Math.min(n.y0,n.cy0,n.cy1,n.y1),a=Math.max(n.y0,n.cy0,n.cy1,n.y1);if(o>=t.minX&&r<=t.maxX&&a>=t.minY&&s<=t.maxY)return!0}return!1}var Jo=new WeakMap;function vd(e){let t=Jo.get(e);if(!t){let n=[],r=new Map,o=e.paths??[];for(let s=0;s<o.length;s++){let[a,i,c]=Ue(Ur(s,o.length),Mn,Sn);n.push(Ht(a,i,c,.85)),r.has(o[s].name)||r.set(o[s].name,s)}t={pathColorByIndex:n,pathIndexByName:r},Jo.set(e,t)}return t}var es=new WeakMap,Cd=new Map;function Id(e){let t=es.get(e);if(!t){t=new Map;for(let[n,r]of(e.paths??[]).entries())for(let o of new Set(r.nodeIds)){let s=t.get(o);s?s.push(n):t.set(o,[n])}es.set(e,t)}return t}function ns(e){let{nodePositions:t,graph:n,nodeById:r,colorScheme:o,contigThickness:s,connectorThickness:a,drawPaths:i,nodeWidth:c="uniform",highlight:d,axis:p,linearLayout:u,viewportBounds:l,referenceRamp:f,deletions:m,hiddenEdges:h,version:b=0}=e,g=c==="depth"?so(n):0,y=p.scaleX,w=Gt(p),M=zo(t,n,p,m,b),S=[],x=new Map,R=[],L=new Map,k=[],P=new Map,_={...qn(n),referenceRamp:f},$=new Map;if(o==="rainbow")for(let I=0;I<n.nodes.length;I++)$.set(n.nodes[I].id,I);let F=n.paths?.length??0,{pathColorByIndex:X,pathIndexByName:U}=vd(n),ee=I=>X[U.get(I)??-1]??jo,T=i&&F>1?Id(n):Cd,V=y>(u?1:hd);for(let I=0;I<n.edges.length;I++){let D=n.edges[I],z=t[D.from],K=t[D.to],q=M.get(I);if(!z?.length||!K?.length||!q||h?.has(I))continue;let ye=D.pathIds?.length??0,xe=m?.get(I)!==void 0,we=d?.edgeIndexes.has(I)??!1,ce=a/2*(xe?id:1),Me=i&&ye>0,ve=xe?ad:sd,le=!d||we?ve:Pe(ve,je),tt=r.get(D.to),He=(tt?It(tt,s,c,g):s)/2,Xe=(Ie,qe,ae,Se)=>{let fe=Ie===0&&qe===0?q:Cn(q,Ie,qe);if(l&&!Qo(fe,l))return;if(xe)for(let gn of Eo(fe,cd/y))k.push({curves:gn,thickness:ce,color:ae});else k.push({curves:fe,thickness:ce,color:ae});let Rt=V&&Se!==void 0?yd({curves:fe,edgeHalfWidth:ce,nodeHalfWidth:He,scale:y,yToX:w,color:Se,fromSegments:z,toSegments:K}):void 0;Rt&&R.push(Rt)},Ce=k.length,Ye=R.length,pe=d&&we&&!Me?d.walks:void 0;if(pe){let Ie=r.get(D.from),qe=Ie?It(Ie,s,c,g):s,ae=Math.max(qe/pe.length,Uo),Se=Wn(z,w),{nx:fe,ny:Rt}=(D.fromStrand==="-"?Se[0]:Se.at(-1))??{nx:0,ny:0},gn=1/Math.max(y,Fn);pe.forEach((bn,sc)=>{if(!bn.edgeIndexes.has(I))return;let yn=(sc-(pe.length-1)/2)*ae*gn,Or=yn===0?q:Cn(q,fe*yn,Rt*yn/w);l&&!Qo(Or,l)||k.push({curves:Or,thickness:ae/2,color:bn.colors.get(D.from)??bn.colors.get(D.to)??ve})})}else if(!Me)Xe(0,0,le,le);else{let Ie=Ao(z,K,ye,p),qe=Math.floor((ye-1)/2);for(let ae=0;ae<ye;ae++){let Se=Ie[ae],fe=ee(D.pathIds[ae]);Xe(Se.x,Se.y,d&&!d.names.has(D.pathIds[ae])?Pe(fe,je):fe,ae===qe?le:void 0)}}let nt=k.length-Ce;nt>0&&P.set(I,{start:Ce,count:nt});let St=R.length-Ye;St>0&&L.set(I,{start:Ye,count:St})}for(let[I,D]of Object.entries(t)){let z=r.get(I);if(!z||l&&!Td(D,l))continue;let K=d!==void 0&&!d.nodeIds.has(I),q=K?Hn:Vn(z,$.get(I)??0,o,_),ye=K?Pe(q,je):q,$e=It(z,s,c,g),xe=$e/2,we=S.length,ce=T.get(I),Me=$e/F,ve=D.length>=2,le=d&&!K&&!ce?.length?d.walks:void 0;if(ve&&le){let He=Math.max($e/le.length,Uo),Xe=Wn(D,w),Ce=1/Math.max(y,Fn);le.forEach((Ye,pe)=>{let nt=Ye.colors.get(I);if(nt===void 0)return;let St=(pe-(le.length-1)/2)*He*Ce;S.push({points:le.length===1?D:Zo(D,Xe,St,w),thickness:He/2,color:nt})})}else if(ve&&ce?.length&&Me>=dd){let He=Wn(D,w),Xe=1/Math.max(y,Fn);for(let Ce of ce){let Ye=(Ce-(F-1)/2)*Me*Xe,pe=X[Ce]??jo;S.push({points:Zo(D,He,Ye,w),thickness:Me/2,color:K?Pe(pe,je):pe})}}else ve&&S.push({points:D,thickness:xe,color:ye});let tt=S.length-we;tt>0&&x.set(I,{start:we,count:tt})}return{nodeStrokes:S,nodeStrokeRuns:x,arrows:R,arrowRuns:L,edgeCurves:k,edgeCurveRuns:P}}var zn=[{value:"progress",label:"Progress along the walk",legend:"light where each walk starts, dark where it ends"},{value:"walk",label:"One colour for the walk",legend:""},{value:"reference",label:"Reference position",legend:"along the reference left to right, charcoal off it"}],Yt=[{value:"grey",label:"Grey to black",ends:["#a3a3a3","#151515"]},{value:"blue",label:"Cyan to navy",ends:["#6ee0f0","#0b2c7a"]},{value:"red",label:"Yellow to red",ends:["#ffd24a","#b3121b"]},{value:"purple",label:"Pink to plum",ends:["#f5a3d8","#5e1a6e"]},{value:"green",label:"Lime to forest",ends:["#b6e36c","#0b5d3b"]},{value:"rainbow",label:"Rainbow"}],rs=["blue","red","purple","green"],Pd=e=>zn.some(t=>t.value===e),Gd=e=>Yt.some(t=>t.value===e);function cs(e,t,n,r=!0){let{field:o,scheme:s}=e.color??{},a=Pd(o)?o:r?"progress":"walk",i=t?"grey":rs[n%rs.length],c=Gd(s)?s==="rainbow"&&a!=="reference"?i:s:i;return{field:a,scheme:c}}var ds=.5,Bd=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4,_d=e=>e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055;function os(e){let[t,n,r]=[1,3,5].map(i=>Bd(Number.parseInt(e.slice(i,i+2),16)/255)),o=Math.cbrt(.4122214708*t+.5363325363*n+.0514459929*r),s=Math.cbrt(.2119034982*t+.6806995451*n+.1073969566*r),a=Math.cbrt(.0883024619*t+.2817188376*n+.6299787005*r);return[.2104542553*o+.793617785*s-.0040720468*a,1.9779984951*o-2.428592205*s+.4505937099*a,.0259040371*o+.7827717662*s-.808675766*a]}function Od([e,t,n]){let r=(e+.3963377774*t+.2158037573*n)**3,o=(e-.1055613458*t-.0638541728*n)**3,s=(e-.0894841775*t-1.291485548*n)**3;return[4.0767416621*r-3.3077115913*o+.2309699292*s,-1.2684380046*r+2.6097574011*o-.3413193965*s,-.0041960863*r-.7034186147*o+1.707614701*s].map(a=>_d(Math.max(0,Math.min(1,a)))*255)}function us(e,t){let n=Math.max(0,Math.min(1,t)),r=Yt.find(a=>a.value===e);if(!r||!("ends"in r))return Ue(n*Xn,.7,.5).map(a=>a*255);let o=os(r.ends[0]),s=os(r.ends[1]);return Od(o.map((a,i)=>a+(s[i]-a)*n))}function ss(e,t){let[n,r,o]=us(e,t).map(Math.round);return`rgb(${n}, ${r}, ${o})`}function as(e,t){let[n,r,o]=us(e,t).map(Math.round);return(0,is.packAbgr)(n,r,o,255)}function ls({field:e,scheme:t},n){return e==="walk"?as(t,ds):n===void 0?Fd:as(t,n)}var Fd=Yn;function Gf({field:e,scheme:t}){return e==="walk"?ss(t,ds):`linear-gradient(to right, ${Array.from({length:7},(r,o)=>{let s=o/6;return`${ss(t,s)} ${s*100}%`}).join(", ")})`}function qt(e){return rt(e)?ps(e):void 0}function ps(e){return{sample:Nt(e.stable.refName),haplotype:Fr(e.stable.refName),refName:Et(e.stable.refName),start:e.stable.start,end:e.stable.start+e.length}}function Dd(e,t){let n=[...e].sort((s,a)=>s.start-a.start),r,o;for(let s of n)o=o&&s.start-o.end<=t?{start:o.start,end:Math.max(o.end,s.end)}:{start:s.start,end:s.end},(!r||o.end-o.start>r.end-r.start)&&(r=o);return r}function Wd(e){return`${e.haplotype??e.sample}\0${e.refName}`}function fs(e,{maxGap:t=1/0}={}){let n=new Map;for(let o of e.nodes)if(rt(o)){let s=ps(o),a=Wd(s),i=n.get(a);i?(i.spans.push({start:s.start,end:s.end}),i.rank=Math.min(i.rank,o.stable.rank)):n.set(a,{sample:s.sample,haplotype:s.haplotype,refName:s.refName,rank:o.stable.rank,spans:[{start:s.start,end:s.end}]})}let r=new Map;for(let o of n.values()){let s=Dd(o.spans,t);if(s){let a={sample:o.sample,haplotype:o.haplotype,refName:o.refName,start:s.start,end:s.end,rank:o.rank,nodeCount:o.spans.length},i=o.haplotype??o.sample,c=r.get(i);(!c||a.nodeCount>c.nodeCount)&&r.set(i,a)}}return[...r.values()].sort((o,s)=>+(o.rank!==0)-+(s.rank!==0)||o.sample.localeCompare(s.sample)||(o.haplotype??"").localeCompare(s.haplotype??""))}function jn(e,t){return(t.haplotype===void 0?void 0:e(t.haplotype))??e(t.sample)}function ms(e,t){return e.flatMap(n=>{let r=jn(t,n);return r===void 0?[]:[{...n,sample:r}]})}function Vt(e){return`${e.refName}:${e.start+1}-${e.end}`}function Ae(e){return`${e.refName}:${(e.start+1).toLocaleString()}-${e.end.toLocaleString()}`}var hs=H(Lt(),1),gs=(0,me.createSvgIcon)((0,hs.jsx)("path",{d:"M9.01 14H2v2h7.01v3L13 15l-3.99-4zm5.98-1v-3H22V8h-7.01V5L11 9z"}),"CompareArrows");var bs=H(Lt(),1),ys=(0,me.createSvgIcon)((0,bs.jsx)("path",{d:"M17 5h-2V3h2zm-2 16h2v-2.59L19.59 21 21 19.59 18.41 17H21v-2h-6zm4-12h2V7h-2zm0 4h2v-2h-2zm-8 8h2v-2h-2zM7 5h2V3H7zM3 17h2v-2H3zm2 4v-2H3c0 1.1.9 2 2 2M19 3v2h2c0-1.1-.9-2-2-2m-8 2h2V3h-2zM3 9h2V7H3zm4 12h2v-2H7zm-4-8h2v-2H3zm0-8h2V3c-1.1 0-2 .9-2 2"}),"HighlightAlt");var xs=H(Lt(),1),Un=(0,me.createSvgIcon)((0,xs.jsx)("path",{d:"M3 16h5v-2H3zm6.5 0h5v-2h-5zm6.5 0h5v-2h-5zM3 20h2v-2H3zm4 0h2v-2H7zm4 0h2v-2h-2zm4 0h2v-2h-2zm4 0h2v-2h-2zM3 12h8v-2H3zm10 0h8v-2h-8zM3 4v4h18V4z"}),"LineStyle");var $d="Linear genome view",Hd="Linear synteny view",Xd="No synteny track in this session aligns these assemblies";function ws({label:e,icon:t,entries:n,entryLabel:r,onSelect:o,disabledHelpText:s,nameTheOnlyEntry:a=!0}){let[i]=n,c=s?[{label:e,icon:t,disabled:!0,disabledHelpText:s,onClick:()=>{}}]:[];return n.length===0?c:n.length===1&&i?[{label:a?`${e} \u2014 ${r(i)}`:e,icon:t,onClick:o(i)}]:[{label:e,icon:t,type:"subMenu",subMenu:n.map(d=>({label:r(d),onClick:o(d)}))}]}function Ms({contributors:e,syntenyTracks:t,onShowLinear:n,onShowSynteny:r}){let o=t[0]?.coverage??e.length;return[...ws({label:$d,icon:Un,entries:e,entryLabel:s=>`${s.sample} ${Ae(s)}`,onSelect:s=>()=>{n({location:s,assembly:s.sample})}}),...e.length>=2?ws({label:`${Hd} (${o} assemblies)`,icon:gs,entries:t,entryLabel:s=>s.coverage<o?`${s.name} (${s.coverage} of ${o})`:s.name,nameTheOnlyEntry:!1,disabledHelpText:Xd,onSelect:s=>()=>{r(s.trackId)}}):[]]}function Uf({own:e,reference:t,highlight:n,onShowLinear:r,onHighlight:o}){let s=[e?{label:`Open in ${e.assembly} \u2014 ${Ae(e.location)}`,target:e}:void 0,t&&t.assembly!==e?.assembly?{label:`Open in ${t.assembly} \u2014 around this node`,target:t}:void 0].filter(a=>a!==void 0);return[...o&&n?[{label:`Highlight in ${n.assembly}`,icon:ys,onClick:()=>{o(n)}}]:[],...s.map(({label:a,target:i})=>({label:a,icon:Un,onClick:()=>{r(i)}}))]}function ut(e){return e.id.endsWith("-")?"-":"+"}function Kn(e,t){return t===ut(e)?e.id:`-${e.id}`}function Yd(e,t){let n=e.map(()=>{}),r=0,o=0;for(;o<e.length&&e[o]!==void 0;o++)n[o]=r,r+=e[o];let s=t;for(let a=e.length-1;a>o&&e[a]!==void 0;a--)s-=e[a],n[a]=s;return n}function qd(e,t){let n=e.path.map(()=>[]);if(e.cs===void 0)return n;let r=Yd(t,e.pathLength),o=(i,c=!1)=>{for(let d=0;d<r.length;d++){let p=r[d],u=t[d];if(p!==void 0&&u!==void 0&&p<=i&&(i<p+u||c&&i===p+u))return{s:d,local:i-p,room:p+u-i}}},s=(i,c)=>{let d=n[i],p=d.at(-1);c.type==="substitution"&&p?.type==="substitution"&&p.pos+p.seq.length===c.pos?p.seq+=c.seq:d.push(c)},a=e.pathStart;for(let i of Yr(e.cs))if(i.op==="match")a+=i.length;else if(i.op==="substitution"){let c=o(a);c&&s(c.s,{type:"substitution",pos:c.local,seq:i.seq}),a+=1}else if(i.op==="insertion"){let c=o(a,a===e.pathEnd);c&&s(c.s,{type:"insertion",pos:c.local,seq:i.seq})}else{let c=i.length;for(;c>0;){let d=o(a),p=d?Math.min(c,d.room):c;d&&s(d.s,{type:"deletion",pos:d.local,length:p}),a+=p,c-=p}}return n}function Ls(e,t,n){let r=new Map(e.nodes.map(s=>[s.name,s])),o=[];for(let s of t){let a=s.path.map(p=>r.get(p.name)),i=a.flatMap((p,u)=>p?[u]:[]),c=i[0],d=i.at(-1);if(c!==void 0&&d!==void 0){let p=qd(s,a.map(f=>f?.length)),u=i.map(f=>Kn(a[f],s.path[f].strand)),l=a[d].length;o.push({id:n+o.length,name:s.name,type:"read",sourceTrackID:1,sequence:u,sequenceNew:i.map((f,m)=>({nodeName:u[m],mismatches:p[f]})),firstNodeOffset:c===0?s.pathStart:0,finalNodeCoverLength:d===s.path.length-1?l-(s.pathLength-s.pathEnd):l,mapping_quality:s.mappingQuality===255?0:s.mappingQuality,is_secondary:s.secondary,is_reverse:s.strand==="-"})}}return o}var Vd=["#6baed6","#4292c6","#2171b5","#08519c"],zd=["#fb6a4a","#ef3b2c","#cb181d","#a50f15"];function Ns(e){let t=e.is_reverse?zd:Vd;return t[e.id%t.length]}function zt(e){let t=e.split("#"),n=t.length>=2?Number(t[1]):Number.NaN;return{sample:t[0]??e,haplotype:Number.isFinite(n)?n:void 0}}function jd(e,t,n,r){let o=[],s=[],a=[e];for(r.add(e);a.length>0;){let i=a.pop(),c=t.get(i);if(c){o.push(c);for(let d of n.get(i)??[]){let p=t.get(d);p&&(p.stable.rank===0?s.push(p):r.has(d)||(r.add(d),a.push(d)))}}}return{members:o,anchors:s}}function Ud(e){if(new Set(e.map(i=>i.stable.refName)).size!==1||e.length<2)return;let n=[...e].sort((i,c)=>i.stable.start-c.stable.start),r=n[0],o=n.at(-1),s=r.stable.start+r.length,a=o.stable.start;return a>=s?{start:s,end:a,entry:r}:void 0}function Kd(e,t,n){let r=new Map(e.map(a=>[a.id,a])),o=new Map,s=[];for(let a of n.get(t.id)??[])r.has(a)&&(o.set(a,0),s.push(a));if(s.length===0)for(let a of e)o.set(a.id,0),s.push(a.id);for(let a of s){let i=o.get(a)+r.get(a).length;for(let c of n.get(a)??[])if(r.has(c)){let d=o.get(c);(d===void 0||i<d)&&(o.set(c,i),s.push(c))}}return o}function Zd(e,t,n){let r=Kd(e,t,n),o=[...e].sort((c,d)=>r.get(c.id)-r.get(d.id)),s=new Map(o.map((c,d)=>[c.id,d])),a=new Map(e.map(c=>[c.id,c])),i=new Map;for(let[c,d]of o.entries()){let p=0;for(let u of n.get(d.id)??[]){let l=a.get(u);l&&s.get(u)<c&&(p=Math.max(p,i.get(u)+l.length))}i.set(d.id,p)}return{offsets:i,ordered:o}}function As(e){let t=new Map(e.nodes.filter(rt).map(s=>[s.id,s])),n=he(e),r=new Set,o=[];for(let s of t.values())if(s.stable.rank!==0&&!r.has(s.id)){let{members:a,anchors:i}=jd(s.id,t,n,r),c=Ud(i);if(c){let{offsets:d,ordered:p}=Zd(a,c.entry,n);o.push({start:c.start,refSpan:c.end-c.start,nodeIds:p.map(u=>u.id),nodeOffsets:p.map(u=>d.get(u.id)),pathLength:p.reduce((u,l)=>Math.max(u,d.get(l.id)+l.length),0)})}}return o.sort((s,a)=>s.start-a.start)}var Qd=1,Jd=.015;function jt({graph:e,span:t,rowY:n,positions:r}){let o=t*Jd,s=As(e),a=new Map(e.nodes.map(p=>[p.id,p])),i=[];for(let p of s){let u=p.refSpan-p.pathLength;u>=Qd&&i.push({nodeIds:p.nodeIds,bp:u});let l=Math.max(p.refSpan,o),f=p.pathLength>0?l/p.pathLength:0;p.nodeIds.forEach((m,h)=>{let b=a.get(m);if(b){let g=p.nodeOffsets[h],y=l/p.nodeIds.length,w=S=>p.start+S*f,M=n(b);r[m]=f?[{x:w(g),y:M},{x:w(g+b.length),y:M}]:[{x:p.start+h*y,y:M},{x:p.start+(h+1)*y,y:M}]}})}let c=he(e),d=Object.keys(r);for(let p of d){let u=r[p].at(-1).x;for(let l of c.get(p)??[]){let f=a.get(l);if(f&&!(l in r)){let m=n(f);r[l]=[{x:u,y:m},{x:u+o,y:m}],d.push(l)}}}return i}function eu(e){let t=new Set;for(let n of e.nodes)n.stable&&t.add(n.stable.rank);return new Map([...t].sort((n,r)=>n-r).map((n,r)=>[n,r]))}function ks(e,t){let n=Le(e);if(n.length===0)return;let r=Tt(n,t),o=eu(e),s=Ve(n),a=jt({graph:e,span:r,rowY:c=>(c.stable?o.get(c.stable.rank)??o.size:o.size)*20,positions:s}),i=[...o].map(([c,d])=>({label:c===0?"Reference (rank 0)":`Rank ${c}`,y:d*20}));return{nodePositions:s,rowLabels:i,referenceAxis:!0,pixelRows:!0,alleleDeletions:a}}var tu=12,Zn=20;function Ts(e){return 10+8*Math.log2(1+e.length)}function ke(e,t){return e<t?-1:e>t?1:0}function Cs(e,t){return ke(e.at,t.at)||ke(e.side,t.side)||ke(e.hops,t.hops)}var vs={at:1/0,side:0,hops:0};function Qn(e){let t=new Map(e.nodes.map(r=>[r.id,r])),n=ou(e);return e.nodes.map(r=>r.id).sort((r,o)=>Cs(n.get(r)??vs,n.get(o)??vs)||ke(t.get(r).name,t.get(o).name)||ke(r,o))}function nu(e,t){let n=new Set(e.nodes.map(p=>p.id)),r=new Map(t.map(p=>[p.id,p.stable.start])),o=new Map,s=new Map;t.forEach((p,u)=>{s.set(p.id,t[u-1]?.id),o.set(p.id,t[u+1]?.id)});let a=t[0]?.id,i=(p,u)=>{let l=o.get(p);o.set(p,u),s.set(u,p),o.set(u,l),l!==void 0&&s.set(l,u)},c=(p,u)=>{let l=s.get(p);l===void 0?(a=u,s.set(u,void 0),o.set(u,p),s.set(p,u)):i(l,u)};for(let p of e.paths??[]){let u=0,l=0,f;for(let g of p.nodeIds){let y=r.get(g);y!==void 0&&(f!==void 0&&y!==f&&(y>f?u++:l++),f=y)}let m=l>u?[...p.nodeIds].reverse():p.nodeIds,h,b=new Set;for(let g of m)if(o.has(g)){if(h===void 0)for(let y of b)c(g,y);h=g}else n.has(g)&&(h===void 0?b.add(g):(i(h,g),h=g))}let d=[];for(let p=a;p!==void 0;p=o.get(p))d.push(p);return d}function ru(e,t){let n=[...t.entries()].sort(([a,i],[c,d])=>Cs(i,d)||ke(a,c)).map(([a])=>a),r=n.length;for(let a of n){let i=t.get(a);for(let c of e.get(a)??[])t.has(c)||(t.set(c,{at:i.at,side:1,hops:i.hops+1}),n.push(c))}let o=new Set(n.slice(r)),s=new Set;for(let a of o){if(s.has(a))continue;let{at:i}=t.get(a),c=[a];s.add(a);let d=!0;for(let p of c){let{hops:u}=t.get(p),l=!0,f=!1;for(let m of e.get(p)??[]){let h=t.get(m);h.at===i&&o.has(m)?(l&&=h.hops<=u,s.has(m)||(s.add(m),c.push(m))):h.at!==i&&(f||=h.at<i,d&&=h.at<i)}d&&=!l||f}if(d)for(let p of c){let u=t.get(p);t.set(p,{...u,side:-1,hops:-u.hops})}}}function ou(e){let t=new Set(e.nodes.map(s=>s.id)),n=new Map;for(let s of e.edges)!t.has(s.from)||!t.has(s.to)||((n.get(s.from)??n.set(s.from,[]).get(s.from)).push(s.to),(n.get(s.to)??n.set(s.to,[]).get(s.to)).push(s.from));let r=e.nodes.filter(v).sort((s,a)=>ke(s.stable.start,a.stable.start)||ke(s.name,a.name)),o=new Map;return nu(e,r).forEach((s,a)=>{o.set(s,{at:a,side:0,hops:0})}),ru(n,o),o}function su(e){let t=new Map(e.nodes.map(u=>[u.id,u])),n=Qn(e),r=new Map(n.map((u,l)=>[u,l])),o=u=>v(t.get(u)),s=new Map(n.map(u=>[u,[]])),a=new Map(n.map(u=>[u,[]])),i=(u,l)=>{s.get(l).push(u),a.get(u).push(l)};for(let u of e.edges)u.from===u.to||!r.has(u.from)||!r.has(u.to)||(r.get(u.from)<r.get(u.to)?i(u.from,u.to):i(u.to,u.from));let c=n.filter(o);for(let u=1;u<c.length;u++)i(c[u-1],c[u]);let d=new Map;for(let u of n){let l=0;for(let f of s.get(u))l=Math.max(l,d.get(f)+1);d.set(u,l)}for(let u=n.length-1;u>=0;u--){let l=n[u],f=a.get(l);if(o(l)||f.length===0)continue;let m=1/0;for(let g of f)m=Math.min(m,d.get(g));let h=d.get(l),b=Math.max(h,m-1);d.set(l,Math.floor((h+b)/2))}let p=[];for(let u of n)(p[d.get(u)]??=[]).push(u);return{layers:p,layerOf:d,preds:s}}function Is(e){if(!e.nodes.some(v))return;let t=new Map(e.nodes.map(u=>[u.id,u])),n=u=>v(t.get(u)),{layers:r,layerOf:o,preds:s}=su(e),a=r.map(u=>{let l=0;for(let f of u)l=Math.max(l,Ts(t.get(f)));return l}),i=[],c=0;for(let u=0;u<r.length;u++)i[u]=c,c+=a[u]+tu;let d=new Map;for(let u of r){let l=[];for(let m of u){if(n(m)){d.set(m,0);continue}let h=s.get(m).filter(g=>d.has(g)),b=0;for(let g of h)b+=d.get(g)/h.length;l.push({id:m,ideal:b===0?Zn:b})}l.sort((m,h)=>m.ideal-h.ideal);let f=new Set([0]);for(let{id:m,ideal:h}of l){let b=Math.round(h/Zn);b===0&&(b=h>=0?1:-1);for(let g=1;f.has(b);g++)f.has(b+g)?f.has(b-g)||(b-=g):b+=g;f.add(b),d.set(m,b*Zn)}}let p={};for(let u of e.nodes){let l=o.get(u.id),f=Ts(u),m=i[l]+a[l]/2,h=d.get(u.id);p[u.id]=[{x:m-f/2,y:h},{x:m+f/2,y:h}]}return{nodePositions:p,referenceAxis:!1,pixelRows:!0}}function au(e,t){let n=new Map;for(let o of e.nodes)if(At(o)){let{sample:s}=zt(o.stable.refName);n.set(s,(n.get(s)??0)+o.length)}let r=new Map(t.map((o,s)=>[o,s]));return[...n.keys()].sort((o,s)=>(r.get(o)??1/0)-(r.get(s)??1/0)||n.get(s)-n.get(o)||o.localeCompare(s))}function Ps(e,t,n=[]){let r=Le(e),o=au(e,n);if(r.length===0||o.length===0)return;let s=Tt(r,t),a=new Map(o.map((l,f)=>[l,f+1])),i=Ve(r),c=o.length+1,d=jt({graph:e,span:s,rowY:l=>{let f=l.stable;return((f?a.get(zt(f.refName).sample):void 0)??c)*20},positions:i}),u=[{label:zt(r[0].stable.refName).sample,y:0},...o.map(l=>({label:l,y:a.get(l)*20}))];return{nodePositions:i,rowLabels:u,sampleRows:o,referenceAxis:!0,pixelRows:!0,alleleDeletions:d}}function Jn(){return{rectangles:[],curves:[],corners:[],verticalRectangles:[],featureRectangles:[]}}var ft=!1,Gs=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f"];function Ks(e){return{mergeNodesFlag:e.mergeNodes??!0,showReads:e.showReads??!0,coarsenedReadView:e.coarsenedReadView??!1,ignoreStrand:e.ignoreStrand??!1,nodeWidthOption:e.nodeWidthOption??"normal",charWidth:e.charWidth??8.401,trackWidth:e.trackWidth??15,mappingQualityCutoff:e.mappingQualityCutoff??0,focusReadNames:e.focusReadNames??null,showExonsFlag:e.showExons??!1,trackColor:e.trackColor??(t=>Gs[t.id%Gs.length]),trackAlpha:e.trackAlpha??(()=>1)}}var W=Ks({}),or=null,N=[],A=[],C=[],O=new Map,Qe=[],G=[],_e=[],ar=[],ir=[],de=-1,Z=Jn(),sr={minX:0,maxX:0,minY:0,maxY:0},lt,Ut=new Map;function Zs(e,t,n=[],r={}){if(W=Ks(r),or=r.bed??null,Z=Jn(),_e=[],ar=[],ir=[],Qe=[],sr={minX:0,maxX:0,minY:0,maxY:0},lt=void 0,Ut=new Map,e.length===0||t.length===0)return;let o=er(e);N=[],o.forEach((c,d)=>{N[d+1]=c}),A=er(t);let s=n.length>0;C=er(zu(n));for(let c=A.length-1;c>=0;c-=1){let d=A[c];if(d.type===void 0&&(d.type="haplotype"),d.hidden===!0){A.splice(c,1);continue}d.indexOfFirstBase!==void 0&&(lt=d.name)}if(A.length===0)return;cu(0),O=Os(),Ke(A),W.showReads&&C.length>0&&Ke(C),Us(),W.mergeNodesFlag&&(Fs(),nr(),W.showReads&&C.length>0&&tr(),Vu(),O=Os(),Us(),Ke(A),W.showReads&&C.length>0&&Ke(C)),Fs(),Tu(),ft&&console.log(`${N.length} nodes.`),nr(),de=Ws(),vu(),nr(),de=Ws();let a=W.showReads&&W.coarsenedReadView&&!s;if(a){let c=lt===void 0?-1:A.findIndex(u=>u.name===lt),d=c===-1?0:c,p=A.filter((u,l)=>l!==d);if(p.length>0){let u=qs(p,"haplotype");u.length>0&&(A=[A[d]],C=u)}}Wu(),Gu(),W.showExonsFlag&&or!==null&&Du();let i=W.showReads&&W.coarsenedReadView&&C.length>0&&!a;return W.showReads&&C.length>0?(du(),tr(),Ke(C),i&&(C=qs(C,"read"),tr(),Ke(C)),lu(),A=A.concat(C)):N.forEach(c=>{c&&(c.incomingReads=[],c.outgoingReads=[],c.internalReads=[])}),Iu(),Xu(),ft&&(console.log("Tracks:"),console.log(A),console.log("Nodes:"),console.log(N),console.log("Lane assignment:"),console.log(_e)),Ru(),{nodes:N,tracks:A,reads:C,nodeMap:O,shapes:Z,bounds:sr,maxOrder:de,trackForRuler:lt,coarsenedEdgeMeta:Ut}}function Ze(e,t="plain"){return W.trackColor(e,t)}function iu(e){return W.trackAlpha(e)}function er(e){return structuredClone(e)}function se(e){let t=String(e);return t.length>=1&&t.startsWith("-")}function Y(e){return se(e)?String(e).substring(1):e}function Te(e){return se(e)?e:`-${e}`}function Qs(e){return se(e)?Y(e):Te(e)}function Kt(e){return(e||1/e)>=0}function cu(e){let t=new Set,n=A[e].sequence;for(let r=0;r<n.length;r+=1){let o=n[r];if(se(o)){let s=Y(o),a=n.indexOf(s);(a===-1||a>r)&&t.add(s)}}for(let r of A){n=r.sequence;for(let o=0;o<n.length;o+=1){let s=n[o];se(s)?t.has(Y(s))&&(n[o]=Y(s)):t.has(s)&&(n[o]=Te(s))}}N.forEach(r=>{r&&t.has(r.name)&&(r.seq=r.seq.split("").reverse().join(""))})}function du(){Qe=[];for(let t=0;t<=de;t+=1)Qe[t]=[];let e=new Map;N.forEach(t=>{t.y!==void 0&&Bs(e,t.order,t.y+t.contentHeight)}),A.forEach(t=>{t.type==="haplotype"&&t.path.forEach(n=>{Bs(e,n.order,(n.y??0)+t.width)})}),N.forEach((t,n)=>{t.order>=0&&t.y===void 0&&(t.y=(e.get(t.order)??0)+25,t.contentHeight=0,Qe[t.order].push(n))})}function Bs(e,t,n){let r=e.get(t);r===void 0?e.set(t,n):e.set(t,Math.max(r,n))}var Zt=7;function uu(){N.forEach(e=>{e&&(e.incomingReads=[],e.outgoingReads=[],e.internalReads=[])}),C.forEach((e,t)=>{if((e.width===void 0||e.width===0)&&(e.width=Zt),e.path.length===1){let n=e.path[0].node;n!==null&&N[n].internalReads.push(t)}else e.path.forEach((n,r)=>{if(r===0){let o=e.path[0].node;o!==null&&N[o].outgoingReads.push([t,r])}else{let o=n.node;o!==null&&N[o].incomingReads.push([t,r])}})})}function lu(){xu(),uu();let e=N.slice();e.sort(Qt);let t=new Map;for(let a=0;a<C.length;a++){let i=C[a].sourceTrackID,c=t.get(i);c===void 0?t.set(i,[a]):c.push(a)}let n=Array.from(t.keys()).sort((a,i)=>a-i),r=n.length>1?Zt:0;e.forEach(a=>{if(a)for(let i of n)pu(t.get(i),a,r)});let o=yu(),s=[];C.forEach((a,i)=>{let c=a.path.length,d=new Array(c),p;for(let f=0;f<c;f++){f===0?d[f]=void 0:d[f]=p??a.path[0];let m=a.path[f];m.node!==null&&m.node&&(p=m)}let u=new Array(c),l;for(let f=c-1;f>=0;f--){f===c-1?u[f]=void 0:u[f]=l??a.path[c-1];let m=a.path[f];m.node!==null&&m.node&&(l=m)}a.path.forEach((f,m)=>{if(f.y===void 0){let h=d[m],b=u[m],g=!!(b&&h&&b.isForward!==void 0&&h.isForward!==void 0&&(h.order>b.order||b.order===h.order&&b.isForward===h.isForward));f.betweenCycleReverseTraversal=g,s.push({readIndex:i,pathIndex:m,previousY:h?.y,previousNode:h?.node})}})}),s.sort(mu),s.forEach(a=>{let i=C[a.readIndex],c=i.path[a.pathIndex];c.y=o[c.order],o[c.order]+=i.width}),ft&&(console.log("Reads:"),console.log(C))}function pu(e,t,n){let r=new Set(e),o=t.incomingReads.filter(([m])=>r.has(m)),s=t.outgoingReads.filter(([m])=>r.has(m)),a=t.internalReads.filter(m=>r.has(m));o.length===0&&s.length===0&&a.length===0&&(n=0);let i=t.y+t.contentHeight+n*2,c=o.map(m=>{let[h,b]=m,g=C[h].path,y=b+1,w;for(let M=1;M<=b;M++){let S=g[b-M]?.y;if(S!==void 0){y=M,w=S;break}}return{entry:m,decisionStep:y,y:w}});c.sort(fu),o=c.map(m=>m.entry);let d=i,p=new Map;o.forEach(m=>{let h=C[m[0]];h.path[m[1]].y=d,_s(p,h,m[1],d,t),d+=h.width});let u=d;s.sort(hu);let l=new Map;d=i,s.forEach(m=>{let h=C[m[0]],b=h.firstNodeOffset??0;h.path[m[1]].y=d,l.set(d,b);let g=p.get(d);g===void 0||g+1<=b?(d+=h.width,u=Math.max(u,d)):(p.set(d,0),o.forEach(y=>{let w=C[y[0]],M=w.path[y[1]];M.y!==void 0&&M.y>=d&&(M.y+=h.width,_s(p,w,y[1],M.y,t))}),d+=h.width,u+=h.width)}),a.sort(bu),a.forEach(m=>{let h=C[m],b=h.firstNodeOffset??0,g=h.finalNodeCoverLength??0;for(d=i;b<(p.get(d)??-1/0)+2||g>(l.get(d)??1/0)-3;)d+=h.width||Zt;h.path[0].y=d,p.set(d,g),u=Math.max(u,d)});let f=u-t.y-t.contentHeight;t.contentHeight+=f,Fu(t,f)}function fu(e,t){return e.decisionStep!==t.decisionStep?e.decisionStep-t.decisionStep:e.y===void 0||t.y===void 0?(e.y===void 0?0:1)-(t.y===void 0?0:1):e.y-t.y}function _s(e,t,n,r,o){n===t.path.length-1?e.set(r,t.finalNodeCoverLength??0):e.set(r,o.sequenceLength)}function mu(e,t){let n=C[e.readIndex],r=C[t.readIndex],o=n.path[e.pathIndex],s=r.path[t.pathIndex];if(o.order!==s.order)return o.order-s.order;if(n.sourceTrackID!==r.sourceTrackID)return n.sourceTrackID-r.sourceTrackID;if(e.previousNode&&t.previousNode){let c=N[e.previousNode],d=N[t.previousNode];if(c&&d&&c.order!==d.order)return c.order-d.order}let a=e.previousY??0,i=t.previousY??0;return o.betweenCycleReverseTraversal&&s.betweenCycleReverseTraversal?i-a:a-i}function hu([e,t],[n,r]){let o=C[e],s=C[n],a,i,c=o.path.length-1,d=s.path.length-1;for(;!a&&c>=0;)a=o.path[c]?.y,c-=1;for(;!i&&d>=0;)i=s.path[d]?.y,d-=1;if(a&&i)return a-i;let p=o.path[t]?.node,u=s.path[r]?.node,l=p!=null?N[p]:null,f=u!=null?N[u]:null;for(;l!=null&&f!=null&&l===f;){if(t<o.path.length-1){for(t+=1;o.path[t]?.node===null;)t+=1;let h=o.path[t]?.node;l=h!=null?N[h]:null}else l=null;if(r<s.path.length-1){for(r+=1;s.path[r]?.node===null;)r+=1;let h=s.path[r]?.node;f=h!=null?N[h]:null}else f=null}if(l!=null)return f!=null?Qt(l,f):1;if(f!=null)return-1;let m=(o.firstNodeOffset??0)-(s.firstNodeOffset??0);return m!==0?m:(o.finalNodeCoverLength??0)-(s.finalNodeCoverLength??0)}function gu(e,t){if(e.path===void 0||t.path===void 0)return(e.path===void 0?0:1)-(t.path===void 0?0:1);let n=e.path,r=t.path,o=0,s=0;for(;o<n.length&&s<r.length;){let a=n[o],i=r[s],c=a.order,d=i.order;if(c===d&&a.node&&i.node)return(i.y??0)-(a.y??0);c<d?o+=1:(c>d||(o+=1),s+=1)}return 0}function bu(e,t){let n=C[e],r=C[t],o=n.firstNodeOffset??0,s=r.firstNodeOffset??0;if(o<s)return-1;if(o>s)return 1;let a=n.finalNodeCoverLength??0,i=r.finalNodeCoverLength??0;return a<i?-1:a>i?1:0}function yu(){let e=[];for(let t=0;t<=de;t+=1)e.push(0);return N.forEach(t=>{t.y!==void 0&&(e[t.order]=Math.max(e[t.order],t.y+t.contentHeight+20))}),A.forEach(t=>{t.path.forEach(n=>{e[n.order]=Math.max(e[n.order],(n.y??0)+t.width)})}),e}function xu(){C.forEach(e=>{let t=Math.abs(e.indexSequence[0]),n=Kt(e.indexSequence[0]),r=N[t],o,s;e.path=[],e.path.push({order:r.order,isForward:n,node:t});for(let a=1;a<e.sequence.length;a+=1)if(o=r,s=n,t=Math.abs(e.indexSequence[a]),n=Kt(e.indexSequence[a]),r=N[t],r.order>o.order){s||e.path.push({order:o.order,isForward:!0,node:null});for(let i=o.order+1;i<r.order;i+=1)e.path.push({order:i,isForward:!0,node:null});n?e.path.push({order:r.order,isForward:!0,node:t}):(e.path.push({order:r.order,isForward:!0,node:null}),e.path.push({order:r.order,isForward:!1,node:t}))}else if(r.order<o.order){s&&e.path.push({order:o.order,isForward:!1,node:null});for(let i=o.order-1;i>r.order;i-=1)e.path.push({order:i,isForward:!1,node:null});n?(e.path.push({order:r.order,isForward:!1,node:null}),e.path.push({order:r.order,isForward:!0,node:t})):e.path.push({order:r.order,isForward:!1,node:t})}else n!==s?e.path.push({order:r.order,isForward:n,node:t}):(e.path.push({order:r.order,isForward:!n,node:null}),e.path.push({order:r.order,isForward:n,node:t}))})}function tr(){C.forEach(e=>{let t=0;for(;t<e.sequence.length&&e.sequence[t].startsWith("-");)t+=1;if(t===e.sequence.length){e.is_reverse=!0,e.sequence=e.sequence.reverse();for(let a=0;a<e.sequence.length;a+=1)e.sequence[a]=Y(e.sequence[a]);let n=e.sequenceNew??[];n.reverse(),e.sequenceNew=n;for(let a of n)a.nodeName=Y(a.nodeName),wu(a.mismatches,ge(a.nodeName).sequenceLength);let r=e.firstNodeOffset??0,o=ge(e.sequence[0]).sequenceLength;e.firstNodeOffset=o-(e.finalNodeCoverLength??0);let s=ge(e.sequence[e.sequence.length-1]).sequenceLength;e.finalNodeCoverLength=s-r}})}function wu(e,t){e.forEach(n=>{n.type==="insertion"?n.pos=t-n.pos:n.type==="deletion"?n.pos=t-n.pos-(n.length??0):n.type==="substitution"&&(n.pos=t-n.pos-(n.seq?.length??0)),n.seq!==void 0&&(n.seq=Js(n.seq).split("").reverse().join(""))})}var Mu={A:"T",T:"A",C:"G",G:"C"};function Js(e){let t="";for(let n=e.length-1;n>=0;n-=1)t+=Mu[e.charAt(n)]??"N";return t}function Ke(e){e.forEach(t=>{t.indexSequence=[],t.sequence.forEach(n=>{let r=n,o=O.get(Y(r)),s=N[o]?.switched??!1;s&&(r=Qs(r));let a=O.get(Y(r));if(a===0)throw new Error("Node "+Y(r)+" has prohibited index 0");se(r)!==s?t.indexSequence.push(-a):t.indexSequence.push(a)})})}var Su=20;function Ru(){let e={minX:99,maxX:-99,minY:99,maxY:-99};N.forEach(t=>{t&&(t.x!==void 0&&(e.minX=Math.min(e.minX,t.x),e.maxX=Math.max(e.maxX,t.x+Su+t.pixelWidth)),t.y!==void 0&&(e.minY=Math.min(e.minY,t.y-10),e.maxY=Math.max(e.maxY,t.y+t.contentHeight+10)))}),A.forEach(t=>{t.path.forEach(n=>{let r=n.y??0;e.maxY=Math.max(e.maxY,r+t.width),e.minY=Math.min(e.minY,r)})}),sr=e}function ge(e){let t=O.get(Y(e)),n=t===void 0?void 0:N[t];if(n===void 0)throw new Error(`Unknown node ${e}`);return n}function Os(){return O=new Map,N.forEach((e,t)=>{e&&O.set(e.name,t)}),O}function Fs(){let e=N.map(()=>new Set),t=N.map(()=>new Set),n=r=>{for(let o=0;o<r.indexSequence.length-1;o+=1){let s=Math.abs(r.indexSequence[o]),a=Math.abs(r.indexSequence[o+1]);e[s].add(a),t[a].add(s)}};A.forEach(n),W.showReads&&C.length>0&&C.forEach(n),N.forEach((r,o)=>{r&&(r.successors=Array.from(e[o]),r.predecessors=Array.from(t[o]))})}function Ds(e){let t=0,n=0,r=0;e.forEach(o=>{let s=Math.abs(o);if(o<0){G[s]===void 0&&(G[s]=n);let a=G[s];a<r&&(r=a),t=a,n=a-1}else{G[s]===void 0&&(G[s]=t);let a=G[s];t=a+1,n=a}}),r<0&&cr(-r)}function Lu(e){let t=0,n=0;for(;t<e.length&&G[Math.abs(e[t])]===void 0;)t+=1;if(t>=e.length)return null;let r=e[t],o,s;r>=0?(o=G[r]-1,s=-1):(o=G[-r]+1,s=1);for(let a=t-1;a>=0;a-=1){let i=Math.abs(e[a]);G[i]===void 0&&(G[i]=o,n=Math.min(n,o),o+=s)}return n<0&&cr(-n),t}var Nu=-1;function Eu(e){let t=[];for(let n of e)t.push(n??Nu);return t}function nr(){let e,t,n,r,o=0,s=W.showReads&&C.length>0?A.concat(C):A,a={stamp:new Int32Array(N.length),generation:0};G=new Array(N.length).fill(void 0),N.forEach(c=>{c&&(c.order=void 0)}),Ds(A[0].indexSequence);for(let c=1;c<s.length;c+=1){if(ft&&console.log(`generating order for track ${c+1}`),n=Lu(s[c].indexSequence),n===null){s[c].type==="haplotype"?Ds(s[c].indexSequence):(s.splice(c,1),C.splice(c-A.length,1),c-=1);continue}for(e=ku(s[c].indexSequence);n<e.length;){for(r=n,n+=1;n<e.length&&G[e[n]]===void 0;)n+=1;if(n<e.length){t=G[e[r]]+1;for(let d=r+1;d<n;d+=1)G[e[d]]=t,t+=1;if(G[e[n]]>G[e[r]])G[e[n]]<t&&$s(e[n],e[n-1],t);else if(s[c].indexSequence[n]>=0&&!Au(e[n],e[r],a))$s(e[n],e[n-1],t);else if(s[c].indexSequence[r]<0||N[e[r+1]].degree<2&&G[e[n]]<G[e[r]]){t=G[e[r]]-1;for(let d=r+1;d<n;d+=1)G[e[d]]=t,o=Math.min(o,t),t-=1}}else if(s[c].indexSequence[r]>=0){t=G[e[r]]+1;for(let d=r+1;d<e.length;d+=1){let p=e[d];G[p]===void 0&&(G[p]=t,t+=1)}}else{t=G[e[r]]-1;for(let d=r+1;d<e.length;d+=1){let p=e[d];G[p]===void 0&&(G[p]=t,o=Math.min(o,t),t-=1)}}}}o<0&&cr(-o);let i=Eu(G);G=i,i.forEach((c,d)=>{let p=N[d];p!==void 0&&(p.order=c)})}function Au(e,t,n){n.generation+=1;let{stamp:r,generation:o}=n,s=[e];for(r[e]=o;s.length>0;){let a=s.pop();if(a===t)return!0;for(let i of N[a].successors)r[i]!==o&&(r[i]=o,s.push(i))}return!1}function Ws(){let e=-1;return G.forEach(t=>{t!==void 0&&t>e&&(e=t)}),e}function ku(e){return e.map(t=>Math.abs(t))}function cr(e){G.forEach((t,n)=>{t!==void 0&&(G[n]=t+e)})}function $s(e,t,n){let r=new Map,o=[[e,n]],s=0;for(;s<o.length;){let[a,i]=o[s];s+=1;let c=G[a];c!==void 0&&c<i&&(!r.has(a)||r.get(a)<i)&&(r.set(a,i),N[a].successors.forEach(d=>{G[d]>c&&d!==t&&o.push([d,i+1])}),a!==e&&N[a].predecessors.forEach(d=>{G[d]>c&&d!==t&&o.push([d,i+1])}))}r.forEach((a,i)=>{G[i]=a})}function Tu(){N.forEach(e=>{e.tracks=[]}),A.forEach(e=>{e.indexSequence.forEach(t=>{N[Math.abs(t)].tracks.push(e.id)})}),N.forEach(e=>{e.tracks!==void 0&&(e.degree=e.tracks.length)})}function vu(){let e=A[0],t=A.slice(1,A.length);if(W.showReads&&C.length>0&&(t=t.concat(C)),Cu(t,e),W.showReads&&C.length>0){for(let n=0;n<C.length;n++)if(C[n]!==t[n+A.length-1])throw new Error("Read inequality")}}function Cu(e,t){let n=new Map,r=t?new Set(t.sequence):null;for(let o of e){let s=o.sequence;for(let a=0;a<s.length;a+=1){let i=Y(s[a]),c=ge(i);if(r&&!r.has(i)){let d=a>0?ge(s[a-1]).order:void 0,p=a<s.length-1?ge(s[a+1]).order:void 0;(d===void 0||d<c.order)&&(p===void 0||c.order<p)&&Hs(n,i,se(s[a])?1:-1),(d===void 0||d>c.order)&&(p===void 0||c.order>p)&&Hs(n,i,se(s[a])?-1:1)}}}for(let o of e)o.sequence.forEach((s,a)=>{let i=n.get(Y(s));i!==void 0&&i>0&&(o.sequence[a]=Qs(s),o.indexSequence[a]=-o.indexSequence[a])});n.forEach((o,s)=>{if(o>0){let a=ge(s);a.seq=Js(a.seq),a.switched=!0}})}function Hs(e,t,n){e.set(t,(e.get(t)??0)+n)}function Iu(){let e=0,t=20,n=-1,r=N.slice();r.sort(Qt);let o=Pu();r.forEach(s=>{s.order>=0&&(s.order>n&&(n=s.order,e=t+10*o[s.order]),s.x=e,t=Math.max(t,e+40+s.pixelWidth))})}function Pu(){let e=[],t=[],n=[],r=[];for(let o=0;o<=de;o+=1)e.push(0),t.push(0),n.push(0);A.forEach(o=>{for(let s=1;s<o.path.length;s+=1){let a=o.path[s],i=o.path[s-1];if(a.order===i.order)a.isForward?e[a.order]=e[a.order]+1:t[a.order]=t[a.order]+1;else{let c=Math.abs((a.y??0)-(i.y??0));n[a.order]=Math.max(c/17.5,n[a.order])}}}),r.push(Math.max(0,e[0]-1));for(let o=1;o<=de;o+=1)r.push(Math.max(Math.max(0,e[o]-1)+Math.max(0,t[o-1]-1),n[o]));return r}function Gu(){let e,t,n,r,o,s,a=[],i=[];for(let c=0;c<=de;c+=1){_e[c]=[],i[c]=new Map,a[c]=[];for(let d=0;d<A.length;d+=1)a[c][d]=null}A.forEach((c,d)=>{t=Math.abs(c.indexSequence[0]),n=Kt(c.indexSequence[0]),r=N[t],c.path=[],c.path.push({order:r.order,lane:null,isForward:n,node:t}),re(r.order,t,d,0,a,i),e=1;for(let p=1;p<c.sequence.length;p+=1)if(o=r,s=n,t=Math.abs(c.indexSequence[p]),n=Kt(c.indexSequence[p]),r=N[t],r.order>o.order){s||(c.path.push({order:o.order,lane:null,isForward:!0,node:null}),re(o.order,null,d,e,a,i),e+=1);for(let u=o.order+1;u<r.order;u+=1)c.path.push({order:u,lane:null,isForward:!0,node:null}),re(u,null,d,e,a,i),e+=1;n?(c.path.push({order:r.order,lane:null,isForward:!0,node:t}),re(r.order,t,d,e,a,i),e+=1):(c.path.push({order:r.order,lane:null,isForward:!0,node:null}),re(r.order,null,d,e,a,i),e+=1,c.path.push({order:r.order,lane:null,isForward:!1,node:t}),re(r.order,t,d,e,a,i),e+=1)}else if(r.order<o.order){s&&(c.path.push({order:o.order,lane:null,isForward:!1,node:null}),re(o.order,null,d,e,a,i),e+=1);for(let u=o.order-1;u>r.order;u-=1)c.path.push({order:u,lane:null,isForward:!1,node:null}),re(u,null,d,e,a,i),e+=1;n?(c.path.push({order:r.order,lane:null,isForward:!1,node:null}),re(r.order,null,d,e,a,i),e+=1,c.path.push({order:r.order,lane:null,isForward:!0,node:t}),re(r.order,t,d,e,a,i),e+=1):(c.path.push({order:r.order,lane:null,isForward:!1,node:t}),re(r.order,t,d,e,a,i),e+=1)}else n!==s?(c.path.push({order:r.order,lane:null,isForward:n,node:t}),re(r.order,t,d,e,a,i),e+=1):(c.path.push({order:r.order,lane:null,isForward:!n,node:null}),re(r.order,null,d,e,a,i),e+=1,c.path.push({order:r.order,lane:null,isForward:n,node:t}),re(r.order,t,d,e,a,i),e+=1)});for(let c=0;c<=de;c+=1)_u(_e[c],c)}function re(e,t,n,r,o,s){let a={trackID:n,segmentID:r,compareToFromSame:o[e][n]??null},i=t===null?void 0:s[e].get(t);if(i===void 0){let c={type:"single",node:t,tracks:[a]};_e[e].push(c),t!==null&&s[e].set(t,c)}else i.type="multiple",i.tracks.push(a);o[e][n]=a}function Bu(e,t){let n;e.forEach(r=>{r.idealLane=0,r.tracks.forEach(o=>{if(o.segmentID===0)o.idealLane=o.trackID,o.idealY=null;else if(A[o.trackID].path[o.segmentID-1].order===t-1)o.idealLane=A[o.trackID].path[o.segmentID-1].lane??void 0,o.idealY=A[o.trackID].path[o.segmentID-1].y;else if(o.segmentID<A[o.trackID].path.length-1&&A[o.trackID].path[o.segmentID+1].order===t-1)o.idealLane=A[o.trackID].path[o.segmentID+1].lane??void 0,o.idealY=A[o.trackID].path[o.segmentID+1].y;else{for(n=o.segmentID-1;n>=0&&A[o.trackID].path[n].order!==t-1;)n-=1;n<0?(o.idealLane=o.trackID,o.idealY=null):(o.idealLane=A[o.trackID].path[n].lane??void 0,o.idealY=A[o.trackID].path[n].y)}r.idealLane+=o.idealLane}),r.idealLane/=r.tracks.length})}function _u(e,t){let n=0,r=new Set,o=20,s=!1,a=-1;Bu(e,t),e.sort(Ys),e.forEach(i=>{i.node!==null?(N[i.node].topLane=n,s&&(o-=10),N[i.node].y=o,N[i.node].contentHeight=0,s=!1):(s?o-=25:o>20&&(o-=10),s=!0),i.tracks.sort(Ys),i.tracks.forEach(c=>{c.lane=n,c.trackID===a&&i.node===null&&s&&(o+=10),A[c.trackID].path[c.segmentID].lane=n,A[c.trackID].path[c.segmentID].y=o,c.idealY!=null&&r.add(c.idealY-o),n+=1,o+=A[c.trackID].width,i.node!==null&&(N[i.node].contentHeight+=A[c.trackID].width),a=c.trackID}),o+=25}),Ou(e,r)}function Ou(e,t){let n=0,r=Number.MAX_SAFE_INTEGER;t.forEach(o=>{Xs(e,o)<r&&(r=Xs(e,o),n=o)}),e.forEach(o=>{o.node!==null&&(N[o.node].y+=n),o.tracks.forEach(s=>{let a=A[s.trackID].path[s.segmentID];a.y=a.y+n})})}function Fu(e,t){e.order<0||_e[e.order]===void 0||(_e[e.order].forEach(n=>{if(n.node!==null){let r=N[n.node];r!==e&&r.y>e.y&&(r.y+=t,n.tracks.forEach(o=>{let s=A[o.trackID].path[o.segmentID];s.y=s.y+t}))}else n.tracks.forEach(r=>{let o=A[r.trackID].path[r.segmentID];o.y>=e.y&&(o.y=o.y+t)})}),Qe[e.order].length>0&&Qe[e.order].forEach(n=>{N[n]!==e&&N[n].y>e.y&&(N[n].y+=t)}))}function Xs(e,t){let n=0;return e.forEach(r=>{r.tracks.forEach(o=>{o.idealY!=null&&A[o.trackID].type!=="read"&&(n+=Math.abs(o.idealY-t-A[o.trackID].path[o.segmentID].y)*A[o.trackID].width)})}),n}function Ys(e,t){return e.idealLane!==void 0?t.idealLane!==void 0?e.idealLane<t.idealLane?-1:e.idealLane>t.idealLane?1:0:-1:t.idealLane!==void 0?1:0}function Qt(e,t){if(!e)return t?-1:0;if(!t)return 1;if(e.order!==void 0){if(t.order!==void 0){if(e.order<t.order)return-1;if(e.order>t.order)return 1;if(e.y!==void 0&&t.y!==void 0){if(e.y<t.y)return-1;if(e.y>t.y)return 1}return 0}return-1}return t.order!==void 0?1:0}function Du(){let e,t,n={};or.forEach(r=>{let o=0;for(;o<A.length&&A[o].name!==r.track;)o+=1;o<A.length&&(e=0,A[o].path.forEach(s=>{s.node!==null&&(n={},t=e+N[s.node].sequenceLength-1,e>=r.start&&e<=r.end&&(n.start=0),e<r.start&&t>=r.start&&(n.start=r.start-e),t<=r.end&&t>=r.start&&(n.end=t-e,t<r.end&&(n.continue=!0)),t>r.end&&e<=r.end&&(n.end=r.end-e),n.start!==void 0&&(n.type=r.type,n.name=r.name,s.features===void 0&&(s.features=[]),s.features.push(n)),e=t+1)}))})}function Wu(){let e=!0,t=4,n=W.trackWidth;A.forEach(r=>{r.freq!==void 0?r.width=Math.round((Math.log(r.freq)+1)*t):(r.width=n,r.type!==void 0&&r.type==="read"&&(r.width=t)),r.width!==t&&(e=!1)}),e&&A.forEach(r=>{r.freq!==void 0&&(r.width=n)})}function $u(e){let t=e.path[0],n=N[t.node],r=e.firstNodeOffset??0;return dr(n,t.isForward?r:n.sequenceLength-r)}function Hu(e){let t=e.path[e.path.length-1],n=N[t.node],r=e.finalNodeCoverLength??0;return dr(n,t.isForward?r:n.sequenceLength-r)}function ea(e,t){return t>e.sequenceLength?null:dr(e,t)}function dr(e,t){let[n,r]=qu(e);if(e.sequenceLength===0)return n;let o=Math.min(Math.max(t,0),e.sequenceLength);return n+o/e.sequenceLength*(r-n)}function Xu(){let e,t,n,r,o,s,a,i,c;for(let u=0;u<=de;u+=1)ar.push(0),ir.push(0);let d=[],p=[];N.forEach(u=>{u.x!==void 0&&(d[u.order]=u.x,p[u.order]===void 0?p[u.order]=u.x+u.pixelWidth:p[u.order]=Math.max(p[u.order],u.x+u.pixelWidth))}),A.sort(gu),A.forEach(u=>{a="plain",o=Ze(u,a),s=iu(u);let l=a,f=()=>(l!==a&&(l=a,o=Ze(u,a)),o);n=u.path[0].y,u.type!=="read"?u.sequence[0].startsWith("-")?e=p[u.path[0].order]+20:e=d[u.path[0].order]-20:e=$u(u);for(let m=0;m<u.path.length;m+=1)u.path[m].y===n?u.path[m].features!==void 0&&(c=m>0&&u.path[m-1].order===u.path[m].order,i=Vs(u.path[m],d[u.path[m].order],p[u.path[m].order],a,u,e,n,o,c),a=i.highlight,e=i.xStart):(u.path[m-1].isForward?t=p[u.path[m-1].order]:t=d[u.path[m-1].order],t!==e&&(o=f(),Z.rectangles.push({xStart:Math.min(e,t),yStart:n,xEnd:Math.max(e,t),yEnd:n+u.width-1,color:o,alpha:s,id:u.id,name:u.name,type:u.type})),u.path[m].order-1===u.path[m-1].order?(e=t,t=d[u.path[m].order],r=u.path[m].y,o=f(),Z.curves.push({xStart:e,yStart:n,xEnd:t+1,yEnd:r,width:u.width,color:o,alpha:s,laneChange:Math.abs(u.path[m].lane-u.path[m-1].lane),id:u.id,name:u.name,type:u.type,nodeStart:u.path[m-1]?.node,nodeEnd:u.path[m]?.node}),e=t,n=r):u.path[m].order+1===u.path[m-1].order?(e=t,t=p[u.path[m].order],r=u.path[m].y,o=f(),Z.curves.push({xStart:e+1,yStart:n,xEnd:t,yEnd:r,width:u.width,color:o,alpha:s,laneChange:Math.abs(u.path[m].lane-u.path[m-1].lane),id:u.id,name:u.name,type:u.type,nodeStart:u.path[m-1]?.node,nodeEnd:u.path[m]?.node}),e=t,n=r):u.path[m-1].isForward?(r=u.path[m].y,js(1,t,n,r,u.width,o,u.id,u.path[m].order,u.type,u.name),e=p[u.path[m].order],n=u.path[m].y):(r=u.path[m].y,js(-1,t,n,r,u.width,o,u.id,u.path[m].order,u.type,u.name),e=d[u.path[m].order],n=u.path[m].y),u.path[m].features!==void 0&&(c=u.path[m-1].order===u.path[m].order,i=Vs(u.path[m],d[u.path[m].order],p[u.path[m].order],a,u,e,n,o,c),a=i.highlight,e=i.xStart));u.type!=="read"?u.path[u.path.length-1].isForward?t=p[u.path[u.path.length-1].order]+20:t=d[u.path[u.path.length-1].order]-20:t=Hu(u),Z.rectangles.push({xStart:Math.min(e,t),yStart:n,xEnd:Math.max(e,t),yEnd:n+u.width-1,color:o,alpha:s,id:u.id,name:u.name,type:u.type})})}var Yu=1e9;function qs(e,t){Ut=new Map;let n=new Map,r=W.ignoreStrand;for(let l of e){let f=l.indexSequence;if(!(!f||f.length<2))for(let m=0;m<f.length-1;m+=1){let h=f[m],b=f[m+1],g=Math.abs(h),y=Math.abs(b),w=N[g],M=N[y];if(!w||!M)continue;let S;if(r){let R=`${h}>${b}`,L=`${-b}>${-h}`;S=R<L?R:L}else S=`${h}>${b}`;let x=n.get(S);x===void 0?n.set(S,{sSigned:h,dSigned:b,sName:h<0?`-${w.name}`:w.name,dName:b<0?`-${M.name}`:M.name,count:1,sourceTrackID:l.sourceTrackID}):x.count+=1}}let o=0;for(let l of n.values())l.count>o&&(o=l.count);let s=Zt,a=60,i=l=>o<=1?s:s+(a-s)*Math.sqrt(l/o),c=[],d=0;for(let l of n.values()){let f=Yu+d,m=`${l.count.toLocaleString()} ${t}${l.count===1?"":"s"}: Node ${l.sName} \u2192 Node ${l.dName}`;Ut.set(f,{count:l.count,label:m});let h=N[Math.abs(l.sSigned)]?.sequenceLength??0;c.push({id:f,sourceTrackID:l.sourceTrackID,type:"read",name:m,sequence:[l.sName,l.dName],indexSequence:[],path:[],width:i(l.count),firstNodeOffset:h,finalNodeCoverLength:0,sequenceNew:[{nodeName:l.sName,mismatches:[]},{nodeName:l.dName,mismatches:[]}],mapping_quality:0,is_secondary:!1,sample_name:null,read_group:null,score:l.count}),d+=1}let p="?",u=0;for(let l of N){if(!l)continue;let f=l.contentHeight;f>u&&(u=f,p=l.name)}return ft&&console.log(`[coarsened] ${t}s_in=${e.length} edges_out=${c.length} tallestNodeBeforePlace=${p}(${u.toFixed(1)})`),c}function Vs(e,t,n,r,o,s,a,i,c){let d=r,p,u,l,f;t-=8,n+=8;let m=N[e.node].sequenceLength;return e.features.sort((h,b)=>h.start-b.start),e.features.forEach(h=>{d!==h.type&&(p=Ze(o,d),e.isForward?(l=t+Math.round(h.start*(n-t+1)/m),c&&l<t+8&&(f=t+Math.round((h.end+1)*(n-t+1)/m)-1,u=Ze(o,h.type),Z.featureRectangles.push({xStart:l,yStart:a,xEnd:f,yEnd:a+o.width-1,color:u,id:o.id,name:o.name,type:o.type})),l>s+1&&Z.featureRectangles.push({xStart:s,yStart:a,xEnd:l-1,yEnd:a+o.width-1,color:p,id:o.id,name:o.name,type:o.type})):(l=n-Math.round(h.start*(n-t+1)/m),c&&l>n-8&&(f=n-Math.round((h.end+1)*(n-t+1)/m)-1,u=Ze(o,h.type),Z.featureRectangles.push({xStart:f,yStart:a,xEnd:l,yEnd:a+o.width-1,color:u,id:o.id,name:o.name,type:o.type})),s>l+1&&Z.featureRectangles.push({xStart:l+1,yStart:a,xEnd:s,yEnd:a+o.width-1,color:p,id:o.id,name:o.name,type:o.type})),s=l,d=h.type),(h.end<m-1||h.continue===void 0)&&(p=Ze(o,d),e.isForward?(f=t+Math.round((h.end+1)*(n-t+1)/m)-1,Z.featureRectangles.push({xStart:s,yStart:a,xEnd:f,yEnd:a+o.width-1,color:p,id:o.id,name:o.name,type:o.type})):(f=n-Math.round((h.end+1)*(n-t+1)/m)-1,Z.featureRectangles.push({xStart:f,yStart:a,xEnd:s,yEnd:a+o.width-1,color:p,id:o.id,name:o.name,type:o.type})),s=f+1,d="plain")}),{xStart:s,highlight:d}}var zs=7;function js(e,t,n,r,o,s,a,i,c,d){let p=e===1?ir:ar,u=10*p[i],l=t+e*(u+5),f=zs,m=Math.min(zs,o),h=Math.min(n,r),b=Math.max(n,r),g=e===1?t:l-1,y=e===1?l:t,w=R=>{Z.verticalRectangles.push({xStart:g,yStart:R,xEnd:y,yEnd:R+o-1,color:s,id:a,name:d,type:c})};w(n),Z.verticalRectangles.push({xStart:e===1?l+f:l-f-m,yStart:h+o+f-1,xEnd:e===1?l+f+m-1:l-f-1,yEnd:b-f+1,color:s,id:a,name:d,type:c}),w(r);let M=l+e*f,S=l+e*(f+m),x=`M ${l} ${b}`;x+=` Q ${M} ${b} ${M} ${b-f}`,x+=` H ${S}`,x+=` Q ${S} ${b+o} ${l} ${b+o}`,x+=" Z ",Z.corners.push({path:x,color:s,id:a,type:c}),x=`M ${l} ${h}`,x+=` Q ${S} ${h} ${S} ${h+o+f}`,x+=` H ${M}`,x+=` Q ${M} ${h+o} ${l} ${h+o}`,x+=" Z ",Z.corners.push({path:x,color:s,id:a,type:c}),p[i]+=1}function qu(e){let t=e.x-4,n=e.x+e.pixelWidth+4;return[t,n]}function Us(){switch(N.forEach(e=>{e.sequenceLength===void 0&&(e.sequenceLength=e.seq.length)}),W.nodeWidthOption){case"compressed":N.forEach(e=>{e.width=1+Math.log(e.sequenceLength)/Math.log(2),e.pixelWidth=Math.round((e.width-1)*8.401)});break;case"small":N.forEach(e=>{e.width=e.sequenceLength/100,e.pixelWidth=Math.round((e.width-1)*8.401)});break;case"fixed":N.forEach(e=>{e.width=10,e.pixelWidth=Math.round(e.width*8.401)});break;case"normal":{let e=W.charWidth;N.forEach(t=>{t.width=t.sequenceLength;let n=t.seq?.length??1;t.pixelWidth=Math.round(e*n)});break}default:throw new Error(`${W.nodeWidthOption} not implemented`)}}function Vu(){let e,t,n=Array.from(N,()=>new Set),r=Array.from(N,()=>new Set),o;W.showReads&&C.length>0?o=A.concat(C):o=A,o.forEach(i=>{for(let c=0;c<i.sequence.length;c+=1)se(i.sequence[c])?(e=Y(i.sequence[c]),c>0?(t=i.sequence[c-1],se(t)?r[O.get(e)].add(Y(t)):(r[O.get(e)].add(t),r[O.get(e)].add(Te(t)))):i.type==="haplotype"&&r[O.get(e)].add("None"),c<i.sequence.length-1?(t=i.sequence[c+1],se(t)?n[O.get(e)].add(Y(t)):(n[O.get(e)].add(t),n[O.get(e)].add(Te(t)))):i.type==="haplotype"&&n[O.get(e)].add("None")):(c>0?(e=i.sequence[c-1],n[O.get(i.sequence[c])].add(e),se(e)&&n[O.get(i.sequence[c])].add(Y(e))):i.type==="haplotype"&&n[O.get(i.sequence[c])].add("None"),c<i.sequence.length-1?(e=i.sequence[c+1],r[O.get(i.sequence[c])].add(e),se(e)&&r[O.get(i.sequence[c])].add(Y(e))):i.type==="haplotype"&&r[O.get(i.sequence[c])].add("None"))});let s=n.map(i=>Array.from(i)),a=r.map(i=>Array.from(i));if(W.showReads&&C.length>0){let i=N.slice();i.sort(Qt);let c=new Map,d=new Map,p=l=>{let f=c.get(l);if(f===void 0)throw new Error(`No merge offset recorded for node ${l}`);return f},u=l=>{let f=d.get(l);if(f===void 0)throw new Error(`No merge origin recorded for node ${l}`);return f};i.forEach(l=>{let f=pt(O.get(l.name),s,a);if(f){let m=p(f)+ge(f).sequenceLength;c.set(l.name,m),c.set(Te(l.name),m),d.set(l.name,u(f)),d.set(Te(l.name),u(f))}else c.set(l.name,0),c.set(Te(l.name),0),d.set(l.name,l.name),d.set(Te(l.name),l.name)}),C.forEach(l=>{let f=l.sequenceNew??[];l.firstNodeOffset=(l.firstNodeOffset??0)+p(l.sequence[0]),l.finalNodeCoverLength=(l.finalNodeCoverLength??0)+p(l.sequence[l.sequence.length-1]);for(let m=l.sequence.length-1;m>=0;m-=1){let h=Y(l.sequence[m]),b=pt(O.get(h),s,a);if(b&&rr(O.get(b),s,a))if(m>0){l.sequence.splice(m,1);let g=ge(b).sequenceLength;f[m].mismatches.forEach(y=>{y.pos+=g}),f[m-1].mismatches=f[m-1].mismatches.concat(f[m].mismatches),f.splice(m,1)}else{l.sequence[0]=u(l.sequence[0]);let g=f[0],y=p(g.nodeName);g.mismatches.forEach(w=>{w.pos+=y}),g.nodeName=u(g.nodeName)}}})}for(let i=0;i<N.length;i+=1)if(rr(i,s,a)&&!pt(i,s,a)){let c=i;for(;rr(c,s,a);)c=O.get(Y(a[c][0])),N[i].sequenceLength+=N[c].sequenceLength,N[i].seq+=N[c].seq}A.forEach(i=>{for(let c=i.sequence.length-1;c>=0;c-=1){e=Y(i.sequence[c]);let d=O.get(e);pt(d,s,a)&&i.sequence.splice(c,1)}});for(let i=N.length-1;i>=0;i-=1)pt(i,s,a)&&N.splice(i,1)}function pt(e,t,n){if(t[e].length!==1||t[e][0]==="None")return!1;let r=Y(t[e][0]),o=O.get(r);return n[o].length!==1||n[o][0]==="None"?!1:r}function rr(e,t,n){if(n[e].length!==1||n[e][0]==="None")return!1;let r=Y(n[e][0]),o=O.get(r);return!(t[o].length!==1||t[o][0]==="None")}function zu(e){let t=W.focusReadNames?new Set(W.focusReadNames):null;return e.filter(n=>n.is_secondary!==!0&&(n.mapping_quality??0)>=W.mappingQualityCutoff&&(t===null||n.name!==void 0&&t.has(n.name)))}function ju(e,t){let n=new Map;for(let r of e){let o=t(r),s=n.get(o);s===void 0?n.set(o,[r]):s.push(r)}return n}function Uu(e,t){return e.xStart<t.xStart?1:e.xStart>t.xStart?-1:e.yStart>t.yStart?1:e.yStart<t.yStart?-1:0}function ta(e,t){let n=ju(e.filter(s=>s.type===t),s=>`${s.nodeStart},${s.nodeEnd}`);n.forEach(s=>{let a=.3,i=.4/s.length;s.length<=5&&(a=.5,i=0),s.sort(Uu),s.forEach(c=>{let d,p;c.yStart<c.yEnd?(d=c.xStart+(c.xEnd-c.xStart)*(1-a),a+=i,p=c.xStart+(c.xEnd-c.xStart)*(1-a)):(d=c.xStart+(c.xEnd-c.xStart)*a,a+=i,p=c.xStart+(c.xEnd-c.xStart)*a);let u=`M ${c.xStart} ${c.yStart}`;u+=` C ${d} ${c.yStart} ${d} ${c.yEnd} ${c.xEnd} ${c.yEnd}`,u+=` V ${c.yEnd+c.width}`,u+=` C ${p} ${c.yEnd+c.width} ${p} ${c.yStart+c.width} ${c.xStart} ${c.yStart+c.width}`,u+=" Z",c.path=u})});let r=Array.from(n.keys());r.sort(function(s,a){let i=s.split(",").map(Number),c=a.split(",").map(Number),d=i[0]??0,p=i[1]??0,u=c[0]??0,l=c[1]??0;return d<u?-1:d>u?1:p<l?-1:p>l?1:0});let o=[];for(let s of r){let a=n.get(s);a!==void 0&&o.push(...a)}return o}function na(e){let t=`M ${e.x-9} ${e.y} Q ${e.x-9} ${e.y-9} ${e.x} ${e.y-9}`,n=e.x,r=e.y-9;return e.width>1&&(n+=e.pixelWidth,t+=` L ${n} ${r}`),t+=` Q ${n+9} ${r} ${n+9} ${r+9}`,n+=9,r+=9,e.contentHeight>0&&(r+=e.contentHeight-0,t+=` L ${n} ${r}`),t+=` Q ${n} ${r+9} ${n-9} ${r+9}`,n-=9,r+=9,e.width>1&&(n-=e.pixelWidth,t+=` L ${n} ${r}`),t+=` Q ${n-9} ${r} ${n-9} ${r-9}`,n-=9,r-=9,e.contentHeight>0&&(r-=e.contentHeight-0,t+=` L ${n} ${r}`),t}function ur(e){let t=new Map;for(let[n,r]of e.pathVisits??[])for(let o of r){let s=`${o.path} ${n}`,a=t.get(s);a?a.push(o.strand):t.set(s,[o.strand])}return t}function Ku(e){let t=new Map(e.nodes.map(s=>[s.id,s])),n=ur(e),r=(e.paths??[]).map((s,a)=>({path:s,index:a})),o=r.findIndex(s=>j(s.path.name).name===e.referencePath);return o>0&&r.unshift(...r.splice(o,1)),r.flatMap(({path:s,index:a})=>{let i=j(s.name).name,c=new Map,d=s.nodeIds.flatMap(p=>{let u=t.get(p);if(!u)return[];let l=c.get(u.name)??0;c.set(u.name,l+1);let f=n.get(`${i} ${u.name}`)?.[l]??ut(u);return[Kn(u,f)]});return d.length>0?[{id:a,name:s.name,sequence:d,sourceTrackID:0,type:"haplotype"}]:[]})}function Zu(e){return e.nodes.map(t=>({name:t.id,seq:"",sequenceLength:Math.max(1,t.length)}))}function Je(e){return(e.paths?.length??0)>0}var Qu=600,Ju=3,el=15;function tl(e){return Math.max(Ju,Math.min(el,Math.floor(Qu/Math.max(1,e))))}function ra(e){let t=e.paths??[],n=Ku(e),r=e.reads?Ls(e,e.reads,t.length):[],o=r.length>0?Zr:Kr,s=t.map((i,c)=>o(c,t.length)),a=Zs(Zu(e),n,r,{nodeWidthOption:"compressed",trackWidth:tl(n.length),trackColor:i=>i.type==="read"?Ns(i):s[i.id]});return a?{layout:a,pathColors:s}:void 0}function lr(e){let t=[];return e.nodes.forEach(n=>{n.order>=0&&t.push(n)}),t}function oa(e,t,n,r){let o=e.y+e.contentHeight/2-t;return[{x:n,y:o},{x:r,y:o}]}function sa(e,t){return{minY:e.bounds.minY-t,maxY:e.bounds.maxY-t}}function aa(e){let t=Je(e)?ra(e):void 0;if(!t)return;let{layout:n,pathColors:r}=t,o=n.bounds.minY,s={};for(let c of lr(n))s[c.name]=oa(c,o,c.x,c.x+c.pixelWidth);let{minY:a,maxY:i}=sa(n,o);return{nodePositions:s,tubeMap:{layout:n,yOffset:o,pathColors:r},extent:{minX:n.bounds.minX,maxX:n.bounds.maxX,minY:a,maxY:i}}}function nl(e,t){let n=new Map(e.nodes.map(i=>[i.id,i])),r=new Map;for(let i of lr(t)){let c=r.get(i.order);c?c.push(i):r.set(i.order,[i])}let o=[],s=-1/0;for(let i of[...r.keys()].sort((c,d)=>c-d)){let c=r.get(i),d=1/0,p=-1/0;for(let u of c){let l=n.get(u.name);l&&v(l)&&(d=Math.min(d,l.stable.start),p=Math.max(p,l.stable.start+u.sequenceLength))}d===1/0&&(d=p=s),d<s&&(d=s,p=Math.max(s,p)),s=Math.max(s,p),o.push({order:i,x0:Math.min(...c.map(u=>u.x)),x1:Math.max(...c.map(u=>u.x+u.pixelWidth)),bp0:d,bp1:p})}let a=o.find(i=>i.bp0!==-1/0);for(let i of o)i.bp0===-1/0&&(i.bp0=i.bp1=a?.bp0??0);return o}function rl(e){return e.nodes.some(v)&&Je(e)}function ia(e){let t=rl(e)?ra(e):void 0;if(!t)return;let{layout:n,pathColors:r}=t,o=nl(e,n),s=new Map(o.map(c=>[c.order,c])),a=n.bounds.minY,i={};for(let c of lr(n)){let d=s.get(c.order);i[c.name]=oa(c,a,d.bp0,d.bp1)}return{nodePositions:i,tubeMap:{layout:n,yOffset:a,columns:o,pathColors:r},referenceAxis:!0,pixelRows:!0,extent:sa(n,a)}}function ca(e){return e.sample??Nt(e.name)}function ol(e){return e.haplotype!==void 0&&e.sample!==void 0?`${e.sample}#${e.haplotype}`:ca(e)}function sl(e,t,n,r=!0){if(!n||!r)return{ids:e,complete:!0};let o=-1,s=-1,a=-1/0,i=1/0;if(e.forEach((d,p)=>{let u=t.get(d);u&&(u.end<=n.start&&u.end>a&&(a=u.end,o=p),u.start>=n.end&&u.start<i&&(i=u.start,s=p))}),o<0||s<0)return{ids:e,complete:!1};let c=e.slice(Math.min(o,s)+1,Math.max(o,s));return{ids:o<s?c:c.reverse(),complete:!0}}function mt(e,t,n){let r=e.paths??[],o=r.find(h=>j(h.name).name===e.referencePath)??r[0];if(!o||r.length<2)return;let s=new Map(e.nodes.map(h=>[h.id,h.length])),a=e.anchorPaths?.find(h=>h.name===j(o.name).name)?.start??0,i=t&&t.end>t.start?t:void 0,c=new Map,d=a;for(let h of o.nodeIds){let b=s.get(h)??0;c.has(h)||c.set(h,{start:d,end:d+b}),d+=b}let p=i===void 0||[...c.values()].some(h=>h.end<=i.start)&&[...c.values()].some(h=>h.start>=i.end),u=h=>{let{ids:b,complete:g}=sl(h.nodeIds,c,i,p),y=[],w=0,M=0,S=0;for(let x of b){let R=s.get(x)??0,L=c.get(x),k=y.at(-1),P=k?.referenceStart,_=L&&P!==void 0&&S>=0&&P+k.bp===L.start,$=L&&P!==void 0&&S<=0&&L.end===P;!L&&k&&!k.onReference?k.bp+=R:_||$?(k.bp+=R,_||(k.referenceStart=L.start,k.reversed=!0),S=_?1:-1):(y.push({start:w,bp:R,onReference:L!==void 0,referenceStart:L?.start}),S=0),w+=R,L||(M+=R)}return{name:h.name,label:ol(h),sample:ca(h),haplotype:h.haplotype,bp:w,offReferenceBp:M,complete:g,runs:y}},l=h=>h.nodeIds.some(b=>c.has(b)),f=new Set(r.filter(h=>h!==o&&l(h)).map(h=>h.name));return{origin:i?i.start:a,unit:n,reference:u(o),rows:r.filter(h=>h!==o&&(l(h)||!f.has(h.name))).map(u).sort((h,b)=>Number(b.complete)-Number(h.complete)||b.bp-h.bp||h.label.localeCompare(b.label))}}var al=1.3;function pr(e){let t=e.reference.bp;for(let n of e.rows)t=Math.max(t,n.bp);return{maxX:e.origin+t*al,maxY:e.rows.length*20}}function da(e,t){let n=Le(e),r=mt(e,t);if(n.length===0||!r)return;let o=Ve(n),s=[{label:r.reference.label,y:0},...r.rows.map((a,i)=>({label:a.label,y:(i+1)*20}))];return{nodePositions:o,rowLabels:s,referenceAxis:!0,pixelRows:!0,extent:pr(r)}}var il="Force-directed layout",Oe=e=>e.nodes.some(v),ua=e=>Oe(e)&&(e.paths?.length??0)>1,la=e=>Oe(e)&&Je(e),pa=e=>Oe(e)&&e.nodes.some(At),ht=[{value:"auto",label:"Anchored",description:"x is reference bp, one row per stable rank. Needs rGFA tags or a reference path.",run:ks,cutMargins:!0,wholeWalks:!1,available:Oe,drawsLocally:Oe},{value:"samplerows",label:"Sample rows",description:"x is reference bp, one row per contributing assembly. Needs rGFA tags or a reference path.",run:Ps,cutMargins:!0,wholeWalks:!1,available:pa,drawsLocally:pa},{value:"walkrows",label:"Walk rows",description:"x is each walk's own bp: one bar per haplotype, sequence the reference also carries in blue and sequence it does not in purple, so a repeat expansion reads as bar length. Needs W or P lines.",run:da,cutMargins:!1,wholeWalks:!0,available:ua,drawsLocally:ua},{value:"ordered",label:"Ordered",description:"x is reference order, not bp: every node gets room, bubbles read as lenses. Needs rGFA tags or a reference path.",run:Is,cutMargins:!1,wholeWalks:!1,available:Oe,drawsLocally:Oe},{value:"tubemap",label:"Tube map",description:"sequenceTubeMap: every path a coloured tube through boxed nodes, columns in node order and node widths log-scaled. Needs P or W lines.",run:aa,cutMargins:!1,wholeWalks:!1,available:Je,drawsLocally:Je},{value:"tubemapref",label:"Tube map on reference",description:"The tube map with each column at the reference bp it covers, so the tubes line up with the tracks around them. Needs P or W lines and a reference path.",run:ia,cutMargins:!0,wholeWalks:!1,available:la,drawsLocally:la},{value:"force",label:il,description:"OGDF FMMM, via the external Bandage engine.",run:()=>{},cutMargins:!1,wholeWalks:!1,available:()=>!0,drawsLocally:()=>!1}],fa=ht.map(e=>e.value);function ma(e,t){return!Jt(e).drawsLocally(t)}function Jt(e){return ht.find(t=>t.value===e)??ht[0]}var cl=10;function dl(e,t){let n=e.end-e.start,r=e.longestAlleleLength-e.shortestAlleleLength;return t.find(o=>r<=cl*(o.end-o.start)&&(n===0?o.start<=e.start&&e.start<=o.end:Math.min(e.end,o.end)-Math.max(e.start,o.start)>=n/2))}var ul=40;function be(e){return e>=1e4?`${(e/1e3).toFixed(0)} kb`:e>=1e3?`${(e/1e3).toFixed(1)} kb`:`${e} bp`}function ll(e,t){let n=be(e),r=be(t),o=r.slice(r.indexOf(" "));return n.endsWith(o)?`${n.slice(0,-o.length)}\u2013${r}`:`${n}\u2013${r}`}function ha(e){return e>=Ct?"\u22652.1B routes":e>=1e5?`${(e/1e3).toFixed(0)}k routes`:`${e} routes`}function en(e,t=[]){let n=pl(e,t);return e.partial?{...n,label:`${n.label}, partial`}:n}function pl(e,t){let n=e.end-e.start,{shortestAlleleLength:r,longestAlleleLength:o,pathCount:s,segmentCount:a,inversion:i}=e,c=ll(r,o);if(a>=ul)return{kind:"superbubble",label:`${c} superbubble, ${a} segments, ${ha(s)}${i?", inv":""}`};if(i)return{kind:"inversion",label:`${be(o)} inv`};let d=o!==r?dl(e,t):void 0;if(d){let u=d.name?` (${d.name})`:"";return{kind:"repeat",label:`${c} repeat array${u}, ${ha(s)}`}}let p=s>2?`, ${s} alleles`:"";return r===o&&r===n?n<=1?{kind:"snp",label:"SNP"}:{kind:"substitution",label:`${be(n)} sub`}:n===0||r===n?{kind:"insertion",label:`\u2264${be(o-n)} ins${p}`}:o===n?{kind:"deletion",label:`${be(n-r)} del${p}`}:{kind:"complex",label:`${be(n)} ref \u2192 ${c}, ${s} alleles`}}var zm={snp:"#5b6b7a",substitution:"#5b6b7a",insertion:"#2f8fd6",deletion:"#c94040",inversion:"#e07b00",repeat:"#8e3fbf",superbubble:"#8e3fbf",complex:"#8e3fbf"},ga={snp:"SNP",substitution:"substitution",insertion:"insertion",deletion:"deletion",inversion:"inversion",repeat:"repeat array",superbubble:"superbubble",complex:"site"};function tn(e){return e.segments.split(",").filter(Boolean)}function fl(e,t){let n=e.indexOf(":"),r=e.indexOf(":",n+1);if(n!==-1&&r!==-1){let o=e.slice(0,n),s=e.slice(n+1,r),a=e.slice(r+1);s==="i"||s==="f"?t[o]=+a:s==="Z"&&(t[o]=a)}}function gt(e){let t={};for(let n of e)fl(n,t);return t}function fr(e){let{SN:t,SO:n,SR:r}=e.tags;return typeof t=="string"&&typeof n=="number"&&typeof r=="number"?{refName:t,start:n,rank:r}:void 0}var ba=62,ml=60;function hl(e){let t=[],n="+",r=0;function o(s){s>r&&t.push({id:e.slice(r,s),strand:n})}for(let s=0;s<e.length;s++){let a=e.charCodeAt(s);(a===ba||a===ml)&&(o(s),n=a===ba?"+":"-",r=s+1)}return o(e.length),t}function mr(e){let t={nodes:[],links:[],paths:[],walks:[],header:[],id:""};for(let n of e.split(`
2
+ `)){let r=n.endsWith("\r")?n.slice(0,-1):n;if(r.startsWith("H")){let[,...o]=r.split(" ");t.header.push(gt(o))}else if(r.startsWith("S")){let[,o,...s]=r.split(" "),a,i,c,d=!1,p=s[0]??"*";/^\d+$/.test(p)?(a=+p,i=s[1]??"*",c=s.slice(2)):(d=!0,i=p,a=i==="*"?0:i.length,c=s.slice(1));let u=gt(c);d&&"LN"in u&&(a=+u.LN),t.nodes.push({id:o,length:a,sequence:i,tags:u})}else if(r.startsWith("E")){let[,,o,s,,,,,a,...i]=r.split(" ");o&&s&&t.links.push({source:o.slice(0,-1),target:s.slice(0,-1),strand1:o.at(-1),strand2:s.at(-1),cigar:a??"*",tags:gt(i)})}else if(r.startsWith("L")){let[,o,s,a,i,c,...d]=r.split(" ");o&&a&&i&&t.links.push({source:o,target:a,strand1:s,strand2:i,cigar:c??"*",tags:gt(d)})}else if(r.startsWith("W")){let[,o,s,a,i,c,d,...p]=r.split(" ");o&&s&&a&&i&&c&&d&&t.walks.push({sample:o,haplotype:+s,contig:a,start:i==="*"?-1:+i,end:c==="*"?-1:+c,segments:hl(d),tags:gt(p)})}else if(r.startsWith("P")){let[,o,s,...a]=r.split(" ");o&&s&&t.paths.push({name:o,path:s,rest:a})}}return t}function gl(e){let t=new Map,n=new Map;function r(s,a){t.has(s)||t.set(s,a)}function o(s,a){r(s,a),n.set(s,(n.get(s)??0)+1)}for(let s of e.links)r(s.source,s.strand1==="-"?"-":"+"),r(s.target,s.strand2==="-"?"-":"+");for(let s of e.paths)for(let a of s.path.split(","))o(a.slice(0,-1),a.endsWith("-")?"-":"+");for(let s of e.walks)for(let a of s.segments)o(a.id,a.strand==="-"?"-":"+");return{canonical:t,traversals:n}}function bl(e){return[...e.paths.map(t=>({...j(t.name),steps:t.path.split(",").map(n=>({id:n.slice(0,-1),strand:n.endsWith("-")?"-":"+"}))})),...e.walks.map(t=>({name:`${t.sample}#${t.haplotype}#${t.contig}`,start:t.start===-1?0:t.start,steps:t.segments.map(n=>({id:n.id,strand:n.strand==="-"?"-":"+"}))}))]}function yl(e){let t=e.tags.SM;if(typeof t!="string")return;let n=t.split(",").map(r=>r.trim()).filter(Boolean);return n.length>0?n:void 0}var bt=e=>typeof e=="number"&&e>0?e:void 0;function xl({tags:e,length:t}){let n=bt(e.RC)??bt(e.FC)??bt(e.KC);return bt(e.dp)??bt(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function wl(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:fr(e),samples:yl(e)}}function ya(e,t="Imported GFA"){let n=[],r=[],{canonical:o,traversals:s}=gl(e),a=f=>`${f}${o.get(f)??"+"}`;for(let f of e.nodes){let m=xl(f)??Math.max(s.get(f.id)??1,1);n.push(wl(f,o.get(f.id)??"+",m))}for(let f of e.links)r.push({from:a(f.source),to:a(f.target),fromStrand:f.strand1==="-"?"-":"+",toStrand:f.strand2==="-"?"-":"+"});let i=[],c=new Map,d=(f,m)=>[f,m].sort().join("--");function p(f,m){for(let h=0;h<f.length-1;h++){let b=d(f[h],f[h+1]);c.has(b)||c.set(b,new Set),c.get(b).add(m)}}for(let f of e.paths){let m=f.path.split(",").map(h=>a(h.slice(0,-1)));i.push({name:f.name,nodeIds:m}),p(m,f.name)}for(let f of e.walks){let m=f.segments.map(b=>a(b.id)),h=`${f.sample}#${f.haplotype}#${f.contig}`;i.push({name:h,nodeIds:m,sample:f.sample,haplotype:f.haplotype,contig:f.contig}),p(m,h)}for(let f of r){let m=c.get(d(f.from,f.to));m&&m.size>0&&(f.pathIds=[...m])}let u=new Map(e.nodes.map(f=>[f.id,f.length])),l=e.paths.length>0||e.walks.length>0?qr(bl(e),f=>u.get(f)??0):void 0;return{name:t,nodes:n,edges:r,paths:i.length>0?i:void 0,anchorPaths:l?.anchorPaths,pathVisits:l?.pathVisits,anchoredBy:n.some(f=>f.stable)?"tags":void 0}}function xa(e,t){let n=e.nodes.filter(b=>v(b)&&(t[b.id]?.length??0)>0);if(n.length<2)return t;let r=n.map(b=>{let g=t[b.id],y=g[Math.floor(g.length/2)];return{x:y.x,y:y.y,r:b.stable.start+b.length/2,w:b.length}}),o=r.reduce((b,g)=>b+g.w,0),s=r.reduce((b,g)=>b+g.x*g.w,0)/o,a=r.reduce((b,g)=>b+g.y*g.w,0)/o,i=r.reduce((b,g)=>b+g.r*g.w,0)/o,c=0,d=0;for(let b of r)c+=b.w*(b.x-s)*(b.r-i),d+=b.w*(b.y-a)*(b.r-i);let p=-Math.atan2(d,c),u=Math.cos(p),l=Math.sin(p),f={};for(let[b,g]of Object.entries(t))f[b]=g.map(y=>{let w=y.x-s,M=y.y-a;return{x:s+u*w-l*M,y:a+l*w+u*M}});let m=0,h=0;for(let b of e.nodes)if(!v(b))for(let g of f[b.id]??[])g.y>a?m++:h++;if(h>m)for(let b of Object.values(f))for(let g of b)g.y=2*a-g.y;return f}var wa=30;function Ml(e,t){let{opts:n}=t,r=new Map(t.nodes.map(l=>[l.id,vt(n,l.length)])),o=l=>r.get(l)??n.minimumNodeLength,s=e.nodes.filter(v).sort((l,f)=>l.stable.start-f.stable.start),a=new Map,i=0;for(let l of s)a.set(l.id,{x:i,y:0}),i+=o(l.id)+n.edgeLength;let c=he(e),d=new Map(s.map(l=>[l.id,0])),p=s.map(l=>l.id);for(let l of p){let f=a.get(l),m=d.get(l)+1;for(let h of c.get(l)??[])d.has(h)||(d.set(h,m),a.set(h,{x:f.x+o(l)/2,y:wa*m}),p.push(h))}let u=0;for(let l of e.nodes)a.has(l.id)||a.set(l.id,{x:u++*i/e.nodes.length,y:wa*3});return a}function Ma(e,t){let n=Ml(e,t);return t.nodes.map(r=>({...r,...n.get(r.id)}))}function Sa(e,t,n={}){let r=zr(ya(mr(e),t),n.referencePath);if(r.nodes.length===0)throw new Error(`No graph segments in ${t}`);if(n.maxNodes!==void 0&&r.nodes.length>n.maxNodes)throw new Error(`Graph too large to draw: ${r.nodes.length.toLocaleString()} nodes (limit ${n.maxNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);return r}function Sl(e,t,n){let r=e.nodes.some(v);return{graph:{nodes:r?Ma(e,t):t.nodes,edges:e.edges},options:{quality:n.quality,linearLayout:n.linearLayout,...t.opts,...r?{rotateComponents:!1}:{}}}}function Ra(e,t){let n=e.nodes.some(v);return`${t.quality}|${t.linearLayout}|${t.bubbleSpread}|${n}|${e.referencePath??""}`}async function La(e,t,n){let r=Jr(t.bubbleSpread),o=Io(e),{result:s,duration:a}=await n(Sl(o.graph,Nn(o.graph,r),t)),i=Nn(e,r),c=new Map(i.nodes.map(p=>[p.id,vt(i.opts,p.length)])),d=Po(s.nodePositions,o.runs,p=>c.get(p)??0);return{result:{...s,nodePositions:e.nodes.some(v)?xa(e,d):d},duration:a}}function Rl(e){let t=1/0,n=1/0,r=-1/0,o=-1/0;for(let s of Object.values(e))for(let a of s)t=Math.min(t,a.x),n=Math.min(n,a.y),r=Math.max(r,a.x),o=Math.max(o,a.y);return{minX:t,minY:n,maxX:r,maxY:o}}var Q=40,Ll=1e-6,Nl=100;function yt(e){return Math.max(Ll,Math.min(Nl,e))}function hr(e,t,n,r=Q){let o=t-e.h*n;return r-e.minY*n+Math.max(0,o)/2}function Na(e,t,n,r,{minScale:o=0,padLeft:s=Q,padTop:a=Q,padRight:i=Q,padBottom:c=Q}={}){let d=t-s-i,p=n-a-c;if(d<=0||p<=0||!(e.w>0||!r&&e.h>0))return;let u=e.w>0?d/e.w:1/0,l=e.h>0?p/e.h:1/0,f=yt(Math.max(o,r?u:Math.min(u,l))),m=d-e.w*f;return{scale:f,translateX:s-e.minX*f+Math.max(0,m)/2,translateY:hr(e,p,r?1:f,a)}}function Ea(e,t={}){let{minX:n,minY:r,maxX:o,maxY:s}=Rl(e.nodePositions),{region:a}=t;e.referenceAxis&&a&&a.end>a.start&&(n=a.start,o=a.end);let i=t.extent??e.extent;return i&&(n=Math.min(n,i.minX??n),r=Math.min(r,i.minY??r),o=Math.max(o,i.maxX??o),s=Math.max(s,i.maxY??s)),{minX:n,minY:r,w:o-n,h:s-r}}var Ta=H(ct(),1);var et=10,yr=et+8,gr=5;function va(e,{colorScheme:t,referenceRamp:n,walkNodes:r,walkColors:o}){let s={...qn(e),referenceRamp:n},a=[];return e.nodes.forEach((i,c)=>{if(v(i)){let d=r?o?.get(i.id)??Hn:Vn(i,c,t,s);a.push({node:i.id,bp0:i.stable.start,bp1:i.stable.start+i.length,color:(0,Ta.abgrToCssRgba)(r&&!r.has(i.id)?Pe(d,je):d)})}}),a.sort((i,c)=>i.bp0-c.bp0)}function br(e,t,n){let r=t*e.scale+e.translateX,o=n*e.scale+e.translateX;return r<o?[r,o]:[o,r]}var Aa=2;function xr(e,t,n){let r=-t.translateX/t.scale,o=(n-t.translateX)/t.scale,s=Math.min(r,o),a=Math.max(r,o),i=0,c=0;for(let d of e)i+=Math.max(0,Math.min(d.bp1,s)-d.bp0),c+=Math.max(0,d.bp1-Math.max(d.bp0,a));return t.scale>=0?{left:Math.round(i),right:Math.round(c)}:{left:Math.round(c),right:Math.round(i)}}function Ca(e,t,n,r){if(r<0||r>et+Aa)return;let o,s=Aa;for(let a of e){let[i,c]=br(t,a.bp0,a.bp1),d=Math.max(0,i-n,n-c);d<=s&&(s=d,o=a.node)}return o}function Ia(e,t){let n=e?.[Math.floor(e.length/2)];return n?t(n):void 0}function ka(e,t,n){let r=et/2,o=t+n*(gr+1);e.moveTo(t+n,r),e.lineTo(o,r-gr/1.4),e.lineTo(o,r+gr/1.4),e.closePath()}function wh(e,t,n,{width:r,lit:o,darkMode:s}){let a=s?"#ffffff":"#18181c";e.fillStyle=s?"#1f1f1f":"#ffffff",e.fillRect(0,0,r,yr);for(let c of t){let[d,p]=br(n,c.bp0,c.bp1);p>=0&&d<=r&&(e.fillStyle=c.color,e.fillRect(d,0,Math.max(p-d,1),et))}let i=xr(t,n,r);if((i.left>0||i.right>0)&&(e.beginPath(),i.left>0&&ka(e,0,1),i.right>0&&ka(e,r,-1),e.fillStyle=a,e.fill(),e.strokeStyle=s?"#1f1f1f":"#ffffff",e.lineWidth=1,e.stroke()),o){let[c,d]=br(n,o.start,o.end),p=Math.max(d-c,3),u=(c+d)/2-p/2;e.strokeStyle=a,e.lineWidth=1.5,e.strokeRect(u,.75,p,et-1.5),o.anchor&&(e.beginPath(),e.moveTo(u+p/2,et),e.lineTo(o.anchor.x,o.anchor.y),e.lineWidth=1,e.stroke())}}function Ga(e,t){let n=new Map(e.nodes.map(o=>[o.id,o])),r=new Map;t.nodes.forEach(o=>{let s=n.get(o.name);if(o.order>=0&&s&&v(s)){let{refName:a,start:i}=s.stable;(r.get(a)??r.set(a,[]).get(a)).push({bp0:i,bp1:i+o.sequenceLength,x0:o.x,x1:o.x+o.pixelWidth})}});for(let o of r.values())o.sort((s,a)=>s.bp0-a.bp0);return r}function wr(e,t,n=!1){let r=0,o=e.length-1;for(;r<o;){let i=r+o>>1,c=e[i].bp1;(n?c<t:c<=t)?r=i+1:o=i}let s=e[r];if(t<=s.bp0)return s.x0;let a=s.bp1-s.bp0;return a>0?s.x0+(Math.min(t,s.bp1)-s.bp0)/a*(s.x1-s.x0):s.x0}function Mr(e,t,n){let r=wr(e,t),o=wr(e,n,!0);return{x0:Math.min(r,o),x1:Math.max(r,o)}}function Ba(e){let t;for(let n of e.values())(!t||n.length>t.length)&&(t=n);return t}var Pa=5,El=10,Al=110,kl=3;function Tl(e){return e?"#b0b0b8":"#55555c"}function vl(e){let t=10**Math.floor(Math.log10(e)),n=e/t;return(n<=1?1:n<=2?2:n<=5?5:10)*t}function _a(e){let t=[];for(let n of e)t.every(r=>Math.abs(n.at-r.at)>=(n.width+r.width)/2+El)&&t.push(n);return t.map(({text:n,at:r})=>({text:n,at:r}))}function Cl(e,t,n,r){let o=e[0],s=e.at(-1);if(!o||!s)return;let a=t(o.x0),i=t(s.x1),c=s.bp1-o.bp0;if(i<=a||c<=0)return;let d=vl(c/(i-a)*Al),p=[],u=[];for(let l=Math.ceil(o.bp0/d)*d;l<=s.bp1;l+=d){let f=Math.round(t(wr(e,l)))+.5;if(f>=0&&f<=n){p.push(f);let m=l.toLocaleString("en-US");u.push({text:m,at:f,width:r(m)})}}return{spans:[{x0:a,x1:i}],ticks:p,labels:_a(u)}}function Il(e,t,n,r){let o=e.map(m=>({box:m,s0:t(m.x0),s1:t(m.x1)})).filter(({s0:m,s1:h})=>h>=0&&m<=n),s=o[0],a=o.at(-1);if(!s||!a)return;let i=(m,h)=>({text:m,at:h,width:r(m)}),c=(m,h)=>i(m.toLocaleString("en-US"),h),d=[],p=[],u=[],l=[];for(let{box:m,s0:h,s1:b}of o){d.push({x0:h,x1:b}),p.push(Math.round(h)+.5),b-h>=kl&&p.push(Math.round(b)+.5);let g=i($t(m.bp1-m.bp0),(h+b)/2);g.width<=b-h&&u.push(g),m!==s.box&&l.push(c(m.bp0,h))}let f=[c(s.box.bp0,s.s0),c(a.box.bp1,a.s1)];return{spans:d,ticks:p,labels:_a([...f,...u,...l])}}function Pl(e,t,n,r,o=!1){return(o?Cl:Il)(e,t,n,r)}function Lh(e,t,n,r,o=!1){let{x:s,width:a,darkMode:i}=n;e.font="10px sans-serif";let c=Pl(t,s,a,u=>e.measureText(u).width,o);if(!c)return;let d=Tl(i),p=r+.5;e.strokeStyle=d,e.fillStyle=d,e.lineWidth=1,e.textAlign="center",e.textBaseline="top",e.beginPath();for(let{x0:u,x1:l}of c.spans)e.moveTo(Math.max(0,u),p),e.lineTo(Math.min(a,l),p);for(let u of c.ticks)e.moveTo(u,r),e.lineTo(u,r+Pa);e.stroke();for(let{text:u,at:l}of c.labels)e.fillText(u,l,r+Pa+2)}function Da(e,t){let n=new Map(e.nodes.map(o=>[o.id,o])),r=[];return t.nodes.forEach(o=>{let s=n.get(o.name);o.order>=0&&s&&v(s)&&r.push({node:o.name,bp0:s.stable.start,bp1:s.stable.start+o.sequenceLength,x0:o.x,x1:o.x+o.pixelWidth})}),r}function Wa(e,t,n,r){let o=[];for(let s of e){let a=n(s.x0),i=n(s.x1);i>=0&&a<=r&&o.push({node:s.node,top0:t(s.bp0),top1:t(s.bp1),bottom0:a,bottom1:i})}return o}var Gl=3;function $a(e,t,n,r){if(t<=0||r<0||r>t)return;let o=r/t,s,a=Gl;for(let i of e){let c=i.top0+(i.bottom0-i.top0)*o,d=i.top1+(i.bottom1-i.top1)*o,p=Math.max(0,Math.min(c,d)-n,n-Math.max(c,d));p<a&&(a=p,s=i.node)}return s}function Oa(e,t,n){e.moveTo(t.top0,0),e.lineTo(t.top1,0),e.lineTo(t.bottom1,n),e.lineTo(t.bottom0,n),e.closePath()}function Fa(e,t,n){e.moveTo(t.top0,0),e.lineTo(t.bottom0,n),e.moveTo(t.top1,0),e.lineTo(t.bottom1,n)}function Ah(e,t,n,{highlightNode:r,darkMode:o}){if(n<=0||t.length===0)return;let s=o?"255,255,255":"0,0,0";e.beginPath();for(let i of t)Oa(e,i,n);e.fillStyle=`rgba(${s},0.07)`,e.fill(),e.beginPath();for(let i of t)Fa(e,i,n);e.strokeStyle=`rgba(${s},0.35)`,e.lineWidth=.5,e.stroke();let a=t.find(i=>i.node===r);a&&(e.beginPath(),Oa(e,a,n),e.fillStyle="rgba(255,192,203,0.5)",e.fill(),e.beginPath(),Fa(e,a,n),e.strokeStyle="#ff0000",e.lineWidth=1,e.stroke())}function Bl(e,t){let n=new Map(e.nodes.map(o=>[o.id,o])),r=[];return t.nodes.forEach((o,s)=>{let a=n.get(o.name);if(o.order>=0&&a&&v(a)){let i=a.stable.start;r.push({bp0:i,bp1:i+o.sequenceLength,index:s,node:o})}}),r.sort((o,s)=>o.bp0-s.bp0)}function _l(e,t,n){let r=0,o=e.length-1;for(;r<o;){let s=r+o+1>>1;e[s].bp0<=t?r=s:o=s-1}return[e[r],e[r-1]].find(s=>s&&n.has(s.index)&&s.bp0<=t&&t<=s.bp1)}function Ha(e,t,n){let r=Bl(e,t),o=[];for(let s of t.tracks){let a=s.name?n.get(s.name):void 0;if(a?.length){let i=new Map;for(let c of s.path)c.node!==null&&c.y!==void 0&&!i.has(c.node)&&i.set(c.node,c.y);for(let c of a){let d=_l(r,c.start,i);if(d){let{node:p,bp0:u,bp1:l}=d,f=m=>p.x+(Math.min(m,l)-u)/(l-u)*p.pixelWidth;o.push({x0:f(c.start),x1:f(c.end),y:i.get(d.index),height:s.width})}}}}return o}function Ol(e){return e?"rgba(255,255,255,0.9)":"rgba(0,0,0,0.8)"}function vh(e,t,{x:n,y:r,width:o,darkMode:s}){if(t.length!==0){e.fillStyle=Ol(s),e.beginPath();for(let a of t){let i=n(a.x0),c=Math.max(n(a.x1),i+1);if(c>=0&&i<=o){let d=r(a.y);e.rect(i,d,c-i,r(a.y+a.height)-d)}}e.fill()}}function Fl(e,t){let n=[],r=e.sequenceNew??[];return r.forEach((o,s)=>{let a=t.nodeMap.get(Y(o.nodeName)),i=a===void 0?void 0:t.nodes[a],c=s;for(;c<e.path.length&&e.path[c].node!==a;)c+=1;let d=e.path[c]?.y;if(i&&d!==void 0){let p={readId:e.id,y:d,height:e.width,nodeY:i.y},u=l=>ea(i,l);for(let l of o.mismatches){let f=u(l.pos);if(f!==null){if(l.type==="insertion"){let m=s===0&&l.pos===e.firstNodeOffset||s===r.length-1&&l.pos===e.finalNodeCoverLength;n.push({...p,kind:"insertion",x:f,seq:l.seq,softClip:m})}else if(l.type==="deletion"&&l.length!==void 0){let m=u(l.pos+l.length);m!==null&&n.push({...p,kind:"deletion",x0:f,x1:m})}else if(l.type==="substitution"&&l.seq!==void 0){let m=u(l.pos+l.seq.length);m!==null&&n.push({...p,kind:"substitution",x0:f,x1:m,seq:l.seq})}}}}}),n}function Xa(e){return e.reads.flatMap(t=>Fl(t,e))}function ja(e){let t=e.trim().split(/[\s,]+/),n=[],r=0,o=()=>Number(t[r++]);for(;r<t.length;){let s=t[r++];s==="M"||s==="L"?n.push({op:s,x:o(),y:o()}):s==="H"?n.push({op:s,x:o()}):s==="V"?n.push({op:s,y:o()}):s==="Q"?n.push({op:s,x1:o(),y1:o(),x:o(),y:o()}):s==="C"?n.push({op:s,x1:o(),y1:o(),x2:o(),y2:o(),x:o(),y:o()}):s==="Z"&&n.push({op:s})}return n}function Ua(e){let t=1/0,n=-1/0;for(let r of e)"x"in r&&(t=Math.min(t,r.x),n=Math.max(n,r.x)),"x1"in r&&(t=Math.min(t,r.x1),n=Math.max(n,r.x1));return{x0:t,x1:n}}function Ya(e,t,n){let r=ja(e);return{commands:r,color:t,alpha:n,...Ua(r)}}function qa(e,t){let{shapes:n}=e,r=[...n.rectangles,...n.verticalRectangles].filter(a=>a.type===t).map(a=>({color:a.color,alpha:a.alpha??1,x0:a.xStart,x1:a.xEnd+1,y0:a.yStart,y1:a.yEnd+1})),o=ta(n.curves,t).map(a=>Ya(a.path,a.color,a.alpha??1)),s=n.corners.filter(a=>a.type===t).map(a=>Ya(a.path,a.color,1));return{rects:r,shapes:[...o,...s]}}function Ka(e){let t=[];return e.nodes.forEach(n=>{if(n.order>=0){let r=ja(na(n));t.push({name:n.name,commands:r,...Ua(r)})}}),{bounds:e.bounds,layers:[qa(e,"haplotype"),qa(e,"read")],nodes:t,mismatches:Xa(e).filter(n=>n.kind!=="insertion"||!n.softClip)}}function Va(e,t,n,r){let o=0,s=0;for(let a of t)switch(a.op){case"M":o=a.x,s=a.y,e.moveTo(n(o),r(s));break;case"L":o=a.x,s=a.y,e.lineTo(n(o),r(s));break;case"H":o=a.x,e.lineTo(n(o),r(s));break;case"V":s=a.y,e.lineTo(n(o),r(s));break;case"Q":o=a.x,s=a.y,e.quadraticCurveTo(n(a.x1),r(a.y1),n(o),r(s));break;case"C":o=a.x,s=a.y,e.bezierCurveTo(n(a.x1),r(a.y1),n(a.x2),r(a.y2),n(o),r(s));break;case"Z":e.closePath();break}}function za(e,t,n,r){let o=new Map;for(let s of t)if(n(s)){let a=`${s.color}|${s.alpha}`,i=o.get(a);i?i.push(s):o.set(a,[s])}for(let s of o.values()){e.fillStyle=s[0].color,e.globalAlpha=s[0].alpha,e.beginPath();for(let a of s)r(a);e.fill()}e.globalAlpha=1}var Dl=12,Wl=.15;function $l(e){return Math.max(Wl,Math.min(1,e/Dl))}function _h(e,t,n){let{x:r,y:o,width:s}=n,a=d=>r(d.x1)>=0&&r(d.x0)<=s;for(let d of t.layers)za(e,d.rects,a,p=>{let u=r(p.x0),l=o(p.y0);e.rect(u,l,r(p.x1)-u,o(p.y1)-l)}),za(e,d.shapes,a,p=>{Va(e,p.commands,r,o)});let i=n.darkMode?"#d0d0d0":"#000000",c=n.darkMode?"rgba(40,40,40,0.4)":"rgba(255,255,255,0.4)";e.lineWidth=2*Math.max(.25,Math.min(1,n.yScale));for(let d of t.nodes)if(a(d)){let p=d.name===n.highlightNode;e.beginPath(),Va(e,d.commands,r,o),e.fillStyle=p?"rgba(255,192,203,0.5)":c,e.strokeStyle=p?"#ff0000":i,e.fill(),e.globalAlpha=p?1:$l(r(d.x1)-r(d.x0)),e.stroke(),e.globalAlpha=1}Xl(e,t.mismatches,n)}var Za=12,Hl=6;function Sr(e){return Za*e>=Hl}function nn(e,{x:t,width:n}){let[r,o]=e.kind==="insertion"?[e.x,e.x]:[e.x0,e.x1];return t(o)>=0&&t(r)<=n}function Xl(e,t,n){let{x:r,y:o,yScale:s,darkMode:a}=n;if(!Sr(s)||t.length===0)return;let i=Za*s;e.fillStyle="grey",e.beginPath();for(let c of t)if(c.kind==="deletion"&&nn(c,n)){let d=r(c.x0),p=o(c.y);e.rect(d,p,r(c.x1)-d,o(c.y+c.height)-p)}e.fill(),e.font=`${i}px monospace`,e.textBaseline="alphabetic",e.fillStyle=a?"#ffffff":"#000000";for(let c of t)nn(c,n)&&(c.kind==="substitution"?e.fillText(c.seq,r(c.x0)+1,o(c.y+c.height)):c.kind==="insertion"&&e.fillText("*",r(c.x)-3,o(c.y+c.height)))}function Qa(e,t){let n=[];for(let r of t){let o=e.get(r.refName),s=o?.[0],a=o?.at(-1);if(!o||!s||!a)continue;let i=Math.max(r.start,s.bp0),c=Math.min(r.end,a.bp1);c<=i||n.push({gene:r,...Mr(o,i,c),exons:r.exons.filter(d=>d.end>i&&d.start<c).map(d=>Mr(o,Math.max(d.start,i),Math.min(d.end,c)))})}return n}var on=22,Yl=4,rn=8,ql="11px sans-serif",Vl=8;function Ja(e){let t=e.flatMap(o=>[{x:o.x0,step:1},{x:o.x1,step:-1}]).sort((o,s)=>o.x-s.x||o.step-s.step),n=0,r=0;for(let{step:o}of t)n+=o,r=Math.max(r,n);return Math.min(Yl,r)}function Dh(e,t,n,r,o=0){let{x:s,width:a,darkMode:i}=n,c=Math.max(1,Math.floor((r-o)/on)),d=[],p=i?"#e0e0e6":"#1c1c22";e.font=ql,e.textAlign="center",e.textBaseline="alphabetic",e.fillStyle=p,e.strokeStyle=p,e.lineWidth=1;let u=t.map(l=>({g:l,s0:s(l.x0),s1:s(l.x1)})).filter(({s0:l,s1:f})=>f>=0&&l<=a).sort((l,f)=>l.s0-f.s0);for(let{g:l,s0:f,s1:m}of u){let h=l.gene.strand>0?" \u2192":l.gene.strand<0?"\u2190 ":"",b=l.gene.strand<0?`${h}${l.gene.name}`:`${l.gene.name}${h}`,g=(Math.max(f,0)+Math.min(m,a))/2,y=e.measureText(b).width/2,w=Math.min(f,g-y),M=Math.max(m,g+y),S=d.findIndex(R=>R+Vl<=w);S===-1&&(S=Math.min(d.length,c-1)),d[S]=Math.max(d[S]??-1/0,M);let x=r-S*on-rn/2;e.beginPath(),e.moveTo(f,x+.5),e.lineTo(m,x+.5),e.stroke();for(let R of l.exons){let L=s(R.x0);e.fillRect(L,x-rn/2,Math.max(1,s(R.x1)-L),rn)}e.fillText(b,g,x-rn/2-2)}}function sn(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function ei(e,t,n,r){return{minX:-e.translateX/t.scaleX,minY:-e.translateY/t.scaleY,maxX:(n-e.translateX)/t.scaleX,maxY:(r-e.translateY)/t.scaleY}}function ti(e,t){let n=(e.maxX-e.minX)*t,r=(e.maxY-e.minY)*t;return{minX:e.minX-n,minY:e.minY-r,maxX:e.maxX+n,maxY:e.maxY+r}}function ni(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}function ri(e,t,n,r,o){let s=yt(e.scale*t),a=s/e.scale;return{scale:s,translateX:n-(n-e.translateX)*a,translateY:o?e.translateY:r-(r-e.translateY)*a}}function ai(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.horizontalScroll=="function"&&typeof t.zoomTo=="function"&&"coarseDynamicBlocks"in t&&"dynamicBlocks"in t}function ii(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function an(e,t){let n=ii(e.dynamicBlocks.contentBlocks.filter(s=>s.refName===t.refName&&s.assemblyName===t.assemblyName)),{bpPerPx:r}=e;if(!n||!(r>0))return;let o=n.offsetPx-e.offsetPx;return n.reversed?{scale:-1/r,translateX:o+n.end/r}:{scale:1/r,translateX:o-n.start/r}}function Yh(e){let t=ii(e.dynamicBlocks.contentBlocks),n=t?.displayedRegionIndex===void 0?void 0:e.displayedRegions[t.displayedRegionIndex];return t&&e.bpPerPx>0?{refName:t.refName,assemblyName:t.assemblyName,start:t.start,end:t.end,bpPerPx:e.bpPerPx,span:e.bpPerPx*e.width,regionStart:n?.start??t.start,regionEnd:n?.end??t.end}:void 0}function zl(e,t,n=!0){let r=e.end-e.start,o=n?Math.max(0,Math.min(e.span,(t-r)/2)):0,s=Math.max(e.regionStart,Math.floor(e.start-o)),a=Math.min(e.regionEnd,Math.ceil(e.end+o)),i=a-s-t;return i>0&&(s+=Math.floor(i/2),a-=Math.ceil(i/2)),{refName:e.refName,assemblyName:e.assemblyName,start:s,end:a}}function qh(e,t,n=!0){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;if(n)return e.start<=t.start+1&&t.end<=e.end+1;let r=zl(t,1/0,!1);return Math.abs(e.start-r.start)<1&&Math.abs(e.end-r.end)<1}function jl(e,t){return Math.abs(t-e)<=.1*Math.max(e,t)}function Ul(e,t){let n=e.length,r=t.length,o=Array.from({length:n+1},()=>new Array(r+1).fill(0)),s=Array.from({length:n+1},()=>new Array(r+1).fill(!1));for(let i=n-1;i>=0;i--)for(let c=r-1;c>=0;c--){let d=Math.abs(e[i]-t[c])+o[i+1][c+1],p=n-i>r-c?o[i+1][c]:1/0,u=r-c>n-i?o[i][c+1]:1/0;o[i][c]=Math.min(d,p,u),s[i][c]=o[i][c]===d}let a=new Array(n).fill(void 0);for(let i=0,c=0;i<n&&c<r;)s[i][c]?a[i++]=c++:n-i>r-c?i++:c++;return a}function ci(e,t){return e.map((n,r)=>({item:n,i:r})).sort((n,r)=>t(n.item)-t(r.item))}var ui=e=>e.spanningReads!==0;function di(e,t){return{...t,agrees:e.complete&&ui(t)?jl(e.bp,t.bp):void 0}}function Kl(e,t){let n=new Map,r=new Set;e.forEach((i,c)=>{let d=t.find(p=>p.haplotype!==void 0&&p.haplotype===i.haplotype);d&&(r.add(d),n.set(c,di(i,d)))});let o=t.filter(i=>i.haplotype===void 0),s=ci(e,i=>i.bp),a=[[s.filter(i=>i.item.complete),o.filter(ui)],[s,o]];for(let[i,c]of a){let d=i.filter(u=>!n.has(u.i)),p=ci(c.filter(u=>!r.has(u)),u=>u.bp);Ul(d.map(u=>u.item.bp),p.map(u=>u.item.bp)).forEach((u,l)=>{if(u!==void 0){let f=d[l],m=p[u].item;r.add(m),n.set(f.i,di(f.item,m))}})}return n}function li(e,t){if(!t)return e;let n=new Map,r=new Map;for(let o of e)r.set(o.sample,[...r.get(o.sample)??[],o]);for(let[o,s]of r){let a=t[o];if(a)for(let[i,c]of Kl(s,a))n.set(s[i],c)}return e.map(o=>({...o,call:n.get(o)}))}var Zl=.9,Rr=2,Ql=1e3;function pi(e,t,n,r=s=>s,o=[]){let s=new Map(e.nodes.map(i=>[i.name,i])),a=[];for(let i of t){let c=[],d=1/0,p=-1/0,u=1/0,l=[],f=[];for(let y of tn(i)){let w=s.get(y),M=w&&n[w.id];if(!(!w||!M?.length)){if(v(w)&&(w.stable.start<i.start||w.stable.start>=i.end)){f.push(M[Math.floor(M.length/2)]);continue}l.push(w.id),c.push(Pt(M.length===1?[M[0],M[0]]:M));for(let S of M)d=Math.min(d,S.x),p=Math.max(p,S.x),u=Math.min(u,S.y)}}if(l.length===0)continue;let m={x:(d+p)/2,y:u},h=f.length?{x:f.reduce((y,w)=>y+w.x,0)/f.length,y:f.reduce((y,w)=>y+w.y,0)/f.length}:m,b=new Map;for(let y of i.routes??[])for(let w of new Set(y.steps))b.set(w,(b.get(w)??0)+1);let g=[];for(let y of i.routes??[]){if(i.longestAlleleLength<Ql)break;if(y.steps.length===0)continue;let w=Math.min(...y.steps.map(x=>b.get(x))),M,S=-1;for(let x of y.steps)if(b.get(x)===w)for(let R of n[x]??[]){let L=Math.hypot(R.x-h.x,R.y-h.y);L>S&&(S=L,M=R)}M&&g.push({route:y,at:M,text:Jl(y,r)})}a.push({bubble:i,...en(i,o),path:c.join(""),labelAt:m,members:l.length,nodeIds:l,whole:l.length>=Zl*e.nodes.length,routes:g})}return a}function Jl(e,t){let n=[...new Set(e.walks.map(t))].sort(),r=n.slice(0,Rr).join(", "),o=n.length>Rr?` +${n.length-Rr}`:"";return`${r}${o} \xB7 ${be(e.bp)}`}function fi(e){if(!e.nodes.some(v))return[];let t=new Map(e.nodes.map(l=>[l.id,l])),n=Qn(e),r=new Map(n.map((l,f)=>[l,f])),o=new Int32Array(n.length+1),s=new Map,a=new Set;for(let l of e.edges){let f=r.get(l.from),m=r.get(l.to);if(f===void 0||m===void 0||f===m)continue;a.add(`${l.from}>${l.to}`).add(`${l.to}>${l.from}`);let[h,b]=f<m?[f,m]:[m,f];o[h+1]++,o[b]--;let[g,y]=f<m?[l.from,l.to]:[l.to,l.from];(s.get(g)??s.set(g,new Set).get(g)).add(y)}for(let l=1;l<o.length;l++)o[l]+=o[l-1];let i=e.nodes.filter(v).sort((l,f)=>l.stable.start-f.stable.start),c=new Set([i[0].id,i.at(-1).id]),d=i.map(l=>[l,r.get(l.id)]).filter(([l,f])=>c.has(l.id)||o[f]===0).sort(([l,f],[m,h])=>f-h||l.stable.start-m.stable.start),p=e.paths?.map(l=>{let f=new Map;return l.nodeIds.forEach((m,h)=>{f.has(m)||f.set(m,h)}),f}),u=[];for(let l=0;l+1<d.length;l++){let[f,m]=d[l],[h,b]=d[l+1],g=n.slice(m+1,b);if(g.length===0)continue;let y=new Map([[f.id,{min:0,max:0,n:1}]]);for(let F of[f.id,...g]){let X=y.get(F);if(X)for(let U of s.get(F)??[]){if(r.get(U)>b)continue;let T=U===h.id?0:t.get(U).length,V=y.get(U);y.set(U,{min:Math.min(V?.min??1/0,X.min+T),max:Math.max(V?.max??-1/0,X.max+T),n:Math.min(Ct,X.n+(V?.n??0))})}}let w=p&&ep(e,t,p,f.id,h.id),M=w?.n?w:void 0,S=M??y.get(h.id)??{min:0,max:0,n:0},x=w!==void 0&&w.left>0,R=f.stable.start+f.length,L=h.stable.start,k=[f.id,...g.filter(F=>v(t.get(F))),h.id],P=k.some((F,X)=>X>0&&!a.has(`${k[X-1]}>${F}`)),_=P||x,$=P&&!M;u.push({refName:f.stable.refName,start:R,end:L,segmentCount:g.length+2,pathCount:S.n,inversion:!1,shortestAlleleLength:$?L-R:S.min,longestAlleleLength:$?L-R:S.max,segments:[f,...g.map(F=>t.get(F)),h].map(F=>F.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:_,routes:M?.routes})}return u}function ep(e,t,n,r,o){let s=new Map,a=1/0,i=-1/0,c=0;return e.paths.forEach((d,p)=>{let u=n[p].get(r),l=n[p].get(o);if(u===void 0||l===void 0){(u!==void 0||l!==void 0)&&c++;return}let f=d.nodeIds.slice(Math.min(u,l)+1,Math.max(u,l));l<u&&f.reverse();let m=0;for(let g of f)m+=t.get(g)?.length??0;let h=f.join(","),b=s.get(h)??{steps:f,bp:m,walks:[]};b.walks.push(d.name),s.set(h,b),a=Math.min(a,m),i=Math.max(i,m)}),s.size||c?{min:a,max:i,n:s.size,left:c,routes:[...s.values()]}:void 0}function mi(e,t){let n=new Set(t),r=e.nodes.filter(a=>n.has(a.name)),o=new Set(r.map(a=>a.id)),s=e.paths?.map(a=>({...a,nodeIds:a.nodeIds.filter(i=>o.has(i))})).filter(a=>a.nodeIds.length>0);return{name:e.name,nodes:r,edges:e.edges.filter(a=>o.has(a.from)&&o.has(a.to)),...s?.length?{paths:s}:{},anchorPaths:e.anchorPaths,pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}function hi(e,t,n){let r=new Map;for(let s of e.nodes)if(v(s)){let{refName:a}=s.stable;if(n[s.id]?.length){let i=r.get(a)??r.set(a,{nodes:[],reach:0}).get(a);i.nodes.push(s),i.reach=Math.max(i.reach,s.length)}}for(let{nodes:s}of r.values())s.sort((a,i)=>a.stable.start-i.stable.start);let o=[];for(let s of t){let a=r.get(s.refName);if(!a)continue;let i=[],c,d=1/0,p=0,u=(s.start+s.end)/2,{nodes:l,reach:f}=a;for(let m=kt(l,s.start-f);m<l.length&&l[m].stable.start<s.end;m++){let h=l[m],b=h.stable.start,g=b+h.length;if(g<=s.start)continue;let y=n[h.id];p+=Math.min(g,s.end)-Math.max(b,s.start);for(let S of s.exons){let x=Math.max(S.start,b),R=Math.min(S.end,g);if(R<=x)continue;let L=Gn(y,(x-b)/h.length,(R-b)/h.length);L.length===1&&L.push({...L[0]}),i.push(Pt(L))}let w=Math.min(Math.max(u,b),g),M=Math.abs(w-u);if(M<d){d=M;let[S]=Gn(y,(w-b)/h.length,(w-b)/h.length);c=S}}c&&o.push({gene:s,exons:i.join(""),at:c,covered:p/(s.end-s.start)})}return o}function gi(e,t){let n=new Set(e.nodes.filter(d=>v(d)&&d.stable.start<t.end&&d.stable.start+d.length>t.start).map(d=>d.id)),r=e.paths??[];if(n.size===0||r.length===0)return e;let o=new Map(e.nodes.map(d=>[d.id,d.length])),s=r.map(d=>{let p=-1,u=-1;return d.nodeIds.forEach((l,f)=>{n.has(l)&&(p<0&&(p=f),u=f)}),p<0?void 0:{first:p,last:u}});if(s.every((d,p)=>d?.first===0&&d.last===r[p].nodeIds.length-1))return e;let a=new Set,i=[],c=new Map;return r.forEach((d,p)=>{let u=s[p];if(u){let l=d.nodeIds.slice(u.first,u.last+1);for(let f of l)a.add(f);i.push({...d,nodeIds:l}),c.set(d.name,d.nodeIds.slice(0,u.first).reduce((f,m)=>f+(o.get(m)??0),0))}}),{...e,nodes:e.nodes.filter(d=>a.has(d.id)),edges:e.edges.filter(d=>a.has(d.from)&&a.has(d.to)),paths:i,pathVisits:e.pathVisits&&tp(e.pathVisits,r,s,new Map(e.nodes.map(d=>[d.id,d.name]))),anchorPaths:e.anchorPaths&&np(e.anchorPaths,r,c)}}function tp(e,t,n,r){let o=new Map,s=new Map;return t.forEach((a,i)=>{let c=j(a.name).name,d=n[i];a.nodeIds.forEach((p,u)=>{let l=r.get(p)??p,f=e.get(l);if(!f)return;let m=`${c} ${l}`,h=o.get(m)??0;for(;h<f.length&&f[h].path!==c;)h++;let b=f[h];if(o.set(m,h+1),b&&d&&u>=d.first&&u<=d.last){let g=s.get(l);g?g.push(b):s.set(l,[b])}})}),s}function np(e,t,n){let r=new Map;for(let o of t){let s=j(o.name).name;r.set(s,(r.get(s)??0)+1)}return e.map(o=>{let s=t.find(i=>j(i.name).name===o.name),a=s?n.get(s.name):void 0;return a&&r.get(o.name)===1?{...o,start:o.start+a}:o})}function rp(e,t,n){let r=j(e.name).name,o=new Map,s=[],a=()=>({a:-1/0,b:1/0,detour:[],bp:0}),i=[a()];for(let c of e.nodeIds){let d=t.get(c);if(!d)continue;let p=o.get(d.name)??0;o.set(d.name,p+1);let u=n.get(`${r} ${d.name}`)?.[p]??ut(d),l=i.at(-1),f=s.at(-1);if(v(d)){let m=d.stable.start,h=m+d.length,b=u!==(d.stable.strand??"+"),g=f!==void 0&&l.detour.length===0;g&&!f.inverted&&!b&&f.end===m?f.end=h:g&&f.inverted&&b&&f.start===h?f.start=m:(s.push({start:m,end:h,inverted:b}),i.push(a()))}else l.detour.push({node:d,strand:u}),l.bp+=d.length}return s.forEach((c,d)=>{i[d].b=c.start,i[d+1].a=c.end}),{path:e,runs:s,gaps:i}}function Lr(e,t){return Number.isFinite(e.a)&&Number.isFinite(e.b)&&e.b>=e.a&&Math.max(e.b-e.a,e.bp)<t}function bi(e,t,n){let r=0,o=e.length;for(;r<o;){let s=r+o>>1;e[s]<=t?r=s+1:o=s}return r<e.length&&e[r]<n}function op(e){let t=new Map;for(let n=1;n<e.length;n++){let r=e[n-1],o=e[n],s=r.stable.start+r.length;s!==o.stable.start&&(t.set(s,"reference-gap"),t.set(o.stable.start,"reference-gap"))}return t}function sp(e,t,n){let r=(o,s)=>{Number.isFinite(o)&&!n.has(o)&&n.set(o,s)};for(let{runs:o,gaps:s}of e){let a=o[0],i=o.at(-1);a&&i&&(r(a.start,"walk-end"),r(i.end,"walk-end"));for(let c of o)c.inverted&&c.end-c.start>=t&&(r(c.start,"inversion"),r(c.end,"inversion"));for(let c of s)c.b<c.a?(r(c.a,"backward"),r(c.b,"backward")):Lr(c,t)||(r(c.a,"variant"),r(c.b,"variant"))}for(let o=!0;o;){o=!1;let s=[...n.keys()].sort((i,c)=>i-c),a=e.flatMap(({runs:i,gaps:c})=>[...c.filter(d=>Lr(d,t)).map(d=>[d.a,d.b]),...i.filter(d=>d.inverted&&d.end-d.start<t).map(d=>[d.start,d.end])]);for(let[i,c]of a)bi(s,i,c)&&(o||=!n.has(i)||!n.has(c),r(i,"overlap"),r(c,"overlap"))}return n}function ap(e,t){let n=[],r=[],o=()=>{let s=r[0],a=r.at(-1);if(s&&a){let i=s.stable.start,c=a.stable.start+a.length,d=`${i}-${c}`;n.push({node:{id:`${d}+`,name:d,length:c-i,depth:0,stable:{refName:s.stable.refName,start:i,rank:0,strand:"+"}},members:r})}r=[]};for(let s of e)t.has(s.stable.start)&&o(),r.push(s);return o(),n}function yi(e,t){let n=e.nodes.filter(v).sort((x,R)=>x.stable.start-R.stable.start),r=e.paths??[];if(n.length===0||r.length===0)return;let o=new Map(e.nodes.map(x=>[x.id,x])),s=ur(e),a=r.map(x=>rp(x,o,s)),i=sp(a,t,op(n)),c=[...i.keys()].sort((x,R)=>x-R),d=ap(n,i),p=d.map(x=>x.node.stable.start),u=x=>{let R=0,L=p.length-1;for(;R<L;){let k=R+L+1>>1;p[k]<=x?R=k:L=k-1}return R},l=new Map,f=new Map;for(let x of d){l.set(x.node.id,x.members.map(R=>R.id));for(let R of x.members)f.set(R.id,x.node.id)}let m=new Map,h=x=>{let R=`${x.a} ${x.b} ${x.detour.map(k=>k.node.id+k.strand).join(",")}`,L=m.get(R);if(!L){let k=`r${m.size}`;L={id:`${k}+`,name:k,length:x.bp,depth:0,stable:{refName:n[0].stable.refName,start:Number.isFinite(x.a)?x.a:x.b,rank:1,strand:"+"}},m.set(R,L),l.set(L.id,x.detour.map(P=>P.node.id));for(let P of x.detour)f.has(P.node.id)||f.set(P.node.id,L.id)}return L},b=new Map,g=[],y=new Map,w=new Map,M=new Map;for(let{path:x,runs:R,gaps:L}of a){let k=[],P=[],_=!1,$=(T,V)=>{let I=k.at(-1);_&&I?.node===T&&I.strand===V||k.push({node:T,strand:V}),_=!0},F=T=>{_=!1,T.detour.length>0&&($(h(T),"+"),_=!1)},X=T=>{(T.bp>0||T.b>T.a)&&P.push({start:T.a,end:T.b,bp:T.bp});let V=d[u(T.b>T.a?T.a:T.a-1)];for(let I of T.detour)f.has(I.node.id)||(f.set(I.node.id,V.node.id),l.get(V.node.id).push(I.node.id))};R.forEach((T,V)=>{let I=L[V];Lr(I,t)&&!bi(c,I.a,I.b)?X(I):F(I);let D=u(T.start),z=u(T.end-1),K=T.end-T.start<t;if(T.inverted&&!K){_=!1;for(let q=z;q>=D;q--)$(d[q].node,"-");_=!1}else{T.inverted&&P.push({start:T.start,end:T.end,bp:T.end-T.start,inverted:!0});for(let q=D;q<=z;q++)$(d[q].node,"+")}}),F(L.at(-1));let U=j(x.name).name,ee=0;k.forEach(({node:T,strand:V},I)=>{M.set(T.id,(M.get(T.id)??0)+1);let D=y.get(T.name)??[];D.push({path:U,sample:x.sample??U,start:ee,strand:V}),y.set(T.name,D),ee+=T.length;let z=k[I+1];if(z){let K=`${T.id}${V} ${z.node.id}${z.strand}`,q=w.get(K);q?q.pathIds.push(x.name):w.set(K,{from:T.id,to:z.node.id,fromStrand:V,toStrand:z.strand,pathIds:[x.name]})}}),g.push({...x,nodeIds:k.map(T=>T.node.id)}),b.set(x.name,P)}let S=[...d.map(x=>x.node),...m.values()].filter(x=>M.has(x.id)).map(x=>({...x,depth:M.get(x.id)}));return{graph:{...e,nodes:S,edges:[...w.values()],paths:g,pathVisits:y,reads:void 0},members:l,coarseOf:f,deviations:b,cuts:i}}var ip=e=>e.bp1>e.bp0;function xi(e,t){let n=e.filter(ip);if(n.length===0){let s=e[0];return s?[{tx:s.x0,sx:t(s.bp0)}]:[]}let r=n.map(s=>({c:s,s0:t(s.bp0),s1:t(s.bp1),trimLeft:0,trimRight:0}));for(let s=0;s+1<r.length;s++){let a=r[s],i=r[s+1],d=Math.min(i.c.x0-a.c.x1,24)-(i.s0-a.s1);if(d>0){let p=(a.s1-a.s0)/2,u=(i.s1-i.s0)/2,l=Math.min(d/2,p),f=Math.min(d-l,u);l=Math.min(d-f,p),a.trimRight=l,i.trimLeft=f}}let o=[];for(let{c:s,s0:a,s1:i,trimLeft:c,trimRight:d}of r)o.push({tx:s.x0,sx:a+c},{tx:s.x1,sx:i-d});return o}function wi(e,t){let n=e.length;if(n===0)return t;let r=e[0],o=e[n-1];if(t<=r.tx)return r.sx+(t-r.tx);if(t>=o.tx)return o.sx+(t-o.tx);let s=0,a=n-1;for(;a-s>1;){let p=s+a>>1;e[p].tx<=t?s=p:a=p}let i=e[s],c=e[a],d=c.tx-i.tx;return d>0?i.sx+(t-i.tx)/d*(c.sx-i.sx):i.sx}var cp=.05,cn=9;function dp(e,t){let{minY:n,maxY:r}=e.layout.bounds,o=r-n;return e.columns&&o>0?Math.max(cp,Math.min(1,t/o)):1}function Mi(e,t){let{scaleX:n,translateX:r,translateY:o}=t,s=t.scaleY*dp(e,t.usableHeight),a=c=>(c-e.yOffset)*s+o,{columns:i}=e;if(i){let c=xi(i,d=>d*n+r);return{x:d=>wi(c,d),y:a,yScale:s}}return{x:c=>c*n+r,y:a,yScale:s}}function Si(e,{x:t,y:n},r,o){let s=null;return e.layout.nodes.forEach(a=>{a.order>=0&&t(a.x-cn)<=r&&r<=t(a.x+a.pixelWidth+cn)&&n(a.y-cn)<=o&&o<=n(a.y+a.contentHeight+cn)&&(s=a.name)}),s}function Ri(e){return e.referencePath?e.paths?.find(t=>j(t.name).name===e.referencePath):void 0}function up(e,t){let n=e.paths?.find(f=>f.name===t);if(!n)return;let r=new Map(e.nodes.map(f=>[f.id,f])),o=new Map;e.edges.forEach((f,m)=>{o.set(`${f.from}>${f.to}`,m)});let s=new Set;for(let f=1;f<n.nodeIds.length;f++){let m=n.nodeIds[f-1],h=n.nodeIds[f],b=o.get(`${m}>${h}`)??o.get(`${h}>${m}`);b!==void 0&&s.add(b)}let a=f=>r.get(f)?.length??0,i=n.nodeIds.reduce((f,m)=>f+a(m),0),c=new Map,d=0;for(let f of n.nodeIds){let m=a(f);c.has(f)||c.set(f,i>0?(d+m/2)/i:0),d+=m}let p=Ri(e),u=j(t).name,l=e.anchorPaths?.find(f=>f.name===u&&f.length===i)??e.anchorPaths?.find(f=>f.name===u);return{name:t,reference:p===n,range:l?{contig:n.contig??Et(l.name),start:l.start,end:l.start+l.length}:void 0,nodeIds:new Set(n.nodeIds),edgeIndexes:s,progress:c,steps:n.nodeIds.length,bp:i,referenceBp:p&&p!==n?p.nodeIds.reduce((f,m)=>f+a(m),0):void 0}}function lp(e,t,n,r){let o=new Map(e.nodes.map(a=>[a.id,a])),s=new Map;for(let[a,i]of t.progress){let c=o.get(a),d=r?.midpoints.get(a),p=n.field==="progress"?i:r&&d!==void 0&&!(c?.stable&&c.stable.rank>0)?(d-r.start)/r.span:void 0;s.set(a,ls(n,p))}return s}function pp(e,t){let n=Ri(e),r=new Set,o=0;if(!n||t.reference)return{reversed:r,bp:o};let s=j(t.name).name,a=j(n.name).name,i=new Map(e.nodes.map(c=>[c.id,c]));for(let c of t.progress.keys()){let d=i.get(c),p=d?e.pathVisits?.get(d.name):void 0,u=p?.find(f=>f.path===s)?.strand,l=p?.find(f=>f.path===a)?.strand;u&&l&&u!==l&&(r.add(c),o+=d.length)}return{reversed:r,bp:o}}function Nr(e,t,n){let r=new Set,o=t.filter(i=>!r.has(i.walk)&&r.add(i.walk)).flatMap(i=>{let c=up(e,i.walk);return c?[{walk:c,layer:i}]:[]}).sort((i,c)=>Number(c.walk.reference)-Number(i.walk.reference));if(o.length===0)return;let s=0,a=o.map(({walk:i,layer:c})=>{let d=cs(c,i.reference,i.reference?0:s++,o.length===1),{reversed:p,bp:u}=pp(e,i);return{...i,encoding:d,colors:lp(e,i,d,n),reversed:p,reversedBp:u}});return{walks:a,referenceDomain:n?{start:n.start,end:n.start+n.span}:void 0,nodeIds:new Set(a.flatMap(i=>[...i.nodeIds])),edgeIndexes:new Set(a.flatMap(i=>[...i.edgeIndexes])),names:new Set(a.map(i=>i.name))}}var We=H(ot(),1),ec=H(dc(),1),B=H(ac(),1),tc=H(ic(),1),E=H(xn(),1),nc=H(Ni(),1),rc=H(si(),1),J=H(Rs(),1);var Er=new Set(["Gff3TabixAdapter","Gff3Adapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),fp=/gene|refseq|gencode|ensembl|annotation/i;function Ei(e,t){if(t)return e.find(r=>r.trackId===t);let n=e.filter(r=>Er.has(r.adapterType));return n.find(r=>fp.test(`${r.trackId} ${r.name??""}`))??n[0]}function ie(e,t){return typeof e.get=="function"?e.get(t):e[t]}function Ai(e,t){ie(e,"type")==="exon"&&t.push({start:ie(e,"start"),end:ie(e,"end")});let r=ie(e,"subfeatures");for(let o of r??[])Ai(o,t)}function mp(e){let t=[...e].sort((r,o)=>r.start-o.start),n=[];for(let r of t){let o=n.at(-1);o&&r.start<=o.end?o.end=Math.max(o.end,r.end):n.push({...r})}return n}function ki(e){let t=[];for(let n of e){let r=ie(n,"gene_name")??ie(n,"name")??ie(n,"id"),o=ie(n,"start"),s=ie(n,"end");if(!r||!(s>o))continue;let a=[];Ai(n,a),t.push({name:r,refName:ie(n,"refName"),start:o,end:s,strand:ie(n,"strand")??0,exons:a.length?mp(a):[{start:o,end:s}]})}return t}var Fe=H(xn(),1);function Ti(e){return t=>e.includes(t)?t:void 0}function Ar(e){return Fe.types.snapshotProcessor(Fe.types.maybe(Fe.types.enumeration(e)),{preProcessor:Ti(e)})}function dn(e,t){return Fe.types.snapshotProcessor(Fe.types.optional(Fe.types.enumeration(e),t),{preProcessor:Ti(e)})}var vr=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),hp=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function vi(e,t){return t?e.find(r=>r.trackId===t):e.filter(r=>vr.has(r.adapterType)).find(r=>hp.test(`${r.trackId} ${r.name??""}`))}function xt(e,t){return typeof e.get=="function"?e.get(t):e[t]}var Ci=/^\w+=[^;]*(;\w+=[^;]*)*$/;function gp(e){let t=xt(e,"name");if(!(typeof t!="string"||!Ci.test(t)))return Object.fromEntries(t.split(";").map(n=>{let r=n.indexOf("=");return[n.slice(0,r),n.slice(r+1)]}))}function ue(e,t){let n=xt(e,t);return n!==void 0?n:xt(e,"INFO")?.[t]??gp(e)?.[t]}var Ii=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],bp=["RUL","period","PERIOD","consensusSize","unit","unitLength"],yp=["TRID","REPID","VARID","ID","name","id"];function un(e,t){for(let n of t){let r=ue(e,n),o=String((Array.isArray(r)?r[0]:r)??"").split(",")[0].trim();if(o!==""&&o!==".")return o}}var Pi=/^[ACGTURYSWKMBDHVN]+$/i;function xp(e){let t=Number(un(e,bp));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=un(e,Ii);return n&&Pi.test(n)?n.length:void 0}function De(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let r=n===""||n===null||n===void 0?NaN:Number(n);return Number.isFinite(r)?r:void 0})}function Tr(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let r=String(n??"").trim();return r===""||r==="."?void 0:r})}var kr="<CNV:TR>";function wp(e){let t=Tr(xt(e,"ALT"));if(!t.includes(kr))return;let n=De(ue(e,"RN")),r=Tr(ue(e,"RUS")),o=De(ue(e,"RUL")),s=De(ue(e,"RUC")),a=De(ue(e,"RB")),i=0;return t.map((c,d)=>{let p=n[d]??(c===kr?1:0),u=0,l=0;for(let f=0;f<p;f++,i++){let m=r[i],h=o[i]??(m&&Pi.test(m)?m.length:void 0),b=s[i],g=a[i]??(h&&b!==void 0?Math.round(h*b):void 0);g!==void 0&&(u+=g,l++)}return c===kr&&p>0&&l===p?u:void 0})}function Mp(e,t,n){let r=e?.includes("|");return(e??"").split(/[/|]/).flatMap((o,s)=>{let a=Number(o),i=a>0?t[a-1]:n;return!Number.isInteger(a)||i===void 0?[]:[{bp:i,...r?{haplotype:s+1}:{}}]})}function Sp(e,t,n){let r=xt(e,"samples"),o={};for(let[s,a]of Object.entries(r??{})){let i=De(a.SD),c=De(a.AL).flatMap((p,u)=>p!==void 0&&p>0?[i[u]===void 0?{bp:p}:{bp:p,spanningReads:i[u]}]:[]),d=c.length>0||!t?c:Mp(Tr(a.GT)[0],t,n);d.length>0&&(o[s]=d)}return Object.keys(o).length>0?o:void 0}function Rp(e,t){let n=ue(e,"start"),r=ue(e,"end"),o=De(ue(e,"SVLEN"))[0];return t&&o!==void 0?{start:n+1,end:n+1+o}:{start:n,end:r}}function Gi(e){let t=[];for(let n of e){let r=wp(n),{start:o,end:s}=Rp(n,r!==void 0),a=xp(n);if(!(s>o)||a===void 0)continue;let i=ue(n,"refName"),c=un(n,Ii),d=un(n,yp);t.push({key:`${i}:${o}-${s}`,name:(d&&!Ci.test(d)?d:void 0)??(c&&c.length<=12?`(${c})n`:`${i}:${(o+1).toLocaleString()}-${s.toLocaleString()}`),refName:i,start:o,end:s,unit:a,motif:c,calls:Sp(n,r,s-o)})}return t.sort((n,r)=>n.start-r.start)}function ln(e){return typeof e=="object"&&e!==null}function Lp(e){return ln(e)&&typeof e.get=="function"}function Np(e){let t=Lp(e)?e.get("name"):ln(e)?e.name:void 0;return typeof t=="string"?t:void 0}function Bi(e){let t;if(ln(e)&&ln(e.hoverPosition)){let{refName:n,coord:r,coord0:o,assemblyName:s}=e.hoverPosition;typeof n=="string"&&typeof r=="number"&&(t={refName:n,coord:typeof o=="number"?o:r-1,assemblyName:typeof s=="string"?s:void 0,featureName:Np(e.hoverFeature)})}return t}function _i(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function Oi({hover:e,nodes:t}){let n,r;for(let o of t)o.name===e.featureName?n=o.id:r===void 0&&v(o)&&e.coord>=o.stable.start&&e.coord<o.stable.start+o.length&&(r=o.id);return n??r??null}var Ir=H(ot(),1);function Fi(e){return typeof e=="object"&&e!==null}function Ep(e){return Fi(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function Cr(e){return e.flatMap(t=>Fi(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function wt({views:e,connectedViewId:t,assemblyName:n}){let r=Cr(e).filter(s=>Ep(s)).filter(s=>s.assemblyNames.includes(n));return r.find(s=>s.id===t)??(r.length===1?r[0]:void 0)}function Wi(e,t,n){n.catch(r=>{console.error(`[GraphGenomeView] ${t}`,r),e.notifyError?.(`${t}: ${r}`,r)})}var Ap=1e3;function Pr(e,t=Ap){let n=Math.max(0,Math.ceil((t-(e.end-e.start))/2));return{...e,start:Math.max(0,e.start-n),end:e.end+n}}function $i(e,t){return t?e.map(n=>n.rank===0?{...n,sample:t.assemblyName,haplotype:void 0,refName:t.refName,start:t.start,end:t.end}:n):e}function Hi({session:e,location:t,assembly:n,connectedViewId:r,tracks:o=[]}){let s=wt({views:e.views,connectedViewId:r,assemblyName:n}),a;return s?(Wi(e,`Could not show ${n} ${Ae(t)}`,Promise.resolve(s.navToLocString(Vt(t),n))),a=s.id):a=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${Ae(t)}`,init:{assembly:n,loc:Vt(t),tracks:o}}).id,a}function Xi({session:e,location:t,assembly:n,connectedViewId:r}){let o=wt({views:e.views,connectedViewId:r,assemblyName:n});return o?.addToHighlights?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),o!==void 0}function Di(e,t){if(t===void 0)return[];let n=e.tracks.find(o=>(0,Ir.readConfObject)(o,"trackId")===t),r=n?(0,Ir.readConfObject)(n,"assemblyNames"):[];return Array.isArray(r)?r.filter(o=>typeof o=="string"):[]}function Yi({session:e,contributors:t,trackId:n,graphTrackId:r}){let o=Di(e,r),s=Di(e,n),a=t.filter(d=>s.includes(d.sample)),i=a.length>=2?a:t,c={init:{views:i.map(d=>({assembly:d.sample,loc:Vt(d),...r!==void 0&&o.includes(d.sample)?{tracks:[r]}:{}})),tracks:n?i.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?Wi(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",c)):e.addView("LinearSyntenyView",c)}var pn=H(ot(),1),kp="FeatureTrack";function qi({session:e,assemblyName:t,first:n}){let r=[];for(let o of e.tracks){let s=(0,pn.readConfObject)(o,"type"),a=(0,pn.readConfObject)(o,"assemblyNames"),i=(0,pn.readConfObject)(o,"trackId");s===kp&&Array.isArray(a)&&a.includes(t)&&typeof i=="string"&&i!==n&&r.push(i)}return n?[n,...r]:r}var fn=H(ot(),1),Vi=H(cc(),1),mn=H(xn(),1),Tp="SyntenyTrack",vp="Synteny adapters";function Cp(e){if((0,fn.readConfObject)(e,"type")===Tp)return!0;let t=e.adapter?.type;if(typeof t!="string"||!(0,mn.isStateTreeNode)(e))return!1;let{pluginManager:n}=(0,mn.getEnv)(e);return!!n?.hasAdapterType(t)&&n.getAdapterType(t).adapterMetadata?.category===vp}function zi(e,t){let n=new Set(t),r=[];for(let o of e.tracks){let s=(0,fn.readConfObject)(o,"assemblyNames"),a=(0,fn.readConfObject)(o,"trackId");if(Cp(o)&&typeof a=="string"&&Array.isArray(s)){let i=s.filter(c=>n.has(c)).length;i>=2&&r.push({trackId:a,name:(0,Vi.getTrackName)(o,e),coverage:i})}}return r.sort((o,s)=>s.coverage-o.coverage)}var Ip=600,Gr=160,Br=8,ji=34,Ui=12,Pp=3,Gp=2.5,Bp=60,_p=5,Ki=new Set(["tubemap","tubemapref"]),Op=[{bp:0,label:"None"},{bp:3,label:"Under 3 bp"},{bp:10,label:"Under 10 bp"},{bp:50,label:"Under 50 bp, leaving structural variants"},{bp:1e3,label:"Under 1 kb"}],Zi=".segs.bed.gz";function Fp(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(Zi)?n.slice(0,-Zi.length):void 0}var Qi=1.4,Dp=1.6,Wp=150,$p=1,Hp={nodeStrokes:[],nodeStrokeRuns:new Map,arrows:[],arrowRuns:new Map,edgeCurves:[],edgeCurveRuns:new Map};function Mt(...e){}var kb=5e6;function Tb(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var Xp=2e4;function Ji(e){return e.builtViewport!==void 0&&e.paintedViewport===e.builtViewport&&e.builtViewport.viewportDirty===e.viewportDirty&&!e.viewportRebuildPending}function _r(e){return ei(e,e.axisScale,e.paneWidth,e.canvasHeight)}var hn=new WeakMap,Yp=4;function qp(e){let t=hn.get(e);return t||(t=new Map,hn.set(e,t)),t}function Vp(e,t){let n=hn.get(e);n&&e!==t&&hn.set(t,n)}function zp(e,t,n){e.size>=Yp&&e.delete(e.keys().next().value),e.set(t,n)}function vb(){return E.types.compose("GraphPane",(0,nc.RenderLifecycleMixin)(),E.types.model({layoutQuality:E.types.optional(E.types.number,2),linearLayout:E.types.optional(E.types.boolean,!1),layoutMode:Ar(fa),colorScheme:Ar(no),bubbleSpread:dn(Qr,"auto"),nodeWidth:dn(oo,"depth"),showBubbles:E.types.optional(E.types.boolean,!1),showDeletionEdges:E.types.optional(E.types.boolean,!1),showGenes:E.types.optional(E.types.boolean,!0),showReferenceStrip:E.types.optional(E.types.boolean,!0),tubeMapFold:E.types.optional(E.types.number,0),geneTrackId:E.types.optional(E.types.string,""),repeatTrackId:E.types.optional(E.types.string,""),repeatKey:E.types.optional(E.types.string,""),walkRowSamples:E.types.maybe(E.types.frozen()),walkLayers:E.types.optional(E.types.frozen(),[]),facet:dn(["none","walk"],"none"),referencePath:E.types.optional(E.types.string,""),showPerf:E.types.optional(E.types.boolean,!1),contigThickness:E.types.optional(E.types.number,6),connectorThickness:E.types.optional(E.types.number,2),darkMode:E.types.optional(E.types.boolean,!1),scale:E.types.optional(E.types.number,1),translateX:E.types.optional(E.types.number,0),translateY:E.types.optional(E.types.number,0),drawPaths:E.types.optional(E.types.boolean,!1),paneHeight:E.types.maybe(E.types.number),maxGraphNodes:E.types.optional(E.types.number,Xp),colorDomain:E.types.maybe(E.types.frozen()),connectedViewId:E.types.maybe(E.types.string)})).volatile(()=>({graph:void 0,graphRegion:void 0,loadedReferencePath:void 0,layoutResult:void 0,legendSize:{width:0,height:0},indexBubbles:void 0,geneFeatures:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredBubble:null,pointerInPane:!1,hoveredEdge:null,selectedNode:null,viewportDirty:0,positionsVersion:0,geometryVersion:0,builtViewport:void 0,paintedViewport:void 0,draggingNode:null,isPanning:!1,viewportOwner:"fit",viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,readsShown:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0,viewportRebuildPending:!1})).views(e=>({get defaultLayoutMode(){return"force"},get defaultColorScheme(){return"auto"},get hasPendingSource(){return!1},get canRetryLoad(){return!1},get sourceTrack(){try{return(0,B.getContainingTrack)(e).configuration}catch{return}}})).views(e=>({get chosenLayoutMode(){return e.layoutMode??e.defaultLayoutMode},get chosenColorScheme(){return e.colorScheme??e.defaultColorScheme}})).views(e=>({get paneWidth(){return(0,B.getContainingView)(e).width},get drawnGraph(){return e.layoutResult?.tubeMap?.coarse?.graph??e.graph}})).views(e=>({get nodeById(){if(e.drawnGraph){let t=new Map;for(let n of e.drawnGraph.nodes)t.set(n.id,n);return t}},get nodeLengths(){let t=new Map;for(let n of e.drawnGraph?.nodes??[])t.set(n.id,n.length);return t},get nodeCount(){return e.graph?.nodes.length??0},get edgeCount(){return e.graph?.edges.length??0},get pathCount(){return e.graph?.paths?.length??0},get hasGraph(){return e.graph!==void 0},get geometryPainted(){return Ji(e)},get showLoading(){return e.error===void 0&&(e.isLoading||e.hasPendingSource||e.graph!==void 0&&!Ji(e))},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?ma(e.chosenLayoutMode,e.graph):!1},get canAnchorLayout(){return e.graph?.nodes.some(t=>t.stable?.rank===0)??!1},get anchorPaths(){return e.graph?.anchorPaths??[]},get pathLegend(){let t=e.graph?.paths,n=e.layoutResult?.tubeMap;return(e.drawPaths||n)&&t&&Rn(t.length)?Ln(t,n?.pathColors):[]},get walkChoices(){let t=e.graph?.paths;return t?.length?Ln(t):[]},get effectiveDrawPaths(){return e.drawPaths&&Rn(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get rampDomain(){return e.colorDomain??e.graphRegion},get walkLift(){let{graph:t}=e;return t&&e.walkLayers.length>0?Nr(t,e.walkLayers,Xt(t,this.rampDomain)):void 0},get facetPanels(){let{graph:t}=e,n=this.walkLift;if(e.facet!=="walk"||!t||!n||n.walks.length<2)return;let r=Xt(t,this.rampDomain);return n.walks.flatMap(o=>{let s=e.walkLayers.find(i=>i.walk===o.name),a=Nr(t,[{walk:o.name,color:{field:"progress",scheme:"red",...s?.color}}],r);return a?[a]:[]})},get effectiveColorScheme(){return ro(e.chosenColorScheme,e.graph)},get nodePositions(){return e.layoutResult?.nodePositions},get labelsNodeSizes(){return!e.layoutResult?.tubeMap&&!this.walkLift},get rowLabels(){return e.layoutResult?.rowLabels??[]},get alleleDeletions(){return e.layoutResult?.alleleDeletions??[]},get pixelRows(){return e.layoutResult?.pixelRows??!1},get zoomPercent(){return`${(e.scale*100).toFixed(1)}%`},get isDefaultViewport(){return e.scale===1&&e.translateX===0&&e.translateY===0}})).views(e=>({get poppedFrom(){return e.popStack.at(-1)},get derivedBubbles(){return e.graph?fi(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get sourceAdapter(){let t=e.sourceTrack;return t?(0,We.readConfObject)(t,"adapter"):void 0},get sourceTrackId(){let t=e.sourceTrack;return t?(0,We.readConfObject)(t,"trackId"):void 0},get assemblyTrackChoices(){let t=e.graphRegion;return t?(0,B.getSession)(e).tracks.filter(n=>(0,We.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,We.readConfObject)(n,"name"),adapterType:(0,We.readConfObject)(n,"adapter").type})):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>Er.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>vr.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return vi(e.repeatTrackChoices,e.repeatTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)},get backbone(){return e.graph?Wr(e.graph):void 0},assemblySpellings(t){let{assemblyManager:n}=(0,B.getSession)(e),r=n.has(t)?n.get(t):void 0,o=e.sourceAdapter?.assemblyNameToPanSN??{},s=[t,...r?[r.name,...r.aliases]:[]];return{name:t,aliases:[...s,...s.flatMap(a=>o[a]??[])]}},get drawsLoadedReference(){let t=e.graph;return t?.anchoredBy==="tags"||t?.referencePath!==void 0&&t.referencePath===e.loadedReferencePath}})).views(e=>({get geneAssembly(){let t=e.graphRegion;return t?e.assemblySpellings(t.assemblyName):void 0}})).views(e=>({get backboneGenes(){let{backbone:t,geneAssembly:n,geneFeatures:r}=e,o=e.drawsLoadedReference||n!==void 0&&$r(t,[n])!==void 0;return t&&r&&o?Xr(r,t):void 0}})).views(e=>({get nodeNeighbors(){return e.drawnGraph?he(e.drawnGraph):void 0},get nodeInk(){return ao(e.drawnGraph,e.nodeById,e.contigThickness,e.nodeWidth)},get deletions(){return e.graph&&e.chosenLayoutMode!=="walkrows"&&!e.layoutResult?.tubeMap?vo(e.graph):[]},get walkRowBars(){if(e.chosenLayoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?mt(e.graph,t,t.unit):mt(e.graph,e.graphRegion);if(!n)return;let r=e.walkRowSamples,o=r?n.rows.filter(i=>r.includes(i.sample)).sort((i,c)=>r.indexOf(i.sample)-r.indexOf(c.sample)||i.label.localeCompare(c.label)):n.rows,[s,...a]=li([n.reference,...o],t?.calls);return{...n,reference:s,rows:a}},get drawnRowLabels(){let t=this.walkRowBars;return t?[t.reference,...t.rows].map((n,r)=>({label:n.label,y:r*20})):e.rowLabels},get fitPadLeft(){return Math.max(Q,...this.drawnRowLabels.map(t=>Wt(t.label,0).x1+6))},get genePins(){Mt(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&e.chosenLayoutMode!=="walkrows"&&!e.layoutResult?.tubeMap&&e.graph&&e.backboneGenes&&t?hi(e.graph,e.backboneGenes,t):[]},get bubbleHalos(){Mt(e.positionsVersion);let t=e.layoutResult?.nodePositions;if(!e.showBubbles||e.chosenLayoutMode==="walkrows"||e.layoutResult?.tubeMap||!e.graph||!t)return[];let n=new Map(e.walkChoices.map(r=>[r.name,r.label]));return pi(e.graph,e.bubbles,t,r=>n.get(r)??r,e.repeatArrays)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.graph&&!e.layoutResult?.tubeMap?Xt(e.graph,e.rampDomain):void 0},get assemblyNames(){let t=e.graphRegion;return t?[t.assemblyName]:[]},get scaleX(){return sn(e.scale,e.pixelRows).scaleX},get scaleY(){return sn(e.scale,e.pixelRows).scaleY},get axisScale(){return sn(e.scale,e.pixelRows)},get layoutBounds(){let t=e.layoutResult,n=this.walkRowBars;return t?Ea(t,{region:e.popStack.length===0?e.graphRegion:void 0,extent:n&&t.extent?pr(n):void 0}):void 0}})).views(e=>({get geneTrack(){return Ei(e.geneTrackChoices,e.geneTrackId)},get deletionEdgeIndexes(){return new Map(e.deletions.map(t=>[t.edgeIndex,t.bypassed]))},get hiddenEdgeIndexes(){return new Set(e.showDeletionEdges?[]:e.deletions.map(t=>t.edgeIndex))},get referenceRampDomain(){let t=e.referenceRamp;return t?{start:t.start,end:t.start+t.span}:void 0},nodeSpan(t){let{nodeById:n,nodeNeighbors:r}=e;return n&&r?dt({nodeId:t,nodeById:n,neighbors:r}):void 0}})).views(e=>({get hoveredSpan(){let t=e.hoveredNode,n=e.hoveredBubble;return t!==null?e.nodeSpan(t):n?{start:n.start,end:n.end}:void 0}})).views(e=>({get hoverHighlight(){let t=e.graphRegion,n=e.hoveredSpan;return t&&n?{refName:t.refName,assemblyName:t.assemblyName,...n}:void 0}})).views(e=>({get contributingAssemblies(){let t=e.graph,n=t?Le(t):[];return t?fs(t,{maxGap:n.length>0?Dr(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,B.getSession)(e),n=e.sourceAdapter?.assemblyNameToPanSN,r=new Map(Object.entries(n??{}).map(([s,a])=>[a,s])),o=s=>s!==void 0&&t.has(s)?t.get(s)?.name??s:void 0;return s=>o(r.get(s))??o(s)}})).views(e=>({get launchableAssemblies(){return ms($i(e.contributingAssemblies,e.graphRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.graphRegion;return t!==void 0&&wt({views:[...(0,B.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),r=n?qt(n):void 0,o=r?jn(e.assemblyResolver,r):void 0,s=e.graphRegion,a=e.nodeById,i=e.nodeNeighbors,c=s&&a&&i?dt({nodeId:t,nodeById:a,neighbors:i}):void 0,d=s&&c?{sample:s.assemblyName,haplotype:void 0,refName:s.refName,...c}:void 0;return{own:r&&o?{location:Pr(r),assembly:o}:void 0,reference:s&&d?{location:Pr(d),assembly:s.assemblyName}:void 0,highlight:s&&d?{location:d,assembly:s.assemblyName}:void 0}}})).views(e=>({get host(){let t;try{t=(0,B.getContainingView)(e)}catch{return}return ai(t)?t:void 0}})).views(e=>({get xIsReferenceBp(){return e.layoutResult?.referenceAxis===!0&&Jt(e.chosenLayoutMode).cutMargins}})).views(e=>({get hostPlacesX(){let{host:t,graphRegion:n}=e;return t!==void 0&&t.initialized&&n!==void 0&&e.xIsReferenceBp&&e.popStack.length===0&&!t.dynamicBlocks.contentBlocks.some(r=>r.refName===n.refName&&r.reversed)}})).views(e=>({get hostFrame(){let{host:t,graphRegion:n}=e;return e.hostPlacesX&&t&&n?an(t,n):void 0},get tubeMapPicture(){let t=e.layoutResult?.tubeMap;return t?Ka(t.layout):void 0},get tubeMapReference(){let t=e.layoutResult?.tubeMap;return t&&e.drawnGraph?Ga(e.drawnGraph,t.layout):void 0},get tubeMapDeviations(){let t=e.layoutResult?.tubeMap?.coarse,n=e.layoutResult?.tubeMap?.layout;return t&&n?Ha(t.graph,n,t.deviations):[]},get tubeMapReferenceNodes(){let t=e.layoutResult;return t?.tubeMap&&!t.referenceAxis&&e.drawnGraph?Da(e.drawnGraph,t.tubeMap.layout):void 0}})).views(e=>({get tubeMapGenes(){let t=e.tubeMapReference;return e.showGenes&&!e.host&&t&&e.backboneGenes?Qa(t,e.backboneGenes):[]},get referenceStripApplies(){let{host:t,layoutResult:n}=e;return!!t?.initialized&&!!n&&!n.tubeMap&&!e.hostPlacesX&&e.chosenLayoutMode!=="walkrows"}})).views(e=>({get referenceStripBlocks(){let{graph:t}=e;return e.showReferenceStrip&&e.referenceStripApplies&&t?va(t,{colorScheme:e.effectiveColorScheme,referenceRamp:e.referenceRamp,walkNodes:e.walkLift?.nodeIds,walkColors:e.walkLift?.walks.find(n=>n.reference)?.colors}):[]},get referenceStripFrame(){let{host:t,graphRegion:n}=e;return t?.initialized&&n?an(t,n):void 0}})).views(e=>({get referenceStripShown(){return e.referenceStripBlocks.length>0&&e.referenceStripFrame!==void 0},get referenceStripOverhangs(){let t=e.referenceStripFrame;if(!t||e.referenceStripBlocks.length===0)return!1;let{left:n,right:r}=xr(e.referenceStripBlocks,t,e.paneWidth);return n>0||r>0}})).views(e=>({get referenceStripLit(){if(!e.referenceStripShown)return;let t=s=>({x:s.x*e.scaleX+e.translateX,y:s.y*e.scaleY+e.translateY}),n=e.hoveredNode===null?e.hoveredBubble:null;if(n){let s=e.bubbleHalos.find(a=>eo(a.bubble,n));return{start:n.start,end:n.end,anchor:s?t(s.labelAt):void 0}}let r=e.hoveredNode??e.selectedNode,o=r===null?void 0:e.nodeSpan(r);return o&&r!==null?{...o,anchor:Ia(e.nodePositions?.[r],t)}:void 0},referenceStripNodeAt(t,n){let r=e.referenceStripFrame;return e.referenceStripShown&&r?Ca(e.referenceStripBlocks,r,t,n):void 0},get referenceStripZonePx(){return e.referenceStripShown?yr:0}})).views(e=>({get paneCeiling(){return Math.max(Gr,e.paneHeight??Ip)},get fitPadTop(){let t=Ja(e.tubeMapGenes);return Q+Math.max(0,t-1)*on+e.referenceStripZonePx},get minFitScale(){let t=e.layoutBounds,n=e.layoutResult,r=n?.tubeMap?.layout.tracks[0]?.width;return t&&t.h>0&&r&&!n.referenceAxis?Math.min(_p/r,(this.paneCeiling-this.fitPadTop-Q)/t.h):0},get fitPadRight(){return e.walkLift?Math.max(Q,e.legendSize.width+2*it):Q},get facetGrid(){let t=e.facetPanels,n=e.layoutBounds;if(!t||!n||!(n.w>0))return;let r=n.w>Gp*n.h?1:Math.min(t.length,Pp),o=Math.ceil(t.length/r),s=Math.floor((e.paneWidth-(r-1)*Br)/r),a=e.pixelRows?n.h:n.h*(s-2*Ui)/n.w,i=(this.paneCeiling-o*ji-(o-1)*Br)/o,c=Math.floor(Math.max(Bp,Math.min(a+2*Ui,i)));return{columns:r,width:s,height:c,total:o*(c+ji)+(o-1)*Br}},get canvasHeight(){let t=e.layoutBounds,n=e.paneWidth-Q-this.fitPadRight,r=this.paneCeiling;if(!t)return r;let o=this.facetGrid;if(o)return Math.max(Gr,o.total);let s=Math.max(Gr,e.legendSize.height+2*it+e.referenceStripZonePx);return e.pixelRows?Math.min(r,Math.max(s,t.h+this.fitPadTop+Q)):t.w>0&&n>0?Math.min(r,Math.max(s,t.h*Math.max(n/t.w,this.minFitScale)+this.fitPadTop+Q)):r},get fittedTransform(){let t=e.layoutBounds;return t?Na(t,e.paneWidth,this.canvasHeight,e.pixelRows,{minScale:this.minFitScale,padLeft:e.fitPadLeft,padTop:this.fitPadTop,padRight:this.fitPadRight}):void 0}})).views(e=>({get overlayLabels(){return Xo(e)},get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?Mi(t,{scaleX:e.scaleX,translateX:e.translateX,scaleY:e.scaleY,translateY:e.translateY,usableHeight:e.canvasHeight-e.fitPadTop-Q}):void 0}})).views(e=>({get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX?Ba(t):void 0},get connectorZoneBottom(){let t=e.tubeMapPicture,n=e.tubeMapFrame;return t&&n?n.y(t.bounds.minY)-2:0},get tubeMapConnectors(){let t=e.tubeMapReferenceNodes,n=e.tubeMapFrame,{host:r,graphRegion:o}=e,s=t&&n&&r?.initialized&&o?an(r,o):void 0;return t&&n&&s?Wa(t,a=>a*s.scale+s.translateX,n.x,e.paneWidth):[]}})).views(e=>({get tubeMapKeys(){let t=e.layoutResult,n=t?.tubeMap?.layout.reads??[],r=e.tubeMapPicture,o=e.tubeMapFrame,s=r&&o&&Sr(o.yScale)?r.mismatches.filter(a=>nn(a,{x:o.x,width:e.paneWidth})):[];return{logWidths:t?.tubeMap!==void 0&&!t.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:n.some(a=>!a.is_reverse),reverseReads:n.some(a=>a.is_reverse),mismatches:new Set(s.map(a=>a.kind))}},tubeMapNodeAt(t,n){let r=e.layoutResult?.tubeMap,o=e.tubeMapFrame;return(r&&o?Si(r,o,t,n):null)??$a(e.tubeMapConnectors,e.connectorZoneBottom,t,n)??null}})).actions(e=>({setError(t){e.error=t,e.isLoading=!1,e.statusMessage=""},finishLoading(){e.isLoading=!1,e.statusMessage=""},setStatusMessage(t){e.statusMessage=t},setFetchMs(t){e.lastFetchMs=t},setLayoutMs(t){e.lastLayoutMs=t},setGeometryMetrics(t,n,r){e.lastGeometryMs=t,e.lastGeometryStrokeCount=n,e.builtViewport={...r,viewportDirty:e.viewportDirty},e.geometryVersion++},markPainted(){e.paintedViewport=e.builtViewport},setLayoutQuality(t){e.layoutQuality=t},setLinearLayout(t){e.linearLayout=t},setLayoutMode(t){e.layoutMode=t},setReferencePath(t){e.referencePath=t;let n=e.graph;if(n?.anchoredBy==="paths"){let r=wn(n,t);Vp(n,r),e.graph=r}},setDrawPaths(t){e.drawPaths=t},setShowPerf(t){e.showPerf=t},setColorScheme(t){e.colorScheme=t},setBubbleSpread(t){e.bubbleSpread=t},setNodeWidth(t){e.nodeWidth=t},setShowBubbles(t){e.showBubbles=t},setShowDeletionEdges(t){e.showDeletionEdges=t},setShowGenes(t){e.showGenes=t},setShowReferenceStrip(t){e.showReferenceStrip=t},setTubeMapFold(t){e.tubeMapFold=t},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setWalkLayers(t){e.walkLayers=t},liftWalks(t){let n=new Map(e.walkLayers.map(r=>[r.walk,r]));e.walkLayers=t.map(r=>n.get(r)??{walk:r})},setFacet(t){e.facet=t},toggleWalk(t){let n=e.walkLayers;e.walkLayers=n.some(r=>r.walk===t)?n.filter(r=>r.walk!==t):[...n,{walk:t}]},setWalkColor(t,n){e.walkLayers=e.walkLayers.map(r=>r.walk===t?{...r,color:{...r.color,...n}}:r)},setPaneHeight(t){e.paneHeight=t},setWalkRowSamples(t){e.walkRowSamples=t},pairWithLinearView(t){let n=e.connectedViewId;n!==void 0&&Cr([...(0,B.getSession)(e).views]).some(o=>o.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=t},setHoveredBubble(t){e.hoveredBubble=t},setPointerInPane(t){e.pointerInPane=t},setLegendSize(t){e.legendSize=t},setHoveredEdge(t){e.hoveredEdge=t},setSelectedNode(t){e.selectedNode=t},setDraggingNode(t){e.draggingNode=t},setPanning(t){e.isPanning=t},stopDragging(){e.draggingNode=null,e.isPanning=!1},clearInteractionState(){e.hoveredNode=null,e.hoveredBubble=null,e.hoveredEdge=null,e.selectedNode=null,e.draggingNode=null,e.isPanning=!1},showNodeDetails(t){let n=e.nodeById?.get(t),r=e.nodeById,o=e.nodeNeighbors;if(n&&r&&o){let s=(0,B.getSession)(e),a=e.graphRegion,i=a?dt({nodeId:t,nodeById:r,neighbors:o}):void 0;(0,B.isSessionModelWithWidgets)(s)&&s.showWidget(s.addWidget("BaseFeatureWidget","baseFeature",{featureData:{id:n.id,name:n.name,length:n.length,depth:n.depth,rank:n.stable?.rank,stableName:n.stable?.refName,contributingAssembly:qt(n)?.sample,contributingHaplotype:qt(n)?.haplotype,carriedBy:n.samples?.join(", "),...a&&i?{refName:a.refName,assemblyName:a.assemblyName,start:i.start,end:i.end}:{}}}))}},setTransform(t,n,r){let{host:o}=e;e.viewportOwner==="host"&&o?o.horizontalScroll(e.translateX-n):(e.viewportOwner="user",e.scale=yt(t),e.translateX=n),e.translateY=r},zoom(t,n,r){let{host:o}=e;if(e.viewportOwner==="host"&&o){o.zoomTo(o.bpPerPx/t,n);return}e.viewportOwner="user";let s=ri(e,t,n,r,e.pixelRows);e.scale=s.scale,e.translateX=s.translateX,e.translateY=s.translateY},setViewportDirty(){e.viewportRebuildPending=!1,e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){if(e.viewportOwner==="host"){let n=e.layoutBounds,r=e.canvasHeight-Q*2;n&&r>0&&(e.translateY=hr(n,r,e.scaleY));return}let t=e.fittedTransform;t&&(e.scale=t.scale,e.translateX=t.translateX,e.translateY=t.translateY)},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>({hostTransform(t,n){let r=e.viewportOwner!=="host";r&&(e.viewportOwner="host"),e.scale=t,e.translateX=n,r&&e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.xIsReferenceBp?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportRebuildPending=!0,e.viewportDirtyTimer=setTimeout(()=>{(0,E.isAlive)(e)&&e.setViewportDirty()},Wp)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,E.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(r,o,s){let a=e.layoutResult?.nodePositions;if(a?.[r]){for(let i of a[r])i.x+=o,i.y+=s;n()}},scheduleViewportDirty:t}}).actions(e=>{let t;function n(g){let{rpcManager:y}=(0,B.getSession)(e);return y.call((0,B.getRpcSessionId)(e),"GraphComputeLayout",{...g,signal:t?.signal,statusCallback:w=>{e.setStatusMessage((0,B.statusMessageText)(w)??"")}})}function r(g){return Ra(g,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread})}function*o(g){let y=performance.now(),w=Ki.has(e.chosenLayoutMode),M=e.graphRegion,S=w&&M?gi(g,M):g,x=w&&e.tubeMapFold>0&&!S.reads?yi(S,e.tubeMapFold):void 0,R=Jt(e.chosenLayoutMode).run(x?.graph??S,e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(R)return{result:x&&R.tubeMap?{...R,tubeMap:{...R.tubeMap,coarse:x}}:R,duration:performance.now()-y};let L=qp(g),k=r(g),P=L.get(k);if(P)return{result:P,duration:performance.now()-y};let _=yield La(g,{quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread},n);return zp(L,k,_.result),_}let s=0;function*a(g){let y=++s,w=()=>e.graph===g&&y===s,M=t?.signal,S;try{S=yield*o(g)}catch(R){if(!w()||M?.aborted)return!1;throw R}let x=w();return x&&(e.layoutResult=S.result,e.setLayoutMs(S.duration)),x}function i(g,y){let w=g.anchorPaths;return g.anchoredBy==="paths"&&w?(Hr(g,e.assemblySpellings(y.assemblyName))??Vr(w,y.assemblyName))?.name:void 0}function*c(g,y,w,M=!1,S){let x=t?.signal;e.setStatusMessage("Parsing GFA");let R=Sa(g,y,{referencePath:e.referencePath||w?.assemblyName,maxNodes:e.maxGraphNodes}),L=w?i(R,w):void 0,k=!e.referencePath&&L!==void 0&&L!==R.referencePath?wn(R,L):R;if(S){e.setStatusMessage("Reading alignments");try{let{records:_,total:$}=yield S(k);k.reads=_,e.readsShown={shown:_.length,total:$}}catch(_){if(x?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",_),e.readsShown=void 0}if(x?.aborted)return}else e.readsShown=void 0;let P=M?e.selectedNode:null;e.graph=k,e.graphRegion=w,e.loadedReferencePath=L,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),P!==null&&e.nodeById?.has(P)&&(e.selectedNode=P),e.setStatusMessage("Computing layout"),yield*a(k)}let d=0;function p(){let g=++d;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>g===d,signal:t.signal}}function*u(g,y,w){let M=Fp(g);if(!(g.type!=="RgfaTabixAdapter"||M===void 0))try{let S=yield(0,B.getSession)(e).rpcManager.call((0,B.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${M}.bubbles.bed.gz`,baseUri:g.baseUri,assemblyNameToPanSN:g.assemblyNameToPanSN},regions:[y]});w()&&(e.indexBubbles=S.map(x=>({refName:y.refName,start:x.get("start"),end:x.get("end"),segmentCount:x.get("segmentCount"),pathCount:x.get("pathCount")??0,inversion:x.get("inversion"),shortestAlleleLength:x.get("shortestAlleleLength"),longestAlleleLength:x.get("longestAlleleLength"),segments:x.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(S){console.warn("[GraphGenomeView] no bubble index for this graph",S)}}function*l(g,y,w){let M=(0,B.getSession)(e),S=g?M.tracks.find(x=>x.trackId===g):void 0;if(S)try{return yield M.rpcManager.call((0,B.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:(0,We.readConfObject)(S,"adapter"),regions:[y]})}catch(x){console.warn(`[GraphGenomeView] no ${w} for this graph`,x);return}}function*f(g,y){let w=yield*l(e.geneTrack?.trackId,g,"genes");w&&y()&&(e.geneFeatures=ki(w))}function*m(g,y){let w=yield*l(e.repeatTrack?.trackId,g,"repeats");w&&y()&&(e.repeatArrays=Gi(w))}function*h(g,y,w){let{isLive:M,signal:S}=p();e.isLoading=!0,e.error=void 0;try{let x=typeof y=="string"?y:yield y(S);M()&&(yield*c(x,g,w))}catch(x){M()&&(console.error("[GraphGenomeView.loadWholeGFA]",x),e.error=x)}finally{M()&&e.finishLoading()}return M()}function b(){t?.abort(),t=void 0,d++,s++}return{clearGraph(){b(),e.graph=void 0,e.graphRegion=void 0,e.loadedReferencePath=void 0,e.layoutResult=void 0,e.indexBubbles=void 0,e.geneFeatures=void 0,e.repeatArrays=void 0,e.popStack=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearInteractionState(),e.clearPerfMetrics()},stopLoad(){b(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){b()},loadGFA:(0,E.flow)(function*(g,y="Imported GFA"){yield*h(y,g)}),loadGFAFromLocation:(0,E.flow)(function*(g,y){e.setStatusMessage("Fetching GFA");let w=yield*h("uri"in g?g.uri.split("/").pop()??"GFA":"GFA",M=>(0,tc.openLocation)(g).readFile({encoding:"utf8",signal:M}),y);y&&w&&e.graph&&(yield*m(y,()=>e.graphRegion===y))}),cutSubgraph:(0,E.flow)(function*(g,y,w={}){let{isLive:M,signal:S}=p();e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let x=performance.now(),R=yield(0,B.getSession)(e).rpcManager.call((0,B.getRpcSessionId)(e),"GetSubgraph",{adapterConfig:g,region:y,opts:w,signal:S});if(!M())return;if(e.setFetchMs(performance.now()-x),!R)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");if(yield*c(R,Ae(y),y,!0,mo(g)?L=>(0,B.getSession)(e).rpcManager.call((0,B.getRpcSessionId)(e),"GetGraphReads",{adapterConfig:g,nodeNames:L.nodes.map(k=>k.name),signal:S}):void 0),!M())return;e.setStatusMessage("Reading annotations"),yield Promise.all([w.tier==="coarse"?void 0:(0,E.flow)(u)(g,y,M),(0,E.flow)(f)(y,M),(0,E.flow)(m)(y,M)])}catch(x){M()&&(console.error("[GraphGenomeView.cutSubgraph]",x),e.error=x)}finally{M()&&e.finishLoading()}}),reloadRepeats:(0,E.flow)(function*(){let g=e.graphRegion,y=e.repeatTrack?.trackId;g&&(yield*m(g,()=>e.graphRegion===g&&e.repeatTrack?.trackId===y))}),reloadGenes:(0,E.flow)(function*(){let g=e.graphRegion,y=e.geneTrack?.trackId;g&&(yield*f(g,()=>e.graphRegion===g&&e.geneTrack?.trackId===y))}),popBubble:(0,E.flow)(function*(g){let y=e.graph;if(!y)return;let w=mi(y,tn(g));if(w.nodes.length===0){(0,B.getSession)(e).notify("None of the segments of this bubble are in the cut; widen the graph context to open it","info");return}let{isLive:M}=p();e.popStack=[...e.popStack,{graph:y,layoutMode:e.chosenLayoutMode,label:y.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let S=`${ga[en(g,e.repeatArrays).kind]} at ${g.refName}:${g.start.toLocaleString()}`;e.graph={...w,name:S},e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*a(e.graph))&&e.finishLoading()}catch(x){M()&&(e.error=x,e.finishLoading())}}),unpopBubble:(0,E.flow)(function*(){let g=e.poppedFrom;if(g){e.popStack=e.popStack.slice(0,-1),e.graph=g.graph,e.layoutMode=g.layoutMode,e.indexBubbles=g.indexBubbles,e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*a(g.graph))&&e.finishLoading()}catch(y){e.error=y,e.finishLoading()}}}),recomputeLayout:(0,E.flow)(function*(){let g=e.graph;if(g){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*a(g))&&e.finishLoading()}catch(y){console.error("[GraphGenomeView.recomputeLayout]",y),e.error=y,e.finishLoading()}}})}}).actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,E.addDisposer)(e,(0,J.autorun)(()=>{e.fittedTransform&&(0,J.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,E.addDisposer)(e,(0,J.autorun)(()=>{let r=Bi((0,B.getSession)(e).hovered);(0,J.untracked)(()=>{let o=e.graphRegion,s=e.graph;o&&s&&!e.pointerInPane&&e.setHoveredNode(r&&_i(r,o)?Oi({hover:r,nodes:s.nodes}):null)})})),(0,E.addDisposer)(e,(0,J.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredBubble(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,E.addDisposer)(e,(0,J.autorun)(()=>{let{scale:r}=e,o=_r(e);if(n){n=!1;return}let s=(0,J.untracked)(()=>e.builtViewport);s?.scale===r&&ni(s.bounds,o)||e.scheduleViewportDirty()})),(0,E.addDisposer)(e,(0,J.autorun)(()=>{let r=e.currentRenderingBackend,o=e.hoveredNode,s=e.hoveredEdge,a=e.selectedNode;if(Mt(e.geometryVersion),r){let i=new Map;a!==null&&i.set(a,Dp),o!==null&&o!==a&&i.set(o,Qi),r.setNodeHighlights(i),r.setEdgeHighlight(s,Qi),e.renderNow()}}))}e.attachRenderingBackend(t,()=>({upload:n=>{n.resize(e.paneWidth,e.canvasHeight);let r=e.nodeById;if(e.layoutResult?.tubeMap)return Mt(e.viewportDirty),n.uploadGeometry(Hp),e.setGeometryMetrics(0,0,{scale:(0,J.untracked)(()=>e.scale),bounds:(0,J.untracked)(()=>_r(e))}),!0;if(e.nodePositions&&e.graph&&r){Mt(e.viewportDirty,e.positionsVersion);let o=performance.now(),s=(0,J.untracked)(()=>ti(_r(e),$p)),a=ns({nodePositions:e.nodePositions,graph:e.graph,nodeById:r,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:e.effectiveDrawPaths,nodeWidth:e.nodeWidth,highlight:e.walkLift,axis:(0,J.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:s,referenceRamp:e.referenceRamp,deletions:e.deletionEdgeIndexes,hiddenEdges:e.hiddenEdgeIndexes,version:e.positionsVersion});return n.uploadGeometry(a),e.setGeometryMetrics(performance.now()-o,a.nodeStrokes.length,{scale:(0,J.untracked)(()=>e.scale),bounds:s}),!0}return!1},render:n=>{if(!e.nodePositions)return!1;let r=(0,rc.getDpr)();return n.updateTransform({scaleX:e.scaleX*r,scaleY:e.scaleY*r,translateX:e.translateX*r,translateY:e.translateY*r,dpr:r}),n.render(e.darkMode?[.12,.12,.12,1]:[1,1,1,1]),e.markPainted(),!0}}))}})).actions(e=>({switchLayout(t){return e.setLayoutMode(t),e.recomputeLayout()},cancelLoad(){e.canCancelLoad&&(e.stopLoad(),e.graph=void 0)},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user")}})).actions(e=>({showInLinearView(t){let n=(0,B.getSession)(e),r=t.assembly===e.graphRegion?.assemblyName,o=Hi({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:qi({session:n,assemblyName:t.assembly,first:r?e.sourceTrackId:void 0})});r&&e.pairWithLinearView(o)},highlightInLinearView(t){Xi({session:(0,B.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){Yi({session:(0,B.getSession)(e),contributors:e.launchableAssemblies,trackId:t,graphTrackId:e.sourceTrackId})}})).views(e=>({get syntenyLaunchTracks(){let t=e.launchableAssemblies.map(n=>n.sample);return t.length>=2?zi((0,B.getSession)(e),t):[]}})).views(e=>({graphMenuItems(){let t=e.walkChoices;return[{label:"Layout",subMenu:ht.map(n=>({type:"radio",label:n.label,checked:e.chosenLayoutMode===n.value,disabled:e.graph?!n.available(e.graph):!1,onClick:()=>{e.switchLayout(n.value)}}))},{label:"Color",subMenu:to.map(n=>({type:"radio",label:n.label,checked:e.chosenColorScheme===n.value,onClick:()=>{e.setColorScheme(n.value)}}))},...t.length>0?[{label:"Walk",subMenu:[{label:"None",onClick:()=>{e.setWalkLayers([])}},...e.walkLayers.length>1?[{type:"checkbox",label:"Side by side",checked:e.facet==="walk",onClick:()=>{e.setFacet(e.facet==="walk"?"none":"walk")}}]:[],...t.map(n=>({type:"checkbox",label:n.label,checked:e.walkLayers.some(r=>r.walk===n.name),onClick:()=>{e.toggleWalk(n.name)}})),...(e.walkLift?.walks??[]).map(n=>({label:`Colour ${t.find(r=>r.name===n.name)?.label??n.name}`,subMenu:[{type:"subHeader",label:"Colour by"},...zn.map(r=>({type:"radio",label:r.label,checked:n.encoding.field===r.value,onClick:()=>{e.setWalkColor(n.name,{field:r.value})}})),{type:"subHeader",label:"Palette"},...Yt.filter(r=>r.value!=="rainbow"||n.encoding.field==="reference").map(r=>({type:"radio",label:r.label,checked:n.encoding.scheme===r.value,onClick:()=>{e.setWalkColor(n.name,{scheme:r.value})}}))]}))]}]:[],...Ki.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:Op.map(({bp:n,label:r})=>({type:"radio",label:r,checked:e.tubeMapFold===n,disabled:n>0&&e.graph?.reads!==void 0,onClick:()=>{e.setTubeMapFold(n),e.recomputeLayout()}}))}]:[],...e.chosenLayoutMode==="walkrows"&&e.repeatChoices.length>0?[{label:"Repeat",subMenu:[{type:"radio",label:"Whole window",checked:e.repeatKey==="",onClick:()=>{e.setRepeatKey("")}},...e.repeatChoices.map(({key:n,name:r,unit:o})=>({type:"radio",label:`${r} \xB7 ${o.toLocaleString()} bp unit`,checked:e.repeatKey===n,onClick:()=>{e.setRepeatKey(n)}}))]}]:[],...e.hostPlacesX?[]:[{label:"Zoom in",onClick:()=>{e.zoom(1.5,e.paneWidth/2,e.canvasHeight/2)}},{label:"Zoom out",onClick:()=>{e.zoom(1/1.5,e.paneWidth/2,e.canvasHeight/2)}},{label:"Zoom to fit",onClick:()=>{e.zoomToFit()}}],{type:"checkbox",label:"Mark bubbles",checked:e.showBubbles,onClick:()=>{e.setShowBubbles(!e.showBubbles)}},{type:"checkbox",label:"Show deletion edges",checked:e.showDeletionEdges,onClick:()=>{e.setShowDeletionEdges(!e.showDeletionEdges)}},{type:"checkbox",label:"Genes on the backbone",checked:e.showGenes,onClick:()=>{e.setShowGenes(!e.showGenes)}},...e.referenceStripApplies?[{type:"checkbox",label:"Reference strip at bp",checked:e.showReferenceStrip,onClick:()=>{e.setShowReferenceStrip(!e.showReferenceStrip)}}]:[]]},launchMenuItems(){let t=[];for(let n of Ms({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:r=>{e.showInLinearView(r)},onShowSynteny:r=>{e.showSyntenyView(r)}}))(0,ec.pushLaunchViewMenuItem)(t,n);return t}}))}var oc=H(Lt(),1),Pb=(0,me.createSvgIcon)((0,oc.jsx)("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6"}),"Settings");export{me as a,ot as b,Rs as c,ct as d,co as e,lo as f,En as g,Vd as h,zd as i,ht as j,fa as k,Jt as l,zm as m,ga as n,No as o,Cn as p,Gt as q,Ao as r,$t as s,Qc as t,it as u,Na as v,xf as w,zo as x,Xn as y,Ad as z,ns as A,wh as B,Tl as C,Lh as D,Ah as E,Ol as F,vh as G,_h as H,Dh as I,sn as J,Gf as K,si as L,Yh as M,zl as N,qh as O,qt as P,Ae as Q,Uf as R,Cr as S,Br as T,ji as U,Ui as V,kb as W,Tb as X,vb as Y,Pb as Z};
3
+ //# sourceMappingURL=chunk-JXSDDOKD.js.map