jbrowse-plugin-graphgenomeviewer 8.0.2 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{AddTrackWorkflow-RJSOQZYQ.js → AddTrackWorkflow-7CXTSSMR.js} +2 -2
- package/dist/chunks/GbzBaseSyntenyAdapter-EJIR3HZM.js +2 -0
- package/dist/chunks/GbzBaseSyntenyAdapter-EJIR3HZM.js.map +7 -0
- package/dist/chunks/{GraphGenomeView-667ZUNDI.js → GraphGenomeView-2AKRM74B.js} +2 -2
- package/dist/chunks/{GraphTrackSettingsDialog-7M3Q635V.js → GraphTrackSettingsDialog-7XRZQW6T.js} +2 -2
- package/dist/chunks/{HighlightColorDialog-4F34Q4PY.js → HighlightColorDialog-LCBGD2ZA.js} +2 -2
- package/dist/chunks/LinearGraphDisplay-WWQ73BO5.js +2 -0
- package/dist/chunks/{MinigraphBubbleAdapter-G25V6MZL.js → MinigraphBubbleAdapter-4OOBJ44C.js} +2 -2
- package/dist/chunks/RgfaTabixAdapter-CEGFN2QY.js +2 -0
- package/dist/chunks/RgfaTabixAdapter-CEGFN2QY.js.map +7 -0
- package/dist/chunks/{WalkFormsAdapter-PBN7BJZW.js → WalkFormsAdapter-LTAKACZD.js} +2 -2
- package/dist/chunks/{WalkTabixSyntenyAdapter-27WDE5JF.js → WalkTabixSyntenyAdapter-B6V3YNW7.js} +2 -2
- package/dist/chunks/chunk-5FNGR33G.js +2 -0
- package/dist/chunks/chunk-5FNGR33G.js.map +7 -0
- package/dist/chunks/chunk-6VNDP3UB.js +2 -0
- package/dist/chunks/chunk-6VNDP3UB.js.map +7 -0
- package/dist/chunks/{chunk-CJAV55QB.js → chunk-BJHWGRMP.js} +1 -1
- package/dist/chunks/{chunk-CJAV55QB.js.map → chunk-BJHWGRMP.js.map} +1 -1
- package/dist/chunks/{chunk-IAXUZMOX.js → chunk-CNCYMJ5E.js} +2 -2
- package/dist/chunks/{chunk-IAXUZMOX.js.map → chunk-CNCYMJ5E.js.map} +2 -2
- package/dist/chunks/{chunk-2V75YPTT.js → chunk-CVHKXFVS.js} +2 -2
- package/dist/chunks/{chunk-2V75YPTT.js.map → chunk-CVHKXFVS.js.map} +2 -2
- package/dist/chunks/chunk-CZI7IP5S.js +2 -0
- package/dist/chunks/chunk-CZI7IP5S.js.map +7 -0
- package/dist/chunks/chunk-CZXJXNZN.js +3 -0
- package/dist/chunks/chunk-CZXJXNZN.js.map +7 -0
- package/dist/chunks/chunk-HAAABGE7.js +2 -0
- package/dist/chunks/{chunk-JMRW3IGK.js → chunk-IK3MQ4ZJ.js} +2 -2
- package/dist/chunks/chunk-IK3MQ4ZJ.js.map +7 -0
- package/dist/chunks/{chunk-JOYKGTDE.js → chunk-MCBYBZZJ.js} +2 -2
- package/dist/chunks/chunk-NOXHIOIM.js +2 -0
- package/dist/chunks/chunk-NOXHIOIM.js.map +7 -0
- package/dist/chunks/{chunk-FY7X6253.js → chunk-OGXVDZPS.js} +2 -2
- package/dist/chunks/{chunk-FY7X6253.js.map → chunk-OGXVDZPS.js.map} +2 -2
- package/dist/chunks/{chunk-3EQNVA3F.js → chunk-OLZZDBQJ.js} +2 -2
- package/dist/chunks/{chunk-3EQNVA3F.js.map → chunk-OLZZDBQJ.js.map} +2 -2
- package/dist/chunks/{chunk-I6F25EXY.js → chunk-PTOKTIQG.js} +2 -2
- package/dist/chunks/{chunk-O5FDMVL3.js → chunk-QWG7NASD.js} +2 -2
- package/dist/chunks/chunk-SL4JJJQJ.js +3 -0
- package/dist/chunks/chunk-SL4JJJQJ.js.map +7 -0
- package/dist/chunks/{chunk-XB5KC2EZ.js → chunk-T2VC3EEL.js} +1 -1
- package/dist/chunks/{chunk-XB5KC2EZ.js.map → chunk-T2VC3EEL.js.map} +1 -1
- package/dist/chunks/{chunk-2PNGGCQJ.js → chunk-UECOGSWM.js} +2 -2
- package/dist/chunks/{chunk-2PNGGCQJ.js.map → chunk-UECOGSWM.js.map} +1 -1
- package/dist/chunks/chunk-UHV6XIDG.js +2 -0
- package/dist/chunks/chunk-UHV6XIDG.js.map +7 -0
- package/dist/chunks/{chunk-5RHNR3TH.js → chunk-VKZALU57.js} +1 -1
- package/dist/chunks/{chunk-5RHNR3TH.js.map → chunk-VKZALU57.js.map} +1 -1
- package/dist/chunks/chunk-W7IHIVSE.js +2 -0
- package/dist/chunks/{chunk-XWCLYB5C.js.map → chunk-W7IHIVSE.js.map} +4 -4
- package/dist/chunks/{chunk-NLS74JSZ.js → chunk-WUOXZAGN.js} +2 -2
- package/dist/chunks/{chunk-NLS74JSZ.js.map → chunk-WUOXZAGN.js.map} +1 -1
- package/dist/chunks/{renderSvg-YNA5VK6A.js → renderSvg-E5Q7MLCH.js} +2 -2
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +5 -5
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
- package/package.json +4 -4
- package/src/GraphAddTrackWorkflow/buildTrackConfig.ts +12 -2
- package/src/GraphAddTrackWorkflow/graphManifest.ts +16 -9
- package/src/GraphGenomeView/components/HoverTooltip.tsx +8 -0
- package/src/GraphGenomeView/pane/paneBase.ts +14 -9
- package/src/RgfaTabixAdapter/RgfaTabixAdapter.ts +94 -41
- package/src/RgfaTabixAdapter/configSchema.ts +35 -4
- package/src/RgfaTabixAdapter/format2.test.ts +128 -0
- package/src/RgfaTabixAdapter/test_data/pggb_ecoli_f1.links.bed.gz +0 -0
- package/src/RgfaTabixAdapter/test_data/pggb_ecoli_f1.links.bed.gz.tbi +0 -0
- package/src/RgfaTabixAdapter/test_data/pggb_ecoli_f1.segs.bed.gz +0 -0
- package/src/RgfaTabixAdapter/test_data/pggb_ecoli_f1.segs.bed.gz.tbi +0 -0
- package/src/RgfaTabixAdapter/test_data/pggb_ecoli_f2.graph.bed.gz +0 -0
- package/src/RgfaTabixAdapter/test_data/pggb_ecoli_f2.graph.bed.gz.tbi +0 -0
- package/src/RgfaTabixAdapter/test_data/walks5_skip.GRCh38.walks.bed.gz +0 -0
- package/src/RgfaTabixAdapter/test_data/walks5_skip.GRCh38.walks.bed.gz.tbi +0 -0
- package/src/RgfaTabixAdapter/walkFiles.test.ts +21 -0
- package/src/RgfaTabixAdapter/walkReader.ts +20 -15
- package/src/graphTrackDefaults/index.ts +2 -2
- package/src/locationName.ts +2 -0
- package/src/version.ts +1 -1
- package/dist/chunks/GbzBaseSyntenyAdapter-EGNUOKB2.js +0 -2
- package/dist/chunks/GbzBaseSyntenyAdapter-EGNUOKB2.js.map +0 -7
- package/dist/chunks/LinearGraphDisplay-BAEMS5WG.js +0 -2
- package/dist/chunks/RgfaTabixAdapter-JPTUWO2Z.js +0 -2
- package/dist/chunks/RgfaTabixAdapter-JPTUWO2Z.js.map +0 -7
- package/dist/chunks/chunk-AH5UWTAV.js +0 -2
- package/dist/chunks/chunk-AH5UWTAV.js.map +0 -7
- package/dist/chunks/chunk-DG3E6BSX.js +0 -3
- package/dist/chunks/chunk-DG3E6BSX.js.map +0 -7
- package/dist/chunks/chunk-HLAQQI6G.js +0 -2
- package/dist/chunks/chunk-HLAQQI6G.js.map +0 -7
- package/dist/chunks/chunk-IKJZPPOA.js +0 -2
- package/dist/chunks/chunk-IKJZPPOA.js.map +0 -7
- package/dist/chunks/chunk-JMRW3IGK.js.map +0 -7
- package/dist/chunks/chunk-Q7QC2EQU.js +0 -2
- package/dist/chunks/chunk-RHYBJCA4.js +0 -2
- package/dist/chunks/chunk-RHYBJCA4.js.map +0 -7
- package/dist/chunks/chunk-X7YIGIYW.js +0 -2
- package/dist/chunks/chunk-X7YIGIYW.js.map +0 -7
- package/dist/chunks/chunk-XWCLYB5C.js +0 -2
- package/dist/chunks/chunk-ZGTG74GE.js +0 -3
- package/dist/chunks/chunk-ZGTG74GE.js.map +0 -7
- /package/dist/chunks/{AddTrackWorkflow-RJSOQZYQ.js.map → AddTrackWorkflow-7CXTSSMR.js.map} +0 -0
- /package/dist/chunks/{GraphGenomeView-667ZUNDI.js.map → GraphGenomeView-2AKRM74B.js.map} +0 -0
- /package/dist/chunks/{GraphTrackSettingsDialog-7M3Q635V.js.map → GraphTrackSettingsDialog-7XRZQW6T.js.map} +0 -0
- /package/dist/chunks/{HighlightColorDialog-4F34Q4PY.js.map → HighlightColorDialog-LCBGD2ZA.js.map} +0 -0
- /package/dist/chunks/{LinearGraphDisplay-BAEMS5WG.js.map → LinearGraphDisplay-WWQ73BO5.js.map} +0 -0
- /package/dist/chunks/{MinigraphBubbleAdapter-G25V6MZL.js.map → MinigraphBubbleAdapter-4OOBJ44C.js.map} +0 -0
- /package/dist/chunks/{WalkFormsAdapter-PBN7BJZW.js.map → WalkFormsAdapter-LTAKACZD.js.map} +0 -0
- /package/dist/chunks/{WalkTabixSyntenyAdapter-27WDE5JF.js.map → WalkTabixSyntenyAdapter-B6V3YNW7.js.map} +0 -0
- /package/dist/chunks/{chunk-Q7QC2EQU.js.map → chunk-HAAABGE7.js.map} +0 -0
- /package/dist/chunks/{chunk-JOYKGTDE.js.map → chunk-MCBYBZZJ.js.map} +0 -0
- /package/dist/chunks/{chunk-I6F25EXY.js.map → chunk-PTOKTIQG.js.map} +0 -0
- /package/dist/chunks/{chunk-O5FDMVL3.js.map → chunk-QWG7NASD.js.map} +0 -0
- /package/dist/chunks/{renderSvg-YNA5VK6A.js.map → renderSvg-E5Q7MLCH.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.
|
|
4
|
-
"sourcesContent": ["import {\n slideAt\n} from \"./chunk-JJV2GT2Z.js\";\n\n// src/renderer/walkLanes.ts\nvar THREAD_PX = 2;\nvar THREAD_GAP_PX = 1.5;\nvar SLOT_GAP_PX = 4;\nvar LANE_SMOOTHING_PX = 12;\nvar THREAD_REACH_PX = 64;\nvar THREAD_TAPER_PX = 24;\nvar MAX_BAND_PX = 48;\nvar PASSES_KEY = \"a thread per pass through a node\";\nvar threadsPasses = (walks) => walks.length > 1 && walks.some((w) => w.mostPasses > 1);\nvar threadsWidth = (threads) => threads * THREAD_PX + Math.max(0, threads - 1) * THREAD_GAP_PX;\nvar sum = (values) => values.reduce((a, b) => a + b, 0);\nfunction slotLayout(spans, mostPasses, laneWidth) {\n const widths = spans.map(\n (m, i) => mostPasses[i] > 1 ? threadsWidth(m) : laneWidth * Math.min(1, m)\n );\n let seen = 0;\n const gaps = spans.map((m) => {\n const share = Math.min(1, m);\n const gap = SLOT_GAP_PX * share * seen;\n seen = Math.max(seen, share);\n return gap;\n });\n return { widths, gaps, band: sum(widths) + sum(gaps) };\n}\nvar THREAD_PITCH_PX = THREAD_PX + THREAD_GAP_PX;\nfunction slotCentres(spans, mostPasses, held = spans) {\n const { widths, gaps, band } = slotLayout(spans, mostPasses, THREAD_PX);\n let at = -band / 2;\n return widths.map((width, i) => {\n at += gaps[i];\n const slack = mostPasses[i] > 1 ? Math.max(0, width - threadsWidth(held[i])) : 0;\n const centre = at + slack / 2 + THREAD_PX / 2;\n at += width;\n return centre;\n });\n}\nvar bandWidthPx = (mostPasses) => slotLayout(mostPasses, mostPasses, THREAD_PX).band;\nvar bandScale = (mostPasses) => Math.min(1, MAX_BAND_PX / (bandWidthPx(mostPasses) || 1));\nvar passesKey = (walks) => bandScale(walks.map((w) => w.mostPasses)) < 1 ? `${PASSES_KEY}, thinned to fit` : PASSES_KEY;\nfunction laneSlideAt(start, end, along) {\n const vector = ({ normal, offsetX: offsetX2 }) => ({\n dx: normal.nx * offsetX2,\n dy: normal.ny * offsetX2\n });\n const { dx, dy } = slideAt(vector(start), vector(end), along);\n const offsetX = Math.hypot(dx, dy);\n return offsetX > 0 ? { normal: { nx: dx / offsetX, ny: dy / offsetX }, offsetX } : { normal: { nx: 0, ny: 0 }, offsetX: 0 };\n}\nfunction pointIndex(run, p) {\n const i = run.stepOf[p];\n const k = p - run.starts[i];\n return run.forward[i] ? k : run.starts[i + 1] - run.starts[i] - 1 - k;\n}\nvar gapOf = (a, b) => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return Math.sqrt(dx * dx + dy * dy);\n};\nfunction arcOf(run) {\n const s = new Float64Array(run.length);\n for (let i = 1; i < run.length; i++) {\n s[i] = s[i - 1] + gapOf(run[i - 1], run[i]);\n }\n return s;\n}\nfunction walkSteps(walkRoutes, nodePositions) {\n const seen = /* @__PURE__ */ new Set();\n return walkRoutes.map((routes) => {\n const visits = /* @__PURE__ */ new Map();\n return routes.map(\n (route) => route.map((id) => {\n const visit = visits.get(id) ?? 0;\n visits.set(id, visit + 1);\n const segments = nodePositions[id];\n const owned = !!segments?.length && !seen.has(id);\n if (owned) {\n seen.add(id);\n }\n return { id, visit, owned, segments };\n })\n );\n });\n}\nfunction laneRuns(steps, yToX, jump) {\n const runs = [];\n steps.forEach((pieces, walk) => {\n let total = 0;\n for (const piece of pieces) {\n for (const { segments } of piece) {\n total += segments?.length ?? 0;\n }\n }\n const xs = new Float64Array(total);\n const ys = new Float64Array(total);\n let at = 0;\n let from = 0;\n let run = fresh();\n function fresh() {\n return {\n walk,\n ids: [],\n visits: [],\n forward: [],\n owned: [],\n starts: [0]\n };\n }\n const breakRun = () => {\n if (run.ids.length) {\n const stepOf = new Int32Array(at - from);\n for (let i = 0; i < run.ids.length; i++) {\n stepOf.fill(i, run.starts[i], run.starts[i + 1]);\n }\n runs.push({\n ...run,\n xs: xs.subarray(from, at),\n ys: ys.subarray(from, at),\n stepOf\n });\n }\n run = fresh();\n from = at;\n };\n const gap = (x, y, p) => {\n const dx = p.x - x;\n const dy = p.y * yToX - y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n for (const piece of pieces) {\n piece.forEach(({ id, visit, owned, segments }, k) => {\n if (!segments?.length) {\n breakRun();\n return;\n }\n const first = segments[0];\n const last = segments.at(-1);\n let forward;\n if (at > from) {\n const x = xs[at - 1];\n const y = ys[at - 1];\n const toFirst = gap(x, y, first);\n const toLast = gap(x, y, last);\n forward = toFirst <= toLast;\n if (Math.min(toFirst, toLast) > jump) {\n breakRun();\n }\n } else {\n const next = piece[k + 1]?.segments;\n const toNext = (p) => next?.length ? Math.min(\n gap(p.x, p.y * yToX, next[0]),\n gap(p.x, p.y * yToX, next.at(-1))\n ) : 0;\n forward = toNext(last) <= toNext(first);\n }\n run.ids.push(id);\n run.visits.push(visit);\n run.forward.push(forward);\n run.owned.push(owned);\n for (let j = 0; j < segments.length; j++) {\n const p = segments[forward ? j : segments.length - 1 - j];\n xs[at] = p.x;\n ys[at] = p.y * yToX;\n at++;\n }\n run.starts.push(at - from);\n });\n breakRun();\n }\n });\n return runs;\n}\nfunction ownedWindows(s, owned, margin) {\n const windows = [];\n for (let i = 0; i < owned.length; i++) {\n if (!owned[i]) {\n continue;\n }\n let j = i;\n while (j + 1 < owned.length && owned[j + 1]) {\n j++;\n }\n const last = windows.at(-1);\n const floor = last ? last[1] : 0;\n let lo = i;\n while (lo > floor && s[i] - s[lo - 1] <= margin) {\n lo--;\n }\n let hi = j;\n while (hi + 1 < s.length && s[hi + 1] - s[j] <= margin) {\n hi++;\n }\n if (last && lo <= last[1] + 1) {\n last[1] = hi;\n } else {\n windows.push([lo, hi]);\n }\n i = j;\n }\n return windows;\n}\nfunction smoothedNormals(run, reach) {\n const s = arcOf(run);\n const end = s.at(-1);\n const pointAt = (at, j) => {\n const a = run[j];\n const b = run[Math.min(j + 1, run.length - 1)];\n const span = s[Math.min(j + 1, run.length - 1)] - s[j];\n const f = span > 0 ? (at - s[j]) / span : 0;\n return { x: a.x + (b.x - a.x) * f, y: a.y + (b.y - a.y) * f };\n };\n let lo = 0;\n let hi = 0;\n return run.map((_, i) => {\n const back = Math.max(0, s[i] - reach / 2);\n const ahead = Math.min(end, s[i] + reach / 2);\n while (lo < run.length - 1 && s[lo + 1] <= back) {\n lo++;\n }\n while (hi < run.length - 1 && s[hi + 1] <= ahead) {\n hi++;\n }\n const a = pointAt(back, lo);\n const b = pointAt(ahead, hi);\n const len = gapOf(a, b);\n return len > 0 ? { nx: -(b.y - a.y) / len, ny: (b.x - a.x) / len } : void 0;\n });\n}\nfunction cutCurls(run, close, length) {\n const s = arcOf(run);\n const out = run.slice();\n const picks = [];\n s.forEach((at, k) => {\n const last = picks.at(-1);\n if (last === void 0 || at - s[last] >= close / 4) {\n picks.push(k);\n }\n });\n if (picks.at(-1) !== run.length - 1) {\n picks.push(run.length - 1);\n }\n let a = 0;\n while (a < picks.length) {\n const i = picks[a];\n let to = -1;\n for (let b = a + 1; b < picks.length && s[picks[b]] - s[i] <= length; b++) {\n const j2 = picks[b];\n if (s[j2] - s[i] > Math.PI * close && gapOf(run[i], run[j2]) <= close) {\n to = b;\n }\n }\n if (to < 0) {\n a++;\n continue;\n }\n const j = picks[to];\n const p = run[i];\n const q = run[j];\n for (let k = i + 1; k < j; k++) {\n const f = (s[k] - s[i]) / (s[j] - s[i]);\n out[k] = {\n ...run[k],\n x: p.x + (q.x - p.x) * f,\n y: p.y + (q.y - p.y) * f\n };\n }\n a = to;\n }\n return out;\n}\nfunction rounded(run, half) {\n const n = run.length;\n const s = arcOf(run);\n const end = s[n - 1];\n const sumW = new Float64Array(n + 1);\n const sumX = new Float64Array(n + 1);\n const sumY = new Float64Array(n + 1);\n for (let i = 0; i < n; i++) {\n const p = run[i];\n const w = (s[Math.min(i + 1, n - 1)] - s[Math.max(i - 1, 0)]) / 2;\n sumW[i + 1] = sumW[i] + w;\n sumX[i + 1] = sumX[i] + w * p.x;\n sumY[i + 1] = sumY[i] + w * p.y;\n }\n const out = new Array(n);\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n const p = run[i];\n const reach = Math.min(half, s[i], end - s[i]);\n const from = s[i] - reach;\n const to = s[i] + reach + 1e-9 * (1 + end);\n while (lo < n && s[lo] < from) {\n lo++;\n }\n while (hi < n && s[hi] < to) {\n hi++;\n }\n const w = sumW[hi] - sumW[lo];\n out[i] = w > 0 ? { x: (sumX[hi] - sumX[lo]) / w, y: (sumY[hi] - sumY[lo]) / w } : { x: p.x, y: p.y };\n }\n return out;\n}\nfunction tightPoints(line, radius) {\n const n = line.length;\n const s = arcOf(line);\n const end = s[n - 1];\n const tight = new Uint8Array(n);\n const along = (j, at) => {\n const a = line[j];\n const b = line[j + 1];\n if (!b) {\n return a;\n }\n const span = s[j + 1] - s[j];\n const f = span > 0 ? (at - s[j]) / span : 0;\n return { x: a.x + (b.x - a.x) * f, y: a.y + (b.y - a.y) * f };\n };\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n if (s[i] < radius || end - s[i] < radius) {\n continue;\n }\n while (lo + 1 < n && s[lo + 1] <= s[i] - radius) {\n lo++;\n }\n while (hi + 1 < n && s[hi + 1] <= s[i] + radius) {\n hi++;\n }\n const p = line[i];\n const a = along(lo, s[i] - radius);\n const b = along(hi, s[i] + radius);\n const twice = Math.abs(\n (b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x)\n );\n tight[i] = twice > 0 && gapOf(a, b) * gapOf(a, p) * gapOf(p, b) / (2 * twice) < radius ? 1 : 0;\n }\n return { tight, s };\n}\nfunction loosened(line, radius) {\n const out = line.slice();\n const { tight, s } = tightPoints(out, radius);\n let windows = ownedWindows(\n s,\n Array.from(tight, (t) => t > 0),\n 3 * radius\n );\n for (let pass = 0; pass < 8 && windows.length; pass++) {\n windows = windows.filter(([lo, hi]) => {\n const part = out.slice(lo, hi + 1);\n const local = tightPoints(part, radius);\n if (!local.tight.includes(1)) {\n return false;\n }\n const weight = windowMean(local.s, local.tight, radius);\n const smoother = rounded(part, radius);\n for (let k = 0; k < part.length; k++) {\n const w = Math.min(1, 3 * weight[k]);\n if (w > 0) {\n const p = part[k];\n const q = smoother[k];\n out[lo + k] = { x: p.x + (q.x - p.x) * w, y: p.y + (q.y - p.y) * w };\n }\n }\n return true;\n });\n }\n return out;\n}\nfunction runSigns(s, own, canonical, forward, settle, half) {\n const n = own.length;\n const agreement = new Float64Array(n);\n let hi = 0;\n let lo = 0;\n let sum2 = 0;\n let decided = 0;\n let pending = 0;\n for (let i = 0; i < n; i++) {\n while (hi < n && s[hi] - s[i] <= half) {\n const theirs = canonical(hi);\n const mine = own[hi];\n agreement[hi] = theirs && mine ? theirs.nx * mine.nx + theirs.ny * mine.ny : 0;\n sum2 += agreement[hi];\n hi++;\n }\n while (s[i] - s[lo] > half) {\n sum2 -= agreement[lo++];\n }\n if (Math.abs(sum2) > 1e-9) {\n decided = sum2 < 0 ? -1 : 1;\n }\n if (!decided) {\n continue;\n }\n for (; pending <= i; pending++) {\n settle(pending, decided);\n }\n }\n if (pending < n) {\n let along = 0;\n for (let k = 0; k < n; k++) {\n along += forward(k) ? 1 : -1;\n }\n for (; pending < n; pending++) {\n settle(pending, along < 0 ? -1 : 1);\n }\n }\n}\nfunction laneLines(runs, yToX, reach, band, smooth = true) {\n const turn = Math.max(reach, 2 * band);\n const curl = Math.PI * band;\n const context = smooth ? curl + 3 * band + turn / 2 : turn / 2;\n const frames = /* @__PURE__ */ new Map();\n const firsts = /* @__PURE__ */ new Map();\n const arcs = [];\n const stepFrames = [];\n const newFrame = (length) => ({\n normals: new Array(length),\n shifts: smooth ? new Array(length) : []\n });\n const place = (id, walk, visit, f) => {\n let byWalk = frames.get(id);\n if (!byWalk) {\n byWalk = [];\n frames.set(id, byWalk);\n }\n ;\n (byWalk[walk] ??= [])[visit] = f;\n };\n runs.forEach((run, r) => {\n const { walk, ids, visits, owned, starts, xs, ys, stepOf } = run;\n const steps = ids.length;\n const n = xs.length;\n const own = new Array(steps);\n for (let i = 0; i < steps; i++) {\n if (owned[i]) {\n own[i] = newFrame(starts[i + 1] - starts[i]);\n firsts.set(ids[i], { run: r, step: i, frame: own[i] });\n place(ids[i], walk, visits[i], own[i]);\n }\n }\n const raw = new Float64Array(n);\n for (let p = 1; p < n; p++) {\n const dx = xs[p] - xs[p - 1];\n const dy = ys[p] - ys[p - 1];\n raw[p] = raw[p - 1] + Math.sqrt(dx * dx + dy * dy);\n }\n const end = raw[n - 1];\n const firstRun = new Int32Array(steps).fill(-1);\n const firstStep = new Int32Array(steps);\n const firstFrame = new Array(steps);\n for (let i = 0; i < steps; i++) {\n const first = owned[i] ? void 0 : firsts.get(ids[i]);\n if (first) {\n firstRun[i] = first.run;\n firstStep[i] = first.step;\n firstFrame[i] = first.frame;\n }\n }\n const plus = new Int32Array(steps);\n const minus = new Int32Array(steps);\n for (let i = 0; i + 1 < steps; i++) {\n const same = firstRun[i] >= 0 && firstRun[i + 1] === firstRun[i];\n const d = same ? firstStep[i + 1] - firstStep[i] : 0;\n plus[i + 1] = plus[i] + (d === 1 ? 1 : 0);\n minus[i + 1] = minus[i] + (d === -1 ? 1 : 0);\n }\n const shared = new Array(steps);\n let reachFrom = 0;\n let reachTo = 0;\n for (let i = 0; i < steps; i++) {\n if (!smooth) {\n shared[i] = !owned[i];\n continue;\n }\n const from = raw[starts[i]] - context;\n const to = raw[starts[i + 1] - 1] + context;\n while (raw[reachFrom] < from) {\n reachFrom++;\n }\n while (reachTo + 1 < n && raw[reachTo + 1] <= to) {\n reachTo++;\n }\n const lo = stepOf[Math.max(0, reachFrom - 1)];\n const hi = stepOf[Math.min(n - 1, reachTo + 1)];\n const span = hi - lo;\n const forward = plus[hi] - plus[lo];\n const backward = minus[hi] - minus[lo];\n shared[i] = !owned[i] && from >= 0 && to <= end && span > 0 && (forward === span || backward === span);\n }\n for (let i = 0; i < steps; i++) {\n if (owned[i]) {\n continue;\n }\n const first = firstFrame[i];\n own[i] = !smooth && shared[i] ? first : shared[i] ? { normals: first.normals, shifts: first.shifts } : newFrame(first.normals.length);\n place(ids[i], walk, visits[i], own[i]);\n }\n stepFrames.push(own);\n const apart = new Array(n);\n for (let p = 0; p < n; p++) {\n apart[p] = !shared[stepOf[p]];\n }\n for (const [from, to] of ownedWindows(raw, apart, context)) {\n const points = [];\n for (let p = from; p <= to; p++) {\n points.push({ x: xs[p], y: ys[p] });\n }\n const line = smooth ? loosened(\n rounded(cutCurls(points, band / 2, curl), band / 2),\n band / 2\n ) : points;\n const normals = smoothedNormals(line, turn);\n runSigns(\n arcOf(line),\n normals,\n (k) => {\n const i = stepOf[from + k];\n return (owned[i] ? own[i] : firstFrame[i])?.normals[pointIndex(run, from + k)];\n },\n (k) => run.forward[stepOf[from + k]],\n (k, sign) => {\n const p = from + k;\n const i = stepOf[p];\n if (shared[i]) {\n return;\n }\n const index = pointIndex(run, p);\n const m = normals[k];\n own[i].normals[index] = m && (sign > 0 ? m : { nx: -m.nx, ny: -m.ny });\n if (smooth) {\n own[i].shifts[index] = {\n dx: line[k].x - points[k].x,\n dy: (line[k].y - points[k].y) / yToX\n };\n }\n },\n turn\n );\n }\n if (!smooth) {\n arcs.push(raw);\n return;\n }\n const s = new Float64Array(n);\n let px = 0;\n let py = 0;\n for (let p = 0; p < n; p++) {\n const shift = own[stepOf[p]].shifts[pointIndex(run, p)];\n const x = xs[p] + (shift?.dx ?? 0);\n const y = ys[p] + (shift?.dy ?? 0) * yToX;\n s[p] = p ? s[p - 1] + Math.sqrt((x - px) ** 2 + (y - py) ** 2) : 0;\n px = x;\n py = y;\n }\n arcs.push(s);\n });\n return { frames, arcs, stepFrames };\n}\nfunction windowed(s, v, half, sign) {\n const out = new Array(v.length);\n const deque = [];\n let head = 0;\n let next = 0;\n for (let i = 0; i < v.length; i++) {\n while (next < v.length && s[next] - s[i] <= half) {\n while (deque.length > head && sign * v[deque.at(-1)] <= sign * v[next]) {\n deque.pop();\n }\n deque.push(next++);\n }\n while (s[i] - s[deque[head]] > half) {\n head++;\n }\n out[i] = v[deque[head]];\n }\n return out;\n}\nfunction windowMean(s, v, half, counted = () => true) {\n const n = v.length;\n const sumW = new Float64Array(n + 1);\n const sumWV = new Float64Array(n + 1);\n for (let i = 0; i < n; i++) {\n const w = !counted(v[i]) ? 0 : n > 1 ? (s[Math.min(i + 1, n - 1)] - s[Math.max(i - 1, 0)]) / 2 : 1;\n sumW[i + 1] = sumW[i] + w;\n sumWV[i + 1] = sumWV[i] + w * v[i];\n }\n const out = new Float64Array(n);\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n while (s[i] - s[lo] > half) {\n lo++;\n }\n while (hi < n && s[hi] - s[i] <= half) {\n hi++;\n }\n const w = sumW[hi] - sumW[lo];\n out[i] = w > 0 ? (sumWV[hi] - sumWV[lo]) / w : v[i];\n }\n return out;\n}\nvar ONE_THREAD = [0];\nfunction repeats(passes) {\n for (const p of passes.values()) {\n if (p > 1) {\n return true;\n }\n }\n return false;\n}\nfunction walkThreads(route, passes, nodePositions, yToX, reach) {\n if (!repeats(passes)) {\n return {\n span: passes,\n nodeThreads: /* @__PURE__ */ new Map(),\n threadPasses: /* @__PURE__ */ new Map(),\n threadAt: /* @__PURE__ */ new Map(),\n linkThreads: /* @__PURE__ */ new Map()\n };\n }\n const index = /* @__PURE__ */ new Map();\n const ids = [];\n const widths = [];\n const visits = [];\n const steps = [];\n const stepVisits = [];\n const stepWants = [];\n const stepGlides = [];\n for (const piece of route) {\n const points = [];\n const nodes = [];\n for (const id of piece) {\n let k = index.get(id);\n if (k === void 0) {\n k = ids.length;\n index.set(id, k);\n ids.push(id);\n widths.push(0);\n visits.push(0);\n }\n nodes.push(k);\n const segments = nodePositions[id];\n const mid = segments?.[Math.floor(segments.length / 2)];\n points.push(\n mid ? { x: mid.x, y: mid.y * yToX } : points.at(-1) ?? { x: 0, y: 0 }\n );\n }\n const s = arcOf(points);\n const p = piece.map((id) => passes.get(id) ?? 1);\n const most = windowed(s, p, reach / 2, 1);\n const copy = nodes.map((k) => ++visits[k]);\n const n = piece.length;\n const before = new Int32Array(n);\n let last = -1;\n for (let i = 0; i < n; i++) {\n last = p[i] === most[i] ? i : last;\n before[i] = last;\n }\n const after = new Int32Array(n);\n last = -1;\n for (let i = n - 1; i >= 0; i--) {\n last = p[i] === most[i] ? i : last;\n after[i] = last;\n }\n const wants = new Array(n);\n const glides = new Array(n).fill(NaN);\n for (let i = 0; i < n; i++) {\n const b = before[i];\n const a = after[i];\n const nearest = b < 0 ? a : a < 0 ? b : s[i] - s[b] <= s[a] - s[i] ? b : a;\n const want = (k) => Math.min(copy[k], most[i]) - 1;\n wants[i] = want(nearest);\n if (p[i] === 1 && b >= 0 && a >= 0 && want(a) !== want(b)) {\n const f = (s[i] - s[b]) / (s[a] - s[b] || 1);\n glides[i] = want(b) + (want(a) - want(b)) * f;\n }\n widths[nodes[i]] = Math.max(widths[nodes[i]], most[i]);\n }\n steps.push(nodes);\n stepVisits.push(copy);\n stepWants.push(wants);\n stepGlides.push(glides);\n }\n const taken = [];\n const threadOf = [];\n const free = (k, want) => {\n const width = widths[k];\n const own = taken[k] ??= /* @__PURE__ */ new Set();\n for (let d = 0; d < width; d++) {\n for (const c of [want - d, want + d]) {\n if (c >= 0 && c < width && !own.has(c)) {\n return c;\n }\n }\n }\n return want;\n };\n const glideOf = [];\n steps.forEach((nodes, piece) => {\n nodes.forEach((k, i) => {\n if (widths[k] > 1) {\n const glide = stepGlides[piece][i];\n const t = free(\n k,\n Number.isNaN(glide) ? stepWants[piece][i] : Math.round(glide)\n );\n taken[k].add(t);\n (threadOf[k] ??= [])[stepVisits[piece][i]] = t;\n if (!Number.isNaN(glide)) {\n ;\n (glideOf[k] ??= [])[t] = glide;\n }\n }\n });\n });\n const span = /* @__PURE__ */ new Map();\n const nodeThreads = /* @__PURE__ */ new Map();\n const threadPasses = /* @__PURE__ */ new Map();\n const threadAt = /* @__PURE__ */ new Map();\n ids.forEach((id, k) => {\n if (glideOf[k]) {\n threadAt.set(id, glideOf[k]);\n }\n span.set(id, widths[k]);\n nodeThreads.set(\n id,\n taken[k] ? [...taken[k]].sort((a, b) => a - b) : ONE_THREAD\n );\n const passOf = [];\n threadOf[k]?.forEach((thread, visit) => {\n passOf[thread] = visit - 1;\n });\n threadPasses.set(id, passOf);\n });\n const linkThreads = /* @__PURE__ */ new Map();\n steps.forEach((nodes, piece) => {\n const visit = stepVisits[piece];\n for (let i = 1; i < nodes.length; i++) {\n const from = nodes[i - 1];\n const to = nodes[i];\n const pair = [\n threadOf[from]?.[visit[i - 1]] ?? 0,\n threadOf[to]?.[visit[i]] ?? 0\n ];\n let ahead = linkThreads.get(ids[from]);\n if (!ahead) {\n ahead = /* @__PURE__ */ new Map();\n linkThreads.set(ids[from], ahead);\n }\n const list = ahead.get(ids[to]);\n if (!list) {\n ahead.set(ids[to], [pair]);\n } else if (!list.some(([a, b]) => a === pair[0] && b === pair[1])) {\n list.push(pair);\n }\n }\n });\n return { span, nodeThreads, threadPasses, threadAt, linkThreads };\n}\nfunction bandSpans(runs, arcs, spans, { reach, taper }) {\n const out = /* @__PURE__ */ new Map();\n runs.forEach((run, r) => {\n const s = arcs[r];\n const along = run.ids.map((_, i) => {\n const length = run.starts[i + 1] - run.starts[i];\n const middle = Math.floor(length / 2);\n return s[run.starts[i] + (run.forward[i] ? middle : length - 1 - middle)];\n });\n for (const [lo, hi] of ownedWindows(\n along,\n run.owned,\n reach / 2 + taper / 2\n )) {\n const at = along.slice(lo, hi + 1);\n const ids = run.ids.slice(lo, hi + 1);\n const eased = spans.map((own) => {\n const raw = ids.map((id) => own.get(id) ?? 0);\n return raw.every((v) => v === raw[0]) ? { slot: raw, held: raw } : {\n slot: windowMean(at, windowed(at, raw, reach / 2, 1), taper / 2),\n held: windowMean(at, raw, taper / 2, (v) => v > 0)\n };\n });\n ids.forEach((id, i) => {\n if (run.owned[lo + i]) {\n out.set(id, {\n slot: eased.map((e) => e.slot[i]),\n held: eased.map((e) => e.held[i])\n });\n }\n });\n }\n });\n return out;\n}\nfunction easeOffsets(runs, stepFrames, arcs, spans, passes, threads, half) {\n const plain = slotCentres(passes, passes);\n const byNode = /* @__PURE__ */ new Map();\n const centresAt = (id) => {\n let centres = byNode.get(id);\n if (!centres) {\n const own = spans.get(id);\n centres = own ? slotCentres(own.slot, passes, own.held) : plain;\n byNode.set(id, centres);\n }\n return centres;\n };\n runs.forEach((run, r) => {\n const { walk, ids, visits, starts } = run;\n const { threadPasses, threadAt } = threads[walk];\n const raw = new Float64Array(run.xs.length);\n ids.forEach((id, i) => {\n const thread = Math.max(0, threadPasses.get(id)?.indexOf(visits[i]) ?? 0);\n const place = threadAt.get(id)?.[thread] ?? thread;\n raw.fill(\n centresAt(id)[walk] + place * THREAD_PITCH_PX,\n starts[i],\n starts[i + 1]\n );\n });\n const eased = windowMean(arcs[r], raw, half);\n stepFrames[r].forEach((frame, i) => {\n const from = starts[i];\n const to = starts[i + 1];\n let constant = true;\n for (let p = from + 1; constant && p < to; p++) {\n constant = Math.abs(eased[p] - eased[from]) < 1e-9;\n }\n if (constant) {\n frame.offset = eased[from];\n return;\n }\n const offsets = new Array(to - from);\n for (let p = from; p < to; p++) {\n offsets[pointIndex(run, p)] = eased[p];\n }\n frame.offsets = offsets;\n });\n });\n}\nfunction liftLanes(walks, nodePositions, yToX, worldPerScreenPx, steps = walkSteps(\n walks.map((w) => w.route),\n nodePositions\n)) {\n const threaded = threadsPasses(walks);\n const passes = walks.map((w) => w.mostPasses);\n const reach = THREAD_REACH_PX * worldPerScreenPx;\n const runs = laneRuns(steps, yToX, LANE_SMOOTHING_PX * worldPerScreenPx);\n const band = bandWidthPx(passes) * (threaded ? bandScale(passes) : 1) * worldPerScreenPx;\n const lines = laneLines(\n runs,\n yToX,\n LANE_SMOOTHING_PX * worldPerScreenPx,\n band,\n threaded\n );\n const threads = threaded ? walks.map((w) => walkThreads(w.route, w.passes, nodePositions, yToX, reach)) : void 0;\n const spans = threads ? bandSpans(\n runs,\n lines.arcs,\n threads.map((t) => t.span),\n { reach, taper: THREAD_TAPER_PX * worldPerScreenPx }\n ) : void 0;\n if (spans && threads) {\n easeOffsets(\n runs,\n lines.stepFrames,\n lines.arcs,\n spans,\n passes,\n threads,\n THREAD_TAPER_PX / 2 * worldPerScreenPx\n );\n }\n const furthestShift = { dx: 0, dy: 0 };\n const seenShifts = /* @__PURE__ */ new Set();\n for (const byWalk of lines.frames.values()) {\n for (const { shifts } of byWalk.flat()) {\n if (seenShifts.has(shifts)) {\n continue;\n }\n seenShifts.add(shifts);\n for (const shift of shifts) {\n furthestShift.dx = Math.max(furthestShift.dx, Math.abs(shift?.dx ?? 0));\n furthestShift.dy = Math.max(furthestShift.dy, Math.abs(shift?.dy ?? 0));\n }\n }\n }\n return { lines, threads, spans, furthestShift };\n}\n\nexport {\n THREAD_PX,\n THREAD_GAP_PX,\n SLOT_GAP_PX,\n LANE_SMOOTHING_PX,\n THREAD_REACH_PX,\n THREAD_TAPER_PX,\n MAX_BAND_PX,\n PASSES_KEY,\n threadsPasses,\n THREAD_PITCH_PX,\n slotCentres,\n bandWidthPx,\n bandScale,\n passesKey,\n laneSlideAt,\n walkSteps,\n laneRuns,\n laneLines,\n walkThreads,\n bandSpans,\n liftLanes\n};\n", "// src/renderer/colorBits.ts\nfunction packAbgr(r, g, b, a) {\n return (a << 24 | b << 16 | g << 8 | r) >>> 0;\n}\nfunction abgrRed(c) {\n return c & 255;\n}\nfunction abgrGreen(c) {\n return c >>> 8 & 255;\n}\nfunction abgrBlue(c) {\n return c >>> 16 & 255;\n}\nfunction abgrAlpha(c) {\n return c >>> 24 & 255;\n}\nfunction abgrToCssRgba(c) {\n return `rgba(${abgrRed(c)},${abgrGreen(c)},${abgrBlue(c)},${abgrAlpha(c) / 255})`;\n}\nfunction normalizedRgbToCssRgba(c, alpha) {\n return `rgba(${Math.round(c[0] * 255)},${Math.round(c[1] * 255)},${Math.round(c[2] * 255)},${alpha})`;\n}\nfunction fadeAbgr(c, alpha) {\n return packAbgr(\n abgrRed(c),\n abgrGreen(c),\n abgrBlue(c),\n Math.round(abgrAlpha(c) * alpha)\n );\n}\nfunction brightenAbgr(c, factor) {\n const t = Math.max(0, 1 - 1 / factor);\n const lift = (v) => Math.round(v + (255 - v) * t);\n return packAbgr(\n lift(abgrRed(c)),\n lift(abgrGreen(c)),\n lift(abgrBlue(c)),\n abgrAlpha(c)\n );\n}\n\nexport {\n packAbgr,\n abgrRed,\n abgrGreen,\n abgrBlue,\n abgrAlpha,\n abgrToCssRgba,\n normalizedRgbToCssRgba,\n fadeAbgr,\n brightenAbgr\n};\n", "// src/referenceRampCss.ts\nvar REFERENCE_RAMP_MAX_HUE = 300;\nvar REFERENCE_RAMP_SATURATION = 0.7;\nvar REFERENCE_RAMP_LIGHTNESS = 0.5;\nfunction rampHueCss(hue) {\n return `hsl(${hue}, ${REFERENCE_RAMP_SATURATION * 100}%, ${REFERENCE_RAMP_LIGHTNESS * 100}%)`;\n}\nfunction rampHueAt(frac) {\n return Math.max(0, Math.min(1, frac)) * REFERENCE_RAMP_MAX_HUE;\n}\nfunction rampHue(bp, domain) {\n return rampHueAt((bp - domain.start) / (domain.end - domain.start));\n}\nvar HUE_STOP_DEG = 30;\nfunction rampStops({ start, bp, reversed }, domain) {\n const low = rampHue(start, domain);\n const high = rampHue(start + bp, domain);\n if (high - low < 1) {\n return [(low + high) / 2];\n }\n const n = Math.ceil((high - low) / HUE_STOP_DEG);\n return Array.from(\n { length: n + 1 },\n (_, i) => rampHue(start + bp * (reversed ? n - i : i) / n, domain)\n );\n}\nvar RAMP_GRADIENT_STOPS = Array.from({ length: 7 }, (_, i) => ({\n offset: i / 6,\n color: rampHueCss(i / 6 * REFERENCE_RAMP_MAX_HUE)\n}));\nvar RAMP_GRADIENT_CSS = `linear-gradient(to right, ${RAMP_GRADIENT_STOPS.map(\n (s) => `${s.color} ${s.offset * 100}%`\n).join(\", \")})`;\n\nexport {\n REFERENCE_RAMP_MAX_HUE,\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS,\n rampHueCss,\n rampHueAt,\n rampHue,\n rampStops,\n RAMP_GRADIENT_STOPS,\n RAMP_GRADIENT_CSS\n};\n", "import {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n edgeCurvesOf\n} from \"./chunk-OMQWCVOJ.js\";\n\n// src/util/edgeCurves.ts\nvar cache = weakMemo();\nfunction baseEdgeCurves(nodePositions, graph, axis, deletions, version, routes, stranded = false) {\n return cache(\n nodePositions,\n [graph, axis.scaleX, axis.scaleY, deletions, routes, stranded, version],\n () => {\n const curves = /* @__PURE__ */ new Map();\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const bypassed = deletions?.get(ei);\n const edgeCurves = edgeCurvesOf(\n nodePositions,\n graph.edges[ei],\n axis,\n bypassed,\n bypassed && routes?.[ei],\n stranded\n );\n if (edgeCurves) {\n curves.set(ei, edgeCurves);\n }\n }\n return curves;\n }\n );\n}\n\nexport {\n baseEdgeCurves\n};\n", "import {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/referenceSpan.ts\nvar MAX_BACKBONE_HOPS = 4;\nfunction buildNeighbors(graph) {\n const neighbors = /* @__PURE__ */ new Map();\n for (const edge of graph.edges) {\n pushTo(neighbors, edge.from, edge.to);\n pushTo(neighbors, edge.to, edge.from);\n }\n return neighbors;\n}\nfunction flankingSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const seen = /* @__PURE__ */ new Set([nodeId]);\n let frontier = [nodeId];\n let minEnd = Infinity;\n let maxStart = -Infinity;\n for (let hop = 0; hop < MAX_BACKBONE_HOPS && frontier.length > 0; hop++) {\n const next = [];\n for (const id of frontier) {\n const adjacent = neighbors.get(id);\n if (adjacent) {\n for (const neighborId of adjacent) {\n if (!seen.has(neighborId)) {\n seen.add(neighborId);\n const neighbor = nodeById.get(neighborId);\n if (neighbor && isBackbone(neighbor)) {\n minEnd = Math.min(minEnd, neighbor.stable.start + neighbor.length);\n maxStart = Math.max(maxStart, neighbor.stable.start);\n } else {\n next.push(neighborId);\n }\n }\n }\n }\n }\n frontier = next;\n }\n return minEnd === Infinity ? void 0 : {\n start: Math.min(minEnd, maxStart),\n end: Math.max(minEnd, maxStart)\n };\n}\nfunction nodeReferenceSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const node = nodeById.get(nodeId);\n return node === void 0 ? void 0 : isBackbone(node) ? { start: node.stable.start, end: node.stable.start + node.length } : flankingSpan({ nodeId, nodeById, neighbors });\n}\nfunction referenceMidpoints(graph) {\n const nodeById = new Map(graph.nodes.map((node) => [node.id, node]));\n const neighbors = buildNeighbors(graph);\n const midpoints = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const span = nodeReferenceSpan({ nodeId: node.id, nodeById, neighbors });\n if (span) {\n midpoints.set(node.id, (span.start + span.end) / 2);\n }\n }\n return midpoints;\n}\nfunction referencePositions(graph) {\n const positions = referenceMidpoints(graph);\n const neighbors = buildNeighbors(graph);\n let frontier = [...positions.keys()];\n while (frontier.length > 0) {\n const next = [];\n for (const id of frontier) {\n for (const neighborId of neighbors.get(id) ?? []) {\n if (!positions.has(neighborId)) {\n positions.set(neighborId, positions.get(id));\n next.push(neighborId);\n }\n }\n }\n frontier = next;\n }\n return positions;\n}\n\nexport {\n buildNeighbors,\n nodeReferenceSpan,\n referenceMidpoints,\n referencePositions\n};\n", "import {\n THREAD_PITCH_PX,\n THREAD_PX,\n bandScale,\n bandWidthPx,\n laneSlideAt,\n liftLanes,\n slotCentres,\n threadsPasses,\n walkSteps\n} from \"./chunk-YUIKEUKY.js\";\nimport {\n abgrToCssRgba,\n fadeAbgr,\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n REFERENCE_RAMP_LIGHTNESS,\n REFERENCE_RAMP_SATURATION,\n rampHueAt\n} from \"./chunk-GQZVR5DW.js\";\nimport {\n baseEdgeCurves\n} from \"./chunk-AGUBPT45.js\";\nimport {\n PATH_LIGHTNESS,\n PATH_SATURATION,\n nameHue,\n pathHueAt\n} from \"./chunk-EHEIS3TE.js\";\nimport {\n nodeWidthPx,\n walkLaneWidthPx,\n widthNorm\n} from \"./chunk-XWH4LB56.js\";\nimport {\n referenceMidpoints\n} from \"./chunk-L4DBSRA2.js\";\nimport {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n dashSpans,\n pathRibbonOffsets,\n polylinePx,\n slideCurves,\n strandSides,\n translateCurves,\n yToXOf\n} from \"./chunk-JJV2GT2Z.js\";\nimport {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\nimport {\n busiestEdge,\n edgeWidthFactor\n} from \"./chunk-DAEEMZ74.js\";\n\n// src/renderer/GeometryBuilder.ts\nvar EDGE_DEFAULT_COLOR = packAbgr(119, 119, 119, 217);\nvar EDGE_PATH_FALLBACK_COLOR = packAbgr(136, 136, 136, 217);\nvar EDGE_DELETION_COLOR = packAbgr(24, 24, 28, 240);\nvar DELETION_THICKNESS_FACTOR = 2.2;\nvar LIFT_BACKDROP_COLOR = packAbgr(160, 160, 160, 255);\nvar FADED_ALPHA = 0.18;\nvar LIFT_BACKDROP_CSS = abgrToCssRgba(\n fadeAbgr(LIFT_BACKDROP_COLOR, FADED_ALPHA)\n);\nvar DELETION_DASH_PX = 11;\nvar MIN_PATH_STRIPE_PX = 1.2;\nvar MIN_SCALE_FOR_OFFSET = 1e-6;\nvar ARROW_LENGTH_BASE_PX = 7;\nvar ARROW_LENGTH_PER_EDGE_PX = 3;\nvar ARROW_HALF_WIDTH_BASE_PX = 3;\nvar ARROW_HALF_WIDTH_PER_EDGE_PX = 1.5;\nvar MIN_LINK_HEADS = 3;\nvar MIN_ARROW_FIT = 0.5;\nvar MIN_ARROW_SCALE = 0.45;\nvar ARROW_CURVE_STEPS = 12;\nvar ABUTTING_PX = 1e-6;\nvar walkX = new Float64Array(64);\nvar walkY = new Float64Array(64);\nvar walkPx = new Float64Array(64);\nfunction backFromEnd(curves, scale, yToX, untilPx) {\n const most = curves.length * ARROW_CURVE_STEPS + 1;\n if (walkX.length < most) {\n walkX = new Float64Array(most);\n walkY = new Float64Array(most);\n walkPx = new Float64Array(most);\n }\n const last = curves[curves.length - 1];\n walkX[0] = last.x1;\n walkY[0] = last.y1;\n walkPx[0] = 0;\n let n = 1;\n let px = 0;\n for (let ci = curves.length - 1; ci >= 0 && px < untilPx; ci--) {\n const c = curves[ci];\n for (let k = 1; k <= ARROW_CURVE_STEPS && px < untilPx; k++) {\n const t = 1 - (k / ARROW_CURVE_STEPS) ** 2;\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n const x = a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1;\n const y = a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1;\n px += Math.hypot(x - walkX[n - 1], (y - walkY[n - 1]) * yToX) * scale;\n walkX[n] = x;\n walkY[n] = y;\n walkPx[n] = px;\n n++;\n }\n }\n return n;\n}\nfunction walkPointAt(n, px) {\n let i = 1;\n while (i < n - 1 && walkPx[i] < px) {\n i++;\n }\n const from = walkPx[i - 1];\n const to = walkPx[i];\n const f = to > from ? Math.min(1, Math.max(0, (px - from) / (to - from))) : 0;\n return {\n x: walkX[i - 1] + (walkX[i] - walkX[i - 1]) * f,\n y: walkY[i - 1] + (walkY[i] - walkY[i - 1]) * f\n };\n}\nfunction arrowheadFor({\n curves,\n edgeHalfWidth,\n nodeHalfWidth,\n scale,\n yToX,\n color,\n fromSegments,\n toSegments\n}) {\n const length = ARROW_LENGTH_BASE_PX + ARROW_LENGTH_PER_EDGE_PX * edgeHalfWidth;\n const n = backFromEnd(\n curves,\n scale,\n yToX,\n nodeHalfWidth + MIN_LINK_HEADS * length\n );\n const lengthPx = walkPx[n - 1];\n const abutting = lengthPx < ABUTTING_PX;\n const inset = Math.min(nodeHalfWidth, lengthPx);\n const fit = abutting ? Math.min(1, polylinePx(fromSegments, scale, scale * yToX) / length) : 1;\n if (abutting ? fit < MIN_ARROW_FIT : lengthPx < MIN_LINK_HEADS * length) {\n return void 0;\n }\n const tip = walkPointAt(n, inset);\n const base = walkPointAt(n, inset + length * fit);\n const dx = tip.x - base.x;\n const dy = (tip.y - base.y) * yToX;\n const last = curves[curves.length - 1];\n return {\n x: tip.x,\n y: tip.y,\n angle: Math.hypot(dx, dy) > 0 ? Math.atan2(dy, dx) : endTangent(last, yToX, intoDirection(last, toSegments)),\n length: length * fit,\n halfWidth: (ARROW_HALF_WIDTH_BASE_PX + ARROW_HALF_WIDTH_PER_EDGE_PX * edgeHalfWidth) * fit,\n color\n };\n}\nvar FIRST_THREADS = [[0, 0]];\nvar ONE_PASS = [0];\nvar NO_SHIFT = { dx: 0, dy: 0 };\nfunction nearerStart(at, segments, yToX) {\n const gap = (p) => Math.hypot(p.x - at.x, (p.y - at.y) * yToX);\n return gap(segments[0]) < gap(segments.at(-1));\n}\nfunction leavesStart(edge, segments, first, stranded, yToX) {\n return stranded ? strandSides(edge).from === \"start\" : nearerStart({ x: first.x0, y: first.y0 }, segments, yToX);\n}\nfunction intoDirection(last, toSegments) {\n if (toSegments.length < 2) {\n return void 0;\n }\n const first = toSegments[0];\n const final = toSegments[toSegments.length - 1];\n const atStart = Math.hypot(last.x1 - first.x, last.y1 - first.y) <= Math.hypot(last.x1 - final.x, last.y1 - final.y);\n return atStart ? { from: first, to: toSegments[1] } : { from: final, to: toSegments[toSegments.length - 2] };\n}\nfunction normal(a, b) {\n if (!a || !b) {\n return void 0;\n }\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len = Math.hypot(dx, dy);\n return len > 0 ? { nx: -dy / len, ny: dx / len } : void 0;\n}\nvar MITRE_LIMIT = 0.1;\nvar LONGEST_NORMAL = 1 / Math.sqrt(MITRE_LIMIT);\nfunction pointNormalsOf(rawPoints, yToX = 1) {\n const points = yToX === 1 ? rawPoints : rawPoints.map((p) => ({ x: p.x, y: p.y * yToX }));\n return points.map((p, i) => {\n const before = normal(points[i - 1], p);\n const after = normal(p, points[i + 1]);\n if (before && after) {\n const nx = (before.nx + after.nx) / 2;\n const ny = (before.ny + after.ny) / 2;\n const dot = before.nx * nx + before.ny * ny;\n return dot > MITRE_LIMIT ? { nx: nx / dot, ny: ny / dot } : { nx, ny };\n }\n return before ?? after ?? { nx: 0, ny: 0 };\n });\n}\nfunction offsetPolyline(points, normals, distance, yToX = 1) {\n const out = new Array(points.length);\n for (let i = 0; i < points.length; i++) {\n const d = typeof distance === \"number\" ? distance : distance[i];\n out[i] = {\n x: points[i].x + normals[i].nx * d,\n y: points[i].y + normals[i].ny * d / yToX\n };\n }\n return out;\n}\nfunction hslToRgb(h, s, l) {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n return [r + m, g + m, b + m];\n}\nfunction packHsl(h, s, l, a = 1) {\n const [r, g, b] = hslToRgb(h, s, l);\n return packAbgr(\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n Math.round(a * 255)\n );\n}\nvar DEPTH_GRADIENT = [\n [68, 1, 84],\n [59, 82, 139],\n [33, 145, 140],\n [94, 201, 98],\n [253, 231, 37]\n];\nvar STABLE_RANK_GRADIENT = [\n [237, 137, 44],\n [158, 42, 122]\n];\nvar NODE_LENGTH_GRADIENT = [\n [220, 50, 50],\n [50, 120, 220]\n];\nfunction sampleGradient(stops, t) {\n const pos = Math.max(0, Math.min(1, t)) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(pos));\n const f = pos - i;\n const a = stops[i];\n const b = stops[i + 1];\n return packAbgr(\n Math.round(a[0] + (b[0] - a[0]) * f),\n Math.round(a[1] + (b[1] - a[1]) * f),\n Math.round(a[2] + (b[2] - a[2]) * f),\n 255\n );\n}\nfunction hashColor(str, alpha) {\n return packHsl(nameHue(str), PATH_SATURATION, PATH_LIGHTNESS, alpha);\n}\nvar REFERENCE_RAMP_ALT_RGB = [60, 65, 72];\nvar REFERENCE_RAMP_ALT_COLOR = packAbgr(...REFERENCE_RAMP_ALT_RGB, 255);\nvar REFERENCE_RAMP_ALT_CSS = `rgb(${REFERENCE_RAMP_ALT_RGB.join(\", \")})`;\nfunction rampFraction(node, ramp) {\n const mid = ramp.midpoints.get(node.id);\n return isBackbone(node) && mid !== void 0 ? (mid - ramp.start) / ramp.span : void 0;\n}\nfunction computeReferenceRamp(graph, domain) {\n const midpoints = referenceMidpoints(graph);\n if (domain && domain.end > domain.start) {\n return {\n start: domain.start,\n span: domain.end - domain.start,\n midpoints\n };\n }\n let min = Infinity;\n let max = -Infinity;\n for (const mid of midpoints.values()) {\n min = Math.min(min, mid);\n max = Math.max(max, mid);\n }\n return {\n start: min === Infinity ? 0 : min,\n span: max > min ? max - min : 1,\n midpoints\n };\n}\nfunction computeColorSchemeRange(graph, referenceRamp) {\n let minDepth = Infinity;\n let maxDepth = -Infinity;\n let minLength = Infinity;\n let maxLength = -Infinity;\n let maxRank = 0;\n for (const n of graph.nodes) {\n if (n.stable !== void 0 && n.stable.rank > maxRank) {\n maxRank = n.stable.rank;\n }\n if (n.depth < minDepth) {\n minDepth = n.depth;\n }\n if (n.depth > maxDepth) {\n maxDepth = n.depth;\n }\n if (n.length < minLength) {\n minLength = n.length;\n }\n if (n.length > maxLength) {\n maxLength = n.length;\n }\n }\n return {\n minDepth,\n maxDepth,\n minLength,\n maxLength,\n maxRank,\n nodeCount: graph.nodes.length,\n referenceRamp\n };\n}\nfunction getNodeColor(node, nodeIndex, colorScheme, range) {\n switch (colorScheme) {\n case \"random\":\n return hashColor(node.id, 1);\n case \"depth\":\n return sampleGradient(\n DEPTH_GRADIENT,\n range.maxDepth > range.minDepth ? (node.depth - range.minDepth) / (range.maxDepth - range.minDepth) : 0.5\n );\n case \"node-length\":\n return sampleGradient(\n NODE_LENGTH_GRADIENT,\n range.maxLength > range.minLength ? (node.length - range.minLength) / (range.maxLength - range.minLength) : 0.5\n );\n // rGFA states the backbone rather than leaving it to be inferred: rank 0 is\n // the reference, higher ranks are the sequence that diverges from it. A\n // graph with no SR tags draws every node as unranked.\n case \"stable-rank\":\n return node.stable === void 0 ? packAbgr(160, 160, 160, 255) : node.stable.rank === 0 ? packAbgr(52, 152, 219, 255) : sampleGradient(\n STABLE_RANK_GRADIENT,\n range.maxRank > 1 ? (node.stable.rank - 1) / (range.maxRank - 1) : 0\n );\n // Position on the reference, the one quantity both panels of a\n // graph-over-linear figure can state, so only the backbone takes a hue\n case \"reference-position\": {\n const ramp = range.referenceRamp;\n if (ramp === void 0) {\n return packAbgr(160, 160, 160, 255);\n }\n const t = rampFraction(node, ramp);\n return t === void 0 ? REFERENCE_RAMP_ALT_COLOR : packHsl(\n rampHueAt(t),\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n );\n }\n case \"grey\":\n return packAbgr(160, 160, 160, 255);\n case \"rainbow\": {\n const hue = range.nodeCount > 1 ? nodeIndex / range.nodeCount * 360 : 0;\n return packHsl(hue, 0.75, 0.5);\n }\n default:\n return packAbgr(52, 152, 219, 255);\n }\n}\nfunction endTangent(c, yToX = 1, into) {\n const candidates = [\n [c.cx1, c.cy1],\n [c.cx0, c.cy0],\n [c.x0, c.y0]\n ];\n for (const [x, y] of candidates) {\n const dx = c.x1 - x;\n const dy = (c.y1 - y) * yToX;\n if (Math.hypot(dx, dy) > 0) {\n return Math.atan2(dy, dx);\n }\n }\n return into ? Math.atan2((into.to.y - into.from.y) * yToX, into.to.x - into.from.x) : 0;\n}\nfunction isPolylineInBounds(segments, bounds) {\n let hit = false;\n for (let i = 0; i < segments.length - 1 && !hit; i++) {\n const a = segments[i];\n const b = segments[i + 1];\n hit = Math.max(a.x, b.x) >= bounds.minX && Math.min(a.x, b.x) <= bounds.maxX && Math.max(a.y, b.y) >= bounds.minY && Math.min(a.y, b.y) <= bounds.maxY;\n }\n return hit;\n}\nfunction isBezierInBounds(curves, bounds, growX = 0, growY = 0) {\n for (const c of curves) {\n const cMinX = Math.min(c.x0, c.cx0, c.cx1, c.x1);\n const cMaxX = Math.max(c.x0, c.cx0, c.cx1, c.x1);\n const cMinY = Math.min(c.y0, c.cy0, c.cy1, c.y1);\n const cMaxY = Math.max(c.y0, c.cy0, c.cy1, c.y1);\n if (cMaxX >= bounds.minX - growX && cMinX <= bounds.maxX + growX && cMaxY >= bounds.minY - growY && cMinY <= bounds.maxY + growY) {\n return true;\n }\n }\n return false;\n}\nvar paletteCache = /* @__PURE__ */ new WeakMap();\nfunction pathPaletteOf(graph) {\n let palette = paletteCache.get(graph);\n if (!palette) {\n const pathColorByIndex = [];\n const pathIndexByName = /* @__PURE__ */ new Map();\n const paths = graph.paths ?? [];\n for (let i = 0; i < paths.length; i++) {\n pathColorByIndex.push(\n packHsl(\n pathHueAt(i, paths.length),\n PATH_SATURATION,\n PATH_LIGHTNESS,\n 0.85\n )\n );\n if (!pathIndexByName.has(paths[i].name)) {\n pathIndexByName.set(paths[i].name, i);\n }\n }\n palette = { pathColorByIndex, pathIndexByName };\n paletteCache.set(graph, palette);\n }\n return palette;\n}\nvar slotsCache = /* @__PURE__ */ new WeakMap();\nvar NO_SLOTS = /* @__PURE__ */ new Map();\nfunction pathSlotsOf(graph) {\n let slots = slotsCache.get(graph);\n if (!slots) {\n slots = /* @__PURE__ */ new Map();\n for (const [pathIdx, path] of (graph.paths ?? []).entries()) {\n for (const nodeId of new Set(path.nodeIds)) {\n pushTo(slots, nodeId, pathIdx);\n }\n }\n slotsCache.set(graph, slots);\n }\n return slots;\n}\nvar lanesCache = weakMemo();\nvar stepsCache = weakMemo();\nvar linksCache = /* @__PURE__ */ new WeakMap();\nfunction linksOf(graph) {\n let links = linksCache.get(graph);\n if (!links) {\n links = /* @__PURE__ */ new Map();\n for (const { from, to } of graph.edges) {\n let out = links.get(from);\n if (!out) {\n out = /* @__PURE__ */ new Set();\n links.set(from, out);\n }\n out.add(to);\n }\n linksCache.set(graph, links);\n }\n return links;\n}\nfunction buildGeometry(options) {\n const {\n nodePositions,\n graph,\n nodeById,\n colorScheme,\n contigThickness,\n connectorThickness,\n drawPaths,\n nodeWidth = \"uniform\",\n edgeWidth = \"uniform\",\n highlight,\n axis,\n linearLayout,\n viewportBounds,\n referenceRamp,\n deletions,\n deletionRoutes,\n stranded,\n hiddenEdges,\n version = 0\n } = options;\n const widthScale = widthNorm(graph, nodeWidth);\n const busiest = edgeWidth === \"walks\" ? busiestEdge(graph) : 0;\n const scale = axis.scaleX;\n const worldPerScreenPx = 1 / Math.max(scale, MIN_SCALE_FOR_OFFSET);\n const yToX = yToXOf(axis);\n const sharedCurves = baseEdgeCurves(\n nodePositions,\n graph,\n axis,\n deletions,\n version,\n deletionRoutes,\n stranded\n );\n const nodeStrokes = [];\n const nodeStrokeRuns = /* @__PURE__ */ new Map();\n const arrows = [];\n const arrowRuns = /* @__PURE__ */ new Map();\n const edgeCurves = [];\n const edgeCurveRuns = /* @__PURE__ */ new Map();\n const colorRange = computeColorSchemeRange(graph, referenceRamp);\n const nodeIndexMap = /* @__PURE__ */ new Map();\n if (colorScheme === \"rainbow\") {\n for (let i = 0; i < graph.nodes.length; i++) {\n nodeIndexMap.set(graph.nodes[i].id, i);\n }\n }\n const pathCount = graph.paths?.length ?? 0;\n const { pathColorByIndex, pathIndexByName } = pathPaletteOf(graph);\n const pathColorByName = (name) => pathColorByIndex[pathIndexByName.get(name) ?? -1] ?? EDGE_PATH_FALLBACK_COLOR;\n const nodePathSlots = drawPaths && pathCount > 1 ? pathSlotsOf(graph) : NO_SLOTS;\n const liftedWalks = highlight?.walks ?? [];\n const threaded = threadsPasses(liftedWalks);\n const lanePasses = liftedWalks.map((w) => w.mostPasses);\n const thinned = threaded ? bandScale(lanePasses) : 1;\n const fields = highlight && liftedWalks.length > 1 ? lanesCache(\n highlight,\n [nodePositions, version, axis.scaleX, axis.scaleY],\n () => liftLanes(\n liftedWalks,\n nodePositions,\n yToX,\n worldPerScreenPx,\n stepsCache(\n highlight,\n [nodePositions, version],\n () => walkSteps(\n liftedWalks.map((w) => w.route),\n nodePositions\n )\n )\n )\n ) : void 0;\n const lines = fields?.lines;\n const threads = fields?.threads;\n const spanField = fields?.spans;\n const plainCentres = threaded ? slotCentres(lanePasses, lanePasses) : [];\n const centresByNode = /* @__PURE__ */ new Map();\n const centresOf = (nodeId) => {\n let centres = centresByNode.get(nodeId);\n if (!centres) {\n const spans = spanField?.get(nodeId);\n centres = spans ? slotCentres(spans.slot, lanePasses, spans.held) : plainCentres;\n centresByNode.set(nodeId, centres);\n }\n return centres;\n };\n const laneOffset = (nodeId, laneWidth, lane, pass) => threaded ? (centresOf(nodeId)[lane] + pass * THREAD_PITCH_PX) * thinned : (lane - (liftedWalks.length - 1) / 2) * laneWidth;\n const threadOffsetAt = (frame, at, fallback) => {\n const eased = frame?.offsets?.[at] ?? frame?.offset;\n return eased === void 0 ? fallback : eased * thinned;\n };\n const laneHalfWidth = (laneWidth) => threaded ? THREAD_PX / 2 * thinned : laneWidth / 2;\n const plainNormals = /* @__PURE__ */ new Map();\n const visitNormals = /* @__PURE__ */ new WeakMap();\n const visitOf = (lane, nodeId, thread) => threads?.[lane]?.threadPasses.get(nodeId)?.[thread] ?? 0;\n const plainNormalsOf = (nodeId, segments) => {\n let normals = plainNormals.get(nodeId);\n if (!normals) {\n normals = pointNormalsOf(segments, yToX);\n plainNormals.set(nodeId, normals);\n }\n return normals;\n };\n const laneNormalsOf = (nodeId, segments, frame) => {\n if (!frame) {\n return plainNormalsOf(nodeId, segments);\n }\n let normals = visitNormals.get(frame.normals);\n if (!normals) {\n normals = plainNormalsOf(nodeId, segments).map(\n (n, i) => frame.normals[i] ?? n\n );\n visitNormals.set(frame.normals, normals);\n }\n return normals;\n };\n const laneWidths = /* @__PURE__ */ new Map();\n const laneWidthOf = (id) => {\n let width = laneWidths.get(id);\n if (width === void 0) {\n const node = nodeById.get(id);\n width = walkLaneWidthPx(\n node ? nodeWidthPx(node, contigThickness, nodeWidth, widthScale) : contigThickness,\n liftedWalks.length\n );\n laneWidths.set(id, width);\n }\n return width;\n };\n const laneEndOf = (id, frames, segments, atStart, lane, thread) => {\n const at = atStart ? 0 : segments.length - 1;\n const frame = frames?.[lane]?.[visitOf(lane, id, thread)];\n const eased = frame?.offsets?.[at] ?? frame?.offset;\n return {\n normal: frame?.normals[at] ?? plainNormalsOf(id, segments)[at] ?? { nx: 0, ny: 0 },\n shift: frame?.shifts[at] ?? NO_SHIFT,\n offset: eased === void 0 ? laneOffset(id, laneWidthOf(id), lane, thread) : eased * thinned\n };\n };\n const lanesMayShow = (curves, fromId) => {\n if (!viewportBounds) {\n return true;\n }\n const offset = threaded ? bandWidthPx(lanePasses) * thinned : (liftedWalks.length - 1) / 2 * laneWidthOf(fromId);\n const reach = LONGEST_NORMAL * offset * worldPerScreenPx;\n return isBezierInBounds(\n curves,\n viewportBounds,\n reach + (fields?.furthestShift.dx ?? 0),\n reach / yToX + (fields?.furthestShift.dy ?? 0)\n );\n };\n const threadPairs = (lane, from, to) => {\n const own = threads?.[lane]?.linkThreads;\n if (!own?.size) {\n return FIRST_THREADS;\n }\n const ahead = own.get(from)?.get(to);\n const back = linksOf(graph).get(to)?.has(from) ? void 0 : own.get(to)?.get(from);\n if (!back) {\n return ahead ?? FIRST_THREADS;\n }\n const turned = back.map(([a, b]) => [b, a]);\n return ahead ? [...ahead, ...turned] : turned;\n };\n const threadColor = (lane, nodeId, thread) => liftedWalks[lane]?.passColors.get(nodeId)?.[threads?.[lane]?.threadPasses.get(nodeId)?.[thread] ?? 0];\n const visitPoints = /* @__PURE__ */ new WeakMap();\n const lanePointsOf = (segments, frame) => {\n if (!frame || !threaded) {\n return segments;\n }\n let points = visitPoints.get(frame.shifts);\n if (!points) {\n const { shifts } = frame;\n points = segments.map((p, i) => {\n const { dx, dy } = shifts[i] ?? NO_SHIFT;\n return { ...p, x: p.x + dx, y: p.y + dy };\n });\n visitPoints.set(frame.shifts, points);\n }\n return points;\n };\n const showArrows = scale > (linearLayout ? 1 : MIN_ARROW_SCALE);\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const edge = graph.edges[ei];\n const fromSegments = nodePositions[edge.from];\n const toSegments = nodePositions[edge.to];\n const baseCurves = sharedCurves.get(ei);\n if (!fromSegments?.length || !toSegments?.length || !baseCurves || hiddenEdges?.has(ei)) {\n continue;\n }\n const numPaths = edge.pathIds?.length ?? 0;\n const bypassed = deletions?.get(ei);\n const isDeletion = bypassed !== void 0;\n const onWalk = highlight?.edgeIndexes.has(ei) ?? false;\n const ribbonThickness = connectorThickness / 2 * (isDeletion ? DELETION_THICKNESS_FACTOR : 1);\n const walkFactor = edgeWidthFactor(numPaths, busiest, edgeWidth);\n const edgeThickness = connectorThickness / 2 * (!isDeletion ? walkFactor : edgeWidth === \"walks\" && busiest > 0 ? Math.max(1, walkFactor) : DELETION_THICKNESS_FACTOR);\n const ribbons = drawPaths && numPaths > 0;\n const plainEdgeColor = isDeletion ? EDGE_DELETION_COLOR : EDGE_DEFAULT_COLOR;\n const edgeColor = !highlight || onWalk ? plainEdgeColor : fadeAbgr(plainEdgeColor, FADED_ALPHA);\n const toNode = nodeById.get(edge.to);\n const intoHalfWidth = (toNode ? nodeWidthPx(toNode, contigThickness, nodeWidth, widthScale) : contigThickness) / 2;\n const inView = (curves) => !viewportBounds || isBezierInBounds(curves, viewportBounds);\n const dashesOf = (curves) => dashSpans(curves, DELETION_DASH_PX / scale, yToX, viewportBounds);\n const stroke = (curves, thickness, color) => {\n if (!isDeletion) {\n edgeCurves.push({ curves, thickness, color });\n return;\n }\n for (const dash of dashesOf(curves)) {\n edgeCurves.push({ curves: dash.curves, thickness, color });\n }\n };\n const laneStroke = (curves, thickness, color, walk, pass, normal2, offsetX, endNormal, endOffsetX) => {\n if (!isDeletion) {\n edgeCurves.push({\n curves,\n thickness,\n color,\n walk,\n pass,\n normal: normal2,\n offsetX,\n endNormal,\n endOffsetX\n });\n return;\n }\n const start = { normal: normal2, offsetX };\n const end = { normal: endNormal, offsetX: endOffsetX };\n for (const dash of dashesOf(curves)) {\n const a = dash.startAlong === 0 ? start : laneSlideAt(start, end, dash.startAlong);\n const b = dash.endAlong === 1 ? end : laneSlideAt(start, end, dash.endAlong);\n edgeCurves.push({\n curves: dash.curves,\n thickness,\n color,\n walk,\n pass,\n normal: a.normal,\n offsetX: a.offsetX,\n endNormal: b.normal,\n endOffsetX: b.offsetX\n });\n }\n };\n const arrowOn = (curves) => {\n const head = showArrows ? arrowheadFor({\n curves,\n edgeHalfWidth: isDeletion || ribbons ? connectorThickness / 2 : edgeThickness,\n nodeHalfWidth: intoHalfWidth,\n scale,\n yToX,\n color: edgeColor,\n fromSegments,\n toSegments\n }) : void 0;\n if (head) {\n arrows.push(head);\n }\n };\n const edgeCurveStart = edgeCurves.length;\n const arrowStart = arrows.length;\n const laneWalks = highlight?.walks.length && onWalk && !ribbons ? highlight.walks : void 0;\n if (laneWalks && !lanesMayShow(baseCurves, edge.from)) {\n continue;\n }\n if (laneWalks) {\n const fromAtStart = leavesStart(\n edge,\n fromSegments,\n baseCurves[0],\n stranded,\n yToX\n );\n const last = baseCurves.at(-1);\n const toAtStart = nearerStart(\n { x: last.x1, y: last.y1 },\n toSegments,\n yToX\n );\n const single = laneWalks.length === 1;\n const thickness = laneHalfWidth(laneWidthOf(edge.from));\n const fromFrames = lines?.frames.get(edge.from);\n const toFrames = lines?.frames.get(edge.to);\n for (let lane = 0; lane < laneWalks.length; lane++) {\n const walk = laneWalks[lane];\n if (!walk.edgeIndexes.has(ei)) {\n continue;\n }\n for (const [pass, toPass] of threadPairs(lane, edge.from, edge.to)) {\n const from = laneEndOf(\n edge.from,\n fromFrames,\n fromSegments,\n fromAtStart,\n lane,\n pass\n );\n const to = threaded ? laneEndOf(edge.to, toFrames, toSegments, toAtStart, lane, toPass) : from;\n const offsetX = single ? 0 : from.offset * worldPerScreenPx;\n const endOffsetX = threaded ? to.offset * worldPerScreenPx : offsetX;\n const curves = threaded ? slideCurves(\n baseCurves,\n from.shift.dx + from.normal.nx * offsetX,\n from.shift.dy + from.normal.ny * offsetX / yToX,\n to.shift.dx + to.normal.nx * endOffsetX,\n to.shift.dy + to.normal.ny * endOffsetX / yToX\n ) : offsetX === 0 ? baseCurves : translateCurves(\n baseCurves,\n from.normal.nx * offsetX,\n from.normal.ny * offsetX / yToX\n );\n if (inView(curves)) {\n laneStroke(\n curves,\n thickness,\n threadColor(lane, edge.from, pass) ?? threadColor(lane, edge.to, toPass) ?? plainEdgeColor,\n lane,\n pass,\n from.normal,\n offsetX,\n to.normal,\n endOffsetX\n );\n }\n }\n }\n if (edgeCurves.length > edgeCurveStart) {\n arrowOn(baseCurves);\n }\n } else if (!ribbons) {\n if (inView(baseCurves)) {\n stroke(baseCurves, edgeThickness, edgeColor);\n arrowOn(baseCurves);\n }\n } else {\n const offsets = pathRibbonOffsets(\n fromSegments,\n toSegments,\n numPaths,\n axis\n );\n const arrowRibbon = Math.floor((numPaths - 1) / 2);\n for (let pathIdx = 0; pathIdx < numPaths; pathIdx++) {\n const { x, y } = offsets[pathIdx];\n const curves = x === 0 && y === 0 ? baseCurves : translateCurves(baseCurves, x, y);\n if (!inView(curves)) {\n continue;\n }\n const ribbonColor = pathColorByName(edge.pathIds[pathIdx]);\n stroke(\n curves,\n ribbonThickness,\n highlight && (highlight.walks.length ? !highlight.names.has(edge.pathIds[pathIdx]) : !onWalk) ? fadeAbgr(ribbonColor, FADED_ALPHA) : ribbonColor\n );\n if (pathIdx === arrowRibbon) {\n arrowOn(curves);\n }\n }\n }\n const edgeCurveCount = edgeCurves.length - edgeCurveStart;\n if (edgeCurveCount > 0) {\n edgeCurveRuns.set(ei, { start: edgeCurveStart, count: edgeCurveCount });\n }\n const arrowCount = arrows.length - arrowStart;\n if (arrowCount > 0) {\n arrowRuns.set(ei, { start: arrowStart, count: arrowCount });\n }\n }\n for (const [nodeId, segments] of Object.entries(nodePositions)) {\n const node = nodeById.get(nodeId);\n if (!node) {\n continue;\n }\n if (viewportBounds && !isPolylineInBounds(segments, viewportBounds)) {\n continue;\n }\n const faded = highlight !== void 0 && !highlight.nodeIds.has(nodeId);\n const own = faded ? LIFT_BACKDROP_COLOR : getNodeColor(\n node,\n nodeIndexMap.get(nodeId) ?? 0,\n colorScheme,\n colorRange\n );\n const color = faded ? fadeAbgr(own, FADED_ALPHA) : own;\n const width = nodeWidthPx(node, contigThickness, nodeWidth, widthScale);\n const nodeThickness = width / 2;\n const start = nodeStrokes.length;\n const slots = nodePathSlots.get(nodeId);\n const slotWidth = width / pathCount;\n const drawable = segments.length >= 2;\n const lanes = highlight?.walks.length && !faded && !slots?.length ? highlight.walks : void 0;\n if (drawable && lanes) {\n const laneWidth = walkLaneWidthPx(width, lanes.length);\n const thickness = laneHalfWidth(laneWidth);\n const frames = lines?.frames.get(nodeId);\n for (let lane = 0; lane < lanes.length; lane++) {\n const laneColor = lanes[lane].colors.get(nodeId);\n if (laneColor === void 0) {\n continue;\n }\n const onThreads = threads?.[lane]?.nodeThreads.get(nodeId) ?? ONE_PASS;\n for (const pass of onThreads) {\n const color2 = threadColor(lane, nodeId, pass) ?? laneColor;\n if (lanes.length === 1) {\n nodeStrokes.push({\n points: segments,\n thickness,\n color: color2,\n walk: lane,\n pass\n });\n continue;\n }\n const frame = frames?.[lane]?.[visitOf(lane, nodeId, pass)];\n const normals = laneNormalsOf(nodeId, segments, frame);\n const points = lanePointsOf(segments, frame);\n const plain = laneOffset(nodeId, laneWidth, lane, pass);\n const offsets = frame?.offsets?.map(\n (o) => o * thinned * worldPerScreenPx\n );\n const offsetX = offsets ? offsets[Math.floor(offsets.length / 2)] : threadOffsetAt(frame, 0, plain) * worldPerScreenPx;\n nodeStrokes.push({\n points: offsetPolyline(points, normals, offsets ?? offsetX, yToX),\n thickness,\n color: color2,\n walk: lane,\n pass,\n normals,\n offsetX,\n ...offsets && { offsets }\n });\n }\n }\n } else if (drawable && slots?.length && slotWidth >= MIN_PATH_STRIPE_PX) {\n const normals = pointNormalsOf(segments, yToX);\n for (const slot of slots) {\n const offset = (slot - (pathCount - 1) / 2) * slotWidth * worldPerScreenPx;\n const stripe = pathColorByIndex[slot] ?? EDGE_PATH_FALLBACK_COLOR;\n nodeStrokes.push({\n points: offsetPolyline(segments, normals, offset, yToX),\n thickness: slotWidth / 2,\n // a node off the lifted walk fades whichever way it is painted\n color: faded ? fadeAbgr(stripe, FADED_ALPHA) : stripe\n });\n }\n } else if (drawable) {\n nodeStrokes.push({ points: segments, thickness: nodeThickness, color });\n }\n const count = nodeStrokes.length - start;\n if (count > 0) {\n nodeStrokeRuns.set(nodeId, { start, count });\n }\n }\n return {\n nodeStrokes,\n nodeStrokeRuns,\n arrows,\n arrowRuns,\n edgeCurves,\n edgeCurveRuns\n };\n}\n\nexport {\n LIFT_BACKDROP_COLOR,\n FADED_ALPHA,\n LIFT_BACKDROP_CSS,\n hslToRgb,\n REFERENCE_RAMP_ALT_COLOR,\n REFERENCE_RAMP_ALT_CSS,\n rampFraction,\n computeReferenceRamp,\n computeColorSchemeRange,\n getNodeColor,\n endTangent,\n buildGeometry\n};\n", "import {\n REFERENCE_RAMP_ALT_COLOR,\n hslToRgb\n} from \"./chunk-SI7X3PXX.js\";\nimport {\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n REFERENCE_RAMP_LIGHTNESS,\n REFERENCE_RAMP_SATURATION,\n rampHueAt\n} from \"./chunk-GQZVR5DW.js\";\n\n// src/walkEncoding.ts\nvar WALK_FIELDS = [\n { value: \"progress\", label: \"Progress along the walk\" },\n { value: \"walk\", label: \"One colour for the walk\" },\n { value: \"reference\", label: \"Reference position\" }\n];\nvar WALK_SCHEMES = [\n { value: \"grey\", label: \"Grey to black\", ends: [\"#a3a3a3\", \"#151515\"] },\n { value: \"blue\", label: \"Cyan to navy\", ends: [\"#6ee0f0\", \"#0b2c7a\"] },\n { value: \"red\", label: \"Yellow to red\", ends: [\"#ffd24a\", \"#b3121b\"] },\n { value: \"purple\", label: \"Pink to plum\", ends: [\"#f5a3d8\", \"#5e1a6e\"] },\n { value: \"green\", label: \"Lime to forest\", ends: [\"#b6e36c\", \"#0b5d3b\"] },\n { value: \"orange\", label: \"Peach to rust\", ends: [\"#ffc285\", \"#8f3a00\"] },\n { value: \"rainbow\", label: \"Rainbow\" }\n];\nvar FAMILIES = [\"blue\", \"red\", \"purple\", \"green\"];\nvar isField = (v) => WALK_FIELDS.some((f) => f.value === v);\nvar isScheme = (v) => WALK_SCHEMES.some((s) => s.value === v);\nfunction resolveEncoding(layer, reference, picked, alone = true) {\n const { field: askedField, scheme: askedScheme } = layer.color ?? {};\n const field = isField(askedField) ? askedField : alone ? \"progress\" : \"walk\";\n const family = reference ? \"grey\" : FAMILIES[picked % FAMILIES.length];\n const scheme = isScheme(askedScheme) ? askedScheme === \"rainbow\" && field !== \"reference\" ? family : askedScheme : family;\n const round = Math.floor(picked / FAMILIES.length) % SHADES.length;\n return field === \"walk\" && scheme === family && round > 0 ? { field, scheme, shade: SHADES[round] } : alone || field === \"walk\" ? { field, scheme } : { field, scheme, darkest: TOGETHER_DARKEST };\n}\nvar TOGETHER_DARKEST = 0.55;\nvar BASE_T = 0.5;\nvar SHADES = [BASE_T, 0.85, 0.2];\nvar STRETCH_GAP = 0.08;\nvar rampsOn = ({ field, scheme }) => field !== \"walk\" && scheme !== \"rainbow\";\nfunction splitFamilies(encodings) {\n const counts = /* @__PURE__ */ new Map();\n for (const e of encodings) {\n if (rampsOn(e)) {\n counts.set(e.scheme, (counts.get(e.scheme) ?? 0) + 1);\n }\n }\n const seen = /* @__PURE__ */ new Map();\n return encodings.map((e) => {\n const k = rampsOn(e) ? counts.get(e.scheme) : 1;\n if (k < 2) {\n return e;\n }\n const j = seen.get(e.scheme) ?? 0;\n seen.set(e.scheme, j + 1);\n const half = STRETCH_GAP / 2;\n return {\n ...e,\n stretch: [\n j / k + (j > 0 ? half : 0),\n (j + 1) / k - (j < k - 1 ? half : 0)\n ]\n };\n });\n}\nvar along = ({ stretch }, t) => stretch ? stretch[0] + (stretch[1] - stretch[0]) * t : t;\nvar toLinear = (c) => c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\nvar toGamma = (c) => c <= 31308e-7 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055;\nfunction oklab(hex) {\n const [r, g, b] = [1, 3, 5].map(\n (i) => toLinear(Number.parseInt(hex.slice(i, i + 2), 16) / 255)\n );\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\n return [\n 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n ];\n}\nfunction oklabToRgb([L, a, b]) {\n const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3;\n return [\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s\n ].map((c) => toGamma(Math.max(0, Math.min(1, c))) * 255);\n}\nvar endsCache = /* @__PURE__ */ new Map();\nfunction oklabEnds(scheme) {\n if (!endsCache.has(scheme)) {\n const family = WALK_SCHEMES.find((s) => s.value === scheme);\n endsCache.set(\n scheme,\n family && \"ends\" in family ? family.ends.map(oklab) : void 0\n );\n }\n return endsCache.get(scheme);\n}\nfunction schemeRgb(scheme, t, darkest = 0) {\n const x = Math.max(0, Math.min(1, t));\n const ends = oklabEnds(scheme);\n if (!ends) {\n return hslToRgb(\n rampHueAt(x),\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n ).map((c) => c * 255);\n }\n const [from, to] = ends;\n const light = from[0];\n const dark = to[0];\n const reach = dark < darkest && light > darkest ? (light - darkest) / (light - dark) : 1;\n return oklabToRgb(from.map((v, i) => v + (to[i] - v) * x * reach));\n}\nfunction schemeCss(scheme, t, darkest) {\n const [r, g, b] = schemeRgb(scheme, t, darkest).map(Math.round);\n return `rgb(${r}, ${g}, ${b})`;\n}\nfunction schemeColor(scheme, t, darkest) {\n const [r, g, b] = schemeRgb(scheme, t, darkest).map(Math.round);\n return packAbgr(r, g, b, 255);\n}\nfunction encodedColor(encoding, t) {\n const { field, scheme, darkest, shade = BASE_T } = encoding;\n return field === \"walk\" ? schemeColor(scheme, shade) : t === void 0 ? NO_VALUE_COLOR : schemeColor(scheme, along(encoding, t), darkest);\n}\nvar NO_VALUE_COLOR = REFERENCE_RAMP_ALT_COLOR;\nfunction encodingStops(encoding) {\n const { field, scheme, darkest, shade = BASE_T } = encoding;\n const stop = (offset, t) => ({\n offset,\n color: schemeCss(scheme, t, darkest),\n abgr: schemeColor(scheme, t, darkest)\n });\n return field === \"walk\" ? [stop(0, shade)] : Array.from({ length: 7 }, (_, i) => stop(i / 6, along(encoding, i / 6)));\n}\nfunction encodingSwatchCss(encoding) {\n const stops = encodingStops(encoding);\n return stops.length === 1 ? stops[0].color : `linear-gradient(to right, ${stops.map((s) => `${s.color} ${s.offset * 100}%`).join(\", \")})`;\n}\n\nexport {\n WALK_FIELDS,\n WALK_SCHEMES,\n resolveEncoding,\n splitFamilies,\n schemeRgb,\n schemeCss,\n schemeColor,\n encodedColor,\n NO_VALUE_COLOR,\n encodingStops,\n encodingSwatchCss\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["THREAD_PX", "THREAD_GAP_PX", "SLOT_GAP_PX", "LANE_SMOOTHING_PX", "THREAD_REACH_PX", "THREAD_TAPER_PX", "MAX_BAND_PX", "PASSES_KEY", "threadsPasses", "walks", "w", "threadsWidth", "threads", "sum", "values", "a", "b", "slotLayout", "spans", "mostPasses", "laneWidth", "widths", "m", "i", "seen", "gaps", "share", "gap", "THREAD_PITCH_PX", "slotCentres", "held", "band", "at", "width", "slack", "centre", "bandWidthPx", "bandScale", "passesKey", "laneSlideAt", "start", "end", "along", "vector", "normal", "offsetX2", "dx", "dy", "slideAt", "offsetX", "pointIndex", "run", "p", "k", "gapOf", "arcOf", "s", "walkSteps", "walkRoutes", "nodePositions", "routes", "visits", "route", "id", "visit", "segments", "owned", "laneRuns", "steps", "yToX", "jump", "runs", "pieces", "walk", "total", "piece", "xs", "ys", "from", "fresh", "breakRun", "stepOf", "x", "y", "first", "last", "forward", "toFirst", "toLast", "next", "toNext", "j", "ownedWindows", "margin", "windows", "floor", "lo", "hi", "smoothedNormals", "reach", "pointAt", "span", "f", "_", "back", "ahead", "len", "cutCurls", "close", "length", "out", "picks", "to", "j2", "q", "rounded", "half", "n", "sumW", "sumX", "sumY", "tightPoints", "line", "radius", "tight", "twice", "loosened", "t", "pass", "part", "local", "weight", "windowMean", "smoother", "runSigns", "own", "canonical", "settle", "agreement", "sum2", "decided", "pending", "theirs", "mine", "laneLines", "smooth", "turn", "curl", "context", "frames", "firsts", "arcs", "stepFrames", "newFrame", "place", "byWalk", "r", "ids", "starts", "raw", "firstRun", "firstStep", "firstFrame", "plus", "minus", "d", "shared", "reachFrom", "reachTo", "backward", "apart", "points", "normals", "sign", "index", "px", "py", "shift", "windowed", "v", "deque", "head", "counted", "sumWV", "ONE_THREAD", "repeats", "passes", "walkThreads", "stepVisits", "stepWants", "stepGlides", "nodes", "mid", "most", "copy", "before", "after", "wants", "glides", "nearest", "want", "taken", "threadOf", "free", "c", "glideOf", "glide", "nodeThreads", "threadPasses", "threadAt", "passOf", "thread", "linkThreads", "pair", "list", "bandSpans", "taper", "middle", "eased", "e", "easeOffsets", "plain", "byNode", "centresAt", "centres", "frame", "constant", "offsets", "liftLanes", "worldPerScreenPx", "threaded", "lines", "furthestShift", "seenShifts", "shifts", "packAbgr", "r", "g", "b", "a", "abgrRed", "c", "abgrGreen", "abgrBlue", "abgrAlpha", "abgrToCssRgba", "normalizedRgbToCssRgba", "alpha", "fadeAbgr", "brightenAbgr", "factor", "t", "lift", "v", "REFERENCE_RAMP_MAX_HUE", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "rampHueCss", "hue", "rampHueAt", "frac", "rampHue", "bp", "domain", "HUE_STOP_DEG", "rampStops", "start", "reversed", "low", "high", "n", "_", "RAMP_GRADIENT_STOPS", "i", "RAMP_GRADIENT_CSS", "s", "cache", "weakMemo", "baseEdgeCurves", "nodePositions", "graph", "axis", "deletions", "version", "routes", "stranded", "curves", "ei", "bypassed", "edgeCurves", "edgeCurvesOf", "MAX_BACKBONE_HOPS", "buildNeighbors", "graph", "neighbors", "edge", "pushTo", "flankingSpan", "nodeId", "nodeById", "seen", "frontier", "minEnd", "maxStart", "hop", "next", "id", "adjacent", "neighborId", "neighbor", "isBackbone", "nodeReferenceSpan", "node", "referenceMidpoints", "midpoints", "span", "EDGE_DEFAULT_COLOR", "packAbgr", "EDGE_PATH_FALLBACK_COLOR", "EDGE_DELETION_COLOR", "DELETION_THICKNESS_FACTOR", "LIFT_BACKDROP_COLOR", "FADED_ALPHA", "LIFT_BACKDROP_CSS", "abgrToCssRgba", "fadeAbgr", "DELETION_DASH_PX", "MIN_PATH_STRIPE_PX", "MIN_SCALE_FOR_OFFSET", "ARROW_LENGTH_BASE_PX", "ARROW_LENGTH_PER_EDGE_PX", "ARROW_HALF_WIDTH_BASE_PX", "ARROW_HALF_WIDTH_PER_EDGE_PX", "MIN_LINK_HEADS", "MIN_ARROW_FIT", "MIN_ARROW_SCALE", "ARROW_CURVE_STEPS", "ABUTTING_PX", "walkX", "walkY", "walkPx", "backFromEnd", "curves", "scale", "yToX", "untilPx", "most", "last", "n", "px", "ci", "c", "k", "t", "a", "b", "d", "e", "x", "y", "walkPointAt", "i", "from", "to", "f", "arrowheadFor", "edgeHalfWidth", "nodeHalfWidth", "color", "fromSegments", "toSegments", "length", "lengthPx", "abutting", "inset", "fit", "polylinePx", "tip", "base", "dx", "dy", "endTangent", "intoDirection", "FIRST_THREADS", "ONE_PASS", "NO_SHIFT", "nearerStart", "at", "segments", "gap", "p", "leavesStart", "edge", "first", "stranded", "strandSides", "final", "normal", "len", "MITRE_LIMIT", "LONGEST_NORMAL", "pointNormalsOf", "rawPoints", "points", "before", "after", "nx", "ny", "dot", "offsetPolyline", "normals", "distance", "out", "hslToRgb", "h", "s", "l", "m", "r", "g", "packHsl", "DEPTH_GRADIENT", "STABLE_RANK_GRADIENT", "NODE_LENGTH_GRADIENT", "sampleGradient", "stops", "pos", "hashColor", "str", "alpha", "nameHue", "PATH_SATURATION", "PATH_LIGHTNESS", "REFERENCE_RAMP_ALT_RGB", "REFERENCE_RAMP_ALT_COLOR", "REFERENCE_RAMP_ALT_CSS", "rampFraction", "node", "ramp", "mid", "isBackbone", "computeReferenceRamp", "graph", "domain", "midpoints", "referenceMidpoints", "min", "max", "computeColorSchemeRange", "referenceRamp", "minDepth", "maxDepth", "minLength", "maxLength", "maxRank", "getNodeColor", "nodeIndex", "colorScheme", "range", "rampHueAt", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "hue", "into", "candidates", "isPolylineInBounds", "bounds", "hit", "isBezierInBounds", "growX", "growY", "cMinX", "cMaxX", "cMinY", "cMaxY", "paletteCache", "pathPaletteOf", "palette", "pathColorByIndex", "pathIndexByName", "paths", "pathHueAt", "slotsCache", "NO_SLOTS", "pathSlotsOf", "slots", "pathIdx", "path", "nodeId", "pushTo", "lanesCache", "weakMemo", "stepsCache", "linksCache", "linksOf", "links", "buildGeometry", "options", "nodePositions", "nodeById", "contigThickness", "connectorThickness", "drawPaths", "nodeWidth", "edgeWidth", "highlight", "axis", "linearLayout", "viewportBounds", "deletions", "deletionRoutes", "hiddenEdges", "version", "widthScale", "widthNorm", "busiest", "busiestEdge", "worldPerScreenPx", "yToXOf", "sharedCurves", "baseEdgeCurves", "nodeStrokes", "nodeStrokeRuns", "arrows", "arrowRuns", "edgeCurves", "edgeCurveRuns", "colorRange", "nodeIndexMap", "pathCount", "pathColorByName", "name", "nodePathSlots", "liftedWalks", "threaded", "threadsPasses", "lanePasses", "w", "thinned", "bandScale", "fields", "liftLanes", "walkSteps", "lines", "threads", "spanField", "plainCentres", "slotCentres", "centresByNode", "centresOf", "centres", "spans", "laneOffset", "laneWidth", "lane", "pass", "THREAD_PITCH_PX", "threadOffsetAt", "frame", "fallback", "eased", "laneHalfWidth", "THREAD_PX", "plainNormals", "visitNormals", "visitOf", "thread", "plainNormalsOf", "laneNormalsOf", "laneWidths", "laneWidthOf", "id", "width", "walkLaneWidthPx", "nodeWidthPx", "laneEndOf", "frames", "atStart", "lanesMayShow", "fromId", "offset", "bandWidthPx", "reach", "threadPairs", "own", "ahead", "back", "turned", "threadColor", "visitPoints", "lanePointsOf", "shifts", "showArrows", "ei", "baseCurves", "numPaths", "isDeletion", "onWalk", "ribbonThickness", "walkFactor", "edgeWidthFactor", "edgeThickness", "ribbons", "plainEdgeColor", "edgeColor", "toNode", "intoHalfWidth", "inView", "dashesOf", "dashSpans", "stroke", "thickness", "dash", "laneStroke", "walk", "normal2", "offsetX", "endNormal", "endOffsetX", "start", "end", "laneSlideAt", "arrowOn", "head", "edgeCurveStart", "arrowStart", "laneWalks", "fromAtStart", "toAtStart", "single", "fromFrames", "toFrames", "toPass", "slideCurves", "translateCurves", "offsets", "pathRibbonOffsets", "arrowRibbon", "ribbonColor", "edgeCurveCount", "arrowCount", "faded", "nodeThickness", "slotWidth", "drawable", "lanes", "laneColor", "onThreads", "color2", "plain", "o", "slot", "stripe", "count", "WALK_FIELDS", "WALK_SCHEMES", "FAMILIES", "isField", "v", "f", "isScheme", "s", "resolveEncoding", "layer", "reference", "picked", "alone", "askedField", "askedScheme", "field", "family", "scheme", "round", "SHADES", "TOGETHER_DARKEST", "BASE_T", "STRETCH_GAP", "rampsOn", "splitFamilies", "encodings", "counts", "e", "seen", "k", "j", "half", "along", "stretch", "t", "toLinear", "c", "toGamma", "oklab", "hex", "r", "g", "b", "i", "l", "m", "oklabToRgb", "L", "a", "endsCache", "oklabEnds", "schemeRgb", "darkest", "x", "ends", "hslToRgb", "rampHueAt", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "from", "to", "light", "dark", "reach", "schemeCss", "schemeColor", "packAbgr", "encodedColor", "encoding", "shade", "NO_VALUE_COLOR", "REFERENCE_RAMP_ALT_COLOR", "encodingStops", "stop", "offset", "_"]
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-YUIKEUKY.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-G2FD7S3C.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-GQZVR5DW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ZENC2BJH.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-L4DBSRA2.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-DCE56GIC.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.1.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-F6KKQIX7.js"],
|
|
4
|
+
"sourcesContent": ["import {\n slideAt\n} from \"./chunk-JJV2GT2Z.js\";\n\n// src/renderer/walkLanes.ts\nvar THREAD_PX = 2;\nvar THREAD_GAP_PX = 1.5;\nvar SLOT_GAP_PX = 4;\nvar LANE_SMOOTHING_PX = 12;\nvar THREAD_REACH_PX = 64;\nvar THREAD_TAPER_PX = 24;\nvar MAX_BAND_PX = 48;\nvar PASSES_KEY = \"a thread per pass through a node\";\nvar threadsPasses = (walks) => walks.length > 1 && walks.some((w) => w.mostPasses > 1);\nvar threadsWidth = (threads) => threads * THREAD_PX + Math.max(0, threads - 1) * THREAD_GAP_PX;\nvar sum = (values) => values.reduce((a, b) => a + b, 0);\nfunction slotLayout(spans, mostPasses, laneWidth) {\n const widths = spans.map(\n (m, i) => mostPasses[i] > 1 ? threadsWidth(m) : laneWidth * Math.min(1, m)\n );\n let seen = 0;\n const gaps = spans.map((m) => {\n const share = Math.min(1, m);\n const gap = SLOT_GAP_PX * share * seen;\n seen = Math.max(seen, share);\n return gap;\n });\n return { widths, gaps, band: sum(widths) + sum(gaps) };\n}\nvar THREAD_PITCH_PX = THREAD_PX + THREAD_GAP_PX;\nfunction slotCentres(spans, mostPasses, held = spans) {\n const { widths, gaps, band } = slotLayout(spans, mostPasses, THREAD_PX);\n let at = -band / 2;\n return widths.map((width, i) => {\n at += gaps[i];\n const slack = mostPasses[i] > 1 ? Math.max(0, width - threadsWidth(held[i])) : 0;\n const centre = at + slack / 2 + THREAD_PX / 2;\n at += width;\n return centre;\n });\n}\nvar bandWidthPx = (mostPasses) => slotLayout(mostPasses, mostPasses, THREAD_PX).band;\nvar bandScale = (mostPasses) => Math.min(1, MAX_BAND_PX / (bandWidthPx(mostPasses) || 1));\nvar passesKey = (walks) => bandScale(walks.map((w) => w.mostPasses)) < 1 ? `${PASSES_KEY}, thinned to fit` : PASSES_KEY;\nfunction laneSlideAt(start, end, along) {\n const vector = ({ normal, offsetX: offsetX2 }) => ({\n dx: normal.nx * offsetX2,\n dy: normal.ny * offsetX2\n });\n const { dx, dy } = slideAt(vector(start), vector(end), along);\n const offsetX = Math.hypot(dx, dy);\n return offsetX > 0 ? { normal: { nx: dx / offsetX, ny: dy / offsetX }, offsetX } : { normal: { nx: 0, ny: 0 }, offsetX: 0 };\n}\nfunction pointIndex(run, p) {\n const i = run.stepOf[p];\n const k = p - run.starts[i];\n return run.forward[i] ? k : run.starts[i + 1] - run.starts[i] - 1 - k;\n}\nvar gapOf = (a, b) => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return Math.sqrt(dx * dx + dy * dy);\n};\nfunction arcOf(run) {\n const s = new Float64Array(run.length);\n for (let i = 1; i < run.length; i++) {\n s[i] = s[i - 1] + gapOf(run[i - 1], run[i]);\n }\n return s;\n}\nfunction walkSteps(walkRoutes, nodePositions) {\n const seen = /* @__PURE__ */ new Set();\n return walkRoutes.map((routes) => {\n const visits = /* @__PURE__ */ new Map();\n return routes.map(\n (route) => route.map((id) => {\n const visit = visits.get(id) ?? 0;\n visits.set(id, visit + 1);\n const segments = nodePositions[id];\n const owned = !!segments?.length && !seen.has(id);\n if (owned) {\n seen.add(id);\n }\n return { id, visit, owned, segments };\n })\n );\n });\n}\nfunction laneRuns(steps, yToX, jump) {\n const runs = [];\n steps.forEach((pieces, walk) => {\n let total = 0;\n for (const piece of pieces) {\n for (const { segments } of piece) {\n total += segments?.length ?? 0;\n }\n }\n const xs = new Float64Array(total);\n const ys = new Float64Array(total);\n let at = 0;\n let from = 0;\n let run = fresh();\n function fresh() {\n return {\n walk,\n ids: [],\n visits: [],\n forward: [],\n owned: [],\n starts: [0]\n };\n }\n const breakRun = () => {\n if (run.ids.length) {\n const stepOf = new Int32Array(at - from);\n for (let i = 0; i < run.ids.length; i++) {\n stepOf.fill(i, run.starts[i], run.starts[i + 1]);\n }\n runs.push({\n ...run,\n xs: xs.subarray(from, at),\n ys: ys.subarray(from, at),\n stepOf\n });\n }\n run = fresh();\n from = at;\n };\n const gap = (x, y, p) => {\n const dx = p.x - x;\n const dy = p.y * yToX - y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n for (const piece of pieces) {\n piece.forEach(({ id, visit, owned, segments }, k) => {\n if (!segments?.length) {\n breakRun();\n return;\n }\n const first = segments[0];\n const last = segments.at(-1);\n let forward;\n if (at > from) {\n const x = xs[at - 1];\n const y = ys[at - 1];\n const toFirst = gap(x, y, first);\n const toLast = gap(x, y, last);\n forward = toFirst <= toLast;\n if (Math.min(toFirst, toLast) > jump) {\n breakRun();\n }\n } else {\n const next = piece[k + 1]?.segments;\n const toNext = (p) => next?.length ? Math.min(\n gap(p.x, p.y * yToX, next[0]),\n gap(p.x, p.y * yToX, next.at(-1))\n ) : 0;\n forward = toNext(last) <= toNext(first);\n }\n run.ids.push(id);\n run.visits.push(visit);\n run.forward.push(forward);\n run.owned.push(owned);\n for (let j = 0; j < segments.length; j++) {\n const p = segments[forward ? j : segments.length - 1 - j];\n xs[at] = p.x;\n ys[at] = p.y * yToX;\n at++;\n }\n run.starts.push(at - from);\n });\n breakRun();\n }\n });\n return runs;\n}\nfunction ownedWindows(s, owned, margin) {\n const windows = [];\n for (let i = 0; i < owned.length; i++) {\n if (!owned[i]) {\n continue;\n }\n let j = i;\n while (j + 1 < owned.length && owned[j + 1]) {\n j++;\n }\n const last = windows.at(-1);\n const floor = last ? last[1] : 0;\n let lo = i;\n while (lo > floor && s[i] - s[lo - 1] <= margin) {\n lo--;\n }\n let hi = j;\n while (hi + 1 < s.length && s[hi + 1] - s[j] <= margin) {\n hi++;\n }\n if (last && lo <= last[1] + 1) {\n last[1] = hi;\n } else {\n windows.push([lo, hi]);\n }\n i = j;\n }\n return windows;\n}\nfunction smoothedNormals(run, reach) {\n const s = arcOf(run);\n const end = s.at(-1);\n const pointAt = (at, j) => {\n const a = run[j];\n const b = run[Math.min(j + 1, run.length - 1)];\n const span = s[Math.min(j + 1, run.length - 1)] - s[j];\n const f = span > 0 ? (at - s[j]) / span : 0;\n return { x: a.x + (b.x - a.x) * f, y: a.y + (b.y - a.y) * f };\n };\n let lo = 0;\n let hi = 0;\n return run.map((_, i) => {\n const back = Math.max(0, s[i] - reach / 2);\n const ahead = Math.min(end, s[i] + reach / 2);\n while (lo < run.length - 1 && s[lo + 1] <= back) {\n lo++;\n }\n while (hi < run.length - 1 && s[hi + 1] <= ahead) {\n hi++;\n }\n const a = pointAt(back, lo);\n const b = pointAt(ahead, hi);\n const len = gapOf(a, b);\n return len > 0 ? { nx: -(b.y - a.y) / len, ny: (b.x - a.x) / len } : void 0;\n });\n}\nfunction cutCurls(run, close, length) {\n const s = arcOf(run);\n const out = run.slice();\n const picks = [];\n s.forEach((at, k) => {\n const last = picks.at(-1);\n if (last === void 0 || at - s[last] >= close / 4) {\n picks.push(k);\n }\n });\n if (picks.at(-1) !== run.length - 1) {\n picks.push(run.length - 1);\n }\n let a = 0;\n while (a < picks.length) {\n const i = picks[a];\n let to = -1;\n for (let b = a + 1; b < picks.length && s[picks[b]] - s[i] <= length; b++) {\n const j2 = picks[b];\n if (s[j2] - s[i] > Math.PI * close && gapOf(run[i], run[j2]) <= close) {\n to = b;\n }\n }\n if (to < 0) {\n a++;\n continue;\n }\n const j = picks[to];\n const p = run[i];\n const q = run[j];\n for (let k = i + 1; k < j; k++) {\n const f = (s[k] - s[i]) / (s[j] - s[i]);\n out[k] = {\n ...run[k],\n x: p.x + (q.x - p.x) * f,\n y: p.y + (q.y - p.y) * f\n };\n }\n a = to;\n }\n return out;\n}\nfunction rounded(run, half) {\n const n = run.length;\n const s = arcOf(run);\n const end = s[n - 1];\n const sumW = new Float64Array(n + 1);\n const sumX = new Float64Array(n + 1);\n const sumY = new Float64Array(n + 1);\n for (let i = 0; i < n; i++) {\n const p = run[i];\n const w = (s[Math.min(i + 1, n - 1)] - s[Math.max(i - 1, 0)]) / 2;\n sumW[i + 1] = sumW[i] + w;\n sumX[i + 1] = sumX[i] + w * p.x;\n sumY[i + 1] = sumY[i] + w * p.y;\n }\n const out = new Array(n);\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n const p = run[i];\n const reach = Math.min(half, s[i], end - s[i]);\n const from = s[i] - reach;\n const to = s[i] + reach + 1e-9 * (1 + end);\n while (lo < n && s[lo] < from) {\n lo++;\n }\n while (hi < n && s[hi] < to) {\n hi++;\n }\n const w = sumW[hi] - sumW[lo];\n out[i] = w > 0 ? { x: (sumX[hi] - sumX[lo]) / w, y: (sumY[hi] - sumY[lo]) / w } : { x: p.x, y: p.y };\n }\n return out;\n}\nfunction tightPoints(line, radius) {\n const n = line.length;\n const s = arcOf(line);\n const end = s[n - 1];\n const tight = new Uint8Array(n);\n const along = (j, at) => {\n const a = line[j];\n const b = line[j + 1];\n if (!b) {\n return a;\n }\n const span = s[j + 1] - s[j];\n const f = span > 0 ? (at - s[j]) / span : 0;\n return { x: a.x + (b.x - a.x) * f, y: a.y + (b.y - a.y) * f };\n };\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n if (s[i] < radius || end - s[i] < radius) {\n continue;\n }\n while (lo + 1 < n && s[lo + 1] <= s[i] - radius) {\n lo++;\n }\n while (hi + 1 < n && s[hi + 1] <= s[i] + radius) {\n hi++;\n }\n const p = line[i];\n const a = along(lo, s[i] - radius);\n const b = along(hi, s[i] + radius);\n const twice = Math.abs(\n (b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x)\n );\n tight[i] = twice > 0 && gapOf(a, b) * gapOf(a, p) * gapOf(p, b) / (2 * twice) < radius ? 1 : 0;\n }\n return { tight, s };\n}\nfunction loosened(line, radius) {\n const out = line.slice();\n const { tight, s } = tightPoints(out, radius);\n let windows = ownedWindows(\n s,\n Array.from(tight, (t) => t > 0),\n 3 * radius\n );\n for (let pass = 0; pass < 8 && windows.length; pass++) {\n windows = windows.filter(([lo, hi]) => {\n const part = out.slice(lo, hi + 1);\n const local = tightPoints(part, radius);\n if (!local.tight.includes(1)) {\n return false;\n }\n const weight = windowMean(local.s, local.tight, radius);\n const smoother = rounded(part, radius);\n for (let k = 0; k < part.length; k++) {\n const w = Math.min(1, 3 * weight[k]);\n if (w > 0) {\n const p = part[k];\n const q = smoother[k];\n out[lo + k] = { x: p.x + (q.x - p.x) * w, y: p.y + (q.y - p.y) * w };\n }\n }\n return true;\n });\n }\n return out;\n}\nfunction runSigns(s, own, canonical, forward, settle, half) {\n const n = own.length;\n const agreement = new Float64Array(n);\n let hi = 0;\n let lo = 0;\n let sum2 = 0;\n let decided = 0;\n let pending = 0;\n for (let i = 0; i < n; i++) {\n while (hi < n && s[hi] - s[i] <= half) {\n const theirs = canonical(hi);\n const mine = own[hi];\n agreement[hi] = theirs && mine ? theirs.nx * mine.nx + theirs.ny * mine.ny : 0;\n sum2 += agreement[hi];\n hi++;\n }\n while (s[i] - s[lo] > half) {\n sum2 -= agreement[lo++];\n }\n if (Math.abs(sum2) > 1e-9) {\n decided = sum2 < 0 ? -1 : 1;\n }\n if (!decided) {\n continue;\n }\n for (; pending <= i; pending++) {\n settle(pending, decided);\n }\n }\n if (pending < n) {\n let along = 0;\n for (let k = 0; k < n; k++) {\n along += forward(k) ? 1 : -1;\n }\n for (; pending < n; pending++) {\n settle(pending, along < 0 ? -1 : 1);\n }\n }\n}\nfunction laneLines(runs, yToX, reach, band, smooth = true) {\n const turn = Math.max(reach, 2 * band);\n const curl = Math.PI * band;\n const context = smooth ? curl + 3 * band + turn / 2 : turn / 2;\n const frames = /* @__PURE__ */ new Map();\n const firsts = /* @__PURE__ */ new Map();\n const arcs = [];\n const stepFrames = [];\n const newFrame = (length) => ({\n normals: new Array(length),\n shifts: smooth ? new Array(length) : []\n });\n const place = (id, walk, visit, f) => {\n let byWalk = frames.get(id);\n if (!byWalk) {\n byWalk = [];\n frames.set(id, byWalk);\n }\n ;\n (byWalk[walk] ??= [])[visit] = f;\n };\n runs.forEach((run, r) => {\n const { walk, ids, visits, owned, starts, xs, ys, stepOf } = run;\n const steps = ids.length;\n const n = xs.length;\n const own = new Array(steps);\n for (let i = 0; i < steps; i++) {\n if (owned[i]) {\n own[i] = newFrame(starts[i + 1] - starts[i]);\n firsts.set(ids[i], { run: r, step: i, frame: own[i] });\n place(ids[i], walk, visits[i], own[i]);\n }\n }\n const raw = new Float64Array(n);\n for (let p = 1; p < n; p++) {\n const dx = xs[p] - xs[p - 1];\n const dy = ys[p] - ys[p - 1];\n raw[p] = raw[p - 1] + Math.sqrt(dx * dx + dy * dy);\n }\n const end = raw[n - 1];\n const firstRun = new Int32Array(steps).fill(-1);\n const firstStep = new Int32Array(steps);\n const firstFrame = new Array(steps);\n for (let i = 0; i < steps; i++) {\n const first = owned[i] ? void 0 : firsts.get(ids[i]);\n if (first) {\n firstRun[i] = first.run;\n firstStep[i] = first.step;\n firstFrame[i] = first.frame;\n }\n }\n const plus = new Int32Array(steps);\n const minus = new Int32Array(steps);\n for (let i = 0; i + 1 < steps; i++) {\n const same = firstRun[i] >= 0 && firstRun[i + 1] === firstRun[i];\n const d = same ? firstStep[i + 1] - firstStep[i] : 0;\n plus[i + 1] = plus[i] + (d === 1 ? 1 : 0);\n minus[i + 1] = minus[i] + (d === -1 ? 1 : 0);\n }\n const shared = new Array(steps);\n let reachFrom = 0;\n let reachTo = 0;\n for (let i = 0; i < steps; i++) {\n if (!smooth) {\n shared[i] = !owned[i];\n continue;\n }\n const from = raw[starts[i]] - context;\n const to = raw[starts[i + 1] - 1] + context;\n while (raw[reachFrom] < from) {\n reachFrom++;\n }\n while (reachTo + 1 < n && raw[reachTo + 1] <= to) {\n reachTo++;\n }\n const lo = stepOf[Math.max(0, reachFrom - 1)];\n const hi = stepOf[Math.min(n - 1, reachTo + 1)];\n const span = hi - lo;\n const forward = plus[hi] - plus[lo];\n const backward = minus[hi] - minus[lo];\n shared[i] = !owned[i] && from >= 0 && to <= end && span > 0 && (forward === span || backward === span);\n }\n for (let i = 0; i < steps; i++) {\n if (owned[i]) {\n continue;\n }\n const first = firstFrame[i];\n own[i] = !smooth && shared[i] ? first : shared[i] ? { normals: first.normals, shifts: first.shifts } : newFrame(first.normals.length);\n place(ids[i], walk, visits[i], own[i]);\n }\n stepFrames.push(own);\n const apart = new Array(n);\n for (let p = 0; p < n; p++) {\n apart[p] = !shared[stepOf[p]];\n }\n for (const [from, to] of ownedWindows(raw, apart, context)) {\n const points = [];\n for (let p = from; p <= to; p++) {\n points.push({ x: xs[p], y: ys[p] });\n }\n const line = smooth ? loosened(\n rounded(cutCurls(points, band / 2, curl), band / 2),\n band / 2\n ) : points;\n const normals = smoothedNormals(line, turn);\n runSigns(\n arcOf(line),\n normals,\n (k) => {\n const i = stepOf[from + k];\n return (owned[i] ? own[i] : firstFrame[i])?.normals[pointIndex(run, from + k)];\n },\n (k) => run.forward[stepOf[from + k]],\n (k, sign) => {\n const p = from + k;\n const i = stepOf[p];\n if (shared[i]) {\n return;\n }\n const index = pointIndex(run, p);\n const m = normals[k];\n own[i].normals[index] = m && (sign > 0 ? m : { nx: -m.nx, ny: -m.ny });\n if (smooth) {\n own[i].shifts[index] = {\n dx: line[k].x - points[k].x,\n dy: (line[k].y - points[k].y) / yToX\n };\n }\n },\n turn\n );\n }\n if (!smooth) {\n arcs.push(raw);\n return;\n }\n const s = new Float64Array(n);\n let px = 0;\n let py = 0;\n for (let p = 0; p < n; p++) {\n const shift = own[stepOf[p]].shifts[pointIndex(run, p)];\n const x = xs[p] + (shift?.dx ?? 0);\n const y = ys[p] + (shift?.dy ?? 0) * yToX;\n s[p] = p ? s[p - 1] + Math.sqrt((x - px) ** 2 + (y - py) ** 2) : 0;\n px = x;\n py = y;\n }\n arcs.push(s);\n });\n return { frames, arcs, stepFrames };\n}\nfunction windowed(s, v, half, sign) {\n const out = new Array(v.length);\n const deque = [];\n let head = 0;\n let next = 0;\n for (let i = 0; i < v.length; i++) {\n while (next < v.length && s[next] - s[i] <= half) {\n while (deque.length > head && sign * v[deque.at(-1)] <= sign * v[next]) {\n deque.pop();\n }\n deque.push(next++);\n }\n while (s[i] - s[deque[head]] > half) {\n head++;\n }\n out[i] = v[deque[head]];\n }\n return out;\n}\nfunction windowMean(s, v, half, counted = () => true) {\n const n = v.length;\n const sumW = new Float64Array(n + 1);\n const sumWV = new Float64Array(n + 1);\n for (let i = 0; i < n; i++) {\n const w = !counted(v[i]) ? 0 : n > 1 ? (s[Math.min(i + 1, n - 1)] - s[Math.max(i - 1, 0)]) / 2 : 1;\n sumW[i + 1] = sumW[i] + w;\n sumWV[i + 1] = sumWV[i] + w * v[i];\n }\n const out = new Float64Array(n);\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n while (s[i] - s[lo] > half) {\n lo++;\n }\n while (hi < n && s[hi] - s[i] <= half) {\n hi++;\n }\n const w = sumW[hi] - sumW[lo];\n out[i] = w > 0 ? (sumWV[hi] - sumWV[lo]) / w : v[i];\n }\n return out;\n}\nvar ONE_THREAD = [0];\nfunction repeats(passes) {\n for (const p of passes.values()) {\n if (p > 1) {\n return true;\n }\n }\n return false;\n}\nfunction walkThreads(route, passes, nodePositions, yToX, reach) {\n if (!repeats(passes)) {\n return {\n span: passes,\n nodeThreads: /* @__PURE__ */ new Map(),\n threadPasses: /* @__PURE__ */ new Map(),\n threadAt: /* @__PURE__ */ new Map(),\n linkThreads: /* @__PURE__ */ new Map()\n };\n }\n const index = /* @__PURE__ */ new Map();\n const ids = [];\n const widths = [];\n const visits = [];\n const steps = [];\n const stepVisits = [];\n const stepWants = [];\n const stepGlides = [];\n for (const piece of route) {\n const points = [];\n const nodes = [];\n for (const id of piece) {\n let k = index.get(id);\n if (k === void 0) {\n k = ids.length;\n index.set(id, k);\n ids.push(id);\n widths.push(0);\n visits.push(0);\n }\n nodes.push(k);\n const segments = nodePositions[id];\n const mid = segments?.[Math.floor(segments.length / 2)];\n points.push(\n mid ? { x: mid.x, y: mid.y * yToX } : points.at(-1) ?? { x: 0, y: 0 }\n );\n }\n const s = arcOf(points);\n const p = piece.map((id) => passes.get(id) ?? 1);\n const most = windowed(s, p, reach / 2, 1);\n const copy = nodes.map((k) => ++visits[k]);\n const n = piece.length;\n const before = new Int32Array(n);\n let last = -1;\n for (let i = 0; i < n; i++) {\n last = p[i] === most[i] ? i : last;\n before[i] = last;\n }\n const after = new Int32Array(n);\n last = -1;\n for (let i = n - 1; i >= 0; i--) {\n last = p[i] === most[i] ? i : last;\n after[i] = last;\n }\n const wants = new Array(n);\n const glides = new Array(n).fill(NaN);\n for (let i = 0; i < n; i++) {\n const b = before[i];\n const a = after[i];\n const nearest = b < 0 ? a : a < 0 ? b : s[i] - s[b] <= s[a] - s[i] ? b : a;\n const want = (k) => Math.min(copy[k], most[i]) - 1;\n wants[i] = want(nearest);\n if (p[i] === 1 && b >= 0 && a >= 0 && want(a) !== want(b)) {\n const f = (s[i] - s[b]) / (s[a] - s[b] || 1);\n glides[i] = want(b) + (want(a) - want(b)) * f;\n }\n widths[nodes[i]] = Math.max(widths[nodes[i]], most[i]);\n }\n steps.push(nodes);\n stepVisits.push(copy);\n stepWants.push(wants);\n stepGlides.push(glides);\n }\n const taken = [];\n const threadOf = [];\n const free = (k, want) => {\n const width = widths[k];\n const own = taken[k] ??= /* @__PURE__ */ new Set();\n for (let d = 0; d < width; d++) {\n for (const c of [want - d, want + d]) {\n if (c >= 0 && c < width && !own.has(c)) {\n return c;\n }\n }\n }\n return want;\n };\n const glideOf = [];\n steps.forEach((nodes, piece) => {\n nodes.forEach((k, i) => {\n if (widths[k] > 1) {\n const glide = stepGlides[piece][i];\n const t = free(\n k,\n Number.isNaN(glide) ? stepWants[piece][i] : Math.round(glide)\n );\n taken[k].add(t);\n (threadOf[k] ??= [])[stepVisits[piece][i]] = t;\n if (!Number.isNaN(glide)) {\n ;\n (glideOf[k] ??= [])[t] = glide;\n }\n }\n });\n });\n const span = /* @__PURE__ */ new Map();\n const nodeThreads = /* @__PURE__ */ new Map();\n const threadPasses = /* @__PURE__ */ new Map();\n const threadAt = /* @__PURE__ */ new Map();\n ids.forEach((id, k) => {\n if (glideOf[k]) {\n threadAt.set(id, glideOf[k]);\n }\n span.set(id, widths[k]);\n nodeThreads.set(\n id,\n taken[k] ? [...taken[k]].sort((a, b) => a - b) : ONE_THREAD\n );\n const passOf = [];\n threadOf[k]?.forEach((thread, visit) => {\n passOf[thread] = visit - 1;\n });\n threadPasses.set(id, passOf);\n });\n const linkThreads = /* @__PURE__ */ new Map();\n steps.forEach((nodes, piece) => {\n const visit = stepVisits[piece];\n for (let i = 1; i < nodes.length; i++) {\n const from = nodes[i - 1];\n const to = nodes[i];\n const pair = [\n threadOf[from]?.[visit[i - 1]] ?? 0,\n threadOf[to]?.[visit[i]] ?? 0\n ];\n let ahead = linkThreads.get(ids[from]);\n if (!ahead) {\n ahead = /* @__PURE__ */ new Map();\n linkThreads.set(ids[from], ahead);\n }\n const list = ahead.get(ids[to]);\n if (!list) {\n ahead.set(ids[to], [pair]);\n } else if (!list.some(([a, b]) => a === pair[0] && b === pair[1])) {\n list.push(pair);\n }\n }\n });\n return { span, nodeThreads, threadPasses, threadAt, linkThreads };\n}\nfunction bandSpans(runs, arcs, spans, { reach, taper }) {\n const out = /* @__PURE__ */ new Map();\n runs.forEach((run, r) => {\n const s = arcs[r];\n const along = run.ids.map((_, i) => {\n const length = run.starts[i + 1] - run.starts[i];\n const middle = Math.floor(length / 2);\n return s[run.starts[i] + (run.forward[i] ? middle : length - 1 - middle)];\n });\n for (const [lo, hi] of ownedWindows(\n along,\n run.owned,\n reach / 2 + taper / 2\n )) {\n const at = along.slice(lo, hi + 1);\n const ids = run.ids.slice(lo, hi + 1);\n const eased = spans.map((own) => {\n const raw = ids.map((id) => own.get(id) ?? 0);\n return raw.every((v) => v === raw[0]) ? { slot: raw, held: raw } : {\n slot: windowMean(at, windowed(at, raw, reach / 2, 1), taper / 2),\n held: windowMean(at, raw, taper / 2, (v) => v > 0)\n };\n });\n ids.forEach((id, i) => {\n if (run.owned[lo + i]) {\n out.set(id, {\n slot: eased.map((e) => e.slot[i]),\n held: eased.map((e) => e.held[i])\n });\n }\n });\n }\n });\n return out;\n}\nfunction easeOffsets(runs, stepFrames, arcs, spans, passes, threads, half) {\n const plain = slotCentres(passes, passes);\n const byNode = /* @__PURE__ */ new Map();\n const centresAt = (id) => {\n let centres = byNode.get(id);\n if (!centres) {\n const own = spans.get(id);\n centres = own ? slotCentres(own.slot, passes, own.held) : plain;\n byNode.set(id, centres);\n }\n return centres;\n };\n runs.forEach((run, r) => {\n const { walk, ids, visits, starts } = run;\n const { threadPasses, threadAt } = threads[walk];\n const raw = new Float64Array(run.xs.length);\n ids.forEach((id, i) => {\n const thread = Math.max(0, threadPasses.get(id)?.indexOf(visits[i]) ?? 0);\n const place = threadAt.get(id)?.[thread] ?? thread;\n raw.fill(\n centresAt(id)[walk] + place * THREAD_PITCH_PX,\n starts[i],\n starts[i + 1]\n );\n });\n const eased = windowMean(arcs[r], raw, half);\n stepFrames[r].forEach((frame, i) => {\n const from = starts[i];\n const to = starts[i + 1];\n let constant = true;\n for (let p = from + 1; constant && p < to; p++) {\n constant = Math.abs(eased[p] - eased[from]) < 1e-9;\n }\n if (constant) {\n frame.offset = eased[from];\n return;\n }\n const offsets = new Array(to - from);\n for (let p = from; p < to; p++) {\n offsets[pointIndex(run, p)] = eased[p];\n }\n frame.offsets = offsets;\n });\n });\n}\nfunction liftLanes(walks, nodePositions, yToX, worldPerScreenPx, steps = walkSteps(\n walks.map((w) => w.route),\n nodePositions\n)) {\n const threaded = threadsPasses(walks);\n const passes = walks.map((w) => w.mostPasses);\n const reach = THREAD_REACH_PX * worldPerScreenPx;\n const runs = laneRuns(steps, yToX, LANE_SMOOTHING_PX * worldPerScreenPx);\n const band = bandWidthPx(passes) * (threaded ? bandScale(passes) : 1) * worldPerScreenPx;\n const lines = laneLines(\n runs,\n yToX,\n LANE_SMOOTHING_PX * worldPerScreenPx,\n band,\n threaded\n );\n const threads = threaded ? walks.map((w) => walkThreads(w.route, w.passes, nodePositions, yToX, reach)) : void 0;\n const spans = threads ? bandSpans(\n runs,\n lines.arcs,\n threads.map((t) => t.span),\n { reach, taper: THREAD_TAPER_PX * worldPerScreenPx }\n ) : void 0;\n if (spans && threads) {\n easeOffsets(\n runs,\n lines.stepFrames,\n lines.arcs,\n spans,\n passes,\n threads,\n THREAD_TAPER_PX / 2 * worldPerScreenPx\n );\n }\n const furthestShift = { dx: 0, dy: 0 };\n const seenShifts = /* @__PURE__ */ new Set();\n for (const byWalk of lines.frames.values()) {\n for (const { shifts } of byWalk.flat()) {\n if (seenShifts.has(shifts)) {\n continue;\n }\n seenShifts.add(shifts);\n for (const shift of shifts) {\n furthestShift.dx = Math.max(furthestShift.dx, Math.abs(shift?.dx ?? 0));\n furthestShift.dy = Math.max(furthestShift.dy, Math.abs(shift?.dy ?? 0));\n }\n }\n }\n return { lines, threads, spans, furthestShift };\n}\n\nexport {\n THREAD_PX,\n THREAD_GAP_PX,\n SLOT_GAP_PX,\n LANE_SMOOTHING_PX,\n THREAD_REACH_PX,\n THREAD_TAPER_PX,\n MAX_BAND_PX,\n PASSES_KEY,\n threadsPasses,\n THREAD_PITCH_PX,\n slotCentres,\n bandWidthPx,\n bandScale,\n passesKey,\n laneSlideAt,\n walkSteps,\n laneRuns,\n laneLines,\n walkThreads,\n bandSpans,\n liftLanes\n};\n", "// src/renderer/colorBits.ts\nfunction packAbgr(r, g, b, a) {\n return (a << 24 | b << 16 | g << 8 | r) >>> 0;\n}\nfunction abgrRed(c) {\n return c & 255;\n}\nfunction abgrGreen(c) {\n return c >>> 8 & 255;\n}\nfunction abgrBlue(c) {\n return c >>> 16 & 255;\n}\nfunction abgrAlpha(c) {\n return c >>> 24 & 255;\n}\nfunction abgrToCssRgba(c) {\n return `rgba(${abgrRed(c)},${abgrGreen(c)},${abgrBlue(c)},${abgrAlpha(c) / 255})`;\n}\nfunction normalizedRgbToCssRgba(c, alpha) {\n return `rgba(${Math.round(c[0] * 255)},${Math.round(c[1] * 255)},${Math.round(c[2] * 255)},${alpha})`;\n}\nfunction fadeAbgr(c, alpha) {\n return packAbgr(\n abgrRed(c),\n abgrGreen(c),\n abgrBlue(c),\n Math.round(abgrAlpha(c) * alpha)\n );\n}\nfunction brightenAbgr(c, factor) {\n const t = Math.max(0, 1 - 1 / factor);\n const lift = (v) => Math.round(v + (255 - v) * t);\n return packAbgr(\n lift(abgrRed(c)),\n lift(abgrGreen(c)),\n lift(abgrBlue(c)),\n abgrAlpha(c)\n );\n}\n\nexport {\n packAbgr,\n abgrRed,\n abgrGreen,\n abgrBlue,\n abgrAlpha,\n abgrToCssRgba,\n normalizedRgbToCssRgba,\n fadeAbgr,\n brightenAbgr\n};\n", "// src/referenceRampCss.ts\nvar REFERENCE_RAMP_MAX_HUE = 300;\nvar REFERENCE_RAMP_SATURATION = 0.7;\nvar REFERENCE_RAMP_LIGHTNESS = 0.5;\nfunction rampHueCss(hue) {\n return `hsl(${hue}, ${REFERENCE_RAMP_SATURATION * 100}%, ${REFERENCE_RAMP_LIGHTNESS * 100}%)`;\n}\nfunction rampHueAt(frac) {\n return Math.max(0, Math.min(1, frac)) * REFERENCE_RAMP_MAX_HUE;\n}\nfunction rampHue(bp, domain) {\n return rampHueAt((bp - domain.start) / (domain.end - domain.start));\n}\nvar HUE_STOP_DEG = 30;\nfunction rampStops({ start, bp, reversed }, domain) {\n const low = rampHue(start, domain);\n const high = rampHue(start + bp, domain);\n if (high - low < 1) {\n return [(low + high) / 2];\n }\n const n = Math.ceil((high - low) / HUE_STOP_DEG);\n return Array.from(\n { length: n + 1 },\n (_, i) => rampHue(start + bp * (reversed ? n - i : i) / n, domain)\n );\n}\nvar RAMP_GRADIENT_STOPS = Array.from({ length: 7 }, (_, i) => ({\n offset: i / 6,\n color: rampHueCss(i / 6 * REFERENCE_RAMP_MAX_HUE)\n}));\nvar RAMP_GRADIENT_CSS = `linear-gradient(to right, ${RAMP_GRADIENT_STOPS.map(\n (s) => `${s.color} ${s.offset * 100}%`\n).join(\", \")})`;\n\nexport {\n REFERENCE_RAMP_MAX_HUE,\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS,\n rampHueCss,\n rampHueAt,\n rampHue,\n rampStops,\n RAMP_GRADIENT_STOPS,\n RAMP_GRADIENT_CSS\n};\n", "import {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n edgeCurvesOf\n} from \"./chunk-T35SFBHW.js\";\n\n// src/util/edgeCurves.ts\nvar cache = weakMemo();\nfunction baseEdgeCurves(nodePositions, graph, axis, deletions, version, routes, stranded = false) {\n return cache(\n nodePositions,\n [graph, axis.scaleX, axis.scaleY, deletions, routes, stranded, version],\n () => {\n const curves = /* @__PURE__ */ new Map();\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const bypassed = deletions?.get(ei);\n const edgeCurves = edgeCurvesOf(\n nodePositions,\n graph.edges[ei],\n axis,\n bypassed,\n bypassed && routes?.[ei],\n stranded\n );\n if (edgeCurves) {\n curves.set(ei, edgeCurves);\n }\n }\n return curves;\n }\n );\n}\n\nexport {\n baseEdgeCurves\n};\n", "import {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/referenceSpan.ts\nvar MAX_BACKBONE_HOPS = 4;\nfunction buildNeighbors(graph) {\n const neighbors = /* @__PURE__ */ new Map();\n for (const edge of graph.edges) {\n pushTo(neighbors, edge.from, edge.to);\n pushTo(neighbors, edge.to, edge.from);\n }\n return neighbors;\n}\nfunction flankingSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const seen = /* @__PURE__ */ new Set([nodeId]);\n let frontier = [nodeId];\n let minEnd = Infinity;\n let maxStart = -Infinity;\n for (let hop = 0; hop < MAX_BACKBONE_HOPS && frontier.length > 0; hop++) {\n const next = [];\n for (const id of frontier) {\n const adjacent = neighbors.get(id);\n if (adjacent) {\n for (const neighborId of adjacent) {\n if (!seen.has(neighborId)) {\n seen.add(neighborId);\n const neighbor = nodeById.get(neighborId);\n if (neighbor && isBackbone(neighbor)) {\n minEnd = Math.min(minEnd, neighbor.stable.start + neighbor.length);\n maxStart = Math.max(maxStart, neighbor.stable.start);\n } else {\n next.push(neighborId);\n }\n }\n }\n }\n }\n frontier = next;\n }\n return minEnd === Infinity ? void 0 : {\n start: Math.min(minEnd, maxStart),\n end: Math.max(minEnd, maxStart)\n };\n}\nfunction nodeReferenceSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const node = nodeById.get(nodeId);\n return node === void 0 ? void 0 : isBackbone(node) ? { start: node.stable.start, end: node.stable.start + node.length } : flankingSpan({ nodeId, nodeById, neighbors });\n}\nfunction referenceMidpoints(graph) {\n const nodeById = new Map(graph.nodes.map((node) => [node.id, node]));\n const neighbors = buildNeighbors(graph);\n const midpoints = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const span = nodeReferenceSpan({ nodeId: node.id, nodeById, neighbors });\n if (span) {\n midpoints.set(node.id, (span.start + span.end) / 2);\n }\n }\n return midpoints;\n}\nfunction referencePositions(graph) {\n const positions = referenceMidpoints(graph);\n const neighbors = buildNeighbors(graph);\n let frontier = [...positions.keys()];\n while (frontier.length > 0) {\n const next = [];\n for (const id of frontier) {\n for (const neighborId of neighbors.get(id) ?? []) {\n if (!positions.has(neighborId)) {\n positions.set(neighborId, positions.get(id));\n next.push(neighborId);\n }\n }\n }\n frontier = next;\n }\n return positions;\n}\n\nexport {\n buildNeighbors,\n nodeReferenceSpan,\n referenceMidpoints,\n referencePositions\n};\n", "import {\n THREAD_PITCH_PX,\n THREAD_PX,\n bandScale,\n bandWidthPx,\n laneSlideAt,\n liftLanes,\n slotCentres,\n threadsPasses,\n walkSteps\n} from \"./chunk-YUIKEUKY.js\";\nimport {\n abgrToCssRgba,\n fadeAbgr,\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n REFERENCE_RAMP_LIGHTNESS,\n REFERENCE_RAMP_SATURATION,\n rampHueAt\n} from \"./chunk-GQZVR5DW.js\";\nimport {\n baseEdgeCurves\n} from \"./chunk-ZENC2BJH.js\";\nimport {\n PATH_LIGHTNESS,\n PATH_SATURATION,\n nameHue,\n pathHueAt\n} from \"./chunk-OV7SD6TP.js\";\nimport {\n nodeWidthPx,\n walkLaneWidthPx,\n widthNorm\n} from \"./chunk-XWH4LB56.js\";\nimport {\n referenceMidpoints\n} from \"./chunk-L4DBSRA2.js\";\nimport {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n dashSpans,\n pathRibbonOffsets,\n polylinePx,\n slideCurves,\n strandSides,\n translateCurves,\n yToXOf\n} from \"./chunk-JJV2GT2Z.js\";\nimport {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\nimport {\n busiestEdge,\n edgeWidthFactor\n} from \"./chunk-DAEEMZ74.js\";\n\n// src/renderer/GeometryBuilder.ts\nvar EDGE_DEFAULT_COLOR = packAbgr(119, 119, 119, 217);\nvar EDGE_PATH_FALLBACK_COLOR = packAbgr(136, 136, 136, 217);\nvar EDGE_DELETION_COLOR = packAbgr(24, 24, 28, 240);\nvar DELETION_THICKNESS_FACTOR = 2.2;\nvar LIFT_BACKDROP_COLOR = packAbgr(160, 160, 160, 255);\nvar FADED_ALPHA = 0.18;\nvar MOVED_ALPHA = 0.45;\nvar LIFT_BACKDROP_CSS = abgrToCssRgba(\n fadeAbgr(LIFT_BACKDROP_COLOR, FADED_ALPHA)\n);\nvar DELETION_DASH_PX = 11;\nvar MIN_PATH_STRIPE_PX = 1.2;\nvar MIN_SCALE_FOR_OFFSET = 1e-6;\nvar ARROW_LENGTH_BASE_PX = 7;\nvar ARROW_LENGTH_PER_EDGE_PX = 3;\nvar ARROW_HALF_WIDTH_BASE_PX = 3;\nvar ARROW_HALF_WIDTH_PER_EDGE_PX = 1.5;\nvar MIN_LINK_HEADS = 3;\nvar MIN_ARROW_FIT = 0.5;\nvar MIN_ARROW_SCALE = 0.45;\nvar ARROW_CURVE_STEPS = 12;\nvar ABUTTING_PX = 1e-6;\nvar walkX = new Float64Array(64);\nvar walkY = new Float64Array(64);\nvar walkPx = new Float64Array(64);\nfunction backFromEnd(curves, scale, yToX, untilPx) {\n const most = curves.length * ARROW_CURVE_STEPS + 1;\n if (walkX.length < most) {\n walkX = new Float64Array(most);\n walkY = new Float64Array(most);\n walkPx = new Float64Array(most);\n }\n const last = curves[curves.length - 1];\n walkX[0] = last.x1;\n walkY[0] = last.y1;\n walkPx[0] = 0;\n let n = 1;\n let px = 0;\n for (let ci = curves.length - 1; ci >= 0 && px < untilPx; ci--) {\n const c = curves[ci];\n for (let k = 1; k <= ARROW_CURVE_STEPS && px < untilPx; k++) {\n const t = 1 - (k / ARROW_CURVE_STEPS) ** 2;\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n const x = a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1;\n const y = a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1;\n px += Math.hypot(x - walkX[n - 1], (y - walkY[n - 1]) * yToX) * scale;\n walkX[n] = x;\n walkY[n] = y;\n walkPx[n] = px;\n n++;\n }\n }\n return n;\n}\nfunction walkPointAt(n, px) {\n let i = 1;\n while (i < n - 1 && walkPx[i] < px) {\n i++;\n }\n const from = walkPx[i - 1];\n const to = walkPx[i];\n const f = to > from ? Math.min(1, Math.max(0, (px - from) / (to - from))) : 0;\n return {\n x: walkX[i - 1] + (walkX[i] - walkX[i - 1]) * f,\n y: walkY[i - 1] + (walkY[i] - walkY[i - 1]) * f\n };\n}\nfunction arrowheadFor({\n curves,\n edgeHalfWidth,\n nodeHalfWidth,\n scale,\n yToX,\n color,\n fromSegments,\n toSegments\n}) {\n const length = ARROW_LENGTH_BASE_PX + ARROW_LENGTH_PER_EDGE_PX * edgeHalfWidth;\n const n = backFromEnd(\n curves,\n scale,\n yToX,\n nodeHalfWidth + MIN_LINK_HEADS * length\n );\n const lengthPx = walkPx[n - 1];\n const abutting = lengthPx < ABUTTING_PX;\n const inset = Math.min(nodeHalfWidth, lengthPx);\n const fit = abutting ? Math.min(1, polylinePx(fromSegments, scale, scale * yToX) / length) : 1;\n if (abutting ? fit < MIN_ARROW_FIT : lengthPx < MIN_LINK_HEADS * length) {\n return void 0;\n }\n const tip = walkPointAt(n, inset);\n const base = walkPointAt(n, inset + length * fit);\n const dx = tip.x - base.x;\n const dy = (tip.y - base.y) * yToX;\n const last = curves[curves.length - 1];\n return {\n x: tip.x,\n y: tip.y,\n angle: Math.hypot(dx, dy) > 0 ? Math.atan2(dy, dx) : endTangent(last, yToX, intoDirection(last, toSegments)),\n length: length * fit,\n halfWidth: (ARROW_HALF_WIDTH_BASE_PX + ARROW_HALF_WIDTH_PER_EDGE_PX * edgeHalfWidth) * fit,\n color\n };\n}\nvar FIRST_THREADS = [[0, 0]];\nvar ONE_PASS = [0];\nvar NO_SHIFT = { dx: 0, dy: 0 };\nfunction nearerStart(at, segments, yToX) {\n const gap = (p) => Math.hypot(p.x - at.x, (p.y - at.y) * yToX);\n return gap(segments[0]) < gap(segments.at(-1));\n}\nfunction leavesStart(edge, segments, first, stranded, yToX) {\n return stranded ? strandSides(edge).from === \"start\" : nearerStart({ x: first.x0, y: first.y0 }, segments, yToX);\n}\nfunction intoDirection(last, toSegments) {\n if (toSegments.length < 2) {\n return void 0;\n }\n const first = toSegments[0];\n const final = toSegments[toSegments.length - 1];\n const atStart = Math.hypot(last.x1 - first.x, last.y1 - first.y) <= Math.hypot(last.x1 - final.x, last.y1 - final.y);\n return atStart ? { from: first, to: toSegments[1] } : { from: final, to: toSegments[toSegments.length - 2] };\n}\nfunction normal(a, b) {\n if (!a || !b) {\n return void 0;\n }\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len = Math.hypot(dx, dy);\n return len > 0 ? { nx: -dy / len, ny: dx / len } : void 0;\n}\nvar MITRE_LIMIT = 0.1;\nvar LONGEST_NORMAL = 1 / Math.sqrt(MITRE_LIMIT);\nfunction pointNormalsOf(rawPoints, yToX = 1) {\n const points = yToX === 1 ? rawPoints : rawPoints.map((p) => ({ x: p.x, y: p.y * yToX }));\n return points.map((p, i) => {\n const before = normal(points[i - 1], p);\n const after = normal(p, points[i + 1]);\n if (before && after) {\n const nx = (before.nx + after.nx) / 2;\n const ny = (before.ny + after.ny) / 2;\n const dot = before.nx * nx + before.ny * ny;\n return dot > MITRE_LIMIT ? { nx: nx / dot, ny: ny / dot } : { nx, ny };\n }\n return before ?? after ?? { nx: 0, ny: 0 };\n });\n}\nfunction offsetPolyline(points, normals, distance, yToX = 1) {\n const out = new Array(points.length);\n for (let i = 0; i < points.length; i++) {\n const d = typeof distance === \"number\" ? distance : distance[i];\n out[i] = {\n x: points[i].x + normals[i].nx * d,\n y: points[i].y + normals[i].ny * d / yToX\n };\n }\n return out;\n}\nfunction hslToRgb(h, s, l) {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n return [r + m, g + m, b + m];\n}\nfunction packHsl(h, s, l, a = 1) {\n const [r, g, b] = hslToRgb(h, s, l);\n return packAbgr(\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n Math.round(a * 255)\n );\n}\nvar DEPTH_GRADIENT = [\n [68, 1, 84],\n [59, 82, 139],\n [33, 145, 140],\n [94, 201, 98],\n [253, 231, 37]\n];\nvar STABLE_RANK_GRADIENT = [\n [237, 137, 44],\n [158, 42, 122]\n];\nvar NODE_LENGTH_GRADIENT = [\n [220, 50, 50],\n [50, 120, 220]\n];\nfunction sampleGradient(stops, t) {\n const pos = Math.max(0, Math.min(1, t)) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(pos));\n const f = pos - i;\n const a = stops[i];\n const b = stops[i + 1];\n return packAbgr(\n Math.round(a[0] + (b[0] - a[0]) * f),\n Math.round(a[1] + (b[1] - a[1]) * f),\n Math.round(a[2] + (b[2] - a[2]) * f),\n 255\n );\n}\nfunction hashColor(str, alpha) {\n return packHsl(nameHue(str), PATH_SATURATION, PATH_LIGHTNESS, alpha);\n}\nvar REFERENCE_RAMP_ALT_RGB = [60, 65, 72];\nvar REFERENCE_RAMP_ALT_COLOR = packAbgr(...REFERENCE_RAMP_ALT_RGB, 255);\nvar REFERENCE_RAMP_ALT_CSS = `rgb(${REFERENCE_RAMP_ALT_RGB.join(\", \")})`;\nfunction rampFraction(node, ramp) {\n const mid = ramp.midpoints.get(node.id);\n return isBackbone(node) && mid !== void 0 ? (mid - ramp.start) / ramp.span : void 0;\n}\nfunction computeReferenceRamp(graph, domain) {\n const midpoints = referenceMidpoints(graph);\n if (domain && domain.end > domain.start) {\n return {\n start: domain.start,\n span: domain.end - domain.start,\n midpoints\n };\n }\n let min = Infinity;\n let max = -Infinity;\n for (const mid of midpoints.values()) {\n min = Math.min(min, mid);\n max = Math.max(max, mid);\n }\n return {\n start: min === Infinity ? 0 : min,\n span: max > min ? max - min : 1,\n midpoints\n };\n}\nfunction computeColorSchemeRange(graph, referenceRamp) {\n let minDepth = Infinity;\n let maxDepth = -Infinity;\n let minLength = Infinity;\n let maxLength = -Infinity;\n let maxRank = 0;\n for (const n of graph.nodes) {\n if (n.stable !== void 0 && n.stable.rank > maxRank) {\n maxRank = n.stable.rank;\n }\n if (n.depth < minDepth) {\n minDepth = n.depth;\n }\n if (n.depth > maxDepth) {\n maxDepth = n.depth;\n }\n if (n.length < minLength) {\n minLength = n.length;\n }\n if (n.length > maxLength) {\n maxLength = n.length;\n }\n }\n return {\n minDepth,\n maxDepth,\n minLength,\n maxLength,\n maxRank,\n nodeCount: graph.nodes.length,\n referenceRamp\n };\n}\nfunction getNodeColor(node, nodeIndex, colorScheme, range) {\n switch (colorScheme) {\n case \"random\":\n return hashColor(node.id, 1);\n case \"depth\":\n return sampleGradient(\n DEPTH_GRADIENT,\n range.maxDepth > range.minDepth ? (node.depth - range.minDepth) / (range.maxDepth - range.minDepth) : 0.5\n );\n case \"node-length\":\n return sampleGradient(\n NODE_LENGTH_GRADIENT,\n range.maxLength > range.minLength ? (node.length - range.minLength) / (range.maxLength - range.minLength) : 0.5\n );\n // rGFA states the backbone rather than leaving it to be inferred: rank 0 is\n // the reference, higher ranks are the sequence that diverges from it. A\n // graph with no SR tags draws every node as unranked.\n case \"stable-rank\":\n return node.stable === void 0 ? packAbgr(160, 160, 160, 255) : node.stable.rank === 0 ? packAbgr(52, 152, 219, 255) : sampleGradient(\n STABLE_RANK_GRADIENT,\n range.maxRank > 1 ? (node.stable.rank - 1) / (range.maxRank - 1) : 0\n );\n // Position on the reference, the one quantity both panels of a\n // graph-over-linear figure can state, so only the backbone takes a hue\n case \"reference-position\": {\n const ramp = range.referenceRamp;\n if (ramp === void 0) {\n return packAbgr(160, 160, 160, 255);\n }\n const t = rampFraction(node, ramp);\n return t === void 0 ? REFERENCE_RAMP_ALT_COLOR : packHsl(\n rampHueAt(t),\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n );\n }\n case \"grey\":\n return packAbgr(160, 160, 160, 255);\n case \"rainbow\": {\n const hue = range.nodeCount > 1 ? nodeIndex / range.nodeCount * 360 : 0;\n return packHsl(hue, 0.75, 0.5);\n }\n default:\n return packAbgr(52, 152, 219, 255);\n }\n}\nfunction endTangent(c, yToX = 1, into) {\n const candidates = [\n [c.cx1, c.cy1],\n [c.cx0, c.cy0],\n [c.x0, c.y0]\n ];\n for (const [x, y] of candidates) {\n const dx = c.x1 - x;\n const dy = (c.y1 - y) * yToX;\n if (Math.hypot(dx, dy) > 0) {\n return Math.atan2(dy, dx);\n }\n }\n return into ? Math.atan2((into.to.y - into.from.y) * yToX, into.to.x - into.from.x) : 0;\n}\nfunction isPolylineInBounds(segments, bounds) {\n let hit = false;\n for (let i = 0; i < segments.length - 1 && !hit; i++) {\n const a = segments[i];\n const b = segments[i + 1];\n hit = Math.max(a.x, b.x) >= bounds.minX && Math.min(a.x, b.x) <= bounds.maxX && Math.max(a.y, b.y) >= bounds.minY && Math.min(a.y, b.y) <= bounds.maxY;\n }\n return hit;\n}\nfunction isBezierInBounds(curves, bounds, growX = 0, growY = 0) {\n for (const c of curves) {\n const cMinX = Math.min(c.x0, c.cx0, c.cx1, c.x1);\n const cMaxX = Math.max(c.x0, c.cx0, c.cx1, c.x1);\n const cMinY = Math.min(c.y0, c.cy0, c.cy1, c.y1);\n const cMaxY = Math.max(c.y0, c.cy0, c.cy1, c.y1);\n if (cMaxX >= bounds.minX - growX && cMinX <= bounds.maxX + growX && cMaxY >= bounds.minY - growY && cMinY <= bounds.maxY + growY) {\n return true;\n }\n }\n return false;\n}\nvar paletteCache = /* @__PURE__ */ new WeakMap();\nfunction pathPaletteOf(graph) {\n let palette = paletteCache.get(graph);\n if (!palette) {\n const pathColorByIndex = [];\n const pathIndexByName = /* @__PURE__ */ new Map();\n const paths = graph.paths ?? [];\n for (let i = 0; i < paths.length; i++) {\n pathColorByIndex.push(\n packHsl(\n pathHueAt(i, paths.length),\n PATH_SATURATION,\n PATH_LIGHTNESS,\n 0.85\n )\n );\n if (!pathIndexByName.has(paths[i].name)) {\n pathIndexByName.set(paths[i].name, i);\n }\n }\n palette = { pathColorByIndex, pathIndexByName };\n paletteCache.set(graph, palette);\n }\n return palette;\n}\nvar slotsCache = /* @__PURE__ */ new WeakMap();\nvar NO_SLOTS = /* @__PURE__ */ new Map();\nfunction pathSlotsOf(graph) {\n let slots = slotsCache.get(graph);\n if (!slots) {\n slots = /* @__PURE__ */ new Map();\n for (const [pathIdx, path] of (graph.paths ?? []).entries()) {\n for (const nodeId of new Set(path.nodeIds)) {\n pushTo(slots, nodeId, pathIdx);\n }\n }\n slotsCache.set(graph, slots);\n }\n return slots;\n}\nvar lanesCache = weakMemo();\nvar stepsCache = weakMemo();\nvar linksCache = /* @__PURE__ */ new WeakMap();\nfunction linksOf(graph) {\n let links = linksCache.get(graph);\n if (!links) {\n links = /* @__PURE__ */ new Map();\n for (const { from, to } of graph.edges) {\n let out = links.get(from);\n if (!out) {\n out = /* @__PURE__ */ new Set();\n links.set(from, out);\n }\n out.add(to);\n }\n linksCache.set(graph, links);\n }\n return links;\n}\nfunction buildGeometry(options) {\n const {\n nodePositions,\n graph,\n nodeById,\n colorScheme,\n contigThickness,\n connectorThickness,\n drawPaths,\n nodeWidth = \"uniform\",\n edgeWidth = \"uniform\",\n highlight,\n axis,\n linearLayout,\n viewportBounds,\n referenceRamp,\n deletions,\n deletionRoutes,\n stranded,\n hiddenEdges,\n version = 0\n } = options;\n const widthScale = widthNorm(graph, nodeWidth);\n const busiest = edgeWidth === \"walks\" ? busiestEdge(graph) : 0;\n const scale = axis.scaleX;\n const worldPerScreenPx = 1 / Math.max(scale, MIN_SCALE_FOR_OFFSET);\n const yToX = yToXOf(axis);\n const sharedCurves = baseEdgeCurves(\n nodePositions,\n graph,\n axis,\n deletions,\n version,\n deletionRoutes,\n stranded\n );\n const nodeStrokes = [];\n const nodeStrokeRuns = /* @__PURE__ */ new Map();\n const arrows = [];\n const arrowRuns = /* @__PURE__ */ new Map();\n const edgeCurves = [];\n const edgeCurveRuns = /* @__PURE__ */ new Map();\n const colorRange = computeColorSchemeRange(graph, referenceRamp);\n const nodeIndexMap = /* @__PURE__ */ new Map();\n if (colorScheme === \"rainbow\") {\n for (let i = 0; i < graph.nodes.length; i++) {\n nodeIndexMap.set(graph.nodes[i].id, i);\n }\n }\n const pathCount = graph.paths?.length ?? 0;\n const { pathColorByIndex, pathIndexByName } = pathPaletteOf(graph);\n const pathColorByName = (name) => pathColorByIndex[pathIndexByName.get(name) ?? -1] ?? EDGE_PATH_FALLBACK_COLOR;\n const nodePathSlots = drawPaths && pathCount > 1 ? pathSlotsOf(graph) : NO_SLOTS;\n const liftedWalks = highlight?.walks ?? [];\n const threaded = threadsPasses(liftedWalks);\n const lanePasses = liftedWalks.map((w) => w.mostPasses);\n const thinned = threaded ? bandScale(lanePasses) : 1;\n const fields = highlight && liftedWalks.length > 1 ? lanesCache(\n highlight,\n [nodePositions, version, axis.scaleX, axis.scaleY],\n () => liftLanes(\n liftedWalks,\n nodePositions,\n yToX,\n worldPerScreenPx,\n stepsCache(\n highlight,\n [nodePositions, version],\n () => walkSteps(\n liftedWalks.map((w) => w.route),\n nodePositions\n )\n )\n )\n ) : void 0;\n const lines = fields?.lines;\n const threads = fields?.threads;\n const spanField = fields?.spans;\n const plainCentres = threaded ? slotCentres(lanePasses, lanePasses) : [];\n const centresByNode = /* @__PURE__ */ new Map();\n const centresOf = (nodeId) => {\n let centres = centresByNode.get(nodeId);\n if (!centres) {\n const spans = spanField?.get(nodeId);\n centres = spans ? slotCentres(spans.slot, lanePasses, spans.held) : plainCentres;\n centresByNode.set(nodeId, centres);\n }\n return centres;\n };\n const laneOffset = (nodeId, laneWidth, lane, pass) => threaded ? (centresOf(nodeId)[lane] + pass * THREAD_PITCH_PX) * thinned : (lane - (liftedWalks.length - 1) / 2) * laneWidth;\n const threadOffsetAt = (frame, at, fallback) => {\n const eased = frame?.offsets?.[at] ?? frame?.offset;\n return eased === void 0 ? fallback : eased * thinned;\n };\n const laneHalfWidth = (laneWidth) => threaded ? THREAD_PX / 2 * thinned : laneWidth / 2;\n const plainNormals = /* @__PURE__ */ new Map();\n const visitNormals = /* @__PURE__ */ new WeakMap();\n const visitOf = (lane, nodeId, thread) => threads?.[lane]?.threadPasses.get(nodeId)?.[thread] ?? 0;\n const plainNormalsOf = (nodeId, segments) => {\n let normals = plainNormals.get(nodeId);\n if (!normals) {\n normals = pointNormalsOf(segments, yToX);\n plainNormals.set(nodeId, normals);\n }\n return normals;\n };\n const laneNormalsOf = (nodeId, segments, frame) => {\n if (!frame) {\n return plainNormalsOf(nodeId, segments);\n }\n let normals = visitNormals.get(frame.normals);\n if (!normals) {\n normals = plainNormalsOf(nodeId, segments).map(\n (n, i) => frame.normals[i] ?? n\n );\n visitNormals.set(frame.normals, normals);\n }\n return normals;\n };\n const laneWidths = /* @__PURE__ */ new Map();\n const laneWidthOf = (id) => {\n let width = laneWidths.get(id);\n if (width === void 0) {\n const node = nodeById.get(id);\n width = walkLaneWidthPx(\n node ? nodeWidthPx(node, contigThickness, nodeWidth, widthScale) : contigThickness,\n liftedWalks.length\n );\n laneWidths.set(id, width);\n }\n return width;\n };\n const laneEndOf = (id, frames, segments, atStart, lane, thread) => {\n const at = atStart ? 0 : segments.length - 1;\n const frame = frames?.[lane]?.[visitOf(lane, id, thread)];\n const eased = frame?.offsets?.[at] ?? frame?.offset;\n return {\n normal: frame?.normals[at] ?? plainNormalsOf(id, segments)[at] ?? { nx: 0, ny: 0 },\n shift: frame?.shifts[at] ?? NO_SHIFT,\n offset: eased === void 0 ? laneOffset(id, laneWidthOf(id), lane, thread) : eased * thinned\n };\n };\n const lanesMayShow = (curves, fromId) => {\n if (!viewportBounds) {\n return true;\n }\n const offset = threaded ? bandWidthPx(lanePasses) * thinned : (liftedWalks.length - 1) / 2 * laneWidthOf(fromId);\n const reach = LONGEST_NORMAL * offset * worldPerScreenPx;\n return isBezierInBounds(\n curves,\n viewportBounds,\n reach + (fields?.furthestShift.dx ?? 0),\n reach / yToX + (fields?.furthestShift.dy ?? 0)\n );\n };\n const threadPairs = (lane, from, to) => {\n const own = threads?.[lane]?.linkThreads;\n if (!own?.size) {\n return FIRST_THREADS;\n }\n const ahead = own.get(from)?.get(to);\n const back = linksOf(graph).get(to)?.has(from) ? void 0 : own.get(to)?.get(from);\n if (!back) {\n return ahead ?? FIRST_THREADS;\n }\n const turned = back.map(([a, b]) => [b, a]);\n return ahead ? [...ahead, ...turned] : turned;\n };\n const threadColor = (lane, nodeId, thread) => liftedWalks[lane]?.passColors.get(nodeId)?.[threads?.[lane]?.threadPasses.get(nodeId)?.[thread] ?? 0];\n const visitPoints = /* @__PURE__ */ new WeakMap();\n const lanePointsOf = (segments, frame) => {\n if (!frame || !threaded) {\n return segments;\n }\n let points = visitPoints.get(frame.shifts);\n if (!points) {\n const { shifts } = frame;\n points = segments.map((p, i) => {\n const { dx, dy } = shifts[i] ?? NO_SHIFT;\n return { ...p, x: p.x + dx, y: p.y + dy };\n });\n visitPoints.set(frame.shifts, points);\n }\n return points;\n };\n const showArrows = scale > (linearLayout ? 1 : MIN_ARROW_SCALE);\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const edge = graph.edges[ei];\n const fromSegments = nodePositions[edge.from];\n const toSegments = nodePositions[edge.to];\n const baseCurves = sharedCurves.get(ei);\n if (!fromSegments?.length || !toSegments?.length || !baseCurves || hiddenEdges?.has(ei)) {\n continue;\n }\n const numPaths = edge.pathIds?.length ?? 0;\n const bypassed = deletions?.get(ei);\n const isDeletion = bypassed !== void 0;\n const onWalk = highlight?.edgeIndexes.has(ei) ?? false;\n const ribbonThickness = connectorThickness / 2 * (isDeletion ? DELETION_THICKNESS_FACTOR : 1);\n const walkFactor = edgeWidthFactor(numPaths, busiest, edgeWidth);\n const edgeThickness = connectorThickness / 2 * (!isDeletion ? walkFactor : edgeWidth === \"walks\" && busiest > 0 ? Math.max(1, walkFactor) : DELETION_THICKNESS_FACTOR);\n const ribbons = drawPaths && numPaths > 0;\n const plainEdgeColor = isDeletion ? EDGE_DELETION_COLOR : EDGE_DEFAULT_COLOR;\n const edgeColor = !highlight || onWalk ? plainEdgeColor : fadeAbgr(plainEdgeColor, FADED_ALPHA);\n const toNode = nodeById.get(edge.to);\n const intoHalfWidth = (toNode ? nodeWidthPx(toNode, contigThickness, nodeWidth, widthScale) : contigThickness) / 2;\n const inView = (curves) => !viewportBounds || isBezierInBounds(curves, viewportBounds);\n const dashesOf = (curves) => dashSpans(curves, DELETION_DASH_PX / scale, yToX, viewportBounds);\n const stroke = (curves, thickness, color) => {\n if (!isDeletion) {\n edgeCurves.push({ curves, thickness, color });\n return;\n }\n for (const dash of dashesOf(curves)) {\n edgeCurves.push({ curves: dash.curves, thickness, color });\n }\n };\n const laneStroke = (curves, thickness, color, walk, pass, normal2, offsetX, endNormal, endOffsetX) => {\n if (!isDeletion) {\n edgeCurves.push({\n curves,\n thickness,\n color,\n walk,\n pass,\n normal: normal2,\n offsetX,\n endNormal,\n endOffsetX\n });\n return;\n }\n const start = { normal: normal2, offsetX };\n const end = { normal: endNormal, offsetX: endOffsetX };\n for (const dash of dashesOf(curves)) {\n const a = dash.startAlong === 0 ? start : laneSlideAt(start, end, dash.startAlong);\n const b = dash.endAlong === 1 ? end : laneSlideAt(start, end, dash.endAlong);\n edgeCurves.push({\n curves: dash.curves,\n thickness,\n color,\n walk,\n pass,\n normal: a.normal,\n offsetX: a.offsetX,\n endNormal: b.normal,\n endOffsetX: b.offsetX\n });\n }\n };\n const arrowOn = (curves) => {\n const head = showArrows ? arrowheadFor({\n curves,\n edgeHalfWidth: isDeletion || ribbons ? connectorThickness / 2 : edgeThickness,\n nodeHalfWidth: intoHalfWidth,\n scale,\n yToX,\n color: edgeColor,\n fromSegments,\n toSegments\n }) : void 0;\n if (head) {\n arrows.push(head);\n }\n };\n const edgeCurveStart = edgeCurves.length;\n const arrowStart = arrows.length;\n const laneWalks = highlight?.walks.length && onWalk && !ribbons ? highlight.walks : void 0;\n if (laneWalks && !lanesMayShow(baseCurves, edge.from)) {\n continue;\n }\n if (laneWalks) {\n const fromAtStart = leavesStart(\n edge,\n fromSegments,\n baseCurves[0],\n stranded,\n yToX\n );\n const last = baseCurves.at(-1);\n const toAtStart = nearerStart(\n { x: last.x1, y: last.y1 },\n toSegments,\n yToX\n );\n const single = laneWalks.length === 1;\n const thickness = laneHalfWidth(laneWidthOf(edge.from));\n const fromFrames = lines?.frames.get(edge.from);\n const toFrames = lines?.frames.get(edge.to);\n for (let lane = 0; lane < laneWalks.length; lane++) {\n const walk = laneWalks[lane];\n if (!walk.edgeIndexes.has(ei)) {\n continue;\n }\n for (const [pass, toPass] of threadPairs(lane, edge.from, edge.to)) {\n const from = laneEndOf(\n edge.from,\n fromFrames,\n fromSegments,\n fromAtStart,\n lane,\n pass\n );\n const to = threaded ? laneEndOf(edge.to, toFrames, toSegments, toAtStart, lane, toPass) : from;\n const offsetX = single ? 0 : from.offset * worldPerScreenPx;\n const endOffsetX = threaded ? to.offset * worldPerScreenPx : offsetX;\n const curves = threaded ? slideCurves(\n baseCurves,\n from.shift.dx + from.normal.nx * offsetX,\n from.shift.dy + from.normal.ny * offsetX / yToX,\n to.shift.dx + to.normal.nx * endOffsetX,\n to.shift.dy + to.normal.ny * endOffsetX / yToX\n ) : offsetX === 0 ? baseCurves : translateCurves(\n baseCurves,\n from.normal.nx * offsetX,\n from.normal.ny * offsetX / yToX\n );\n if (inView(curves)) {\n laneStroke(\n curves,\n thickness,\n threadColor(lane, edge.from, pass) ?? threadColor(lane, edge.to, toPass) ?? plainEdgeColor,\n lane,\n pass,\n from.normal,\n offsetX,\n to.normal,\n endOffsetX\n );\n }\n }\n }\n if (edgeCurves.length > edgeCurveStart) {\n arrowOn(baseCurves);\n }\n } else if (!ribbons) {\n if (inView(baseCurves)) {\n stroke(baseCurves, edgeThickness, edgeColor);\n arrowOn(baseCurves);\n }\n } else {\n const offsets = pathRibbonOffsets(\n fromSegments,\n toSegments,\n numPaths,\n axis\n );\n const arrowRibbon = Math.floor((numPaths - 1) / 2);\n for (let pathIdx = 0; pathIdx < numPaths; pathIdx++) {\n const { x, y } = offsets[pathIdx];\n const curves = x === 0 && y === 0 ? baseCurves : translateCurves(baseCurves, x, y);\n if (!inView(curves)) {\n continue;\n }\n const ribbonColor = pathColorByName(edge.pathIds[pathIdx]);\n stroke(\n curves,\n ribbonThickness,\n highlight && (highlight.walks.length ? !highlight.names.has(edge.pathIds[pathIdx]) : !onWalk) ? fadeAbgr(ribbonColor, FADED_ALPHA) : ribbonColor\n );\n if (pathIdx === arrowRibbon) {\n arrowOn(curves);\n }\n }\n }\n const edgeCurveCount = edgeCurves.length - edgeCurveStart;\n if (edgeCurveCount > 0) {\n edgeCurveRuns.set(ei, { start: edgeCurveStart, count: edgeCurveCount });\n }\n const arrowCount = arrows.length - arrowStart;\n if (arrowCount > 0) {\n arrowRuns.set(ei, { start: arrowStart, count: arrowCount });\n }\n }\n for (const [nodeId, segments] of Object.entries(nodePositions)) {\n const node = nodeById.get(nodeId);\n if (!node) {\n continue;\n }\n if (viewportBounds && !isPolylineInBounds(segments, viewportBounds)) {\n continue;\n }\n const faded = highlight !== void 0 && !highlight.nodeIds.has(nodeId);\n const own = faded ? LIFT_BACKDROP_COLOR : getNodeColor(\n node,\n nodeIndexMap.get(nodeId) ?? 0,\n colorScheme,\n colorRange\n );\n const color = faded ? fadeAbgr(own, FADED_ALPHA) : node.moved ? fadeAbgr(own, MOVED_ALPHA) : own;\n const width = nodeWidthPx(node, contigThickness, nodeWidth, widthScale);\n const nodeThickness = width / 2;\n const start = nodeStrokes.length;\n const slots = nodePathSlots.get(nodeId);\n const slotWidth = width / pathCount;\n const drawable = segments.length >= 2;\n const lanes = highlight?.walks.length && !faded && !slots?.length ? highlight.walks : void 0;\n if (drawable && lanes) {\n const laneWidth = walkLaneWidthPx(width, lanes.length);\n const thickness = laneHalfWidth(laneWidth);\n const frames = lines?.frames.get(nodeId);\n for (let lane = 0; lane < lanes.length; lane++) {\n const laneColor = lanes[lane].colors.get(nodeId);\n if (laneColor === void 0) {\n continue;\n }\n const onThreads = threads?.[lane]?.nodeThreads.get(nodeId) ?? ONE_PASS;\n for (const pass of onThreads) {\n const color2 = threadColor(lane, nodeId, pass) ?? laneColor;\n if (lanes.length === 1) {\n nodeStrokes.push({\n points: segments,\n thickness,\n color: color2,\n walk: lane,\n pass\n });\n continue;\n }\n const frame = frames?.[lane]?.[visitOf(lane, nodeId, pass)];\n const normals = laneNormalsOf(nodeId, segments, frame);\n const points = lanePointsOf(segments, frame);\n const plain = laneOffset(nodeId, laneWidth, lane, pass);\n const offsets = frame?.offsets?.map(\n (o) => o * thinned * worldPerScreenPx\n );\n const offsetX = offsets ? offsets[Math.floor(offsets.length / 2)] : threadOffsetAt(frame, 0, plain) * worldPerScreenPx;\n nodeStrokes.push({\n points: offsetPolyline(points, normals, offsets ?? offsetX, yToX),\n thickness,\n color: color2,\n walk: lane,\n pass,\n normals,\n offsetX,\n ...offsets && { offsets }\n });\n }\n }\n } else if (drawable && slots?.length && slotWidth >= MIN_PATH_STRIPE_PX) {\n const normals = pointNormalsOf(segments, yToX);\n for (const slot of slots) {\n const offset = (slot - (pathCount - 1) / 2) * slotWidth * worldPerScreenPx;\n const stripe = pathColorByIndex[slot] ?? EDGE_PATH_FALLBACK_COLOR;\n nodeStrokes.push({\n points: offsetPolyline(segments, normals, offset, yToX),\n thickness: slotWidth / 2,\n // a node off the lifted walk fades whichever way it is painted\n color: faded ? fadeAbgr(stripe, FADED_ALPHA) : stripe\n });\n }\n } else if (drawable) {\n nodeStrokes.push({ points: segments, thickness: nodeThickness, color });\n }\n const count = nodeStrokes.length - start;\n if (count > 0) {\n nodeStrokeRuns.set(nodeId, { start, count });\n }\n }\n return {\n nodeStrokes,\n nodeStrokeRuns,\n arrows,\n arrowRuns,\n edgeCurves,\n edgeCurveRuns\n };\n}\n\nexport {\n LIFT_BACKDROP_COLOR,\n FADED_ALPHA,\n LIFT_BACKDROP_CSS,\n hslToRgb,\n REFERENCE_RAMP_ALT_COLOR,\n REFERENCE_RAMP_ALT_CSS,\n rampFraction,\n computeReferenceRamp,\n computeColorSchemeRange,\n getNodeColor,\n endTangent,\n buildGeometry\n};\n", "import {\n REFERENCE_RAMP_ALT_COLOR,\n hslToRgb\n} from \"./chunk-DCE56GIC.js\";\nimport {\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n REFERENCE_RAMP_LIGHTNESS,\n REFERENCE_RAMP_SATURATION,\n rampHueAt\n} from \"./chunk-GQZVR5DW.js\";\n\n// src/walkEncoding.ts\nvar WALK_FIELDS = [\n { value: \"progress\", label: \"Progress along the walk\" },\n { value: \"walk\", label: \"One colour for the walk\" },\n { value: \"reference\", label: \"Reference position\" }\n];\nvar WALK_SCHEMES = [\n { value: \"grey\", label: \"Grey to black\", ends: [\"#a3a3a3\", \"#151515\"] },\n { value: \"blue\", label: \"Cyan to navy\", ends: [\"#6ee0f0\", \"#0b2c7a\"] },\n { value: \"red\", label: \"Yellow to red\", ends: [\"#ffd24a\", \"#b3121b\"] },\n { value: \"purple\", label: \"Pink to plum\", ends: [\"#f5a3d8\", \"#5e1a6e\"] },\n { value: \"green\", label: \"Lime to forest\", ends: [\"#b6e36c\", \"#0b5d3b\"] },\n { value: \"orange\", label: \"Peach to rust\", ends: [\"#ffc285\", \"#8f3a00\"] },\n { value: \"rainbow\", label: \"Rainbow\" }\n];\nvar FAMILIES = [\"blue\", \"red\", \"purple\", \"green\"];\nvar isField = (v) => WALK_FIELDS.some((f) => f.value === v);\nvar isScheme = (v) => WALK_SCHEMES.some((s) => s.value === v);\nfunction resolveEncoding(layer, reference, picked, alone = true) {\n const { field: askedField, scheme: askedScheme } = layer.color ?? {};\n const field = isField(askedField) ? askedField : alone ? \"progress\" : \"walk\";\n const family = reference ? \"grey\" : FAMILIES[picked % FAMILIES.length];\n const scheme = isScheme(askedScheme) ? askedScheme === \"rainbow\" && field !== \"reference\" ? family : askedScheme : family;\n const round = Math.floor(picked / FAMILIES.length) % SHADES.length;\n return field === \"walk\" && scheme === family && round > 0 ? { field, scheme, shade: SHADES[round] } : alone || field === \"walk\" ? { field, scheme } : { field, scheme, darkest: TOGETHER_DARKEST };\n}\nvar TOGETHER_DARKEST = 0.55;\nvar BASE_T = 0.5;\nvar SHADES = [BASE_T, 0.85, 0.2];\nvar STRETCH_GAP = 0.08;\nvar rampsOn = ({ field, scheme }) => field !== \"walk\" && scheme !== \"rainbow\";\nfunction splitFamilies(encodings) {\n const counts = /* @__PURE__ */ new Map();\n for (const e of encodings) {\n if (rampsOn(e)) {\n counts.set(e.scheme, (counts.get(e.scheme) ?? 0) + 1);\n }\n }\n const seen = /* @__PURE__ */ new Map();\n return encodings.map((e) => {\n const k = rampsOn(e) ? counts.get(e.scheme) : 1;\n if (k < 2) {\n return e;\n }\n const j = seen.get(e.scheme) ?? 0;\n seen.set(e.scheme, j + 1);\n const half = STRETCH_GAP / 2;\n return {\n ...e,\n stretch: [\n j / k + (j > 0 ? half : 0),\n (j + 1) / k - (j < k - 1 ? half : 0)\n ]\n };\n });\n}\nvar along = ({ stretch }, t) => stretch ? stretch[0] + (stretch[1] - stretch[0]) * t : t;\nvar toLinear = (c) => c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\nvar toGamma = (c) => c <= 31308e-7 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055;\nfunction oklab(hex) {\n const [r, g, b] = [1, 3, 5].map(\n (i) => toLinear(Number.parseInt(hex.slice(i, i + 2), 16) / 255)\n );\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\n return [\n 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n ];\n}\nfunction oklabToRgb([L, a, b]) {\n const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3;\n return [\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s\n ].map((c) => toGamma(Math.max(0, Math.min(1, c))) * 255);\n}\nvar endsCache = /* @__PURE__ */ new Map();\nfunction oklabEnds(scheme) {\n if (!endsCache.has(scheme)) {\n const family = WALK_SCHEMES.find((s) => s.value === scheme);\n endsCache.set(\n scheme,\n family && \"ends\" in family ? family.ends.map(oklab) : void 0\n );\n }\n return endsCache.get(scheme);\n}\nfunction schemeRgb(scheme, t, darkest = 0) {\n const x = Math.max(0, Math.min(1, t));\n const ends = oklabEnds(scheme);\n if (!ends) {\n return hslToRgb(\n rampHueAt(x),\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n ).map((c) => c * 255);\n }\n const [from, to] = ends;\n const light = from[0];\n const dark = to[0];\n const reach = dark < darkest && light > darkest ? (light - darkest) / (light - dark) : 1;\n return oklabToRgb(from.map((v, i) => v + (to[i] - v) * x * reach));\n}\nfunction schemeCss(scheme, t, darkest) {\n const [r, g, b] = schemeRgb(scheme, t, darkest).map(Math.round);\n return `rgb(${r}, ${g}, ${b})`;\n}\nfunction schemeColor(scheme, t, darkest) {\n const [r, g, b] = schemeRgb(scheme, t, darkest).map(Math.round);\n return packAbgr(r, g, b, 255);\n}\nfunction encodedColor(encoding, t) {\n const { field, scheme, darkest, shade = BASE_T } = encoding;\n return field === \"walk\" ? schemeColor(scheme, shade) : t === void 0 ? NO_VALUE_COLOR : schemeColor(scheme, along(encoding, t), darkest);\n}\nvar NO_VALUE_COLOR = REFERENCE_RAMP_ALT_COLOR;\nfunction encodingStops(encoding) {\n const { field, scheme, darkest, shade = BASE_T } = encoding;\n const stop = (offset, t) => ({\n offset,\n color: schemeCss(scheme, t, darkest),\n abgr: schemeColor(scheme, t, darkest)\n });\n return field === \"walk\" ? [stop(0, shade)] : Array.from({ length: 7 }, (_, i) => stop(i / 6, along(encoding, i / 6)));\n}\nfunction encodingSwatchCss(encoding) {\n const stops = encodingStops(encoding);\n return stops.length === 1 ? stops[0].color : `linear-gradient(to right, ${stops.map((s) => `${s.color} ${s.offset * 100}%`).join(\", \")})`;\n}\n\nexport {\n WALK_FIELDS,\n WALK_SCHEMES,\n resolveEncoding,\n splitFamilies,\n schemeRgb,\n schemeCss,\n schemeColor,\n encodedColor,\n NO_VALUE_COLOR,\n encodingStops,\n encodingSwatchCss\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["THREAD_PX", "THREAD_GAP_PX", "SLOT_GAP_PX", "LANE_SMOOTHING_PX", "THREAD_REACH_PX", "THREAD_TAPER_PX", "MAX_BAND_PX", "PASSES_KEY", "threadsPasses", "walks", "w", "threadsWidth", "threads", "sum", "values", "a", "b", "slotLayout", "spans", "mostPasses", "laneWidth", "widths", "m", "i", "seen", "gaps", "share", "gap", "THREAD_PITCH_PX", "slotCentres", "held", "band", "at", "width", "slack", "centre", "bandWidthPx", "bandScale", "passesKey", "laneSlideAt", "start", "end", "along", "vector", "normal", "offsetX2", "dx", "dy", "slideAt", "offsetX", "pointIndex", "run", "p", "k", "gapOf", "arcOf", "s", "walkSteps", "walkRoutes", "nodePositions", "routes", "visits", "route", "id", "visit", "segments", "owned", "laneRuns", "steps", "yToX", "jump", "runs", "pieces", "walk", "total", "piece", "xs", "ys", "from", "fresh", "breakRun", "stepOf", "x", "y", "first", "last", "forward", "toFirst", "toLast", "next", "toNext", "j", "ownedWindows", "margin", "windows", "floor", "lo", "hi", "smoothedNormals", "reach", "pointAt", "span", "f", "_", "back", "ahead", "len", "cutCurls", "close", "length", "out", "picks", "to", "j2", "q", "rounded", "half", "n", "sumW", "sumX", "sumY", "tightPoints", "line", "radius", "tight", "twice", "loosened", "t", "pass", "part", "local", "weight", "windowMean", "smoother", "runSigns", "own", "canonical", "settle", "agreement", "sum2", "decided", "pending", "theirs", "mine", "laneLines", "smooth", "turn", "curl", "context", "frames", "firsts", "arcs", "stepFrames", "newFrame", "place", "byWalk", "r", "ids", "starts", "raw", "firstRun", "firstStep", "firstFrame", "plus", "minus", "d", "shared", "reachFrom", "reachTo", "backward", "apart", "points", "normals", "sign", "index", "px", "py", "shift", "windowed", "v", "deque", "head", "counted", "sumWV", "ONE_THREAD", "repeats", "passes", "walkThreads", "stepVisits", "stepWants", "stepGlides", "nodes", "mid", "most", "copy", "before", "after", "wants", "glides", "nearest", "want", "taken", "threadOf", "free", "c", "glideOf", "glide", "nodeThreads", "threadPasses", "threadAt", "passOf", "thread", "linkThreads", "pair", "list", "bandSpans", "taper", "middle", "eased", "e", "easeOffsets", "plain", "byNode", "centresAt", "centres", "frame", "constant", "offsets", "liftLanes", "worldPerScreenPx", "threaded", "lines", "furthestShift", "seenShifts", "shifts", "packAbgr", "r", "g", "b", "a", "abgrRed", "c", "abgrGreen", "abgrBlue", "abgrAlpha", "abgrToCssRgba", "normalizedRgbToCssRgba", "alpha", "fadeAbgr", "brightenAbgr", "factor", "t", "lift", "v", "REFERENCE_RAMP_MAX_HUE", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "rampHueCss", "hue", "rampHueAt", "frac", "rampHue", "bp", "domain", "HUE_STOP_DEG", "rampStops", "start", "reversed", "low", "high", "n", "_", "RAMP_GRADIENT_STOPS", "i", "RAMP_GRADIENT_CSS", "s", "cache", "weakMemo", "baseEdgeCurves", "nodePositions", "graph", "axis", "deletions", "version", "routes", "stranded", "curves", "ei", "bypassed", "edgeCurves", "edgeCurvesOf", "MAX_BACKBONE_HOPS", "buildNeighbors", "graph", "neighbors", "edge", "pushTo", "flankingSpan", "nodeId", "nodeById", "seen", "frontier", "minEnd", "maxStart", "hop", "next", "id", "adjacent", "neighborId", "neighbor", "isBackbone", "nodeReferenceSpan", "node", "referenceMidpoints", "midpoints", "span", "EDGE_DEFAULT_COLOR", "packAbgr", "EDGE_PATH_FALLBACK_COLOR", "EDGE_DELETION_COLOR", "DELETION_THICKNESS_FACTOR", "LIFT_BACKDROP_COLOR", "FADED_ALPHA", "MOVED_ALPHA", "LIFT_BACKDROP_CSS", "abgrToCssRgba", "fadeAbgr", "DELETION_DASH_PX", "MIN_PATH_STRIPE_PX", "MIN_SCALE_FOR_OFFSET", "ARROW_LENGTH_BASE_PX", "ARROW_LENGTH_PER_EDGE_PX", "ARROW_HALF_WIDTH_BASE_PX", "ARROW_HALF_WIDTH_PER_EDGE_PX", "MIN_LINK_HEADS", "MIN_ARROW_FIT", "MIN_ARROW_SCALE", "ARROW_CURVE_STEPS", "ABUTTING_PX", "walkX", "walkY", "walkPx", "backFromEnd", "curves", "scale", "yToX", "untilPx", "most", "last", "n", "px", "ci", "c", "k", "t", "a", "b", "d", "e", "x", "y", "walkPointAt", "i", "from", "to", "f", "arrowheadFor", "edgeHalfWidth", "nodeHalfWidth", "color", "fromSegments", "toSegments", "length", "lengthPx", "abutting", "inset", "fit", "polylinePx", "tip", "base", "dx", "dy", "endTangent", "intoDirection", "FIRST_THREADS", "ONE_PASS", "NO_SHIFT", "nearerStart", "at", "segments", "gap", "p", "leavesStart", "edge", "first", "stranded", "strandSides", "final", "normal", "len", "MITRE_LIMIT", "LONGEST_NORMAL", "pointNormalsOf", "rawPoints", "points", "before", "after", "nx", "ny", "dot", "offsetPolyline", "normals", "distance", "out", "hslToRgb", "h", "s", "l", "m", "r", "g", "packHsl", "DEPTH_GRADIENT", "STABLE_RANK_GRADIENT", "NODE_LENGTH_GRADIENT", "sampleGradient", "stops", "pos", "hashColor", "str", "alpha", "nameHue", "PATH_SATURATION", "PATH_LIGHTNESS", "REFERENCE_RAMP_ALT_RGB", "REFERENCE_RAMP_ALT_COLOR", "REFERENCE_RAMP_ALT_CSS", "rampFraction", "node", "ramp", "mid", "isBackbone", "computeReferenceRamp", "graph", "domain", "midpoints", "referenceMidpoints", "min", "max", "computeColorSchemeRange", "referenceRamp", "minDepth", "maxDepth", "minLength", "maxLength", "maxRank", "getNodeColor", "nodeIndex", "colorScheme", "range", "rampHueAt", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "hue", "into", "candidates", "isPolylineInBounds", "bounds", "hit", "isBezierInBounds", "growX", "growY", "cMinX", "cMaxX", "cMinY", "cMaxY", "paletteCache", "pathPaletteOf", "palette", "pathColorByIndex", "pathIndexByName", "paths", "pathHueAt", "slotsCache", "NO_SLOTS", "pathSlotsOf", "slots", "pathIdx", "path", "nodeId", "pushTo", "lanesCache", "weakMemo", "stepsCache", "linksCache", "linksOf", "links", "buildGeometry", "options", "nodePositions", "nodeById", "contigThickness", "connectorThickness", "drawPaths", "nodeWidth", "edgeWidth", "highlight", "axis", "linearLayout", "viewportBounds", "deletions", "deletionRoutes", "hiddenEdges", "version", "widthScale", "widthNorm", "busiest", "busiestEdge", "worldPerScreenPx", "yToXOf", "sharedCurves", "baseEdgeCurves", "nodeStrokes", "nodeStrokeRuns", "arrows", "arrowRuns", "edgeCurves", "edgeCurveRuns", "colorRange", "nodeIndexMap", "pathCount", "pathColorByName", "name", "nodePathSlots", "liftedWalks", "threaded", "threadsPasses", "lanePasses", "w", "thinned", "bandScale", "fields", "liftLanes", "walkSteps", "lines", "threads", "spanField", "plainCentres", "slotCentres", "centresByNode", "centresOf", "centres", "spans", "laneOffset", "laneWidth", "lane", "pass", "THREAD_PITCH_PX", "threadOffsetAt", "frame", "fallback", "eased", "laneHalfWidth", "THREAD_PX", "plainNormals", "visitNormals", "visitOf", "thread", "plainNormalsOf", "laneNormalsOf", "laneWidths", "laneWidthOf", "id", "width", "walkLaneWidthPx", "nodeWidthPx", "laneEndOf", "frames", "atStart", "lanesMayShow", "fromId", "offset", "bandWidthPx", "reach", "threadPairs", "own", "ahead", "back", "turned", "threadColor", "visitPoints", "lanePointsOf", "shifts", "showArrows", "ei", "baseCurves", "numPaths", "isDeletion", "onWalk", "ribbonThickness", "walkFactor", "edgeWidthFactor", "edgeThickness", "ribbons", "plainEdgeColor", "edgeColor", "toNode", "intoHalfWidth", "inView", "dashesOf", "dashSpans", "stroke", "thickness", "dash", "laneStroke", "walk", "normal2", "offsetX", "endNormal", "endOffsetX", "start", "end", "laneSlideAt", "arrowOn", "head", "edgeCurveStart", "arrowStart", "laneWalks", "fromAtStart", "toAtStart", "single", "fromFrames", "toFrames", "toPass", "slideCurves", "translateCurves", "offsets", "pathRibbonOffsets", "arrowRibbon", "ribbonColor", "edgeCurveCount", "arrowCount", "faded", "nodeThickness", "slotWidth", "drawable", "lanes", "laneColor", "onThreads", "color2", "plain", "o", "slot", "stripe", "count", "WALK_FIELDS", "WALK_SCHEMES", "FAMILIES", "isField", "v", "f", "isScheme", "s", "resolveEncoding", "layer", "reference", "picked", "alone", "askedField", "askedScheme", "field", "family", "scheme", "round", "SHADES", "TOGETHER_DARKEST", "BASE_T", "STRETCH_GAP", "rampsOn", "splitFamilies", "encodings", "counts", "e", "seen", "k", "j", "half", "along", "stretch", "t", "toLinear", "c", "toGamma", "oklab", "hex", "r", "g", "b", "i", "l", "m", "oklabToRgb", "L", "a", "endsCache", "oklabEnds", "schemeRgb", "darkest", "x", "ends", "hslToRgb", "rampHueAt", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "from", "to", "light", "dark", "reach", "schemeCss", "schemeColor", "packAbgr", "encodedColor", "encoding", "shade", "NO_VALUE_COLOR", "REFERENCE_RAMP_ALT_COLOR", "encodingStops", "stop", "offset", "_"]
|
|
7
7
|
}
|