jbrowse-plugin-graphgenomeviewer 8.8.0 → 8.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{GbzBaseSyntenyAdapter-SDYLJG5H.js → GbzBaseSyntenyAdapter-NAXISJUH.js} +2 -2
- package/dist/chunks/{GbzBaseSyntenyAdapter-SDYLJG5H.js.map → GbzBaseSyntenyAdapter-NAXISJUH.js.map} +1 -1
- package/dist/chunks/{GraphGenomeView-YRHBZFKL.js → GraphGenomeView-PPOVN5LA.js} +2 -2
- package/dist/chunks/{GraphTrackSettingsDialog-HBLIHBB5.js → GraphTrackSettingsDialog-BRTDTVOJ.js} +2 -2
- package/dist/chunks/{HighlightColorDialog-3H2H2LPS.js → HighlightColorDialog-CGW7J3SK.js} +2 -2
- package/dist/chunks/{LinearGraphDisplay-KD7PNZMQ.js → LinearGraphDisplay-2AZ7X7TK.js} +2 -2
- package/dist/chunks/{MinigraphBubbleAdapter-TTGZ45BF.js → MinigraphBubbleAdapter-NR3MMUUG.js} +2 -2
- package/dist/chunks/{RgfaTabixAdapter-A274AVUU.js → RgfaTabixAdapter-JDQLVQVP.js} +2 -2
- package/dist/chunks/{WalkFormsAdapter-7RD7ZAHG.js → WalkFormsAdapter-YMQC3NLG.js} +2 -2
- package/dist/chunks/{WalkTabixSyntenyAdapter-CLC2CJJT.js → WalkTabixSyntenyAdapter-PBWN53PE.js} +2 -2
- package/dist/chunks/{chunk-LPUQPLW7.js → chunk-5HDIVUAZ.js} +2 -2
- package/dist/chunks/{chunk-LPUQPLW7.js.map → chunk-5HDIVUAZ.js.map} +1 -1
- package/dist/chunks/{chunk-5TT5TG4Q.js → chunk-A27SW7X7.js} +2 -2
- package/dist/chunks/{chunk-5TT5TG4Q.js.map → chunk-A27SW7X7.js.map} +1 -1
- package/dist/chunks/chunk-APSXG7SV.js +2 -0
- package/dist/chunks/{chunk-46O3IEW3.js → chunk-CHLLRNBQ.js} +2 -2
- package/dist/chunks/{chunk-46O3IEW3.js.map → chunk-CHLLRNBQ.js.map} +1 -1
- package/dist/chunks/{chunk-VPZZ6XMM.js → chunk-DEWVJ57F.js} +2 -2
- package/dist/chunks/{chunk-VPZZ6XMM.js.map → chunk-DEWVJ57F.js.map} +1 -1
- package/dist/chunks/{chunk-5QJ2ANXK.js → chunk-EEWEXRY6.js} +2 -2
- package/dist/chunks/{chunk-VQVQXMNM.js → chunk-EFXNCI7R.js} +2 -2
- package/dist/chunks/{chunk-VQVQXMNM.js.map → chunk-EFXNCI7R.js.map} +1 -1
- package/dist/chunks/chunk-EH5OCKSE.js +3 -0
- package/dist/chunks/chunk-EH5OCKSE.js.map +7 -0
- package/dist/chunks/{chunk-T3FHGWNW.js → chunk-FM4T47WH.js} +2 -2
- package/dist/chunks/{chunk-T3FHGWNW.js.map → chunk-FM4T47WH.js.map} +2 -2
- package/dist/chunks/{chunk-YNMEZ4EZ.js → chunk-GLSUAMGV.js} +2 -2
- package/dist/chunks/{chunk-5WIUEMTH.js → chunk-HKGTCZOL.js} +2 -2
- package/dist/chunks/{chunk-2FG67WIZ.js → chunk-KBOVZ3GI.js} +1 -1
- package/dist/chunks/{chunk-2FG67WIZ.js.map → chunk-KBOVZ3GI.js.map} +1 -1
- package/dist/chunks/{chunk-7HJWQFKE.js → chunk-LFQFVYNY.js} +2 -2
- package/dist/chunks/{chunk-G6NFDDMN.js → chunk-LKD5NRWR.js} +1 -1
- package/dist/chunks/{chunk-G6NFDDMN.js.map → chunk-LKD5NRWR.js.map} +1 -1
- package/dist/chunks/{chunk-TUYN7C3O.js → chunk-MWQGJP3J.js} +2 -2
- package/dist/chunks/{chunk-TUYN7C3O.js.map → chunk-MWQGJP3J.js.map} +4 -4
- package/dist/chunks/chunk-NSQ4VXKR.js +4 -0
- package/dist/chunks/{chunk-WWF7N6AP.js.map → chunk-NSQ4VXKR.js.map} +4 -4
- package/dist/chunks/{chunk-Y5Q3XQOP.js → chunk-RS274NAD.js} +2 -2
- package/dist/chunks/{chunk-Y5Q3XQOP.js.map → chunk-RS274NAD.js.map} +1 -1
- package/dist/chunks/{chunk-WJHTNDTQ.js → chunk-SKB4GSET.js} +2 -2
- package/dist/chunks/{chunk-WJHTNDTQ.js.map → chunk-SKB4GSET.js.map} +1 -1
- package/dist/chunks/{chunk-HTH7NAV4.js → chunk-ZBFIEBO6.js} +2 -2
- package/dist/chunks/{chunk-PXYYKSGK.js → chunk-ZWHXVFZF.js} +1 -1
- package/dist/chunks/{chunk-PXYYKSGK.js.map → chunk-ZWHXVFZF.js.map} +1 -1
- package/dist/chunks/renderSvg-UKXPWKKV.js +2 -0
- package/dist/chunks/renderSvg-UKXPWKKV.js.map +7 -0
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +2 -2
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +2 -2
- package/package.json +2 -2
- package/src/GraphGenomeView/components/GraphCanvas.tsx +10 -7
- package/src/GraphGenomeView/components/PaneSvg.tsx +7 -3
- package/src/GraphGenomeView/model.test.ts +40 -0
- package/src/GraphGenomeView/pane/fitViews.ts +21 -12
- package/src/GraphGenomeView/pane/paneBase.ts +1 -1
- package/src/version.ts +1 -1
- package/dist/chunks/chunk-KACKTX2U.js +0 -2
- package/dist/chunks/chunk-TFV57AXQ.js +0 -3
- package/dist/chunks/chunk-TFV57AXQ.js.map +0 -7
- package/dist/chunks/chunk-WWF7N6AP.js +0 -4
- package/dist/chunks/renderSvg-UFS2CN6Z.js +0 -2
- package/dist/chunks/renderSvg-UFS2CN6Z.js.map +0 -7
- /package/dist/chunks/{GraphGenomeView-YRHBZFKL.js.map → GraphGenomeView-PPOVN5LA.js.map} +0 -0
- /package/dist/chunks/{GraphTrackSettingsDialog-HBLIHBB5.js.map → GraphTrackSettingsDialog-BRTDTVOJ.js.map} +0 -0
- /package/dist/chunks/{HighlightColorDialog-3H2H2LPS.js.map → HighlightColorDialog-CGW7J3SK.js.map} +0 -0
- /package/dist/chunks/{LinearGraphDisplay-KD7PNZMQ.js.map → LinearGraphDisplay-2AZ7X7TK.js.map} +0 -0
- /package/dist/chunks/{MinigraphBubbleAdapter-TTGZ45BF.js.map → MinigraphBubbleAdapter-NR3MMUUG.js.map} +0 -0
- /package/dist/chunks/{RgfaTabixAdapter-A274AVUU.js.map → RgfaTabixAdapter-JDQLVQVP.js.map} +0 -0
- /package/dist/chunks/{WalkFormsAdapter-7RD7ZAHG.js.map → WalkFormsAdapter-YMQC3NLG.js.map} +0 -0
- /package/dist/chunks/{WalkTabixSyntenyAdapter-CLC2CJJT.js.map → WalkTabixSyntenyAdapter-PBWN53PE.js.map} +0 -0
- /package/dist/chunks/{chunk-KACKTX2U.js.map → chunk-APSXG7SV.js.map} +0 -0
- /package/dist/chunks/{chunk-5QJ2ANXK.js.map → chunk-EEWEXRY6.js.map} +0 -0
- /package/dist/chunks/{chunk-YNMEZ4EZ.js.map → chunk-GLSUAMGV.js.map} +0 -0
- /package/dist/chunks/{chunk-5WIUEMTH.js.map → chunk-HKGTCZOL.js.map} +0 -0
- /package/dist/chunks/{chunk-7HJWQFKE.js.map → chunk-LFQFVYNY.js.map} +0 -0
- /package/dist/chunks/{chunk-HTH7NAV4.js.map → chunk-ZBFIEBO6.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-D7ZTAGDM.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-IDPBN2BP.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-O6SLIY74.js"],
|
|
4
4
|
"sourcesContent": ["// src/gfa/walkStops.ts\nvar START_STOP_TAG = \"ws\";\nvar END_STOP_TAG = \"we\";\nvar STOP_KINDS = [\"elsewhere\", \"break\", \"end\"];\nvar GAP_CAUSE_TEXT = {\n missing: \"not in the graph\",\n elsewhere: \"on nodes filed elsewhere\",\n unknown: \"gap, cause unknown\",\n abridged: \"abridged: steps not loaded\",\n // a walk file's skip row: the haplotype has no step on the reference\n // across the window, which says nothing of what it carries instead\n deleted: \"no step on the reference\"\n};\nvar OUTSIDE_TEXT = \"outside the extracted subgraph\";\nfunction gapParts(bp, after, before) {\n if (!after && !before) {\n return [{ bp }];\n }\n const left = Math.min(after?.trimmed ?? 0, bp);\n const right = Math.min(before?.trimmed ?? 0, bp - left);\n let rest = bp - left - right;\n const lead = after?.kind === \"break\" ? Math.min(after.bp, rest) : 0;\n rest -= lead;\n const trail = before?.kind === \"break\" ? Math.min(before.bp, rest) : 0;\n rest -= trail;\n const elsewhere = [after, before].find((s) => s?.kind === \"elsewhere\");\n const parts = [\n { bp: left },\n { bp: lead, cause: \"missing\" },\n elsewhere?.kind === \"elsewhere\" ? { bp: rest, cause: \"elsewhere\", chunk: elsewhere.chunk } : { bp: rest, cause: \"unknown\" },\n { bp: trail, cause: \"missing\" },\n { bp: right }\n ];\n return parts.filter((part) => part.bp > 0);\n}\nfunction stopAt(table, i) {\n const bp = table.bp[i];\n const ref = table.chunkRefs[i];\n return stopOf(\n table.kindNames[table.kinds[i]],\n Number.isNaN(bp) ? void 0 : bp,\n table.trimmed[i],\n ref < 0 ? void 0 : { refName: table.chunkRefNames[ref], start: table.chunkStarts[i] }\n );\n}\nfunction stopOf(kind, bp, trimmed, chunk) {\n const cut = trimmed > 0 ? { trimmed } : {};\n if (kind === \"elsewhere\" && chunk) {\n return { kind, chunk, ...bp === void 0 ? {} : { bp }, ...cut };\n }\n if (kind === \"break\" && bp !== void 0) {\n return { kind, bp, ...chunk ? { chunk } : {}, ...cut };\n }\n return kind === \"end\" ? { kind, ...cut } : void 0;\n}\nfunction stopTag(stop) {\n const parts = [stop.kind];\n if (\"bp\" in stop && stop.bp !== void 0) {\n parts.push(`bp=${stop.bp}`);\n }\n if (stop.trimmed) {\n parts.push(`trimmed=${stop.trimmed}`);\n }\n if (\"chunk\" in stop && stop.chunk) {\n parts.push(`chunk=${stop.chunk.refName}:${stop.chunk.start}`);\n }\n return parts.join(\",\");\n}\nfunction parseStopTag(value) {\n const [kind, ...fields] = value.split(\",\");\n let bp;\n let trimmed = 0;\n let chunk;\n for (const field of fields) {\n if (field.startsWith(\"bp=\")) {\n bp = +field.slice(3);\n } else if (field.startsWith(\"trimmed=\")) {\n trimmed = +field.slice(8);\n } else if (field.startsWith(\"chunk=\")) {\n const at = field.lastIndexOf(\":\");\n chunk = { refName: field.slice(6, at), start: +field.slice(at + 1) };\n }\n }\n return stopOf(kind, bp, trimmed, chunk);\n}\nfunction stopFields(before, after) {\n return {\n ...before ? { before } : {},\n ...after ? { after } : {}\n };\n}\nfunction walkStopFields(tags) {\n const before = tags[START_STOP_TAG];\n const after = tags[END_STOP_TAG];\n return stopFields(\n typeof before === \"string\" ? parseStopTag(before) : void 0,\n typeof after === \"string\" ? parseStopTag(after) : void 0\n );\n}\nfunction walkStopTags(walks, p) {\n const tags = [];\n for (const [tag, table] of [\n [START_STOP_TAG, walks.before],\n [END_STOP_TAG, walks.after]\n ]) {\n const stop = table && stopAt(table, p);\n if (stop) {\n tags.push(`\t${tag}:Z:${stopTag(stop)}`);\n }\n }\n return tags.join(\"\");\n}\nvar StopColumns = class {\n constructor() {\n this.kinds = [];\n this.bp = [];\n this.trimmed = [];\n this.chunkRefs = [];\n this.chunkStarts = [];\n this.chunkRefNames = [];\n this.refIndex = /* @__PURE__ */ new Map();\n }\n push(stop) {\n this.kinds.push(STOP_KINDS.indexOf(stop.kind));\n this.bp.push(\"bp\" in stop && stop.bp !== void 0 ? stop.bp : NaN);\n this.trimmed.push(stop.trimmed ?? 0);\n const chunk = \"chunk\" in stop ? stop.chunk : void 0;\n if (chunk) {\n let ref = this.refIndex.get(chunk.refName);\n if (ref === void 0) {\n ref = this.chunkRefNames.length;\n this.refIndex.set(chunk.refName, ref);\n this.chunkRefNames.push(chunk.refName);\n }\n this.chunkRefs.push(ref);\n this.chunkStarts.push(chunk.start);\n } else {\n this.chunkRefs.push(-1);\n this.chunkStarts.push(NaN);\n }\n }\n table() {\n return {\n kinds: Uint8Array.from(this.kinds),\n kindNames: [...STOP_KINDS],\n bp: Float64Array.from(this.bp),\n trimmed: Float64Array.from(this.trimmed),\n chunkRefs: Int32Array.from(this.chunkRefs),\n chunkStarts: Float64Array.from(this.chunkStarts),\n chunkRefNames: this.chunkRefNames\n };\n }\n};\n\nexport {\n START_STOP_TAG,\n END_STOP_TAG,\n GAP_CAUSE_TEXT,\n OUTSIDE_TEXT,\n gapParts,\n stopAt,\n stopTag,\n parseStopTag,\n stopFields,\n walkStopFields,\n walkStopTags,\n StopColumns\n};\n", "import {\n stopAt,\n stopFields,\n walkStopTags\n} from \"./chunk-D7ZTAGDM.js\";\nimport {\n PathVisits\n} from \"./chunk-BEUTROKU.js\";\nimport {\n panSNFields,\n panSNSample\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/gfa/graphTables.ts\nfunction pLineName(name, start, end) {\n return start === 0 ? name : `${name}:${start}-${end}`;\n}\nfunction tablePath(w, p) {\n const walkName = w.names[p];\n const fields = panSNFields(walkName);\n const start = w.starts[p];\n const steps = w.abridgedSteps?.[p] ?? Number.NaN;\n const abridged = Number.isNaN(steps) ? {} : { abridged: { steps, bp: w.abridgedBp?.[p] ?? 0 } };\n return fields ? {\n name: `${fields.sample}#${fields.haplotype}#${fields.contig}`,\n start,\n ...fields,\n ...stopFields(\n w.before && stopAt(w.before, p),\n w.after && stopAt(w.after, p)\n ),\n ...abridged\n } : { name: pLineName(walkName, start, w.ends[p]), start };\n}\nfunction namesByList(lists, names, listCount, pathNames) {\n const starts = new Int32Array(listCount + 1);\n for (const list of lists) {\n starts[list + 1]++;\n }\n for (let i = 0; i < listCount; i++) {\n starts[i + 1] += starts[i];\n }\n const fill = starts.slice(0, listCount);\n const grouped = new Int32Array(lists.length);\n lists.forEach((list, i) => {\n grouped[fill[list]++] = names[i];\n });\n const listed = new Int32Array(pathNames.length).fill(-1);\n return Array.from({ length: listCount }, (_, list) => {\n const out = [];\n for (let i = starts[list]; i < starts[list + 1]; i++) {\n const k = grouped[i];\n if (listed[k] !== list) {\n listed[k] = list;\n out.push(pathNames[k]);\n }\n }\n return out;\n });\n}\nfunction tableNodeIds({ nodes: n, links: l, walks: w }, traversals) {\n const canonical = new Uint8Array(n.names.length);\n const claim = (node, reversed) => {\n if (canonical[node] === 0) {\n canonical[node] = reversed ? 2 : 1;\n }\n };\n for (let i = 0; i < l.from.length; i++) {\n claim(l.from[i], l.strands[i] & 1);\n claim(l.to[i], l.strands[i] & 2);\n }\n const stepCount = w.offsets[w.names.length] ?? 0;\n for (let s = 0; s < stepCount; s++) {\n const node = w.steps[s];\n claim(node, w.reversed[s]);\n if (traversals) {\n traversals[node]++;\n }\n }\n return n.names.map(\n (segment, i) => `${segment}${canonical[i] === 2 ? \"-\" : \"+\"}`\n );\n}\nfunction graphFromTables({ nodes: n, links: l, walks: w, skips }, name = \"Imported GFA\") {\n const count = n.names.length;\n const declared = n.lengths.length;\n const drawnWalks = [];\n for (let p = 0; p < w.names.length; p++) {\n if (w.offsets[p + 1] > w.offsets[p]) {\n drawnWalks.push(p);\n }\n }\n const traversals = new Int32Array(count);\n const ids = tableNodeIds({ nodes: n, links: l, walks: w }, traversals);\n const nodes = [];\n for (let i = 0; i < declared; i++) {\n const ref = n.refs[i];\n nodes.push({\n id: ids[i],\n name: n.names[i],\n length: n.lengths[i],\n depth: Math.max(traversals[i], 1),\n stable: ref < 0 ? void 0 : {\n refName: n.refNames[ref],\n start: n.starts[i],\n rank: n.ranks[i]\n },\n samples: void 0\n });\n }\n const edges = [];\n const neighbours = new Array(count);\n const pairList = (a, b) => {\n const near = neighbours[a];\n if (near) {\n for (let j = 0; j < near.length; j += 2) {\n if (near[j] === b) {\n return near[j + 1];\n }\n }\n }\n return void 0;\n };\n const addPair = (a, b, list) => {\n const near = neighbours[a];\n if (near) {\n near.push(b, list);\n } else {\n neighbours[a] = [b, list];\n }\n };\n const edgeLists = [];\n let lists = 0;\n for (let i = 0; i < l.from.length; i++) {\n const a = l.from[i];\n const b = l.to[i];\n edges.push({\n from: ids[a],\n to: ids[b],\n fromStrand: l.strands[i] & 1 ? \"-\" : \"+\",\n toStrand: l.strands[i] & 2 ? \"-\" : \"+\"\n });\n let list = pairList(a, b);\n if (list === void 0) {\n list = lists++;\n addPair(a, b, list);\n addPair(b, a, list);\n }\n edgeLists.push(list);\n }\n const adjacency = new Int32Array(count + 1);\n for (let a = 0; a < count; a++) {\n adjacency[a + 1] = adjacency[a] + (neighbours[a]?.length ?? 0) / 2;\n }\n const adjacentNode = new Int32Array(adjacency[count]);\n const adjacentList = new Int32Array(adjacency[count]);\n neighbours.forEach((near, a) => {\n for (let j = 0; j < near.length; j += 2) {\n adjacentNode[adjacency[a] + j / 2] = near[j];\n adjacentList[adjacency[a] + j / 2] = near[j + 1];\n }\n });\n const listOf = (a, b) => {\n for (let j = adjacency[a]; j < adjacency[a + 1]; j++) {\n if (adjacentNode[j] === b) {\n return adjacentList[j];\n }\n }\n return -1;\n };\n const nameIndex = /* @__PURE__ */ new Map();\n const pathNames = [];\n const crossedList = new Int32Array(w.offsets[w.names.length] ?? 0);\n const crossedName = new Int32Array(crossedList.length);\n let crossings = 0;\n const lastWalk = new Int32Array(lists).fill(-1);\n const paths = [];\n const anchorPaths = [];\n const totalSteps = w.offsets[w.names.length] ?? 0;\n const visitPath = new Int32Array(totalSteps);\n const visitStart = new Float64Array(totalSteps);\n const visitReversed = new Uint8Array(totalSteps);\n const fill = new Int32Array(count).fill(-1);\n const visitOrder = [];\n const blocks = [0];\n const pathSamples = [];\n const edgeNameIndex = /* @__PURE__ */ new Map();\n const edgeNames = [];\n for (const p of drawnWalks) {\n const head = tablePath(w, p);\n const { start, name: pathName } = head;\n const visitName = head.sample === void 0 ? w.names[p] : pathName;\n let named = nameIndex.get(visitName);\n if (named === void 0) {\n named = pathNames.length;\n nameIndex.set(visitName, named);\n pathNames.push(visitName);\n pathSamples.push(panSNSample(visitName));\n }\n let edgeNamed = edgeNameIndex.get(pathName);\n if (edgeNamed === void 0) {\n edgeNamed = edgeNames.length;\n edgeNameIndex.set(pathName, edgeNamed);\n edgeNames.push(pathName);\n }\n const visitSample = pathSamples[named];\n const first = w.offsets[p];\n const nodeIds = new Array(w.offsets[p + 1] - first);\n let pos = start;\n let prev = -1;\n for (let s = first; s < w.offsets[p + 1]; s++) {\n const node = w.steps[s];\n nodeIds[s - first] = ids[node];\n if (fill[node] === -1) {\n fill[node] = blocks.at(-1);\n blocks.push(fill[node] + traversals[node]);\n visitOrder.push(node);\n }\n const at = fill[node]++;\n visitPath[at] = named;\n visitStart[at] = pos;\n visitReversed[at] = w.reversed[s];\n pos += node < declared ? n.lengths[node] : 0;\n if (prev >= 0) {\n const list = listOf(prev, node);\n if (list >= 0 && lastWalk[list] !== p) {\n lastWalk[list] = p;\n crossedList[crossings] = list;\n crossedName[crossings++] = edgeNamed;\n }\n }\n prev = node;\n }\n paths.push({ ...head, nodeIds });\n anchorPaths.push({\n name: visitName,\n sample: visitSample,\n start,\n length: pos - start\n });\n }\n const listNames = namesByList(\n crossedList.subarray(0, crossings),\n crossedName,\n lists,\n edgeNames\n );\n edges.forEach((edge, i) => {\n const names = listNames[edgeLists[i]];\n if (names.length > 0) {\n edge.pathIds = names;\n }\n });\n const walked = drawnWalks.length > 0;\n return {\n name,\n nodes,\n edges,\n paths: walked ? paths : void 0,\n anchorPaths: walked ? anchorPaths : void 0,\n pathVisits: walked ? new PathVisits({\n segments: visitOrder.map((node) => n.names[node]),\n offsets: Int32Array.from(blocks),\n path: visitPath.subarray(0, blocks.at(-1)),\n start: visitStart.subarray(0, blocks.at(-1)),\n reversed: visitReversed.subarray(0, blocks.at(-1)),\n paths: pathNames,\n samples: pathSamples\n }) : void 0,\n anchoredBy: nodes.some((node) => node.stable) ? \"tags\" : void 0,\n ...skips?.names.length ? { skips } : {}\n };\n}\nfunction graphTablesGFA({ nodes, links, walks }) {\n const { names } = nodes;\n const lines = [\"H\tVN:Z:1.1\"];\n for (let i = 0; i < nodes.lengths.length; i++) {\n const ref = nodes.refs[i];\n const stable = ref < 0 ? \"\" : `\tSN:Z:${nodes.refNames[ref]}\tSO:i:${nodes.starts[i]}\tSR:i:${nodes.ranks[i]}`;\n lines.push(`S\t${names[i]}\t*\tLN:i:${nodes.lengths[i]}${stable}`);\n }\n for (let i = 0; i < links.from.length; i++) {\n const strands = links.strands[i];\n lines.push(\n `L\t${names[links.from[i]]}\t${strands & 1 ? \"-\" : \"+\"}\t${names[links.to[i]]}\t${strands & 2 ? \"-\" : \"+\"}\t0M`\n );\n }\n for (let p = 0; p < walks.names.length; p++) {\n const name = walks.names[p];\n const fields = panSNFields(name);\n const start = walks.starts[p];\n const end = walks.ends[p];\n const steps = [];\n for (let s = walks.offsets[p]; s < walks.offsets[p + 1]; s++) {\n steps.push([names[walks.steps[s]], walks.reversed[s]]);\n }\n lines.push(\n fields ? `W\t${fields.sample}\t${fields.haplotype}\t${fields.contig}\t${start}\t${end}\t${steps.map(([id, rev]) => (rev ? \"<\" : \">\") + id).join(\"\")}${walkStopTags(walks, p)}` : `P\t${pLineName(name, start, end)}\t${steps.map(([id, rev]) => id + (rev ? \"-\" : \"+\")).join(\",\")}\t*`\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport {\n tablePath,\n tableNodeIds,\n graphFromTables,\n graphTablesGFA\n};\n", "import {\n tableNodeIds,\n tablePath\n} from \"./chunk-IDPBN2BP.js\";\nimport {\n gapParts\n} from \"./chunk-D7ZTAGDM.js\";\nimport {\n pathOrigin\n} from \"./chunk-QBI6SC74.js\";\nimport {\n groupBy\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n panSNContig,\n panSNFields,\n panSNHaplotype,\n panSNSample\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/layout/walkRowRuns.ts\nvar RUN_ON_REFERENCE = 1;\nvar RUN_REVERSED = 2;\nvar RUN_GAP = 4;\nvar GAP_CAUSES = [\n void 0,\n \"missing\",\n \"elsewhere\",\n \"unknown\",\n \"abridged\",\n \"deleted\"\n];\nvar CAUSE_SHIFT = 3;\nvar causeFlags = (cause) => GAP_CAUSES.indexOf(cause) << CAUSE_SHIFT;\nfunction referenceOf(names, referencePath, rankZero) {\n return referencePath !== void 0 && names.includes(referencePath) ? referencePath : names.find((n) => rankZero.has(n)) ?? names[0];\n}\nfunction referenceWalkName(graph) {\n return referenceOf(\n (graph.paths ?? []).map((p) => pathOrigin(p.name).name),\n graph.referencePath,\n new Set(\n graph.nodes.flatMap(\n (n) => n.stable?.rank === 0 ? [n.stable.refName] : []\n )\n )\n );\n}\nvar namesReference = (reference) => {\n const contig = reference && panSNContig(reference);\n return (name) => name !== void 0 && (name === reference || name === contig);\n};\nfunction graphPieces(graph) {\n const index = /* @__PURE__ */ new Map();\n const names = [];\n const lengths = [];\n const indexOf = (id) => {\n let i = index.get(id);\n if (i === void 0) {\n i = names.length;\n index.set(id, i);\n names.push(id);\n lengths.push(0);\n }\n return i;\n };\n const reference = referenceWalkName(graph);\n const onReferenceContig = namesReference(reference);\n const stable = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const i = indexOf(node.id);\n lengths[i] = node.length;\n if (node.stable?.rank === 0 && onReferenceContig(node.stable.refName)) {\n stable.set(i, node.stable.start);\n }\n }\n const heads = graph.paths ?? [];\n const from = new Int32Array(heads.length);\n const to = new Int32Array(heads.length);\n const steps = [];\n heads.forEach((path, p) => {\n from[p] = steps.length;\n for (const id of path.nodeIds) {\n steps.push(indexOf(id));\n }\n to[p] = steps.length;\n });\n return {\n heads,\n from,\n to,\n steps: Int32Array.from(steps),\n lengths: Int32Array.from(lengths),\n names,\n reference,\n stableStart: (node) => stable.get(node) ?? Number.NaN\n };\n}\nfunction tablePieces(tables, referencePath, visits) {\n const { nodes: n, walks: w } = tables;\n const kept = [];\n for (let p = 0; p < w.names.length; p++) {\n if (w.offsets[p + 1] > w.offsets[p]) {\n kept.push(p);\n }\n }\n const heads = kept.map((p) => tablePath(w, p));\n const rankZero = /* @__PURE__ */ new Set();\n for (let i = 0; i < n.lengths.length; i++) {\n if (n.refs[i] >= 0 && n.ranks[i] === 0) {\n rankZero.add(n.refNames[n.refs[i]]);\n }\n }\n const reference = referenceOf(\n heads.map((h) => pathOrigin(h.name).name),\n referencePath,\n rankZero\n );\n const onReferenceContig = namesReference(reference);\n return {\n heads,\n from: Int32Array.from(kept, (p) => w.offsets[p]),\n to: Int32Array.from(kept, (p) => w.offsets[p + 1]),\n steps: w.steps,\n lengths: n.lengths,\n // a visit names its node as the Graph does, which costs a pass over the\n // steps\n names: visits ? tableNodeIds(tables) : n.names,\n reference,\n stableStart: (node) => node < n.lengths.length && n.ranks[node] === 0 && onReferenceContig(n.refNames[n.refs[node]]) ? n.starts[node] : Number.NaN\n };\n}\nfunction sampleOf(path) {\n return path.sample ?? panSNSample(path.name);\n}\nfunction labelOf(path) {\n return path.haplotype !== void 0 && path.sample !== void 0 ? `${path.sample}#${path.haplotype}` : sampleOf(path);\n}\nvar Columns = class {\n constructor(width) {\n this.offsets = [0];\n this.values = Array.from({ length: width }, () => []);\n }\n get length() {\n return this.values[0].length;\n }\n push(a, b, c, d, e) {\n const v = this.values;\n v[0].push(a);\n v[1].push(b);\n v[2].push(c);\n v[3].push(d);\n if (e !== void 0) {\n v[4].push(e);\n }\n }\n endRow() {\n this.offsets.push(this.length);\n }\n // the rows in `order`, column i in the array `make[i]` makes\n reorder(order, make) {\n const offsets = new Uint32Array(order.length + 1);\n order.forEach((row, i) => {\n offsets[i + 1] = offsets[i] + this.offsets[row + 1] - this.offsets[row];\n });\n const columns = make.map((m, c) => {\n const from = this.values[c];\n const out = m(this.length);\n let at = 0;\n for (const row of order) {\n for (let k = this.offsets[row]; k < this.offsets[row + 1]; k++) {\n out[at++] = from[k];\n }\n }\n return out;\n });\n return { offsets, columns };\n }\n};\nvar float64 = (n) => new Float64Array(n);\nfunction walkRowRuns(source, region, o = {}) {\n const {\n heads,\n from,\n to,\n steps: all,\n lengths,\n names,\n reference,\n stableStart\n } = \"walks\" in source ? tablePieces(source, o.referencePath, o.visits) : graphPieces(source);\n const declared = lengths.length;\n const lengthOf = (node) => node < declared ? lengths[node] : 0;\n const nameOf = (p) => pathOrigin(heads[p].name).name;\n const startOf = (p) => heads[p].start;\n const byStart = (a, b) => (startOf(a) ?? 0) - (startOf(b) ?? 0);\n const pieceIds = heads.map((_, p) => p);\n const referencePieces = pieceIds.filter((p) => nameOf(p) === reference).sort(byStart);\n const first = referencePieces[0];\n const others = pieceIds.filter((p) => nameOf(p) !== reference);\n const { skips } = source;\n if (first === void 0 || others.length === 0 && !skips?.names.length) {\n return void 0;\n }\n const walks = groupBy(others, nameOf);\n const spanStart = new Float64Array(names.length).fill(Number.NaN);\n const spanEnd = new Float64Array(names.length);\n const revisits = /* @__PURE__ */ new Map();\n let flankEnd = -Infinity;\n let flankStart = Infinity;\n const cut = region && region.end > region.start ? region : void 0;\n for (const piece of referencePieces) {\n let pos = startOf(piece) ?? 0;\n for (let s = from[piece], stop = to[piece]; s < stop; s++) {\n const node = all[s];\n const len = lengthOf(node);\n if (!Number.isNaN(spanStart[node])) {\n const starts = revisits.get(node);\n if (starts) {\n starts.push(pos);\n } else {\n revisits.set(node, [spanStart[node], pos]);\n }\n } else {\n spanStart[node] = pos;\n spanEnd[node] = pos + len;\n if (cut) {\n if (pos + len <= cut.start) {\n flankEnd = Math.max(flankEnd, pos + len);\n }\n if (pos >= cut.end) {\n flankStart = Math.min(flankStart, pos);\n }\n }\n }\n pos += len;\n }\n }\n const flanked = cut === void 0 || flankEnd > -Infinity && flankStart < Infinity;\n const runs = new Columns(5);\n const chunks = [];\n const chunkIndex = /* @__PURE__ */ new Map();\n const chunkOf = (chunk2) => {\n if (!chunk2) {\n return -1;\n }\n const key = `${chunk2.refName}:${chunk2.start}`;\n let i = chunkIndex.get(key);\n if (i === void 0) {\n i = chunks.length;\n chunkIndex.set(key, i);\n chunks.push(chunk2);\n }\n return i;\n };\n const visits = o.visits ? new Columns(4) : void 0;\n let steps = new Int32Array(0);\n let stepStart = new Float64Array(0);\n const rowOf = (pieces) => {\n const head = heads[pieces[0]];\n const ordered = [...pieces].sort(byStart);\n let count = ordered.length - 1;\n let abridgedSteps = 0;\n for (const piece of ordered) {\n count += to[piece] - from[piece] + (heads[piece].abridged ? 1 : 0);\n abridgedSteps += heads[piece].abridged?.steps ?? 0;\n }\n if (count > steps.length) {\n steps = new Int32Array(count * 2);\n stepStart = new Float64Array(count * 2);\n }\n let length = 0;\n let unplaced = false;\n let end;\n let previous;\n const partsAt = /* @__PURE__ */ new Map();\n let owed = 0;\n for (const piece of ordered) {\n const start2 = startOf(piece);\n const jump = start2 === void 0 || end === void 0 ? 0 : start2 - end;\n if (start2 === void 0 || jump < 0) {\n unplaced = true;\n }\n if (jump < 0 && heads[previous].abridged) {\n owed -= jump;\n }\n const covered = Math.min(owed, Math.max(jump, 0));\n owed -= covered;\n const gap = jump - covered;\n if (gap > 0) {\n partsAt.set(\n length,\n gapParts(\n gap,\n previous === void 0 ? void 0 : heads[previous].after,\n heads[piece].before\n )\n );\n steps[length] = -gap;\n stepStart[length++] = end;\n }\n let pos = start2 ?? 0;\n const abridged = heads[piece].abridged;\n for (let s = from[piece], stop2 = to[piece]; s < stop2; s++) {\n const node = all[s];\n const bp3 = abridged ? abridged.bp - (pos - (start2 ?? 0)) - lengthOf(node) : 0;\n if (bp3 > 0 && s === stop2 - 1 && s > from[piece]) {\n partsAt.set(length, [{ bp: bp3, cause: \"abridged\" }]);\n steps[length] = -bp3;\n stepStart[length++] = pos;\n pos += bp3;\n }\n steps[length] = node;\n stepStart[length++] = pos;\n pos += lengthOf(node);\n }\n end = start2 === void 0 ? void 0 : pos;\n previous = piece;\n }\n const onReference = (i) => i >= 0 && i < length && steps[i] >= 0 && !Number.isNaN(spanStart[steps[i]]);\n const stepEnd = (i) => {\n const id = steps[i];\n return stepStart[i] + (id < 0 ? -id : lengthOf(id));\n };\n const partialSide = (i0, i1) => {\n const flank = i0 >= 0 ? i0 : i1;\n let near = -1;\n for (let d = 1; near < 0 && d < length; d++) {\n near = [flank - d, flank + d].find(onReference) ?? -1;\n }\n if (near < 0) {\n return void 0;\n }\n const forward = near > flank === spanStart[steps[near]] > spanStart[steps[flank]];\n const after = forward === (flank === i0);\n const last2 = after ? length - 1 : 0;\n const contigEnds = onReference(last2);\n const stop2 = {\n contigEnds,\n shortBp: contigEnds ? Math.max(\n 0,\n cut.start - spanEnd[steps[last2]],\n spanStart[steps[last2]] - cut.end\n ) : 0\n };\n return {\n stop: stop2,\n lo: after ? flank + 1 : 0,\n hi: after ? length : flank,\n backward: !forward,\n axisStart: forward ? after ? stepEnd(flank) : stepStart[0] : after ? stepEnd(length - 1) : stepStart[flank]\n };\n };\n let lo = 0;\n let hi = length;\n let backward = false;\n let complete = true;\n let flankFrom = -1;\n let flankTo = -1;\n let axisStart;\n let stop;\n const trimAbridged = (inner, bp3) => {\n const parts = partsAt.get(inner);\n const gap = parts?.[0];\n if (bp3 <= 0 || gap?.cause !== \"abridged\") {\n return 0;\n }\n const trimmed = Math.min(bp3, gap.bp);\n partsAt.set(\n inner,\n gap.bp > trimmed ? [{ ...gap, bp: gap.bp - trimmed }] : []\n );\n steps[inner] += trimmed;\n return trimmed;\n };\n const abridgedAt = (i) => partsAt.get(i)?.[0]?.cause === \"abridged\";\n const placeStart = (i) => {\n const id = steps[i];\n if (id < 0 || partsAt.has(i)) {\n return Number.NaN;\n }\n return Number.isNaN(spanStart[id]) && (abridgedAt(i - 1) || abridgedAt(i + 1)) ? stableStart(id) : spanStart[id];\n };\n let leftTrim = 0;\n let rightTrim = 0;\n if (cut && flanked) {\n let i0 = -1;\n let i1 = -1;\n let bestEnd = -Infinity;\n let bestStart = Infinity;\n for (let i = 0; i < length; i++) {\n const start2 = placeStart(i);\n if (!Number.isNaN(start2)) {\n const end2 = start2 + lengthOf(steps[i]);\n if (end2 <= cut.start && end2 > bestEnd) {\n bestEnd = end2;\n i0 = i;\n }\n if (start2 >= cut.end && start2 < bestStart) {\n bestStart = start2;\n i1 = i;\n }\n }\n }\n if (i0 < 0 || i1 < 0) {\n complete = false;\n const inside = i0 >= 0 || i1 >= 0 ? partialSide(i0, i1) : void 0;\n if (inside) {\n ;\n ({ lo, hi, backward, axisStart, stop } = inside);\n }\n } else {\n lo = Math.min(i0, i1) + 1;\n hi = Math.max(i0, i1);\n backward = i0 > i1;\n flankFrom = i0;\n flankTo = i1;\n const inward = backward ? -1 : 1;\n leftTrim = trimAbridged(i0 + inward, flankEnd - bestEnd);\n rightTrim = trimAbridged(i1 - inward, bestStart - flankStart);\n }\n }\n const contig = head.contig ?? panSNContig(pathOrigin(head.name).name);\n const axis2 = unplaced || length === 0 ? void 0 : axisStart !== void 0 ? { contig, start: axisStart, reversed: backward } : flankFrom < 0 ? { contig, start: stepStart[0], reversed: false } : flankFrom < flankTo ? {\n contig,\n start: stepEnd(flankFrom) + leftTrim,\n reversed: false\n } : {\n contig,\n start: stepStart[flankFrom] - leftTrim,\n reversed: true\n };\n let bp2 = 0;\n let offReferenceBp = 0;\n let gapBp = 0;\n let step = 0;\n let last = -1;\n let lastFlags = 0;\n let lastRef = Number.NaN;\n let cursor = Number.NaN;\n const placeOf = (id) => {\n const starts = revisits.get(id);\n if (!starts || Number.isNaN(cursor)) {\n return spanStart[id];\n }\n const len = lengthOf(id);\n let best = starts[0];\n let bestGap = Infinity;\n for (const start2 of starts) {\n const gap = Math.min(\n Math.abs(start2 - cursor),\n Math.abs(start2 + len - cursor)\n );\n if (gap < bestGap) {\n best = start2;\n bestGap = gap;\n }\n }\n return best;\n };\n const [, runBp, runRef, runFlags] = runs.values;\n for (let k = lo; k < hi; k++) {\n const index = backward ? hi - 1 - (k - lo) : k;\n const id = steps[index];\n const parts = partsAt.get(index);\n if (parts) {\n for (const part of backward ? [...parts].reverse() : parts) {\n runs.push(\n bp2,\n part.bp,\n Number.NaN,\n RUN_GAP | causeFlags(part.cause),\n chunkOf(part.chunk)\n );\n bp2 += part.bp;\n }\n last = runs.length - 1;\n lastFlags = RUN_GAP;\n lastRef = Number.NaN;\n gapBp += -id;\n step = 0;\n continue;\n }\n const len = lengthOf(id);\n const at = placeOf(id);\n const on = !Number.isNaN(at);\n visits?.push(id, bp2, len, on ? 1 : 0);\n const placed = last >= 0 && !Number.isNaN(lastRef);\n const forward = on && placed && step >= 0 && lastRef + (runBp[last] ?? 0) === at;\n const back = on && placed && step <= 0 && at + len === lastRef;\n if (!on && last >= 0 && !(lastFlags & (RUN_ON_REFERENCE | RUN_GAP))) {\n runBp[last] += len;\n } else if (forward || back) {\n runBp[last] += len;\n if (!forward) {\n lastRef = at;\n runRef[last] = at;\n lastFlags |= RUN_REVERSED;\n runFlags[last] = lastFlags;\n }\n step = forward ? 1 : -1;\n } else {\n lastFlags = on ? RUN_ON_REFERENCE : 0;\n lastRef = on ? at : Number.NaN;\n runs.push(bp2, len, lastRef, lastFlags, -1);\n last = runs.length - 1;\n step = 0;\n }\n bp2 += len;\n if (on) {\n cursor = step < 0 ? at : at + len;\n } else {\n offReferenceBp += len;\n }\n }\n runs.endRow();\n visits?.endRow();\n return {\n name: head.name,\n label: labelOf(head),\n sample: sampleOf(head),\n haplotype: head.haplotype,\n bp: bp2,\n offReferenceBp,\n gapBp,\n complete,\n stop,\n axis: axis2,\n ...abridgedSteps > 0 ? { abridgedSteps } : {},\n ...leftTrim + rightTrim > 0 ? { estimated: true } : {}\n };\n };\n const skipRowOf = (name, start2, end, bar2) => {\n const from2 = bar2 ? Math.max(start2, bar2.start) : start2;\n const bp2 = Math.max((bar2 ? Math.min(end, bar2.end) : end) - from2, 0);\n runs.push(\n from2 - (bar2 ? bar2.start : start2),\n bp2,\n Number.NaN,\n RUN_GAP | causeFlags(\"deleted\"),\n -1\n );\n runs.endRow();\n visits?.endRow();\n const head = { name, ...panSNFields(name) };\n return {\n name,\n label: labelOf(head),\n sample: sampleOf(head),\n haplotype: head.haplotype,\n bp: 0,\n offReferenceBp: 0,\n gapBp: bp2,\n complete: true,\n stop: void 0,\n axis: void 0,\n deletionBp: end - start2\n };\n };\n const referenceRow = rowOf(referencePieces);\n const rows = [...walks.values()].map((pieces, i) => ({\n meta: rowOf(pieces),\n row: i + 1\n }));\n const drawn = new Set(walks.keys());\n const { axis } = referenceRow;\n const bar = axis ? {\n start: axis.start,\n end: axis.start + referenceRow.bp + referenceRow.gapBp\n } : cut;\n skips?.names.forEach((name, k) => {\n const contig = pathOrigin(name).name;\n if (!drawn.has(contig)) {\n drawn.add(contig);\n rows.push({\n meta: skipRowOf(contig, skips.starts[k], skips.ends[k], bar),\n row: rows.length + 1\n });\n }\n });\n const metas = [referenceRow, ...rows.map((r) => r.meta)];\n if (new Set(metas.map((m) => m.label)).size < metas.length) {\n for (const meta of metas) {\n meta.label = panSNHaplotype(meta.name) ?? meta.label;\n }\n }\n rows.sort(\n (a, b) => Number(b.meta.complete) - Number(a.meta.complete) || b.meta.bp - a.meta.bp || a.meta.label.localeCompare(b.meta.label)\n );\n const order = [0, ...rows.map((r) => r.row)];\n const { offsets, columns } = runs.reorder(order, [\n float64,\n float64,\n float64,\n (n) => new Uint8Array(n),\n (n) => new Int32Array(n)\n ]);\n const [start, bp, referenceStart, flags, chunk] = columns;\n return {\n origin: cut ? cut.start : startOf(first) ?? 0,\n rows: [referenceRow, ...rows.map((r) => r.meta)],\n offsets,\n start,\n bp,\n referenceStart,\n flags,\n chunk,\n chunks,\n visits: visits && visitColumns(visits, order, names)\n };\n}\nfunction visitColumns(visits, order, names) {\n const { offsets, columns } = visits.reorder(order, [\n (n) => new Int32Array(n),\n float64,\n float64,\n (n) => new Uint8Array(n)\n ]);\n const [node, start, bp, onReference] = columns;\n return { offsets, node, start, bp, onReference, names };\n}\nfunction runAt(t, k) {\n const f = t.flags[k];\n const run = {\n start: t.start[k],\n bp: t.bp[k],\n onReference: (f & RUN_ON_REFERENCE) !== 0\n };\n if (f & RUN_GAP) {\n run.gap = true;\n const cause = GAP_CAUSES[f >> CAUSE_SHIFT & 7];\n if (cause) {\n run.cause = cause;\n }\n const chunk = t.chunks[t.chunk[k]];\n if (chunk) {\n run.chunk = chunk;\n }\n } else {\n run.referenceStart = Number.isNaN(t.referenceStart[k]) ? void 0 : t.referenceStart[k];\n }\n if (f & RUN_REVERSED) {\n run.reversed = true;\n }\n return run;\n}\nfunction visitsOf(v, row) {\n const out = [];\n for (let k = v.offsets[row]; k < v.offsets[row + 1]; k++) {\n out.push({\n node: v.names[v.node[k]],\n start: v.start[k],\n bp: v.bp[k],\n onReference: v.onReference[k] === 1\n });\n }\n return out;\n}\nfunction walkRowsOf(t, unit) {\n const rows = t.rows.map((meta, i) => {\n const runs = [];\n for (let k = t.offsets[i]; k < t.offsets[i + 1]; k++) {\n runs.push(runAt(t, k));\n }\n return {\n ...meta,\n runs,\n visits: t.visits && visitsOf(t.visits, i)\n };\n });\n return { origin: t.origin, unit, reference: rows[0], rows: rows.slice(1) };\n}\n\nexport {\n referenceWalkName,\n walkRowRuns,\n runAt,\n walkRowsOf\n};\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["START_STOP_TAG", "END_STOP_TAG", "STOP_KINDS", "GAP_CAUSE_TEXT", "OUTSIDE_TEXT", "gapParts", "bp", "after", "before", "left", "right", "rest", "lead", "trail", "elsewhere", "s", "part", "stopAt", "table", "i", "ref", "stopOf", "kind", "trimmed", "chunk", "cut", "parseStopTag", "value", "kind", "fields", "bp", "trimmed", "chunk", "field", "at", "stopOf", "stopFields", "before", "after", "walkStopFields", "tags", "START_STOP_TAG", "END_STOP_TAG", "StopColumns", "stop", "STOP_KINDS", "chunk", "ref", "pLineName", "name", "start", "end", "tablePath", "w", "p", "walkName", "fields", "panSNFields", "steps", "abridged", "stopFields", "stopAt", "namesByList", "lists", "names", "listCount", "pathNames", "starts", "list", "i", "fill", "grouped", "listed", "_", "out", "k", "tableNodeIds", "n", "l", "traversals", "canonical", "claim", "node", "reversed", "stepCount", "s", "segment", "graphFromTables", "skips", "count", "declared", "drawnWalks", "ids", "nodes", "ref", "edges", "neighbours", "pairList", "a", "b", "near", "j", "addPair", "edgeLists", "adjacency", "adjacentNode", "adjacentList", "listOf", "nameIndex", "crossedList", "crossedName", "crossings", "lastWalk", "paths", "anchorPaths", "totalSteps", "visitPath", "visitStart", "visitReversed", "visitOrder", "blocks", "pathSamples", "edgeNameIndex", "edgeNames", "head", "pathName", "visitName", "named", "panSNSample", "edgeNamed", "visitSample", "first", "nodeIds", "pos", "prev", "at", "listNames", "edge", "walked", "PathVisits", "RUN_ON_REFERENCE", "RUN_REVERSED", "RUN_GAP", "GAP_CAUSES", "CAUSE_SHIFT", "causeFlags", "cause", "referenceOf", "names", "referencePath", "rankZero", "referenceWalkName", "graph", "p", "pathOrigin", "n", "namesReference", "reference", "contig", "panSNContig", "name", "graphPieces", "index", "lengths", "indexOf", "id", "i", "onReferenceContig", "stable", "node", "heads", "from", "to", "steps", "path", "tablePieces", "tables", "visits", "w", "kept", "tablePath", "h", "tableNodeIds", "sampleOf", "panSNSample", "labelOf", "Columns", "width", "a", "b", "c", "d", "e", "v", "order", "make", "offsets", "row", "columns", "m", "out", "at", "k", "float64", "walkRowRuns", "source", "region", "o", "all", "stableStart", "declared", "lengthOf", "nameOf", "startOf", "byStart", "pieceIds", "_", "referencePieces", "first", "others", "skips", "walks", "groupBy", "spanStart", "spanEnd", "revisits", "flankEnd", "flankStart", "cut", "piece", "pos", "s", "stop", "len", "starts", "flanked", "runs", "chunks", "chunkIndex", "chunkOf", "chunk2", "key", "stepStart", "rowOf", "pieces", "head", "ordered", "count", "abridgedSteps", "length", "unplaced", "end", "previous", "partsAt", "owed", "start2", "jump", "covered", "gap", "gapParts", "abridged", "stop2", "bp3", "onReference", "stepEnd", "partialSide", "i0", "i1", "flank", "near", "forward", "after", "last2", "contigEnds", "lo", "hi", "backward", "complete", "flankFrom", "flankTo", "axisStart", "trimAbridged", "inner", "trimmed", "abridgedAt", "placeStart", "leftTrim", "rightTrim", "bestEnd", "bestStart", "end2", "inside", "inward", "axis2", "bp2", "offReferenceBp", "gapBp", "step", "last", "lastFlags", "lastRef", "cursor", "placeOf", "best", "bestGap", "runBp", "runRef", "runFlags", "parts", "part", "on", "placed", "back", "skipRowOf", "bar2", "from2", "panSNFields", "referenceRow", "rows", "drawn", "axis", "bar", "metas", "r", "meta", "panSNHaplotype", "start", "bp", "referenceStart", "flags", "chunk", "visitColumns", "runAt", "f", "run", "visitsOf", "walkRowsOf", "unit"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as dt,c as ht,d as yt,g as C,j as K,l as xt,q as Mt,r as $,w as bt,x as vt}from"./chunk-WJHTNDTQ.js";import{b as pt,c as mt}from"./chunk-2FG67WIZ.js";var gt=20;function go(t){let n=o=>Math.round(o*100)/100;return t.map((o,e)=>`${e?"L":"M"}${n(o.x)},${n(o.y)}`).join("")}function wt(t,n,o,e,s){let r=Math.hypot(e-n,o-t);if(r===0)return[o,e];let a=(o-t)/r,c=(e-n)/r;return[o+s*a,e+s*c]}function Y(t,n){let o=1-n,e=o*o*o,s=3*o*o*n,r=3*o*n*n,a=n*n*n;return{x:e*t.x0+s*t.cx0+r*t.cx1+a*t.x1,y:e*t.y0+s*t.cy0+r*t.cy1+a*t.y1}}function kt(t){let n=t[Math.floor(t.length/2)];return n?Y(n,.5):void 0}function Pt(t){let n=1/0,o=1/0,e=-1/0,s=-1/0;for(let r of t)n=Math.min(n,r.x0,r.cx0,r.cx1,r.x1),e=Math.max(e,r.x0,r.cx0,r.cx1,r.x1),o=Math.min(o,r.y0,r.cy0,r.cy1,r.y1),s=Math.max(s,r.y0,r.cy0,r.cy1,r.y1);return{minX:n,minY:o,maxX:e,maxY:s}}function tn(t,n,o){let e=Y(t,n),s=Y(t,o),r=(o-n)/3,a=At(t,n),c=At(t,o);return{x0:e.x,y0:e.y,cx0:e.x+a.x*r,cy0:e.y+a.y*r,cx1:s.x-c.x*r,cy1:s.y-c.y*r,x1:s.x,y1:s.y}}function At(t,n){let o=1-n,e=3*o*o,s=6*o*n,r=3*n*n;return{x:e*(t.cx0-t.x0)+s*(t.cx1-t.cx0)+r*(t.x1-t.cx1),y:e*(t.cy0-t.y0)+s*(t.cy1-t.cy0)+r*(t.y1-t.cy1)}}var H=32;function nn(t,n,o,e){let s=[],r=0;return t.forEach((a,c)=>{let i=n[c],u=i/H,d=Y(a,0);for(let l=1;l<=H;l++){let y=Y(a,l/H);if(Math.max(d.x,y.x)+u>=o.minX&&Math.min(d.x,y.x)-u<=o.maxX&&Math.max(d.y,y.y)+u/e>=o.minY&&Math.min(d.y,y.y)-u/e<=o.maxY){let f=r+i*(l-1)/H,h=r+i*l/H,x=s.at(-1);x&&x[1]>=f?x[1]=h:s.push([f,h])}d=y}r+=i}),s}function wo(t,n,o=1,e){let s=t.map(l=>Math.hypot(l.cx0-l.x0,(l.cy0-l.y0)*o)+Math.hypot(l.cx1-l.cx0,(l.cy1-l.cy0)*o)+Math.hypot(l.x1-l.cx1,(l.y1-l.cy1)*o)),r=s.reduce((l,y)=>l+y,0),a=Math.round(r/n),c=Math.max(3,a%2?a:a+1),i=e?nn(t,s,e,o):void 0,u=0,d=[];for(let l=0;l<c;l+=2){let y=l/c*r,f=(l+1)/c*r;if(i){for(;u<i.length&&i[u][1]<y;)u++;if(u===i.length)break;if(i[u][0]>f)continue}let h=[],x=[],p=0;t.forEach((b,m)=>{let M=s[m],g=p+M;if(M>0&&g>y&&p<f){let v=Math.max(0,(y-p)/M),w=Math.min(1,(f-p)/M);h.push(tn(b,v,w)),x.push((m+v)/t.length,(m+w)/t.length)}p=g}),h.length&&d.push({curves:h,startAlong:x[0],endAlong:x.at(-1)})}return d}function Ao(t,n,o,e,s){let r=t.length,a=new Array(r);for(let c=0;c<r;c++){let i=t[c],u=c/r,d=(c+1)/r,l=n+(e-n)*u,y=o+(s-o)*u,f=n+(e-n)*d,h=o+(s-o)*d;a[c]={x0:i.x0+l,y0:i.y0+y,cx0:i.cx0+l,cy0:i.cy0+y,cx1:i.cx1+f,cy1:i.cy1+h,x1:i.x1+f,y1:i.y1+h}}return a}function _o(t,n,o){let e=new Array(t.length);for(let s=0;s<t.length;s++){let r=t[s];e[s]={x0:r.x0+n,y0:r.y0+o,cx0:r.cx0+n,cy0:r.cy0+o,cx1:r.cx1+n,cy1:r.cy1+o,x1:r.x1+n,y1:r.y1+o}}return e}function W(t,n){let o=t.length-1;return n==="end"?{at:t[o],inward:t[o-1]}:{at:t[0],inward:t[1]}}var on=.5,en=80;function F(t){return t.endsWith("-")?"-":"+"}function q(t){let n=(o,e)=>(e??F(o))===F(o);return{from:n(t.from,t.fromStrand)?"end":"start",to:n(t.to,t.toStrand)?"start":"end"}}function _t(t){let n=1/0,o=-1/0;for(let e of t)n=Math.min(n,e.x),o=Math.max(o,e.x);return{min:n,max:o}}function Et(t,n){return Math.max(0,n.min-t,t-n.max)}function It(t,n,o){let e=Et(t[0].x,n),s=Et(t[t.length-1].x,n);return e===s?o:e<s?"start":"end"}function rn(t,n){return{from:It(t,_t(n),"end"),to:It(n,_t(t),"start")}}var Lt=new WeakMap;function sn(t,n){let o=Lt.get(t);o||(o=new WeakMap,Lt.set(t,o));let e=o.get(n);return e||(e=rn(t,n),o.set(n,e)),e}var cn=.75,an=1.15,fn=.35,un=3*gt;function ln(t,n,o,e,s,r){let a=Math.hypot(o-t,e-n),c=a===0?1:(o-t)/a,i=a===0?0:(e-n)/a,u=0,d=1/0,l=-1/0;for(let x of s){let p=x.x-t,b=x.y-n,m=p*-i+b*c;Math.abs(m)>Math.abs(u)&&(u=m);let M=p*c+b*i;d=Math.min(d,M),l=Math.max(l,M)}let y=s.length?l-d:0,f=Math.max(Math.abs(u)*an/cn,y*fn),h=r===void 0?f:Math.min(f,r);return u<0?-h:h}function Xt({scaleX:t,scaleY:n}){return n/t}var dn=3;function J(t,n,o){let e=n.x-t.x,s=(n.y-t.y)*o,r=Math.hypot(e,s);return r===0?void 0:{x:e/r,y:s/r}}function Eo(t,n,o,e){let s=Xt(e),r=dn/Math.max(e.scaleX,1e-6),a=J(t[t.length-1],n[0],s)??J(t[0],t.at(-1),s)??J(n[0],n.at(-1),s)??{x:1,y:0},c=[];for(let i=0;i<o;i++){let u=(i-(o-1)/2)*r;c.push({x:-a.y*u,y:a.x*u/s})}return c}function Q(t,n){return t.map(o=>({x:o.x,y:o.y*n}))}function hn(t,n){for(let o of t)o.y0/=n,o.cy0/=n,o.cy1/=n,o.y1/=n;return t}function Z(t,n,o){let e=0;for(let s=1;s<t.length;s++){let r=t[s-1],a=t[s];e+=Math.hypot((a.x-r.x)*n,(a.y-r.y)*o)}return e}var yn=12,xn=40;function Ot(t,n){let o=Z(t,n,n);return Math.min(xn,Math.max(yn,o/2))/Math.max(n,Number.EPSILON)}function pn(t){return t.from!==t.to?!1:t.fromStrand&&t.toStrand&&t.fromStrand!==t.toStrand?t.fromStrand==="+"?"end":"start":!0}function Ct(t,n=!1){let o=pn(t);if(!n)return o;let e=q(t);return o===!1?e:e.from===e.to?e.from:!0}function mn(t,n){let{at:o,inward:e}=t,s=e?o.x-e.x:1,r=e?o.y-e.y:0,a=Math.hypot(s,r)||1,c=s/a,i=r/a,u=o.x,d=o.y,l=u+c*n/3,y=d+i*n/3,f=u+c*n,h=d+i*n,x=-i*n/2,p=c*n/2;return[{x0:u,y0:d,cx0:l,cy0:y,cx1:f+x,cy1:h+p,x1:f,y1:h},{x0:f,y0:h,cx0:f-x,cy0:h-p,cx1:l,cy1:y,x1:u,y1:d}]}function tt(t,n,o,e,s=[],r){let a=e.scaleX,c=Xt(e),i=r??(e.pixelRows?un:void 0);if(o===!1&&(o=sn(t,n)),c!==1)return hn(tt(Q(t,c),Q(n,c),o,{scaleX:a,scaleY:a},Q(s,c),i===void 0?void 0:i*c),c);if(typeof o=="string")return mn(W(t,o),Ot(t,a));let u=o===!0,d=o===!0?{from:"end",to:"start"}:o,l=W(t,d.from),y=W(n,d.to),f=l.at,h=y.at,x=f.x,p=f.y,b=h.x,m=h.y;if(u){let M=1,g=0;if(l.inward){let S=f.x-l.inward.x,k=f.y-l.inward.y,X=Math.hypot(S,k);X>0&&(M=S/X,g=k/X)}let v=Ot(t,a),w=-g,_=M,I=(f.x+h.x)/2+w*v,E=(f.y+h.y)/2+_*v,A=x+M*v,P=p+g*v,O=b-M*v,L=m-g*v;return[{x0:x,y0:p,cx0:A,cy0:P,cx1:A+w*v,cy1:P+_*v,x1:I,y1:E},{x0:I,y0:E,cx0:O+w*v,cy0:L+_*v,cx1:O,cy1:L,x1:b,y1:m}]}else{let M=l.inward??{x:f.x-(h.x-f.x),y:f.y-(h.y-f.y)},g=y.inward??{x:h.x-(f.x-h.x),y:h.y-(f.y-h.y)},v=Math.hypot(b-x,m-p),w=(at,it,Jt,Qt)=>{let ft=it.x-at.x,ut=it.y-at.y,lt=Math.hypot(ft,ut),Zt=lt===0?0:(Jt*ft+Qt*ut)/lt;return Math.max(0,Math.min(v*on,en,Zt*.5))},_=h.x-f.x,I=h.y-f.y,[E,A]=wt(M.x,M.y,f.x,f.y,w(M,f,_,I)),[P,O]=wt(g.x,g.y,h.x,h.y,w(g,h,-_,-I)),L=s.length?ln(x,p,b,m,s,i):0,S=v===0?1:v,k=(b-x)/S,X=(m-p)/S,T=-X*L,B=k*L,R=k*Math.abs(L),ct=X*Math.abs(L);return[{x0:x,y0:p,cx0:E+T-R,cy0:A+B-ct,cx1:P+T+R,cy1:O+B+ct,x1:b,y1:m}]}}function St(t,n){let o=t[0],e=t.at(-1);return Math.hypot(o.x-n.x,o.y-n.y)<Math.hypot(e.x-n.x,e.y-n.y)?"start":"end"}function Nt(t,n,o,e){let s=W(t,e?.from??St(t,o[0])),r=W(n,e?.to??St(n,o.at(-1))),a=[s.at,...o,r.at],c=u=>{let d=a[u],l=f=>Math.hypot(f.x-d.x,f.y-d.y),y=(f,h)=>{let x=f?l(f):0,p=l(h);return x===0?{x:h.x-d.x,y:h.y-d.y}:{x:(d.x-f.x)/x*p,y:(d.y-f.y)/x*p}};if(u===0)return y(s.inward,a[1]);if(u===a.length-1){let f=y(r.inward,a[u-1]);return{x:-f.x,y:-f.y}}return{x:(a[u+1].x-a[u-1].x)/2,y:(a[u+1].y-a[u-1].y)/2}},i=[];for(let u=0;u<a.length-1;u++){let d=a[u],l=a[u+1],y=c(u),f=c(u+1);i.push({x0:d.x,y0:d.y,cx0:d.x+y.x/3,cy0:d.y+y.y/3,cx1:l.x-f.x/3,cy1:l.y-f.y/3,x1:l.x,y1:l.y})}return i}function nt(){let t=new WeakMap;return(n,o,e)=>{let s=t.get(n);if(s?.deps.length===o.length&&s.deps.every((a,c)=>Object.is(a,o[c])))return s.value;let r=e();return t.set(n,{deps:o,value:r}),r}}var Bt=11,Mn=6.2,D=4;function ot(t){return t.length*Mn+D*2}function bn(t,n){return t.x0<n.x1&&t.x1>n.x0&&t.y0<n.y1&&t.y1>n.y0}function Tt(t,n){return t.x1<=0||t.x0>=n.width||t.y1<=0||t.y0>=n.height}function vn(t,n){return t.x0>=0&&t.x1<=n.width&&t.y0>=0&&t.y1<=n.height}function Rt(t,n=[]){let o=[...n];return e=>Tt(e,t)||o.some(s=>bn(s,e))?!1:(o.push(e),!0)}function Oo(t,n,o){let e=[],s=Bt+D*2,r=(c,i,u,d)=>{let l=ot(i),y=!1;for(let f=0;f<=(c.stack??0);f++){let h=u+d*f*s,x={x0:c.x-l/2,x1:c.x+l/2,y0:h-Bt-D,y1:h+D};if(Tt(x,n))break;if(vn(x,n)&&(c.fits?.(x)??!0)){if(o(x))return{placed:{...c,text:i,y:h,w:l},crowded:y};y=!0}}return{placed:void 0,crowded:y}},a=(c,i)=>{let u=r(c,i,c.y,c.y>n.height/2?-1:1);return u.placed??(c.flipY===void 0||u.crowded?void 0:r(c,i,c.flipY,c.flipY<c.y?-1:1).placed)};for(let c of t){let i=a(c,c.text)??(c.fallback===void 0?void 0:a(c,c.fallback));i&&e.push(i)}return e}function $t(t){return t==="+"?"-":"+"}function Co(t,n=new Set){let o=t.edges.map(q),e=new Map,s=(f,h,x)=>{dt(e,`${f}|${h}`,x)};t.edges.forEach((f,h)=>{s(f.from,o[h].from,h),s(f.to,o[h].to,h)});let r=f=>{let h=e.get(`${f}|end`);if(h?.length!==1)return;let x=h[0],p=t.edges[x];return p.from===f&&p.to!==f&&!n.has(f)&&!n.has(p.to)&&o[x].from==="end"&&o[x].to==="start"&&e.get(`${p.to}|start`)?.length===1?x:void 0},a=new Set,c=new Map,i=new Map;for(let f of t.nodes){let h=e.get(`${f.id}|start`),x=h?.length===1?t.edges[h[0]].from:void 0;if(c.has(f.id)||x!==void 0&&r(x)===h[0])continue;let p=[f.id];for(;;){let b=r(p.at(-1)),m=b===void 0?void 0:t.edges[b].to;if(m===void 0||c.has(m))break;a.add(b),p.push(m)}for(let b of p)c.set(b,f.id);p.length>1&&i.set(f.id,p)}for(let f of t.nodes)c.has(f.id)||c.set(f.id,f.id);let u=new Map(t.nodes.map(f=>[f.id,f])),d=[];for(let f of t.nodes){if(c.get(f.id)!==f.id)continue;let h=i.get(f.id);if(!h){d.push(f);continue}let x=h.map(m=>u.get(m)),p=x.filter(C),b=p.length?p.reduce((m,M)=>m.stable.start<=M.stable.start?m:M):x[0];d.push({id:f.id,name:f.name,length:x.reduce((m,M)=>m+M.length,0),depth:f.depth,stable:b.stable})}let l=new Set,y=[];return t.edges.forEach((f,h)=>{let x=c.get(f.from),p=c.get(f.to),b=o[h],m=`${x}|${b.from}>${p}|${b.to}`;a.has(h)||l.has(m)||(l.add(m),y.push({from:x,to:p,...b.from==="start"?{fromStrand:$t(F(x))}:{},...b.to==="end"?{toStrand:$t(F(p))}:{}}))}),{graph:{...t,nodes:d,edges:y,paths:void 0,pathVisits:void 0},runs:i}}function No(t,n,o){let e={...t};for(let[s,r]of n){let a=t[s];if(!a?.length)continue;delete e[s];let c=rt(a),i=c.at(-1),u=r.map(y=>Math.max(o(y),0)),d=u.reduce((y,f)=>y+f,0),l=0;r.forEach((y,f)=>{let h=d?u[f]/d*i:i/r.length,x=f===r.length-1?i:l+h;e[y]=Yt(a,c,l,x),l=x})}return e}function Bo(t,n,o){if(t.length===0)return[];let e=rt(t),s=e.at(-1);return Yt(t,e,n*s,o*s)}function Ht(t){let n=rt(t);return et(t,n,n.at(-1)/2)}function rt(t){let n=[0];for(let o=1;o<t.length;o++)n.push(n[o-1]+Math.hypot(t[o].x-t[o-1].x,t[o].y-t[o-1].y));return n}function Wt(t,n){let o=0,e=t.length;for(;o<e;){let s=o+e>>1;t[s]<n?o=s+1:e=s}return o}function et(t,n,o){if(o<=0)return{...t[0]};let e=Wt(n,o);if(e>=n.length)return{...t.at(-1)};let s=n[e]-n[e-1],r=s>0?(o-n[e-1])/s:0,a=t[e-1],c=t[e];return{x:a.x+(c.x-a.x)*r,y:a.y+(c.y-a.y)*r}}function Yt(t,n,o,e){let s=[et(t,n,o)];for(let r=Wt(n,o);r<t.length&&n[r]<e;r++)n[r]>o&&s.push({...t[r]});return s.push(et(t,n,e)),s}function Wo(t,n){let o=new Set(t.nodes.filter(i=>C(i)&&K(i,n)).map(i=>i.id)),e=t.paths??[];if(o.size===0||e.length===0)return t;let s=e.map(i=>{let u=-1,d=-1;return i.nodeIds.forEach((l,y)=>{o.has(l)&&(u<0&&(u=y),d=y)}),u<0?void 0:{first:u,last:d}});if(s.every((i,u)=>i?.first===0&&i.last===e[u].nodeIds.length-1))return t;let r=new Set,a=[],c=new Map;return e.forEach((i,u)=>{let d=s[u];if(d){let l=i.nodeIds.slice(d.first,d.last+1);for(let y of l)r.add(y);a.push({...i,nodeIds:l}),c.set(i.name,{first:d.first,nodeIds:l})}}),{...t,nodes:t.nodes.filter(i=>r.has(i.id)),edges:t.edges.filter(i=>r.has(i.from)&&r.has(i.to)),paths:a,pathVisits:t.pathVisits&&gn(t.pathVisits,e,s,new Map(t.nodes.map(i=>[i.id,i.name]))),anchorPaths:bt(t,c)}}function gn(t,n,o,e){let s=t.replay(),r=new Mt;return n.forEach((a,c)=>{let i=t.pathIndex($(a.name).name),u=o[c];a.nodeIds.forEach((d,l)=>{let y=e.get(d)??d,f=s(t.slot(y),i);f>=0&&u&&l>=u.first&&l<=u.last&&r.add(y,t.paths[i],t.samples[i],t.start[f],t.reversed[f]===1)})}),r.build()}function Yo(t,n,o){let e=t.nodes.map(s=>{if(!C(s))return s;let r=s.stable.start,a=r+s.length,[c,i]=K(s,n)?[Math.max(r,n.start),Math.min(a,n.end)]:a<=n.start?[Math.max(r,a-o),a]:[r,Math.min(a,r+o)];return c===r&&i===a?s:{...s,length:i-c,stable:{...s.stable,start:c},unclipped:{start:r,length:s.length}}});return e.some((s,r)=>s!==t.nodes[r])?{...t,nodes:e}:t}function Ft(t){return t.nodes.some(n=>n.unclipped)?{...t,nodes:t.nodes.map(({unclipped:n,...o})=>n&&o.stable?{...o,length:n.length,stable:{...o.stable,start:n.start}}:o)}:t}var wn=1,Uo=t=>`skips ${t??"the reference"} sequence (a deletion)`;function An(t,n){return n.flatMap(o=>t[o]??[])}function Gt(t,n,o,e,s,r){let a=t[n.from],c=t[n.to];if(!(!a?.length||!c?.length))return s?Nt(a,c,s,r?q(n):void 0):tt(a,c,Ct(n,r),o,e?An(t,e):[])}function _n(t){let n=ht(t.nodes.filter(C),o=>o.stable.refName);for(let o of n.values())o.sort((e,s)=>e.stable.start-s.stable.start);return n}function En(t,n,o){let e=[];if(t)for(let s=xt(t,n);s<t.length;s++){let r=t[s];if(r.stable.start>=o)break;r.stable.start+r.length<=o&&e.push(r.id)}return e}function In(t,n,o,e){let{fromStrand:s,toStrand:r}=t;if(s===void 0||r===void 0)return!0;let a=s===n.strand,c=r===o.strand;return e?a&&c:!a&&!c}function Ln(t,n,o,e){let s;for(let r of e(n))for(let a of e(o)){let c=r.start<=a.start,i=c?{start:r.start+n.length,end:a.start}:{start:a.start+o.length,end:r.start};In(t,r,a,c)&&(!s||Math.abs(i.end-i.start)<Math.abs(s.end-s.start))&&(s=i)}return s}var On=.01;function Sn(t,n){let o=new Map;for(let[e,s]of t){let r=s.flatMap(a=>{let c=n(a).map(i=>i.start);return c.slice(1).map((i,u)=>({at:c[u],copy:i-c[u]}))});r.length&&o.set(e,r.sort((a,c)=>a.at-c.at))}return o}function kn(t,n,o){if(!t)return!1;let e=yt(t.length,r=>t[r].at<n),s=[t[e-1],t[e]].filter(r=>r!==void 0).sort((r,a)=>Math.abs(r.at-n)-Math.abs(a.at-n))[0];return s!==void 0&&Math.abs(s.at-n)<=s.copy&&Math.abs(o-s.copy)<=s.copy*On}function Pn(t){let n=Ft(t),o=new Map(n.nodes.map(a=>[a.id,a])),e=_n(n),s=vt(n);return{links:n.edges.flatMap((a,c)=>{let i=o.get(a.from),u=o.get(a.to);return!a.foldBridge&&i!==void 0&&u!==void 0&&C(i)&&C(u)&&i.stable.refName===u.stable.refName?[{edgeIndex:c,edge:a,refName:i.stable.refName,span:Ln(a,i,u,s)}]:[]}),backbone:e,copies:Sn(e,s)}}function Ko(t){let{links:n,backbone:o,copies:e}=Pn(t);return n.flatMap(({edgeIndex:s,edge:r,refName:a,span:c})=>{let i=c?c.end-c.start:0;return c&&i>=wn&&!kn(e.get(a),c.start,i)?[{edgeIndex:s,from:r.from,to:r.to,...r.fromStrand?{fromStrand:r.fromStrand}:{},...r.toStrand?{toStrand:r.toStrand}:{},refName:a,start:c.start,end:c.end,bp:i,bypassed:En(o.get(a),c.start,c.end)}]:[]})}function Xn(t,n){let o=new Map,e=a=>{let c=a;for(;o.has(c);)c=o.get(c);return c!==a&&o.set(a,c),c},s=(a,c)=>{let[i,u]=[e(a),e(c)];return i!==u&&o.set(i,u),i!==u},r=new Set(n);return t.edges.forEach((a,c)=>{r.has(c)||s(a.from,a.to)}),new Set(n.filter(a=>{let c=t.edges[a];return!s(c.from,c.to)}))}function Jo(t,n){return n?.walks.length?t.filter(o=>!n.edgeIndexes.has(o.edgeIndex)):t}var qt=new WeakMap;function Qo(t,n,o=!0){let e=qt.get(n);e||(e=new Map,qt.set(n,e));let s=e.get(o);if(!s){let r=o?new Set:Xn(t,n.map(a=>a.edgeIndex));s={shown:n.filter(a=>!r.has(a.edgeIndex)),bypassed:new Map(n.map(a=>[a.edgeIndex,a.bypassed])),hidden:r},e.set(o,s)}return s}var Cn=26,Nn=4e4,Bn=8,Tn=8,Rn=5.7,$n=6,Hn=13,G=3,V=2;function U(t){return(t.length*Rn+$n+G)/2}var N=(Hn+G)/2,Wn=U("1 bp");function z(t,n,o){return{x0:n-t,x1:n+t,y0:o-N,y1:o+N}}function se(t,n){return{x0:6,x1:6+ot(t)+G,y0:n-8-G/2,y1:n+8+G/2}}function j(t,n,o){return o<n?t:Math.min(Math.max(t,n),o)}function zt(t){return String(t).replace(/\B(?=(\d{3})+$)/g,",")}function jt(t){let[n,o]=t>=999500?[t/1e6,"Mb"]:t>=1e3?[t/1e3,"kb"]:[];return n===void 0?`${t} bp`:`${+n.toFixed(n>=100?0:1)} ${o}`}function Dt(t){return`${jt(t)} del`}function Yn(t,n,o,e){let s=t[0],r=t[t.length-1],a=(n.x-(s.x0+r.x1)/2)*o,c=(n.y-(s.y0+r.y1)/2)*e,i=Math.hypot(a,c);return i===0?{x:0,y:-1}:{x:a/i,y:c/i}}function Fn(t,n){return Math.abs(n.x)*(t.x1-t.x0)/2+Math.abs(n.y)*(t.y1-t.y0)/2}function qn(t,n){let o=(t.x1-t.x0)/2,e=(t.y1-t.y0)/2;return Math.min(n.x===0?1/0:o/Math.abs(n.x),n.y===0?1/0:e/Math.abs(n.y))}function Gn(t,n){let o=1/0,e=1/0,s=-1/0,r=-1/0;for(let a of t)for(let c of n[a]??[])o=Math.min(o,c.x),s=Math.max(s,c.x),e=Math.min(e,c.y),r=Math.max(r,c.y);return o===1/0?void 0:{minX:o,minY:e,maxX:s,maxY:r}}var Dn=nt();function Vn(t,n){return Dn(t,[n],()=>Object.entries(t).filter(([o,e])=>e.length>0&&n.has(o)).sort(([o],[e])=>n.get(e)-n.get(o)))}var zn=nt();function jn(t,n,o,e,s,r){let{scaleX:a,scaleY:c}=o;return zn(t,[n,s,r,a,c,e],()=>{let i=[];for(let u of[...n].sort((d,l)=>l.bp-d.bp)){let d=Gt(t,u,o,u.bypassed,s?.[u.edgeIndex],r),l=d?kt(d):void 0;if(d&&l){let{minX:y,minY:f,maxX:h,maxY:x}=Pt(d);i.push({deletion:u,curves:d,apex:l,extent:Math.max((h-y)*a,(x-f)*c)})}}return i})}function Un({nodePositions:t,nodeLengths:n,deletions:o,deletionRoutes:e,stranded:s=!1,alleleDeletions:r,axis:a,translateX:c,translateY:i,width:u,height:d,version:l=0}){let{scaleX:y,scaleY:f}=a,h=[],x=[];for(let{deletion:m,curves:M,apex:g,extent:v}of jn(t,o,a,l,e,s))if(v>=Cn){let w=Dt(m.bp),_=U(w),I=z(_,0,0),E=g.x*y+c,A=g.y*f+i;if(E<0||E>u||A<0||A>d)continue;let P=v>=_*2/V,O=Yn(M,g,y,f),L=Fn(I,O)+Tn,S=P?E:j(E+O.x*L,_,u-_),k=P?A:j(A+O.y*L,N,d-N),X=Math.hypot(S-E,k-A),T;if(X>0){let B={x:(S-E)/X,y:(k-A)/X},R=qn(I,B);T={arcX:E,arcY:A,labelX:S-B.x*R,labelY:k-B.y*R}}h.push({label:{key:`del:${m.edgeIndex}`,text:w,x:S,y:k,kind:"deletion",leader:T},box:z(_,S,k)})}let p=new Set,b=[...r??[]].sort((m,M)=>M.bp-m.bp);for(let m of b){let M=Gn(m.nodeIds,t);if(!M)continue;let g=Math.max(M.minX*y+c,0),v=Math.min(M.maxX*y+c,u),w=Math.max(M.minY*f+i,0),_=Math.min(M.maxY*f+i,d);if(v<g||_<w)continue;let I=Math.max(v-g,_-w),E=Dt(m.bp),A=U(E);if(I>=A*2/V){for(let L of m.nodeIds)p.add(L);let P=j((g+v)/2,A,u-A),O=j((w+_)/2,N,d-N);h.push({label:{key:`alleledel:${m.nodeIds.join(",")}`,text:E,x:P,y:O,kind:"deletion"},box:z(A,P,O)})}}for(let[m,M]of Vn(t,n)){if(p.has(m))continue;let{x:g,y:v}=Ht(M),w=v*f+i;if(w+N<=0||w-N>=d)continue;let _=Z(M,y,f);if(_<Wn*2/V)continue;let I=jt(n.get(m)),E=U(I);if(_>=E*2/V){let A=g*y+c;x.push({label:{key:`node:${m}`,text:I,x:A,y:w,kind:"node"},box:z(E,A,w)})}}return{deletions:h,nodes:x}}function Kn(t,n){return Math.max(Bn,Math.floor(t*n/Nn))}function Vt(t,n,o=1/0){let e=[];for(let{label:s,box:r}of t){if(e.length>=o)break;n(r)&&e.push(s)}return e}function ce({reserved:t,take:n,...o}){n??=Rt(o,t);let{deletions:e,nodes:s}=Un(o);return[...Vt(e,n),...Vt(s,n,Kn(o.width,o.height))]}function le(t){let n=0;for(let o=0;o<t.length;o++)n=t.charCodeAt(o)+((n<<5)-n);return Math.abs(n%360)}function Jn(t,n){return t*360/n}var Qn=.7,Zn=.5,to=16;function de(t){return t>0&&t<=to}function no(t,n){return`hsl(${Jn(t,n)}, ${Qn*100}%, ${Zn*100}%)`}function he(t,n){return`hsl(0, 0%, ${n>1?25+45*t/(n-1):45}%)`}function oo(t){let n=$(t).name.split("#"),o=n.join("#");if(n.length>=3&&pt(n[0])){let e=n.slice(2).join("#");return[e,e,o]}return[n[0],n.slice(0,2).join("#"),o]}function eo(t,n){let{start:o}=$(t);return n.map(e=>`${e} @${zt(o)}`)}function ye(t,n){let o=new Map;t.forEach((d,l)=>{o.has(d.name)||o.set(d.name,l)});let e=[...o].map(([d,l])=>({name:d,i:l})),s=e.map(d=>oo(d.name)),r=d=>e.map((l,y)=>s[y][d]),a=d=>e.map((l,y)=>eo(l.name,s[y])[d]),c=[r(0),r(1),a(0),r(2),a(1),a(2)],u=c.find(d=>new Set(d).size===e.length)??c.at(-1);return e.map(({name:d,i:l},y)=>({name:d,label:u[y],color:n?.[l]??no(l,t.length)}))}function xe(t){let n=new Map;return new Map([...t].sort((o,e)=>o.label.localeCompare(e.label)).map(o=>{let e=(n.get(o.label)??0)+1;return n.set(o.label,e),[o.name,e>1?`${o.label} (${e})`:o.label]}))}var Me=[{value:"depth",label:"By depth",description:"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform."},{value:"frequency",label:"By frequency",description:"As wide as the share of haplotypes that pass a node, or its AF tag: full width at 100%, half at 50%, and wider where a haplotype passes it more than once."},{value:"uniform",label:"Uniform",description:"Every node the same thickness."}],ro=.3,st=3,so=.05;function co(t){let n=0,o=0;for(let e of t.nodes)n+=e.depth*e.length,o+=e.length;return o>0?n/o:0}function ao(t){return t.sample===void 0?mt(t.name)??t.name:`${t.sample}#${t.haplotype??0}`}function io(t){return new Set((t.paths??[]).map(ao)).size}function fo(t,n){return t.frequency??(n>0?t.depth/n:void 0)}function uo(t,n){return n==="depth"?co(t):n==="frequency"?io(t):0}function Ut(t){return Math.min(st,Math.max(so,t))}function lo(t,n){let o=fo(t,n);return o===void 0?1:Ut(o)}function be(t){return[1,.5,.1].map(n=>({label:`${n*100}%`,widthPx:t*Ut(n)}))}function ho(t,n){return!(n>0)||!(t.depth>0)?1:Math.min(st,Math.max(ro,Math.sqrt(t.depth/n)))}function yo(t,n,o,e){return n*(o==="depth"?ho(t,e):o==="frequency"?lo(t,e):1)}function xo(t,n){return t*(n==="uniform"?1:st)}var po=4;function mo(t,n){return Math.max(t/n,po)}function ve(t,n,o,e,s=0){let r=t?uo(t,e):0,a=c=>s>0?mo(c,s)*s/2:c/2;return{maxHalfWidthPx:a(xo(o,e)),halfWidthPx:c=>{let i=n?.get(c);return a(i?yo(i,o,e,r):o)}}}var we=[{value:"uniform",label:"Uniform",description:"Every link the same thickness."},{value:"walks",label:"By walks",description:"Thicker the more walks take a link, on the square root of its count against the busiest link in the cut. A graph without walks draws uniform."}],Kt=.5,Mo=4;function Ae(t){let n=0;for(let o of t.edges)n=Math.max(n,o.pathIds?.length??0);return n}function _e(t,n,o){return o==="uniform"||n===0?1:Kt+(Mo-Kt)*Math.sqrt(t/n)}export{gt as a,go as b,Pt as c,wo as d,Ao as e,_o as f,F as g,q as h,Xt as i,Eo as j,Z as k,nt as l,Bt as m,Mn as n,D as o,ot as p,Rt as q,Oo as r,Co as s,No as t,Bo as u,Wo as v,Yo as w,Uo as x,Gt as y,Ko as z,Jo as A,Qo as B,se as C,zt as D,jt as E,ce as F,le as G,Jn as H,Qn as I,Zn as J,to as K,de as L,no as M,he as N,ye as O,xe as P,Me as Q,co as R,uo as S,be as T,yo as U,mo as V,ve as W,we as X,Ae as Y,_e as Z};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as dt,c as ht,d as yt,g as C,j as K,l as xt,q as Mt,r as $,w as bt,x as vt}from"./chunk-SKB4GSET.js";import{b as pt,c as mt}from"./chunk-KBOVZ3GI.js";var gt=20;function go(t){let n=o=>Math.round(o*100)/100;return t.map((o,e)=>`${e?"L":"M"}${n(o.x)},${n(o.y)}`).join("")}function wt(t,n,o,e,s){let r=Math.hypot(e-n,o-t);if(r===0)return[o,e];let a=(o-t)/r,c=(e-n)/r;return[o+s*a,e+s*c]}function Y(t,n){let o=1-n,e=o*o*o,s=3*o*o*n,r=3*o*n*n,a=n*n*n;return{x:e*t.x0+s*t.cx0+r*t.cx1+a*t.x1,y:e*t.y0+s*t.cy0+r*t.cy1+a*t.y1}}function kt(t){let n=t[Math.floor(t.length/2)];return n?Y(n,.5):void 0}function Pt(t){let n=1/0,o=1/0,e=-1/0,s=-1/0;for(let r of t)n=Math.min(n,r.x0,r.cx0,r.cx1,r.x1),e=Math.max(e,r.x0,r.cx0,r.cx1,r.x1),o=Math.min(o,r.y0,r.cy0,r.cy1,r.y1),s=Math.max(s,r.y0,r.cy0,r.cy1,r.y1);return{minX:n,minY:o,maxX:e,maxY:s}}function tn(t,n,o){let e=Y(t,n),s=Y(t,o),r=(o-n)/3,a=At(t,n),c=At(t,o);return{x0:e.x,y0:e.y,cx0:e.x+a.x*r,cy0:e.y+a.y*r,cx1:s.x-c.x*r,cy1:s.y-c.y*r,x1:s.x,y1:s.y}}function At(t,n){let o=1-n,e=3*o*o,s=6*o*n,r=3*n*n;return{x:e*(t.cx0-t.x0)+s*(t.cx1-t.cx0)+r*(t.x1-t.cx1),y:e*(t.cy0-t.y0)+s*(t.cy1-t.cy0)+r*(t.y1-t.cy1)}}var H=32;function nn(t,n,o,e){let s=[],r=0;return t.forEach((a,c)=>{let i=n[c],u=i/H,d=Y(a,0);for(let l=1;l<=H;l++){let y=Y(a,l/H);if(Math.max(d.x,y.x)+u>=o.minX&&Math.min(d.x,y.x)-u<=o.maxX&&Math.max(d.y,y.y)+u/e>=o.minY&&Math.min(d.y,y.y)-u/e<=o.maxY){let f=r+i*(l-1)/H,h=r+i*l/H,x=s.at(-1);x&&x[1]>=f?x[1]=h:s.push([f,h])}d=y}r+=i}),s}function wo(t,n,o=1,e){let s=t.map(l=>Math.hypot(l.cx0-l.x0,(l.cy0-l.y0)*o)+Math.hypot(l.cx1-l.cx0,(l.cy1-l.cy0)*o)+Math.hypot(l.x1-l.cx1,(l.y1-l.cy1)*o)),r=s.reduce((l,y)=>l+y,0),a=Math.round(r/n),c=Math.max(3,a%2?a:a+1),i=e?nn(t,s,e,o):void 0,u=0,d=[];for(let l=0;l<c;l+=2){let y=l/c*r,f=(l+1)/c*r;if(i){for(;u<i.length&&i[u][1]<y;)u++;if(u===i.length)break;if(i[u][0]>f)continue}let h=[],x=[],p=0;t.forEach((b,m)=>{let M=s[m],g=p+M;if(M>0&&g>y&&p<f){let v=Math.max(0,(y-p)/M),w=Math.min(1,(f-p)/M);h.push(tn(b,v,w)),x.push((m+v)/t.length,(m+w)/t.length)}p=g}),h.length&&d.push({curves:h,startAlong:x[0],endAlong:x.at(-1)})}return d}function Ao(t,n,o,e,s){let r=t.length,a=new Array(r);for(let c=0;c<r;c++){let i=t[c],u=c/r,d=(c+1)/r,l=n+(e-n)*u,y=o+(s-o)*u,f=n+(e-n)*d,h=o+(s-o)*d;a[c]={x0:i.x0+l,y0:i.y0+y,cx0:i.cx0+l,cy0:i.cy0+y,cx1:i.cx1+f,cy1:i.cy1+h,x1:i.x1+f,y1:i.y1+h}}return a}function _o(t,n,o){let e=new Array(t.length);for(let s=0;s<t.length;s++){let r=t[s];e[s]={x0:r.x0+n,y0:r.y0+o,cx0:r.cx0+n,cy0:r.cy0+o,cx1:r.cx1+n,cy1:r.cy1+o,x1:r.x1+n,y1:r.y1+o}}return e}function W(t,n){let o=t.length-1;return n==="end"?{at:t[o],inward:t[o-1]}:{at:t[0],inward:t[1]}}var on=.5,en=80;function F(t){return t.endsWith("-")?"-":"+"}function q(t){let n=(o,e)=>(e??F(o))===F(o);return{from:n(t.from,t.fromStrand)?"end":"start",to:n(t.to,t.toStrand)?"start":"end"}}function _t(t){let n=1/0,o=-1/0;for(let e of t)n=Math.min(n,e.x),o=Math.max(o,e.x);return{min:n,max:o}}function Et(t,n){return Math.max(0,n.min-t,t-n.max)}function It(t,n,o){let e=Et(t[0].x,n),s=Et(t[t.length-1].x,n);return e===s?o:e<s?"start":"end"}function rn(t,n){return{from:It(t,_t(n),"end"),to:It(n,_t(t),"start")}}var Lt=new WeakMap;function sn(t,n){let o=Lt.get(t);o||(o=new WeakMap,Lt.set(t,o));let e=o.get(n);return e||(e=rn(t,n),o.set(n,e)),e}var cn=.75,an=1.15,fn=.35,un=3*gt;function ln(t,n,o,e,s,r){let a=Math.hypot(o-t,e-n),c=a===0?1:(o-t)/a,i=a===0?0:(e-n)/a,u=0,d=1/0,l=-1/0;for(let x of s){let p=x.x-t,b=x.y-n,m=p*-i+b*c;Math.abs(m)>Math.abs(u)&&(u=m);let M=p*c+b*i;d=Math.min(d,M),l=Math.max(l,M)}let y=s.length?l-d:0,f=Math.max(Math.abs(u)*an/cn,y*fn),h=r===void 0?f:Math.min(f,r);return u<0?-h:h}function Xt({scaleX:t,scaleY:n}){return n/t}var dn=3;function J(t,n,o){let e=n.x-t.x,s=(n.y-t.y)*o,r=Math.hypot(e,s);return r===0?void 0:{x:e/r,y:s/r}}function Eo(t,n,o,e){let s=Xt(e),r=dn/Math.max(e.scaleX,1e-6),a=J(t[t.length-1],n[0],s)??J(t[0],t.at(-1),s)??J(n[0],n.at(-1),s)??{x:1,y:0},c=[];for(let i=0;i<o;i++){let u=(i-(o-1)/2)*r;c.push({x:-a.y*u,y:a.x*u/s})}return c}function Q(t,n){return t.map(o=>({x:o.x,y:o.y*n}))}function hn(t,n){for(let o of t)o.y0/=n,o.cy0/=n,o.cy1/=n,o.y1/=n;return t}function Z(t,n,o){let e=0;for(let s=1;s<t.length;s++){let r=t[s-1],a=t[s];e+=Math.hypot((a.x-r.x)*n,(a.y-r.y)*o)}return e}var yn=12,xn=40;function Ot(t,n){let o=Z(t,n,n);return Math.min(xn,Math.max(yn,o/2))/Math.max(n,Number.EPSILON)}function pn(t){return t.from!==t.to?!1:t.fromStrand&&t.toStrand&&t.fromStrand!==t.toStrand?t.fromStrand==="+"?"end":"start":!0}function Ct(t,n=!1){let o=pn(t);if(!n)return o;let e=q(t);return o===!1?e:e.from===e.to?e.from:!0}function mn(t,n){let{at:o,inward:e}=t,s=e?o.x-e.x:1,r=e?o.y-e.y:0,a=Math.hypot(s,r)||1,c=s/a,i=r/a,u=o.x,d=o.y,l=u+c*n/3,y=d+i*n/3,f=u+c*n,h=d+i*n,x=-i*n/2,p=c*n/2;return[{x0:u,y0:d,cx0:l,cy0:y,cx1:f+x,cy1:h+p,x1:f,y1:h},{x0:f,y0:h,cx0:f-x,cy0:h-p,cx1:l,cy1:y,x1:u,y1:d}]}function tt(t,n,o,e,s=[],r){let a=e.scaleX,c=Xt(e),i=r??(e.pixelRows?un:void 0);if(o===!1&&(o=sn(t,n)),c!==1)return hn(tt(Q(t,c),Q(n,c),o,{scaleX:a,scaleY:a},Q(s,c),i===void 0?void 0:i*c),c);if(typeof o=="string")return mn(W(t,o),Ot(t,a));let u=o===!0,d=o===!0?{from:"end",to:"start"}:o,l=W(t,d.from),y=W(n,d.to),f=l.at,h=y.at,x=f.x,p=f.y,b=h.x,m=h.y;if(u){let M=1,g=0;if(l.inward){let S=f.x-l.inward.x,k=f.y-l.inward.y,X=Math.hypot(S,k);X>0&&(M=S/X,g=k/X)}let v=Ot(t,a),w=-g,_=M,I=(f.x+h.x)/2+w*v,E=(f.y+h.y)/2+_*v,A=x+M*v,P=p+g*v,O=b-M*v,L=m-g*v;return[{x0:x,y0:p,cx0:A,cy0:P,cx1:A+w*v,cy1:P+_*v,x1:I,y1:E},{x0:I,y0:E,cx0:O+w*v,cy0:L+_*v,cx1:O,cy1:L,x1:b,y1:m}]}else{let M=l.inward??{x:f.x-(h.x-f.x),y:f.y-(h.y-f.y)},g=y.inward??{x:h.x-(f.x-h.x),y:h.y-(f.y-h.y)},v=Math.hypot(b-x,m-p),w=(at,it,Jt,Qt)=>{let ft=it.x-at.x,ut=it.y-at.y,lt=Math.hypot(ft,ut),Zt=lt===0?0:(Jt*ft+Qt*ut)/lt;return Math.max(0,Math.min(v*on,en,Zt*.5))},_=h.x-f.x,I=h.y-f.y,[E,A]=wt(M.x,M.y,f.x,f.y,w(M,f,_,I)),[P,O]=wt(g.x,g.y,h.x,h.y,w(g,h,-_,-I)),L=s.length?ln(x,p,b,m,s,i):0,S=v===0?1:v,k=(b-x)/S,X=(m-p)/S,T=-X*L,B=k*L,R=k*Math.abs(L),ct=X*Math.abs(L);return[{x0:x,y0:p,cx0:E+T-R,cy0:A+B-ct,cx1:P+T+R,cy1:O+B+ct,x1:b,y1:m}]}}function St(t,n){let o=t[0],e=t.at(-1);return Math.hypot(o.x-n.x,o.y-n.y)<Math.hypot(e.x-n.x,e.y-n.y)?"start":"end"}function Nt(t,n,o,e){let s=W(t,e?.from??St(t,o[0])),r=W(n,e?.to??St(n,o.at(-1))),a=[s.at,...o,r.at],c=u=>{let d=a[u],l=f=>Math.hypot(f.x-d.x,f.y-d.y),y=(f,h)=>{let x=f?l(f):0,p=l(h);return x===0?{x:h.x-d.x,y:h.y-d.y}:{x:(d.x-f.x)/x*p,y:(d.y-f.y)/x*p}};if(u===0)return y(s.inward,a[1]);if(u===a.length-1){let f=y(r.inward,a[u-1]);return{x:-f.x,y:-f.y}}return{x:(a[u+1].x-a[u-1].x)/2,y:(a[u+1].y-a[u-1].y)/2}},i=[];for(let u=0;u<a.length-1;u++){let d=a[u],l=a[u+1],y=c(u),f=c(u+1);i.push({x0:d.x,y0:d.y,cx0:d.x+y.x/3,cy0:d.y+y.y/3,cx1:l.x-f.x/3,cy1:l.y-f.y/3,x1:l.x,y1:l.y})}return i}function nt(){let t=new WeakMap;return(n,o,e)=>{let s=t.get(n);if(s?.deps.length===o.length&&s.deps.every((a,c)=>Object.is(a,o[c])))return s.value;let r=e();return t.set(n,{deps:o,value:r}),r}}var Bt=11,Mn=6.2,D=4;function ot(t){return t.length*Mn+D*2}function bn(t,n){return t.x0<n.x1&&t.x1>n.x0&&t.y0<n.y1&&t.y1>n.y0}function Tt(t,n){return t.x1<=0||t.x0>=n.width||t.y1<=0||t.y0>=n.height}function vn(t,n){return t.x0>=0&&t.x1<=n.width&&t.y0>=0&&t.y1<=n.height}function Rt(t,n=[]){let o=[...n];return e=>Tt(e,t)||o.some(s=>bn(s,e))?!1:(o.push(e),!0)}function Oo(t,n,o){let e=[],s=Bt+D*2,r=(c,i,u,d)=>{let l=ot(i),y=!1;for(let f=0;f<=(c.stack??0);f++){let h=u+d*f*s,x={x0:c.x-l/2,x1:c.x+l/2,y0:h-Bt-D,y1:h+D};if(Tt(x,n))break;if(vn(x,n)&&(c.fits?.(x)??!0)){if(o(x))return{placed:{...c,text:i,y:h,w:l},crowded:y};y=!0}}return{placed:void 0,crowded:y}},a=(c,i)=>{let u=r(c,i,c.y,c.y>n.height/2?-1:1);return u.placed??(c.flipY===void 0||u.crowded?void 0:r(c,i,c.flipY,c.flipY<c.y?-1:1).placed)};for(let c of t){let i=a(c,c.text)??(c.fallback===void 0?void 0:a(c,c.fallback));i&&e.push(i)}return e}function $t(t){return t==="+"?"-":"+"}function Co(t,n=new Set){let o=t.edges.map(q),e=new Map,s=(f,h,x)=>{dt(e,`${f}|${h}`,x)};t.edges.forEach((f,h)=>{s(f.from,o[h].from,h),s(f.to,o[h].to,h)});let r=f=>{let h=e.get(`${f}|end`);if(h?.length!==1)return;let x=h[0],p=t.edges[x];return p.from===f&&p.to!==f&&!n.has(f)&&!n.has(p.to)&&o[x].from==="end"&&o[x].to==="start"&&e.get(`${p.to}|start`)?.length===1?x:void 0},a=new Set,c=new Map,i=new Map;for(let f of t.nodes){let h=e.get(`${f.id}|start`),x=h?.length===1?t.edges[h[0]].from:void 0;if(c.has(f.id)||x!==void 0&&r(x)===h[0])continue;let p=[f.id];for(;;){let b=r(p.at(-1)),m=b===void 0?void 0:t.edges[b].to;if(m===void 0||c.has(m))break;a.add(b),p.push(m)}for(let b of p)c.set(b,f.id);p.length>1&&i.set(f.id,p)}for(let f of t.nodes)c.has(f.id)||c.set(f.id,f.id);let u=new Map(t.nodes.map(f=>[f.id,f])),d=[];for(let f of t.nodes){if(c.get(f.id)!==f.id)continue;let h=i.get(f.id);if(!h){d.push(f);continue}let x=h.map(m=>u.get(m)),p=x.filter(C),b=p.length?p.reduce((m,M)=>m.stable.start<=M.stable.start?m:M):x[0];d.push({id:f.id,name:f.name,length:x.reduce((m,M)=>m+M.length,0),depth:f.depth,stable:b.stable})}let l=new Set,y=[];return t.edges.forEach((f,h)=>{let x=c.get(f.from),p=c.get(f.to),b=o[h],m=`${x}|${b.from}>${p}|${b.to}`;a.has(h)||l.has(m)||(l.add(m),y.push({from:x,to:p,...b.from==="start"?{fromStrand:$t(F(x))}:{},...b.to==="end"?{toStrand:$t(F(p))}:{}}))}),{graph:{...t,nodes:d,edges:y,paths:void 0,pathVisits:void 0},runs:i}}function No(t,n,o){let e={...t};for(let[s,r]of n){let a=t[s];if(!a?.length)continue;delete e[s];let c=rt(a),i=c.at(-1),u=r.map(y=>Math.max(o(y),0)),d=u.reduce((y,f)=>y+f,0),l=0;r.forEach((y,f)=>{let h=d?u[f]/d*i:i/r.length,x=f===r.length-1?i:l+h;e[y]=Yt(a,c,l,x),l=x})}return e}function Bo(t,n,o){if(t.length===0)return[];let e=rt(t),s=e.at(-1);return Yt(t,e,n*s,o*s)}function Ht(t){let n=rt(t);return et(t,n,n.at(-1)/2)}function rt(t){let n=[0];for(let o=1;o<t.length;o++)n.push(n[o-1]+Math.hypot(t[o].x-t[o-1].x,t[o].y-t[o-1].y));return n}function Wt(t,n){let o=0,e=t.length;for(;o<e;){let s=o+e>>1;t[s]<n?o=s+1:e=s}return o}function et(t,n,o){if(o<=0)return{...t[0]};let e=Wt(n,o);if(e>=n.length)return{...t.at(-1)};let s=n[e]-n[e-1],r=s>0?(o-n[e-1])/s:0,a=t[e-1],c=t[e];return{x:a.x+(c.x-a.x)*r,y:a.y+(c.y-a.y)*r}}function Yt(t,n,o,e){let s=[et(t,n,o)];for(let r=Wt(n,o);r<t.length&&n[r]<e;r++)n[r]>o&&s.push({...t[r]});return s.push(et(t,n,e)),s}function Wo(t,n){let o=new Set(t.nodes.filter(i=>C(i)&&K(i,n)).map(i=>i.id)),e=t.paths??[];if(o.size===0||e.length===0)return t;let s=e.map(i=>{let u=-1,d=-1;return i.nodeIds.forEach((l,y)=>{o.has(l)&&(u<0&&(u=y),d=y)}),u<0?void 0:{first:u,last:d}});if(s.every((i,u)=>i?.first===0&&i.last===e[u].nodeIds.length-1))return t;let r=new Set,a=[],c=new Map;return e.forEach((i,u)=>{let d=s[u];if(d){let l=i.nodeIds.slice(d.first,d.last+1);for(let y of l)r.add(y);a.push({...i,nodeIds:l}),c.set(i.name,{first:d.first,nodeIds:l})}}),{...t,nodes:t.nodes.filter(i=>r.has(i.id)),edges:t.edges.filter(i=>r.has(i.from)&&r.has(i.to)),paths:a,pathVisits:t.pathVisits&&gn(t.pathVisits,e,s,new Map(t.nodes.map(i=>[i.id,i.name]))),anchorPaths:bt(t,c)}}function gn(t,n,o,e){let s=t.replay(),r=new Mt;return n.forEach((a,c)=>{let i=t.pathIndex($(a.name).name),u=o[c];a.nodeIds.forEach((d,l)=>{let y=e.get(d)??d,f=s(t.slot(y),i);f>=0&&u&&l>=u.first&&l<=u.last&&r.add(y,t.paths[i],t.samples[i],t.start[f],t.reversed[f]===1)})}),r.build()}function Yo(t,n,o){let e=t.nodes.map(s=>{if(!C(s))return s;let r=s.stable.start,a=r+s.length,[c,i]=K(s,n)?[Math.max(r,n.start),Math.min(a,n.end)]:a<=n.start?[Math.max(r,a-o),a]:[r,Math.min(a,r+o)];return c===r&&i===a?s:{...s,length:i-c,stable:{...s.stable,start:c},unclipped:{start:r,length:s.length}}});return e.some((s,r)=>s!==t.nodes[r])?{...t,nodes:e}:t}function Ft(t){return t.nodes.some(n=>n.unclipped)?{...t,nodes:t.nodes.map(({unclipped:n,...o})=>n&&o.stable?{...o,length:n.length,stable:{...o.stable,start:n.start}}:o)}:t}var wn=1,Uo=t=>`skips ${t??"the reference"} sequence (a deletion)`;function An(t,n){return n.flatMap(o=>t[o]??[])}function Gt(t,n,o,e,s,r){let a=t[n.from],c=t[n.to];if(!(!a?.length||!c?.length))return s?Nt(a,c,s,r?q(n):void 0):tt(a,c,Ct(n,r),o,e?An(t,e):[])}function _n(t){let n=ht(t.nodes.filter(C),o=>o.stable.refName);for(let o of n.values())o.sort((e,s)=>e.stable.start-s.stable.start);return n}function En(t,n,o){let e=[];if(t)for(let s=xt(t,n);s<t.length;s++){let r=t[s];if(r.stable.start>=o)break;r.stable.start+r.length<=o&&e.push(r.id)}return e}function In(t,n,o,e){let{fromStrand:s,toStrand:r}=t;if(s===void 0||r===void 0)return!0;let a=s===n.strand,c=r===o.strand;return e?a&&c:!a&&!c}function Ln(t,n,o,e){let s;for(let r of e(n))for(let a of e(o)){let c=r.start<=a.start,i=c?{start:r.start+n.length,end:a.start}:{start:a.start+o.length,end:r.start};In(t,r,a,c)&&(!s||Math.abs(i.end-i.start)<Math.abs(s.end-s.start))&&(s=i)}return s}var On=.01;function Sn(t,n){let o=new Map;for(let[e,s]of t){let r=s.flatMap(a=>{let c=n(a).map(i=>i.start);return c.slice(1).map((i,u)=>({at:c[u],copy:i-c[u]}))});r.length&&o.set(e,r.sort((a,c)=>a.at-c.at))}return o}function kn(t,n,o){if(!t)return!1;let e=yt(t.length,r=>t[r].at<n),s=[t[e-1],t[e]].filter(r=>r!==void 0).sort((r,a)=>Math.abs(r.at-n)-Math.abs(a.at-n))[0];return s!==void 0&&Math.abs(s.at-n)<=s.copy&&Math.abs(o-s.copy)<=s.copy*On}function Pn(t){let n=Ft(t),o=new Map(n.nodes.map(a=>[a.id,a])),e=_n(n),s=vt(n);return{links:n.edges.flatMap((a,c)=>{let i=o.get(a.from),u=o.get(a.to);return!a.foldBridge&&i!==void 0&&u!==void 0&&C(i)&&C(u)&&i.stable.refName===u.stable.refName?[{edgeIndex:c,edge:a,refName:i.stable.refName,span:Ln(a,i,u,s)}]:[]}),backbone:e,copies:Sn(e,s)}}function Ko(t){let{links:n,backbone:o,copies:e}=Pn(t);return n.flatMap(({edgeIndex:s,edge:r,refName:a,span:c})=>{let i=c?c.end-c.start:0;return c&&i>=wn&&!kn(e.get(a),c.start,i)?[{edgeIndex:s,from:r.from,to:r.to,...r.fromStrand?{fromStrand:r.fromStrand}:{},...r.toStrand?{toStrand:r.toStrand}:{},refName:a,start:c.start,end:c.end,bp:i,bypassed:En(o.get(a),c.start,c.end)}]:[]})}function Xn(t,n){let o=new Map,e=a=>{let c=a;for(;o.has(c);)c=o.get(c);return c!==a&&o.set(a,c),c},s=(a,c)=>{let[i,u]=[e(a),e(c)];return i!==u&&o.set(i,u),i!==u},r=new Set(n);return t.edges.forEach((a,c)=>{r.has(c)||s(a.from,a.to)}),new Set(n.filter(a=>{let c=t.edges[a];return!s(c.from,c.to)}))}function Jo(t,n){return n?.walks.length?t.filter(o=>!n.edgeIndexes.has(o.edgeIndex)):t}var qt=new WeakMap;function Qo(t,n,o=!0){let e=qt.get(n);e||(e=new Map,qt.set(n,e));let s=e.get(o);if(!s){let r=o?new Set:Xn(t,n.map(a=>a.edgeIndex));s={shown:n.filter(a=>!r.has(a.edgeIndex)),bypassed:new Map(n.map(a=>[a.edgeIndex,a.bypassed])),hidden:r},e.set(o,s)}return s}var Cn=26,Nn=4e4,Bn=8,Tn=8,Rn=5.7,$n=6,Hn=13,G=3,V=2;function U(t){return(t.length*Rn+$n+G)/2}var N=(Hn+G)/2,Wn=U("1 bp");function z(t,n,o){return{x0:n-t,x1:n+t,y0:o-N,y1:o+N}}function se(t,n){return{x0:6,x1:6+ot(t)+G,y0:n-8-G/2,y1:n+8+G/2}}function j(t,n,o){return o<n?t:Math.min(Math.max(t,n),o)}function zt(t){return String(t).replace(/\B(?=(\d{3})+$)/g,",")}function jt(t){let[n,o]=t>=999500?[t/1e6,"Mb"]:t>=1e3?[t/1e3,"kb"]:[];return n===void 0?`${t} bp`:`${+n.toFixed(n>=100?0:1)} ${o}`}function Dt(t){return`${jt(t)} del`}function Yn(t,n,o,e){let s=t[0],r=t[t.length-1],a=(n.x-(s.x0+r.x1)/2)*o,c=(n.y-(s.y0+r.y1)/2)*e,i=Math.hypot(a,c);return i===0?{x:0,y:-1}:{x:a/i,y:c/i}}function Fn(t,n){return Math.abs(n.x)*(t.x1-t.x0)/2+Math.abs(n.y)*(t.y1-t.y0)/2}function qn(t,n){let o=(t.x1-t.x0)/2,e=(t.y1-t.y0)/2;return Math.min(n.x===0?1/0:o/Math.abs(n.x),n.y===0?1/0:e/Math.abs(n.y))}function Gn(t,n){let o=1/0,e=1/0,s=-1/0,r=-1/0;for(let a of t)for(let c of n[a]??[])o=Math.min(o,c.x),s=Math.max(s,c.x),e=Math.min(e,c.y),r=Math.max(r,c.y);return o===1/0?void 0:{minX:o,minY:e,maxX:s,maxY:r}}var Dn=nt();function Vn(t,n){return Dn(t,[n],()=>Object.entries(t).filter(([o,e])=>e.length>0&&n.has(o)).sort(([o],[e])=>n.get(e)-n.get(o)))}var zn=nt();function jn(t,n,o,e,s,r){let{scaleX:a,scaleY:c}=o;return zn(t,[n,s,r,a,c,e],()=>{let i=[];for(let u of[...n].sort((d,l)=>l.bp-d.bp)){let d=Gt(t,u,o,u.bypassed,s?.[u.edgeIndex],r),l=d?kt(d):void 0;if(d&&l){let{minX:y,minY:f,maxX:h,maxY:x}=Pt(d);i.push({deletion:u,curves:d,apex:l,extent:Math.max((h-y)*a,(x-f)*c)})}}return i})}function Un({nodePositions:t,nodeLengths:n,deletions:o,deletionRoutes:e,stranded:s=!1,alleleDeletions:r,axis:a,translateX:c,translateY:i,width:u,height:d,version:l=0}){let{scaleX:y,scaleY:f}=a,h=[],x=[];for(let{deletion:m,curves:M,apex:g,extent:v}of jn(t,o,a,l,e,s))if(v>=Cn){let w=Dt(m.bp),_=U(w),I=z(_,0,0),E=g.x*y+c,A=g.y*f+i;if(E<0||E>u||A<0||A>d)continue;let P=v>=_*2/V,O=Yn(M,g,y,f),L=Fn(I,O)+Tn,S=P?E:j(E+O.x*L,_,u-_),k=P?A:j(A+O.y*L,N,d-N),X=Math.hypot(S-E,k-A),T;if(X>0){let B={x:(S-E)/X,y:(k-A)/X},R=qn(I,B);T={arcX:E,arcY:A,labelX:S-B.x*R,labelY:k-B.y*R}}h.push({label:{key:`del:${m.edgeIndex}`,text:w,x:S,y:k,kind:"deletion",leader:T},box:z(_,S,k)})}let p=new Set,b=[...r??[]].sort((m,M)=>M.bp-m.bp);for(let m of b){let M=Gn(m.nodeIds,t);if(!M)continue;let g=Math.max(M.minX*y+c,0),v=Math.min(M.maxX*y+c,u),w=Math.max(M.minY*f+i,0),_=Math.min(M.maxY*f+i,d);if(v<g||_<w)continue;let I=Math.max(v-g,_-w),E=Dt(m.bp),A=U(E);if(I>=A*2/V){for(let L of m.nodeIds)p.add(L);let P=j((g+v)/2,A,u-A),O=j((w+_)/2,N,d-N);h.push({label:{key:`alleledel:${m.nodeIds.join(",")}`,text:E,x:P,y:O,kind:"deletion"},box:z(A,P,O)})}}for(let[m,M]of Vn(t,n)){if(p.has(m))continue;let{x:g,y:v}=Ht(M),w=v*f+i;if(w+N<=0||w-N>=d)continue;let _=Z(M,y,f);if(_<Wn*2/V)continue;let I=jt(n.get(m)),E=U(I);if(_>=E*2/V){let A=g*y+c;x.push({label:{key:`node:${m}`,text:I,x:A,y:w,kind:"node"},box:z(E,A,w)})}}return{deletions:h,nodes:x}}function Kn(t,n){return Math.max(Bn,Math.floor(t*n/Nn))}function Vt(t,n,o=1/0){let e=[];for(let{label:s,box:r}of t){if(e.length>=o)break;n(r)&&e.push(s)}return e}function ce({reserved:t,take:n,...o}){n??=Rt(o,t);let{deletions:e,nodes:s}=Un(o);return[...Vt(e,n),...Vt(s,n,Kn(o.width,o.height))]}function le(t){let n=0;for(let o=0;o<t.length;o++)n=t.charCodeAt(o)+((n<<5)-n);return Math.abs(n%360)}function Jn(t,n){return t*360/n}var Qn=.7,Zn=.5,to=16;function de(t){return t>0&&t<=to}function no(t,n){return`hsl(${Jn(t,n)}, ${Qn*100}%, ${Zn*100}%)`}function he(t,n){return`hsl(0, 0%, ${n>1?25+45*t/(n-1):45}%)`}function oo(t){let n=$(t).name.split("#"),o=n.join("#");if(n.length>=3&&pt(n[0])){let e=n.slice(2).join("#");return[e,e,o]}return[n[0],n.slice(0,2).join("#"),o]}function eo(t,n){let{start:o}=$(t);return n.map(e=>`${e} @${zt(o)}`)}function ye(t,n){let o=new Map;t.forEach((d,l)=>{o.has(d.name)||o.set(d.name,l)});let e=[...o].map(([d,l])=>({name:d,i:l})),s=e.map(d=>oo(d.name)),r=d=>e.map((l,y)=>s[y][d]),a=d=>e.map((l,y)=>eo(l.name,s[y])[d]),c=[r(0),r(1),a(0),r(2),a(1),a(2)],u=c.find(d=>new Set(d).size===e.length)??c.at(-1);return e.map(({name:d,i:l},y)=>({name:d,label:u[y],color:n?.[l]??no(l,t.length)}))}function xe(t){let n=new Map;return new Map([...t].sort((o,e)=>o.label.localeCompare(e.label)).map(o=>{let e=(n.get(o.label)??0)+1;return n.set(o.label,e),[o.name,e>1?`${o.label} (${e})`:o.label]}))}var Me=[{value:"depth",label:"By depth",description:"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform."},{value:"frequency",label:"By frequency",description:"As wide as the share of haplotypes that pass a node, or its AF tag: full width at 100%, half at 50%, and wider where a haplotype passes it more than once."},{value:"uniform",label:"Uniform",description:"Every node the same thickness."}],ro=.3,st=3,so=.05;function co(t){let n=0,o=0;for(let e of t.nodes)n+=e.depth*e.length,o+=e.length;return o>0?n/o:0}function ao(t){return t.sample===void 0?mt(t.name)??t.name:`${t.sample}#${t.haplotype??0}`}function io(t){return new Set((t.paths??[]).map(ao)).size}function fo(t,n){return t.frequency??(n>0?t.depth/n:void 0)}function uo(t,n){return n==="depth"?co(t):n==="frequency"?io(t):0}function Ut(t){return Math.min(st,Math.max(so,t))}function lo(t,n){let o=fo(t,n);return o===void 0?1:Ut(o)}function be(t){return[1,.5,.1].map(n=>({label:`${n*100}%`,widthPx:t*Ut(n)}))}function ho(t,n){return!(n>0)||!(t.depth>0)?1:Math.min(st,Math.max(ro,Math.sqrt(t.depth/n)))}function yo(t,n,o,e){return n*(o==="depth"?ho(t,e):o==="frequency"?lo(t,e):1)}function xo(t,n){return t*(n==="uniform"?1:st)}var po=4;function mo(t,n){return Math.max(t/n,po)}function ve(t,n,o,e,s=0){let r=t?uo(t,e):0,a=c=>s>0?mo(c,s)*s/2:c/2;return{maxHalfWidthPx:a(xo(o,e)),halfWidthPx:c=>{let i=n?.get(c);return a(i?yo(i,o,e,r):o)}}}var we=[{value:"uniform",label:"Uniform",description:"Every link the same thickness."},{value:"walks",label:"By walks",description:"Thicker the more walks take a link, on the square root of its count against the busiest link in the cut. A graph without walks draws uniform."}],Kt=.5,Mo=4;function Ae(t){let n=0;for(let o of t.edges)n=Math.max(n,o.pathIds?.length??0);return n}function _e(t,n,o){return o==="uniform"||n===0?1:Kt+(Mo-Kt)*Math.sqrt(t/n)}export{gt as a,go as b,Pt as c,wo as d,Ao as e,_o as f,F as g,q as h,Xt as i,Eo as j,Z as k,nt as l,Bt as m,Mn as n,D as o,ot as p,Rt as q,Oo as r,Co as s,No as t,Bo as u,Wo as v,Yo as w,Uo as x,Gt as y,Ko as z,Jo as A,Qo as B,se as C,zt as D,jt as E,ce as F,le as G,Jn as H,Qn as I,Zn as J,to as K,de as L,no as M,he as N,ye as O,xe as P,Me as Q,co as R,uo as S,be as T,yo as U,mo as V,ve as W,we as X,Ae as Y,_e as Z};
|
|
2
|
+
//# sourceMappingURL=chunk-CHLLRNBQ.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-CPMHA4W5.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-JJV2GT2Z.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HMXCN6PG.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-S43IBA5Y.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HNNP5QUN.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-L2FHURWV.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-TJLERGAI.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-74A3MFUM.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-KKYPJITI.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-XWH4LB56.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-DAEEMZ74.js"],
|
|
4
4
|
"sourcesContent": ["// src/layout/rowSpacing.ts\nvar ROW_HEIGHT_PX = 20;\n\nexport {\n ROW_HEIGHT_PX\n};\n", "import {\n ROW_HEIGHT_PX\n} from \"./chunk-CPMHA4W5.js\";\n\n// src/util/geometry.ts\nfunction svgPath(points) {\n const round = (v) => Math.round(v * 100) / 100;\n return points.map((p, i) => `${i ? \"L\" : \"M\"}${round(p.x)},${round(p.y)}`).join(\"\");\n}\nfunction projectLine(x1, y1, x2, y2, distance) {\n const d = Math.hypot(y2 - y1, x2 - x1);\n if (d === 0) {\n return [x2, y2];\n }\n const vx = (x2 - x1) / d;\n const vy = (y2 - y1) / d;\n return [x2 + distance * vx, y2 + distance * vy];\n}\nfunction curvePointAt(c, t) {\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n return {\n x: a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1,\n y: a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1\n };\n}\nfunction curveMidpoint(curves) {\n const mid = curves[Math.floor(curves.length / 2)];\n return mid ? curvePointAt(mid, 0.5) : void 0;\n}\nfunction curveBounds(curves) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const c of curves) {\n minX = Math.min(minX, c.x0, c.cx0, c.cx1, c.x1);\n maxX = Math.max(maxX, c.x0, c.cx0, c.cx1, c.x1);\n minY = Math.min(minY, c.y0, c.cy0, c.cy1, c.y1);\n maxY = Math.max(maxY, c.y0, c.cy0, c.cy1, c.y1);\n }\n return { minX, minY, maxX, maxY };\n}\nfunction subCurve(c, t0, t1) {\n const p0 = curvePointAt(c, t0);\n const p1 = curvePointAt(c, t1);\n const dt = (t1 - t0) / 3;\n const d0 = curveTangentAt(c, t0);\n const d1 = curveTangentAt(c, t1);\n return {\n x0: p0.x,\n y0: p0.y,\n cx0: p0.x + d0.x * dt,\n cy0: p0.y + d0.y * dt,\n cx1: p1.x - d1.x * dt,\n cy1: p1.y - d1.y * dt,\n x1: p1.x,\n y1: p1.y\n };\n}\nfunction curveTangentAt(c, t) {\n const u = 1 - t;\n const a = 3 * u * u;\n const b = 6 * u * t;\n const d = 3 * t * t;\n return {\n x: a * (c.cx0 - c.x0) + b * (c.cx1 - c.cx0) + d * (c.x1 - c.cx1),\n y: a * (c.cy0 - c.y0) + b * (c.cy1 - c.cy0) + d * (c.y1 - c.cy1)\n };\n}\nvar VISIBLE_SAMPLES = 32;\nfunction visibleStretches(curves, lengths, bounds, yToX) {\n const stretches = [];\n let start = 0;\n curves.forEach((c, k) => {\n const length = lengths[k];\n const pad = length / VISIBLE_SAMPLES;\n let last = curvePointAt(c, 0);\n for (let i = 1; i <= VISIBLE_SAMPLES; i++) {\n const next = curvePointAt(c, i / VISIBLE_SAMPLES);\n if (Math.max(last.x, next.x) + pad >= bounds.minX && Math.min(last.x, next.x) - pad <= bounds.maxX && Math.max(last.y, next.y) + pad / yToX >= bounds.minY && Math.min(last.y, next.y) - pad / yToX <= bounds.maxY) {\n const from = start + length * (i - 1) / VISIBLE_SAMPLES;\n const to = start + length * i / VISIBLE_SAMPLES;\n const prev = stretches.at(-1);\n if (prev && prev[1] >= from) {\n prev[1] = to;\n } else {\n stretches.push([from, to]);\n }\n }\n last = next;\n }\n start += length;\n });\n return stretches;\n}\nvar dashCurves = (curves, dashWorld, yToX = 1, bounds) => dashSpans(curves, dashWorld, yToX, bounds).map((d) => d.curves);\nfunction dashSpans(curves, dashWorld, yToX = 1, bounds) {\n const lengths = curves.map(\n (c) => Math.hypot(c.cx0 - c.x0, (c.cy0 - c.y0) * yToX) + Math.hypot(c.cx1 - c.cx0, (c.cy1 - c.cy0) * yToX) + Math.hypot(c.x1 - c.cx1, (c.y1 - c.cy1) * yToX)\n );\n const total = lengths.reduce((a, b) => a + b, 0);\n const periods = Math.round(total / dashWorld);\n const spans = Math.max(3, periods % 2 ? periods : periods + 1);\n const stretches = bounds ? visibleStretches(curves, lengths, bounds, yToX) : void 0;\n let seen = 0;\n const out = [];\n for (let i = 0; i < spans; i += 2) {\n const from = i / spans * total;\n const to = (i + 1) / spans * total;\n if (stretches) {\n while (seen < stretches.length && stretches[seen][1] < from) {\n seen++;\n }\n if (seen === stretches.length) {\n break;\n }\n if (stretches[seen][0] > to) {\n continue;\n }\n }\n const dash = [];\n const along = [];\n let start = 0;\n curves.forEach((c, k) => {\n const length = lengths[k];\n const end = start + length;\n if (length > 0 && end > from && start < to) {\n const t0 = Math.max(0, (from - start) / length);\n const t1 = Math.min(1, (to - start) / length);\n dash.push(subCurve(c, t0, t1));\n along.push((k + t0) / curves.length, (k + t1) / curves.length);\n }\n start = end;\n });\n if (dash.length) {\n out.push({\n curves: dash,\n startAlong: along[0],\n endAlong: along.at(-1)\n });\n }\n }\n return out;\n}\nvar slideAt = (from, to, along) => ({\n dx: from.dx + (to.dx - from.dx) * along,\n dy: from.dy + (to.dy - from.dy) * along\n});\nfunction slideCurves(curves, fromDx, fromDy, toDx, toDy) {\n const n = curves.length;\n const out = new Array(n);\n for (let i = 0; i < n; i++) {\n const c = curves[i];\n const a = i / n;\n const b = (i + 1) / n;\n const adx = fromDx + (toDx - fromDx) * a;\n const ady = fromDy + (toDy - fromDy) * a;\n const bdx = fromDx + (toDx - fromDx) * b;\n const bdy = fromDy + (toDy - fromDy) * b;\n out[i] = {\n x0: c.x0 + adx,\n y0: c.y0 + ady,\n cx0: c.cx0 + adx,\n cy0: c.cy0 + ady,\n cx1: c.cx1 + bdx,\n cy1: c.cy1 + bdy,\n x1: c.x1 + bdx,\n y1: c.y1 + bdy\n };\n }\n return out;\n}\nfunction translateCurves(curves, dx, dy) {\n const out = new Array(curves.length);\n for (let i = 0; i < curves.length; i++) {\n const c = curves[i];\n out[i] = {\n x0: c.x0 + dx,\n y0: c.y0 + dy,\n cx0: c.cx0 + dx,\n cy0: c.cy0 + dy,\n cx1: c.cx1 + dx,\n cy1: c.cy1 + dy,\n x1: c.x1 + dx,\n y1: c.y1 + dy\n };\n }\n return out;\n}\nfunction attachment(segments, side) {\n const last = segments.length - 1;\n return side === \"end\" ? { at: segments[last], inward: segments[last - 1] } : { at: segments[0], inward: segments[1] };\n}\nvar TANGENT_SPAN_FACTOR = 0.5;\nvar MAX_TANGENT = 80;\nfunction ownStrand(id) {\n return id.endsWith(\"-\") ? \"-\" : \"+\";\n}\nfunction strandSides(edge) {\n const own = (id, strand) => (strand ?? ownStrand(id)) === ownStrand(id);\n return {\n from: own(edge.from, edge.fromStrand) ? \"end\" : \"start\",\n to: own(edge.to, edge.toStrand) ? \"start\" : \"end\"\n };\n}\nfunction spanOf(segments) {\n let min = Infinity;\n let max = -Infinity;\n for (const s of segments) {\n min = Math.min(min, s.x);\n max = Math.max(max, s.x);\n }\n return { min, max };\n}\nfunction distanceToSpan(x, span) {\n return Math.max(0, span.min - x, x - span.max);\n}\nfunction facingSide(segments, other, tieBreak) {\n const startGap = distanceToSpan(segments[0].x, other);\n const endGap = distanceToSpan(segments[segments.length - 1].x, other);\n return startGap === endGap ? tieBreak : startGap < endGap ? \"start\" : \"end\";\n}\nfunction facingSides(fromSegments, toSegments) {\n return {\n from: facingSide(fromSegments, spanOf(toSegments), \"end\"),\n to: facingSide(toSegments, spanOf(fromSegments), \"start\")\n };\n}\nvar laidSides = /* @__PURE__ */ new WeakMap();\nfunction heldFacingSides(fromSegments, toSegments) {\n let byTo = laidSides.get(fromSegments);\n if (!byTo) {\n byTo = /* @__PURE__ */ new WeakMap();\n laidSides.set(fromSegments, byTo);\n }\n let sides = byTo.get(toSegments);\n if (!sides) {\n sides = facingSides(fromSegments, toSegments);\n byTo.set(toSegments, sides);\n }\n return sides;\n}\nvar APEX_FRACTION = 0.75;\nvar BOW_CLEARANCE = 1.15;\nvar ALONG_FRACTION = 0.35;\nvar MAX_ROW_BOW_PX = 3 * ROW_HEIGHT_PX;\nfunction bowAround(p1x, p1y, p2x, p2y, toward, maxBow) {\n const chord = Math.hypot(p2x - p1x, p2y - p1y);\n const ux = chord === 0 ? 1 : (p2x - p1x) / chord;\n const uy = chord === 0 ? 0 : (p2y - p1y) / chord;\n let reach = 0;\n let minAlong = Infinity;\n let maxAlong = -Infinity;\n for (const p of toward) {\n const dx = p.x - p1x;\n const dy = p.y - p1y;\n const perp = dx * -uy + dy * ux;\n if (Math.abs(perp) > Math.abs(reach)) {\n reach = perp;\n }\n const along = dx * ux + dy * uy;\n minAlong = Math.min(minAlong, along);\n maxAlong = Math.max(maxAlong, along);\n }\n const span = toward.length ? maxAlong - minAlong : 0;\n const uncapped = Math.max(\n Math.abs(reach) * BOW_CLEARANCE / APEX_FRACTION,\n span * ALONG_FRACTION\n );\n const size = maxBow === void 0 ? uncapped : Math.min(uncapped, maxBow);\n return reach < 0 ? -size : size;\n}\nfunction yToXOf({ scaleX, scaleY }) {\n return scaleY / scaleX;\n}\nvar PATH_RIBBON_SPACING_PX = 3;\nfunction drawnDirection(a, b, yToX) {\n const dx = b.x - a.x;\n const dy = (b.y - a.y) * yToX;\n const len = Math.hypot(dx, dy);\n return len === 0 ? void 0 : { x: dx / len, y: dy / len };\n}\nfunction pathRibbonOffsets(fromSegments, toSegments, count, axis) {\n const yToX = yToXOf(axis);\n const spacing = PATH_RIBBON_SPACING_PX / Math.max(axis.scaleX, 1e-6);\n const dir = drawnDirection(\n fromSegments[fromSegments.length - 1],\n toSegments[0],\n yToX\n ) ?? drawnDirection(fromSegments[0], fromSegments.at(-1), yToX) ?? drawnDirection(toSegments[0], toSegments.at(-1), yToX) ?? { x: 1, y: 0 };\n const offsets = [];\n for (let i = 0; i < count; i++) {\n const distance = (i - (count - 1) / 2) * spacing;\n offsets.push({ x: -dir.y * distance, y: dir.x * distance / yToX });\n }\n return offsets;\n}\nfunction scaleYOf(points, yToX) {\n return points.map((p) => ({ x: p.x, y: p.y * yToX }));\n}\nfunction unscaleYOf(curves, yToX) {\n for (const c of curves) {\n c.y0 /= yToX;\n c.cy0 /= yToX;\n c.cy1 /= yToX;\n c.y1 /= yToX;\n }\n return curves;\n}\nfunction polylinePx(points, scaleX, scaleY) {\n let total = 0;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1];\n const b = points[i];\n total += Math.hypot((b.x - a.x) * scaleX, (b.y - a.y) * scaleY);\n }\n return total;\n}\nvar SELF_LOOP_MIN_PX = 12;\nvar SELF_LOOP_MAX_PX = 40;\nfunction selfLoopReach(segments, scale) {\n const nodePx = polylinePx(segments, scale, scale);\n const reachPx = Math.min(\n SELF_LOOP_MAX_PX,\n Math.max(SELF_LOOP_MIN_PX, nodePx / 2)\n );\n return reachPx / Math.max(scale, Number.EPSILON);\n}\nfunction selfLinkOf(edge) {\n if (edge.from !== edge.to) {\n return false;\n }\n return edge.fromStrand && edge.toStrand && edge.fromStrand !== edge.toStrand ? edge.fromStrand === \"+\" ? \"end\" : \"start\" : true;\n}\nfunction edgeJoinOf(edge, stranded = false) {\n const self = selfLinkOf(edge);\n if (!stranded) {\n return self;\n }\n const sides = strandSides(edge);\n return self === false ? sides : sides.from === sides.to ? sides.from : true;\n}\nfunction hairpinCurves(attach, reach) {\n const { at, inward } = attach;\n const dx = inward ? at.x - inward.x : 1;\n const dy = inward ? at.y - inward.y : 0;\n const len = Math.hypot(dx, dy) || 1;\n const ux = dx / len;\n const uy = dy / len;\n const px = at.x;\n const py = at.y;\n const nearX = px + ux * reach / 3;\n const nearY = py + uy * reach / 3;\n const apexX = px + ux * reach;\n const apexY = py + uy * reach;\n const sideX = -uy * reach / 2;\n const sideY = ux * reach / 2;\n return [\n {\n x0: px,\n y0: py,\n cx0: nearX,\n cy0: nearY,\n cx1: apexX + sideX,\n cy1: apexY + sideY,\n x1: apexX,\n y1: apexY\n },\n {\n x0: apexX,\n y0: apexY,\n cx0: apexX - sideX,\n cy0: apexY - sideY,\n cx1: nearX,\n cy1: nearY,\n x1: px,\n y1: py\n }\n ];\n}\nfunction computeEdgeCurves(fromSegments, toSegments, join, axis, bypassed = [], maxBowIn) {\n const scale = axis.scaleX;\n const yToX = yToXOf(axis);\n const maxBow = maxBowIn ?? (axis.pixelRows ? MAX_ROW_BOW_PX : void 0);\n if (join === false) {\n join = heldFacingSides(fromSegments, toSegments);\n }\n if (yToX !== 1) {\n return unscaleYOf(\n computeEdgeCurves(\n scaleYOf(fromSegments, yToX),\n scaleYOf(toSegments, yToX),\n join,\n { scaleX: scale, scaleY: scale },\n scaleYOf(bypassed, yToX),\n // the cap is a y measure and the body works in x units, so it converts\n // with everything else that crosses this boundary\n maxBow === void 0 ? void 0 : maxBow * yToX\n ),\n yToX\n );\n }\n if (typeof join === \"string\") {\n return hairpinCurves(\n attachment(fromSegments, join),\n selfLoopReach(fromSegments, scale)\n );\n }\n const loop = join === true;\n const sides = join === true ? { from: \"end\", to: \"start\" } : join;\n const fromAttach = attachment(fromSegments, sides.from);\n const toAttach = attachment(toSegments, sides.to);\n const fromEnd = fromAttach.at;\n const toStart = toAttach.at;\n const p1x = fromEnd.x;\n const p1y = fromEnd.y;\n const p2x = toStart.x;\n const p2y = toStart.y;\n if (loop) {\n let segDirX = 1;\n let segDirY = 0;\n if (fromAttach.inward) {\n const dx = fromEnd.x - fromAttach.inward.x;\n const dy = fromEnd.y - fromAttach.inward.y;\n const len = Math.hypot(dx, dy);\n if (len > 0) {\n segDirX = dx / len;\n segDirY = dy / len;\n }\n }\n const ext = selfLoopReach(fromSegments, scale);\n const perpX = -segDirY;\n const perpY = segDirX;\n const midX = (fromEnd.x + toStart.x) / 2 + perpX * ext;\n const midY = (fromEnd.y + toStart.y) / 2 + perpY * ext;\n const cp1x = p1x + segDirX * ext;\n const cp1y = p1y + segDirY * ext;\n const cp2x = p2x - segDirX * ext;\n const cp2y = p2y - segDirY * ext;\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cp1x,\n cy0: cp1y,\n cx1: cp1x + perpX * ext,\n cy1: cp1y + perpY * ext,\n x1: midX,\n y1: midY\n },\n {\n x0: midX,\n y0: midY,\n cx0: cp2x + perpX * ext,\n cy0: cp2y + perpY * ext,\n cx1: cp2x,\n cy1: cp2y,\n x1: p2x,\n y1: p2y\n }\n ];\n } else {\n const fromPrev = fromAttach.inward ?? {\n x: fromEnd.x - (toStart.x - fromEnd.x),\n y: fromEnd.y - (toStart.y - fromEnd.y)\n };\n const toNext = toAttach.inward ?? {\n x: toStart.x - (fromEnd.x - toStart.x),\n y: toStart.y - (fromEnd.y - toStart.y)\n };\n const dist = Math.hypot(p2x - p1x, p2y - p1y);\n const tangentProj = (prev, at, towardX, towardY) => {\n const dx = at.x - prev.x;\n const dy = at.y - prev.y;\n const len = Math.hypot(dx, dy);\n const along = len === 0 ? 0 : (towardX * dx + towardY * dy) / len;\n return Math.max(\n 0,\n Math.min(dist * TANGENT_SPAN_FACTOR, MAX_TANGENT, along * 0.5)\n );\n };\n const towardToX = toStart.x - fromEnd.x;\n const towardToY = toStart.y - fromEnd.y;\n const [cx1, cy1] = projectLine(\n fromPrev.x,\n fromPrev.y,\n fromEnd.x,\n fromEnd.y,\n tangentProj(fromPrev, fromEnd, towardToX, towardToY)\n );\n const [cx2, cy2] = projectLine(\n toNext.x,\n toNext.y,\n toStart.x,\n toStart.y,\n tangentProj(toNext, toStart, -towardToX, -towardToY)\n );\n const bulge = bypassed.length ? bowAround(p1x, p1y, p2x, p2y, bypassed, maxBow) : 0;\n const chordLen = dist === 0 ? 1 : dist;\n const ux = (p2x - p1x) / chordLen;\n const uy = (p2y - p1y) / chordLen;\n const bulgeX = -uy * bulge;\n const bulgeY = ux * bulge;\n const spreadX = ux * Math.abs(bulge);\n const spreadY = uy * Math.abs(bulge);\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cx1 + bulgeX - spreadX,\n cy0: cy1 + bulgeY - spreadY,\n cx1: cx2 + bulgeX + spreadX,\n cy1: cy2 + bulgeY + spreadY,\n x1: p2x,\n y1: p2y\n }\n ];\n }\n}\nfunction nearerEnd(segments, to) {\n const start = segments[0];\n const end = segments.at(-1);\n return Math.hypot(start.x - to.x, start.y - to.y) < Math.hypot(end.x - to.x, end.y - to.y) ? \"start\" : \"end\";\n}\nfunction routedEdgeCurves(fromSegments, toSegments, route, sides) {\n const fromAttach = attachment(\n fromSegments,\n sides?.from ?? nearerEnd(fromSegments, route[0])\n );\n const toAttach = attachment(\n toSegments,\n sides?.to ?? nearerEnd(toSegments, route.at(-1))\n );\n const points = [fromAttach.at, ...route, toAttach.at];\n const tangent = (i) => {\n const p = points[i];\n const span = (q) => Math.hypot(q.x - p.x, q.y - p.y);\n const along = (inward, next) => {\n const len = inward ? span(inward) : 0;\n const reach = span(next);\n return len === 0 ? { x: next.x - p.x, y: next.y - p.y } : {\n x: (p.x - inward.x) / len * reach,\n y: (p.y - inward.y) / len * reach\n };\n };\n if (i === 0) {\n return along(fromAttach.inward, points[1]);\n }\n if (i === points.length - 1) {\n const out = along(toAttach.inward, points[i - 1]);\n return { x: -out.x, y: -out.y };\n }\n return {\n x: (points[i + 1].x - points[i - 1].x) / 2,\n y: (points[i + 1].y - points[i - 1].y) / 2\n };\n };\n const curves = [];\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i];\n const b = points[i + 1];\n const ta = tangent(i);\n const tb = tangent(i + 1);\n curves.push({\n x0: a.x,\n y0: a.y,\n cx0: a.x + ta.x / 3,\n cy0: a.y + ta.y / 3,\n cx1: b.x - tb.x / 3,\n cy1: b.y - tb.y / 3,\n x1: b.x,\n y1: b.y\n });\n }\n return curves;\n}\n\nexport {\n svgPath,\n projectLine,\n curvePointAt,\n curveMidpoint,\n curveBounds,\n dashCurves,\n dashSpans,\n slideAt,\n slideCurves,\n translateCurves,\n ownStrand,\n strandSides,\n bowAround,\n yToXOf,\n PATH_RIBBON_SPACING_PX,\n pathRibbonOffsets,\n polylinePx,\n selfLinkOf,\n edgeJoinOf,\n computeEdgeCurves,\n routedEdgeCurves\n};\n", "// src/util/weakMemo.ts\nfunction weakMemo() {\n const cache = /* @__PURE__ */ new WeakMap();\n return (key, deps, compute) => {\n const hit = cache.get(key);\n if (hit?.deps.length === deps.length && hit.deps.every((d, i) => Object.is(d, deps[i]))) {\n return hit.value;\n }\n const value = compute();\n cache.set(key, { deps, value });\n return value;\n };\n}\n\nexport {\n weakMemo\n};\n", "// src/overlayLabels.ts\nvar LABEL_PX = 11;\nvar LABEL_CHAR_PX = 6.2;\nvar LABEL_PAD = 4;\nfunction labelWidth(text) {\n return text.length * LABEL_CHAR_PX + LABEL_PAD * 2;\n}\nfunction overlaps(a, b) {\n return a.x0 < b.x1 && a.x1 > b.x0 && a.y0 < b.y1 && a.y1 > b.y0;\n}\nfunction offFrame(box, frame) {\n return box.x1 <= 0 || box.x0 >= frame.width || box.y1 <= 0 || box.y0 >= frame.height;\n}\nfunction insideFrame(box, frame) {\n return box.x0 >= 0 && box.x1 <= frame.width && box.y0 >= 0 && box.y1 <= frame.height;\n}\nfunction occupancy(frame, reserved = []) {\n const placed = [...reserved];\n return (box) => {\n if (offFrame(box, frame) || placed.some((p) => overlaps(p, box))) {\n return false;\n }\n placed.push(box);\n return true;\n };\n}\nfunction placeLabels(candidates, frame, take) {\n const out = [];\n const row = LABEL_PX + LABEL_PAD * 2;\n const stackFrom = (c, text, from, direction) => {\n const w = labelWidth(text);\n let crowded = false;\n for (let tries = 0; tries <= (c.stack ?? 0); tries++) {\n const y = from + direction * tries * row;\n const box = {\n x0: c.x - w / 2,\n x1: c.x + w / 2,\n y0: y - LABEL_PX - LABEL_PAD,\n y1: y + LABEL_PAD\n };\n if (offFrame(box, frame)) {\n break;\n }\n if (insideFrame(box, frame) && (c.fits?.(box) ?? true)) {\n if (take(box)) {\n return { placed: { ...c, text, y, w }, crowded };\n }\n crowded = true;\n }\n }\n return { placed: void 0, crowded };\n };\n const place = (c, text) => {\n const first = stackFrom(c, text, c.y, c.y > frame.height / 2 ? -1 : 1);\n return first.placed ?? (c.flipY === void 0 || first.crowded ? void 0 : stackFrom(c, text, c.flipY, c.flipY < c.y ? -1 : 1).placed);\n };\n for (const c of candidates) {\n const placed = place(c, c.text) ?? (c.fallback === void 0 ? void 0 : place(c, c.fallback));\n if (placed) {\n out.push(placed);\n }\n }\n return out;\n}\n\nexport {\n LABEL_PX,\n LABEL_CHAR_PX,\n LABEL_PAD,\n labelWidth,\n overlaps,\n occupancy,\n placeLabels\n};\n", "import {\n ownStrand,\n strandSides\n} from \"./chunk-JJV2GT2Z.js\";\nimport {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/layout/mergeRuns.ts\nfunction flip(strand) {\n return strand === \"+\" ? \"-\" : \"+\";\n}\nfunction mergeRuns(graph, alone = /* @__PURE__ */ new Set()) {\n const sides = graph.edges.map(strandSides);\n const at = /* @__PURE__ */ new Map();\n const attach = (id, side, ei) => {\n pushTo(at, `${id}|${side}`, ei);\n };\n graph.edges.forEach((edge, ei) => {\n attach(edge.from, sides[ei].from, ei);\n attach(edge.to, sides[ei].to, ei);\n });\n const joinAfter = (a) => {\n const out = at.get(`${a}|end`);\n if (out?.length !== 1) {\n return void 0;\n }\n const ei = out[0];\n const edge = graph.edges[ei];\n return edge.from === a && edge.to !== a && !alone.has(a) && !alone.has(edge.to) && sides[ei].from === \"end\" && sides[ei].to === \"start\" && at.get(`${edge.to}|start`)?.length === 1 ? ei : void 0;\n };\n const joined = /* @__PURE__ */ new Set();\n const runOf = /* @__PURE__ */ new Map();\n const runs = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const into = at.get(`${node.id}|start`);\n const pred = into?.length === 1 ? graph.edges[into[0]].from : void 0;\n if (runOf.has(node.id) || pred !== void 0 && joinAfter(pred) === into[0]) {\n continue;\n }\n const run = [node.id];\n for (; ; ) {\n const ei = joinAfter(run.at(-1));\n const next = ei === void 0 ? void 0 : graph.edges[ei].to;\n if (next === void 0 || runOf.has(next)) {\n break;\n }\n joined.add(ei);\n run.push(next);\n }\n for (const id of run) {\n runOf.set(id, node.id);\n }\n if (run.length > 1) {\n runs.set(node.id, run);\n }\n }\n for (const node of graph.nodes) {\n if (!runOf.has(node.id)) {\n runOf.set(node.id, node.id);\n }\n }\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const nodes = [];\n for (const node of graph.nodes) {\n if (runOf.get(node.id) !== node.id) {\n continue;\n }\n const run = runs.get(node.id);\n if (!run) {\n nodes.push(node);\n continue;\n }\n const members = run.map((id) => byId.get(id));\n const backbone = members.filter(isBackbone);\n const first = backbone.length ? backbone.reduce((a, b) => a.stable.start <= b.stable.start ? a : b) : members[0];\n nodes.push({\n id: node.id,\n name: node.name,\n length: members.reduce((sum, n) => sum + n.length, 0),\n depth: node.depth,\n stable: first.stable\n });\n }\n const seen = /* @__PURE__ */ new Set();\n const edges = [];\n graph.edges.forEach((edge, ei) => {\n const from = runOf.get(edge.from);\n const to = runOf.get(edge.to);\n const side = sides[ei];\n const key = `${from}|${side.from}>${to}|${side.to}`;\n if (joined.has(ei) || seen.has(key)) {\n return;\n }\n seen.add(key);\n edges.push({\n from,\n to,\n ...side.from === \"start\" ? { fromStrand: flip(ownStrand(from)) } : {},\n ...side.to === \"end\" ? { toStrand: flip(ownStrand(to)) } : {}\n });\n });\n return {\n graph: { ...graph, nodes, edges, paths: void 0, pathVisits: void 0 },\n runs\n };\n}\nfunction splitRuns(positions, runs, weightOf) {\n const out = { ...positions };\n for (const [id, members] of runs) {\n const line = positions[id];\n if (!line?.length) {\n continue;\n }\n delete out[id];\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n const weights = members.map((m) => Math.max(weightOf(m), 0));\n const weightSum = weights.reduce((a, b) => a + b, 0);\n let from = 0;\n members.forEach((member, k) => {\n const share = weightSum ? weights[k] / weightSum * total : total / members.length;\n const to = k === members.length - 1 ? total : from + share;\n out[member] = slice(line, arc, from, to);\n from = to;\n });\n }\n return out;\n}\nfunction polylineSlice(line, from, to) {\n if (line.length === 0) {\n return [];\n }\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n return slice(line, arc, from * total, to * total);\n}\nfunction polylineMidpoint(line) {\n const arc = arcPrefix(line);\n return pointAt(line, arc, arc.at(-1) / 2);\n}\nfunction arcPrefix(line) {\n const arc = [0];\n for (let i = 1; i < line.length; i++) {\n arc.push(\n arc[i - 1] + Math.hypot(line[i].x - line[i - 1].x, line[i].y - line[i - 1].y)\n );\n }\n return arc;\n}\nfunction firstReaching(arc, s) {\n let lo = 0;\n let hi = arc.length;\n while (lo < hi) {\n const mid = lo + hi >> 1;\n if (arc[mid] < s) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n}\nfunction pointAt(line, arc, s) {\n if (s <= 0) {\n return { ...line[0] };\n }\n const i = firstReaching(arc, s);\n if (i >= arc.length) {\n return { ...line.at(-1) };\n }\n const span = arc[i] - arc[i - 1];\n const t = span > 0 ? (s - arc[i - 1]) / span : 0;\n const a = line[i - 1];\n const b = line[i];\n return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };\n}\nfunction slice(line, arc, from, to) {\n const points = [pointAt(line, arc, from)];\n for (let i = firstReaching(arc, from); i < line.length && arc[i] < to; i++) {\n if (arc[i] > from) {\n points.push({ ...line[i] });\n }\n }\n points.push(pointAt(line, arc, to));\n return points;\n}\n\nexport {\n mergeRuns,\n splitRuns,\n polylineSlice,\n polylineMidpoint\n};\n", "import {\n pathOrigin,\n trimOrigins\n} from \"./chunk-QBI6SC74.js\";\nimport {\n PathVisitsBuilder\n} from \"./chunk-BEUTROKU.js\";\nimport {\n isBackbone,\n overlapsWindow\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/layout/trimToWindow.ts\nfunction trimToWindow(graph, window) {\n const inWindow = new Set(\n graph.nodes.filter((n) => isBackbone(n) && overlapsWindow(n, window)).map((n) => n.id)\n );\n const paths = graph.paths ?? [];\n if (inWindow.size === 0 || paths.length === 0) {\n return graph;\n }\n const spans = paths.map((path) => {\n let first = -1;\n let last = -1;\n path.nodeIds.forEach((id, i) => {\n if (inWindow.has(id)) {\n if (first < 0) {\n first = i;\n }\n last = i;\n }\n });\n return first < 0 ? void 0 : { first, last };\n });\n if (spans.every(\n (span, i) => span?.first === 0 && span.last === paths[i].nodeIds.length - 1\n )) {\n return graph;\n }\n const kept = /* @__PURE__ */ new Set();\n const trimmed = [];\n const stretches = /* @__PURE__ */ new Map();\n paths.forEach((path, i) => {\n const span = spans[i];\n if (span) {\n const nodeIds = path.nodeIds.slice(span.first, span.last + 1);\n for (const id of nodeIds) {\n kept.add(id);\n }\n trimmed.push({ ...path, nodeIds });\n stretches.set(path.name, { first: span.first, nodeIds });\n }\n });\n return {\n ...graph,\n nodes: graph.nodes.filter((n) => kept.has(n.id)),\n edges: graph.edges.filter((e) => kept.has(e.from) && kept.has(e.to)),\n paths: trimmed,\n pathVisits: graph.pathVisits && trimVisits(\n graph.pathVisits,\n paths,\n spans,\n new Map(graph.nodes.map((n) => [n.id, n.name]))\n ),\n anchorPaths: trimOrigins(graph, stretches)\n };\n}\nfunction trimVisits(visits, paths, spans, nameOf) {\n const next = visits.replay();\n const out = new PathVisitsBuilder();\n paths.forEach((path, p) => {\n const origin = visits.pathIndex(pathOrigin(path.name).name);\n const span = spans[p];\n path.nodeIds.forEach((id, i) => {\n const segment = nameOf.get(id) ?? id;\n const at = next(visits.slot(segment), origin);\n if (at >= 0 && span && i >= span.first && i <= span.last) {\n out.add(\n segment,\n visits.paths[origin],\n visits.samples[origin],\n visits.start[at],\n visits.reversed[at] === 1\n );\n }\n });\n });\n return out.build();\n}\nfunction clipToWindow(graph, window, reachBp) {\n const nodes = graph.nodes.map((node) => {\n if (!isBackbone(node)) {\n return node;\n }\n const from = node.stable.start;\n const to = from + node.length;\n const [start, end] = overlapsWindow(node, window) ? [Math.max(from, window.start), Math.min(to, window.end)] : to <= window.start ? [Math.max(from, to - reachBp), to] : [from, Math.min(to, from + reachBp)];\n return start === from && end === to ? node : {\n ...node,\n length: end - start,\n stable: { ...node.stable, start },\n unclipped: { start: from, length: node.length }\n };\n });\n return nodes.some((node, i) => node !== graph.nodes[i]) ? { ...graph, nodes } : graph;\n}\nfunction unclipped(graph) {\n return graph.nodes.some((n) => n.unclipped) ? {\n ...graph,\n nodes: graph.nodes.map(\n ({ unclipped: full, ...node }) => full && node.stable ? {\n ...node,\n length: full.length,\n stable: { ...node.stable, start: full.start }\n } : node\n )\n } : graph;\n}\n\nexport {\n trimToWindow,\n clipToWindow,\n unclipped\n};\n", "import {\n unclipped\n} from \"./chunk-L2FHURWV.js\";\nimport {\n referenceVisits\n} from \"./chunk-QBI6SC74.js\";\nimport {\n computeEdgeCurves,\n edgeJoinOf,\n routedEdgeCurves,\n strandSides\n} from \"./chunk-JJV2GT2Z.js\";\nimport {\n groupBy\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n firstNodeAtOrAfter,\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\nimport {\n partitionPoint\n} from \"./chunk-HOAIOEI7.js\";\n\n// src/deletionEdges.ts\nvar MIN_DELETION_BP = 1;\nvar deletionKey = (reference) => `skips ${reference ?? \"the reference\"} sequence (a deletion)`;\nfunction bypassedPoints(nodePositions, bypassed) {\n return bypassed.flatMap((id) => nodePositions[id] ?? []);\n}\nfunction edgeCurvesOf(nodePositions, edge, axis, bypassed, route, stranded) {\n const from = nodePositions[edge.from];\n const to = nodePositions[edge.to];\n if (!from?.length || !to?.length) {\n return void 0;\n }\n return route ? routedEdgeCurves(\n from,\n to,\n route,\n stranded ? strandSides(edge) : void 0\n ) : computeEdgeCurves(\n from,\n to,\n edgeJoinOf(edge, stranded),\n axis,\n bypassed ? bypassedPoints(nodePositions, bypassed) : []\n );\n}\nfunction backboneBySequence(graph) {\n const bySequence = groupBy(\n graph.nodes.filter(isBackbone),\n (node) => node.stable.refName\n );\n for (const list of bySequence.values()) {\n list.sort((a, b) => a.stable.start - b.stable.start);\n }\n return bySequence;\n}\nfunction bypassedNodes(nodes, start, end) {\n const bypassed = [];\n if (nodes) {\n for (let i = firstNodeAtOrAfter(nodes, start); i < nodes.length; i++) {\n const node = nodes[i];\n if (node.stable.start >= end) {\n break;\n }\n if (node.stable.start + node.length <= end) {\n bypassed.push(node.id);\n }\n }\n }\n return bypassed;\n}\nfunction skipsBetween(edge, from, to, forwards) {\n const { fromStrand, toStrand } = edge;\n if (fromStrand === void 0 || toStrand === void 0) {\n return true;\n }\n const leavesRight = fromStrand === from.strand;\n const arrivesLeft = toStrand === to.strand;\n return forwards ? leavesRight && arrivesLeft : !leavesRight && !arrivesLeft;\n}\nfunction skippedSpan(edge, from, to, visitsOf) {\n let best;\n for (const a of visitsOf(from)) {\n for (const b of visitsOf(to)) {\n const forwards = a.start <= b.start;\n const span = forwards ? { start: a.start + from.length, end: b.start } : { start: b.start + to.length, end: a.start };\n if (skipsBetween(edge, a, b, forwards) && (!best || Math.abs(span.end - span.start) < Math.abs(best.end - best.start))) {\n best = span;\n }\n }\n }\n return best;\n}\nvar COPY_SWITCH_SHARE = 0.01;\nfunction repeatCopies(backbone, visitsOf) {\n const bySequence = /* @__PURE__ */ new Map();\n for (const [refName, nodes] of backbone) {\n const copies = nodes.flatMap((node) => {\n const starts = visitsOf(node).map((v) => v.start);\n return starts.slice(1).map((next, i) => ({\n at: starts[i],\n copy: next - starts[i]\n }));\n });\n if (copies.length) {\n bySequence.set(\n refName,\n copies.sort((a, b) => a.at - b.at)\n );\n }\n }\n return bySequence;\n}\nfunction switchesCopy(copies, start, bp) {\n if (!copies) {\n return false;\n }\n const i = partitionPoint(copies.length, (k) => copies[k].at < start);\n const near = [copies[i - 1], copies[i]].filter((c) => c !== void 0).sort((a, b) => Math.abs(a.at - start) - Math.abs(b.at - start))[0];\n return near !== void 0 && Math.abs(near.at - start) <= near.copy && Math.abs(bp - near.copy) <= near.copy * COPY_SWITCH_SHARE;\n}\nfunction backboneLinks(cut) {\n const graph = unclipped(cut);\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const backbone = backboneBySequence(graph);\n const visitsOf = referenceVisits(graph);\n const links = graph.edges.flatMap((edge, edgeIndex) => {\n const from = byId.get(edge.from);\n const to = byId.get(edge.to);\n return !edge.foldBridge && from !== void 0 && to !== void 0 && isBackbone(from) && isBackbone(to) && from.stable.refName === to.stable.refName ? [\n {\n edgeIndex,\n edge,\n refName: from.stable.refName,\n span: skippedSpan(edge, from, to, visitsOf)\n }\n ] : [];\n });\n return { links, backbone, copies: repeatCopies(backbone, visitsOf) };\n}\nfunction deletionEdges(cut) {\n const { links, backbone, copies } = backboneLinks(cut);\n return links.flatMap(({ edgeIndex, edge, refName, span }) => {\n const bp = span ? span.end - span.start : 0;\n return span && bp >= MIN_DELETION_BP && !switchesCopy(copies.get(refName), span.start, bp) ? [\n {\n edgeIndex,\n from: edge.from,\n to: edge.to,\n ...edge.fromStrand ? { fromStrand: edge.fromStrand } : {},\n ...edge.toStrand ? { toStrand: edge.toStrand } : {},\n refName,\n start: span.start,\n end: span.end,\n bp,\n bypassed: bypassedNodes(\n backbone.get(refName),\n span.start,\n span.end\n )\n }\n ] : [];\n });\n}\nfunction closableLinks(graph, edgeIndexes) {\n const parent = /* @__PURE__ */ new Map();\n const root = (id) => {\n let r = id;\n while (parent.has(r)) {\n r = parent.get(r);\n }\n if (r !== id) {\n parent.set(id, r);\n }\n return r;\n };\n const join = (a, b) => {\n const [ra, rb] = [root(a), root(b)];\n if (ra !== rb) {\n parent.set(ra, rb);\n }\n return ra !== rb;\n };\n const candidates = new Set(edgeIndexes);\n graph.edges.forEach((e, ei) => {\n if (!candidates.has(ei)) {\n join(e.from, e.to);\n }\n });\n return new Set(\n edgeIndexes.filter((ei) => {\n const edge = graph.edges[ei];\n return !join(edge.from, edge.to);\n })\n );\n}\nfunction dashedDeletions(shown, lift) {\n return lift?.walks.length ? shown.filter((d) => !lift.edgeIndexes.has(d.edgeIndex)) : shown;\n}\nvar drawings = /* @__PURE__ */ new WeakMap();\nfunction deletionDrawing(graph, deletions, show = true) {\n let byShow = drawings.get(deletions);\n if (!byShow) {\n byShow = /* @__PURE__ */ new Map();\n drawings.set(deletions, byShow);\n }\n let drawing = byShow.get(show);\n if (!drawing) {\n const hidden = show ? /* @__PURE__ */ new Set() : closableLinks(\n graph,\n deletions.map((d) => d.edgeIndex)\n );\n drawing = {\n shown: deletions.filter((d) => !hidden.has(d.edgeIndex)),\n bypassed: new Map(deletions.map((d) => [d.edgeIndex, d.bypassed])),\n hidden\n };\n byShow.set(show, drawing);\n }\n return drawing;\n}\n\nexport {\n deletionKey,\n edgeCurvesOf,\n deletionEdges,\n closableLinks,\n dashedDeletions,\n deletionDrawing\n};\n", "import {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n labelWidth,\n occupancy\n} from \"./chunk-S43IBA5Y.js\";\nimport {\n polylineMidpoint\n} from \"./chunk-HNNP5QUN.js\";\nimport {\n edgeCurvesOf\n} from \"./chunk-TJLERGAI.js\";\nimport {\n curveBounds,\n curveMidpoint,\n polylinePx\n} from \"./chunk-JJV2GT2Z.js\";\n\n// src/graphLabels.ts\nvar MIN_DELETION_LABEL_PX = 26;\nvar PX_PER_NODE_LABEL = 4e4;\nvar MIN_NODE_LABELS = 8;\nvar LEADER_GAP_PX = 8;\nvar LABEL_CHAR_PX = 5.7;\nvar LABEL_PAD_PX = 6;\nvar LABEL_HEIGHT_PX = 13;\nvar LABEL_GAP_PX = 3;\nvar MAX_LABEL_OVERHANG = 2;\nfunction labelHalfWidth(text) {\n return (text.length * LABEL_CHAR_PX + LABEL_PAD_PX + LABEL_GAP_PX) / 2;\n}\nvar LABEL_HALF_HEIGHT = (LABEL_HEIGHT_PX + LABEL_GAP_PX) / 2;\nvar MIN_LABEL_HALF_WIDTH = labelHalfWidth(\"1 bp\");\nfunction boxAt(halfW, x, y) {\n return {\n x0: x - halfW,\n x1: x + halfW,\n y0: y - LABEL_HALF_HEIGHT,\n y1: y + LABEL_HALF_HEIGHT\n };\n}\nfunction rowLabelBox(text, screenY) {\n return {\n x0: 6,\n x1: 6 + labelWidth(text) + LABEL_GAP_PX,\n y0: screenY - 8 - LABEL_GAP_PX / 2,\n y1: screenY + 8 + LABEL_GAP_PX / 2\n };\n}\nfunction clamp(v, lo, hi) {\n return hi < lo ? v : Math.min(Math.max(v, lo), hi);\n}\nfunction groupDigits(n) {\n return String(n).replace(/\\B(?=(\\d{3})+$)/g, \",\");\n}\nfunction formatBp(bp) {\n const [value, unit] = bp >= 999500 ? [bp / 1e6, \"Mb\"] : bp >= 1e3 ? [bp / 1e3, \"kb\"] : [];\n if (value === void 0) {\n return `${bp} bp`;\n }\n return `${+value.toFixed(value >= 100 ? 0 : 1)} ${unit}`;\n}\nfunction deletionText(bp) {\n return `${formatBp(bp)} del`;\n}\nfunction arcOutward(curves, apex, scaleX, scaleY) {\n const first = curves[0];\n const last = curves[curves.length - 1];\n const dx = (apex.x - (first.x0 + last.x1) / 2) * scaleX;\n const dy = (apex.y - (first.y0 + last.y1) / 2) * scaleY;\n const len = Math.hypot(dx, dy);\n return len === 0 ? { x: 0, y: -1 } : { x: dx / len, y: dy / len };\n}\nfunction boxSupport(box, dir) {\n return Math.abs(dir.x) * (box.x1 - box.x0) / 2 + Math.abs(dir.y) * (box.y1 - box.y0) / 2;\n}\nfunction boxRayCrossing(box, dir) {\n const halfW = (box.x1 - box.x0) / 2;\n const halfH = (box.y1 - box.y0) / 2;\n return Math.min(\n dir.x === 0 ? Infinity : halfW / Math.abs(dir.x),\n dir.y === 0 ? Infinity : halfH / Math.abs(dir.y)\n );\n}\nfunction runBounds(nodeIds, nodePositions) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const id of nodeIds) {\n for (const p of nodePositions[id] ?? []) {\n minX = Math.min(minX, p.x);\n maxX = Math.max(maxX, p.x);\n minY = Math.min(minY, p.y);\n maxY = Math.max(maxY, p.y);\n }\n }\n return minX === Infinity ? void 0 : { minX, minY, maxX, maxY };\n}\nvar nodeOrderCache = weakMemo();\nfunction labelOrder(nodePositions, nodeLengths) {\n return nodeOrderCache(\n nodePositions,\n [nodeLengths],\n () => Object.entries(nodePositions).filter(([id, segments]) => segments.length > 0 && nodeLengths.has(id)).sort(([a], [b]) => nodeLengths.get(b) - nodeLengths.get(a))\n );\n}\nvar arcCache = weakMemo();\nfunction arcPlacements(nodePositions, deletions, axis, version, routes, stranded) {\n const { scaleX, scaleY } = axis;\n return arcCache(\n nodePositions,\n [deletions, routes, stranded, scaleX, scaleY, version],\n () => {\n const arcs = [];\n for (const deletion of [...deletions].sort((a, b) => b.bp - a.bp)) {\n const curves = edgeCurvesOf(\n nodePositions,\n deletion,\n axis,\n deletion.bypassed,\n routes?.[deletion.edgeIndex],\n stranded\n );\n const apex = curves ? curveMidpoint(curves) : void 0;\n if (curves && apex) {\n const { minX, minY, maxX, maxY } = curveBounds(curves);\n arcs.push({\n deletion,\n curves,\n apex,\n // in screen px, so the two axes' units cannot be added by accident\n extent: Math.max((maxX - minX) * scaleX, (maxY - minY) * scaleY)\n });\n }\n }\n return arcs;\n }\n );\n}\nfunction sizeLabelCandidates({\n nodePositions,\n nodeLengths,\n deletions,\n deletionRoutes,\n stranded = false,\n alleleDeletions,\n axis,\n translateX,\n translateY,\n width,\n height,\n version = 0\n}) {\n const { scaleX, scaleY } = axis;\n const deletionCandidates = [];\n const nodeCandidates = [];\n for (const { deletion, curves, apex, extent } of arcPlacements(\n nodePositions,\n deletions,\n axis,\n version,\n deletionRoutes,\n stranded\n )) {\n if (extent >= MIN_DELETION_LABEL_PX) {\n const text = deletionText(deletion.bp);\n const halfW = labelHalfWidth(text);\n const box = boxAt(halfW, 0, 0);\n const arcX = apex.x * scaleX + translateX;\n const arcY = apex.y * scaleY + translateY;\n if (arcX < 0 || arcX > width || arcY < 0 || arcY > height) {\n continue;\n }\n const fits = extent >= halfW * 2 / MAX_LABEL_OVERHANG;\n const bow = arcOutward(curves, apex, scaleX, scaleY);\n const offset = boxSupport(box, bow) + LEADER_GAP_PX;\n const x = fits ? arcX : clamp(arcX + bow.x * offset, halfW, width - halfW);\n const y = fits ? arcY : clamp(\n arcY + bow.y * offset,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n const away = Math.hypot(x - arcX, y - arcY);\n let leader;\n if (away > 0) {\n const dir = { x: (x - arcX) / away, y: (y - arcY) / away };\n const crossing = boxRayCrossing(box, dir);\n leader = {\n arcX,\n arcY,\n labelX: x - dir.x * crossing,\n labelY: y - dir.y * crossing\n };\n }\n deletionCandidates.push({\n label: {\n key: `del:${deletion.edgeIndex}`,\n text,\n x,\n y,\n kind: \"deletion\",\n leader\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n const labelledByDeletion = /* @__PURE__ */ new Set();\n const alleleRuns = [...alleleDeletions ?? []].sort((a, b) => b.bp - a.bp);\n for (const run of alleleRuns) {\n const drawn = runBounds(run.nodeIds, nodePositions);\n if (!drawn) {\n continue;\n }\n const shownLeft = Math.max(drawn.minX * scaleX + translateX, 0);\n const shownRight = Math.min(drawn.maxX * scaleX + translateX, width);\n const shownTop = Math.max(drawn.minY * scaleY + translateY, 0);\n const shownBottom = Math.min(drawn.maxY * scaleY + translateY, height);\n if (shownRight < shownLeft || shownBottom < shownTop) {\n continue;\n }\n const extent = Math.max(shownRight - shownLeft, shownBottom - shownTop);\n const text = deletionText(run.bp);\n const halfW = labelHalfWidth(text);\n if (extent >= halfW * 2 / MAX_LABEL_OVERHANG) {\n for (const id of run.nodeIds) {\n labelledByDeletion.add(id);\n }\n const x = clamp((shownLeft + shownRight) / 2, halfW, width - halfW);\n const y = clamp(\n (shownTop + shownBottom) / 2,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n deletionCandidates.push({\n label: {\n key: `alleledel:${run.nodeIds.join(\",\")}`,\n text,\n x,\n y,\n kind: \"deletion\"\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n for (const [id, segments] of labelOrder(nodePositions, nodeLengths)) {\n if (labelledByDeletion.has(id)) {\n continue;\n }\n const { x, y } = polylineMidpoint(segments);\n const screenY = y * scaleY + translateY;\n if (screenY + LABEL_HALF_HEIGHT <= 0 || screenY - LABEL_HALF_HEIGHT >= height) {\n continue;\n }\n const drawn = polylinePx(segments, scaleX, scaleY);\n if (drawn < MIN_LABEL_HALF_WIDTH * 2 / MAX_LABEL_OVERHANG) {\n continue;\n }\n const text = formatBp(nodeLengths.get(id));\n const halfW = labelHalfWidth(text);\n if (drawn >= halfW * 2 / MAX_LABEL_OVERHANG) {\n const screenX = x * scaleX + translateX;\n nodeCandidates.push({\n label: {\n key: `node:${id}`,\n text,\n x: screenX,\n y: screenY,\n kind: \"node\"\n },\n box: boxAt(halfW, screenX, screenY)\n });\n }\n }\n return { deletions: deletionCandidates, nodes: nodeCandidates };\n}\nfunction nodeLabelBudget(width, height) {\n return Math.max(\n MIN_NODE_LABELS,\n Math.floor(width * height / PX_PER_NODE_LABEL)\n );\n}\nfunction placeSizeLabels(candidates, take, budget = Infinity) {\n const labels = [];\n for (const { label, box } of candidates) {\n if (labels.length >= budget) {\n break;\n }\n if (take(box)) {\n labels.push(label);\n }\n }\n return labels;\n}\nfunction graphLabels({\n reserved,\n take,\n ...args\n}) {\n take ??= occupancy(args, reserved);\n const { deletions, nodes } = sizeLabelCandidates(args);\n return [\n ...placeSizeLabels(deletions, take),\n ...placeSizeLabels(nodes, take, nodeLabelBudget(args.width, args.height))\n ];\n}\n\nexport {\n rowLabelBox,\n groupDigits,\n formatBp,\n sizeLabelCandidates,\n nodeLabelBudget,\n placeSizeLabels,\n graphLabels\n};\n", "import {\n groupDigits\n} from \"./chunk-74A3MFUM.js\";\nimport {\n pathOrigin\n} from \"./chunk-QBI6SC74.js\";\nimport {\n isGenericSample\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/pathColors.ts\nfunction nameHue(name) {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return Math.abs(hash % 360);\n}\nfunction pathHueAt(index, count) {\n return index * 360 / count;\n}\nvar PATH_SATURATION = 0.7;\nvar PATH_LIGHTNESS = 0.5;\nvar MAX_PATH_COLORS = 16;\nfunction pathColorsLegible(pathCount) {\n return pathCount > 0 && pathCount <= MAX_PATH_COLORS;\n}\nfunction pathCssColor(index, count) {\n return `hsl(${pathHueAt(index, count)}, ${PATH_SATURATION * 100}%, ${PATH_LIGHTNESS * 100}%)`;\n}\nfunction pathGreyCssColor(index, count) {\n const lightness = count > 1 ? 25 + 45 * index / (count - 1) : 45;\n return `hsl(0, 0%, ${lightness}%)`;\n}\nfunction labelTiers(name) {\n const parts = pathOrigin(name).name.split(\"#\");\n const full = parts.join(\"#\");\n if (parts.length >= 3 && isGenericSample(parts[0])) {\n const contig = parts.slice(2).join(\"#\");\n return [contig, contig, full];\n }\n return [parts[0], parts.slice(0, 2).join(\"#\"), full];\n}\nfunction offsetTiers(name, tiers) {\n const { start } = pathOrigin(name);\n return tiers.map((t) => `${t} @${groupDigits(start)}`);\n}\nfunction pathLegend(paths, colors) {\n const firstOf = /* @__PURE__ */ new Map();\n paths.forEach((path, i) => {\n if (!firstOf.has(path.name)) {\n firstOf.set(path.name, i);\n }\n });\n const entries = [...firstOf].map(([name2, i]) => ({ name: name2, i }));\n const named = entries.map((e) => labelTiers(e.name));\n const name = (t) => entries.map((_, k) => named[k][t]);\n const offset = (t) => entries.map((e, k) => offsetTiers(e.name, named[k])[t]);\n const candidates = [\n name(0),\n name(1),\n offset(0),\n name(2),\n offset(1),\n offset(2)\n ];\n const distinct = candidates.find(\n (labels2) => new Set(labels2).size === entries.length\n );\n const labels = distinct ?? candidates.at(-1);\n return entries.map(({ name: name2, i }, k) => ({\n name: name2,\n label: labels[k],\n color: colors?.[i] ?? pathCssColor(i, paths.length)\n }));\n}\nfunction walkLabelsOf(entries) {\n const seen = /* @__PURE__ */ new Map();\n return new Map(\n [...entries].sort((a, b) => a.label.localeCompare(b.label)).map((e) => {\n const n = (seen.get(e.label) ?? 0) + 1;\n seen.set(e.label, n);\n return [e.name, n > 1 ? `${e.label} (${n})` : e.label];\n })\n );\n}\n\nexport {\n nameHue,\n pathHueAt,\n PATH_SATURATION,\n PATH_LIGHTNESS,\n MAX_PATH_COLORS,\n pathColorsLegible,\n pathCssColor,\n pathGreyCssColor,\n pathLegend,\n walkLabelsOf\n};\n", "import {\n panSNHaplotype\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/nodeWidths.ts\nvar NODE_WIDTHS = [\n {\n value: \"depth\",\n label: \"By depth\",\n description: \"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform.\"\n },\n {\n value: \"frequency\",\n label: \"By frequency\",\n description: \"As wide as the share of haplotypes that pass a node, or its AF tag: full width at 100%, half at 50%, and wider where a haplotype passes it more than once.\"\n },\n {\n value: \"uniform\",\n label: \"Uniform\",\n description: \"Every node the same thickness.\"\n }\n];\nvar MIN_FACTOR = 0.3;\nvar MAX_FACTOR = 3;\nvar MIN_FREQUENCY_FACTOR = 0.05;\nfunction meanDepth(graph) {\n let weighted = 0;\n let length = 0;\n for (const node of graph.nodes) {\n weighted += node.depth * node.length;\n length += node.length;\n }\n return length > 0 ? weighted / length : 0;\n}\nfunction haplotypeOf(path) {\n return path.sample === void 0 ? panSNHaplotype(path.name) ?? path.name : `${path.sample}#${path.haplotype ?? 0}`;\n}\nfunction haplotypeCount(graph) {\n return new Set((graph.paths ?? []).map(haplotypeOf)).size;\n}\nfunction nodeFrequency(node, haplotypes) {\n return node.frequency ?? (haplotypes > 0 ? node.depth / haplotypes : void 0);\n}\nfunction withFrequencies(graph, frequencies) {\n if (!frequencies) {\n return graph;\n }\n const nodes = graph.nodes.map((node) => {\n const frequency = frequencies[node.name];\n return frequency === void 0 ? node : { ...node, frequency };\n });\n return { ...graph, nodes };\n}\nfunction widthNorm(graph, nodeWidth) {\n return nodeWidth === \"depth\" ? meanDepth(graph) : nodeWidth === \"frequency\" ? haplotypeCount(graph) : 0;\n}\nfunction frequencyFactor(f) {\n return Math.min(MAX_FACTOR, Math.max(MIN_FREQUENCY_FACTOR, f));\n}\nfunction frequencyWidthFactor(node, haplotypes) {\n const f = nodeFrequency(node, haplotypes);\n return f === void 0 ? 1 : frequencyFactor(f);\n}\nfunction frequencyKey(contigThickness) {\n return [1, 0.5, 0.1].map((f) => ({\n label: `${f * 100}%`,\n widthPx: contigThickness * frequencyFactor(f)\n }));\n}\nfunction depthWidthFactor(node, mean) {\n if (!(mean > 0) || !(node.depth > 0)) {\n return 1;\n }\n return Math.min(\n MAX_FACTOR,\n Math.max(MIN_FACTOR, Math.sqrt(node.depth / mean))\n );\n}\nfunction nodeWidthPx(node, contigThickness, nodeWidth, norm) {\n return contigThickness * (nodeWidth === \"depth\" ? depthWidthFactor(node, norm) : nodeWidth === \"frequency\" ? frequencyWidthFactor(node, norm) : 1);\n}\nfunction maxNodeWidthPx(contigThickness, nodeWidth) {\n return contigThickness * (nodeWidth === \"uniform\" ? 1 : MAX_FACTOR);\n}\nvar MIN_WALK_LANE_PX = 4;\nfunction walkLaneWidthPx(width, lanes) {\n return Math.max(width / lanes, MIN_WALK_LANE_PX);\n}\nfunction nodeInk(graph, nodeById, contigThickness, nodeWidth, lanes = 0) {\n const norm = graph ? widthNorm(graph, nodeWidth) : 0;\n const reach = (width) => lanes > 0 ? walkLaneWidthPx(width, lanes) * lanes / 2 : width / 2;\n return {\n maxHalfWidthPx: reach(maxNodeWidthPx(contigThickness, nodeWidth)),\n halfWidthPx: (id) => {\n const node = nodeById?.get(id);\n return reach(\n node ? nodeWidthPx(node, contigThickness, nodeWidth, norm) : contigThickness\n );\n }\n };\n}\n\nexport {\n NODE_WIDTHS,\n meanDepth,\n haplotypeCount,\n nodeFrequency,\n withFrequencies,\n widthNorm,\n frequencyKey,\n nodeWidthPx,\n maxNodeWidthPx,\n walkLaneWidthPx,\n nodeInk\n};\n", "// src/edgeWidths.ts\nvar EDGE_WIDTHS = [\n {\n value: \"uniform\",\n label: \"Uniform\",\n description: \"Every link the same thickness.\"\n },\n {\n value: \"walks\",\n label: \"By walks\",\n description: \"Thicker the more walks take a link, on the square root of its count against the busiest link in the cut. A graph without walks draws uniform.\"\n }\n];\nvar MIN_FACTOR = 0.5;\nvar MAX_FACTOR = 4;\nfunction busiestEdge(graph) {\n let most = 0;\n for (const edge of graph.edges) {\n most = Math.max(most, edge.pathIds?.length ?? 0);\n }\n return most;\n}\nfunction edgeWidthFactor(walks, busiest, edgeWidth) {\n if (edgeWidth === \"uniform\" || busiest === 0) {\n return 1;\n }\n return MIN_FACTOR + (MAX_FACTOR - MIN_FACTOR) * Math.sqrt(walks / busiest);\n}\n\nexport {\n EDGE_WIDTHS,\n busiestEdge,\n edgeWidthFactor\n};\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["ROW_HEIGHT_PX", "svgPath", "points", "round", "v", "p", "i", "projectLine", "x1", "y1", "x2", "y2", "distance", "d", "vx", "vy", "curvePointAt", "c", "t", "u", "a", "b", "e", "curveMidpoint", "curves", "mid", "curveBounds", "minX", "minY", "maxX", "maxY", "subCurve", "t0", "t1", "p0", "p1", "dt", "d0", "curveTangentAt", "d1", "VISIBLE_SAMPLES", "visibleStretches", "lengths", "bounds", "yToX", "stretches", "start", "k", "length", "pad", "last", "next", "from", "to", "prev", "dashSpans", "curves", "dashWorld", "yToX", "bounds", "lengths", "c", "total", "a", "b", "periods", "spans", "stretches", "visibleStretches", "seen", "out", "i", "from", "to", "dash", "along", "start", "k", "length", "end", "t0", "t1", "subCurve", "slideCurves", "curves", "fromDx", "fromDy", "toDx", "toDy", "n", "out", "i", "c", "a", "b", "adx", "ady", "bdx", "bdy", "translateCurves", "dx", "dy", "attachment", "segments", "side", "last", "TANGENT_SPAN_FACTOR", "MAX_TANGENT", "ownStrand", "id", "strandSides", "edge", "own", "strand", "spanOf", "min", "max", "s", "distanceToSpan", "x", "span", "facingSide", "other", "tieBreak", "startGap", "endGap", "facingSides", "fromSegments", "toSegments", "laidSides", "heldFacingSides", "byTo", "sides", "APEX_FRACTION", "BOW_CLEARANCE", "ALONG_FRACTION", "MAX_ROW_BOW_PX", "ROW_HEIGHT_PX", "bowAround", "p1x", "p1y", "p2x", "p2y", "toward", "maxBow", "chord", "ux", "uy", "reach", "minAlong", "maxAlong", "p", "perp", "along", "uncapped", "size", "yToXOf", "scaleX", "scaleY", "PATH_RIBBON_SPACING_PX", "drawnDirection", "yToX", "len", "pathRibbonOffsets", "count", "axis", "spacing", "dir", "offsets", "distance", "scaleYOf", "points", "unscaleYOf", "polylinePx", "total", "SELF_LOOP_MIN_PX", "SELF_LOOP_MAX_PX", "selfLoopReach", "scale", "nodePx", "selfLinkOf", "edgeJoinOf", "stranded", "self", "hairpinCurves", "attach", "at", "inward", "px", "py", "nearX", "nearY", "apexX", "apexY", "sideX", "sideY", "computeEdgeCurves", "join", "bypassed", "maxBowIn", "loop", "fromAttach", "toAttach", "fromEnd", "toStart", "segDirX", "segDirY", "ext", "perpX", "perpY", "midX", "midY", "cp1x", "cp1y", "cp2x", "cp2y", "fromPrev", "toNext", "dist", "tangentProj", "prev", "towardX", "towardY", "towardToX", "towardToY", "cx1", "cy1", "projectLine", "cx2", "cy2", "bulge", "chordLen", "bulgeX", "bulgeY", "spreadX", "spreadY", "nearerEnd", "to", "start", "end", "routedEdgeCurves", "route", "tangent", "q", "next", "ta", "tb", "weakMemo", "cache", "key", "deps", "compute", "hit", "d", "i", "value", "LABEL_PX", "LABEL_CHAR_PX", "LABEL_PAD", "labelWidth", "text", "overlaps", "a", "b", "offFrame", "box", "frame", "insideFrame", "occupancy", "reserved", "placed", "p", "placeLabels", "candidates", "take", "out", "row", "stackFrom", "from", "direction", "w", "crowded", "tries", "y", "place", "first", "flip", "strand", "mergeRuns", "graph", "alone", "sides", "strandSides", "at", "attach", "id", "side", "ei", "pushTo", "edge", "joinAfter", "a", "out", "joined", "runOf", "runs", "node", "into", "pred", "run", "next", "byId", "n", "nodes", "members", "backbone", "isBackbone", "first", "b", "sum", "seen", "edges", "from", "to", "key", "ownStrand", "splitRuns", "positions", "weightOf", "line", "arc", "arcPrefix", "total", "weights", "m", "weightSum", "member", "k", "share", "slice", "polylineSlice", "polylineMidpoint", "pointAt", "i", "firstReaching", "s", "lo", "hi", "mid", "span", "t", "points", "trimToWindow", "graph", "window", "inWindow", "n", "isBackbone", "overlapsWindow", "paths", "spans", "path", "first", "last", "id", "i", "span", "kept", "trimmed", "stretches", "nodeIds", "e", "trimVisits", "trimOrigins", "visits", "nameOf", "next", "out", "PathVisitsBuilder", "p", "origin", "pathOrigin", "segment", "at", "clipToWindow", "reachBp", "nodes", "node", "from", "to", "start", "end", "unclipped", "full", "MIN_DELETION_BP", "deletionKey", "reference", "bypassedPoints", "nodePositions", "bypassed", "id", "edgeCurvesOf", "edge", "axis", "route", "stranded", "from", "to", "routedEdgeCurves", "strandSides", "computeEdgeCurves", "edgeJoinOf", "backboneBySequence", "graph", "bySequence", "groupBy", "isBackbone", "node", "list", "a", "b", "bypassedNodes", "nodes", "start", "end", "i", "firstNodeAtOrAfter", "skipsBetween", "forwards", "fromStrand", "toStrand", "leavesRight", "arrivesLeft", "skippedSpan", "visitsOf", "best", "span", "COPY_SWITCH_SHARE", "repeatCopies", "backbone", "refName", "copies", "starts", "v", "next", "switchesCopy", "bp", "partitionPoint", "k", "near", "c", "backboneLinks", "cut", "unclipped", "byId", "n", "referenceVisits", "edgeIndex", "deletionEdges", "links", "closableLinks", "edgeIndexes", "parent", "root", "r", "join", "ra", "rb", "candidates", "e", "ei", "dashedDeletions", "shown", "lift", "d", "drawings", "deletionDrawing", "deletions", "show", "byShow", "drawing", "hidden", "MIN_DELETION_LABEL_PX", "PX_PER_NODE_LABEL", "MIN_NODE_LABELS", "LEADER_GAP_PX", "LABEL_CHAR_PX", "LABEL_PAD_PX", "LABEL_HEIGHT_PX", "LABEL_GAP_PX", "MAX_LABEL_OVERHANG", "labelHalfWidth", "text", "LABEL_HALF_HEIGHT", "MIN_LABEL_HALF_WIDTH", "boxAt", "halfW", "x", "y", "rowLabelBox", "screenY", "labelWidth", "clamp", "v", "lo", "hi", "groupDigits", "n", "formatBp", "bp", "value", "unit", "deletionText", "arcOutward", "curves", "apex", "scaleX", "scaleY", "first", "last", "dx", "dy", "len", "boxSupport", "box", "dir", "boxRayCrossing", "halfH", "runBounds", "nodeIds", "nodePositions", "minX", "minY", "maxX", "maxY", "id", "p", "nodeOrderCache", "weakMemo", "labelOrder", "nodeLengths", "segments", "a", "b", "arcCache", "arcPlacements", "deletions", "axis", "version", "routes", "stranded", "arcs", "deletion", "edgeCurvesOf", "curveMidpoint", "curveBounds", "sizeLabelCandidates", "deletionRoutes", "alleleDeletions", "translateX", "translateY", "width", "height", "deletionCandidates", "nodeCandidates", "extent", "arcX", "arcY", "fits", "bow", "offset", "away", "leader", "crossing", "labelledByDeletion", "alleleRuns", "run", "drawn", "shownLeft", "shownRight", "shownTop", "shownBottom", "polylineMidpoint", "polylinePx", "screenX", "nodeLabelBudget", "placeSizeLabels", "candidates", "take", "budget", "labels", "label", "graphLabels", "reserved", "args", "occupancy", "nodes", "nameHue", "name", "hash", "i", "pathHueAt", "index", "count", "PATH_SATURATION", "PATH_LIGHTNESS", "MAX_PATH_COLORS", "pathColorsLegible", "pathCount", "pathCssColor", "pathGreyCssColor", "labelTiers", "parts", "pathOrigin", "full", "isGenericSample", "contig", "offsetTiers", "tiers", "start", "t", "groupDigits", "pathLegend", "paths", "colors", "firstOf", "path", "entries", "name2", "named", "e", "_", "k", "offset", "candidates", "labels", "labels2", "walkLabelsOf", "seen", "a", "b", "n", "NODE_WIDTHS", "MIN_FACTOR", "MAX_FACTOR", "MIN_FREQUENCY_FACTOR", "meanDepth", "graph", "weighted", "length", "node", "haplotypeOf", "path", "panSNHaplotype", "haplotypeCount", "nodeFrequency", "haplotypes", "widthNorm", "graph", "nodeWidth", "meanDepth", "haplotypeCount", "frequencyFactor", "f", "MAX_FACTOR", "MIN_FREQUENCY_FACTOR", "frequencyWidthFactor", "node", "haplotypes", "nodeFrequency", "frequencyKey", "contigThickness", "depthWidthFactor", "mean", "MIN_FACTOR", "nodeWidthPx", "norm", "maxNodeWidthPx", "MIN_WALK_LANE_PX", "walkLaneWidthPx", "width", "lanes", "nodeInk", "nodeById", "reach", "id", "EDGE_WIDTHS", "MIN_FACTOR", "MAX_FACTOR", "busiestEdge", "graph", "most", "edge", "edgeWidthFactor", "walks", "busiest", "edgeWidth"]
|