jbrowse-plugin-graphgenomeviewer 6.3.0 → 6.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.md +4 -3
  2. package/dist/chunks/AddTrackWorkflow-ANWIWCO6.js +2 -0
  3. package/dist/chunks/{AddTrackWorkflow-F5YBOJ3E.js.map → AddTrackWorkflow-ANWIWCO6.js.map} +1 -1
  4. package/dist/chunks/ChooseSamplesDialog-OYAB355I.js +2 -0
  5. package/dist/chunks/{ChooseSamplesDialog-KVTDIA4A.js.map → ChooseSamplesDialog-OYAB355I.js.map} +1 -1
  6. package/dist/chunks/ChooseWalksDialog-HJE4CAKU.js +2 -0
  7. package/dist/chunks/ChooseWalksDialog-HJE4CAKU.js.map +7 -0
  8. package/dist/chunks/{GbzBaseSyntenyAdapter-PT4IARIU.js → GbzBaseSyntenyAdapter-KVJKGGQ4.js} +2 -2
  9. package/dist/chunks/{GbzBaseSyntenyAdapter-PT4IARIU.js.map → GbzBaseSyntenyAdapter-KVJKGGQ4.js.map} +1 -1
  10. package/dist/chunks/{GraphGenomeView-6CRBLHNG.js → GraphGenomeView-ULQ6U5MK.js} +2 -2
  11. package/dist/chunks/{GraphGenomeView-6CRBLHNG.js.map → GraphGenomeView-ULQ6U5MK.js.map} +1 -1
  12. package/dist/chunks/GraphTrackSettingsDialog-O6IYVHNJ.js +4 -0
  13. package/dist/chunks/{GraphTrackSettingsDialog-2QQYWNWW.js.map → GraphTrackSettingsDialog-O6IYVHNJ.js.map} +1 -1
  14. package/dist/chunks/HighlightColorDialog-LXT72W7R.js +2 -0
  15. package/dist/chunks/HighlightColorDialog-LXT72W7R.js.map +7 -0
  16. package/dist/chunks/LinearGraphDisplay-KM5SOSQQ.js +2 -0
  17. package/dist/chunks/{LinearGraphDisplay-KNEXJAAV.js.map → LinearGraphDisplay-KM5SOSQQ.js.map} +1 -1
  18. package/dist/chunks/{MinigraphBubbleAdapter-MQRO5J7Z.js → MinigraphBubbleAdapter-CAXB5FGR.js} +2 -2
  19. package/dist/chunks/{RgfaTabixAdapter-ALEXRTPS.js → RgfaTabixAdapter-GYRNCGT2.js} +2 -2
  20. package/dist/chunks/TrackWarningsDialog-YL2UP35Z.js +2 -0
  21. package/dist/chunks/{TrackWarningsDialog-HPHM5S7U.js.map → TrackWarningsDialog-YL2UP35Z.js.map} +1 -1
  22. package/dist/chunks/{bandage-layout-3AR6BCUD-BW536UT3.js → bandage-layout-3AR6BCUD-PYYNJEGI.js} +1 -1
  23. package/dist/chunks/{bandage-layout-3AR6BCUD-BW536UT3.js.map → bandage-layout-3AR6BCUD-PYYNJEGI.js.map} +1 -1
  24. package/dist/chunks/{chunk-4F2MWXJF.js → chunk-2SIR336R.js} +2 -2
  25. package/dist/chunks/chunk-64LZZURD.js +2 -0
  26. package/dist/chunks/chunk-64LZZURD.js.map +7 -0
  27. package/dist/chunks/chunk-7KFSWOWX.js +3 -0
  28. package/dist/chunks/chunk-7KFSWOWX.js.map +7 -0
  29. package/dist/chunks/chunk-AMD4KXQV.js +2 -0
  30. package/dist/chunks/chunk-AMD4KXQV.js.map +7 -0
  31. package/dist/chunks/chunk-B7GF3TC3.js +2 -0
  32. package/dist/chunks/chunk-B7GF3TC3.js.map +7 -0
  33. package/dist/chunks/{chunk-C4PHHPUP.js → chunk-DILFGQIL.js} +1 -1
  34. package/dist/chunks/{chunk-C4PHHPUP.js.map → chunk-DILFGQIL.js.map} +1 -1
  35. package/dist/chunks/{chunk-ETTZTJNK.js → chunk-EHV7EUMI.js} +1 -1
  36. package/dist/chunks/{chunk-ETTZTJNK.js.map → chunk-EHV7EUMI.js.map} +1 -1
  37. package/dist/chunks/chunk-GB7CF6Z2.js +2 -0
  38. package/dist/chunks/chunk-GB7CF6Z2.js.map +7 -0
  39. package/dist/chunks/chunk-GMSOU6VO.js +2 -0
  40. package/dist/chunks/chunk-GMSOU6VO.js.map +7 -0
  41. package/dist/chunks/chunk-GXQ7NYB3.js +2 -0
  42. package/dist/chunks/chunk-GXQ7NYB3.js.map +7 -0
  43. package/dist/chunks/{chunk-3MJ4ZXML.js → chunk-KRXALLQG.js} +1 -1
  44. package/dist/chunks/{chunk-3MJ4ZXML.js.map → chunk-KRXALLQG.js.map} +1 -1
  45. package/dist/chunks/{chunk-5GRQIE5Q.js → chunk-MYJYGSOH.js} +1 -1
  46. package/dist/chunks/{chunk-5GRQIE5Q.js.map → chunk-MYJYGSOH.js.map} +1 -1
  47. package/dist/chunks/chunk-NXZT63HN.js +2 -0
  48. package/dist/chunks/chunk-NXZT63HN.js.map +7 -0
  49. package/dist/chunks/chunk-PLV6SE4Y.js +2 -0
  50. package/dist/chunks/chunk-PLV6SE4Y.js.map +7 -0
  51. package/dist/chunks/chunk-WTOQRUK2.js +2 -0
  52. package/dist/chunks/chunk-WTOQRUK2.js.map +7 -0
  53. package/dist/chunks/{chunk-6IK6ZDSI.js → chunk-WUGRVNUJ.js} +2 -2
  54. package/dist/chunks/{chunk-6IK6ZDSI.js.map → chunk-WUGRVNUJ.js.map} +1 -1
  55. package/dist/chunks/{chunk-SYHZ5T54.js → chunk-X4DGSMS6.js} +2 -2
  56. package/dist/chunks/{chunk-SYHZ5T54.js.map → chunk-X4DGSMS6.js.map} +2 -2
  57. package/dist/chunks/renderSvg-J7L374ND.js +2 -0
  58. package/dist/chunks/renderSvg-J7L374ND.js.map +7 -0
  59. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +6 -6
  60. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  61. package/package.json +2 -2
  62. package/src/GbzBaseSyntenyAdapter/configSchema.ts +1 -1
  63. package/src/GraphGenomeView/components/ChooseWalksDialog.tsx +6 -7
  64. package/src/GraphGenomeView/components/HighlightColorDialog.tsx +117 -0
  65. package/src/GraphGenomeView/components/PaneSvg.tsx +828 -0
  66. package/src/GraphGenomeView/components/ReferenceStripOverlay.tsx +23 -5
  67. package/src/GraphGenomeView/components/TubeMapOverlay.tsx +47 -36
  68. package/src/GraphGenomeView/model.test.ts +159 -31
  69. package/src/GraphGenomeView/pane/fitViews.ts +8 -5
  70. package/src/GraphGenomeView/pane/graphViews.ts +15 -1
  71. package/src/GraphGenomeView/pane/keepInView.ts +62 -0
  72. package/src/GraphGenomeView/pane/launchActions.ts +159 -184
  73. package/src/GraphGenomeView/pane/loadActions.ts +6 -0
  74. package/src/GraphGenomeView/pane/paneBase.ts +8 -2
  75. package/src/GraphGenomeView/pane/renderingActions.ts +11 -1
  76. package/src/GraphGenomeView/pane/settingActions.ts +56 -0
  77. package/src/GraphGenomeView/renderPipeline.test.ts +4 -1
  78. package/src/GraphGenomeView/viewModel.ts +17 -1
  79. package/src/LinearGraphDisplay/LinearGraphDisplay.test.ts +29 -5
  80. package/src/LinearGraphDisplay/configSchema.ts +8 -0
  81. package/src/LinearGraphDisplay/model.ts +62 -33
  82. package/src/LinearGraphDisplay/renderSvg.tsx +27 -0
  83. package/src/hoverSync/GraphNodeHighlight.tsx +3 -3
  84. package/src/version.ts +1 -1
  85. package/dist/chunks/AddTrackWorkflow-F5YBOJ3E.js +0 -2
  86. package/dist/chunks/ChooseSamplesDialog-KVTDIA4A.js +0 -2
  87. package/dist/chunks/ChooseWalksDialog-GVQLSGHX.js +0 -2
  88. package/dist/chunks/ChooseWalksDialog-GVQLSGHX.js.map +0 -7
  89. package/dist/chunks/GraphTrackSettingsDialog-2QQYWNWW.js +0 -4
  90. package/dist/chunks/LinearGraphDisplay-KNEXJAAV.js +0 -2
  91. package/dist/chunks/TrackWarningsDialog-HPHM5S7U.js +0 -2
  92. package/dist/chunks/chunk-4LEFC42C.js +0 -3
  93. package/dist/chunks/chunk-4LEFC42C.js.map +0 -7
  94. package/dist/chunks/chunk-CJ47OHWP.js +0 -2
  95. package/dist/chunks/chunk-CJ47OHWP.js.map +0 -7
  96. package/dist/chunks/chunk-PZE3GABA.js +0 -2
  97. package/dist/chunks/chunk-PZE3GABA.js.map +0 -7
  98. package/dist/chunks/chunk-TYJTJGPO.js +0 -2
  99. package/dist/chunks/chunk-TYJTJGPO.js.map +0 -7
  100. /package/dist/chunks/{MinigraphBubbleAdapter-MQRO5J7Z.js.map → MinigraphBubbleAdapter-CAXB5FGR.js.map} +0 -0
  101. /package/dist/chunks/{RgfaTabixAdapter-ALEXRTPS.js.map → RgfaTabixAdapter-GYRNCGT2.js.map} +0 -0
  102. /package/dist/chunks/{chunk-4F2MWXJF.js.map → chunk-2SIR336R.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-CPMHA4W5.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-AB35TJST.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-2CVHXFK7.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-TAMCZHLW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-N6FECAXP.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-3ZZSX5HN.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ST2IBUAN.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-7GBL7SJY.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-PBENCR5L.js"],
4
+ "sourcesContent": ["// src/layout/rowSpacing.ts\nvar ROW_HEIGHT_PX = 20;\n\nexport {\n ROW_HEIGHT_PX\n};\n", "// src/overlayLabels.ts\nvar LABEL_PX = 11;\nvar LABEL_CHAR_PX = 6.2;\nvar LABEL_PAD = 4;\nfunction labelWidth(text) {\n return text.length * LABEL_CHAR_PX + LABEL_PAD * 2;\n}\nfunction overlaps(a, b) {\n return a.x0 < b.x1 && a.x1 > b.x0 && a.y0 < b.y1 && a.y1 > b.y0;\n}\nfunction offFrame(box, frame) {\n return box.x1 <= 0 || box.x0 >= frame.width || box.y1 <= 0 || box.y0 >= frame.height;\n}\nfunction insideFrame(box, frame) {\n return box.x0 >= 0 && box.x1 <= frame.width && box.y0 >= 0 && box.y1 <= frame.height;\n}\nfunction occupancy(frame, reserved = []) {\n const placed = [...reserved];\n return (box) => {\n if (offFrame(box, frame) || placed.some((p) => overlaps(p, box))) {\n return false;\n }\n placed.push(box);\n return true;\n };\n}\nfunction placeLabels(candidates, frame, take) {\n const out = [];\n const row = LABEL_PX + LABEL_PAD * 2;\n const place = (c, text) => {\n const w = labelWidth(text);\n const direction = c.y > frame.height / 2 ? -1 : 1;\n for (let tries = 0; tries <= (c.stack ?? 0); tries++) {\n const y = c.y + direction * tries * row;\n const box = {\n x0: c.x - w / 2,\n x1: c.x + w / 2,\n y0: y - LABEL_PX - LABEL_PAD,\n y1: y + LABEL_PAD\n };\n if (offFrame(box, frame)) {\n return void 0;\n }\n if (insideFrame(box, frame) && (c.fits?.(box) ?? true) && take(box)) {\n return { ...c, text, y, w };\n }\n }\n return void 0;\n };\n for (const c of candidates) {\n const placed = place(c, c.text) ?? (c.fallback === void 0 ? void 0 : place(c, c.fallback));\n if (placed) {\n out.push(placed);\n }\n }\n return out;\n}\n\nexport {\n LABEL_PX,\n LABEL_CHAR_PX,\n LABEL_PAD,\n labelWidth,\n overlaps,\n occupancy,\n placeLabels\n};\n", "import {\n ROW_HEIGHT_PX\n} from \"./chunk-CPMHA4W5.js\";\n\n// src/util/geometry.ts\nfunction svgPath(points) {\n const round = (v) => Math.round(v * 100) / 100;\n return points.map((p, i) => `${i ? \"L\" : \"M\"}${round(p.x)},${round(p.y)}`).join(\"\");\n}\nfunction projectLine(x1, y1, x2, y2, distance) {\n const d = Math.hypot(y2 - y1, x2 - x1);\n if (d === 0) {\n return [x2, y2];\n }\n const vx = (x2 - x1) / d;\n const vy = (y2 - y1) / d;\n return [x2 + distance * vx, y2 + distance * vy];\n}\nfunction curvePointAt(c, t) {\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n return {\n x: a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1,\n y: a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1\n };\n}\nfunction curveMidpoint(curves) {\n const mid = curves[Math.floor(curves.length / 2)];\n return mid ? curvePointAt(mid, 0.5) : void 0;\n}\nfunction curveBounds(curves) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const c of curves) {\n minX = Math.min(minX, c.x0, c.cx0, c.cx1, c.x1);\n maxX = Math.max(maxX, c.x0, c.cx0, c.cx1, c.x1);\n minY = Math.min(minY, c.y0, c.cy0, c.cy1, c.y1);\n maxY = Math.max(maxY, c.y0, c.cy0, c.cy1, c.y1);\n }\n return { minX, minY, maxX, maxY };\n}\nfunction subCurve(c, t0, t1) {\n const p0 = curvePointAt(c, t0);\n const p1 = curvePointAt(c, t1);\n const dt = (t1 - t0) / 3;\n const d0 = curveTangentAt(c, t0);\n const d1 = curveTangentAt(c, t1);\n return {\n x0: p0.x,\n y0: p0.y,\n cx0: p0.x + d0.x * dt,\n cy0: p0.y + d0.y * dt,\n cx1: p1.x - d1.x * dt,\n cy1: p1.y - d1.y * dt,\n x1: p1.x,\n y1: p1.y\n };\n}\nfunction curveTangentAt(c, t) {\n const u = 1 - t;\n const a = 3 * u * u;\n const b = 6 * u * t;\n const d = 3 * t * t;\n return {\n x: a * (c.cx0 - c.x0) + b * (c.cx1 - c.cx0) + d * (c.x1 - c.cx1),\n y: a * (c.cy0 - c.y0) + b * (c.cy1 - c.cy0) + d * (c.y1 - c.cy1)\n };\n}\nfunction dashCurves(curves, dashWorld) {\n const lengths = curves.map(\n (c) => Math.hypot(c.cx0 - c.x0, c.cy0 - c.y0) + Math.hypot(c.cx1 - c.cx0, c.cy1 - c.cy0) + Math.hypot(c.x1 - c.cx1, c.y1 - c.cy1)\n );\n const total = lengths.reduce((a, b) => a + b, 0);\n const spans = Math.max(3, Math.round(total / dashWorld) | 1);\n const out = [];\n for (let i = 0; i < spans; i += 2) {\n const from = i / spans * total;\n const to = (i + 1) / spans * total;\n const dash = [];\n let start = 0;\n curves.forEach((c, k) => {\n const length = lengths[k];\n const end = start + length;\n if (length > 0 && end > from && start < to) {\n dash.push(\n subCurve(\n c,\n Math.max(0, (from - start) / length),\n Math.min(1, (to - start) / length)\n )\n );\n }\n start = end;\n });\n if (dash.length) {\n out.push(dash);\n }\n }\n return out;\n}\nfunction translateCurves(curves, dx, dy) {\n const out = new Array(curves.length);\n for (let i = 0; i < curves.length; i++) {\n const c = curves[i];\n out[i] = {\n x0: c.x0 + dx,\n y0: c.y0 + dy,\n cx0: c.cx0 + dx,\n cy0: c.cy0 + dy,\n cx1: c.cx1 + dx,\n cy1: c.cy1 + dy,\n x1: c.x1 + dx,\n y1: c.y1 + dy\n };\n }\n return out;\n}\nfunction attachment(segments, side) {\n const last = segments.length - 1;\n return side === \"end\" ? { at: segments[last], inward: segments[last - 1] } : { at: segments[0], inward: segments[1] };\n}\nvar TANGENT_SPAN_FACTOR = 0.5;\nvar MAX_TANGENT = 80;\nfunction ownStrand(id) {\n return id.endsWith(\"-\") ? \"-\" : \"+\";\n}\nfunction strandSides(edge) {\n const own = (id, strand) => (strand ?? ownStrand(id)) === ownStrand(id);\n return {\n from: own(edge.from, edge.fromStrand) ? \"end\" : \"start\",\n to: own(edge.to, edge.toStrand) ? \"start\" : \"end\"\n };\n}\nfunction spanOf(segments) {\n let min = Infinity;\n let max = -Infinity;\n for (const s of segments) {\n min = Math.min(min, s.x);\n max = Math.max(max, s.x);\n }\n return { min, max };\n}\nfunction distanceToSpan(x, span) {\n return Math.max(0, span.min - x, x - span.max);\n}\nfunction facingSide(segments, other, tieBreak) {\n const startGap = distanceToSpan(segments[0].x, other);\n const endGap = distanceToSpan(segments[segments.length - 1].x, other);\n return startGap === endGap ? tieBreak : startGap < endGap ? \"start\" : \"end\";\n}\nfunction facingSides(fromSegments, toSegments) {\n return {\n from: facingSide(fromSegments, spanOf(toSegments), \"end\"),\n to: facingSide(toSegments, spanOf(fromSegments), \"start\")\n };\n}\nvar laidSides = /* @__PURE__ */ new WeakMap();\nfunction heldFacingSides(fromSegments, toSegments) {\n let byTo = laidSides.get(fromSegments);\n if (!byTo) {\n byTo = /* @__PURE__ */ new WeakMap();\n laidSides.set(fromSegments, byTo);\n }\n let sides = byTo.get(toSegments);\n if (!sides) {\n sides = facingSides(fromSegments, toSegments);\n byTo.set(toSegments, sides);\n }\n return sides;\n}\nvar APEX_FRACTION = 0.75;\nvar BOW_CLEARANCE = 1.15;\nvar ALONG_FRACTION = 0.35;\nvar MAX_ROW_BOW_PX = 3 * ROW_HEIGHT_PX;\nfunction bowAround(p1x, p1y, p2x, p2y, toward, maxBow) {\n const chord = Math.hypot(p2x - p1x, p2y - p1y);\n const ux = chord === 0 ? 1 : (p2x - p1x) / chord;\n const uy = chord === 0 ? 0 : (p2y - p1y) / chord;\n let reach = 0;\n let minAlong = Infinity;\n let maxAlong = -Infinity;\n for (const p of toward) {\n const dx = p.x - p1x;\n const dy = p.y - p1y;\n const perp = dx * -uy + dy * ux;\n if (Math.abs(perp) > Math.abs(reach)) {\n reach = perp;\n }\n const along = dx * ux + dy * uy;\n minAlong = Math.min(minAlong, along);\n maxAlong = Math.max(maxAlong, along);\n }\n const span = toward.length ? maxAlong - minAlong : 0;\n const uncapped = Math.max(\n Math.abs(reach) * BOW_CLEARANCE / APEX_FRACTION,\n span * ALONG_FRACTION\n );\n const size = maxBow === void 0 ? uncapped : Math.min(uncapped, maxBow);\n return reach < 0 ? -size : size;\n}\nfunction yToXOf({ scaleX, scaleY }) {\n return scaleY / scaleX;\n}\nvar PATH_RIBBON_SPACING = 3;\nfunction drawnDirection(a, b, yToX) {\n const dx = b.x - a.x;\n const dy = (b.y - a.y) * yToX;\n const len = Math.hypot(dx, dy);\n return len === 0 ? void 0 : { x: dx / len, y: dy / len };\n}\nfunction pathRibbonOffsets(fromSegments, toSegments, count, axis, spacing = PATH_RIBBON_SPACING) {\n const yToX = yToXOf(axis);\n const dir = drawnDirection(\n fromSegments[fromSegments.length - 1],\n toSegments[0],\n yToX\n ) ?? drawnDirection(fromSegments[0], fromSegments.at(-1), yToX) ?? drawnDirection(toSegments[0], toSegments.at(-1), yToX) ?? { x: 1, y: 0 };\n const offsets = [];\n for (let i = 0; i < count; i++) {\n const distance = (i - (count - 1) / 2) * spacing;\n offsets.push({ x: -dir.y * distance, y: dir.x * distance / yToX });\n }\n return offsets;\n}\nfunction scaleYOf(points, yToX) {\n return points.map((p) => ({ x: p.x, y: p.y * yToX }));\n}\nfunction unscaleYOf(curves, yToX) {\n for (const c of curves) {\n c.y0 /= yToX;\n c.cy0 /= yToX;\n c.cy1 /= yToX;\n c.y1 /= yToX;\n }\n return curves;\n}\nvar SELF_LOOP_MIN_PX = 12;\nvar SELF_LOOP_MAX_PX = 40;\nfunction selfLoopReach(segments, scale) {\n let length = 0;\n for (let i = 1; i < segments.length; i++) {\n length += Math.hypot(\n segments[i].x - segments[i - 1].x,\n segments[i].y - segments[i - 1].y\n );\n }\n const nodePx = length * scale;\n const reachPx = Math.min(\n SELF_LOOP_MAX_PX,\n Math.max(SELF_LOOP_MIN_PX, nodePx / 2)\n );\n return reachPx / Math.max(scale, Number.EPSILON);\n}\nfunction selfLinkOf(edge) {\n if (edge.from !== edge.to) {\n return false;\n }\n return edge.fromStrand && edge.toStrand && edge.fromStrand !== edge.toStrand ? edge.fromStrand === \"+\" ? \"end\" : \"start\" : true;\n}\nfunction edgeJoinOf(edge, stranded = false) {\n const self = selfLinkOf(edge);\n if (!stranded) {\n return self;\n }\n const sides = strandSides(edge);\n return self === false ? sides : sides.from === sides.to ? sides.from : true;\n}\nfunction hairpinCurves(attach, reach, offsetX, offsetY) {\n const { at, inward } = attach;\n const dx = inward ? at.x - inward.x : 1;\n const dy = inward ? at.y - inward.y : 0;\n const len = Math.hypot(dx, dy) || 1;\n const ux = dx / len;\n const uy = dy / len;\n const px = at.x + offsetX;\n const py = at.y + offsetY;\n const nearX = px + ux * reach / 3;\n const nearY = py + uy * reach / 3;\n const apexX = px + ux * reach;\n const apexY = py + uy * reach;\n const sideX = -uy * reach / 2;\n const sideY = ux * reach / 2;\n return [\n {\n x0: px,\n y0: py,\n cx0: nearX,\n cy0: nearY,\n cx1: apexX + sideX,\n cy1: apexY + sideY,\n x1: apexX,\n y1: apexY\n },\n {\n x0: apexX,\n y0: apexY,\n cx0: apexX - sideX,\n cy0: apexY - sideY,\n cx1: nearX,\n cy1: nearY,\n x1: px,\n y1: py\n }\n ];\n}\nfunction computeEdgeCurves(fromSegments, toSegments, join, offsetX, offsetY, axis, bypassed = [], maxBowIn) {\n const scale = axis.scaleX;\n const yToX = yToXOf(axis);\n const maxBow = maxBowIn ?? (axis.pixelRows ? MAX_ROW_BOW_PX : void 0);\n if (join === false) {\n join = heldFacingSides(fromSegments, toSegments);\n }\n if (yToX !== 1) {\n return unscaleYOf(\n computeEdgeCurves(\n scaleYOf(fromSegments, yToX),\n scaleYOf(toSegments, yToX),\n join,\n offsetX,\n offsetY * yToX,\n { scaleX: scale, scaleY: scale },\n scaleYOf(bypassed, yToX),\n // the cap is a y measure and the body works in x units, so it converts\n // with everything else that crosses this boundary\n maxBow === void 0 ? void 0 : maxBow * yToX\n ),\n yToX\n );\n }\n if (typeof join === \"string\") {\n return hairpinCurves(\n attachment(fromSegments, join),\n selfLoopReach(fromSegments, scale),\n offsetX,\n offsetY\n );\n }\n const loop = join === true;\n const sides = join === true ? { from: \"end\", to: \"start\" } : join;\n const fromAttach = attachment(fromSegments, sides.from);\n const toAttach = attachment(toSegments, sides.to);\n const fromEnd = fromAttach.at;\n const toStart = toAttach.at;\n const p1x = fromEnd.x + offsetX;\n const p1y = fromEnd.y + offsetY;\n const p2x = toStart.x + offsetX;\n const p2y = toStart.y + offsetY;\n if (loop) {\n let segDirX = 1;\n let segDirY = 0;\n if (fromAttach.inward) {\n const dx = fromEnd.x - fromAttach.inward.x;\n const dy = fromEnd.y - fromAttach.inward.y;\n const len = Math.hypot(dx, dy);\n if (len > 0) {\n segDirX = dx / len;\n segDirY = dy / len;\n }\n }\n const ext = selfLoopReach(fromSegments, scale);\n const perpX = -segDirY;\n const perpY = segDirX;\n const midX = (fromEnd.x + toStart.x) / 2 + offsetX + perpX * ext;\n const midY = (fromEnd.y + toStart.y) / 2 + offsetY + perpY * ext;\n const cp1x = p1x + segDirX * ext;\n const cp1y = p1y + segDirY * ext;\n const cp2x = p2x - segDirX * ext;\n const cp2y = p2y - segDirY * ext;\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cp1x,\n cy0: cp1y,\n cx1: cp1x + perpX * ext,\n cy1: cp1y + perpY * ext,\n x1: midX,\n y1: midY\n },\n {\n x0: midX,\n y0: midY,\n cx0: cp2x + perpX * ext,\n cy0: cp2y + perpY * ext,\n cx1: cp2x,\n cy1: cp2y,\n x1: p2x,\n y1: p2y\n }\n ];\n } else {\n const fromPrev = fromAttach.inward ?? {\n x: fromEnd.x - (toStart.x - fromEnd.x),\n y: fromEnd.y - (toStart.y - fromEnd.y)\n };\n const toNext = toAttach.inward ?? {\n x: toStart.x - (fromEnd.x - toStart.x),\n y: toStart.y - (fromEnd.y - toStart.y)\n };\n const dist = Math.hypot(p2x - p1x, p2y - p1y);\n const tangentProj = (prev, at, towardX, towardY) => {\n const dx = at.x - prev.x;\n const dy = at.y - prev.y;\n const len = Math.hypot(dx, dy);\n const along = len === 0 ? 0 : (towardX * dx + towardY * dy) / len;\n return Math.max(\n 0,\n Math.min(dist * TANGENT_SPAN_FACTOR, MAX_TANGENT, along * 0.5)\n );\n };\n const towardToX = toStart.x - fromEnd.x;\n const towardToY = toStart.y - fromEnd.y;\n const [cx1, cy1] = projectLine(\n fromPrev.x,\n fromPrev.y,\n fromEnd.x,\n fromEnd.y,\n tangentProj(fromPrev, fromEnd, towardToX, towardToY)\n );\n const [cx2, cy2] = projectLine(\n toNext.x,\n toNext.y,\n toStart.x,\n toStart.y,\n tangentProj(toNext, toStart, -towardToX, -towardToY)\n );\n const bulge = bypassed.length ? bowAround(p1x, p1y, p2x, p2y, bypassed, maxBow) : 0;\n const chordLen = dist === 0 ? 1 : dist;\n const ux = (p2x - p1x) / chordLen;\n const uy = (p2y - p1y) / chordLen;\n const bulgeX = -uy * bulge;\n const bulgeY = ux * bulge;\n const spreadX = ux * Math.abs(bulge);\n const spreadY = uy * Math.abs(bulge);\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cx1 + offsetX + bulgeX - spreadX,\n cy0: cy1 + offsetY + bulgeY - spreadY,\n cx1: cx2 + offsetX + bulgeX + spreadX,\n cy1: cy2 + offsetY + bulgeY + spreadY,\n x1: p2x,\n y1: p2y\n }\n ];\n }\n}\nfunction nearerEnd(segments, to) {\n const start = segments[0];\n const end = segments.at(-1);\n return Math.hypot(start.x - to.x, start.y - to.y) < Math.hypot(end.x - to.x, end.y - to.y) ? \"start\" : \"end\";\n}\nfunction routedEdgeCurves(fromSegments, toSegments, route, sides) {\n const fromAttach = attachment(\n fromSegments,\n sides?.from ?? nearerEnd(fromSegments, route[0])\n );\n const toAttach = attachment(\n toSegments,\n sides?.to ?? nearerEnd(toSegments, route.at(-1))\n );\n const points = [fromAttach.at, ...route, toAttach.at];\n const tangent = (i) => {\n const p = points[i];\n const span = (q) => Math.hypot(q.x - p.x, q.y - p.y);\n const along = (inward, next) => {\n const len = inward ? span(inward) : 0;\n const reach = span(next);\n return len === 0 ? { x: next.x - p.x, y: next.y - p.y } : {\n x: (p.x - inward.x) / len * reach,\n y: (p.y - inward.y) / len * reach\n };\n };\n if (i === 0) {\n return along(fromAttach.inward, points[1]);\n }\n if (i === points.length - 1) {\n const out = along(toAttach.inward, points[i - 1]);\n return { x: -out.x, y: -out.y };\n }\n return {\n x: (points[i + 1].x - points[i - 1].x) / 2,\n y: (points[i + 1].y - points[i - 1].y) / 2\n };\n };\n const curves = [];\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i];\n const b = points[i + 1];\n const ta = tangent(i);\n const tb = tangent(i + 1);\n curves.push({\n x0: a.x,\n y0: a.y,\n cx0: a.x + ta.x / 3,\n cy0: a.y + ta.y / 3,\n cx1: b.x - tb.x / 3,\n cy1: b.y - tb.y / 3,\n x1: b.x,\n y1: b.y\n });\n }\n return curves;\n}\n\nexport {\n svgPath,\n projectLine,\n curvePointAt,\n curveMidpoint,\n curveBounds,\n dashCurves,\n translateCurves,\n ownStrand,\n strandSides,\n bowAround,\n yToXOf,\n PATH_RIBBON_SPACING,\n pathRibbonOffsets,\n selfLinkOf,\n edgeJoinOf,\n computeEdgeCurves,\n routedEdgeCurves\n};\n", "import {\n ownStrand,\n strandSides\n} from \"./chunk-2CVHXFK7.js\";\nimport {\n isBackbone\n} from \"./chunk-FYQWPEEY.js\";\n\n// src/layout/mergeRuns.ts\nfunction flip(strand) {\n return strand === \"+\" ? \"-\" : \"+\";\n}\nfunction mergeRuns(graph, alone = /* @__PURE__ */ new Set()) {\n const sides = graph.edges.map(strandSides);\n const at = /* @__PURE__ */ new Map();\n const attach = (id, side, ei) => {\n const key = `${id}|${side}`;\n const list = at.get(key);\n if (list) {\n list.push(ei);\n } else {\n at.set(key, [ei]);\n }\n };\n graph.edges.forEach((edge, ei) => {\n attach(edge.from, sides[ei].from, ei);\n attach(edge.to, sides[ei].to, ei);\n });\n const joinAfter = (a) => {\n const out = at.get(`${a}|end`);\n if (out?.length !== 1) {\n return void 0;\n }\n const ei = out[0];\n const edge = graph.edges[ei];\n return edge.from === a && edge.to !== a && !alone.has(a) && !alone.has(edge.to) && sides[ei].from === \"end\" && sides[ei].to === \"start\" && at.get(`${edge.to}|start`)?.length === 1 ? ei : void 0;\n };\n const joined = /* @__PURE__ */ new Set();\n const runOf = /* @__PURE__ */ new Map();\n const runs = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const into = at.get(`${node.id}|start`);\n const pred = into?.length === 1 ? graph.edges[into[0]].from : void 0;\n if (runOf.has(node.id) || pred !== void 0 && joinAfter(pred) === into[0]) {\n continue;\n }\n const run = [node.id];\n for (; ; ) {\n const ei = joinAfter(run.at(-1));\n const next = ei === void 0 ? void 0 : graph.edges[ei].to;\n if (next === void 0 || runOf.has(next)) {\n break;\n }\n joined.add(ei);\n run.push(next);\n }\n for (const id of run) {\n runOf.set(id, node.id);\n }\n if (run.length > 1) {\n runs.set(node.id, run);\n }\n }\n for (const node of graph.nodes) {\n if (!runOf.has(node.id)) {\n runOf.set(node.id, node.id);\n }\n }\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const nodes = [];\n for (const node of graph.nodes) {\n if (runOf.get(node.id) !== node.id) {\n continue;\n }\n const run = runs.get(node.id);\n if (!run) {\n nodes.push(node);\n continue;\n }\n const members = run.map((id) => byId.get(id));\n const backbone = members.filter(isBackbone);\n const first = backbone.length ? backbone.reduce((a, b) => a.stable.start <= b.stable.start ? a : b) : members[0];\n nodes.push({\n id: node.id,\n name: node.name,\n length: members.reduce((sum, n) => sum + n.length, 0),\n depth: node.depth,\n stable: first.stable\n });\n }\n const seen = /* @__PURE__ */ new Set();\n const edges = [];\n graph.edges.forEach((edge, ei) => {\n const from = runOf.get(edge.from);\n const to = runOf.get(edge.to);\n const side = sides[ei];\n const key = `${from}|${side.from}>${to}|${side.to}`;\n if (joined.has(ei) || seen.has(key)) {\n return;\n }\n seen.add(key);\n edges.push({\n from,\n to,\n ...side.from === \"start\" ? { fromStrand: flip(ownStrand(from)) } : {},\n ...side.to === \"end\" ? { toStrand: flip(ownStrand(to)) } : {}\n });\n });\n return {\n graph: { ...graph, nodes, edges, paths: void 0, pathVisits: void 0 },\n runs\n };\n}\nfunction splitRuns(positions, runs, weightOf) {\n const out = { ...positions };\n for (const [id, members] of runs) {\n const line = positions[id];\n if (!line?.length) {\n continue;\n }\n delete out[id];\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n const weights = members.map((m) => Math.max(weightOf(m), 0));\n const weightSum = weights.reduce((a, b) => a + b, 0) || members.length;\n let from = 0;\n members.forEach((member, k) => {\n const share = weightSum ? weights[k] / weightSum * total : total / members.length;\n const to = k === members.length - 1 ? total : from + share;\n out[member] = slice(line, arc, from, to);\n from = to;\n });\n }\n return out;\n}\nfunction polylineSlice(line, from, to) {\n if (line.length === 0) {\n return [];\n }\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n return slice(line, arc, from * total, to * total);\n}\nfunction polylineMidpoint(line) {\n const arc = arcPrefix(line);\n return pointAt(line, arc, arc.at(-1) / 2);\n}\nfunction arcPrefix(line) {\n const arc = [0];\n for (let i = 1; i < line.length; i++) {\n arc.push(\n arc[i - 1] + Math.hypot(line[i].x - line[i - 1].x, line[i].y - line[i - 1].y)\n );\n }\n return arc;\n}\nfunction pointAt(line, arc, s) {\n if (s <= 0) {\n return { ...line[0] };\n }\n let i = 1;\n while (i < arc.length && arc[i] < s) {\n i++;\n }\n if (i >= arc.length) {\n return { ...line.at(-1) };\n }\n const span = arc[i] - arc[i - 1];\n const t = span > 0 ? (s - arc[i - 1]) / span : 0;\n const a = line[i - 1];\n const b = line[i];\n return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };\n}\nfunction slice(line, arc, from, to) {\n const points = [pointAt(line, arc, from)];\n for (let i = 0; i < line.length; i++) {\n if (arc[i] > from && arc[i] < to) {\n points.push({ ...line[i] });\n }\n }\n points.push(pointAt(line, arc, to));\n return points;\n}\n\nexport {\n mergeRuns,\n splitRuns,\n polylineSlice,\n polylineMidpoint\n};\n", "import {\n computeEdgeCurves,\n edgeJoinOf,\n routedEdgeCurves,\n strandSides\n} from \"./chunk-2CVHXFK7.js\";\nimport {\n firstNodeAtOrAfter,\n isBackbone\n} from \"./chunk-FYQWPEEY.js\";\n\n// src/deletionEdges.ts\nvar MIN_DELETION_BP = 1;\nfunction bypassedPoints(nodePositions, bypassed) {\n return bypassed.flatMap((id) => nodePositions[id] ?? []);\n}\nfunction deletionArcCurves(nodePositions, deletion, axis, route, stranded = false) {\n const from = nodePositions[deletion.from];\n const to = nodePositions[deletion.to];\n if (!from?.length || !to?.length) {\n return void 0;\n }\n return route ? routedEdgeCurves(\n from,\n to,\n route,\n stranded ? strandSides(deletion) : void 0\n ) : computeEdgeCurves(\n from,\n to,\n edgeJoinOf(deletion, stranded),\n 0,\n 0,\n axis,\n bypassedPoints(nodePositions, deletion.bypassed)\n );\n}\nfunction backboneBySequence(graph) {\n const bySequence = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n if (isBackbone(node)) {\n const list = bySequence.get(node.stable.refName);\n if (list) {\n list.push(node);\n } else {\n bySequence.set(node.stable.refName, [node]);\n }\n }\n }\n for (const list of bySequence.values()) {\n list.sort((a, b) => a.stable.start - b.stable.start);\n }\n return bySequence;\n}\nfunction bypassedNodes(nodes, start, end) {\n const bypassed = [];\n if (nodes) {\n for (let i = firstNodeAtOrAfter(nodes, start); i < nodes.length; i++) {\n const node = nodes[i];\n if (node.stable.start >= end) {\n break;\n }\n if (node.stable.start + node.length <= end) {\n bypassed.push(node.id);\n }\n }\n }\n return bypassed;\n}\nfunction skipsBetween(edge, from, to, forwards) {\n const { fromStrand, toStrand } = edge;\n if (fromStrand === void 0 || toStrand === void 0) {\n return true;\n }\n const leavesRight = fromStrand === (from.stable.strand ?? \"+\");\n const arrivesLeft = toStrand === (to.stable.strand ?? \"+\");\n return forwards ? leavesRight && arrivesLeft : !leavesRight && !arrivesLeft;\n}\nfunction deletionEdges(graph) {\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const backbone = backboneBySequence(graph);\n const found = [];\n for (let edgeIndex = 0; edgeIndex < graph.edges.length; edgeIndex++) {\n const edge = graph.edges[edgeIndex];\n const from = byId.get(edge.from);\n const to = byId.get(edge.to);\n if (from !== void 0 && to !== void 0 && isBackbone(from) && isBackbone(to) && from.stable.refName === to.stable.refName) {\n const forwards = from.stable.start <= to.stable.start;\n const [left, right] = forwards ? [from, to] : [to, from];\n const start = left.stable.start + left.length;\n const end = right.stable.start;\n const bp = end - start;\n if (bp >= MIN_DELETION_BP && skipsBetween(edge, from, to, forwards)) {\n const refName = left.stable.refName;\n found.push({\n edgeIndex,\n from: edge.from,\n to: edge.to,\n ...edge.fromStrand ? { fromStrand: edge.fromStrand } : {},\n ...edge.toStrand ? { toStrand: edge.toStrand } : {},\n refName,\n start,\n end,\n bp,\n bypassed: bypassedNodes(backbone.get(refName), start, end)\n });\n }\n }\n }\n return found;\n}\nfunction closableDeletions(graph, deletions) {\n const parent = /* @__PURE__ */ new Map();\n const root = (id) => {\n let r = id;\n while (parent.has(r)) {\n r = parent.get(r);\n }\n if (r !== id) {\n parent.set(id, r);\n }\n return r;\n };\n const join = (a, b) => {\n const [ra, rb] = [root(a), root(b)];\n if (ra !== rb) {\n parent.set(ra, rb);\n }\n return ra !== rb;\n };\n const candidates = new Set(deletions.map((d) => d.edgeIndex));\n graph.edges.forEach((e, ei) => {\n if (!candidates.has(ei)) {\n join(e.from, e.to);\n }\n });\n return new Set(\n deletions.filter((d) => !join(d.from, d.to)).map((d) => d.edgeIndex)\n );\n}\nvar drawings = /* @__PURE__ */ new WeakMap();\nfunction deletionDrawing(graph, deletions, show = true) {\n let byShow = drawings.get(deletions);\n if (!byShow) {\n byShow = /* @__PURE__ */ new Map();\n drawings.set(deletions, byShow);\n }\n let drawing = byShow.get(show);\n if (!drawing) {\n const hidden = show ? /* @__PURE__ */ new Set() : closableDeletions(graph, deletions);\n drawing = {\n shown: deletions.filter((d) => !hidden.has(d.edgeIndex)),\n bypassed: new Map(deletions.map((d) => [d.edgeIndex, d.bypassed])),\n hidden\n };\n byShow.set(show, drawing);\n }\n return drawing;\n}\n\nexport {\n bypassedPoints,\n deletionArcCurves,\n deletionEdges,\n closableDeletions,\n deletionDrawing\n};\n", "import {\n occupancy\n} from \"./chunk-AB35TJST.js\";\nimport {\n polylineMidpoint\n} from \"./chunk-TAMCZHLW.js\";\nimport {\n deletionArcCurves\n} from \"./chunk-N6FECAXP.js\";\nimport {\n curveBounds,\n curveMidpoint\n} from \"./chunk-2CVHXFK7.js\";\n\n// src/graphLabels.ts\nvar MIN_DELETION_LABEL_PX = 26;\nvar PX_PER_NODE_LABEL = 4e4;\nvar MIN_NODE_LABELS = 8;\nvar LEADER_GAP_PX = 8;\nvar LABEL_CHAR_PX = 5.7;\nvar LABEL_PAD_PX = 6;\nvar LABEL_HEIGHT_PX = 13;\nvar LABEL_GAP_PX = 3;\nvar MAX_LABEL_OVERHANG = 2;\nfunction labelHalfWidth(text) {\n return (text.length * LABEL_CHAR_PX + LABEL_PAD_PX + LABEL_GAP_PX) / 2;\n}\nvar LABEL_HALF_HEIGHT = (LABEL_HEIGHT_PX + LABEL_GAP_PX) / 2;\nvar MIN_LABEL_HALF_WIDTH = labelHalfWidth(\"1 bp\");\nfunction boxAt(halfW, x, y) {\n return {\n x0: x - halfW,\n x1: x + halfW,\n y0: y - LABEL_HALF_HEIGHT,\n y1: y + LABEL_HALF_HEIGHT\n };\n}\nfunction rowLabelBox(text, screenY) {\n return {\n x0: 6,\n x1: 6 + text.length * 6.2 + 8 + LABEL_GAP_PX,\n y0: screenY - 8 - LABEL_GAP_PX / 2,\n y1: screenY + 8 + LABEL_GAP_PX / 2\n };\n}\nfunction clamp(v, lo, hi) {\n return hi < lo ? v : Math.min(Math.max(v, lo), hi);\n}\nfunction groupDigits(n) {\n return String(n).replace(/\\B(?=(\\d{3})+$)/g, \",\");\n}\nfunction formatBp(bp) {\n if (bp >= 1e6) {\n return `${+(bp / 1e6).toFixed(1)} Mb`;\n }\n return bp >= 1e3 ? `${+(bp / 1e3).toFixed(1)} kb` : `${bp} bp`;\n}\nfunction deletionText(bp) {\n return `${formatBp(bp)} del`;\n}\nfunction arcOutward(curves, apex, scaleX, scaleY) {\n const first = curves[0];\n const last = curves[curves.length - 1];\n const dx = (apex.x - (first.x0 + last.x1) / 2) * scaleX;\n const dy = (apex.y - (first.y0 + last.y1) / 2) * scaleY;\n const len = Math.hypot(dx, dy);\n return len === 0 ? { x: 0, y: -1 } : { x: dx / len, y: dy / len };\n}\nfunction boxSupport(box, dir) {\n return Math.abs(dir.x) * (box.x1 - box.x0) / 2 + Math.abs(dir.y) * (box.y1 - box.y0) / 2;\n}\nfunction boxRayCrossing(box, dir) {\n const halfW = (box.x1 - box.x0) / 2;\n const halfH = (box.y1 - box.y0) / 2;\n return Math.min(\n dir.x === 0 ? Infinity : halfW / Math.abs(dir.x),\n dir.y === 0 ? Infinity : halfH / Math.abs(dir.y)\n );\n}\nfunction drawnLength(segments, scaleX, scaleY) {\n let total = 0;\n for (let i = 1; i < segments.length; i++) {\n const a = segments[i - 1];\n const b = segments[i];\n total += Math.hypot((b.x - a.x) * scaleX, (b.y - a.y) * scaleY);\n }\n return total;\n}\nfunction runBounds(nodeIds, nodePositions) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const id of nodeIds) {\n for (const p of nodePositions[id] ?? []) {\n minX = Math.min(minX, p.x);\n maxX = Math.max(maxX, p.x);\n minY = Math.min(minY, p.y);\n maxY = Math.max(maxY, p.y);\n }\n }\n return minX === Infinity ? void 0 : { minX, minY, maxX, maxY };\n}\nvar nodeOrderCache = /* @__PURE__ */ new WeakMap();\nfunction labelOrder(nodePositions, nodeLengths) {\n const cached = nodeOrderCache.get(nodePositions);\n if (cached?.nodeLengths === nodeLengths) {\n return cached.order;\n }\n const order = Object.entries(nodePositions).filter(([id, segments]) => segments.length > 0 && nodeLengths.has(id)).sort(([a], [b]) => nodeLengths.get(b) - nodeLengths.get(a));\n nodeOrderCache.set(nodePositions, { nodeLengths, order });\n return order;\n}\nvar arcCache = /* @__PURE__ */ new WeakMap();\nfunction arcPlacements(nodePositions, deletions, axis, version, routes, stranded) {\n const { scaleX, scaleY } = axis;\n const cached = arcCache.get(nodePositions);\n if (cached?.deletions === deletions && cached.routes === routes && cached.stranded === stranded && cached.scaleX === scaleX && cached.scaleY === scaleY && cached.version === version) {\n return cached.arcs;\n }\n const arcs = [];\n for (const deletion of [...deletions].sort((a, b) => b.bp - a.bp)) {\n const curves = deletionArcCurves(\n nodePositions,\n deletion,\n axis,\n routes?.[deletion.edgeIndex],\n stranded\n );\n const apex = curves ? curveMidpoint(curves) : void 0;\n if (curves && apex) {\n const { minX, minY, maxX, maxY } = curveBounds(curves);\n arcs.push({\n deletion,\n curves,\n apex,\n // in screen px, so the two axes' units cannot be added by accident\n extent: Math.max((maxX - minX) * scaleX, (maxY - minY) * scaleY)\n });\n }\n }\n arcCache.set(nodePositions, {\n deletions,\n routes,\n stranded,\n scaleX,\n scaleY,\n version,\n arcs\n });\n return arcs;\n}\nfunction sizeLabelCandidates({\n nodePositions,\n nodeLengths,\n deletions,\n deletionRoutes,\n stranded = false,\n alleleDeletions,\n axis,\n translateX,\n translateY,\n width,\n height,\n version = 0\n}) {\n const { scaleX, scaleY } = axis;\n const deletionCandidates = [];\n const nodeCandidates = [];\n for (const { deletion, curves, apex, extent } of arcPlacements(\n nodePositions,\n deletions,\n axis,\n version,\n deletionRoutes,\n stranded\n )) {\n if (extent >= MIN_DELETION_LABEL_PX) {\n const text = deletionText(deletion.bp);\n const halfW = labelHalfWidth(text);\n const box = boxAt(halfW, 0, 0);\n const arcX = apex.x * scaleX + translateX;\n const arcY = apex.y * scaleY + translateY;\n const fits = extent >= halfW * 2 / MAX_LABEL_OVERHANG;\n const bow = arcOutward(curves, apex, scaleX, scaleY);\n const offset = boxSupport(box, bow) + LEADER_GAP_PX;\n const x = fits ? arcX : clamp(arcX + bow.x * offset, halfW, width - halfW);\n const y = fits ? arcY : clamp(\n arcY + bow.y * offset,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n const away = Math.hypot(x - arcX, y - arcY);\n let leader;\n if (away > 0) {\n const dir = { x: (x - arcX) / away, y: (y - arcY) / away };\n const crossing = boxRayCrossing(box, dir);\n leader = {\n arcX,\n arcY,\n labelX: x - dir.x * crossing,\n labelY: y - dir.y * crossing\n };\n }\n deletionCandidates.push({\n label: {\n key: `del:${deletion.edgeIndex}`,\n text,\n x,\n y,\n kind: \"deletion\",\n leader\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n const labelledByDeletion = /* @__PURE__ */ new Set();\n const alleleRuns = [...alleleDeletions ?? []].sort((a, b) => b.bp - a.bp);\n for (const run of alleleRuns) {\n const drawn = runBounds(run.nodeIds, nodePositions);\n if (!drawn) {\n continue;\n }\n const shownLeft = Math.max(drawn.minX * scaleX + translateX, 0);\n const shownRight = Math.min(drawn.maxX * scaleX + translateX, width);\n const shownTop = Math.max(drawn.minY * scaleY + translateY, 0);\n const shownBottom = Math.min(drawn.maxY * scaleY + translateY, height);\n if (shownRight < shownLeft || shownBottom < shownTop) {\n continue;\n }\n const extent = Math.max(shownRight - shownLeft, shownBottom - shownTop);\n const text = deletionText(run.bp);\n const halfW = labelHalfWidth(text);\n if (extent >= halfW * 2 / MAX_LABEL_OVERHANG) {\n for (const id of run.nodeIds) {\n labelledByDeletion.add(id);\n }\n const x = clamp((shownLeft + shownRight) / 2, halfW, width - halfW);\n const y = clamp(\n (shownTop + shownBottom) / 2,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n deletionCandidates.push({\n label: {\n key: `alleledel:${run.nodeIds.join(\",\")}`,\n text,\n x,\n y,\n kind: \"deletion\"\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n for (const [id, segments] of labelOrder(nodePositions, nodeLengths)) {\n if (labelledByDeletion.has(id)) {\n continue;\n }\n const { x, y } = polylineMidpoint(segments);\n const screenY = y * scaleY + translateY;\n if (screenY + LABEL_HALF_HEIGHT <= 0 || screenY - LABEL_HALF_HEIGHT >= height) {\n continue;\n }\n const drawn = drawnLength(segments, scaleX, scaleY);\n if (drawn < MIN_LABEL_HALF_WIDTH * 2 / MAX_LABEL_OVERHANG) {\n continue;\n }\n const text = formatBp(nodeLengths.get(id));\n const halfW = labelHalfWidth(text);\n if (drawn >= halfW * 2 / MAX_LABEL_OVERHANG) {\n const screenX = x * scaleX + translateX;\n nodeCandidates.push({\n label: {\n key: `node:${id}`,\n text,\n x: screenX,\n y: screenY,\n kind: \"node\"\n },\n box: boxAt(halfW, screenX, screenY)\n });\n }\n }\n return { deletions: deletionCandidates, nodes: nodeCandidates };\n}\nfunction nodeLabelBudget(width, height) {\n return Math.max(\n MIN_NODE_LABELS,\n Math.floor(width * height / PX_PER_NODE_LABEL)\n );\n}\nfunction placeSizeLabels(candidates, take, budget = Infinity) {\n const labels = [];\n for (const { label, box } of candidates) {\n if (labels.length >= budget) {\n break;\n }\n if (take(box)) {\n labels.push(label);\n }\n }\n return labels;\n}\nfunction graphLabels({\n reserved,\n ...args\n}) {\n const take = occupancy(args, reserved);\n const { deletions, nodes } = sizeLabelCandidates(args);\n return [\n ...placeSizeLabels(deletions, take),\n ...placeSizeLabels(nodes, take, nodeLabelBudget(args.width, args.height))\n ];\n}\n\nexport {\n rowLabelBox,\n groupDigits,\n formatBp,\n sizeLabelCandidates,\n nodeLabelBudget,\n placeSizeLabels,\n graphLabels\n};\n", "import {\n panSNSample\n} from \"./chunk-BPLIXMH7.js\";\nimport {\n REFERENCE_RANK\n} from \"./chunk-FYQWPEEY.js\";\n\n// src/pathAnchoring.ts\nvar RANGE_SUFFIX = /:(\\d+)-\\d+$/;\nfunction pathOrigin(pathName) {\n const match = RANGE_SUFFIX.exec(pathName);\n return match ? { name: pathName.slice(0, match.index), start: +match[1] } : { name: pathName, start: 0 };\n}\nfunction surveyPaths(paths, lengthOf) {\n const anchorPaths = [];\n const pathVisits = /* @__PURE__ */ new Map();\n for (const path of paths) {\n const sample = panSNSample(path.name);\n let pos = path.start;\n for (const step of path.steps) {\n const visit = {\n path: path.name,\n sample,\n start: pos,\n strand: step.strand\n };\n const existing = pathVisits.get(step.id);\n if (existing) {\n existing.push(visit);\n } else {\n pathVisits.set(step.id, [visit]);\n }\n pos += lengthOf(step.id);\n }\n anchorPaths.push({\n name: path.name,\n sample,\n start: path.start,\n length: pos - path.start\n });\n }\n return { anchorPaths, pathVisits };\n}\nfunction chooseReferencePath(anchorPaths, preferred) {\n const named = anchorPaths.find(\n (p) => p.sample === preferred || p.name === preferred\n );\n return named ?? anchorPaths[0];\n}\nvar OFF_REFERENCE_RANK = 1;\nfunction anchorNode(node, visits, reference) {\n let anchored = node;\n if (visits && visits.length > 0) {\n const anchor = visits.find((v) => v.path === reference) ?? visits[0];\n anchored = {\n ...node,\n stable: {\n refName: anchor.path,\n start: anchor.start,\n rank: anchor.path === reference ? REFERENCE_RANK : OFF_REFERENCE_RANK,\n strand: anchor.strand\n },\n samples: [...new Set(visits.map((v) => v.sample))].sort()\n };\n }\n return anchored;\n}\nfunction anchorFromPaths(graph, preferred) {\n const { anchorPaths, pathVisits } = graph;\n const reference = anchorPaths && pathVisits ? chooseReferencePath(anchorPaths, preferred) : void 0;\n return reference && pathVisits ? {\n ...graph,\n nodes: graph.nodes.map(\n (node) => anchorNode(node, pathVisits.get(node.name), reference.name)\n ),\n anchoredBy: \"paths\",\n referencePath: reference.name\n } : graph;\n}\nfunction anchorGraph(graph, preferred) {\n return graph.anchoredBy === \"tags\" ? graph : anchorFromPaths(graph, preferred);\n}\nfunction trimOrigins(graph, kept) {\n if (!graph.anchorPaths) {\n return void 0;\n }\n const lengthOf = new Map(graph.nodes.map((n) => [n.id, n.length]));\n const bp = (ids, end = ids.length) => {\n let sum = 0;\n for (let i = 0; i < end; i++) {\n sum += lengthOf.get(ids[i]) ?? 0;\n }\n return sum;\n };\n const byOrigin = /* @__PURE__ */ new Map();\n for (const path of graph.paths ?? []) {\n const origin = pathOrigin(path.name).name;\n byOrigin.set(origin, [...byOrigin.get(origin) ?? [], path]);\n }\n return graph.anchorPaths.map((o) => {\n const pieces = byOrigin.get(o.name);\n const path = pieces?.length === 1 ? pieces[0] : void 0;\n const stretch = path && kept.get(path.name);\n return path && stretch ? {\n ...o,\n start: o.start + bp(path.nodeIds, stretch.first),\n length: bp(stretch.nodeIds)\n } : o;\n });\n}\n\nexport {\n pathOrigin,\n surveyPaths,\n chooseReferencePath,\n anchorFromPaths,\n anchorGraph,\n trimOrigins\n};\n", "import {\n groupDigits\n} from \"./chunk-3ZZSX5HN.js\";\nimport {\n pathOrigin\n} from \"./chunk-ST2IBUAN.js\";\nimport {\n isGenericSample\n} from \"./chunk-BPLIXMH7.js\";\n\n// src/pathColors.ts\nfunction nameHue(name) {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return Math.abs(hash % 360);\n}\nfunction pathHueAt(index, count) {\n return index * 360 / count;\n}\nvar PATH_SATURATION = 0.7;\nvar PATH_LIGHTNESS = 0.5;\nvar MAX_PATH_COLORS = 16;\nfunction pathColorsLegible(pathCount) {\n return pathCount > 0 && pathCount <= MAX_PATH_COLORS;\n}\nfunction pathCssColor(index, count) {\n return `hsl(${pathHueAt(index, count)}, ${PATH_SATURATION * 100}%, ${PATH_LIGHTNESS * 100}%)`;\n}\nfunction pathGreyCssColor(index, count) {\n const lightness = count > 1 ? 25 + 45 * index / (count - 1) : 45;\n return `hsl(0, 0%, ${lightness}%)`;\n}\nfunction labelTiers(name) {\n const parts = pathOrigin(name).name.split(\"#\");\n const full = parts.join(\"#\");\n if (parts.length >= 3 && isGenericSample(parts[0])) {\n const contig = parts.slice(2).join(\"#\");\n return [contig, contig, full];\n }\n return [parts[0], parts.slice(0, 2).join(\"#\"), full];\n}\nfunction offsetTiers(name, tiers) {\n const { start } = pathOrigin(name);\n return tiers.map((t) => `${t} @${groupDigits(start)}`);\n}\nfunction pathLegend(paths, colors) {\n const firstOf = /* @__PURE__ */ new Map();\n paths.forEach((path, i) => {\n if (!firstOf.has(path.name)) {\n firstOf.set(path.name, i);\n }\n });\n const entries = [...firstOf].map(([name, i]) => ({ name, i }));\n const named = entries.map((e) => labelTiers(e.name));\n const candidates = [0, 1, 2].flatMap((t) => [\n entries.map((_, k) => named[k][t]),\n entries.map((e, k) => offsetTiers(e.name, named[k])[t])\n ]);\n const distinct = candidates.find(\n (labels2) => new Set(labels2).size === entries.length\n );\n const labels = distinct ?? candidates.at(-1);\n return entries.map(({ name, i }, k) => ({\n name,\n label: labels[k],\n color: colors?.[i] ?? pathCssColor(i, paths.length)\n }));\n}\nfunction walkLabelsOf(entries) {\n const seen = /* @__PURE__ */ new Map();\n return new Map(\n [...entries].sort((a, b) => a.label.localeCompare(b.label)).map((e) => {\n const n = (seen.get(e.label) ?? 0) + 1;\n seen.set(e.label, n);\n return [e.name, n > 1 ? `${e.label} (${n})` : e.label];\n })\n );\n}\n\nexport {\n nameHue,\n pathHueAt,\n PATH_SATURATION,\n PATH_LIGHTNESS,\n MAX_PATH_COLORS,\n pathColorsLegible,\n pathCssColor,\n pathGreyCssColor,\n pathLegend,\n walkLabelsOf\n};\n", "// src/nodeWidths.ts\nvar NODE_WIDTHS = [\n {\n value: \"depth\",\n label: \"By depth\",\n description: \"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform.\"\n },\n {\n value: \"uniform\",\n label: \"Uniform\",\n description: \"Every node the same thickness.\"\n }\n];\nvar NODE_WIDTH_VALUES = NODE_WIDTHS.map((w) => w.value);\nvar MIN_FACTOR = 0.3;\nvar MAX_FACTOR = 3;\nfunction meanDepth(graph) {\n let weighted = 0;\n let length = 0;\n for (const node of graph.nodes) {\n weighted += node.depth * node.length;\n length += node.length;\n }\n return length > 0 ? weighted / length : 0;\n}\nfunction depthWidthFactor(node, mean) {\n if (!(mean > 0) || !(node.depth > 0)) {\n return 1;\n }\n return Math.min(\n MAX_FACTOR,\n Math.max(MIN_FACTOR, Math.sqrt(node.depth / mean))\n );\n}\nfunction nodeWidthPx(node, contigThickness, nodeWidth, mean) {\n return contigThickness * (nodeWidth === \"depth\" ? depthWidthFactor(node, mean) : 1);\n}\nfunction maxNodeWidthPx(contigThickness, nodeWidth) {\n return contigThickness * (nodeWidth === \"depth\" ? MAX_FACTOR : 1);\n}\nfunction nodeInk(graph, nodeById, contigThickness, nodeWidth) {\n const mean = graph ? meanDepth(graph) : 0;\n return {\n maxHalfWidthPx: maxNodeWidthPx(contigThickness, nodeWidth) / 2,\n halfWidthPx: (id) => {\n const node = nodeById?.get(id);\n return node ? nodeWidthPx(node, contigThickness, nodeWidth, mean) / 2 : contigThickness / 2;\n }\n };\n}\n\nexport {\n NODE_WIDTHS,\n NODE_WIDTH_VALUES,\n meanDepth,\n depthWidthFactor,\n nodeWidthPx,\n maxNodeWidthPx,\n nodeInk\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["ROW_HEIGHT_PX", "LABEL_PX", "LABEL_CHAR_PX", "LABEL_PAD", "labelWidth", "text", "overlaps", "a", "b", "offFrame", "box", "frame", "insideFrame", "occupancy", "reserved", "placed", "p", "placeLabels", "candidates", "take", "out", "row", "place", "w", "direction", "tries", "y", "svgPath", "points", "round", "v", "p", "i", "projectLine", "x1", "y1", "x2", "y2", "distance", "d", "vx", "vy", "curvePointAt", "c", "t", "u", "a", "b", "e", "curveMidpoint", "curves", "mid", "curveBounds", "minX", "minY", "maxX", "maxY", "subCurve", "t0", "t1", "p0", "p1", "dt", "d0", "curveTangentAt", "d1", "dashCurves", "dashWorld", "lengths", "total", "spans", "out", "from", "to", "dash", "start", "k", "length", "end", "translateCurves", "dx", "dy", "attachment", "segments", "side", "last", "TANGENT_SPAN_FACTOR", "MAX_TANGENT", "ownStrand", "id", "strandSides", "edge", "own", "strand", "spanOf", "min", "max", "s", "distanceToSpan", "x", "span", "facingSide", "other", "tieBreak", "startGap", "endGap", "facingSides", "fromSegments", "toSegments", "laidSides", "heldFacingSides", "byTo", "sides", "APEX_FRACTION", "BOW_CLEARANCE", "ALONG_FRACTION", "MAX_ROW_BOW_PX", "ROW_HEIGHT_PX", "bowAround", "p1x", "p1y", "p2x", "p2y", "toward", "maxBow", "chord", "ux", "uy", "reach", "minAlong", "maxAlong", "perp", "along", "uncapped", "size", "yToXOf", "scaleX", "scaleY", "PATH_RIBBON_SPACING", "drawnDirection", "yToX", "len", "pathRibbonOffsets", "count", "axis", "spacing", "dir", "offsets", "scaleYOf", "unscaleYOf", "SELF_LOOP_MIN_PX", "SELF_LOOP_MAX_PX", "selfLoopReach", "scale", "nodePx", "selfLinkOf", "edgeJoinOf", "stranded", "self", "hairpinCurves", "attach", "offsetX", "offsetY", "at", "inward", "px", "py", "nearX", "nearY", "apexX", "apexY", "sideX", "sideY", "computeEdgeCurves", "join", "bypassed", "maxBowIn", "loop", "fromAttach", "toAttach", "fromEnd", "toStart", "segDirX", "segDirY", "ext", "perpX", "perpY", "midX", "midY", "cp1x", "cp1y", "cp2x", "cp2y", "fromPrev", "toNext", "dist", "tangentProj", "prev", "towardX", "towardY", "towardToX", "towardToY", "cx1", "cy1", "cx2", "cy2", "bulge", "chordLen", "bulgeX", "bulgeY", "spreadX", "spreadY", "nearerEnd", "routedEdgeCurves", "route", "tangent", "q", "next", "ta", "tb", "flip", "strand", "mergeRuns", "graph", "alone", "sides", "strandSides", "at", "attach", "id", "side", "ei", "key", "list", "edge", "joinAfter", "a", "out", "joined", "runOf", "runs", "node", "into", "pred", "run", "next", "byId", "n", "nodes", "members", "backbone", "isBackbone", "first", "sum", "seen", "edges", "from", "to", "ownStrand", "splitRuns", "positions", "weightOf", "line", "arc", "arcPrefix", "total", "weights", "m", "weightSum", "b", "member", "k", "share", "slice", "polylineSlice", "polylineMidpoint", "pointAt", "i", "s", "span", "t", "points", "MIN_DELETION_BP", "bypassedPoints", "nodePositions", "bypassed", "id", "deletionArcCurves", "deletion", "axis", "route", "stranded", "from", "to", "routedEdgeCurves", "strandSides", "computeEdgeCurves", "edgeJoinOf", "backboneBySequence", "graph", "bySequence", "node", "isBackbone", "list", "a", "b", "bypassedNodes", "nodes", "start", "end", "i", "firstNodeAtOrAfter", "skipsBetween", "edge", "forwards", "fromStrand", "toStrand", "leavesRight", "arrivesLeft", "deletionEdges", "byId", "n", "backbone", "found", "edgeIndex", "left", "right", "bp", "refName", "closableDeletions", "deletions", "parent", "root", "r", "join", "ra", "rb", "candidates", "d", "e", "ei", "drawings", "deletionDrawing", "show", "byShow", "drawing", "hidden", "MIN_DELETION_LABEL_PX", "PX_PER_NODE_LABEL", "MIN_NODE_LABELS", "LEADER_GAP_PX", "LABEL_CHAR_PX", "LABEL_PAD_PX", "LABEL_HEIGHT_PX", "LABEL_GAP_PX", "MAX_LABEL_OVERHANG", "labelHalfWidth", "text", "LABEL_HALF_HEIGHT", "MIN_LABEL_HALF_WIDTH", "boxAt", "halfW", "x", "y", "rowLabelBox", "screenY", "clamp", "v", "lo", "hi", "groupDigits", "n", "formatBp", "bp", "deletionText", "arcOutward", "curves", "apex", "scaleX", "scaleY", "first", "last", "dx", "dy", "len", "boxSupport", "box", "dir", "boxRayCrossing", "halfH", "drawnLength", "segments", "total", "i", "a", "b", "runBounds", "nodeIds", "nodePositions", "minX", "minY", "maxX", "maxY", "id", "p", "nodeOrderCache", "labelOrder", "nodeLengths", "cached", "order", "arcCache", "arcPlacements", "deletions", "axis", "version", "routes", "stranded", "arcs", "deletion", "deletionArcCurves", "curveMidpoint", "curveBounds", "sizeLabelCandidates", "deletionRoutes", "alleleDeletions", "translateX", "translateY", "width", "height", "deletionCandidates", "nodeCandidates", "extent", "arcX", "arcY", "fits", "bow", "offset", "away", "leader", "crossing", "labelledByDeletion", "alleleRuns", "run", "drawn", "shownLeft", "shownRight", "shownTop", "shownBottom", "polylineMidpoint", "screenX", "nodeLabelBudget", "placeSizeLabels", "candidates", "take", "budget", "labels", "label", "RANGE_SUFFIX", "pathOrigin", "pathName", "match", "surveyPaths", "paths", "lengthOf", "anchorPaths", "pathVisits", "path", "sample", "panSNSample", "pos", "step", "visit", "existing", "chooseReferencePath", "preferred", "p", "OFF_REFERENCE_RANK", "anchorNode", "node", "visits", "reference", "anchored", "anchor", "v", "REFERENCE_RANK", "anchorFromPaths", "graph", "anchorGraph", "trimOrigins", "kept", "n", "bp", "ids", "end", "sum", "byOrigin", "origin", "o", "pieces", "stretch", "nameHue", "name", "hash", "i", "pathHueAt", "index", "count", "PATH_SATURATION", "PATH_LIGHTNESS", "MAX_PATH_COLORS", "pathColorsLegible", "pathCount", "pathCssColor", "pathGreyCssColor", "labelTiers", "parts", "pathOrigin", "full", "isGenericSample", "contig", "offsetTiers", "tiers", "start", "t", "groupDigits", "pathLegend", "paths", "colors", "firstOf", "path", "entries", "named", "e", "candidates", "_", "k", "labels", "labels2", "walkLabelsOf", "seen", "a", "b", "n", "NODE_WIDTHS", "NODE_WIDTH_VALUES", "w", "MIN_FACTOR", "MAX_FACTOR", "meanDepth", "graph", "weighted", "length", "node", "depthWidthFactor", "mean", "nodeWidthPx", "contigThickness", "nodeWidth", "maxNodeWidthPx", "nodeInk", "nodeById", "id"]
7
+ }
@@ -1,2 +1,2 @@
1
1
  var e="#";function c(t){return t.split(e)[0]}var a=new Set(["_gbwt_ref"]);function u(t){return a.has(t)}function l(t){let n=t.split(e);return n.length>=3?`${n[0]}${e}${n[1]}`:void 0}function S(t){let n=t.split(e);return n.length>=3?n.slice(2).join(e):n.length===2?n[1]:t}function f(t,n){return n!==void 0&&(t===n||t.startsWith(n+e))}function r(t){return t.getConf("assemblyNameToPanSN")??{}}function p(t,n){return n===void 0?void 0:r(t)[n]??n}var i=new WeakMap;function N(t){let n=i.get(t);if(n===void 0){let s=r(t);n={};for(let o of new Set([...Object.keys(s),...t.getConf("assemblyNames")]))n[s[o]??o]=o;i.set(t,n)}return n}export{c as a,u as b,l as c,S as d,f as e,p as f,N as g};
2
- //# sourceMappingURL=chunk-C4PHHPUP.js.map
2
+ //# sourceMappingURL=chunk-DILFGQIL.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BPLIXMH7.js"],
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BPLIXMH7.js"],
4
4
  "sourcesContent": ["// src/pansn.ts\nvar SEP = \"#\";\nfunction panSNSample(refName) {\n return refName.split(SEP)[0];\n}\nvar GENERIC_SAMPLES = /* @__PURE__ */ new Set([\"_gbwt_ref\"]);\nfunction isGenericSample(sample) {\n return GENERIC_SAMPLES.has(sample);\n}\nfunction panSNHaplotype(refName) {\n const parts = refName.split(SEP);\n return parts.length >= 3 ? `${parts[0]}${SEP}${parts[1]}` : void 0;\n}\nfunction panSNContig(refName) {\n const parts = refName.split(SEP);\n return parts.length >= 3 ? parts.slice(2).join(SEP) : parts.length === 2 ? parts[1] : refName;\n}\nfunction panSNMatchesPrefix(refName, prefix) {\n return prefix !== void 0 && (refName === prefix || refName.startsWith(prefix + SEP));\n}\nfunction assemblyNameToPanSN(adapter) {\n return adapter.getConf(\"assemblyNameToPanSN\") ?? {};\n}\nfunction resolvePanSNPrefix(adapter, name) {\n return name === void 0 ? void 0 : assemblyNameToPanSN(adapter)[name] ?? name;\n}\nvar asmByPrefixCache = /* @__PURE__ */ new WeakMap();\nfunction assemblyByPanSNPrefix(adapter) {\n let out = asmByPrefixCache.get(adapter);\n if (out === void 0) {\n const map = assemblyNameToPanSN(adapter);\n out = {};\n for (const asm of /* @__PURE__ */ new Set([\n ...Object.keys(map),\n ...adapter.getConf(\"assemblyNames\")\n ])) {\n out[map[asm] ?? asm] = asm;\n }\n asmByPrefixCache.set(adapter, out);\n }\n return out;\n}\n\nexport {\n panSNSample,\n isGenericSample,\n panSNHaplotype,\n panSNContig,\n panSNMatchesPrefix,\n resolvePanSNPrefix,\n assemblyByPanSNPrefix\n};\n"],
5
5
  "mappings": "AACA,IAAIA,EAAM,IACV,SAASC,EAAYC,EAAS,CAC5B,OAAOA,EAAQ,MAAMF,CAAG,EAAE,CAAC,CAC7B,CACA,IAAIG,EAAkC,IAAI,IAAI,CAAC,WAAW,CAAC,EAC3D,SAASC,EAAgBC,EAAQ,CAC/B,OAAOF,EAAgB,IAAIE,CAAM,CACnC,CACA,SAASC,EAAeJ,EAAS,CAC/B,IAAMK,EAAQL,EAAQ,MAAMF,CAAG,EAC/B,OAAOO,EAAM,QAAU,EAAI,GAAGA,EAAM,CAAC,CAAC,GAAGP,CAAG,GAAGO,EAAM,CAAC,CAAC,GAAK,MAC9D,CACA,SAASC,EAAYN,EAAS,CAC5B,IAAMK,EAAQL,EAAQ,MAAMF,CAAG,EAC/B,OAAOO,EAAM,QAAU,EAAIA,EAAM,MAAM,CAAC,EAAE,KAAKP,CAAG,EAAIO,EAAM,SAAW,EAAIA,EAAM,CAAC,EAAIL,CACxF,CACA,SAASO,EAAmBP,EAASQ,EAAQ,CAC3C,OAAOA,IAAW,SAAWR,IAAYQ,GAAUR,EAAQ,WAAWQ,EAASV,CAAG,EACpF,CACA,SAASW,EAAoBC,EAAS,CACpC,OAAOA,EAAQ,QAAQ,qBAAqB,GAAK,CAAC,CACpD,CACA,SAASC,EAAmBD,EAASE,EAAM,CACzC,OAAOA,IAAS,OAAS,OAASH,EAAoBC,CAAO,EAAEE,CAAI,GAAKA,CAC1E,CACA,IAAIC,EAAmC,IAAI,QAC3C,SAASC,EAAsBJ,EAAS,CACtC,IAAIK,EAAMF,EAAiB,IAAIH,CAAO,EACtC,GAAIK,IAAQ,OAAQ,CAClB,IAAMC,EAAMP,EAAoBC,CAAO,EACvCK,EAAM,CAAC,EACP,QAAWE,KAAuB,IAAI,IAAI,CACxC,GAAG,OAAO,KAAKD,CAAG,EAClB,GAAGN,EAAQ,QAAQ,eAAe,CACpC,CAAC,EACCK,EAAIC,EAAIC,CAAG,GAAKA,CAAG,EAAIA,EAEzBJ,EAAiB,IAAIH,EAASK,CAAG,CACnC,CACA,OAAOA,CACT",
6
6
  "names": ["SEP", "panSNSample", "refName", "GENERIC_SAMPLES", "isGenericSample", "sample", "panSNHaplotype", "parts", "panSNContig", "panSNMatchesPrefix", "prefix", "assemblyNameToPanSN", "adapter", "resolvePanSNPrefix", "name", "asmByPrefixCache", "assemblyByPanSNPrefix", "out", "map", "asm"]
@@ -1,3 +1,3 @@
1
1
  var i=/([><])([^><]+)/g;function h(s){if(!s.startsWith(">")&&!s.startsWith("<"))return;let t=[];for(let[,e,n]of s.matchAll(i))t.push({name:n,strand:e===">"?"+":"-"});return t}function p(s){let t=s.split(" ");if(t.length<12||s.startsWith("#"))return;let e=h(t[5]);if(!e)return;let n,a=!1;for(let o=12;o<t.length;o++){let r=t[o];r.startsWith("cs:Z:")?n=r.slice(5):r==="tp:A:S"&&(a=!0)}return{name:t[0],queryLength:+t[1],queryStart:+t[2],queryEnd:+t[3],strand:t[4]==="-"?"-":"+",path:e,pathLength:+t[6],pathStart:+t[7],pathEnd:+t[8],matches:+t[9],blockLength:+t[10],mappingQuality:+t[11],secondary:a,...n===void 0?{}:{cs:n}}}function l(s){let t=[];for(let e of s.split(`
2
2
  `)){let n=p(e.trimEnd());n&&t.push(n)}return t}var f=/:(\d+)|=([A-Za-z]+)|\*[a-zA-Z]([a-zA-Z])|\+([A-Za-z]+)|-([A-Za-z]+)|~[a-z]{2}(\d+)[a-z]{2}/g;function c(s){let t=[];for(let e of s.matchAll(f))e[1]!==void 0?t.push({op:"match",length:+e[1]}):e[2]!==void 0?t.push({op:"match",length:e[2].length}):e[3]!==void 0?t.push({op:"substitution",seq:e[3].toUpperCase()}):e[4]!==void 0?t.push({op:"insertion",seq:e[4].toUpperCase()}):e[5]!==void 0?t.push({op:"deletion",length:e[5].length}):e[6]!==void 0&&t.push({op:"match",length:+e[6]});return t}export{p as a,l as b,c};
3
- //# sourceMappingURL=chunk-ETTZTJNK.js.map
3
+ //# sourceMappingURL=chunk-EHV7EUMI.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-C44YRP5F.js"],
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-C44YRP5F.js"],
4
4
  "sourcesContent": ["// src/gaf/parseGaf.ts\nvar STEP = /([><])([^><]+)/g;\nfunction parseGafPath(column) {\n if (!column.startsWith(\">\") && !column.startsWith(\"<\")) {\n return void 0;\n }\n const steps = [];\n for (const [, arrow, name] of column.matchAll(STEP)) {\n steps.push({ name, strand: arrow === \">\" ? \"+\" : \"-\" });\n }\n return steps;\n}\nfunction parseGafLine(line) {\n const columns = line.split(\"\t\");\n if (columns.length < 12 || line.startsWith(\"#\")) {\n return void 0;\n }\n const path = parseGafPath(columns[5]);\n if (!path) {\n return void 0;\n }\n let cs;\n let secondary = false;\n for (let i = 12; i < columns.length; i++) {\n const tag = columns[i];\n if (tag.startsWith(\"cs:Z:\")) {\n cs = tag.slice(5);\n } else if (tag === \"tp:A:S\") {\n secondary = true;\n }\n }\n return {\n name: columns[0],\n queryLength: +columns[1],\n queryStart: +columns[2],\n queryEnd: +columns[3],\n strand: columns[4] === \"-\" ? \"-\" : \"+\",\n path,\n pathLength: +columns[6],\n pathStart: +columns[7],\n pathEnd: +columns[8],\n matches: +columns[9],\n blockLength: +columns[10],\n mappingQuality: +columns[11],\n secondary,\n ...cs === void 0 ? {} : { cs }\n };\n}\nfunction parseGaf(text) {\n const records = [];\n for (const line of text.split(\"\\n\")) {\n const record = parseGafLine(line.trimEnd());\n if (record) {\n records.push(record);\n }\n }\n return records;\n}\nvar CS_OP = /:(\\d+)|=([A-Za-z]+)|\\*[a-zA-Z]([a-zA-Z])|\\+([A-Za-z]+)|-([A-Za-z]+)|~[a-z]{2}(\\d+)[a-z]{2}/g;\nfunction parseCs(cs) {\n const ops = [];\n for (const m of cs.matchAll(CS_OP)) {\n if (m[1] !== void 0) {\n ops.push({ op: \"match\", length: +m[1] });\n } else if (m[2] !== void 0) {\n ops.push({ op: \"match\", length: m[2].length });\n } else if (m[3] !== void 0) {\n ops.push({ op: \"substitution\", seq: m[3].toUpperCase() });\n } else if (m[4] !== void 0) {\n ops.push({ op: \"insertion\", seq: m[4].toUpperCase() });\n } else if (m[5] !== void 0) {\n ops.push({ op: \"deletion\", length: m[5].length });\n } else if (m[6] !== void 0) {\n ops.push({ op: \"match\", length: +m[6] });\n }\n }\n return ops;\n}\n\nexport {\n parseGafPath,\n parseGafLine,\n parseGaf,\n parseCs\n};\n"],
5
5
  "mappings": "AACA,IAAIA,EAAO,kBACX,SAASC,EAAaC,EAAQ,CAC5B,GAAI,CAACA,EAAO,WAAW,GAAG,GAAK,CAACA,EAAO,WAAW,GAAG,EACnD,OAEF,IAAMC,EAAQ,CAAC,EACf,OAAW,CAAC,CAAEC,EAAOC,CAAI,IAAKH,EAAO,SAASF,CAAI,EAChDG,EAAM,KAAK,CAAE,KAAAE,EAAM,OAAQD,IAAU,IAAM,IAAM,GAAI,CAAC,EAExD,OAAOD,CACT,CACA,SAASG,EAAaC,EAAM,CAC1B,IAAMC,EAAUD,EAAK,MAAM,GAAG,EAC9B,GAAIC,EAAQ,OAAS,IAAMD,EAAK,WAAW,GAAG,EAC5C,OAEF,IAAME,EAAOR,EAAaO,EAAQ,CAAC,CAAC,EACpC,GAAI,CAACC,EACH,OAEF,IAAIC,EACAC,EAAY,GAChB,QAASC,EAAI,GAAIA,EAAIJ,EAAQ,OAAQI,IAAK,CACxC,IAAMC,EAAML,EAAQI,CAAC,EACjBC,EAAI,WAAW,OAAO,EACxBH,EAAKG,EAAI,MAAM,CAAC,EACPA,IAAQ,WACjBF,EAAY,GAEhB,CACA,MAAO,CACL,KAAMH,EAAQ,CAAC,EACf,YAAa,CAACA,EAAQ,CAAC,EACvB,WAAY,CAACA,EAAQ,CAAC,EACtB,SAAU,CAACA,EAAQ,CAAC,EACpB,OAAQA,EAAQ,CAAC,IAAM,IAAM,IAAM,IACnC,KAAAC,EACA,WAAY,CAACD,EAAQ,CAAC,EACtB,UAAW,CAACA,EAAQ,CAAC,EACrB,QAAS,CAACA,EAAQ,CAAC,EACnB,QAAS,CAACA,EAAQ,CAAC,EACnB,YAAa,CAACA,EAAQ,EAAE,EACxB,eAAgB,CAACA,EAAQ,EAAE,EAC3B,UAAAG,EACA,GAAGD,IAAO,OAAS,CAAC,EAAI,CAAE,GAAAA,CAAG,CAC/B,CACF,CACA,SAASI,EAASC,EAAM,CACtB,IAAMC,EAAU,CAAC,EACjB,QAAWT,KAAQQ,EAAK,MAAM;AAAA,CAAI,EAAG,CACnC,IAAME,EAASX,EAAaC,EAAK,QAAQ,CAAC,EACtCU,GACFD,EAAQ,KAAKC,CAAM,CAEvB,CACA,OAAOD,CACT,CACA,IAAIE,EAAQ,8FACZ,SAASC,EAAQT,EAAI,CACnB,IAAMU,EAAM,CAAC,EACb,QAAWC,KAAKX,EAAG,SAASQ,CAAK,EAC3BG,EAAE,CAAC,IAAM,OACXD,EAAI,KAAK,CAAE,GAAI,QAAS,OAAQ,CAACC,EAAE,CAAC,CAAE,CAAC,EAC9BA,EAAE,CAAC,IAAM,OAClBD,EAAI,KAAK,CAAE,GAAI,QAAS,OAAQC,EAAE,CAAC,EAAE,MAAO,CAAC,EACpCA,EAAE,CAAC,IAAM,OAClBD,EAAI,KAAK,CAAE,GAAI,eAAgB,IAAKC,EAAE,CAAC,EAAE,YAAY,CAAE,CAAC,EAC/CA,EAAE,CAAC,IAAM,OAClBD,EAAI,KAAK,CAAE,GAAI,YAAa,IAAKC,EAAE,CAAC,EAAE,YAAY,CAAE,CAAC,EAC5CA,EAAE,CAAC,IAAM,OAClBD,EAAI,KAAK,CAAE,GAAI,WAAY,OAAQC,EAAE,CAAC,EAAE,MAAO,CAAC,EACvCA,EAAE,CAAC,IAAM,QAClBD,EAAI,KAAK,CAAE,GAAI,QAAS,OAAQ,CAACC,EAAE,CAAC,CAAE,CAAC,EAG3C,OAAOD,CACT",
6
6
  "names": ["STEP", "parseGafPath", "column", "steps", "arrow", "name", "parseGafLine", "line", "columns", "path", "cs", "secondary", "i", "tag", "parseGaf", "text", "records", "record", "CS_OP", "parseCs", "ops", "m"]
@@ -0,0 +1,2 @@
1
+ import{c as I,d as Ze,e as j,f as Je,g as V,h as Q,i as Z,k as he,l as pe}from"./chunk-WTOQRUK2.js";import{A as fe,B as ue,C as z,a as G,b as Ke,c as F,d as ze,e as je,f as U,h as Ve,j as Qe,l as le,m as K,x as de,y as P,z as k}from"./chunk-B7GF3TC3.js";import{d as et}from"./chunk-KRXALLQG.js";import{c as Ue}from"./chunk-EHV7EUMI.js";import{c as C}from"./chunk-MYJYGSOH.js";import{a as Ge,b as Hn}from"./chunk-FY3BTKY4.js";var ar=Ge((yc,Wt)=>{Wt.exports=JBrowseExports.mobx});var Gt=Ge((bc,Ht)=>{Ht.exports=JBrowseExports["@jbrowse/core/util/groupKeys"]});function Gn(e){return e.id.endsWith("-")?"-":"+"}function Un(e,t){return t===Gn(e)?e.id:`-${e.id}`}function Kn(e,t){let n=e.map(()=>{}),r=0,o=0;for(;o<e.length&&e[o]!==void 0;o++)n[o]=r,r+=e[o];let s=t;for(let a=e.length-1;a>o&&e[a]!==void 0;a--)s-=e[a],n[a]=s;return n}function zn(e,t){let n=e.path.map(()=>[]);if(e.cs===void 0)return n;let r=Kn(t,e.pathLength),o=(i,c=!1)=>{for(let l=0;l<r.length;l++){let d=r[l],f=t[l];if(d!==void 0&&f!==void 0&&d<=i&&(i<d+f||c&&i===d+f))return{s:l,local:i-d,room:d+f-i}}},s=(i,c)=>{let l=n[i],d=l.at(-1);c.type==="substitution"&&d?.type==="substitution"&&d.pos+d.seq.length===c.pos?d.seq+=c.seq:l.push(c)},a=e.pathStart;for(let i of Ue(e.cs))if(i.op==="match")a+=i.length;else if(i.op==="substitution"){let c=o(a);c&&s(c.s,{type:"substitution",pos:c.local,seq:i.seq}),a+=1}else if(i.op==="insertion"){let c=o(a,a===e.pathEnd);c&&s(c.s,{type:"insertion",pos:c.local,seq:i.seq})}else{let c=i.length;for(;c>0;){let l=o(a),d=l?Math.min(c,l.room):c;l&&s(l.s,{type:"deletion",pos:l.local,length:d}),a+=d,c-=d}}return n}function Us(e,t,n){let r=new Map(e.nodes.map(s=>[s.name,s])),o=[];for(let s of t){let a=s.path.map(d=>r.get(d.name)),i=a.flatMap((d,f)=>d?[f]:[]),c=i[0],l=i.at(-1);if(c!==void 0&&l!==void 0){let d=zn(s,a.map(m=>m?.length)),f=i.map(m=>Un(a[m],s.path[m].strand)),u=a[l].length;o.push({id:n+o.length,name:s.name,type:"read",sourceTrackID:1,sequence:f,sequenceNew:i.map((m,p)=>({nodeName:f[p],mismatches:d[m]})),firstNodeOffset:c===0?s.pathStart:0,finalNodeCoverLength:l===s.path.length-1?u-(s.pathLength-s.pathEnd):u,mapping_quality:s.mappingQuality===255?0:s.mappingQuality,is_secondary:s.secondary,is_reverse:s.strand==="-"})}}return o}var jn=["#6baed6","#4292c6","#2171b5","#08519c"],Vn=["#fb6a4a","#ef3b2c","#cb181d","#a50f15"];function tt(e){let t=e.is_reverse?Vn:jn;return t[e.id%t.length]}var J=8,me=34,ee=12,Qn=60;function Zn({count:e,bounds:t,pixelRows:n,width:r,room:o,columns:s}){function a(c){let l=Math.ceil(e/c),d=Math.floor((r-(c-1)*J)/c),f=(o-l*me-(l-1)*J)/l,u=(d-2*ee)/t.w,m=t.h>0?(f-2*ee)/t.h:1/0,p=n?u:Math.min(u,m),h=n?t.h:t.h*p,g=Math.floor(Math.max(Qn,Math.min(h+2*ee,f)));return{columns:c,width:d,height:g,scale:p,total:l*(g+me)+(l-1)*J}}if(s!==void 0)return a(Math.max(1,Math.min(e,Math.round(s))));let i=a(1);for(let c=2;c<=e;c++){let l=a(c);l.scale>i.scale&&(i=l)}return i}var Jn=[{value:"",label:"None",description:"Every lifted walk in one drawing"},{value:"walk",label:"A panel per walk",description:"One panel per lifted walk, side by side"},{value:"sample",label:"A row per sample",description:"A row per sample, a column per haplotype"}];function eo(e){let t=typeof e=="string"?{field:e}:e??{};return{field:t.field==="walk"||t.field==="sample"?t.field:"",domain:[...t.domain??[]],...t.columns===void 0?{}:{columns:t.columns}}}function nt(e,t){let n=new Map(t.map((o,s)=>[o,s])),r=o=>n.get(o)??t.length;return e.map((o,s)=>({name:o,i:s})).sort((o,s)=>r(o.name)-r(s.name)||o.i-s.i).map(({name:o})=>o)}function to(e,t,n=[]){let r=nt(e,n),o={columns:void 0,count:e.length,cells:e.map(l=>r.indexOf(l))};if(t==="walk")return o;let s=e.map(l=>{let[d,f,u]=l.split("#"),m=Number(f);return u!==void 0&&Number.isInteger(m)&&m>=0?{sample:d,column:Math.max(0,m-1)}:void 0}),a=nt([...new Set(s.flatMap(l=>l?[l.sample]:[]))],n),i=Math.max(1,...s.map(l=>l?l.column+1:1)),c=s.map(l=>l?a.indexOf(l.sample)*i+l.column:-1);return c.includes(-1)||new Set(c).size<c.length?o:{columns:i,count:a.length*i,cells:c}}var no=10;function oo(e,t){let n=e.end-e.start,r=e.longestAlleleLength-e.shortestAlleleLength;return t.find(o=>r<=no*(o.end-o.start)&&(n===0?o.start<=e.start&&e.start<=o.end:Math.min(e.end,o.end)-Math.max(e.start,o.start)>=n/2))}var ro=40;function $(e){return e>=1e4?`${(e/1e3).toFixed(0)} kb`:e>=1e3?`${(e/1e3).toFixed(1)} kb`:`${e} bp`}function so(e,t){let n=$(e),r=$(t),o=r.slice(r.indexOf(" "));return n.endsWith(o)?`${n.slice(0,-o.length)}\u2013${r}`:`${n}\u2013${r}`}function ot(e){return e>=et?"\u22652.1B routes":e>=1e5?`${(e/1e3).toFixed(0)}k routes`:`${e} routes`}function io(e,t=[]){let n=ao(e,t);return e.partial?{...n,label:`${n.label}, partial`}:n}function ao(e,t){let n=e.end-e.start,{shortestAlleleLength:r,longestAlleleLength:o,pathCount:s,segmentCount:a,inversion:i}=e,c=so(r,o);if(a>=ro)return{kind:"superbubble",label:`${c} superbubble, ${a} segments, ${ot(s)}${i?", inv":""}`};if(i)return{kind:"inversion",label:`${$(o)} inv`};let l=o!==r?oo(e,t):void 0;if(l){let f=l.name?` (${l.name})`:"";return{kind:"repeat",label:`${c} repeat array${f}, ${ot(s)}`}}let d=s>2?`, ${s} alleles`:"";return r===o&&r===n?n<=1?{kind:"snp",label:"SNP"}:{kind:"substitution",label:`${$(n)} sub`}:n===0||r===n?{kind:"insertion",label:`\u2264${$(o-n)} ins${d}`}:o===n?{kind:"deletion",label:`${$(n-r)} del${d}`}:{kind:"complex",label:`${$(n)} ref \u2192 ${c}, ${s} alleles`}}var co={snp:"#5b6b7a",substitution:"#5b6b7a",insertion:"#2f8fd6",deletion:"#c94040",inversion:"#e07b00",repeat:"#8e3fbf",superbubble:"#8e3fbf",complex:"#8e3fbf"},lo={snp:"SNP",substitution:"substitution",insertion:"insertion",deletion:"deletion",inversion:"inversion",repeat:"repeat array",superbubble:"superbubble",complex:"site"};function fo(e){return e.segments.split(",").filter(Boolean)}function te(e){return`hsl(${e}, 70%, 50%)`}function ge(e,t){let n=(e-t.start)/(t.end-t.start);return Math.max(0,Math.min(1,n))*Q}var uo=30;function rt({start:e,bp:t,reversed:n},r){let o=ge(e,r),s=ge(e+t,r);if(s-o<1)return[(o+s)/2];let a=Math.ceil((s-o)/uo);return Array.from({length:a+1},(i,c)=>ge(e+t*(n?a-c:c)/a,r))}var xe=Array.from({length:7},(e,t)=>({offset:t/6,color:te(t/6*Q)})),st=`linear-gradient(to right, ${xe.map(e=>`${e.color} ${e.offset*100}%`).join(", ")})`;function R(e,t={},...n){return{tag:e,attrs:t,children:n.filter(r=>!!r||r==="")}}function it(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")}function ho(e){return it(e).replaceAll('"',"&quot;")}function po(e){if(typeof e=="string")return it(e);let t=Object.entries(e.attrs).filter(([,n])=>n!==void 0).map(([n,r])=>` ${n}="${ho(String(r))}"`).join("");return`<${e.tag}${t}>${e.children.map(po).join("")}</${e.tag}>`}var we="#2f8fd6",Ee="#8e3fbf",Se="#bdbdbd",Y="#1c1c22",ve=12,Re=4,be=12,mo=6,go=3;function X(e){return`${(e/1e3).toFixed(e<1e4?1:0)} kb`}function at(e,t){return t?` \u2248 ${Math.round(e/t)} units`:""}function ct(e,t,n,r){let{bp:o,gapBp:s,complete:a}=e;if(!t)return`${X(o)}${at(o,n)}`;let i=o-t.bp,c=i===0?"":` (${i>0?"+":"\u2212"}${X(Math.abs(i))})`,l=s>0?` \xB7 ${X(s)} outside the cut`:"",d=r?` \xB7 called ${X(r.bp)}${r.spanningReads===0?" \xB7 no spanning read":""}`:"";return`${X(o)}${at(o,n)}${c}${l}${a?"":" \xB7 partial walk"}${d}`}function lt(e,t,n){let r=t+6;return r+e.length*F<n?{x:r,anchor:"start",halo:!1}:{x:t-6,anchor:"end",halo:!0}}function dt(e,t,n){if(t*n<go)return[];let r=[];for(let o=t;o<e;o+=t)r.push(o);return r}function ft(e,t){if(e.gap)return{fill:Se};if(!t)return{fill:e.onReference?we:Ee};if(e.referenceStart===void 0)return{fill:Z};let n=rt({...e,start:e.referenceStart},t);return n.length===1?{fill:te(n[0])}:{stops:n.map(te)}}function Me(e,t,n){return e.reversed?{start:e.start-n,end:e.start-t}:{start:t-e.start,end:n-e.start}}function xo(e,t){return e.reversed?{start:e.start-t,end:e.start}:{start:e.start,end:e.start+t}}function yo(e,t){let n=new Map;for(let r of e){let o=t.get(r.name);if(!r.axis||!o)continue;let s=r.axis,a=({start:i,end:c})=>({start:Math.max(0,i),end:Math.min(r.bp,c)});n.set(r.name,o.map(i=>({name:i.name,...a(Me(s,i.start,i.end)),exons:i.exons.map(c=>a(Me(s,c.start,c.end))).filter(c=>c.end>c.start)})).filter(i=>i.end>i.start).sort((i,c)=>i.start-c.start))}return n}var bo=9,Mo=5.2,wo=8,ut=(e,t)=>Math.min(2,(e-t)/2-1);function ht(e,t){return ut(e,t)>=1}function pt(e,t,n,{rowPx:r=G,barPx:o=ve}={}){if(!ht(r,o))return[];let s=ut(r,o),a=e.map(l=>{let d=t(l.start);return{g:l,x:d,w:Math.max(2,t(l.end)-d)}}),i=[],c=new Set((o>=wo?[...a]:[]).sort((l,d)=>l.w-d.w).filter(({g:l,x:d,w:f})=>{let u=l.name.length*Mo/2,m=[d+f/2-u,d+f/2+u];return 2*u>f+6||i.some(([p,h])=>m[0]<h+2&&m[1]>p-2)?!1:(i.push(m),!0)}));return a.map(l=>({name:l.g.name,x:l.x,y:n-o/2-s,w:l.w,h:o+2*s,exons:l.g.exons.map(d=>({x:t(d.start),w:Math.max(1,t(d.end)-t(d.start))})),label:c.has(l)?{x:l.x+l.w/2,y:n+3,size:bo}:void 0}))}var ye=e=>`${e} row${e===1?"":"s"}`;function Eo(e,t={}){let n=[{swatch:t.ramp?{kind:"bar",fill:t.rampCss??st,ramp:!0}:{kind:"bar",fill:we},label:`on ${e.reference.label}'s path`},{swatch:{kind:"bar",fill:t.ramp?Z:Ee},label:`off ${e.reference.label}'s path`}];return[e.reference,...e.rows].some(r=>r.gapBp>0)&&n.push({swatch:{kind:"gap",fill:Se},label:"walked outside the cut"}),t.genes?.crowded?n.push({swatch:{kind:"gene"},label:"genes left out: too many rows to box them in",note:!0}):t.genes&&(n.push({swatch:{kind:"gene"},label:"genes, each row's own annotation"}),t.genes.untracked&&n.push({swatch:{kind:"gene"},label:`no gene track for ${ye(t.genes.untracked)}`,note:!0}),t.genes.unplaced&&n.push({swatch:{kind:"gene"},label:`no contig coordinates for ${ye(t.genes.unplaced)}`,note:!0}),t.genes.unread&&n.push({swatch:{kind:"gene"},label:`genes not read for the last ${ye(t.genes.unread)}`,note:!0})),n}var mt="#111",gt="#9e9e9e",_e="#c62828";function xt(e){return e.agrees===!1?_e:e.spanningReads===0?gt:mt}function So(e,t,n,r="walk-key"){let o=0,s=e.flatMap((a,i)=>{let c=`${r}-ramp-${i}`,l=!a.note&&a.swatch.kind==="bar"&&a.swatch.ramp?R("linearGradient",{id:c},...xe.map(u=>R("stop",{offset:u.offset,"stop-color":u.color}))):void 0,d=a.note?void 0:a.swatch.kind==="gene"?R("rect",{x:o,y:5,width:18,height:8,fill:"none",stroke:Y,"stroke-width":1.5}):R("rect",{x:o,y:a.swatch.kind==="gap"?7:5,width:18,height:a.swatch.kind==="gap"?Re:8,rx:2,fill:l?`url(#${c})`:a.swatch.fill}),f=R("text",{x:a.note?o:o+23,y:13,"font-style":a.note?"italic":void 0,fill:a.note?"#666":void 0},a.label);return o+=(a.note?0:23)+a.label.length*F+16,[l,d,f].filter(u=>u!==void 0)});return{width:o,tree:R("g",{transform:`translate(${t} ${n})`,"font-family":"Helvetica, Arial, sans-serif","font-size":11},...s)}}function vo(e,t,n=0){let r=t/Math.max(1,e),o=Math.max(n,Math.min(G,r>=1?Math.floor(r):r));return{rowPx:o,barPx:o<=3?o:Math.max(3,Math.round(o*.6)),labelled:o>=be,readouts:o>=be}}function yt(e,t){let n=1/t,r=[],o=[],s=()=>{if(o.length!==0){if(o.length===1)r.push(o[0]);else{let i=0,c=0;for(let f of o)f.onReference?i+=f.bp:c+=f.bp;let l=i>=c,d=o.find(f=>f.onReference===l);r.push({start:o[0].start,bp:i+c,onReference:l,referenceStart:l?d.referenceStart:void 0,...d.reversed?{reversed:!0}:{}})}o=[]}},a=0;for(let i of e){if(i.gap||i.bp>=n){s(),a=0,r.push(i);continue}o.push(i),a+=i.bp,a>=n&&(s(),a=0)}return s(),r}function Ro(e,t,n){return R("g",{class:"row-gene","data-testid":"graph-walk-gene"},R("title",{},e.name),...e.exons.map(r=>R("rect",{x:r.x,y:t-n/2,width:r.w,height:n,fill:Y,opacity:.35})),R("rect",{x:e.x,y:e.y,width:e.w,height:e.h,fill:"none",stroke:Y,"stroke-width":1.5}),e.label&&R("text",{x:e.label.x,y:e.label.y,"font-family":"sans-serif","font-size":e.label.size,"font-weight":600,"text-anchor":"middle",fill:Y,stroke:"white","stroke-width":2.5,"paint-order":"stroke"},e.name))}function _o(e,t,n={}){let r=h=>h*t.scaleX+t.translateX,o=t.rowPx??G,s=t.barPx??ve,a=Math.min(3,Math.max(0,(o-s)/2)),i=h=>h*o*t.scaleY+t.translateY,{origin:c,unit:l,reference:d,rows:f}=e,u=h=>r(c+h),m=n.idPrefix??"walkrow",p=(h,g)=>{let x=i(g);if(x<-s||x>t.height+s)return;let M=yt(h.runs,t.scaleX).flatMap(v=>{let _=ft(v,n.ramp),H=v.gap?Math.min(Re,s):s,D=`${m}-${g}-${v.start}`,He=R("rect",{x:u(v.start),y:x-H/2,width:Math.max(1,v.bp*t.scaleX),height:H,fill:"stops"in _?`url(#${D})`:_.fill});return"stops"in _?[R("linearGradient",{id:D},..._.stops.map((Yn,Wn)=>R("stop",{offset:Wn/(_.stops.length-1),"stop-color":Yn}))),He]:[He]}),w=l&&s>=mo?dt(h.bp,l,t.scaleX).map(v=>R("line",{x1:u(v),x2:u(v),y1:x-s/2,y2:x+s/2,stroke:"white","stroke-width":1})):[],{call:b}=h,E=ct(h,g===0?void 0:d,l,b),y=lt(E,u(h.bp),t.width),S=t.readouts??!0;return R("g",{"data-testid":g===0?"graph-walk-reference":"graph-walk-row"},...M,...w,...pt(n.rowGenes?.get(h.name)??[],u,x,{rowPx:o,barPx:s}).map(v=>Ro(v,x,s)),b&&R("rect",{"data-testid":"graph-walk-call",x:u(b.bp)-1,y:x-s/2-a,width:2,height:s+2*a,fill:xt(b)}),S&&R("text",{x:y.x,y:x+4,"font-family":"sans-serif","font-size":11,fill:b?.agrees===!1?_e:"#333",stroke:y.halo?"white":void 0,"stroke-width":y.halo?3:void 0,"paint-order":"stroke","text-anchor":y.anchor},E))};return R("g",{},...[d,...f].map(p))}var wt=2,ne=8192;function Et(){return typeof devicePixelRatio>"u"?1:Math.min(devicePixelRatio,wt)}var bt=!1;function Mt(e,t,n){let r=Math.round(e*t);return r>ne?(bt||(bt=!0,console.warn(`Canvas ${n} ${r}px exceeds the safe limit ${ne}px and was clamped`)),ne):r}function Ne(e,t,n){let r=Et(),o=Mt(t,r,"width"),s=Mt(n,r,"height");(e.width!==o||e.height!==s)&&(e.width=o,e.height=s);let a=`${t}px`,i=`${n}px`;e.style.width!==a&&(e.style.width=a),e.style.height!==i&&(e.style.height=i)}var pi=class{constructor(e){this.transform=null,this.batch=null,this.nodeHighlights=new Map,this.highlightedEdge=null,this.highlightFactor=1;let t=e.getContext("2d");if(!t)throw new Error("Canvas 2D context not available");this.canvas=e,this.ctx=t}setErrorHandler(e){}releaseOffscreenTargets(){}resize(e,t){Ne(this.canvas,e,t)}uploadGeometry(e){this.batch=e,this.highlightedEdge=null}setNodeHighlights(e){this.nodeHighlights=e}setEdgeHighlight(e,t){this.highlightedEdge=e,this.highlightFactor=t}updateTransform(e){this.transform=e}render(e){if(!this.transform)return;let n=this.ctx,{width:r,height:o}=n.canvas;e[3]<1&&n.clearRect(0,0,r,o),n.fillStyle=Ze([e[0],e[1],e[2]],e[3]),n.fillRect(0,0,r,o);let s=this.batch;s&&(n.lineCap="round",n.lineJoin="round",this.renderEdges(s),this.renderNodes(s),this.renderArrows(s))}renderEdges(e){let t=this.transform,n=this.ctx,r=this.highlightedEdge===null?void 0:e.edgeCurveRuns.get(this.highlightedEdge);for(let{color:o,items:s}of Oe(e.edgeCurves,(a,i)=>({color:oe(r,i)?j(a.color,this.highlightFactor):a.color,weight:a.thickness,last:oe(r,i)}))){n.strokeStyle=I(o),n.lineWidth=s[0].thickness*2*t.dpr,n.beginPath();for(let a of s){let i=a.curves[0];n.moveTo(i.x0*t.scaleX+t.translateX,i.y0*t.scaleY+t.translateY);for(let c of a.curves)n.bezierCurveTo(c.cx0*t.scaleX+t.translateX,c.cy0*t.scaleY+t.translateY,c.cx1*t.scaleX+t.translateX,c.cy1*t.scaleY+t.translateY,c.x1*t.scaleX+t.translateX,c.y1*t.scaleY+t.translateY)}n.stroke()}}renderNodes(e){let t=this.transform,n=this.ctx,r=new Map;for(let[o,s]of this.nodeHighlights){let a=e.nodeStrokeRuns.get(o);if(a)for(let i=a.start;i<a.start+a.count;i++)r.set(i,s)}for(let{color:o,items:s}of Oe(e.nodeStrokes,(a,i)=>{let c=r.get(i);return{color:c===void 0?a.color:j(a.color,c),weight:a.thickness,last:c!==void 0}})){n.strokeStyle=I(o),n.lineWidth=s[0].thickness*2*t.dpr,n.beginPath();for(let a of s){let i=a.points[0];n.moveTo(i.x*t.scaleX+t.translateX,i.y*t.scaleY+t.translateY);for(let c=1,l=a.points.length;c<l;c++){let d=a.points[c];n.lineTo(d.x*t.scaleX+t.translateX,d.y*t.scaleY+t.translateY)}}n.stroke()}}renderArrows(e){let t=this.transform,n=this.ctx,r=this.highlightedEdge===null?void 0:e.arrowRuns.get(this.highlightedEdge);for(let{color:o,items:s}of Oe(e.arrows,(a,i)=>({color:oe(r,i)?j(a.color,this.highlightFactor):a.color,weight:0,last:oe(r,i)}))){n.fillStyle=I(o),n.beginPath();for(let a of s){let[i,c,l,d]=Oo(a,t);n.moveTo(i.x,i.y),n.lineTo(c.x,c.y),n.lineTo(l.x,l.y),n.lineTo(d.x,d.y),n.closePath()}n.fill()}}dispose(){this.batch=null,this.nodeHighlights=new Map,this.highlightedEdge=null}},No=.25;function Oo(e,t){let n=Math.cos(e.angle),r=Math.sin(e.angle),o=e.x*t.scaleX+t.translateX,s=e.y*t.scaleY+t.translateY,a=e.length*t.dpr,i=e.halfWidth*t.dpr,c=o-n*a,l=s-r*a,d=a*(1-No);return[{x:o,y:s},{x:c-r*i,y:l+n*i},{x:o-n*d,y:s-r*d},{x:c+r*i,y:l-n*i}]}function oe(e,t){return e!==void 0&&t>=e.start&&t<e.start+e.count}function Oe(e,t){let n=new Map,r=new Map;for(let o=0,s=e.length;o<s;o++){let a=e[o],{color:i,weight:c,last:l}=t(a,o),d=l?r:n,f=`${i}:${c}`,u=d.get(f);u?u.items.push(a):d.set(f,{color:i,items:[a]})}return[...n.values(),...r.values()]}var Ao="#daa520",To=1,Co=2,ko=4;function yi(e,t,n,r=o=>o){let o=s=>{let a=t(s)*2;return n?.nodeIds.has(s)?Math.max(a,n.walks.length*ko):a};return e.flatMap(s=>s.exonsByNode.map(({nodeId:a,d:i})=>({key:`${s.gene.name}-${s.gene.start}-${a}`,d:r(i),inner:o(a)+2*To})))}function bi(e,t){if(e.length===0)return;let n=(r,o,s)=>R("path",{d:r.d,fill:"none",stroke:o,"stroke-width":s,"stroke-linecap":"round","stroke-linejoin":"round","vector-effect":t.transform?"non-scaling-stroke":void 0});return R("g",{},R("mask",{id:t.id,maskUnits:"userSpaceOnUse",x:0,y:0,width:t.width,height:t.height},R("g",{transform:t.transform},...e.map(r=>n(r,"#fff",r.inner+2*Co)),...e.map(r=>n(r,"#000",r.inner)))),R("rect",{width:t.width,height:t.height,fill:Ao,mask:`url(#${t.id})`}))}function Ae(e,t,n){let r=Math.round(t),o=Math.round(n);return`${e?`${e}:`:""}${P(r)}-${P(o)} (${k(o-r)})`}function $o(e,t){let{field:n}=e.encoding,r=e.range?Ae(e.range.contig,e.range.start,e.range.end):void 0,o=n==="progress"?r:n==="reference"&&t?Ae(t.name,t.start,t.end):void 0,s=e.range?e.range.end-e.range.start:e.bp,a=s-e.bp;return{delta:e.referenceBp===void 0||s===e.referenceBp?"":` ${s>e.referenceBp?"+":"\u2212"}${k(Math.abs(s-e.referenceBp))}`,outside:a>0?`, ${k(a)} outside the cut`:"",reversed:e.reversedBp>0?`, ${k(e.reversedBp)} reversed`:"",shades:n!=="walk",scale:o,hover:o===r?void 0:r}}function Io(e,t,n){let r=e.progress.get(t),o=e.range;if(r===void 0||!o)return;let s=Math.round(o.start+r*(o.end-o.start)-n/2);return`${o.contig}:${P(s)}-${P(s+n)}`}var Lo=50;function St(e,t){return t>0?Math.max(1,e/t):Lo}function Po(e){let t=new Set,n=1/0,r=-1/0;for(let o of e)t.add(o.minY),n=Math.min(n,o.minY),r=Math.max(r,o.minY);return t.size>1?(r-n)/(t.size-1):void 0}function Xo(e,t,n){let r=St(t,e.length);return{x:r,y:n>0?St(n,e.length):Po(e)??r}}function vt(e,t,n,r){return e===void 0?Xo(t,n,r):typeof e=="number"?{x:e,y:e}:e}function qo(e,t,n){let r=e.get(t);r||(r=new Map,e.set(t,r));let o=r.get(n);return o||(o=[],r.set(n,o)),o}function Rt(e,t,n,r,o,s,a){let i=Math.floor(n/t.x),c=Math.floor(o/t.x),l=Math.floor(r/t.y),d=Math.floor(s/t.y);for(let f=i;f<=c;f++)for(let u=l;u<=d;u++)qo(e,f,u).push(a)}function _t(e,t,n,r,o,s){let a=Math.floor((n-o)/t.x),i=Math.floor((n+o)/t.x),c=Math.floor((r-s)/t.y),l=Math.floor((r+s)/t.y),d=[],f=new Set;for(let u=a;u<=i;u++){let m=e.get(u);if(m)for(let p=c;p<=l;p++){let h=m.get(p);if(h)for(let g of h)f.has(g)||(f.add(g),d.push(g))}}return d}var Nt=class{constructor(e,t){this.cells=new Map;let n=[],r=0,o=0;for(let[s,a]of Object.entries(e))for(let i=0;i<a.length-1;i++){let c=a[i],l=a[i+1],d=Math.min(c.x,l.x),f=Math.min(c.y,l.y),u=Math.max(c.x,l.x),m=Math.max(c.y,l.y);r+=u-d,o+=m-f,n.push({entry:{nodeId:s,segmentIdx:i},minX:d,minY:f,maxX:u,maxY:m})}this.cellSize=vt(t,n,r,o);for(let s of n)Rt(this.cells,this.cellSize,s.minX,s.minY,s.maxX,s.maxY,s.entry)}query(e,t,n,r=n){return _t(this.cells,this.cellSize,e,t,n,r)}},Ot=class{constructor(e,t,n,r,o,s,a=0,i,c=!1){this.cells=new Map,this.edgeCurves=Je(e,t,r,s,a,i,c);let l=[],d=0,f=0;for(let u=0;u<t.edges.length;u++){let m=t.edges[u],p=e[m.from],h=e[m.to],g=this.edgeCurves.get(u);if(p?.length&&h?.length&&g){let{minX:x,minY:M,maxX:w,maxY:b}=Ve(g),E=m.pathIds?.length??0;if(n&&E>0){let y=0,S=0;for(let v of K(p,h,E,r))y=Math.max(y,Math.abs(v.x)),S=Math.max(S,Math.abs(v.y));x-=y,M-=S,w+=y,b+=S}d+=w-x,f+=b-M,l.push({ei:u,minX:x,minY:M,maxX:w,maxY:b})}}this.cellSize=vt(o,l,d,f);for(let u of l)Rt(this.cells,this.cellSize,u.minX,u.minY,u.maxX,u.maxY,u.ei)}getCurves(e){return this.edgeCurves.get(e)}query(e,t,n,r=n){return _t(this.cells,this.cellSize,e,t,n,r)}};function kt(e,t,n,r,o,s){let a=o-n,i=s-r,c=a*a+i*i;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*a+(t-r)*i)/c));return Math.hypot(e-(n+l*a),t-(r+l*i))}function Bo(e,t,n,r,o,s,a,i,c,l){let d=1/0,f=20,u=n,m=r;for(let p=1;p<=f;p++){let h=p/f,g=1-h,x=g*g*g*n+3*g*g*h*o+3*g*h*h*a+h*h*h*c,M=g*g*g*r+3*g*g*h*s+3*g*h*h*i+h*h*h*l;d=Math.min(d,kt(e,t,u,m,x,M)),u=x,m=M}return d}function Do(e,t,n){return Bo(e,t,n.x0,n.y0,n.cx0,n.cy0,n.cx1,n.cy1,n.x1,n.y1)}function At(e,t,n,r=1){let o=1/0;for(let s of n){let a=Do(e,t,r===1?s:{x0:s.x0,y0:s.y0*r,cx0:s.cx0,cy0:s.cy0*r,cx1:s.cx1,cy1:s.cy1*r,x1:s.x1,y1:s.y1*r});a<o&&(o=a)}return o}var Tt=new WeakMap;function $t(e,t){let n=Tt.get(e);if(n?.version===t)return n.index;let r=new Nt(e);return Tt.set(e,{version:t,index:r}),r}var Ct=new WeakMap;function Fo(e,t,n,r,o,s,a,i=!1){let c=Ct.get(e);if(c?.graph===t&&c.drawPaths===n&&c.scaleX===r.scaleX&&c.scaleY===r.scaleY&&c.version===o&&c.deletions===s&&c.routes===a&&c.stranded===i)return c.index;let l=new Ot(e,t,n,r,void 0,s,o,a,i);return Ct.set(e,{graph:t,drawPaths:n,scaleX:r.scaleX,scaleY:r.scaleY,version:o,index:l,deletions:s,routes:a,stranded:i}),l}var Yo=5;function Ti(e,t,n,r,o=0,s){let a=le(r),i=$t(e,o),c=m=>Math.max(Yo,m)/r.scaleX,l=c(s?.maxHalfWidthPx??0),d=i.query(t,n,l,l/a),f=null,u=1/0;for(let{nodeId:m,segmentIdx:p}of d){let h=e[m],g=kt(t,n*a,h[p].x,h[p].y*a,h[p+1].x,h[p+1].y*a);g<u&&g<c(s?.halfWidthPx(m)??0)&&(u=g,f=m)}return f}function Wo(e,t,n){let r=t.x-e.x,o=t.y-e.y,s=0,a=1;for(let[i,c]of[[-r,e.x-n.x0],[r,n.x1-e.x],[-o,e.y-n.y0],[o,n.y1-e.y]])if(i===0){if(c<0)return!1}else i<0?s=Math.max(s,c/i):a=Math.min(a,c/i);return s<=a}function It(e,t,n=0){let r=$t(e,n),o=s=>({x:s.x*t.scaleX+t.translateX,y:s.y*t.scaleY+t.translateY});return s=>{let a=new Set,i=r.query(((s.x0+s.x1)/2-t.translateX)/t.scaleX,((s.y0+s.y1)/2-t.translateY)/t.scaleY,Math.abs((s.x1-s.x0)/2/t.scaleX),Math.abs((s.y1-s.y0)/2/t.scaleY));for(let{nodeId:c,segmentIdx:l}of i){let d=e[c];!a.has(c)&&Wo(o(d[l]),o(d[l+1]),s)&&a.add(c)}return a}}function Ci(e,t,n,r,o,s,a=0,i,c,l,d=!1){let f=le(o),u=10/o.scaleX,m=Fo(e,t,s,o,a,i,l,d),p=m.query(n,r,u,u/f),h=null,g=u;for(let x of p){let M=t.edges[x],w=e[M.from],b=e[M.to];if(!w?.length||!b?.length||c?.has(x))continue;let E=M.pathIds?.length??0,y=m.getCurves(x);if(!y)continue;let S;if(!s||E===0)S=At(n,r*f,y,f);else{let v=1/0;for(let _ of K(w,b,E,o)){let H=_.x===0&&_.y===0?y:Qe(y,_.x,_.y),D=At(n,r*f,H,f);D<v&&(v=D)}S=v}S<g&&(g=S,h=x)}return h}var Lt=3.4,Te=6,Ho=8,Go=18,Uo=2,Ko=Ke+ze;function Pt(e){let t=e.gene.end-e.gene.start;if(e.covered>=.98)return;let[n,r]=t>=1e6?[1e6,"Mb"]:t>=1e3?[1e3,"kb"]:[1,"bp"],o=s=>+(s/n).toFixed(n===1?0:1);return`${o(e.covered*t)} of ${o(t)} ${r}`}function Xt(e,t,n,r){let o=n/2;return qt(e,s=>s.gene.end-s.gene.start).map(s=>{let{x:a,y:i}=t(s.at),c=Pt(s);return{item:s,x:a,y:i+n+Go,text:c?`${s.gene.name} \xB7 ${c}`:s.gene.name,fallback:c?`${s.gene.name} \u2026`:void 0,stack:Uo,fits:l=>[...r({x0:l.x0-o,x1:l.x1+o,y0:l.y0-o,y1:l.y1+o})].every(d=>s.nodeIds.has(d))}})}function qt(e,t){return[...e].sort((n,r)=>t(r)-t(n))}function zo(e){let{paneWidth:t,canvasHeight:n,translateX:r,translateY:o}=e,{scaleX:s,scaleY:a}=e.axisScale,i={width:t,height:n},c=y=>({x:y.x*s+r,y:y.y*a+o}),l=e.drawnRowLabels.map(({label:y,y:S})=>de(y,S*a+o)),d=e.referenceStripZonePx??0;d>0&&l.push({x0:0,x1:t,y0:0,y1:d}),e.legendSize.width>0&&l.push({x0:t-Te-e.legendSize.width,x1:t,y0:0,y1:d+Te+e.legendSize.height}),e.poppedFrom&&l.push({x0:0,x1:60+e.poppedFrom.label.length*F*1.2,y0:0,y1:44});let f=je(i,l),u=e.drawnRowLabels.length>0,m=u?Math.min(...e.drawnRowLabels.map(y=>y.y)):1/0,p=e.contigThickness*Lt,h=qt(e.bubbleHalos,y=>y.members),g=U(h.map(y=>{let{x:S,y:v}=c({x:y.labelAt.x,y:Math.min(y.labelAt.y,m)}),_=v-p/2-6;return{item:y,x:S,y:u?Math.max(_,Ko):_,text:y.label}}),i,f),x=U(Xt(e.genePins,c,e.contigThickness,It(e.nodePositions??{},{scaleX:s,scaleY:a,translateX:r,translateY:o},e.positionsVersion)),i,f),M=e.nodePositions&&e.labelsNodeSizes?fe({nodePositions:e.nodePositions,nodeLengths:e.nodeLengths,deletions:e.deletions,deletionRoutes:e.deletionRoutes,stranded:e.stranded,alleleDeletions:e.alleleDeletions,axis:e.axisScale,translateX:r,translateY:o,width:t,height:n,version:e.positionsVersion}):{deletions:[],nodes:[]},w=z(M.deletions,f),b=U(h.flatMap(y=>y.routes.map(S=>{let{x:v,y:_}=c(S.at);return{item:{halo:y,route:S},x:v,y:_+4,text:S.text,stack:Ho}})),i,f),E=z(M.nodes,f,ue(t,n));return{bubbles:g,genes:x,routes:b,sizes:[...w,...E]}}function jo(e,t){let n=new Map(e.nodes.map(o=>[o.id,o])),r=new Map;t.nodes.forEach(o=>{let s=n.get(o.name);if(o.order>=0&&s&&C(s)){let{refName:a,start:i}=s.stable;(r.get(a)??r.set(a,[]).get(a)).push({bp0:i,bp1:i+o.sequenceLength,x0:o.x,x1:o.x+o.pixelWidth})}});for(let o of r.values())o.sort((s,a)=>s.bp0-a.bp0);return r}function re(e,t,n=!1){let r=0,o=e.length-1;for(;r<o;){let i=r+o>>1,c=e[i].bp1;(n?c<t:c<=t)?r=i+1:o=i}let s=e[r];if(t<=s.bp0)return s.x0;let a=s.bp1-s.bp0;return a>0?s.x0+(Math.min(t,s.bp1)-s.bp0)/a*(s.x1-s.x0):s.x0}function se(e,t,n){let r=re(e,t),o=re(e,n,!0);return{x0:Math.min(r,o),x1:Math.max(r,o)}}function Vo(e){let t;for(let n of e.values())(!t||n.length>t.length)&&(t=n);return t}var Bt=5,Qo=10,Zo=110,Jo=3;function Dt(e){return e?"#b0b0b8":"#55555c"}function er(e){let t=10**Math.floor(Math.log10(e)),n=e/t;return(n<=1?1:n<=2?2:n<=5?5:10)*t}function Ft(e){let t=[];for(let n of e)t.every(r=>Math.abs(n.at-r.at)>=(n.width+r.width)/2+Qo)&&t.push(n);return t.map(({text:n,at:r})=>({text:n,at:r}))}function tr(e,t,n,r){let o=e[0],s=e.at(-1);if(!o||!s)return;let a=t(o.x0),i=t(s.x1),c=s.bp1-o.bp0;if(i<=a||c<=0)return;let l=er(c/(i-a)*Zo),d=[],f=[];for(let u=Math.ceil(o.bp0/l)*l;u<=s.bp1;u+=l){let m=Math.round(t(re(e,u)))+.5;if(m>=0&&m<=n){d.push(m);let p=u.toLocaleString("en-US");f.push({text:p,at:m,width:r(p)})}}return{spans:[{x0:a,x1:i}],ticks:d,labels:Ft(f)}}function nr(e,t,n,r){let o=e.map(p=>({box:p,s0:t(p.x0),s1:t(p.x1)})).filter(({s0:p,s1:h})=>h>=0&&p<=n),s=o[0],a=o.at(-1);if(!s||!a)return;let i=(p,h)=>({text:p,at:h,width:r(p)}),c=(p,h)=>i(p.toLocaleString("en-US"),h),l=[],d=[],f=[],u=[];for(let{box:p,s0:h,s1:g}of o){l.push({x0:h,x1:g}),d.push(Math.round(h)+.5),g-h>=Jo&&d.push(Math.round(g)+.5);let x=i(k(p.bp1-p.bp0),(h+g)/2);x.width<=g-h&&f.push(x),p!==s.box&&u.push(c(p.bp0,h))}let m=[c(s.box.bp0,s.s0),c(a.box.bp1,a.s1)];return{spans:l,ticks:d,labels:Ft([...m,...f,...u])}}function Yt(e,t,n,r,o=!1){return(o?tr:nr)(e,t,n,r)}function or(e,t,n,r,o=!1){let{x:s,width:a,darkMode:i}=n;e.font="10px sans-serif";let c=Yt(t,s,a,f=>e.measureText(f).width,o);if(!c)return;let l=Dt(i),d=r+.5;e.strokeStyle=l,e.fillStyle=l,e.lineWidth=1,e.textAlign="center",e.textBaseline="top",e.beginPath();for(let{x0:f,x1:u}of c.spans)e.moveTo(Math.max(0,f),d),e.lineTo(Math.min(a,u),d);for(let f of c.ticks)e.moveTo(f,r),e.lineTo(f,r+Bt);e.stroke();for(let{text:f,at:u}of c.labels)e.fillText(f,u,r+Bt+2)}function rr(e,t){let n=new Map(e.nodes.map(o=>[o.id,o])),r=[];return t.nodes.forEach((o,s)=>{let a=n.get(o.name);if(o.order>=0&&a&&C(a)){let i=a.stable.start;r.push({bp0:i,bp1:i+o.sequenceLength,index:s,node:o})}}),r.sort((o,s)=>o.bp0-s.bp0)}function sr(e,t,n){let r=0,o=e.length-1;for(;r<o;){let s=r+o+1>>1;e[s].bp0<=t?r=s:o=s-1}return[e[r],e[r-1]].find(s=>s&&n.has(s.index)&&s.bp0<=t&&t<=s.bp1)}function mc(e,t,n){let r=rr(e,t),o=[];for(let s of t.tracks){let a=s.name?n.get(s.name):void 0;if(a?.length){let i=new Map;for(let c of s.path)c.node!==null&&c.y!==void 0&&!i.has(c.node)&&i.set(c.node,c.y);for(let c of a){let l=sr(r,c.start,i);if(l){let{node:d,bp0:f,bp1:u}=l,m=p=>d.x+(Math.min(p,u)-f)/(u-f)*d.pixelWidth;o.push({x0:m(c.start),x1:m(c.end),y:i.get(l.index),height:s.width})}}}}return o}function ir(e){return e?"rgba(255,255,255,0.9)":"rgba(0,0,0,0.8)"}function gc(e,t,{x:n,y:r,width:o,darkMode:s}){if(t.length!==0){e.fillStyle=ir(s),e.beginPath();for(let a of t){let i=n(a.x0),c=Math.max(n(a.x1),i+1);if(c>=0&&i<=o){let l=r(a.y);e.rect(i,l,c-i,r(a.y+a.height)-l)}}e.fill()}}var Ut=Hn(Gt(),1),ie=16;function Mc(e){let[t="",...n]=e.split(/\r\n|\r|\n/),r=t.split(" ").slice(1),o=new Map;for(let s of n){if(!s)continue;let[a="",...i]=s.split(" ");a&&!o.has(a)&&o.set(a,{...Object.fromEntries(r.map((c,l)=>[c,i[l]??""])),name:a})}return[...o.values()]}function wc(e){let t=new Set;for(let n of e??[])for(let r of Object.keys(n))r!=="name"&&t.add(r);return[...t]}function Ec(e){if(typeof e=="string")return e?{field:e}:void 0;let{field:t,domain:n}=e??{};if(!(typeof t!="string"||!t))return Array.isArray(n)?{field:t,domain:n.filter(r=>typeof r=="string")}:{field:t}}function cr(e){let t=new Set(e.map(n=>n.label)).size;return`${t} haplotype${t===1?"":"s"}`}function Sc(e,t,{field:n,domain:r}){let o=new Map(t.map(c=>[c.name,c[n]??""])),s=new Map;for(let c of e){let l=o.get(c.label)||o.get(c.sample)||"",d=s.get(l);d?d.push(c):s.set(l,[c])}let a=1,i=[...s.keys()].sort((0,Ut.groupKeyComparator)(r)).map(c=>{let l=s.get(c),d={key:c,title:`${c||`${n}: none`} \xB7 ${cr(l)}`,first:a,count:l.length};return a+=l.length,d});return{rows:i.flatMap(c=>s.get(c.key)),sections:i}}function vc(e,t){let n=o=>{let s=-1;for(;s+1<e.length&&e[s+1].first<=o;)s++;return s},r=o=>o*t+(n(o)+1)*ie;return{rowY:r,headers:e.map((o,s)=>({...o,top:(o.first-.5)*t+s*ie})),headersPx:e.length*ie,rowAt(o,s){let a=0;for(let i=-1;i<e.length;i++){let c=i<0?0:e[i].first,l=i<0?Math.min(s,e[0]?.first??s):c+e[i].count,d=(i+1)*ie,f=Math.min(l-1,Math.max(c,Math.round((o-d)/t)));Math.abs(r(f)-o)<Math.abs(r(a)-o)&&(a=f)}return a}}}function lr(e,t){let n=new Map(e.nodes.map(o=>[o.id,o])),r=[];return t.nodes.forEach(o=>{let s=n.get(o.name);o.order>=0&&s&&C(s)&&r.push({node:o.name,bp0:s.stable.start,bp1:s.stable.start+o.sequenceLength,x0:o.x,x1:o.x+o.pixelWidth})}),r}function dr(e,t,n,r){let o=[];for(let s of e){let a=n(s.x0),i=n(s.x1);i>=0&&a<=r&&o.push({node:s.node,top0:t(s.bp0),top1:t(s.bp1),bottom0:a,bottom1:i})}return o}var fr=3;function ur(e,t,n,r){if(t<=0||r<0||r>t)return;let o=r/t,s,a=fr;for(let i of e){let c=i.top0+(i.bottom0-i.top0)*o,l=i.top1+(i.bottom1-i.top1)*o,d=Math.max(0,Math.min(c,l)-n,n-Math.max(c,l));d<a&&(a=d,s=i.node)}return s}function Kt(e,t,n){e.moveTo(t.top0,0),e.lineTo(t.top1,0),e.lineTo(t.bottom1,n),e.lineTo(t.bottom0,n),e.closePath()}function zt(e,t,n){e.moveTo(t.top0,0),e.lineTo(t.bottom0,n),e.moveTo(t.top1,0),e.lineTo(t.bottom1,n)}function hr(e,t,n,{highlightNode:r,darkMode:o}){if(n<=0||t.length===0)return;let s=o?"255,255,255":"0,0,0";e.beginPath();for(let i of t)Kt(e,i,n);e.fillStyle=`rgba(${s},0.07)`,e.fill(),e.beginPath();for(let i of t)zt(e,i,n);e.strokeStyle=`rgba(${s},0.35)`,e.lineWidth=.5,e.stroke();let a=t.find(i=>i.node===r);a&&(e.beginPath(),Kt(e,a,n),e.fillStyle="rgba(255,192,203,0.5)",e.fill(),e.beginPath(),zt(e,a,n),e.strokeStyle="#ff0000",e.lineWidth=1,e.stroke())}function jt(){return{rectangles:[],curves:[],corners:[],verticalRectangles:[]}}var pr=new Set(["_gbwt_ref","unknown"]);function Vt(e){let[t,n,r]=e?.split("#")??[];if(!(t===void 0||t===""||pr.has(t)||n===void 0||!/^\d+$/.test(n)||r===void 0||r===""))return{sample:t,haplotype:Number(n),contig:r}}var fn=!1;function B(...e){fn&&console.log(...e)}var mr=["read_group","sample_name"],Xc=[...mr,"haplotype_sample"];function gr({layers:e,coarsenedReadView:t=!1,showReads:n=!0},r){if(e!==void 0)return e;let o=t&&n,s=a=>a?{stat:"coarsen"}:{};return[{data:"haplotypes",...s(o&&!r)},{data:"reads",...s(o&&r)}]}function Qt(e,t){return e.find(n=>n.data===t)?.stat}function xr(e,t){return{mergeNodes:e.mergeNodes??!0,showReads:e.showReads??!0,coarsenedReadView:e.coarsenedReadView??!1,layers:gr(e,t),ignoreStrand:e.ignoreStrand??!1,nodeWidthOption:e.nodeWidthOption??"normal",charWidth:e.charWidth??8.401,trackWidth:e.trackWidth??15}}function un(e){return{config:e,nodes:[],tracks:[],reads:[],nodeMap:new Map,nodesPerOrder:[],nodeOrders:[],assignments:[],extraLeft:[],extraRight:[],maxOrder:-1,shapes:jt(),imageBounds:{minX:0,maxX:0,minY:0,maxY:0},trackForRuler:void 0,coarsenedEdgeMeta:new Map}}function qc(e,t,n=[],r={}){let o=yr(e,t,n,r);return o&&br(o,r)}var hn=new WeakMap;function yr(e,t,n=[],r={}){let o=wr(e,t,n,r);if(o===void 0)return;let s=pn(o,o.tracks,o.reads,"measure");return s.nodes.forEach((a,i)=>{a.order>=0&&(o.nodes[i].x=a.x)}),hn.set(o,s),o}function br(e,t={}){return Mr(e,Rr(e,t.facet),Er(e,t))}function Mr(e,t,n,r){let o=hn.get(e);return o!==void 0&&t.length===e.tracks.length&&n.length===e.reads.length?o:pn(e,t,n,"topology",r)}function wr(e,t,n,r){let o=un(xr(r,n.length>0));if(!(e.length===0||t.length===0)){structuredClone(e).forEach((s,a)=>{s.seq??="",s.sequenceLength??=s.seq.length,o.nodes[a+1]=s}),o.tracks=structuredClone(t),o.reads=o.config.showReads?structuredClone(n.filter(s=>s.is_secondary!==!0)):[];for(let s=o.tracks.length-1;s>=0;s-=1){let a=o.tracks[s];if(a.type??="haplotype",a.hidden===!0){o.tracks.splice(s,1);continue}a.indexOfFirstBase!==void 0&&(o.trackForRuler=a.name)}if(o.tracks.length!==0)return Nr(o,0),o.nodeMap=tn(o),q(o,o.tracks),q(o,o.reads),ln(o),o.config.mergeNodes&&(nn(o),ke(o),$e(o),gs(o),o.nodeMap=tn(o),ln(o),q(o,o.tracks),q(o,o.reads)),nn(o),jr(o),ke(o),Vr(o),ke(o),$e(o),q(o,o.reads),{options:o.config,nodes:o.nodes,tracks:o.tracks,reads:o.reads,nodeMap:o.nodeMap,maxOrder:Kr(o),trackForRuler:o.trackForRuler}}}function Er(e,{mappingQualityCutoff:t=0,focusReadNames:n=null,facet:r}){let o=n?new Set(n):null;return e.reads.filter(s=>(s.mapping_quality??0)>=t&&(o===null||s.name!==void 0&&o.has(s.name))&&(r===void 0||Sr(r,s)))}function Sr(e,t){return e.by==="haplotype_sample"?"reads"in e:(t[e.by]??null)===e.key}function vr(e){return new Set(e.tracks.filter((t,n)=>n===0||t.name===e.trackForRuler))}function Rr(e,t){if(t?.by!=="haplotype_sample")return e.tracks;let n=vr(e);return e.tracks.filter(r=>n.has(r)||!("reads"in t)&&_r(r)===t.key)}function _r(e){return Vt(e.name)?.sample??null}function pn(e,t,n,r,o={}){let s=un(e.options);e.nodes.forEach((u,m)=>{s.nodes[m]={...u}}),s.tracks=t.map(u=>({...u})),s.reads=n.map(u=>({...u})),s.nodeMap=e.nodeMap,s.maxOrder=e.maxOrder,s.trackForRuler=e.trackForRuler;let{layers:a,ignoreStrand:i}=s.config,c=o.haplotypes??yn,l=Qt(a,"haplotypes")==="coarsen"?fs(s,c):void 0;l!==void 0&&(s.tracks=[l.ref]),as(s),es(s),Or(s);let d=Qt(a,"reads")==="coarsen"&&s.reads.length>0?bn(s,s.reads,"read",o.reads??c+(l?.bands.length??0)):void 0;d!==void 0&&(s.reads=d.bands);let f={};for(let[u,m,p]of[["haplotypes","haplotype",l],["reads","read",d]])p!==void 0&&($e(s,p.bands),q(s,p.bands),f[u]={unit:m,total:p.total,reverse:!i&&p.bands.some(h=>h.is_reverse)});return l!==void 0&&(s.reads=l.bands.concat(s.reads)),s.reads.length>0?(Tr(s),s.tracks=s.tracks.concat(s.reads)):s.nodes.forEach(u=>{u.incomingReads=[],u.outgoingReads=[],u.internalReads=[]}),r==="measure"&&Zr(s),ds(s),B("Tracks:",s.tracks),B("Nodes:",s.nodes),B("Lane assignment:",s.assignments),Yr(s),{nodes:s.nodes,tracks:s.tracks,reads:s.reads,nodeMap:s.nodeMap,shapes:s.shapes,bounds:s.imageBounds,maxOrder:s.maxOrder,trackForRuler:s.trackForRuler,coarsenedEdgeMeta:s.coarsenedEdgeMeta,coarsened:f}}function O(e){return e.startsWith("-")}function A(e){return O(e)?e.substring(1):e}function mn(e){return O(e)?e:`-${e}`}function Ie(e){return O(e)?A(e):mn(e)}function Zt(e){return e>0}function Nr(e,t){let n=new Set,r=new Set;for(let o of e.tracks[t].sequence)O(o)?r.has(A(o))||n.add(A(o)):r.add(o);if(n.size!==0){for(let{sequence:o}of[...e.tracks,...e.reads])for(let s=0;s<o.length;s+=1)n.has(A(o[s]))&&(o[s]=Ie(o[s]));e.nodes.forEach(o=>{n.has(o.name)&&(o.seq=Le(o.seq))})}}function Or(e){e.nodesPerOrder=[];for(let n=0;n<=e.maxOrder;n+=1)e.nodesPerOrder[n]=[];let t=new Map;e.nodes.forEach(n=>{n.y!==void 0&&Jt(t,n.order,n.y+n.contentHeight)}),e.tracks.forEach(n=>{n.type==="haplotype"&&n.path.forEach(r=>{Jt(t,r.order,(r.y??0)+n.width)})}),e.nodes.forEach((n,r)=>{n.order>=0&&n.y===void 0&&(n.y=(t.get(n.order)??0)+25,n.contentHeight=0,e.nodesPerOrder[n.order].push(r))})}function Jt(e,t,n){let r=e.get(t);r===void 0?e.set(t,n):e.set(t,Math.max(r,n))}var ae=7;function Ar(e){e.nodes.forEach(t=>{t.incomingReads=[],t.outgoingReads=[],t.internalReads=[]}),e.reads.forEach((t,n)=>{if((t.width===void 0||t.width===0)&&(t.width=ae),t.path.length===1){let r=t.path[0].node;r!==null&&e.nodes[r].internalReads.push(n)}else t.path.forEach((r,o)=>{if(o===0){let s=t.path[0].node;s!==null&&e.nodes[s].outgoingReads.push([n,o])}else{let s=r.node;s!==null&&e.nodes[s].incomingReads.push([n,o])}})})}function Tr(e){e.reads.forEach(i=>{i.path=gn(e,i)}),Ar(e);let t=e.nodes.filter(i=>i.order>=0);t.sort(Xe);let n=new Map;for(let i=0;i<e.reads.length;i++){let c=e.reads[i],l=c.haplotypeShare===void 0?1:0,d=c.sourceTrackID,f=`${l}:${d}`,u=n.get(f);u===void 0?n.set(f,{layer:l,source:d,reads:new Set([i])}):u.reads.add(i)}let r=[...n.values()].sort((i,c)=>i.layer-c.layer||i.source-c.source),o=r.length>1?ae:0;t.forEach(i=>{for(let{reads:c}of r)Cr(e,c,i,o)});let s=Xr(e),a=[];e.reads.forEach((i,c)=>{let l=i.path.length,d=new Array(l),f;for(let p=0;p<l;p++){p===0?d[p]=void 0:d[p]=f??i.path[0];let h=i.path[p];h.node!==null&&h.node&&(f=h)}let u=new Array(l),m;for(let p=l-1;p>=0;p--){p===l-1?u[p]=void 0:u[p]=m??i.path[l-1];let h=i.path[p];h.node!==null&&h.node&&(m=h)}i.path.forEach((p,h)=>{if(p.y===void 0){let g=d[h],x=u[h],M=!!(x&&g&&(g.order>x.order||x.order===g.order&&x.isForward===g.isForward));p.betweenCycleReverseTraversal=M,a.push({readIndex:c,pathIndex:h,previousY:g?.y,previousNode:g?.node})}})}),a.sort((i,c)=>$r(e,i,c)),a.forEach(i=>{let c=e.reads[i.readIndex],l=c.path[i.pathIndex];l.y=s[l.order],s[l.order]+=c.width}),B("Reads:",e.reads)}function Cr(e,t,n,r){let o=n.incomingReads.filter(([p])=>t.has(p)),s=n.outgoingReads.filter(([p])=>t.has(p)),a=n.internalReads.filter(p=>t.has(p));o.length===0&&s.length===0&&a.length===0&&(r=0);let i=n.y+n.contentHeight+r*2,c=o.map(p=>{let[h,g]=p,x=e.reads[h].path,M=g+1,w;for(let b=1;b<=g;b++){let E=x[g-b]?.y;if(E!==void 0){M=b,w=E;break}}return{entry:p,decisionStep:M,y:w}});c.sort(kr),o=c.map(p=>p.entry);let l=i,d=new Map;o.forEach(p=>{let h=e.reads[p[0]];h.path[p[1]].y=l,en(d,h,p[1],l,n),l+=h.width});let f=l;s.sort((p,h)=>Ir(e,p,h));let u=new Map;l=i,s.forEach(p=>{let h=e.reads[p[0]],g=h.firstNodeOffset??0;h.path[p[1]].y=l,u.set(l,g);let x=d.get(l);x===void 0||x+1<=g?(l+=h.width,f=Math.max(f,l)):(d.set(l,0),o.forEach(M=>{let w=e.reads[M[0]],b=w.path[M[1]];b.y!==void 0&&b.y>=l&&(b.y+=h.width,en(d,w,M[1],b.y,n))}),l+=h.width,f+=h.width)}),a.sort((p,h)=>Pr(e,p,h)),a.forEach(p=>{let h=e.reads[p],g=h.firstNodeOffset??0,x=h.finalNodeCoverLength??0;for(l=i;g<(d.get(l)??-1/0)+2||x>(u.get(l)??1/0)-3;)l+=h.width||ae;h.path[0].y=l,d.set(l,x),f=Math.max(f,l)});let m=f-n.y-n.contentHeight;n.contentHeight+=m,ss(e,n,m)}function kr(e,t){return e.decisionStep!==t.decisionStep?e.decisionStep-t.decisionStep:e.y===void 0||t.y===void 0?(e.y===void 0?0:1)-(t.y===void 0?0:1):e.y-t.y}function en(e,t,n,r,o){n===t.path.length-1?e.set(r,t.finalNodeCoverLength??0):e.set(r,o.sequenceLength)}function $r(e,t,n){let r=e.reads[t.readIndex],o=e.reads[n.readIndex],s=r.path[t.pathIndex],a=o.path[n.pathIndex];if(s.order!==a.order)return s.order-a.order;if(r.sourceTrackID!==o.sourceTrackID)return r.sourceTrackID-o.sourceTrackID;if(t.previousNode&&n.previousNode){let f=e.nodes[t.previousNode],u=e.nodes[n.previousNode];if(f&&u&&f.order!==u.order)return f.order-u.order}let i=t.previousY??0,c=n.previousY??0,l=s.betweenCycleReverseTraversal===!0,d=a.betweenCycleReverseTraversal===!0;return l!==d?l?1:-1:l?c-i:i-c}function Ir(e,[t,n],[r,o]){let s=e.reads[t],a=e.reads[r],i,c,l=s.path.length-1,d=a.path.length-1;for(;!i&&l>=0;)i=s.path[l]?.y,l-=1;for(;!c&&d>=0;)c=a.path[d]?.y,d-=1;if(i&&c)return i-c;let f=s.path[n]?.node,u=a.path[o]?.node,m=typeof f=="number"?e.nodes[f]:null,p=typeof u=="number"?e.nodes[u]:null;for(;m&&p&&m===p;){if(n<s.path.length-1){for(n+=1;s.path[n]?.node===null;)n+=1;let g=s.path[n]?.node;m=typeof g=="number"?e.nodes[g]:null}else m=null;if(o<a.path.length-1){for(o+=1;a.path[o]?.node===null;)o+=1;let g=a.path[o]?.node;p=typeof g=="number"?e.nodes[g]:null}else p=null}if(m)return p?Xe(m,p):1;if(p)return-1;let h=(s.firstNodeOffset??0)-(a.firstNodeOffset??0);return h!==0?h:(s.finalNodeCoverLength??0)-(a.finalNodeCoverLength??0)}function Lr(e,t){let n=e.path,r=t.path,o=0,s=0;for(;o<n.length&&s<r.length;){let a=n[o],i=r[s],c=a.order,l=i.order;if(c===l&&a.node&&i.node)return(i.y??0)-(a.y??0);c<l?o+=1:(c>l||(o+=1),s+=1)}return 0}function Pr(e,t,n){let r=e.reads[t],o=e.reads[n],s=r.firstNodeOffset??0,a=o.firstNodeOffset??0;if(s<a)return-1;if(s>a)return 1;let i=r.finalNodeCoverLength??0,c=o.finalNodeCoverLength??0;return i<c?-1:i>c?1:0}function Xr(e){let t=[];for(let n=0;n<=e.maxOrder;n+=1)t.push(0);return e.nodes.forEach(n=>{n.y!==void 0&&(t[n.order]=Math.max(t[n.order],n.y+n.contentHeight+20))}),e.tracks.forEach(n=>{n.path.forEach(r=>{t[r.order]=Math.max(t[r.order],(r.y??0)+n.width)})}),t}function gn(e,t){let n=[],r=(c,l)=>{n.push({order:c,isForward:l,node:null})},o=(c,l,d)=>{n.push({order:c,isForward:l,node:d})},s=Math.abs(t.indexSequence[0]),a=Zt(t.indexSequence[0]),i=e.nodes[s];o(i.order,a,s);for(let c=1;c<t.sequence.length;c+=1){let l=i,d=a;s=Math.abs(t.indexSequence[c]),a=Zt(t.indexSequence[c]),i=e.nodes[s];let{order:f}=i;if(f>l.order){d||r(l.order,!0);for(let u=l.order+1;u<f;u+=1)r(u,!0);a||r(f,!0)}else if(f<l.order){d&&r(l.order,!1);for(let u=l.order-1;u>f;u-=1)r(u,!1);a&&r(f,!1)}else a===d&&r(f,!a);o(f,a,s)}return n}function $e(e,t=e.reads){t.forEach(n=>{let r=0;for(;r<n.sequence.length&&n.sequence[r].startsWith("-");)r+=1;if(r===n.sequence.length){n.is_reverse=!0,n.sequence=n.sequence.reverse();for(let c=0;c<n.sequence.length;c+=1)n.sequence[c]=A(n.sequence[c]);let o=n.sequenceNew??[];o.reverse(),n.sequenceNew=o;for(let c of o)c.nodeName=A(c.nodeName),qr(c.mismatches,Ce(e,c.nodeName).sequenceLength);let s=n.firstNodeOffset??0,a=Ce(e,n.sequence[0]).sequenceLength;n.firstNodeOffset=a-(n.finalNodeCoverLength??0);let i=Ce(e,n.sequence[n.sequence.length-1]).sequenceLength;n.finalNodeCoverLength=i-s}})}function qr(e,t){e.forEach(n=>{Object.assign(n,Br(n,t))})}function Br(e,t){let n=e.type==="insertion"?0:e.type==="deletion"?e.length??0:e.seq?.length??0;return{...e,pos:t-e.pos-n,...e.seq!==void 0&&{seq:Le(e.seq)}}}var Dr={A:"T",T:"A",C:"G",G:"C"};function Le(e){let t="";for(let n=e.length-1;n>=0;n-=1)t+=Dr[e.charAt(n)]??"N";return t}function q(e,t){let n=new Map;t.forEach(r=>{r.indexSequence=r.sequence.map(o=>{let s=n.get(o);if(s===void 0){let a=e.nodeMap.get(A(o));if(a===void 0)throw new Error(`Track ${r.name??r.id} visits unknown node ${o}`);s=O(o)?-a:a,n.set(o,s)}return s})})}var Fr=20;function Yr(e){let t={minX:99,maxX:-99,minY:99,maxY:-99};e.nodes.forEach(n=>{n.x!==void 0&&(t.minX=Math.min(t.minX,n.x),t.maxX=Math.max(t.maxX,n.x+Fr+n.pixelWidth)),n.y!==void 0&&(t.minY=Math.min(t.minY,n.y-10),t.maxY=Math.max(t.maxY,n.y+n.contentHeight+10))}),e.tracks.forEach(n=>{n.path.forEach(r=>{let o=r.y??0;t.maxY=Math.max(t.maxY,o+n.width),t.minY=Math.min(t.minY,o)})}),e.imageBounds=t}function Ce(e,t){let n=e.nodeMap.get(A(t)),r=n===void 0?void 0:e.nodes[n];if(r===void 0)throw new Error(`Unknown node ${t}`);return r}function tn(e){let t=new Map;return e.nodes.forEach((n,r)=>{t.set(n.name,r)}),t}function nn(e){let t=e.nodes.map(()=>new Set),n=e.nodes.map(()=>new Set),r=o=>{for(let s=0;s<o.indexSequence.length-1;s+=1){let a=Math.abs(o.indexSequence[s]),i=Math.abs(o.indexSequence[s+1]);t[a].add(i),n[i].add(a)}};e.tracks.forEach(r),e.reads.forEach(r),e.nodes.forEach((o,s)=>{o.successors=Array.from(t[s]),o.predecessors=Array.from(n[s])})}function on(e,t){let n=0,r=0,o=0;t.forEach(s=>{let a=Math.abs(s);if(s<0){let i=e.nodeOrders[a]??=r;i<o&&(o=i),n=i,r=i-1}else{let i=e.nodeOrders[a]??=n;n=i+1,r=i}}),o<0&&Pe(e,-o)}function Wr(e,t){let n=0,r=0;for(;n<t.length&&e.nodeOrders[Math.abs(t[n])]===void 0;)n+=1;if(n>=t.length)return null;let o=t[n],s,a;o>=0?(s=e.nodeOrders[o]-1,a=-1):(s=e.nodeOrders[-o]+1,a=1);for(let i=n-1;i>=0;i-=1){let c=Math.abs(t[i]);e.nodeOrders[c]===void 0&&(e.nodeOrders[c]=s,r=Math.min(r,s),s+=a)}return r<0&&Pe(e,-r),n}var Hr=-1;function Gr(e){let t=[];for(let n of e)t.push(n??Hr);return t}function ke(e){let t,n,r,o,s=0,a=e.tracks.concat(e.reads),i={stamp:new Int32Array(e.nodes.length),generation:0};e.nodeOrders=new Array(e.nodes.length).fill(void 0),e.nodes.forEach(l=>{l.order=void 0}),on(e,e.tracks[0].indexSequence);for(let l=1;l<a.length;l+=1){if(B(`generating order for track ${l+1}`),r=Wr(e,a[l].indexSequence),r===null){l<e.tracks.length?on(e,a[l].indexSequence):(a.splice(l,1),e.reads.splice(l-e.tracks.length,1),l-=1);continue}for(t=zr(a[l].indexSequence);r<t.length;){for(o=r,r+=1;r<t.length&&e.nodeOrders[t[r]]===void 0;)r+=1;if(r<t.length){n=e.nodeOrders[t[o]]+1;for(let d=o+1;d<r;d+=1)e.nodeOrders[t[d]]=n,n+=1;if(e.nodeOrders[t[r]]>e.nodeOrders[t[o]])e.nodeOrders[t[r]]<n&&rn(e,t[r],t[r-1],n);else if(a[l].indexSequence[r]>=0&&!Ur(e,t[r],t[o],i))rn(e,t[r],t[r-1],n);else if(a[l].indexSequence[o]<0||e.nodes[t[o+1]].degree<2&&e.nodeOrders[t[r]]<e.nodeOrders[t[o]]){n=e.nodeOrders[t[o]]-1;for(let d=o+1;d<r;d+=1)e.nodeOrders[t[d]]=n,s=Math.min(s,n),n-=1}}else if(a[l].indexSequence[o]>=0){n=e.nodeOrders[t[o]]+1;for(let d=o+1;d<t.length;d+=1){let f=t[d];e.nodeOrders[f]===void 0&&(e.nodeOrders[f]=n,n+=1)}}else{n=e.nodeOrders[t[o]]-1;for(let d=o+1;d<t.length;d+=1){let f=t[d];e.nodeOrders[f]===void 0&&(e.nodeOrders[f]=n,s=Math.min(s,n),n-=1)}}}}s<0&&Pe(e,-s);let c=Gr(e.nodeOrders);e.nodeOrders=c,c.forEach((l,d)=>{let f=e.nodes[d];f!==void 0&&(f.order=l)})}function Ur(e,t,n,r){r.generation+=1;let{stamp:o,generation:s}=r,a=[t];for(o[t]=s;a.length>0;){let i=a.pop();if(i===n)return!0;for(let c of e.nodes[i].successors)o[c]!==s&&(o[c]=s,a.push(c))}return!1}function Kr(e){let t=-1;return e.nodeOrders.forEach(n=>{n!==void 0&&n>t&&(t=n)}),t}function zr(e){return e.map(t=>Math.abs(t))}function Pe(e,t){e.nodeOrders.forEach((n,r)=>{n!==void 0&&(e.nodeOrders[r]=n+t)})}function rn(e,t,n,r){let o=new Map,s=[[t,r]],a=0;for(;a<s.length;){let[i,c]=s[a];a+=1;let l=e.nodeOrders[i];l!==void 0&&l<c&&(!o.has(i)||o.get(i)<c)&&(o.set(i,c),e.nodes[i].successors.forEach(d=>{e.nodeOrders[d]>l&&d!==n&&s.push([d,c+1])}),i!==t&&e.nodes[i].predecessors.forEach(d=>{e.nodeOrders[d]>l&&d!==n&&s.push([d,c+1])}))}o.forEach((i,c)=>{e.nodeOrders[c]=i})}function jr(e){e.nodes.forEach(t=>{t.tracks=[]}),e.tracks.forEach(t=>{t.indexSequence.forEach(n=>{e.nodes[Math.abs(n)].tracks.push(t.id)})}),e.nodes.forEach(t=>{t.degree=t.tracks.length})}function Vr(e){Qr(e,[...e.tracks.slice(1),...e.reads],e.tracks[0])}function Qr(e,t,n){let r=new Int32Array(e.nodes.length),o=new Uint8Array(e.nodes.length);for(let s of n.sequence){let a=O(s)?void 0:e.nodeMap.get(s);a!==void 0&&(o[a]=1)}for(let s of t){let{sequence:a,indexSequence:i}=s,c=i.length-1;for(let l=0;l<=c;l+=1){let d=Math.abs(i[l]);if(o[d]===1)continue;let f=e.nodes[d].order,u=l>0?e.nodes[Math.abs(i[l-1])].order:void 0,m=l<c?e.nodes[Math.abs(i[l+1])].order:void 0,p=O(a[l])?1:-1;(u===void 0||u<f)&&(m===void 0||f<m)&&(r[d]+=p),(u===void 0||u>f)&&(m===void 0||f>m)&&(r[d]-=p)}}for(let s of t){let{sequence:a,indexSequence:i}=s;for(let c=0;c<i.length;c+=1)r[Math.abs(i[c])]>0&&(a[c]=Ie(a[c]),i[c]=-i[c])}e.nodes.forEach((s,a)=>{r[a]>0&&(s.seq=Le(s.seq),s.switched=!0)})}function Zr(e){let t=0,n=20,r=-1,o=e.nodes.slice();o.sort(Xe);let s=Jr(e);o.forEach(a=>{a.order>=0&&(a.order>r&&(r=a.order,t=n+10*s[a.order]),a.x=t,n=Math.max(n,t+40+a.pixelWidth))})}function Jr(e){let t=[],n=[],r=[],o=[];for(let s=0;s<=e.maxOrder;s+=1)t.push(0),n.push(0),r.push(0);e.tracks.forEach(s=>{for(let a=1;a<s.path.length;a+=1){let i=s.path[a],c=s.path[a-1];if(i.order===c.order)i.isForward?t[i.order]=t[i.order]+1:n[i.order]=n[i.order]+1;else{let l=Math.abs((i.y??0)-(c.y??0));r[i.order]=Math.max(l/17.5,r[i.order])}}}),o.push(Math.max(0,t[0]-1));for(let s=1;s<=e.maxOrder;s+=1)o.push(Math.max(Math.max(0,t[s]-1)+Math.max(0,n[s-1]-1),r[s]));return o}function es(e){let t=[],n=[];for(let r=0;r<=e.maxOrder;r+=1)e.assignments[r]=[],n[r]=new Map,t[r]=[];e.tracks.forEach((r,o)=>{r.path=gn(e,r),r.path.forEach((s,a)=>{ts(e,s.order,s.node,o,a,t,n)})});for(let r=0;r<=e.maxOrder;r+=1)os(e,e.assignments[r],r)}function ts(e,t,n,r,o,s,a){let i={trackID:r,segmentID:o,compareToFromSame:s[t][r]??null},c=n===null?void 0:a[t].get(n);if(c===void 0){let l={type:"single",node:n,tracks:[i]};e.assignments[t].push(l),n!==null&&a[t].set(n,l)}else c.type="multiple",c.tracks.push(i);s[t][r]=i}function ns(e,t,n){let r;t.forEach(o=>{o.idealLane=0,o.tracks.forEach(s=>{if(s.segmentID===0)s.idealLane=s.trackID,s.idealY=null;else if(e.tracks[s.trackID].path[s.segmentID-1].order===n-1)s.idealLane=e.tracks[s.trackID].path[s.segmentID-1].lane??void 0,s.idealY=e.tracks[s.trackID].path[s.segmentID-1].y;else if(s.segmentID<e.tracks[s.trackID].path.length-1&&e.tracks[s.trackID].path[s.segmentID+1].order===n-1)s.idealLane=e.tracks[s.trackID].path[s.segmentID+1].lane??void 0,s.idealY=e.tracks[s.trackID].path[s.segmentID+1].y;else{for(r=s.segmentID-1;r>=0&&e.tracks[s.trackID].path[r].order!==n-1;)r-=1;r<0?(s.idealLane=s.trackID,s.idealY=null):(s.idealLane=e.tracks[s.trackID].path[r].lane,s.idealY=e.tracks[s.trackID].path[r].y)}o.idealLane+=s.idealLane}),o.idealLane/=o.tracks.length})}function os(e,t,n){let r=0,o=new Set,s=20,a=!1,i=-1;ns(e,t,n),t.sort(sn),t.forEach(c=>{c.node!==null?(e.nodes[c.node].topLane=r,a&&(s-=10),e.nodes[c.node].y=s,e.nodes[c.node].contentHeight=0,a=!1):(a?s-=25:s>20&&(s-=10),a=!0),c.tracks.sort(sn),c.tracks.forEach(l=>{l.lane=r,l.trackID===i&&c.node===null&&a&&(s+=10),e.tracks[l.trackID].path[l.segmentID].lane=r,e.tracks[l.trackID].path[l.segmentID].y=s,typeof l.idealY=="number"&&o.add(l.idealY-s),r+=1,s+=e.tracks[l.trackID].width,c.node!==null&&(e.nodes[c.node].contentHeight+=e.tracks[l.trackID].width),i=l.trackID}),s+=25}),rs(e,t,o)}function rs(e,t,n){let r=0,o=Number.MAX_SAFE_INTEGER;n.forEach(s=>{let a=is(e,t,s);a<o&&(o=a,r=s)}),t.forEach(s=>{s.node!==null&&(e.nodes[s.node].y+=r),s.tracks.forEach(a=>{let i=e.tracks[a.trackID].path[a.segmentID];i.y=i.y+r})})}function ss(e,t,n){t.order<0||e.assignments[t.order]===void 0||(e.assignments[t.order].forEach(r=>{if(r.node!==null){let o=e.nodes[r.node];o!==t&&o.y>t.y&&(o.y+=n,r.tracks.forEach(s=>{let a=e.tracks[s.trackID].path[s.segmentID];a.y=a.y+n}))}else r.tracks.forEach(o=>{let s=e.tracks[o.trackID].path[o.segmentID];s.y>=t.y&&(s.y=s.y+n)})}),e.nodesPerOrder[t.order].length>0&&e.nodesPerOrder[t.order].forEach(r=>{e.nodes[r]!==t&&e.nodes[r].y>t.y&&(e.nodes[r].y+=n)}))}function is(e,t,n){let r=0;return t.forEach(o=>{o.tracks.forEach(s=>{typeof s.idealY=="number"&&e.tracks[s.trackID].type!=="read"&&(r+=Math.abs(s.idealY-n-e.tracks[s.trackID].path[s.segmentID].y)*e.tracks[s.trackID].width)})}),r}function sn(e,t){return e.idealLane!==void 0?t.idealLane!==void 0?e.idealLane<t.idealLane?-1:e.idealLane>t.idealLane?1:0:-1:t.idealLane!==void 0?1:0}function Xe(e,t){return e.order!==t.order?e.order-t.order:e.y!==void 0&&t.y!==void 0?e.y-t.y:0}function as(e){let t=!0,n=4,r=e.config.trackWidth;for(let o of e.tracks)o.freq!==void 0?o.width=Math.round((Math.log(Math.max(o.freq,1))+1)*n):(o.width=r,o.type!==void 0&&o.type==="read"&&(o.width=n)),o.width!==n&&(t=!1);t&&e.tracks.forEach(o=>{o.freq!==void 0&&(o.width=r)})}function cs(e,t){let n=t.path[0],r=e.nodes[n.node],o=t.firstNodeOffset??0;return qe(r,n.isForward?o:r.sequenceLength-o)}function ls(e,t){let n=t.path[t.path.length-1],r=e.nodes[n.node],o=t.finalNodeCoverLength??0;return qe(r,n.isForward?o:r.sequenceLength-o)}function xn(e,t){return t>e.sequenceLength?null:qe(e,t)}function qe(e,t){let[n,r]=ms(e);if(e.sequenceLength===0)return n;let o=Math.min(Math.max(t,0),e.sequenceLength);return n+o/e.sequenceLength*(r-n)}function ds(e){let t,n,r,o;for(let i=0;i<=e.maxOrder;i+=1)e.extraLeft.push(0),e.extraRight.push(0);let s=[],a=[];e.nodes.forEach(i=>{i.x!==void 0&&(s[i.order]=i.x,a[i.order]===void 0?a[i.order]=i.x+i.pixelWidth:a[i.order]=Math.max(a[i.order],i.x+i.pixelWidth))}),e.tracks.sort(Lr),e.tracks.forEach(i=>{r=i.path[0].y,i.type!=="read"?i.sequence[0].startsWith("-")?t=a[i.path[0].order]+20:t=s[i.path[0].order]-20:t=cs(e,i);for(let c=0;c<i.path.length;c+=1)i.path[c].y!==r&&(i.path[c-1].isForward?n=a[i.path[c-1].order]:n=s[i.path[c-1].order],n!==t&&e.shapes.rectangles.push({xStart:Math.min(t,n),yStart:r,xEnd:Math.max(t,n),yEnd:r+i.width-1,id:i.id,name:i.name,type:i.type}),i.path[c].order-1===i.path[c-1].order?(t=n,n=s[i.path[c].order],o=i.path[c].y,e.shapes.curves.push({xStart:t,yStart:r,xEnd:n+1,yEnd:o,width:i.width,id:i.id,name:i.name,type:i.type,nodeStart:i.path[c-1].node,nodeEnd:i.path[c].node,orderStart:i.path[c-1].order,orderEnd:i.path[c].order}),t=n,r=o):i.path[c].order+1===i.path[c-1].order?(t=n,n=a[i.path[c].order],o=i.path[c].y,e.shapes.curves.push({xStart:t+1,yStart:r,xEnd:n,yEnd:o,width:i.width,id:i.id,name:i.name,type:i.type,nodeStart:i.path[c-1].node,nodeEnd:i.path[c].node,orderStart:i.path[c-1].order,orderEnd:i.path[c].order}),t=n,r=o):i.path[c-1].isForward?(o=i.path[c].y,cn(e,1,n,r,o,i.width,i.id,i.path[c].order,i.type,i.name),t=a[i.path[c].order],r=i.path[c].y):(o=i.path[c].y,cn(e,-1,n,r,o,i.width,i.id,i.path[c].order,i.type,i.name),t=s[i.path[c].order],r=i.path[c].y));i.type!=="read"?i.path[i.path.length-1].isForward?n=a[i.path[i.path.length-1].order]+20:n=s[i.path[i.path.length-1].order]-20:n=ls(e,i),e.shapes.rectangles.push({xStart:Math.min(t,n),yStart:r,xEnd:Math.max(t,n),yEnd:r+i.width-1,id:i.id,name:i.name,type:i.type})})}var yn=1e9;function bn(e,t,n,r=yn){let o=new Map,s=0,a=e.nodes.length,i=(h,g)=>(h+a)*(2*a+1)+g+a,c=e.config.ignoreStrand;for(let[h,g]of t.entries()){let x=Math.max(g.freq??1,1);s+=x;let M=g.indexSequence;if(!(M.length<2))for(let w=0;w<M.length-1;w+=1){let b=M[w],E=M[w+1],y=e.nodes[Math.abs(b)],S=e.nodes[Math.abs(E)],v=c?Math.min(i(b,E),i(-E,-b)):i(b,E),_=o.get(v);_===void 0?o.set(v,{sSigned:b,dSigned:E,sName:b<0?`-${y.name}`:y.name,dName:E<0?`-${S.name}`:S.name,count:x,crossings:x,sourceTrackID:g.sourceTrackID,lastSource:h}):(_.crossings+=x,_.lastSource!==h&&(_.count+=x,_.lastSource=h))}}let l=0;for(let h of o.values())h.crossings>l&&(l=h.crossings);let d=ae,f=60,u=h=>l<=1?d:d+(f-d)*Math.sqrt(h/l),m=[],p=0;for(let h of o.values()){let g=r+p,x=n==="haplotype"?{count:h.count,total:s}:void 0,M=x===void 0?"":` (${ps(x)})`,w=h.crossings===h.count?"":`, ${h.crossings.toLocaleString()} crossings`,b=`${h.count.toLocaleString()} ${n}${h.count===1?"":"s"}${M}${w}: Node ${h.sName} \u2192 Node ${h.dName}`;e.coarsenedEdgeMeta.set(g,{count:h.count,label:b});let E=e.nodes[Math.abs(h.sSigned)].sequenceLength;m.push({id:g,sourceTrackID:h.sourceTrackID,type:"read",name:b,sequence:[h.sName,h.dName],indexSequence:[],path:[],width:u(h.crossings),firstNodeOffset:E,finalNodeCoverLength:0,sequenceNew:[{nodeName:h.sName,mismatches:[]},{nodeName:h.dName,mismatches:[]}],mapping_quality:0,is_secondary:!1,sample_name:null,read_group:null,score:h.count,haplotypeShare:x}),p+=1}if(fn){let h="?",g=0;e.nodes.forEach(x=>{x.contentHeight>g&&(g=x.contentHeight,h=x.name)}),B(`[coarsened] ${n}s_in=${t.length} edges_out=${m.length} tallestNodeBeforePlace=${h}(${g.toFixed(1)})`)}return{bands:m,total:s}}function fs(e,t){let n=e.trackForRuler===void 0?-1:e.tracks.findIndex(d=>d.name===e.trackForRuler),r=n===-1?0:n,o=e.tracks[r],s=(o.freq??1)-1,a=hs(e,o),i=e.tracks.filter((d,f)=>f!==r).map(d=>us(a,d));if(s>0&&i.push({...o,freq:s}),i.length===0)return;let{bands:c,total:l}=bn(e,i,"haplotype",t);return c.length>0?{ref:o,bands:c,total:l}:void 0}function us(e,t){let n=0;for(let r of t.indexSequence){let o=e[Math.abs(r)];o!==void 0&&o!==0&&(n+=o===Math.sign(r)?1:-1)}return n>=0?t:{...t,sequence:t.sequence.map(Ie).reverse(),indexSequence:t.indexSequence.map(r=>-r).reverse()}}function hs(e,t){let n=new Int8Array(e.nodes.length);for(let r of t.indexSequence){let o=Math.abs(r);n[o]===0&&(n[o]=Math.sign(r))}return n}function ps({count:e,total:t}){let n=e/t;return n<.01?"<1%":n>.99&&e<t?">99%":`${Math.round(n*100)}%`}var an=7;function cn(e,t,n,r,o,s,a,i,c,l){let d=t===1?e.extraRight:e.extraLeft,f=10*d[i],u=n+t*(f+5),m=an,p=Math.min(an,s),h=Math.min(r,o),g=Math.max(r,o),x=t===1?n:u-1,M=t===1?u:n,w=S=>{e.shapes.verticalRectangles.push({xStart:x,yStart:S,xEnd:M,yEnd:S+s-1,id:a,name:l,type:c})};w(r),e.shapes.verticalRectangles.push({xStart:t===1?u+m:u-m-p,yStart:h+s+m-1,xEnd:t===1?u+m+p-1:u-m-1,yEnd:g-m+1,id:a,name:l,type:c}),w(o);let b=u+t*m,E=u+t*(m+p),y=`M ${u} ${g}`;y+=` Q ${b} ${g} ${b} ${g-m}`,y+=` H ${E}`,y+=` Q ${E} ${g+s} ${u} ${g+s}`,y+=" Z ",e.shapes.corners.push({path:y,id:a,type:c}),y=`M ${u} ${h}`,y+=` Q ${E} ${h} ${E} ${h+s+m}`,y+=` H ${b}`,y+=` Q ${b} ${h+s} ${u} ${h+s}`,y+=" Z ",e.shapes.corners.push({path:y,id:a,type:c}),d[i]+=1}function ms(e){let t=e.x-4,n=e.x+e.pixelWidth+4;return[t,n]}function ln(e){switch(e.config.nodeWidthOption){case"compressed":e.nodes.forEach(t=>{t.width=1+Math.log2(Math.max(t.sequenceLength,1)),t.pixelWidth=Math.round((t.width-1)*8.401)});break;case"small":e.nodes.forEach(t=>{t.width=t.sequenceLength/100,t.pixelWidth=Math.max(Math.round((t.width-1)*8.401),0)});break;case"fixed":e.nodes.forEach(t=>{t.width=10,t.pixelWidth=Math.round(t.width*8.401)});break;case"normal":{let t=e.config.charWidth;e.nodes.forEach(n=>{n.width=n.sequenceLength,n.pixelWidth=Math.round(t*Math.max(n.sequenceLength-1,0))});break}default:throw new Error(`${e.config.nodeWidthOption} not implemented`)}}var L=0;function dn(e){return{first:new Int32Array(e),count:new Uint8Array(e)}}function N(e,t,n){let r=e.count[t];r===0?(e.first[t]=n,e.count[t]=1):r===1&&e.first[t]!==n&&(e.count[t]=2)}function W(e,t){return e.count[t]===1?Math.abs(e.first[t]):0}function gs(e){let t=dn(e.nodes.length),n=dn(e.nodes.length),r=new Map,o=f=>{let u=r.get(f);if(u===void 0){let m=e.nodeMap.get(A(f));u=O(f)?-m:m,r.set(f,u)}return u};e.tracks.concat(e.reads).forEach(f=>{let{sequence:u}=f,m=f.type==="haplotype",p=u.length-1,h=L,g=p>=0?o(u[0]):L;for(let x=0;x<=p;x+=1){let M=x<p?o(u[x+1]):L;if(g>0)x>0?(N(t,g,h),h<0&&N(t,g,-h)):m&&N(t,g,L),x<p?(N(n,g,M),M<0&&N(n,g,-M)):m&&N(n,g,L);else{let w=-g;x>0?(N(n,w,-h),h>0&&N(n,w,h)):m&&N(n,w,L),x<p?(N(t,w,-M),M>0&&N(t,w,M)):m&&N(t,w,L)}h=g,g=M}});let a=new Uint8Array(e.nodes.length);e.nodes.forEach((f,u)=>{xs(u,t,n)!==0&&(a[u]=1)});let i=new Int32Array(e.nodes.length),c=new Float64Array(e.nodes.length),l=new Float64Array(e.nodes.length);e.nodes.forEach((f,u)=>{if(a[u]!==1){i[u]=u,l[u]=f.sequenceLength;for(let m=u;ys(m,t,n);)m=W(n,m),i[m]=u,c[m]=f.sequenceLength,f.sequenceLength+=e.nodes[m].sequenceLength,f.seq+=e.nodes[m].seq,l[m]=f.sequenceLength}}),e.reads.forEach(f=>{let{sequence:u}=f,m=f.sequenceNew??u.map(w=>({nodeName:w,mismatches:[]})),p=w=>{let b=Math.abs(o(w));return O(w)?e.nodes[i[b]].sequenceLength-l[b]:c[b]},h=u.length-1;f.firstNodeOffset=(f.firstNodeOffset??0)+p(u[0]),f.finalNodeCoverLength=(f.finalNodeCoverLength??0)+p(u[h]);let g=[],x=[],M=[];u.forEach((w,b)=>{let E=Math.abs(o(w)),{mismatches:y}=m[b],S=p(w);if(y.forEach(v=>{v.pos+=S}),a[E]===1&&!O(w)&&b>0)x.at(-1).mismatches.push(...y);else if(a[E]===1&&O(w)&&b<h)M.push(...y);else{let v=e.nodes[i[E]].name,_=O(w)?mn(v):v;g.push(_),x.push({nodeName:_,mismatches:M.concat(y)}),M=[]}}),f.sequence=g,f.sequenceNew!==void 0&&(f.sequenceNew=x)}),e.tracks.forEach(f=>{let{sequence:u}=f,m=0;for(let p of u)a[Math.abs(o(p))]===0&&(u[m]=p,m+=1);u.length=m});let d=1;for(let f=1;f<e.nodes.length;f+=1)a[f]===0&&(e.nodes[d]=e.nodes[f],d+=1);e.nodes.length=d}function xs(e,t,n){let r=W(t,e);return r!==0&&W(n,r)!==0?r:0}function ys(e,t,n){let r=W(n,e);return r!==0&&W(t,r)!==0}function bs(e,t){let n=new Map;for(let r of e){let o=t(r),s=n.get(o);s===void 0?n.set(o,[r]):s.push(r)}return n}function Ms(e,t){return e.xStart<t.xStart?1:e.xStart>t.xStart?-1:e.yStart>t.yStart?1:e.yStart<t.yStart?-1:0}function Be(e){return[e.nodeStart??-1,e.nodeEnd??-1,e.nodeStart===null?e.orderStart:-1,e.nodeEnd===null?e.orderEnd:-1]}function ws(e,t){for(let n=0;n<e.length;n+=1){let r=e[n]-t[n];if(r!==0)return r}return 0}function Mn(e,t){let n=bs(e.filter(r=>r.type===t),r=>Be(r).join(","));return n.forEach(r=>{let o=.3,s=.4/r.length;r.length<=5&&(o=.5,s=0),r.sort(Ms),r.forEach(a=>{let i,c;a.yStart<a.yEnd?(i=a.xStart+(a.xEnd-a.xStart)*(1-o),o+=s,c=a.xStart+(a.xEnd-a.xStart)*(1-o)):(i=a.xStart+(a.xEnd-a.xStart)*o,o+=s,c=a.xStart+(a.xEnd-a.xStart)*o);let l=`M ${a.xStart} ${a.yStart}`;l+=` C ${i} ${a.yStart} ${i} ${a.yEnd} ${a.xEnd} ${a.yEnd}`,l+=` V ${a.yEnd+a.width}`,l+=` C ${c} ${a.yEnd+a.width} ${c} ${a.yStart+a.width} ${a.xStart} ${a.yStart+a.width}`,l+=" Z",a.path=l})}),[...n.values()].sort((r,o)=>ws(Be(r[0]),Be(o[0]))).flat()}function wn(e){let t=`M ${e.x-9} ${e.y} Q ${e.x-9} ${e.y-9} ${e.x} ${e.y-9}`,n=e.x,r=e.y-9;return e.width>1&&(n+=e.pixelWidth,t+=` L ${n} ${r}`),t+=` Q ${n+9} ${r} ${n+9} ${r+9}`,n+=9,r+=9,e.contentHeight>0&&(r+=e.contentHeight,t+=` L ${n} ${r}`),t+=` Q ${n} ${r+9} ${n-9} ${r+9}`,n-=9,r+=9,e.width>1&&(n-=e.pixelWidth,t+=` L ${n} ${r}`),t+=` Q ${n-9} ${r} ${n-9} ${r-9}`,n-=9,r-=9,e.contentHeight>0&&(r-=e.contentHeight,t+=` L ${n} ${r}`),t}function Es(e,t){let n=[],r=e.sequenceNew??[];return r.forEach((o,s)=>{let a=t.nodeMap.get(A(o.nodeName)),i=a===void 0?void 0:t.nodes[a],c=s;for(;c<e.path.length&&e.path[c].node!==a;)c+=1;let l=e.path[c]?.y;if(i&&l!==void 0){let d={readId:e.id,y:l,height:e.width,nodeY:i.y},f=u=>xn(i,u);for(let u of o.mismatches){let m=f(u.pos);if(m!==null){if(u.type==="insertion"){let p=s===0&&u.pos===e.firstNodeOffset||s===r.length-1&&u.pos===e.finalNodeCoverLength;n.push({...d,kind:"insertion",x:m,seq:u.seq,softClip:p})}else if(u.type==="deletion"&&u.length!==void 0){let p=f(u.pos+u.length);p!==null&&n.push({...d,kind:"deletion",x0:m,x1:p})}else if(u.type==="substitution"&&u.seq!==void 0){let p=f(u.pos+u.seq.length);p!==null&&n.push({...d,kind:"substitution",x0:m,x1:p,seq:u.seq})}}}}}),n}function En(e){return e.reads.flatMap(t=>Es(t,e))}function Fe(e){let t=e.trim().split(/[\s,]+/),n=[],r=0,o=()=>Number(t[r++]);for(;r<t.length;){let s=t[r++];s==="M"||s==="L"?n.push({op:s,x:o(),y:o()}):s==="H"?n.push({op:s,x:o()}):s==="V"?n.push({op:s,y:o()}):s==="Q"?n.push({op:s,x1:o(),y1:o(),x:o(),y:o()}):s==="C"?n.push({op:s,x1:o(),y1:o(),x2:o(),y2:o(),x:o(),y:o()}):s==="Z"&&n.push({op:s})}return n}function Nn(e){let t=1/0,n=-1/0;for(let r of e)"x"in r&&(t=Math.min(t,r.x),n=Math.max(n,r.x)),"x1"in r&&(t=Math.min(t,r.x1),n=Math.max(n,r.x1));return{x0:t,x1:n}}function Sn(e,t,n){let r=Fe(e);return{commands:r,color:t,track:n,...Nn(r)}}function On(e,t){return new Map(e.tracks.map(n=>[n.id,n.type==="read"?tt(n):t[n.id]]))}function vn(e,t,n){let{shapes:r}=e,o=l=>n.get(l.id),s=l=>t==="haplotype"?l.id:void 0,a=[...r.rectangles,...r.verticalRectangles].filter(l=>l.type===t).map(l=>({color:o(l),track:s(l),x0:l.xStart,x1:l.xEnd+1,y0:l.yStart,y1:l.yEnd+1})),i=Mn(r.curves,t).map(l=>Sn(l.path,o(l),s(l))),c=r.corners.filter(l=>l.type===t).map(l=>Sn(l.path,o(l),s(l)));return{rects:a,shapes:[...i,...c]}}function Ss({layout:e,pathColors:t}){let n=On(e,t),r=[];return e.nodes.forEach(o=>{if(o.order>=0){let s=Fe(wn(o));r.push({name:o.name,commands:s,...Nn(s)})}}),{bounds:e.bounds,layers:[vn(e,"haplotype",n),vn(e,"read",n)],nodes:r,mismatches:En(e).filter(o=>o.kind!=="insertion"||!o.softClip)}}function Rn(e,t,n,r){let o=0,s=0;for(let a of t)switch(a.op){case"M":o=a.x,s=a.y,e.moveTo(n(o),r(s));break;case"L":o=a.x,s=a.y,e.lineTo(n(o),r(s));break;case"H":o=a.x,e.lineTo(n(o),r(s));break;case"V":s=a.y,e.lineTo(n(o),r(s));break;case"Q":o=a.x,s=a.y,e.quadraticCurveTo(n(a.x1),r(a.y1),n(o),r(s));break;case"C":o=a.x,s=a.y,e.bezierCurveTo(n(a.x1),r(a.y1),n(a.x2),r(a.y2),n(o),r(s));break;case"Z":e.closePath();break}}function _n(e,t,n,r,o){let s=new Map;for(let a of t)if(n(a)){let i=r(a),c=s.get(i);c?c.push(a):s.set(i,[a])}for(let a of s.values()){e.fillStyle=r(a[0]),e.beginPath();for(let i of a)o(i);e.fill()}}var vs=12,Rs=.15;function _s(e){return Math.max(Rs,Math.min(1,e/vs))}var Ns=.55;function Os(e,t,n){let{x:r,y:o,width:s}=n,a=d=>r(d.x1)>=0&&r(d.x0)<=s,i=d=>d.track!==void 0&&n.tubeColors?.[d.track]||d.color;e.globalAlpha=1;for(let d of t.layers)_n(e,d.rects,a,i,f=>{let u=r(f.x0),m=o(f.y0);e.rect(u,m,r(f.x1)-u,o(f.y1)-m)}),_n(e,d.shapes,a,i,f=>{Rn(e,f.commands,r,o)});let c=n.darkMode?"#d0d0d0":"#000000",l=n.darkMode?"rgba(40,40,40,0.4)":"rgba(255,255,255,0.4)";e.lineWidth=2*Math.max(.25,Math.min(1,n.yScale));for(let d of t.nodes)if(a(d)){let f=d.name===n.highlightNode;e.beginPath(),Rn(e,d.commands,r,o);let u=f?void 0:n.nodeColors?.get(d.name);e.fillStyle=f?"rgba(255,192,203,0.5)":u??l,e.strokeStyle=f?"#ff0000":c,e.globalAlpha=u?Ns:1,e.fill(),e.globalAlpha=f?1:_s(r(d.x1)-r(d.x0)),e.stroke(),e.globalAlpha=1}Ts(e,t.mismatches,n)}var An=12,As=6;function Tn(e){return An*e>=As}function De(e,{x:t,width:n}){let[r,o]=e.kind==="insertion"?[e.x,e.x]:[e.x0,e.x1];return t(o)>=0&&t(r)<=n}function Ts(e,t,n){let{x:r,y:o,yScale:s,darkMode:a}=n;if(!Tn(s)||t.length===0)return;let i=An*s;e.fillStyle="grey",e.beginPath();for(let c of t)if(c.kind==="deletion"&&De(c,n)){let l=r(c.x0),d=o(c.y);e.rect(l,d,r(c.x1)-l,o(c.y+c.height)-d)}e.fill(),e.font=`${i}px monospace`,e.textBaseline="alphabetic",e.fillStyle=a?"#ffffff":"#000000";for(let c of t)De(c,n)&&(c.kind==="substitution"?e.fillText(c.seq,r(c.x0)+1,o(c.y+c.height)):c.kind==="insertion"&&e.fillText("*",r(c.x)-3,o(c.y+c.height)))}function Cs(e,t){let n=[];for(let r of t){let o=e.get(r.refName),s=o?.[0],a=o?.at(-1);if(!o||!s||!a)continue;let i=Math.max(r.start,s.bp0),c=Math.min(r.end,a.bp1);c<=i||n.push({gene:r,...se(o,i,c),exons:r.exons.filter(l=>l.end>i&&l.start<c).map(l=>se(o,Math.max(l.start,i),Math.min(l.end,c)))})}return n}var Ye=22,ks=4,ce=8,$s="11px sans-serif",Is=8;function Ls(e){let t=e.flatMap(o=>[{x:o.x0,step:1},{x:o.x1,step:-1}]).sort((o,s)=>o.x-s.x||o.step-s.step),n=0,r=0;for(let{step:o}of t)n+=o,r=Math.max(r,n);return Math.min(ks,r)}function Ps(e,t,n,r,o=0){let{x:s,width:a,darkMode:i}=n,c=Math.max(1,Math.floor((r-o)/Ye)),l=[],d=i?"#e0e0e6":"#1c1c22";e.font=$s,e.textAlign="center",e.textBaseline="alphabetic",e.fillStyle=d,e.strokeStyle=d,e.lineWidth=1;let f=t.map(u=>({g:u,s0:s(u.x0),s1:s(u.x1)})).filter(({s0:u,s1:m})=>m>=0&&u<=a).sort((u,m)=>u.s0-m.s0);for(let{g:u,s0:m,s1:p}of f){let h=u.gene.strand>0?" \u2192":u.gene.strand<0?"\u2190 ":"",g=u.gene.strand<0?`${h}${u.gene.name}`:`${u.gene.name}${h}`,x=(Math.max(m,0)+Math.min(p,a))/2,M=e.measureText(g).width/2,w=Math.min(m,x-M),b=Math.max(p,x+M),E=l.findIndex(S=>S+Is<=w);E===-1&&(E=Math.min(l.length,c-1)),l[E]=Math.max(l[E]??-1/0,b);let y=r-E*Ye-ce/2;e.beginPath(),e.moveTo(m,y+.5),e.lineTo(p,y+.5),e.stroke();for(let S of u.exons){let v=s(S.x0);e.fillRect(v,y-ce/2,Math.max(1,s(S.x1)-v),ce)}e.fillText(g,x,y-ce/2-2)}}var T=12,Ln=T+8,Pn=8,Cn=Pn+3,Xs=12;function qs(e,{colorScheme:t,referenceRamp:n,walks:r}){let o={...he(e),referenceRamp:n},s=[];return e.nodes.forEach((a,i)=>{if(C(a)){let c=r?r.map(l=>{let d=l.colors.get(a.id);return d===void 0?V:I(d)}):[I(pe(a,i,t,o))];s.push({node:a.id,bp0:a.stable.start,bp1:a.stable.start+a.length,colors:c,faded:c.includes(V)})}}),s.sort((a,i)=>a.bp0-i.bp0)}function We(e,t,n){let r=t*e.scale+e.translateX,o=n*e.scale+e.translateX;return r<o?[r,o]:[o,r]}var kn=2;function Xn(e,t,n){let r=-t.translateX/t.scale,o=(n-t.translateX)/t.scale,s=Math.min(r,o),a=Math.max(r,o),i=0,c=0;for(let l of e)i+=Math.max(0,Math.min(l.bp1,s)-l.bp0),c+=Math.max(0,l.bp1-Math.max(l.bp0,a));return t.scale>=0?{left:Math.round(i),right:Math.round(c)}:{left:Math.round(c),right:Math.round(i)}}function Bs(e,t,n,r){if(r<0||r>T+kn)return;let o,s=kn;for(let a of e){let[i,c]=We(t,a.bp0,a.bp1),l=Math.max(0,i-n,n-c);l<=s&&(s=l,o=a.node)}return o}function Ds(e,t){let n=e?.[Math.floor(e.length/2)];return n?t(n):void 0}function qn(e,t,n,r){let o=e.map(l=>{let[d,f]=We(t,l.bp0,l.bp1),u=Math.round(d*r);return{colors:l.colors,x0:d,px0:u,px1:Math.max(Math.round(f*r),u+1)}}).filter(l=>l.px1>0&&l.px0<n*r).sort((l,d)=>l.x0-d.x0),s=[],a=-1/0,i=[-1/0,-1/0];for(let{colors:l,px0:d,px1:f}of o){let u=Math.max(d,a);if(f>u){let m=i[0]<u?0:1;i[m]=f,s.push({colors:l,x0:u/r,x1:f/r,tier:m}),a=f}}return(s.length>0?s.at(-1).x1-s[0].x0:0)>=s.length*Xs?s:s.map(({tier:l,...d})=>d)}function $n(e,t,n,r){let o=n>0?t:t-Cn;e.clearRect(o,0,Cn,T);let s=t+n,a=s+n*Pn;e.beginPath(),e.moveTo(s,T/2),e.lineTo(a,0),e.lineTo(a,T),e.closePath(),e.fillStyle=r,e.fill()}function In(e,t,n){return Math.round(e*T*n/t)/n}function Fs(e,t,n,{width:r,lit:o,darkMode:s,dpr:a=1}){let i=s?"#ffffff":"#18181c";e.clearRect(0,0,r,Ln);for(let l of qn(t,n,r,a)){let{tier:d}=l,f=d!==void 0&&l.colors.length===1,u=f?2:l.colors.length;l.colors.forEach((m,p)=>{let h=f?d:p,g=In(h,u,a);e.fillStyle=m,e.fillRect(l.x0,g,l.x1-l.x0,In(h+1,u,a)-g)})}let c=Xn(t,n,r);if(c.left>0&&$n(e,0,1,i),c.right>0&&$n(e,r,-1,i),o){let[l,d]=We(n,o.start,o.end),f=Math.max(d-l,3),u=(l+d)/2-f/2;e.strokeStyle=i,e.lineWidth=1.5,e.strokeRect(u,.75,f,T-1.5),o.anchor&&(e.beginPath(),e.moveTo(u+f/2,T),e.lineTo(o.anchor.x,o.anchor.y),e.lineWidth=1,e.stroke())}}function Ys(e,t){return Math.abs(t-e)<=.1*Math.max(e,t)}function Ws(e,t){let n=e.length,r=t.length,o=Array.from({length:n+1},()=>new Array(r+1).fill(0)),s=Array.from({length:n+1},()=>new Array(r+1).fill(!1));for(let i=n-1;i>=0;i--)for(let c=r-1;c>=0;c--){let l=Math.abs(e[i]-t[c])+o[i+1][c+1],d=n-i>r-c?o[i+1][c]:1/0,f=r-c>n-i?o[i][c+1]:1/0;o[i][c]=Math.min(l,d,f),s[i][c]=o[i][c]===l}let a=new Array(n).fill(void 0);for(let i=0,c=0;i<n&&c<r;)s[i][c]?a[i++]=c++:n-i>r-c?i++:c++;return a}function Bn(e,t){return e.map((n,r)=>({item:n,i:r})).sort((n,r)=>t(n.item)-t(r.item))}var Fn=e=>e.spanningReads!==0;function Dn(e,t){return{...t,agrees:e.complete&&Fn(t)?Ys(e.bp,t.bp):void 0}}function Hs(e,t){let n=new Map,r=new Set;e.forEach((i,c)=>{let l=t.find(d=>d.haplotype!==void 0&&d.haplotype===i.haplotype);l&&(r.add(l),n.set(c,Dn(i,l)))});let o=t.filter(i=>i.haplotype===void 0),s=Bn(e,i=>i.bp),a=[[s.filter(i=>i.item.complete),o.filter(Fn)],[s,o]];for(let[i,c]of a){let l=i.filter(f=>!n.has(f.i)),d=Bn(c.filter(f=>!r.has(f)),f=>f.bp);Ws(l.map(f=>f.item.bp),d.map(f=>f.item.bp)).forEach((f,u)=>{if(f!==void 0){let m=l[u],p=d[f].item;r.add(p),n.set(m.i,Dn(m.item,p))}})}return n}function Cl(e,t){if(!t)return e;let n=new Map,r=new Map;for(let o of e)r.set(o.sample,[...r.get(o.sample)??[],o]);for(let[o,s]of r){let a=t[o];if(a)for(let[i,c]of Hs(s,a))n.set(s[i],c)}return e.map(o=>({...o,call:n.get(o)}))}export{ar as a,Gn as b,Un as c,Us as d,jn as e,Vn as f,qc as g,J as h,me as i,ee as j,Zn as k,Jn as l,eo as m,to as n,ie as o,Mc as p,wc as q,Ec as r,Sc as s,vc as t,$ as u,io as v,co as w,lo as x,fo as y,st as z,R as A,po as B,Y as C,ve as D,Re as E,ct as F,Me as G,xo as H,yo as I,ht as J,Eo as K,mt as L,gt as M,_e as N,So as O,vo as P,_o as Q,Et as R,pi as S,Ao as T,yi as U,bi as V,Ae as W,$o as X,Io as Y,Ti as Z,It as _,Ci as $,Lt as aa,Te as ba,Pt as ca,Xt as da,zo as ea,jo as fa,Vo as ga,Dt as ha,or as ia,lr as ja,dr as ka,ur as la,hr as ma,Ss as na,Os as oa,Tn as pa,De as qa,Cs as ra,Ye as sa,Ls as ta,Ps as ua,Ln as va,qs as wa,Xn as xa,Bs as ya,Ds as za,Fs as Aa,mc as Ba,ir as Ca,gc as Da,Cl as Ea};
2
+ //# sourceMappingURL=chunk-GB7CF6Z2.js.map