jbrowse-plugin-graphgenomeviewer 8.3.2 → 8.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{GbzBaseSyntenyAdapter-W5J3E5VT.js → GbzBaseSyntenyAdapter-OLFYIFN4.js} +2 -2
- package/dist/chunks/{GbzBaseSyntenyAdapter-W5J3E5VT.js.map → GbzBaseSyntenyAdapter-OLFYIFN4.js.map} +1 -1
- package/dist/chunks/{GraphGenomeView-NLPWMIBS.js → GraphGenomeView-TC3UNRFN.js} +2 -2
- package/dist/chunks/{GraphTrackSettingsDialog-7LHAOYX3.js → GraphTrackSettingsDialog-JZBOLXZW.js} +2 -2
- package/dist/chunks/{HighlightColorDialog-YQEMRPZ6.js → HighlightColorDialog-4VGVC7SN.js} +2 -2
- package/dist/chunks/{LinearGraphDisplay-BEU7V4JU.js → LinearGraphDisplay-6IO5ADGB.js} +2 -2
- package/dist/chunks/{MinigraphBubbleAdapter-FZZLY3ZI.js → MinigraphBubbleAdapter-X4VJ3AEX.js} +2 -2
- package/dist/chunks/{RgfaTabixAdapter-DXBQEVFS.js → RgfaTabixAdapter-535GN32R.js} +2 -2
- package/dist/chunks/{WalkFormsAdapter-ZKZ5PUYO.js → WalkFormsAdapter-DAGNKDXV.js} +2 -2
- package/dist/chunks/{WalkTabixSyntenyAdapter-HEGPYGKB.js → WalkTabixSyntenyAdapter-M453NH3L.js} +2 -2
- package/dist/chunks/chunk-2EDOJEF3.js +4 -0
- package/dist/chunks/chunk-2EDOJEF3.js.map +7 -0
- package/dist/chunks/{chunk-IQQOJGX3.js → chunk-37XRCKBJ.js} +2 -2
- package/dist/chunks/{chunk-IQQOJGX3.js.map → chunk-37XRCKBJ.js.map} +1 -1
- package/dist/chunks/{chunk-5X3OZSDO.js → chunk-4CP5H6LQ.js} +2 -2
- package/dist/chunks/chunk-52L7CQAG.js +3 -0
- package/dist/chunks/chunk-52L7CQAG.js.map +7 -0
- package/dist/chunks/chunk-A4YJFEBE.js +2 -0
- package/dist/chunks/{chunk-MFMAQO3W.js → chunk-B6YUND32.js} +2 -2
- package/dist/chunks/{chunk-MFMAQO3W.js.map → chunk-B6YUND32.js.map} +1 -1
- package/dist/chunks/{chunk-ZWRAQSXC.js → chunk-BI2RYKPA.js} +2 -2
- package/dist/chunks/{chunk-ZWRAQSXC.js.map → chunk-BI2RYKPA.js.map} +1 -1
- package/dist/chunks/{chunk-OMF5XFKR.js → chunk-CCPRHM4X.js} +1 -1
- package/dist/chunks/{chunk-OMF5XFKR.js.map → chunk-CCPRHM4X.js.map} +1 -1
- package/dist/chunks/{chunk-HM7XSNBN.js → chunk-DXJSOZY2.js} +1 -1
- package/dist/chunks/{chunk-HM7XSNBN.js.map → chunk-DXJSOZY2.js.map} +1 -1
- package/dist/chunks/{chunk-MNFL7BAC.js → chunk-ELO4G2TG.js} +2 -2
- package/dist/chunks/{chunk-MNFL7BAC.js.map → chunk-ELO4G2TG.js.map} +1 -1
- package/dist/chunks/{chunk-TNEXOJ5F.js → chunk-JBQSIRNH.js} +1 -1
- package/dist/chunks/{chunk-TNEXOJ5F.js.map → chunk-JBQSIRNH.js.map} +1 -1
- package/dist/chunks/{chunk-KM2INI7Q.js → chunk-MBGXXS3Z.js} +2 -2
- package/dist/chunks/{chunk-KM2INI7Q.js.map → chunk-MBGXXS3Z.js.map} +1 -1
- package/dist/chunks/{chunk-EKIQ3ATV.js → chunk-NLMAQYCK.js} +2 -2
- package/dist/chunks/{chunk-EKIQ3ATV.js.map → chunk-NLMAQYCK.js.map} +1 -1
- package/dist/chunks/{chunk-Y7VFVMQI.js → chunk-QCEM5AXZ.js} +2 -2
- package/dist/chunks/{chunk-Y7VFVMQI.js.map → chunk-QCEM5AXZ.js.map} +1 -1
- package/dist/chunks/{chunk-D6NFDQQI.js → chunk-QY2UJ4TX.js} +2 -2
- package/dist/chunks/{chunk-YMK7HFJV.js → chunk-SZZZD7I3.js} +2 -2
- package/dist/chunks/{chunk-JTOW3TOE.js → chunk-UMCYJHEB.js} +2 -2
- package/dist/chunks/{chunk-VP6AGIRF.js → chunk-UZYU3HDD.js} +2 -2
- package/dist/chunks/{chunk-NB4X56M3.js → chunk-YUA46UN2.js} +2 -2
- package/dist/chunks/{chunk-NB4X56M3.js.map → chunk-YUA46UN2.js.map} +1 -1
- package/dist/chunks/{chunk-2FCFK2B5.js → chunk-YVRZM7FP.js} +1 -1
- package/dist/chunks/{chunk-2FCFK2B5.js.map → chunk-YVRZM7FP.js.map} +1 -1
- package/dist/chunks/{renderSvg-XIEGA5N5.js → renderSvg-MNRHFE4C.js} +2 -2
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +2 -2
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +2 -2
- package/package.json +2 -2
- package/src/RgfaTabixAdapter/configSchema.ts +1 -1
- package/src/WalkFormsAdapter/configSchema.ts +1 -1
- package/src/WalkTabixSyntenyAdapter/configSchema.ts +1 -1
- package/src/version.ts +1 -1
- package/dist/chunks/chunk-D7MOOK6H.js +0 -4
- package/dist/chunks/chunk-D7MOOK6H.js.map +0 -7
- package/dist/chunks/chunk-EINURNZ6.js +0 -2
- package/dist/chunks/chunk-XBZ4C4R3.js +0 -3
- package/dist/chunks/chunk-XBZ4C4R3.js.map +0 -7
- /package/dist/chunks/{GraphGenomeView-NLPWMIBS.js.map → GraphGenomeView-TC3UNRFN.js.map} +0 -0
- /package/dist/chunks/{GraphTrackSettingsDialog-7LHAOYX3.js.map → GraphTrackSettingsDialog-JZBOLXZW.js.map} +0 -0
- /package/dist/chunks/{HighlightColorDialog-YQEMRPZ6.js.map → HighlightColorDialog-4VGVC7SN.js.map} +0 -0
- /package/dist/chunks/{LinearGraphDisplay-BEU7V4JU.js.map → LinearGraphDisplay-6IO5ADGB.js.map} +0 -0
- /package/dist/chunks/{MinigraphBubbleAdapter-FZZLY3ZI.js.map → MinigraphBubbleAdapter-X4VJ3AEX.js.map} +0 -0
- /package/dist/chunks/{RgfaTabixAdapter-DXBQEVFS.js.map → RgfaTabixAdapter-535GN32R.js.map} +0 -0
- /package/dist/chunks/{WalkFormsAdapter-ZKZ5PUYO.js.map → WalkFormsAdapter-DAGNKDXV.js.map} +0 -0
- /package/dist/chunks/{WalkTabixSyntenyAdapter-HEGPYGKB.js.map → WalkTabixSyntenyAdapter-M453NH3L.js.map} +0 -0
- /package/dist/chunks/{chunk-5X3OZSDO.js.map → chunk-4CP5H6LQ.js.map} +0 -0
- /package/dist/chunks/{chunk-EINURNZ6.js.map → chunk-A4YJFEBE.js.map} +0 -0
- /package/dist/chunks/{chunk-D6NFDQQI.js.map → chunk-QY2UJ4TX.js.map} +0 -0
- /package/dist/chunks/{chunk-YMK7HFJV.js.map → chunk-SZZZD7I3.js.map} +0 -0
- /package/dist/chunks/{chunk-JTOW3TOE.js.map → chunk-UMCYJHEB.js.map} +0 -0
- /package/dist/chunks/{chunk-VP6AGIRF.js.map → chunk-UZYU3HDD.js.map} +0 -0
- /package/dist/chunks/{renderSvg-XIEGA5N5.js.map → renderSvg-MNRHFE4C.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-YUIKEUKY.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-G2FD7S3C.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-GQZVR5DW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-URPU4XCM.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-L4DBSRA2.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-YA3VYQH4.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.2.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ACGRXI3X.js"],
|
|
4
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-ALGYCMMH.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 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-URPU4XCM.js\";\nimport {\n PATH_LIGHTNESS,\n PATH_SATURATION,\n nameHue,\n pathHueAt\n} from \"./chunk-HI5GLE7C.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 edgeCurves.push({\n curves,\n thickness,\n color,\n walk,\n pass,\n normal: normal2,\n offsetX,\n endNormal,\n endOffsetX\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-YA3VYQH4.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
5
|
"mappings": "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",
|
|
6
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", "pointIndex", "run", "p", "i", "k", "gapOf", "a", "b", "dx", "dy", "arcOf", "s", "walkSteps", "walkRoutes", "nodePositions", "seen", "routes", "visits", "route", "id", "visit", "segments", "owned", "laneRuns", "steps", "yToX", "jump", "runs", "pieces", "walk", "total", "piece", "xs", "ys", "at", "from", "fresh", "breakRun", "stepOf", "gap", "x", "y", "first", "last", "forward", "toFirst", "toLast", "next", "toNext", "j", "ownedWindows", "margin", "windows", "floor", "lo", "hi", "smoothedNormals", "reach", "end", "pointAt", "span", "f", "_", "back", "ahead", "len", "cutCurls", "close", "length", "out", "picks", "to", "j2", "q", "rounded", "half", "n", "sumW", "sumX", "sumY", "w", "tightPoints", "line", "radius", "tight", "along", "twice", "loosened", "t", "pass", "part", "local", "weight", "windowMean", "smoother", "runSigns", "own", "canonical", "settle", "agreement", "sum2", "decided", "pending", "theirs", "mine", "laneLines", "band", "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", "m", "px", "py", "shift", "windowed", "v", "deque", "head", "counted", "sumWV", "ONE_THREAD", "repeats", "passes", "walkThreads", "widths", "stepVisits", "stepWants", "stepGlides", "nodes", "mid", "most", "copy", "before", "after", "wants", "glides", "nearest", "want", "taken", "threadOf", "free", "width", "c", "glideOf", "glide", "nodeThreads", "threadPasses", "threadAt", "passOf", "thread", "linkThreads", "pair", "list", "bandSpans", "spans", "taper", "middle", "eased", "e", "easeOffsets", "threads", "plain", "slotCentres", "byNode", "centresAt", "centres", "THREAD_PITCH_PX", "frame", "constant", "offsets", "liftLanes", "walks", "worldPerScreenPx", "threaded", "threadsPasses", "THREAD_REACH_PX", "LANE_SMOOTHING_PX", "bandWidthPx", "bandScale", "lines", "THREAD_TAPER_PX", "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", "arrowOn", "head", "edgeCurveStart", "arrowStart", "laneWalks", "fromAtStart", "toAtStart", "single", "fromFrames", "toFrames", "toPass", "slideCurves", "translateCurves", "offsets", "pathRibbonOffsets", "arrowRibbon", "ribbonColor", "edgeCurveCount", "arrowCount", "faded", "nodeThickness", "start", "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", "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", "_"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as te,o as se,r as ft}from"./chunk-MNFL7BAC.js";import{a as Et,c as ee,d as Bt,e as Ft}from"./chunk-OMF5XFKR.js";var ye="ws",we="we",ne=["elsewhere","break","end"],Ee={missing:"not in the graph",elsewhere:"on nodes filed elsewhere",unknown:"gap, cause unknown",abridged:"abridged: steps not loaded",deleted:"deleted in this haplotype"},Fe="outside the extracted subgraph";function oe(t,e,s){if(!e&&!s)return[{bp:t}];let n=Math.min(e?.trimmed??0,t),r=Math.min(s?.trimmed??0,t-n),c=t-n-r,p=e?.kind==="break"?Math.min(e.bp,c):0;c-=p;let l=s?.kind==="break"?Math.min(s.bp,c):0;c-=l;let h=[e,s].find(f=>f?.kind==="elsewhere");return[{bp:n},{bp:p,cause:"missing"},h?.kind==="elsewhere"?{bp:c,cause:"elsewhere",chunk:h.chunk}:{bp:c,cause:"unknown"},{bp:l,cause:"missing"},{bp:r}].filter(f=>f.bp>0)}function Ct(t,e){let s=t.bp[e],n=t.chunkRefs[e];return ae(t.kindNames[t.kinds[e]],Number.isNaN(s)?void 0:s,t.trimmed[e],n<0?void 0:{refName:t.chunkRefNames[n],start:t.chunkStarts[e]})}function ae(t,e,s,n){let r=s>0?{trimmed:s}:{};return t==="elsewhere"&&n?{kind:t,chunk:n,...e===void 0?{}:{bp:e},...r}:t==="break"&&e!==void 0?{kind:t,bp:e,...n?{chunk:n}:{},...r}:t==="end"?{kind:t,...r}:void 0}function re(t){let[e,...s]=t.split(","),n,r=0,c;for(let p of s)if(p.startsWith("bp="))n=+p.slice(3);else if(p.startsWith("trimmed="))r=+p.slice(8);else if(p.startsWith("chunk=")){let l=p.lastIndexOf(":");c={refName:p.slice(6,l),start:+p.slice(l+1)}}return ae(e,n,r,c)}function Gt(t,e){return{...t?{before:t}:{},...e?{after:e}:{}}}function Te(t){let e=t[ye],s=t[we];return Gt(typeof e=="string"?re(e):void 0,typeof s=="string"?re(s):void 0)}var Pe=class{constructor(){this.kinds=[],this.bp=[],this.trimmed=[],this.chunkRefs=[],this.chunkStarts=[],this.chunkRefNames=[],this.refIndex=new Map}push(t){this.kinds.push(ne.indexOf(t.kind)),this.bp.push("bp"in t&&t.bp!==void 0?t.bp:NaN),this.trimmed.push(t.trimmed??0);let e="chunk"in t?t.chunk:void 0;if(e){let s=this.refIndex.get(e.refName);s===void 0&&(s=this.chunkRefNames.length,this.refIndex.set(e.refName,s),this.chunkRefNames.push(e.refName)),this.chunkRefs.push(s),this.chunkStarts.push(e.start)}else this.chunkRefs.push(-1),this.chunkStarts.push(NaN)}table(){return{kinds:Uint8Array.from(this.kinds),kindNames:[...ne],bp:Float64Array.from(this.bp),trimmed:Float64Array.from(this.trimmed),chunkRefs:Int32Array.from(this.chunkRefs),chunkStarts:Float64Array.from(this.chunkStarts),chunkRefNames:this.chunkRefNames}}};function Se(t,e,s){return e===0?t:`${t}:${e}-${s}`}function Lt(t,e){let s=t.names[e],n=Ft(s),r=t.starts[e],c=t.abridgedSteps?.[e]??Number.NaN,p=Number.isNaN(c)?{}:{abridged:{steps:c,bp:t.abridgedBp?.[e]??0}};return n?{name:`${n.sample}#${n.haplotype}#${n.contig}`,start:r,...n,...Gt(t.before&&Ct(t.before,e),t.after&&Ct(t.after,e)),...p}:{name:Se(s,r,t.ends[e]),start:r}}function Ae(t,e,s,n){let r=new Int32Array(s+1);for(let h of t)r[h+1]++;for(let h=0;h<s;h++)r[h+1]+=r[h];let c=r.slice(0,s),p=new Int32Array(t.length);t.forEach((h,w)=>{p[c[h]++]=e[w]});let l=new Int32Array(n.length).fill(-1);return Array.from({length:s},(h,w)=>{let f=[];for(let F=r[w];F<r[w+1];F++){let v=p[F];l[v]!==w&&(l[v]=w,f.push(n[v]))}return f})}function Wt({nodes:t,links:e,walks:s},n){let r=new Uint8Array(t.names.length),c=(l,h)=>{r[l]===0&&(r[l]=h?2:1)};for(let l=0;l<e.from.length;l++)c(e.from[l],e.strands[l]&1),c(e.to[l],e.strands[l]&2);let p=s.offsets[s.names.length]??0;for(let l=0;l<p;l++){let h=s.steps[l];c(h,s.reversed[l]),n&&n[h]++}return t.names.map((l,h)=>`${l}${r[h]===2?"-":"+"}`)}function Le({nodes:t,links:e,walks:s},n="Imported GFA"){let r=t.names.length,c=t.lengths.length,p=[];for(let o=0;o<s.names.length;o++)s.offsets[o+1]>s.offsets[o]&&p.push(o);let l=new Int32Array(r),h=Wt({nodes:t,links:e,walks:s},l),w=[];for(let o=0;o<c;o++){let k=t.refs[o];w.push({id:h[o],name:t.names[o],length:t.lengths[o],depth:Math.max(l[o],1),stable:k<0?void 0:{refName:t.refNames[k],start:t.starts[o],rank:t.ranks[o]},samples:void 0})}let f=[],F=new Array(r),v=(o,k)=>{let g=F[o];if(g){for(let x=0;x<g.length;x+=2)if(g[x]===k)return g[x+1]}},E=(o,k,g)=>{let x=F[o];x?x.push(k,g):F[o]=[k,g]},B=[],Y=0;for(let o=0;o<e.from.length;o++){let k=e.from[o],g=e.to[o];f.push({from:h[k],to:h[g],fromStrand:e.strands[o]&1?"-":"+",toStrand:e.strands[o]&2?"-":"+"});let x=v(k,g);x===void 0&&(x=Y++,E(k,g,x),E(g,k,x)),B.push(x)}let U=new Int32Array(r+1);for(let o=0;o<r;o++)U[o+1]=U[o]+(F[o]?.length??0)/2;let tt=new Int32Array(U[r]),lt=new Int32Array(U[r]);F.forEach((o,k)=>{for(let g=0;g<o.length;g+=2)tt[U[k]+g/2]=o[g],lt[U[k]+g/2]=o[g+1]});let yt=(o,k)=>{for(let g=U[o];g<U[o+1];g++)if(tt[g]===k)return lt[g];return-1},V=new Map,et=[],T=new Int32Array(s.offsets[s.names.length]??0),ht=new Int32Array(T.length),Z=0,H=new Int32Array(Y).fill(-1),X=[],M=[],dt=s.offsets[s.names.length]??0,_=new Int32Array(dt),st=new Float64Array(dt),pt=new Uint8Array(dt),nt=new Int32Array(r).fill(-1),D=[],I=[0],P=[],mt=new Map,ut=[];for(let o of p){let k=Lt(s,o),{start:g,name:x}=k,z=k.sample===void 0?s.names[o]:x,K=V.get(z);K===void 0&&(K=et.length,V.set(z,K),et.push(z),P.push(Et(z)));let rt=mt.get(x);rt===void 0&&(rt=ut.length,mt.set(x,rt),ut.push(x));let Tt=P[K],gt=s.offsets[o],St=new Array(s.offsets[o+1]-gt),a=g,d=-1;for(let S=gt;S<s.offsets[o+1];S++){let R=s.steps[S];St[S-gt]=h[R],nt[R]===-1&&(nt[R]=I.at(-1),I.push(nt[R]+l[R]),D.push(R));let O=nt[R]++;if(_[O]=K,st[O]=a,pt[O]=s.reversed[S],a+=R<c?t.lengths[R]:0,d>=0){let N=yt(d,R);N>=0&&H[N]!==o&&(H[N]=o,T[Z]=N,ht[Z++]=rt)}d=R}X.push({...k,nodeIds:St}),M.push({name:z,sample:Tt,start:g,length:a-g})}let wt=Ae(T.subarray(0,Z),ht,Y,ut);f.forEach((o,k)=>{let g=wt[B[k]];g.length>0&&(o.pathIds=g)});let C=p.length>0;return{name:n,nodes:w,edges:f,paths:C?X:void 0,anchorPaths:C?M:void 0,pathVisits:C?new se({segments:D.map(o=>t.names[o]),offsets:Int32Array.from(I),path:_.subarray(0,I.at(-1)),start:st.subarray(0,I.at(-1)),reversed:pt.subarray(0,I.at(-1)),paths:et,samples:P}):void 0,anchoredBy:w.some(o=>o.stable)?"tags":void 0}}var Dt=1,le=2,vt=4,he=[void 0,"missing","elsewhere","unknown","abridged","deleted"],de=3,ie=t=>he.indexOf(t)<<de;function pe(t,e,s){return e!==void 0&&t.includes(e)?e:t.find(n=>s.has(n))??t[0]}function Ie(t){return pe((t.paths??[]).map(e=>ft(e.name).name),t.referencePath,new Set(t.nodes.flatMap(e=>e.stable?.rank===0?[e.stable.refName]:[])))}var me=t=>{let e=t&&Bt(t);return s=>s!==void 0&&(s===t||s===e)};function Re(t){let e=new Map,s=[],n=[],r=v=>{let E=e.get(v);return E===void 0&&(E=s.length,e.set(v,E),s.push(v),n.push(0)),E},c=Ie(t),p=me(c),l=new Map;for(let v of t.nodes){let E=r(v.id);n[E]=v.length,v.stable?.rank===0&&p(v.stable.refName)&&l.set(E,v.stable.start)}let h=t.paths??[],w=new Int32Array(h.length),f=new Int32Array(h.length),F=[];return h.forEach((v,E)=>{w[E]=F.length;for(let B of v.nodeIds)F.push(r(B));f[E]=F.length}),{heads:h,from:w,to:f,steps:Int32Array.from(F),lengths:Int32Array.from(n),names:s,reference:c,stableStart:v=>l.get(v)??Number.NaN}}function $e(t,e,s){let{nodes:n,walks:r}=t,c=[];for(let f=0;f<r.names.length;f++)r.offsets[f+1]>r.offsets[f]&&c.push(f);let p=c.map(f=>Lt(r,f)),l=new Set;for(let f=0;f<n.lengths.length;f++)n.refs[f]>=0&&n.ranks[f]===0&&l.add(n.refNames[n.refs[f]]);let h=pe(p.map(f=>ft(f.name).name),e,l),w=me(h);return{heads:p,from:Int32Array.from(c,f=>r.offsets[f]),to:Int32Array.from(c,f=>r.offsets[f+1]),steps:r.steps,lengths:n.lengths,names:s?Wt(t):n.names,reference:h,stableStart:f=>f<n.lengths.length&&n.ranks[f]===0&&w(n.refNames[n.refs[f]])?n.starts[f]:Number.NaN}}function Vt(t){return t.sample??Et(t.name)}function ce(t){return t.haplotype!==void 0&&t.sample!==void 0?`${t.sample}#${t.haplotype}`:Vt(t)}var fe=class{constructor(t){this.offsets=[0],this.values=Array.from({length:t},()=>[])}get length(){return this.values[0].length}push(t,e,s,n,r){let c=this.values;c[0].push(t),c[1].push(e),c[2].push(s),c[3].push(n),r!==void 0&&c[4].push(r)}endRow(){this.offsets.push(this.length)}reorder(t,e){let s=new Uint32Array(t.length+1);t.forEach((r,c)=>{s[c+1]=s[c]+this.offsets[r+1]-this.offsets[r]});let n=e.map((r,c)=>{let p=this.values[c],l=r(this.length),h=0;for(let w of t)for(let f=this.offsets[w];f<this.offsets[w+1];f++)l[h++]=p[f];return l});return{offsets:s,columns:n}}},kt=t=>new Float64Array(t);function ze(t,e,s={}){let{heads:n,from:r,to:c,steps:p,lengths:l,names:h,reference:w,stableStart:f}="walks"in t?$e(t,s.referencePath,s.visits):Re(t),F=l.length,v=a=>a<F?l[a]:0,E=a=>ft(n[a].name).name,B=a=>n[a].start,Y=(a,d)=>(B(a)??0)-(B(d)??0),U=n.map((a,d)=>d),tt=U.filter(a=>E(a)===w).sort(Y),lt=tt[0],yt=U.filter(a=>E(a)!==w),V="walks"in t?t.skips:void 0;if(lt===void 0||yt.length===0&&!V?.names.length)return;let et=te(yt,E),T=new Float64Array(h.length).fill(Number.NaN),ht=new Float64Array(h.length),Z=new Map,H=-1/0,X=1/0,M=e&&e.end>e.start?e:void 0;for(let a of tt){let d=B(a)??0;for(let S=r[a],R=c[a];S<R;S++){let O=p[S],N=v(O);if(Number.isNaN(T[O]))T[O]=d,ht[O]=d+N,M&&(d+N<=M.start&&(H=Math.max(H,d+N)),d>=M.end&&(X=Math.min(X,d)));else{let bt=Z.get(O);bt?bt.push(d):Z.set(O,[T[O],d])}d+=N}}let dt=M===void 0||H>-1/0&&X<1/0,_=new fe(5),st=[],pt=new Map,nt=a=>{if(!a)return-1;let d=`${a.refName}:${a.start}`,S=pt.get(d);return S===void 0&&(S=st.length,pt.set(d,S),st.push(a)),S},D=s.visits?new fe(4):void 0,I=new Int32Array(0),P=new Float64Array(0),mt=a=>{let d=n[a[0]],S=[...a].sort(Y),R=S.length-1,O=0;for(let i of S)R+=c[i]-r[i]+(n[i].abridged?1:0),O+=n[i].abridged?.steps??0;R>I.length&&(I=new Int32Array(R*2),P=new Float64Array(R*2));let N=0,bt=!1,At,It,q=new Map,Pt=0;for(let i of S){let m=B(i),y=m===void 0||At===void 0?0:m-At;(m===void 0||y<0)&&(bt=!0),y<0&&n[It].abridged&&(Pt-=y);let A=Math.min(Pt,Math.max(y,0));Pt-=A;let u=y-A;u>0&&(q.set(N,oe(u,It===void 0?void 0:n[It].after,n[i].before)),I[N]=-u,P[N++]=At);let b=m??0,$=n[i].abridged;for(let j=r[i],Q=c[i];j<Q;j++){let G=p[j],W=$?$.bp-(b-(m??0))-v(G):0;W>0&&j===Q-1&&j>r[i]&&(q.set(N,[{bp:W,cause:"abridged"}]),I[N]=-W,P[N++]=b,b+=W),I[N]=G,P[N++]=b,b+=v(G)}At=m===void 0?void 0:b,It=i}let Zt=i=>i>=0&&i<N&&I[i]>=0&&!Number.isNaN(T[I[i]]),_t=i=>{let m=I[i];return P[i]+(m<0?-m:v(m))},ue=(i,m)=>{let y=i>=0?i:m,A=-1;for(let G=1;A<0&&G<N;G++)A=[y-G,y+G].find(Zt)??-1;if(A<0)return;let u=A>y==T[I[A]]>T[I[y]],b=u===(y===i),$=b?N-1:0,j=Zt($);return{stop:{contigEnds:j,shortBp:j?Math.max(0,M.start-ht[I[$]],T[I[$]]-M.end):0},lo:b?y+1:0,hi:b?N:y,backward:!u,axisStart:u?b?_t(y):P[0]:b?_t(N-1):P[y]}},Rt=0,$t=N,ot=!1,Ht=!0,Nt=-1,Xt=-1,Ut,zt,Kt=(i,m)=>{let A=q.get(i)?.[0];if(m<=0||A?.cause!=="abridged")return 0;let u=Math.min(m,A.bp);return q.set(i,A.bp>u?[{...A,bp:A.bp-u}]:[]),I[i]+=u,u},qt=i=>q.get(i)?.[0]?.cause==="abridged",ge=i=>{let m=I[i];return m<0||q.has(i)?Number.NaN:Number.isNaN(T[m])&&(qt(i-1)||qt(i+1))?f(m):T[m]},Mt=0,Jt=0;if(M&&dt){let i=-1,m=-1,y=-1/0,A=1/0;for(let u=0;u<N;u++){let b=ge(u);if(!Number.isNaN(b)){let $=b+v(I[u]);$<=M.start&&$>y&&(y=$,i=u),b>=M.end&&b<A&&(A=b,m=u)}}if(i<0||m<0){Ht=!1;let u=i>=0||m>=0?ue(i,m):void 0;u&&({lo:Rt,hi:$t,backward:ot,axisStart:Ut,stop:zt}=u)}else{Rt=Math.min(i,m)+1,$t=Math.max(i,m),ot=i>m,Nt=i,Xt=m;let u=ot?-1:1;Mt=Kt(i+u,H-y),Jt=Kt(m-u,A-X)}}let xt=d.contig??Bt(ft(d.name).name),be=bt||N===0?void 0:Ut!==void 0?{contig:xt,start:Ut,reversed:ot}:Nt<0?{contig:xt,start:P[0],reversed:!1}:Nt<Xt?{contig:xt,start:_t(Nt)+Mt,reversed:!1}:{contig:xt,start:P[Nt]-Mt,reversed:!0},at=0,Qt=0,Yt=0,it=0,L=-1,ct=0,J=Number.NaN,Ot=Number.NaN,Ne=i=>{let m=Z.get(i);if(!m||Number.isNaN(Ot))return T[i];let y=v(i),A=m[0],u=1/0;for(let b of m){let $=Math.min(Math.abs(b-Ot),Math.abs(b+y-Ot));$<u&&(A=b,u=$)}return A},[,jt,ve,ke]=_.values;for(let i=Rt;i<$t;i++){let m=ot?$t-1-(i-Rt):i,y=I[m],A=q.get(m);if(A){for(let W of ot?[...A].reverse():A)_.push(at,W.bp,Number.NaN,vt|ie(W.cause),nt(W.chunk)),at+=W.bp;L=_.length-1,ct=vt,J=Number.NaN,Yt+=-y,it=0;continue}let u=v(y),b=Ne(y),$=!Number.isNaN(b);D?.push(y,at,u,$?1:0);let j=L>=0&&!Number.isNaN(J),Q=$&&j&&it>=0&&J+(jt[L]??0)===b,G=$&&j&&it<=0&&b+u===J;!$&&L>=0&&!(ct&(Dt|vt))?jt[L]+=u:Q||G?(jt[L]+=u,Q||(J=b,ve[L]=b,ct|=le,ke[L]=ct),it=Q?1:-1):(ct=$?Dt:0,J=$?b:Number.NaN,_.push(at,u,J,ct,-1),L=_.length-1,it=0),at+=u,$?Ot=it<0?b:b+u:Qt+=u}return _.endRow(),D?.endRow(),{name:d.name,label:ce(d),sample:Vt(d),haplotype:d.haplotype,bp:at,offReferenceBp:Qt,gapBp:Yt,complete:Ht,stop:zt,axis:be,...O>0?{abridgedSteps:O}:{},...Mt+Jt>0?{estimated:!0}:{}}},ut=(a,d,S)=>{let R=M?Math.max(d,M.start):d,O=(M?Math.min(S,M.end):S)-R;_.push(R-(M?M.start:d),O,Number.NaN,vt|ie("deleted"),-1),_.endRow(),D?.endRow();let N={name:a,...Ft(a)};return{name:a,label:ce(N),sample:Vt(N),haplotype:N.haplotype,bp:0,offReferenceBp:0,gapBp:O,complete:!0,stop:void 0,axis:void 0}},wt=mt(tt),C=[...et.values()].map((a,d)=>({meta:mt(a),row:d+1})),o=new Set(et.keys());V?.names.forEach((a,d)=>{let S=ft(a).name;o.has(S)||(o.add(S),C.push({meta:ut(S,V.starts[d],V.ends[d]),row:C.length+1}))});let k=[wt,...C.map(a=>a.meta)];if(new Set(k.map(a=>a.label)).size<k.length)for(let a of k)a.label=ee(a.name)??a.label;C.sort((a,d)=>Number(d.meta.complete)-Number(a.meta.complete)||d.meta.bp-a.meta.bp||a.meta.label.localeCompare(d.meta.label));let g=[0,...C.map(a=>a.row)],{offsets:x,columns:z}=_.reorder(g,[kt,kt,kt,a=>new Uint8Array(a),a=>new Int32Array(a)]),[K,rt,Tt,gt,St]=z;return{origin:M?M.start:B(lt)??0,rows:[wt,...C.map(a=>a.meta)],offsets:x,start:K,bp:rt,referenceStart:Tt,flags:gt,chunk:St,chunks:st,visits:D&&Me(D,g,h)}}function Me(t,e,s){let{offsets:n,columns:r}=t.reorder(e,[w=>new Int32Array(w),kt,kt,w=>new Uint8Array(w)]),[c,p,l,h]=r;return{offsets:n,node:c,start:p,bp:l,onReference:h,names:s}}function xe(t,e){let s=t.flags[e],n={start:t.start[e],bp:t.bp[e],onReference:(s&Dt)!==0};if(s&vt){n.gap=!0;let r=he[s>>de&7];r&&(n.cause=r);let c=t.chunks[t.chunk[e]];c&&(n.chunk=c)}else n.referenceStart=Number.isNaN(t.referenceStart[e])?void 0:t.referenceStart[e];return s&le&&(n.reversed=!0),n}function Oe(t,e){let s=[];for(let n=t.offsets[e];n<t.offsets[e+1];n++)s.push({node:t.names[t.node[n]],start:t.start[n],bp:t.bp[n],onReference:t.onReference[n]===1});return s}function Ke(t,e){let s=t.rows.map((n,r)=>{let c=[];for(let p=t.offsets[r];p<t.offsets[r+1];p++)c.push(xe(t,p));return{...n,runs:c,visits:t.visits&&Oe(t.visits,r)}});return{origin:t.origin,unit:e,reference:s[0],rows:s.slice(1)}}export{ye as a,we as b,Ee as c,Fe as d,oe as e,re as f,Te as g,Pe as h,Lt as i,Le as j,Ie as k,ze as l,Ke as m};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as te,o as se,r as ft}from"./chunk-ELO4G2TG.js";import{a as Et,c as ee,d as Bt,e as Ft}from"./chunk-CCPRHM4X.js";var ye="ws",we="we",ne=["elsewhere","break","end"],Ee={missing:"not in the graph",elsewhere:"on nodes filed elsewhere",unknown:"gap, cause unknown",abridged:"abridged: steps not loaded",deleted:"deleted in this haplotype"},Fe="outside the extracted subgraph";function oe(t,e,s){if(!e&&!s)return[{bp:t}];let n=Math.min(e?.trimmed??0,t),r=Math.min(s?.trimmed??0,t-n),c=t-n-r,p=e?.kind==="break"?Math.min(e.bp,c):0;c-=p;let l=s?.kind==="break"?Math.min(s.bp,c):0;c-=l;let h=[e,s].find(f=>f?.kind==="elsewhere");return[{bp:n},{bp:p,cause:"missing"},h?.kind==="elsewhere"?{bp:c,cause:"elsewhere",chunk:h.chunk}:{bp:c,cause:"unknown"},{bp:l,cause:"missing"},{bp:r}].filter(f=>f.bp>0)}function Ct(t,e){let s=t.bp[e],n=t.chunkRefs[e];return ae(t.kindNames[t.kinds[e]],Number.isNaN(s)?void 0:s,t.trimmed[e],n<0?void 0:{refName:t.chunkRefNames[n],start:t.chunkStarts[e]})}function ae(t,e,s,n){let r=s>0?{trimmed:s}:{};return t==="elsewhere"&&n?{kind:t,chunk:n,...e===void 0?{}:{bp:e},...r}:t==="break"&&e!==void 0?{kind:t,bp:e,...n?{chunk:n}:{},...r}:t==="end"?{kind:t,...r}:void 0}function re(t){let[e,...s]=t.split(","),n,r=0,c;for(let p of s)if(p.startsWith("bp="))n=+p.slice(3);else if(p.startsWith("trimmed="))r=+p.slice(8);else if(p.startsWith("chunk=")){let l=p.lastIndexOf(":");c={refName:p.slice(6,l),start:+p.slice(l+1)}}return ae(e,n,r,c)}function Gt(t,e){return{...t?{before:t}:{},...e?{after:e}:{}}}function Te(t){let e=t[ye],s=t[we];return Gt(typeof e=="string"?re(e):void 0,typeof s=="string"?re(s):void 0)}var Pe=class{constructor(){this.kinds=[],this.bp=[],this.trimmed=[],this.chunkRefs=[],this.chunkStarts=[],this.chunkRefNames=[],this.refIndex=new Map}push(t){this.kinds.push(ne.indexOf(t.kind)),this.bp.push("bp"in t&&t.bp!==void 0?t.bp:NaN),this.trimmed.push(t.trimmed??0);let e="chunk"in t?t.chunk:void 0;if(e){let s=this.refIndex.get(e.refName);s===void 0&&(s=this.chunkRefNames.length,this.refIndex.set(e.refName,s),this.chunkRefNames.push(e.refName)),this.chunkRefs.push(s),this.chunkStarts.push(e.start)}else this.chunkRefs.push(-1),this.chunkStarts.push(NaN)}table(){return{kinds:Uint8Array.from(this.kinds),kindNames:[...ne],bp:Float64Array.from(this.bp),trimmed:Float64Array.from(this.trimmed),chunkRefs:Int32Array.from(this.chunkRefs),chunkStarts:Float64Array.from(this.chunkStarts),chunkRefNames:this.chunkRefNames}}};function Se(t,e,s){return e===0?t:`${t}:${e}-${s}`}function Lt(t,e){let s=t.names[e],n=Ft(s),r=t.starts[e],c=t.abridgedSteps?.[e]??Number.NaN,p=Number.isNaN(c)?{}:{abridged:{steps:c,bp:t.abridgedBp?.[e]??0}};return n?{name:`${n.sample}#${n.haplotype}#${n.contig}`,start:r,...n,...Gt(t.before&&Ct(t.before,e),t.after&&Ct(t.after,e)),...p}:{name:Se(s,r,t.ends[e]),start:r}}function Ae(t,e,s,n){let r=new Int32Array(s+1);for(let h of t)r[h+1]++;for(let h=0;h<s;h++)r[h+1]+=r[h];let c=r.slice(0,s),p=new Int32Array(t.length);t.forEach((h,w)=>{p[c[h]++]=e[w]});let l=new Int32Array(n.length).fill(-1);return Array.from({length:s},(h,w)=>{let f=[];for(let F=r[w];F<r[w+1];F++){let v=p[F];l[v]!==w&&(l[v]=w,f.push(n[v]))}return f})}function Wt({nodes:t,links:e,walks:s},n){let r=new Uint8Array(t.names.length),c=(l,h)=>{r[l]===0&&(r[l]=h?2:1)};for(let l=0;l<e.from.length;l++)c(e.from[l],e.strands[l]&1),c(e.to[l],e.strands[l]&2);let p=s.offsets[s.names.length]??0;for(let l=0;l<p;l++){let h=s.steps[l];c(h,s.reversed[l]),n&&n[h]++}return t.names.map((l,h)=>`${l}${r[h]===2?"-":"+"}`)}function Le({nodes:t,links:e,walks:s},n="Imported GFA"){let r=t.names.length,c=t.lengths.length,p=[];for(let o=0;o<s.names.length;o++)s.offsets[o+1]>s.offsets[o]&&p.push(o);let l=new Int32Array(r),h=Wt({nodes:t,links:e,walks:s},l),w=[];for(let o=0;o<c;o++){let k=t.refs[o];w.push({id:h[o],name:t.names[o],length:t.lengths[o],depth:Math.max(l[o],1),stable:k<0?void 0:{refName:t.refNames[k],start:t.starts[o],rank:t.ranks[o]},samples:void 0})}let f=[],F=new Array(r),v=(o,k)=>{let g=F[o];if(g){for(let x=0;x<g.length;x+=2)if(g[x]===k)return g[x+1]}},E=(o,k,g)=>{let x=F[o];x?x.push(k,g):F[o]=[k,g]},B=[],Y=0;for(let o=0;o<e.from.length;o++){let k=e.from[o],g=e.to[o];f.push({from:h[k],to:h[g],fromStrand:e.strands[o]&1?"-":"+",toStrand:e.strands[o]&2?"-":"+"});let x=v(k,g);x===void 0&&(x=Y++,E(k,g,x),E(g,k,x)),B.push(x)}let U=new Int32Array(r+1);for(let o=0;o<r;o++)U[o+1]=U[o]+(F[o]?.length??0)/2;let tt=new Int32Array(U[r]),lt=new Int32Array(U[r]);F.forEach((o,k)=>{for(let g=0;g<o.length;g+=2)tt[U[k]+g/2]=o[g],lt[U[k]+g/2]=o[g+1]});let yt=(o,k)=>{for(let g=U[o];g<U[o+1];g++)if(tt[g]===k)return lt[g];return-1},V=new Map,et=[],T=new Int32Array(s.offsets[s.names.length]??0),ht=new Int32Array(T.length),Z=0,H=new Int32Array(Y).fill(-1),X=[],M=[],dt=s.offsets[s.names.length]??0,_=new Int32Array(dt),st=new Float64Array(dt),pt=new Uint8Array(dt),nt=new Int32Array(r).fill(-1),D=[],I=[0],P=[],mt=new Map,ut=[];for(let o of p){let k=Lt(s,o),{start:g,name:x}=k,z=k.sample===void 0?s.names[o]:x,K=V.get(z);K===void 0&&(K=et.length,V.set(z,K),et.push(z),P.push(Et(z)));let rt=mt.get(x);rt===void 0&&(rt=ut.length,mt.set(x,rt),ut.push(x));let Tt=P[K],gt=s.offsets[o],St=new Array(s.offsets[o+1]-gt),a=g,d=-1;for(let S=gt;S<s.offsets[o+1];S++){let R=s.steps[S];St[S-gt]=h[R],nt[R]===-1&&(nt[R]=I.at(-1),I.push(nt[R]+l[R]),D.push(R));let O=nt[R]++;if(_[O]=K,st[O]=a,pt[O]=s.reversed[S],a+=R<c?t.lengths[R]:0,d>=0){let N=yt(d,R);N>=0&&H[N]!==o&&(H[N]=o,T[Z]=N,ht[Z++]=rt)}d=R}X.push({...k,nodeIds:St}),M.push({name:z,sample:Tt,start:g,length:a-g})}let wt=Ae(T.subarray(0,Z),ht,Y,ut);f.forEach((o,k)=>{let g=wt[B[k]];g.length>0&&(o.pathIds=g)});let C=p.length>0;return{name:n,nodes:w,edges:f,paths:C?X:void 0,anchorPaths:C?M:void 0,pathVisits:C?new se({segments:D.map(o=>t.names[o]),offsets:Int32Array.from(I),path:_.subarray(0,I.at(-1)),start:st.subarray(0,I.at(-1)),reversed:pt.subarray(0,I.at(-1)),paths:et,samples:P}):void 0,anchoredBy:w.some(o=>o.stable)?"tags":void 0}}var Dt=1,le=2,vt=4,he=[void 0,"missing","elsewhere","unknown","abridged","deleted"],de=3,ie=t=>he.indexOf(t)<<de;function pe(t,e,s){return e!==void 0&&t.includes(e)?e:t.find(n=>s.has(n))??t[0]}function Ie(t){return pe((t.paths??[]).map(e=>ft(e.name).name),t.referencePath,new Set(t.nodes.flatMap(e=>e.stable?.rank===0?[e.stable.refName]:[])))}var me=t=>{let e=t&&Bt(t);return s=>s!==void 0&&(s===t||s===e)};function Re(t){let e=new Map,s=[],n=[],r=v=>{let E=e.get(v);return E===void 0&&(E=s.length,e.set(v,E),s.push(v),n.push(0)),E},c=Ie(t),p=me(c),l=new Map;for(let v of t.nodes){let E=r(v.id);n[E]=v.length,v.stable?.rank===0&&p(v.stable.refName)&&l.set(E,v.stable.start)}let h=t.paths??[],w=new Int32Array(h.length),f=new Int32Array(h.length),F=[];return h.forEach((v,E)=>{w[E]=F.length;for(let B of v.nodeIds)F.push(r(B));f[E]=F.length}),{heads:h,from:w,to:f,steps:Int32Array.from(F),lengths:Int32Array.from(n),names:s,reference:c,stableStart:v=>l.get(v)??Number.NaN}}function $e(t,e,s){let{nodes:n,walks:r}=t,c=[];for(let f=0;f<r.names.length;f++)r.offsets[f+1]>r.offsets[f]&&c.push(f);let p=c.map(f=>Lt(r,f)),l=new Set;for(let f=0;f<n.lengths.length;f++)n.refs[f]>=0&&n.ranks[f]===0&&l.add(n.refNames[n.refs[f]]);let h=pe(p.map(f=>ft(f.name).name),e,l),w=me(h);return{heads:p,from:Int32Array.from(c,f=>r.offsets[f]),to:Int32Array.from(c,f=>r.offsets[f+1]),steps:r.steps,lengths:n.lengths,names:s?Wt(t):n.names,reference:h,stableStart:f=>f<n.lengths.length&&n.ranks[f]===0&&w(n.refNames[n.refs[f]])?n.starts[f]:Number.NaN}}function Vt(t){return t.sample??Et(t.name)}function ce(t){return t.haplotype!==void 0&&t.sample!==void 0?`${t.sample}#${t.haplotype}`:Vt(t)}var fe=class{constructor(t){this.offsets=[0],this.values=Array.from({length:t},()=>[])}get length(){return this.values[0].length}push(t,e,s,n,r){let c=this.values;c[0].push(t),c[1].push(e),c[2].push(s),c[3].push(n),r!==void 0&&c[4].push(r)}endRow(){this.offsets.push(this.length)}reorder(t,e){let s=new Uint32Array(t.length+1);t.forEach((r,c)=>{s[c+1]=s[c]+this.offsets[r+1]-this.offsets[r]});let n=e.map((r,c)=>{let p=this.values[c],l=r(this.length),h=0;for(let w of t)for(let f=this.offsets[w];f<this.offsets[w+1];f++)l[h++]=p[f];return l});return{offsets:s,columns:n}}},kt=t=>new Float64Array(t);function ze(t,e,s={}){let{heads:n,from:r,to:c,steps:p,lengths:l,names:h,reference:w,stableStart:f}="walks"in t?$e(t,s.referencePath,s.visits):Re(t),F=l.length,v=a=>a<F?l[a]:0,E=a=>ft(n[a].name).name,B=a=>n[a].start,Y=(a,d)=>(B(a)??0)-(B(d)??0),U=n.map((a,d)=>d),tt=U.filter(a=>E(a)===w).sort(Y),lt=tt[0],yt=U.filter(a=>E(a)!==w),V="walks"in t?t.skips:void 0;if(lt===void 0||yt.length===0&&!V?.names.length)return;let et=te(yt,E),T=new Float64Array(h.length).fill(Number.NaN),ht=new Float64Array(h.length),Z=new Map,H=-1/0,X=1/0,M=e&&e.end>e.start?e:void 0;for(let a of tt){let d=B(a)??0;for(let S=r[a],R=c[a];S<R;S++){let O=p[S],N=v(O);if(Number.isNaN(T[O]))T[O]=d,ht[O]=d+N,M&&(d+N<=M.start&&(H=Math.max(H,d+N)),d>=M.end&&(X=Math.min(X,d)));else{let bt=Z.get(O);bt?bt.push(d):Z.set(O,[T[O],d])}d+=N}}let dt=M===void 0||H>-1/0&&X<1/0,_=new fe(5),st=[],pt=new Map,nt=a=>{if(!a)return-1;let d=`${a.refName}:${a.start}`,S=pt.get(d);return S===void 0&&(S=st.length,pt.set(d,S),st.push(a)),S},D=s.visits?new fe(4):void 0,I=new Int32Array(0),P=new Float64Array(0),mt=a=>{let d=n[a[0]],S=[...a].sort(Y),R=S.length-1,O=0;for(let i of S)R+=c[i]-r[i]+(n[i].abridged?1:0),O+=n[i].abridged?.steps??0;R>I.length&&(I=new Int32Array(R*2),P=new Float64Array(R*2));let N=0,bt=!1,At,It,q=new Map,Pt=0;for(let i of S){let m=B(i),y=m===void 0||At===void 0?0:m-At;(m===void 0||y<0)&&(bt=!0),y<0&&n[It].abridged&&(Pt-=y);let A=Math.min(Pt,Math.max(y,0));Pt-=A;let u=y-A;u>0&&(q.set(N,oe(u,It===void 0?void 0:n[It].after,n[i].before)),I[N]=-u,P[N++]=At);let b=m??0,$=n[i].abridged;for(let j=r[i],Q=c[i];j<Q;j++){let G=p[j],W=$?$.bp-(b-(m??0))-v(G):0;W>0&&j===Q-1&&j>r[i]&&(q.set(N,[{bp:W,cause:"abridged"}]),I[N]=-W,P[N++]=b,b+=W),I[N]=G,P[N++]=b,b+=v(G)}At=m===void 0?void 0:b,It=i}let Zt=i=>i>=0&&i<N&&I[i]>=0&&!Number.isNaN(T[I[i]]),_t=i=>{let m=I[i];return P[i]+(m<0?-m:v(m))},ue=(i,m)=>{let y=i>=0?i:m,A=-1;for(let G=1;A<0&&G<N;G++)A=[y-G,y+G].find(Zt)??-1;if(A<0)return;let u=A>y==T[I[A]]>T[I[y]],b=u===(y===i),$=b?N-1:0,j=Zt($);return{stop:{contigEnds:j,shortBp:j?Math.max(0,M.start-ht[I[$]],T[I[$]]-M.end):0},lo:b?y+1:0,hi:b?N:y,backward:!u,axisStart:u?b?_t(y):P[0]:b?_t(N-1):P[y]}},Rt=0,$t=N,ot=!1,Ht=!0,Nt=-1,Xt=-1,Ut,zt,Kt=(i,m)=>{let A=q.get(i)?.[0];if(m<=0||A?.cause!=="abridged")return 0;let u=Math.min(m,A.bp);return q.set(i,A.bp>u?[{...A,bp:A.bp-u}]:[]),I[i]+=u,u},qt=i=>q.get(i)?.[0]?.cause==="abridged",ge=i=>{let m=I[i];return m<0||q.has(i)?Number.NaN:Number.isNaN(T[m])&&(qt(i-1)||qt(i+1))?f(m):T[m]},Mt=0,Jt=0;if(M&&dt){let i=-1,m=-1,y=-1/0,A=1/0;for(let u=0;u<N;u++){let b=ge(u);if(!Number.isNaN(b)){let $=b+v(I[u]);$<=M.start&&$>y&&(y=$,i=u),b>=M.end&&b<A&&(A=b,m=u)}}if(i<0||m<0){Ht=!1;let u=i>=0||m>=0?ue(i,m):void 0;u&&({lo:Rt,hi:$t,backward:ot,axisStart:Ut,stop:zt}=u)}else{Rt=Math.min(i,m)+1,$t=Math.max(i,m),ot=i>m,Nt=i,Xt=m;let u=ot?-1:1;Mt=Kt(i+u,H-y),Jt=Kt(m-u,A-X)}}let xt=d.contig??Bt(ft(d.name).name),be=bt||N===0?void 0:Ut!==void 0?{contig:xt,start:Ut,reversed:ot}:Nt<0?{contig:xt,start:P[0],reversed:!1}:Nt<Xt?{contig:xt,start:_t(Nt)+Mt,reversed:!1}:{contig:xt,start:P[Nt]-Mt,reversed:!0},at=0,Qt=0,Yt=0,it=0,L=-1,ct=0,J=Number.NaN,Ot=Number.NaN,Ne=i=>{let m=Z.get(i);if(!m||Number.isNaN(Ot))return T[i];let y=v(i),A=m[0],u=1/0;for(let b of m){let $=Math.min(Math.abs(b-Ot),Math.abs(b+y-Ot));$<u&&(A=b,u=$)}return A},[,jt,ve,ke]=_.values;for(let i=Rt;i<$t;i++){let m=ot?$t-1-(i-Rt):i,y=I[m],A=q.get(m);if(A){for(let W of ot?[...A].reverse():A)_.push(at,W.bp,Number.NaN,vt|ie(W.cause),nt(W.chunk)),at+=W.bp;L=_.length-1,ct=vt,J=Number.NaN,Yt+=-y,it=0;continue}let u=v(y),b=Ne(y),$=!Number.isNaN(b);D?.push(y,at,u,$?1:0);let j=L>=0&&!Number.isNaN(J),Q=$&&j&&it>=0&&J+(jt[L]??0)===b,G=$&&j&&it<=0&&b+u===J;!$&&L>=0&&!(ct&(Dt|vt))?jt[L]+=u:Q||G?(jt[L]+=u,Q||(J=b,ve[L]=b,ct|=le,ke[L]=ct),it=Q?1:-1):(ct=$?Dt:0,J=$?b:Number.NaN,_.push(at,u,J,ct,-1),L=_.length-1,it=0),at+=u,$?Ot=it<0?b:b+u:Qt+=u}return _.endRow(),D?.endRow(),{name:d.name,label:ce(d),sample:Vt(d),haplotype:d.haplotype,bp:at,offReferenceBp:Qt,gapBp:Yt,complete:Ht,stop:zt,axis:be,...O>0?{abridgedSteps:O}:{},...Mt+Jt>0?{estimated:!0}:{}}},ut=(a,d,S)=>{let R=M?Math.max(d,M.start):d,O=(M?Math.min(S,M.end):S)-R;_.push(R-(M?M.start:d),O,Number.NaN,vt|ie("deleted"),-1),_.endRow(),D?.endRow();let N={name:a,...Ft(a)};return{name:a,label:ce(N),sample:Vt(N),haplotype:N.haplotype,bp:0,offReferenceBp:0,gapBp:O,complete:!0,stop:void 0,axis:void 0}},wt=mt(tt),C=[...et.values()].map((a,d)=>({meta:mt(a),row:d+1})),o=new Set(et.keys());V?.names.forEach((a,d)=>{let S=ft(a).name;o.has(S)||(o.add(S),C.push({meta:ut(S,V.starts[d],V.ends[d]),row:C.length+1}))});let k=[wt,...C.map(a=>a.meta)];if(new Set(k.map(a=>a.label)).size<k.length)for(let a of k)a.label=ee(a.name)??a.label;C.sort((a,d)=>Number(d.meta.complete)-Number(a.meta.complete)||d.meta.bp-a.meta.bp||a.meta.label.localeCompare(d.meta.label));let g=[0,...C.map(a=>a.row)],{offsets:x,columns:z}=_.reorder(g,[kt,kt,kt,a=>new Uint8Array(a),a=>new Int32Array(a)]),[K,rt,Tt,gt,St]=z;return{origin:M?M.start:B(lt)??0,rows:[wt,...C.map(a=>a.meta)],offsets:x,start:K,bp:rt,referenceStart:Tt,flags:gt,chunk:St,chunks:st,visits:D&&Me(D,g,h)}}function Me(t,e,s){let{offsets:n,columns:r}=t.reorder(e,[w=>new Int32Array(w),kt,kt,w=>new Uint8Array(w)]),[c,p,l,h]=r;return{offsets:n,node:c,start:p,bp:l,onReference:h,names:s}}function xe(t,e){let s=t.flags[e],n={start:t.start[e],bp:t.bp[e],onReference:(s&Dt)!==0};if(s&vt){n.gap=!0;let r=he[s>>de&7];r&&(n.cause=r);let c=t.chunks[t.chunk[e]];c&&(n.chunk=c)}else n.referenceStart=Number.isNaN(t.referenceStart[e])?void 0:t.referenceStart[e];return s&le&&(n.reversed=!0),n}function Oe(t,e){let s=[];for(let n=t.offsets[e];n<t.offsets[e+1];n++)s.push({node:t.names[t.node[n]],start:t.start[n],bp:t.bp[n],onReference:t.onReference[n]===1});return s}function Ke(t,e){let s=t.rows.map((n,r)=>{let c=[];for(let p=t.offsets[r];p<t.offsets[r+1];p++)c.push(xe(t,p));return{...n,runs:c,visits:t.visits&&Oe(t.visits,r)}});return{origin:t.origin,unit:e,reference:s[0],rows:s.slice(1)}}export{ye as a,we as b,Ee as c,Fe as d,oe as e,re as f,Te as g,Pe as h,Lt as i,Le as j,Ie as k,ze as l,Ke as m};
|
|
2
|
+
//# sourceMappingURL=chunk-QCEM5AXZ.js.map
|