@jbrowse/bandage-core 11.0.0 → 11.1.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 (43) hide show
  1. package/dist/chunks/{chunk-BS6HPYCZ.js → chunk-77EGQQJU.js} +3 -1
  2. package/dist/chunks/chunk-7BTO7MZS.js +46 -0
  3. package/dist/chunks/{chunk-CIDSF47D.js → chunk-DEDD7TFJ.js} +12 -1
  4. package/dist/chunks/{chunk-C3NT37C3.js → chunk-DR24UTRS.js} +1 -1
  5. package/dist/chunks/{chunk-CZT33FZG.js → chunk-IVOK5V3H.js} +2 -2
  6. package/dist/chunks/{chunk-TEF3NBG3.js → chunk-IZ6Y5D23.js} +1 -1
  7. package/dist/chunks/{chunk-5LTZVKZQ.js → chunk-JFHYG25O.js} +8 -8
  8. package/dist/chunks/{chunk-PK5QQOMN.js → chunk-LMH5KVJZ.js} +1 -1
  9. package/dist/chunks/{chunk-EDWU7OM4.js → chunk-NGUM77EP.js} +2 -2
  10. package/dist/chunks/{chunk-CTZRIDMY.js → chunk-OI4YVAMM.js} +52 -5
  11. package/dist/chunks/{chunk-BIOKXS3M.js → chunk-RETNT73O.js} +1 -1
  12. package/dist/chunks/{chunk-DO62DG26.js → chunk-TABI4JEU.js} +6 -4
  13. package/dist/chunks/{chunk-EY2ZGSCP.js → chunk-V5MAL7LU.js} +1 -1
  14. package/dist/chunks/{chunk-6OP4HPXG.js → chunk-Y3FDMDNT.js} +1 -1
  15. package/dist/chunks/{chunk-OLKXMZ6J.js → chunk-YHJ5JLBI.js} +1 -1
  16. package/dist/chunks/{chunk-L5IETLWP.js → chunk-ZUL52ZX2.js} +1 -1
  17. package/dist/cli/figure.js +30 -56
  18. package/dist/figure.js +9 -9
  19. package/dist/figureData.js +10 -9
  20. package/dist/figureScene.js +5 -5
  21. package/dist/genes/backboneGenes.js +12 -0
  22. package/dist/genes/genePins.js +1 -1
  23. package/dist/index.js +20 -16
  24. package/dist/layout/tubeMapLayout.js +2 -2
  25. package/dist/layout/walkRowLayout.js +2 -2
  26. package/dist/layout/walkRows.js +1 -1
  27. package/dist/layout/walkStrip.js +3 -3
  28. package/dist/layoutModes.js +4 -4
  29. package/dist/tubeMap/bundle.js +3 -3
  30. package/dist/tubeMap/coarsen.js +3 -3
  31. package/dist/tubeMap/deviations.js +3 -3
  32. package/dist/tubeMap/draw.js +2 -2
  33. package/dist/types/figureData.d.ts +31 -2
  34. package/dist/types/genes/backboneGenes.d.ts +25 -0
  35. package/dist/types/genes/genePins.d.ts +1 -0
  36. package/dist/types/index.d.ts +3 -1
  37. package/dist/types/layout/walkRows.d.ts +6 -0
  38. package/dist/types/version.d.ts +1 -1
  39. package/dist/types/walkEncoding.d.ts +1 -0
  40. package/dist/version.js +1 -1
  41. package/dist/walkEncoding.js +1 -1
  42. package/dist/walkHighlight.js +2 -2
  43. package/package.json +1 -1
@@ -50,6 +50,7 @@ function genePins(graph, genes, positions) {
50
50
  nodeIds.add(node.id);
51
51
  covered += Math.min(nodeEnd, gene.end) - Math.max(nodeStart, gene.start);
52
52
  const nodeParts = [];
53
+ const stretches = [];
53
54
  for (const exon of gene.exons) {
54
55
  const a = Math.max(exon.start, nodeStart);
55
56
  const b = Math.min(exon.end, nodeEnd);
@@ -65,10 +66,11 @@ function genePins(graph, genes, positions) {
65
66
  stretch.push({ ...stretch[0] });
66
67
  }
67
68
  nodeParts.push(svgPath(stretch));
69
+ stretches.push(stretch);
68
70
  }
69
71
  if (nodeParts.length > 0) {
70
72
  parts.push(...nodeParts);
71
- exonsByNode.push({ nodeId: node.id, d: nodeParts.join("") });
73
+ exonsByNode.push({ nodeId: node.id, d: nodeParts.join(""), stretches });
72
74
  }
73
75
  const pinBp = Math.min(Math.max(mid, nodeStart), nodeEnd);
74
76
  const distance = Math.abs(pinBp - mid);
@@ -0,0 +1,46 @@
1
+ import {
2
+ genesFromText
3
+ } from "./chunk-G6UIYQZR.js";
4
+ import {
5
+ featuresOnBackbone,
6
+ graphBackbone,
7
+ refNameBinding
8
+ } from "./chunk-234NFZS4.js";
9
+
10
+ // src/genes/backboneGenes.ts
11
+ async function backboneGenes(graph, source) {
12
+ const backbone = graphBackbone(graph);
13
+ if (!backbone) {
14
+ return { genes: [] };
15
+ }
16
+ const bind = refNameBinding(
17
+ backbone.contigs.map((c) => c.refName),
18
+ source.refNames
19
+ );
20
+ let names;
21
+ let features;
22
+ if ("indexed" in source) {
23
+ names = await source.indexed.getReferenceSequenceNames();
24
+ const lines = [];
25
+ for (const contig of backbone.contigs) {
26
+ const name = names.find((n) => bind(n) === contig.refName);
27
+ if (name !== void 0) {
28
+ await source.indexed.getLines(name, contig.start, contig.end, {
29
+ lineCallback: (line) => lines.push(line)
30
+ });
31
+ }
32
+ }
33
+ features = genesFromText(lines.join("\n"), source.format);
34
+ } else {
35
+ features = genesFromText(source.text, source.format);
36
+ names = [...new Set(features.map((f) => f.refName))];
37
+ }
38
+ return {
39
+ genes: featuresOnBackbone(features, backbone, source.refNames),
40
+ unbound: names.some((name) => bind(name) !== void 0) ? void 0 : { names, contigs: backbone.contigs.map((c) => c.contig) }
41
+ };
42
+ }
43
+
44
+ export {
45
+ backboneGenes
46
+ };
@@ -22,6 +22,7 @@ function labelOf(path) {
22
22
  var NodeTable = class {
23
23
  constructor(graph) {
24
24
  this.index = /* @__PURE__ */ new Map();
25
+ this.ids = [];
25
26
  this.lengths = [];
26
27
  this.onReference = new Uint8Array(0);
27
28
  this.referenceStart = new Float64Array(0);
@@ -35,6 +36,7 @@ var NodeTable = class {
35
36
  if (i === void 0) {
36
37
  i = this.lengths.length;
37
38
  this.index.set(id, i);
39
+ this.ids.push(id);
38
40
  this.lengths.push(0);
39
41
  }
40
42
  return i;
@@ -224,8 +226,15 @@ function walkRows(graph, region, unit) {
224
226
  const contig = path.contig ?? panSNContig(pathOrigin(path.name).name);
225
227
  const axisSpan = stepSpan(pieces, table, from < 0 ? 0 : from);
226
228
  const axis = !axisSpan ? void 0 : from < 0 ? { contig, start: axisSpan.start, reversed: false } : from < to ? { contig, start: axisSpan.end, reversed: false } : { contig, start: axisSpan.start, reversed: true };
227
- const { lengths, onReference, referenceStart: referenceStart2, referenceEnd } = table;
229
+ const {
230
+ ids: nodeIds,
231
+ lengths,
232
+ onReference,
233
+ referenceStart: referenceStart2,
234
+ referenceEnd
235
+ } = table;
228
236
  const runs = [];
237
+ const visits = [];
229
238
  let last;
230
239
  let bp = 0;
231
240
  let offReferenceBp = 0;
@@ -252,6 +261,7 @@ function walkRows(graph, region, unit) {
252
261
  }
253
262
  const len = lengths[node];
254
263
  const on = onReference[node] === 1;
264
+ visits.push({ node: nodeIds[node], start: bp, onReference: on });
255
265
  const at = last?.referenceStart;
256
266
  const forward = on && at !== void 0 && step >= 0 && at + last.bp === referenceStart2[node];
257
267
  const backward = on && at !== void 0 && step <= 0 && referenceEnd[node] === at;
@@ -290,6 +300,7 @@ function walkRows(graph, region, unit) {
290
300
  complete,
291
301
  stop,
292
302
  runs,
303
+ visits,
293
304
  axis
294
305
  };
295
306
  };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  encodedColor,
3
3
  resolveEncoding
4
- } from "./chunk-DO62DG26.js";
4
+ } from "./chunk-TABI4JEU.js";
5
5
  import {
6
6
  pathOrigin
7
7
  } from "./chunk-B5X2RLJG.js";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  facetLifts,
6
6
  walkLift
7
- } from "./chunk-C3NT37C3.js";
7
+ } from "./chunk-DR24UTRS.js";
8
8
  import {
9
9
  walkKey
10
10
  } from "./chunk-D4ZFRBB4.js";
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-SWCULW6S.js";
15
15
  import {
16
16
  walkRowsExtent
17
- } from "./chunk-OLKXMZ6J.js";
17
+ } from "./chunk-YHJ5JLBI.js";
18
18
  import {
19
19
  pathLegend,
20
20
  walkLabelsOf
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  READOUT_ROOM,
12
12
  longestBar
13
- } from "./chunk-OLKXMZ6J.js";
13
+ } from "./chunk-YHJ5JLBI.js";
14
14
  import {
15
15
  pathOrigin
16
16
  } from "./chunk-B5X2RLJG.js";
@@ -5,7 +5,7 @@ import {
5
5
  stripGeneGaps,
6
6
  walkStripFrame,
7
7
  walkStripLabelsTree
8
- } from "./chunk-TEF3NBG3.js";
8
+ } from "./chunk-IZ6Y5D23.js";
9
9
  import {
10
10
  walkRowsKey,
11
11
  walkRowsKeyTree,
@@ -19,9 +19,6 @@ import {
19
19
  exonOutlineTree,
20
20
  exonStretches
21
21
  } from "./chunk-JSUCGZ6K.js";
22
- import {
23
- genePins
24
- } from "./chunk-BS6HPYCZ.js";
25
22
  import {
26
23
  geneLabelCandidates
27
24
  } from "./chunk-PSCSZSVK.js";
@@ -32,24 +29,27 @@ import {
32
29
  escapeAttr,
33
30
  serializeEl
34
31
  } from "./chunk-H2H4Y3TV.js";
32
+ import {
33
+ genePins
34
+ } from "./chunk-77EGQQJU.js";
35
35
  import {
36
36
  version
37
- } from "./chunk-6OP4HPXG.js";
37
+ } from "./chunk-Y3FDMDNT.js";
38
38
  import {
39
39
  axisScaleOf
40
40
  } from "./chunk-AI5PTOSV.js";
41
41
  import {
42
42
  figureScene
43
- } from "./chunk-CZT33FZG.js";
43
+ } from "./chunk-IVOK5V3H.js";
44
44
  import {
45
45
  encodingStops
46
- } from "./chunk-DO62DG26.js";
46
+ } from "./chunk-TABI4JEU.js";
47
47
  import {
48
48
  rangeText
49
49
  } from "./chunk-D4ZFRBB4.js";
50
50
  import {
51
51
  walkRowLabels
52
- } from "./chunk-OLKXMZ6J.js";
52
+ } from "./chunk-YHJ5JLBI.js";
53
53
  import {
54
54
  nodeInk
55
55
  } from "./chunk-CRCD3ODN.js";
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-A7H753BA.js";
6
6
  import {
7
7
  referenceWalkName
8
- } from "./chunk-CIDSF47D.js";
8
+ } from "./chunk-DEDD7TFJ.js";
9
9
  import {
10
10
  pathCssColor,
11
11
  pathGreyCssColor
@@ -3,7 +3,7 @@ import {
3
3
  hasTubeMapPaths,
4
4
  tubeMapLayout,
5
5
  tubeMapReferenceLayout
6
- } from "./chunk-PK5QQOMN.js";
6
+ } from "./chunk-LMH5KVJZ.js";
7
7
  import {
8
8
  sampleRowLayout
9
9
  } from "./chunk-GJU6BJJA.js";
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-UAFATXYA.js";
16
16
  import {
17
17
  walkRowLayout
18
- } from "./chunk-OLKXMZ6J.js";
18
+ } from "./chunk-YHJ5JLBI.js";
19
19
  import {
20
20
  isBackbone,
21
21
  isOffReference
@@ -3,19 +3,25 @@ import {
3
3
  } from "./chunk-JMABOQWL.js";
4
4
  import {
5
5
  layoutModeByValue
6
- } from "./chunk-EDWU7OM4.js";
6
+ } from "./chunk-NGUM77EP.js";
7
7
  import {
8
8
  parseRegion
9
9
  } from "./chunk-TUQKGAK3.js";
10
+ import {
11
+ genePins
12
+ } from "./chunk-77EGQQJU.js";
10
13
  import {
11
14
  version
12
- } from "./chunk-6OP4HPXG.js";
15
+ } from "./chunk-Y3FDMDNT.js";
13
16
  import {
14
17
  axisScaleOf
15
18
  } from "./chunk-AI5PTOSV.js";
16
19
  import {
17
20
  figureScene
18
- } from "./chunk-CZT33FZG.js";
21
+ } from "./chunk-IVOK5V3H.js";
22
+ import {
23
+ encodingStops
24
+ } from "./chunk-TABI4JEU.js";
19
25
  import {
20
26
  abgrAlpha,
21
27
  abgrBlue,
@@ -76,21 +82,58 @@ function figureData(graph, layout, o = {}) {
76
82
  }
77
83
  const axis = axisScaleOf(fit.scale, pixelRows);
78
84
  const panels = [];
85
+ const keys = columns(["panel", "walk", "note", "scale", "stops"]);
86
+ const pushKey = (walk, panel) => {
87
+ const key = keyText(walk);
88
+ keys.push({
89
+ panel,
90
+ walk: labelOf(walk.name),
91
+ note: key.note,
92
+ scale: key.scale ?? "",
93
+ stops: encodingStops(walk.encoding).map((s) => cssHex(s.abgr)).join(",")
94
+ });
95
+ return key;
96
+ };
79
97
  if (facets) {
80
98
  const ordered = facets.panels.map((panel, i) => ({ panel, cell: facets.place.cells[i] })).sort((a, b) => a.cell - b.cell);
81
99
  for (const { panel } of ordered) {
82
100
  const walk = panel.walks[0];
83
- const key = keyText(walk);
101
+ const name = labelOf(walk.name);
102
+ const key = pushKey(walk, name);
84
103
  panels.push({
85
104
  highlight: panel,
86
- name: labelOf(walk.name),
105
+ name,
87
106
  key: key.note,
88
107
  range: key.scale ?? ""
89
108
  });
90
109
  }
91
110
  } else {
111
+ for (const walk of lift?.walks ?? []) {
112
+ pushKey(walk, "");
113
+ }
92
114
  panels.push({ highlight: lift, name: "", key: "", range: "" });
93
115
  }
116
+ const pins = columns(["gene", "x", "y", "covered", "bp"]);
117
+ const exons = columns(["gene", "node", "stretch", "x", "y"]);
118
+ let stretch = 0;
119
+ for (const pin of o.genes?.length ? genePins(graph, o.genes, layout.nodePositions) : []) {
120
+ const gene = pin.gene.name;
121
+ pins.push({
122
+ gene,
123
+ x: pin.at.x,
124
+ y: pin.at.y,
125
+ covered: pin.covered,
126
+ bp: pin.gene.end - pin.gene.start
127
+ });
128
+ for (const { nodeId, stretches } of pin.exonsByNode) {
129
+ for (const points of stretches) {
130
+ stretch++;
131
+ for (const { x, y } of points) {
132
+ exons.push({ gene, node: nodeId, stretch, x, y });
133
+ }
134
+ }
135
+ }
136
+ }
94
137
  const nodes = columns([
95
138
  "panel",
96
139
  "node",
@@ -198,6 +241,10 @@ function figureData(graph, layout, o = {}) {
198
241
  key: panels.map((p) => p.key),
199
242
  range: panels.map((p) => p.range)
200
243
  },
244
+ keys: keys.out,
245
+ pins: pins.out,
246
+ exons: exons.out,
247
+ walkNames: [...new Set((graph.paths ?? []).map((p) => p.name))],
201
248
  nodes: nodes.out,
202
249
  edges: edges.out,
203
250
  arrows: arrows.out,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  pathSteps
3
- } from "./chunk-PK5QQOMN.js";
3
+ } from "./chunk-LMH5KVJZ.js";
4
4
  import {
5
5
  pathOrigin
6
6
  } from "./chunk-B5X2RLJG.js";
@@ -88,10 +88,12 @@ function encodedColor({ field, scheme }, t) {
88
88
  }
89
89
  var NO_VALUE_COLOR = REFERENCE_RAMP_ALT_COLOR;
90
90
  function encodingStops({ field, scheme }) {
91
- return field === "walk" ? [{ offset: 0, color: schemeCss(scheme, BASE_T) }] : Array.from({ length: 7 }, (_, i) => ({
92
- offset: i / 6,
93
- color: schemeCss(scheme, i / 6)
94
- }));
91
+ const stop = (offset, t) => ({
92
+ offset,
93
+ color: schemeCss(scheme, t),
94
+ abgr: schemeColor(scheme, t)
95
+ });
96
+ return field === "walk" ? [stop(0, BASE_T)] : Array.from({ length: 7 }, (_, i) => stop(i / 6, i / 6));
95
97
  }
96
98
  function encodingSwatchCss(encoding) {
97
99
  const stops = encodingStops(encoding);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  pathSteps
3
- } from "./chunk-PK5QQOMN.js";
3
+ } from "./chunk-LMH5KVJZ.js";
4
4
  import {
5
5
  pathOrigin
6
6
  } from "./chunk-B5X2RLJG.js";
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var version = "11.0.0";
2
+ var version = "11.1.0";
3
3
 
4
4
  export {
5
5
  version
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  walkRows
3
- } from "./chunk-CIDSF47D.js";
3
+ } from "./chunk-DEDD7TFJ.js";
4
4
  import {
5
5
  ROW_HEIGHT_PX
6
6
  } from "./chunk-CPMHA4W5.js";
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-A7H753BA.js";
10
10
  import {
11
11
  referenceWalkName
12
- } from "./chunk-CIDSF47D.js";
12
+ } from "./chunk-DEDD7TFJ.js";
13
13
  import {
14
14
  pathOrigin
15
15
  } from "./chunk-B5X2RLJG.js";
@@ -3,13 +3,14 @@ import {
3
3
  decodeText
4
4
  } from "../chunks/chunk-O4EGE27I.js";
5
5
  import {
6
- genesFromText
7
- } from "../chunks/chunk-G6UIYQZR.js";
6
+ backboneGenes
7
+ } from "../chunks/chunk-7BTO7MZS.js";
8
+ import "../chunks/chunk-G6UIYQZR.js";
8
9
  import {
9
10
  figureSvg
10
- } from "../chunks/chunk-5LTZVKZQ.js";
11
+ } from "../chunks/chunk-JFHYG25O.js";
11
12
  import "../chunks/chunk-V4YML3GR.js";
12
- import "../chunks/chunk-TEF3NBG3.js";
13
+ import "../chunks/chunk-IZ6Y5D23.js";
13
14
  import {
14
15
  genesOnRow,
15
16
  placeRowGenes
@@ -17,7 +18,6 @@ import {
17
18
  import "../chunks/chunk-EJRJAAN7.js";
18
19
  import "../chunks/chunk-RBCE2OQH.js";
19
20
  import "../chunks/chunk-JSUCGZ6K.js";
20
- import "../chunks/chunk-BS6HPYCZ.js";
21
21
  import "../chunks/chunk-PSCSZSVK.js";
22
22
  import "../chunks/chunk-OMUPUB4J.js";
23
23
  import "../chunks/chunk-3VCKBSML.js";
@@ -25,15 +25,15 @@ import "../chunks/chunk-H2H4Y3TV.js";
25
25
  import {
26
26
  laidOutGraph,
27
27
  walkLayers
28
- } from "../chunks/chunk-CTZRIDMY.js";
28
+ } from "../chunks/chunk-OI4YVAMM.js";
29
29
  import {
30
30
  LAYOUT_ENGINE_VALUES,
31
31
  isLayoutEngineKind
32
32
  } from "../chunks/chunk-JMABOQWL.js";
33
33
  import {
34
34
  LAYOUT_MODES
35
- } from "../chunks/chunk-EDWU7OM4.js";
36
- import "../chunks/chunk-PK5QQOMN.js";
35
+ } from "../chunks/chunk-NGUM77EP.js";
36
+ import "../chunks/chunk-LMH5KVJZ.js";
37
37
  import "../chunks/chunk-A7H753BA.js";
38
38
  import "../chunks/chunk-GJU6BJJA.js";
39
39
  import "../chunks/chunk-GJLZ2MKE.js";
@@ -50,22 +50,23 @@ import {
50
50
  } from "../chunks/chunk-TUQKGAK3.js";
51
51
  import "../chunks/chunk-NMWQUFPF.js";
52
52
  import "../chunks/chunk-HNWJ4B7S.js";
53
- import "../chunks/chunk-6OP4HPXG.js";
53
+ import "../chunks/chunk-77EGQQJU.js";
54
+ import "../chunks/chunk-Y3FDMDNT.js";
54
55
  import "../chunks/chunk-AI5PTOSV.js";
55
- import "../chunks/chunk-CZT33FZG.js";
56
+ import "../chunks/chunk-IVOK5V3H.js";
56
57
  import "../chunks/chunk-LOCJN3BZ.js";
57
- import "../chunks/chunk-C3NT37C3.js";
58
- import "../chunks/chunk-DO62DG26.js";
58
+ import "../chunks/chunk-DR24UTRS.js";
59
+ import "../chunks/chunk-TABI4JEU.js";
59
60
  import "../chunks/chunk-D4ZFRBB4.js";
60
61
  import "../chunks/chunk-SWCULW6S.js";
61
62
  import "../chunks/chunk-G2FD7S3C.js";
62
63
  import "../chunks/chunk-GQZVR5DW.js";
63
64
  import "../chunks/chunk-WA5WNP6V.js";
64
- import "../chunks/chunk-OLKXMZ6J.js";
65
+ import "../chunks/chunk-YHJ5JLBI.js";
65
66
  import {
66
67
  filterSamples,
67
68
  walkRows
68
- } from "../chunks/chunk-CIDSF47D.js";
69
+ } from "../chunks/chunk-DEDD7TFJ.js";
69
70
  import "../chunks/chunk-3GP3KT5L.js";
70
71
  import "../chunks/chunk-CRCD3ODN.js";
71
72
  import "../chunks/chunk-W6EXQDV5.js";
@@ -80,11 +81,7 @@ import "../chunks/chunk-5I3K4R2G.js";
80
81
  import "../chunks/chunk-3XSRT7RQ.js";
81
82
  import "../chunks/chunk-B5X2RLJG.js";
82
83
  import "../chunks/chunk-VX656OAZ.js";
83
- import {
84
- featuresOnBackbone,
85
- graphBackbone,
86
- refNameBinding
87
- } from "../chunks/chunk-234NFZS4.js";
84
+ import "../chunks/chunk-234NFZS4.js";
88
85
  import "../chunks/chunk-DZR37KXT.js";
89
86
  import "../chunks/chunk-EIY2SKD3.js";
90
87
  import "../chunks/chunk-ZPZ7GNBT.js";
@@ -142,51 +139,28 @@ async function text(location) {
142
139
  return decodeText(bytes);
143
140
  }
144
141
  async function readGenes(genes, graph, resolve) {
145
- const backbone = graphBackbone(graph);
146
- if (!backbone) {
147
- return [];
148
- }
149
- const bind = refNameBinding(
150
- backbone.contigs.map((c) => c.refName),
151
- genes.refNames
152
- );
153
- const { names, features } = genes.index ? await indexedGenes(
154
- resolve(genes.file),
155
- resolve(genes.index),
156
- genes.format ?? (/\.bed(\.gz)?$/i.test(genes.file) ? "bed" : "gff3"),
157
- backbone.contigs,
158
- bind
159
- ) : namedBy(genesFromText(await text(resolve(genes.file)), genes.format));
160
- if (!names.some((name) => bind(name) !== void 0)) {
142
+ const file = resolve(genes.file);
143
+ const read = await backboneGenes(graph, {
144
+ ...genes.index ? {
145
+ indexed: tabixFile(file, resolve(genes.index)),
146
+ format: genes.format ?? (/\.bed(\.gz)?$/i.test(genes.file) ? "bed" : "gff3")
147
+ } : { text: await text(file), format: genes.format },
148
+ refNames: genes.refNames
149
+ });
150
+ if (read.unbound) {
151
+ const { names, contigs } = read.unbound;
161
152
  const shown = names.slice(0, 4).join(", ");
162
153
  console.warn(
163
- `bandage-figure: no sequence in ${genes.file} names ${backbone.contigs.map((c) => c.contig).join(", ")}` + (names.length ? `; it has ${shown}${names.length > 4 ? ", \u2026" : ""}` : "") + `. Give the file's name under genes.refNames, as { "chr6": "NC_000006.12" }`
154
+ `bandage-figure: no sequence in ${genes.file} names ${contigs.join(", ")}` + (names.length ? `; it has ${shown}${names.length > 4 ? ", \u2026" : ""}` : "") + `. Give the file's name under genes.refNames, as { "chr6": "NC_000006.12" }`
164
155
  );
165
156
  }
166
- return featuresOnBackbone(features, backbone, genes.refNames);
167
- }
168
- function namedBy(features) {
169
- return { names: [...new Set(features.map((f) => f.refName))], features };
157
+ return read.genes;
170
158
  }
171
- async function indexedGenes(file, index, format, contigs, bind) {
159
+ function tabixFile(file, index) {
172
160
  const csi = index.endsWith(".csi");
173
- const tabix = new TabixIndexedFile(
161
+ return new TabixIndexedFile(
174
162
  isUrl(file) ? { url: file, ...csi ? { csiUrl: index } : { tbiUrl: index } } : { path: file, ...csi ? { csiPath: index } : { tbiPath: index } }
175
163
  );
176
- const names = await tabix.getReferenceSequenceNames();
177
- const lines = [];
178
- for (const contig of contigs) {
179
- const name = names.find((n) => bind(n) === contig.refName);
180
- if (name !== void 0) {
181
- await tabix.getLines(name, contig.start, contig.end, {
182
- lineCallback: (line) => lines.push(line)
183
- });
184
- }
185
- }
186
- return {
187
- names,
188
- features: genesFromText(lines.join("\n"), format)
189
- };
190
164
  }
191
165
  async function exists(location) {
192
166
  try {
package/dist/figure.js CHANGED
@@ -1,30 +1,30 @@
1
1
  import {
2
2
  figureSvg
3
- } from "./chunks/chunk-5LTZVKZQ.js";
3
+ } from "./chunks/chunk-JFHYG25O.js";
4
4
  import "./chunks/chunk-V4YML3GR.js";
5
- import "./chunks/chunk-TEF3NBG3.js";
5
+ import "./chunks/chunk-IZ6Y5D23.js";
6
6
  import "./chunks/chunk-XZ6PQBU6.js";
7
7
  import "./chunks/chunk-EJRJAAN7.js";
8
8
  import "./chunks/chunk-RBCE2OQH.js";
9
9
  import "./chunks/chunk-JSUCGZ6K.js";
10
- import "./chunks/chunk-BS6HPYCZ.js";
11
10
  import "./chunks/chunk-PSCSZSVK.js";
12
11
  import "./chunks/chunk-OMUPUB4J.js";
13
12
  import "./chunks/chunk-3VCKBSML.js";
14
13
  import "./chunks/chunk-H2H4Y3TV.js";
15
- import "./chunks/chunk-6OP4HPXG.js";
14
+ import "./chunks/chunk-77EGQQJU.js";
15
+ import "./chunks/chunk-Y3FDMDNT.js";
16
16
  import "./chunks/chunk-AI5PTOSV.js";
17
- import "./chunks/chunk-CZT33FZG.js";
17
+ import "./chunks/chunk-IVOK5V3H.js";
18
18
  import "./chunks/chunk-LOCJN3BZ.js";
19
- import "./chunks/chunk-C3NT37C3.js";
20
- import "./chunks/chunk-DO62DG26.js";
19
+ import "./chunks/chunk-DR24UTRS.js";
20
+ import "./chunks/chunk-TABI4JEU.js";
21
21
  import "./chunks/chunk-D4ZFRBB4.js";
22
22
  import "./chunks/chunk-SWCULW6S.js";
23
23
  import "./chunks/chunk-G2FD7S3C.js";
24
24
  import "./chunks/chunk-GQZVR5DW.js";
25
25
  import "./chunks/chunk-WA5WNP6V.js";
26
- import "./chunks/chunk-OLKXMZ6J.js";
27
- import "./chunks/chunk-CIDSF47D.js";
26
+ import "./chunks/chunk-YHJ5JLBI.js";
27
+ import "./chunks/chunk-DEDD7TFJ.js";
28
28
  import "./chunks/chunk-3GP3KT5L.js";
29
29
  import "./chunks/chunk-CRCD3ODN.js";
30
30
  import "./chunks/chunk-W6EXQDV5.js";
@@ -3,10 +3,10 @@ import {
3
3
  gfaFigureData,
4
4
  laidOutGraph,
5
5
  walkLayers
6
- } from "./chunks/chunk-CTZRIDMY.js";
6
+ } from "./chunks/chunk-OI4YVAMM.js";
7
7
  import "./chunks/chunk-JMABOQWL.js";
8
- import "./chunks/chunk-EDWU7OM4.js";
9
- import "./chunks/chunk-PK5QQOMN.js";
8
+ import "./chunks/chunk-NGUM77EP.js";
9
+ import "./chunks/chunk-LMH5KVJZ.js";
10
10
  import "./chunks/chunk-A7H753BA.js";
11
11
  import "./chunks/chunk-GJU6BJJA.js";
12
12
  import "./chunks/chunk-GJLZ2MKE.js";
@@ -17,19 +17,20 @@ import "./chunks/chunk-3GLG3ZLE.js";
17
17
  import "./chunks/chunk-TUQKGAK3.js";
18
18
  import "./chunks/chunk-NMWQUFPF.js";
19
19
  import "./chunks/chunk-HNWJ4B7S.js";
20
- import "./chunks/chunk-6OP4HPXG.js";
20
+ import "./chunks/chunk-77EGQQJU.js";
21
+ import "./chunks/chunk-Y3FDMDNT.js";
21
22
  import "./chunks/chunk-AI5PTOSV.js";
22
- import "./chunks/chunk-CZT33FZG.js";
23
+ import "./chunks/chunk-IVOK5V3H.js";
23
24
  import "./chunks/chunk-LOCJN3BZ.js";
24
- import "./chunks/chunk-C3NT37C3.js";
25
- import "./chunks/chunk-DO62DG26.js";
25
+ import "./chunks/chunk-DR24UTRS.js";
26
+ import "./chunks/chunk-TABI4JEU.js";
26
27
  import "./chunks/chunk-D4ZFRBB4.js";
27
28
  import "./chunks/chunk-SWCULW6S.js";
28
29
  import "./chunks/chunk-G2FD7S3C.js";
29
30
  import "./chunks/chunk-GQZVR5DW.js";
30
31
  import "./chunks/chunk-WA5WNP6V.js";
31
- import "./chunks/chunk-OLKXMZ6J.js";
32
- import "./chunks/chunk-CIDSF47D.js";
32
+ import "./chunks/chunk-YHJ5JLBI.js";
33
+ import "./chunks/chunk-DEDD7TFJ.js";
33
34
  import "./chunks/chunk-3GP3KT5L.js";
34
35
  import "./chunks/chunk-CRCD3ODN.js";
35
36
  import "./chunks/chunk-W6EXQDV5.js";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  figureScene
3
- } from "./chunks/chunk-CZT33FZG.js";
3
+ } from "./chunks/chunk-IVOK5V3H.js";
4
4
  import "./chunks/chunk-LOCJN3BZ.js";
5
- import "./chunks/chunk-C3NT37C3.js";
6
- import "./chunks/chunk-DO62DG26.js";
5
+ import "./chunks/chunk-DR24UTRS.js";
6
+ import "./chunks/chunk-TABI4JEU.js";
7
7
  import "./chunks/chunk-D4ZFRBB4.js";
8
8
  import "./chunks/chunk-SWCULW6S.js";
9
9
  import "./chunks/chunk-G2FD7S3C.js";
10
10
  import "./chunks/chunk-GQZVR5DW.js";
11
11
  import "./chunks/chunk-WA5WNP6V.js";
12
- import "./chunks/chunk-OLKXMZ6J.js";
13
- import "./chunks/chunk-CIDSF47D.js";
12
+ import "./chunks/chunk-YHJ5JLBI.js";
13
+ import "./chunks/chunk-DEDD7TFJ.js";
14
14
  import "./chunks/chunk-3GP3KT5L.js";
15
15
  import "./chunks/chunk-CRCD3ODN.js";
16
16
  import "./chunks/chunk-W6EXQDV5.js";
@@ -0,0 +1,12 @@
1
+ import {
2
+ backboneGenes
3
+ } from "../chunks/chunk-7BTO7MZS.js";
4
+ import "../chunks/chunk-G6UIYQZR.js";
5
+ import "../chunks/chunk-234NFZS4.js";
6
+ import "../chunks/chunk-BSOZW3FC.js";
7
+ import "../chunks/chunk-RJWPJCIB.js";
8
+ import "../chunks/chunk-HOAIOEI7.js";
9
+ import "../chunks/chunk-4XWZNPQ2.js";
10
+ export {
11
+ backboneGenes
12
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  genePins
3
- } from "../chunks/chunk-BS6HPYCZ.js";
3
+ } from "../chunks/chunk-77EGQQJU.js";
4
4
  import "../chunks/chunk-BZFOFC4D.js";
5
5
  import "../chunks/chunk-UBQSRCWR.js";
6
6
  import "../chunks/chunk-CPMHA4W5.js";
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  tubeMapMismatchAt,
14
14
  tubeMapPicture,
15
15
  tubeMapTrackAt
16
- } from "./chunks/chunk-L5IETLWP.js";
16
+ } from "./chunks/chunk-ZUL52ZX2.js";
17
17
  import {
18
18
  tubeMapFrame,
19
19
  tubeMapNodeAt
@@ -38,7 +38,7 @@ import {
38
38
  } from "./chunks/chunk-HSVFCA2J.js";
39
39
  import {
40
40
  bundleRoutes
41
- } from "./chunks/chunk-BIOKXS3M.js";
41
+ } from "./chunks/chunk-RETNT73O.js";
42
42
  import {
43
43
  createForceLayoutCache
44
44
  } from "./chunks/chunk-RNYPCQZ3.js";
@@ -52,6 +52,9 @@ import {
52
52
  import {
53
53
  bubbleSubgraph
54
54
  } from "./chunks/chunk-PNMJFFNB.js";
55
+ import {
56
+ backboneGenes
57
+ } from "./chunks/chunk-7BTO7MZS.js";
55
58
  import {
56
59
  genesFromBed,
57
60
  genesFromGff3Lines,
@@ -83,7 +86,7 @@ import {
83
86
  } from "./chunks/chunk-AZFVORTC.js";
84
87
  import {
85
88
  figureSvg
86
- } from "./chunks/chunk-5LTZVKZQ.js";
89
+ } from "./chunks/chunk-JFHYG25O.js";
87
90
  import {
88
91
  svgCanvas
89
92
  } from "./chunks/chunk-V4YML3GR.js";
@@ -98,7 +101,7 @@ import {
98
101
  walkStripApplies,
99
102
  walkStripFrame,
100
103
  walkStripLabelsTree
101
- } from "./chunks/chunk-TEF3NBG3.js";
104
+ } from "./chunks/chunk-IZ6Y5D23.js";
102
105
  import {
103
106
  BAR_PX,
104
107
  CALL_TICK,
@@ -138,9 +141,6 @@ import {
138
141
  exonOutlineTree,
139
142
  exonStretches
140
143
  } from "./chunks/chunk-JSUCGZ6K.js";
141
- import {
142
- genePins
143
- } from "./chunks/chunk-BS6HPYCZ.js";
144
144
  import {
145
145
  HALO_FACTOR,
146
146
  LEGEND_INSET_PX,
@@ -159,7 +159,7 @@ import {
159
159
  import {
160
160
  figureData,
161
161
  gfaFigureData
162
- } from "./chunks/chunk-CTZRIDMY.js";
162
+ } from "./chunks/chunk-OI4YVAMM.js";
163
163
  import {
164
164
  LAYOUT_ENGINES,
165
165
  layoutEngine
@@ -169,8 +169,8 @@ import {
169
169
  LAYOUT_MODES,
170
170
  layoutModeByValue,
171
171
  modeUsesLayoutEngine
172
- } from "./chunks/chunk-EDWU7OM4.js";
173
- import "./chunks/chunk-PK5QQOMN.js";
172
+ } from "./chunks/chunk-NGUM77EP.js";
173
+ import "./chunks/chunk-LMH5KVJZ.js";
174
174
  import "./chunks/chunk-A7H753BA.js";
175
175
  import "./chunks/chunk-GJU6BJJA.js";
176
176
  import "./chunks/chunk-GJLZ2MKE.js";
@@ -194,9 +194,12 @@ import {
194
194
  resolveReferenceSample
195
195
  } from "./chunks/chunk-NMWQUFPF.js";
196
196
  import "./chunks/chunk-HNWJ4B7S.js";
197
+ import {
198
+ genePins
199
+ } from "./chunks/chunk-77EGQQJU.js";
197
200
  import {
198
201
  version
199
- } from "./chunks/chunk-6OP4HPXG.js";
202
+ } from "./chunks/chunk-Y3FDMDNT.js";
200
203
  import {
201
204
  axisScaleOf,
202
205
  contains,
@@ -205,7 +208,7 @@ import {
205
208
  viewportOf,
206
209
  zoomAbout
207
210
  } from "./chunks/chunk-AI5PTOSV.js";
208
- import "./chunks/chunk-CZT33FZG.js";
211
+ import "./chunks/chunk-IVOK5V3H.js";
209
212
  import {
210
213
  layoutGeometryInputs
211
214
  } from "./chunks/chunk-LOCJN3BZ.js";
@@ -213,7 +216,7 @@ import {
213
216
  facetLifts,
214
217
  walkHighlight,
215
218
  walkLift
216
- } from "./chunks/chunk-C3NT37C3.js";
219
+ } from "./chunks/chunk-DR24UTRS.js";
217
220
  import {
218
221
  WALK_FIELDS,
219
222
  WALK_SCHEMES,
@@ -221,7 +224,7 @@ import {
221
224
  encodingSwatchCss,
222
225
  resolveEncoding,
223
226
  schemeCss
224
- } from "./chunks/chunk-DO62DG26.js";
227
+ } from "./chunks/chunk-TABI4JEU.js";
225
228
  import {
226
229
  rangeText,
227
230
  walkKey,
@@ -243,11 +246,11 @@ import "./chunks/chunk-WA5WNP6V.js";
243
246
  import {
244
247
  walkRowLabels,
245
248
  walkRowsExtent
246
- } from "./chunks/chunk-OLKXMZ6J.js";
249
+ } from "./chunks/chunk-YHJ5JLBI.js";
247
250
  import {
248
251
  filterSamples,
249
252
  walkRows
250
- } from "./chunks/chunk-CIDSF47D.js";
253
+ } from "./chunks/chunk-DEDD7TFJ.js";
251
254
  import {
252
255
  pathColorsLegible,
253
256
  pathLegend,
@@ -416,6 +419,7 @@ export {
416
419
  assemblyWalk,
417
420
  axisScaleOf,
418
421
  backboneAssembly,
422
+ backboneGenes,
419
423
  bubbleHalos,
420
424
  bubbleSegmentIds,
421
425
  bubbleSubgraph,
@@ -5,10 +5,10 @@ import {
5
5
  tubeMapLayout,
6
6
  tubeMapReferenceLayout,
7
7
  tubeMapTracks
8
- } from "../chunks/chunk-PK5QQOMN.js";
8
+ } from "../chunks/chunk-LMH5KVJZ.js";
9
9
  import "../chunks/chunk-A7H753BA.js";
10
10
  import "../chunks/chunk-C44YRP5F.js";
11
- import "../chunks/chunk-CIDSF47D.js";
11
+ import "../chunks/chunk-DEDD7TFJ.js";
12
12
  import "../chunks/chunk-3GP3KT5L.js";
13
13
  import "../chunks/chunk-B5X2RLJG.js";
14
14
  import "../chunks/chunk-EIY2SKD3.js";
@@ -4,8 +4,8 @@ import {
4
4
  walkRowLabels,
5
5
  walkRowLayout,
6
6
  walkRowsExtent
7
- } from "../chunks/chunk-OLKXMZ6J.js";
8
- import "../chunks/chunk-CIDSF47D.js";
7
+ } from "../chunks/chunk-YHJ5JLBI.js";
8
+ import "../chunks/chunk-DEDD7TFJ.js";
9
9
  import "../chunks/chunk-B5X2RLJG.js";
10
10
  import "../chunks/chunk-EIY2SKD3.js";
11
11
  import "../chunks/chunk-ZPZ7GNBT.js";
@@ -2,7 +2,7 @@ import {
2
2
  filterSamples,
3
3
  referenceWalkName,
4
4
  walkRows
5
- } from "../chunks/chunk-CIDSF47D.js";
5
+ } from "../chunks/chunk-DEDD7TFJ.js";
6
6
  import "../chunks/chunk-B5X2RLJG.js";
7
7
  import "../chunks/chunk-EIY2SKD3.js";
8
8
  import "../chunks/chunk-ZPZ7GNBT.js";
@@ -9,7 +9,7 @@ import {
9
9
  walkStripApplies,
10
10
  walkStripFrame,
11
11
  walkStripLabelsTree
12
- } from "../chunks/chunk-TEF3NBG3.js";
12
+ } from "../chunks/chunk-IZ6Y5D23.js";
13
13
  import {
14
14
  LABELLED_ROW_PX
15
15
  } from "../chunks/chunk-XZ6PQBU6.js";
@@ -18,8 +18,8 @@ import "../chunks/chunk-SWCULW6S.js";
18
18
  import "../chunks/chunk-G2FD7S3C.js";
19
19
  import "../chunks/chunk-GQZVR5DW.js";
20
20
  import "../chunks/chunk-WA5WNP6V.js";
21
- import "../chunks/chunk-OLKXMZ6J.js";
22
- import "../chunks/chunk-CIDSF47D.js";
21
+ import "../chunks/chunk-YHJ5JLBI.js";
22
+ import "../chunks/chunk-DEDD7TFJ.js";
23
23
  import "../chunks/chunk-3GP3KT5L.js";
24
24
  import "../chunks/chunk-CRCD3ODN.js";
25
25
  import "../chunks/chunk-B5X2RLJG.js";
@@ -4,8 +4,8 @@ import {
4
4
  LAYOUT_MODE_VALUES,
5
5
  layoutModeByValue,
6
6
  modeUsesLayoutEngine
7
- } from "./chunks/chunk-EDWU7OM4.js";
8
- import "./chunks/chunk-PK5QQOMN.js";
7
+ } from "./chunks/chunk-NGUM77EP.js";
8
+ import "./chunks/chunk-LMH5KVJZ.js";
9
9
  import "./chunks/chunk-A7H753BA.js";
10
10
  import "./chunks/chunk-GJU6BJJA.js";
11
11
  import "./chunks/chunk-GJLZ2MKE.js";
@@ -13,8 +13,8 @@ import "./chunks/chunk-MYLAJDKB.js";
13
13
  import "./chunks/chunk-C44YRP5F.js";
14
14
  import "./chunks/chunk-UAFATXYA.js";
15
15
  import "./chunks/chunk-3GLG3ZLE.js";
16
- import "./chunks/chunk-OLKXMZ6J.js";
17
- import "./chunks/chunk-CIDSF47D.js";
16
+ import "./chunks/chunk-YHJ5JLBI.js";
17
+ import "./chunks/chunk-DEDD7TFJ.js";
18
18
  import "./chunks/chunk-3GP3KT5L.js";
19
19
  import "./chunks/chunk-B5X2RLJG.js";
20
20
  import "./chunks/chunk-VX656OAZ.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  bundleRoutes
3
- } from "../chunks/chunk-BIOKXS3M.js";
4
- import "../chunks/chunk-PK5QQOMN.js";
3
+ } from "../chunks/chunk-RETNT73O.js";
4
+ import "../chunks/chunk-LMH5KVJZ.js";
5
5
  import "../chunks/chunk-A7H753BA.js";
6
6
  import "../chunks/chunk-C44YRP5F.js";
7
- import "../chunks/chunk-CIDSF47D.js";
7
+ import "../chunks/chunk-DEDD7TFJ.js";
8
8
  import "../chunks/chunk-3GP3KT5L.js";
9
9
  import "../chunks/chunk-B5X2RLJG.js";
10
10
  import "../chunks/chunk-EIY2SKD3.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  coarsenTubeMap,
3
3
  lastAtMost
4
- } from "../chunks/chunk-EY2ZGSCP.js";
5
- import "../chunks/chunk-PK5QQOMN.js";
4
+ } from "../chunks/chunk-V5MAL7LU.js";
5
+ import "../chunks/chunk-LMH5KVJZ.js";
6
6
  import "../chunks/chunk-A7H753BA.js";
7
7
  import "../chunks/chunk-C44YRP5F.js";
8
- import "../chunks/chunk-CIDSF47D.js";
8
+ import "../chunks/chunk-DEDD7TFJ.js";
9
9
  import "../chunks/chunk-3GP3KT5L.js";
10
10
  import "../chunks/chunk-B5X2RLJG.js";
11
11
  import "../chunks/chunk-EIY2SKD3.js";
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  lastAtMost
3
- } from "../chunks/chunk-EY2ZGSCP.js";
3
+ } from "../chunks/chunk-V5MAL7LU.js";
4
4
  import {
5
5
  boxX,
6
6
  referenceBoxes
7
7
  } from "../chunks/chunk-HSVFCA2J.js";
8
- import "../chunks/chunk-PK5QQOMN.js";
8
+ import "../chunks/chunk-LMH5KVJZ.js";
9
9
  import "../chunks/chunk-A7H753BA.js";
10
10
  import "../chunks/chunk-C44YRP5F.js";
11
- import "../chunks/chunk-CIDSF47D.js";
11
+ import "../chunks/chunk-DEDD7TFJ.js";
12
12
  import "../chunks/chunk-3GP3KT5L.js";
13
13
  import {
14
14
  pathOrigin
@@ -8,12 +8,12 @@ import {
8
8
  tubeMapMismatchAt,
9
9
  tubeMapPicture,
10
10
  tubeMapTrackAt
11
- } from "../chunks/chunk-L5IETLWP.js";
11
+ } from "../chunks/chunk-ZUL52ZX2.js";
12
12
  import "../chunks/chunk-MYDHU2UV.js";
13
13
  import "../chunks/chunk-BX4AUMZE.js";
14
14
  import "../chunks/chunk-A7H753BA.js";
15
15
  import "../chunks/chunk-C44YRP5F.js";
16
- import "../chunks/chunk-CIDSF47D.js";
16
+ import "../chunks/chunk-DEDD7TFJ.js";
17
17
  import "../chunks/chunk-B5X2RLJG.js";
18
18
  import "../chunks/chunk-EIY2SKD3.js";
19
19
  import "../chunks/chunk-ZPZ7GNBT.js";
@@ -4,7 +4,7 @@ import type { LayoutEngineKind } from './layoutEngines.js';
4
4
  import type { LayoutModeValue } from './layoutModes.js';
5
5
  import type { Graph, LayoutResult } from './types.js';
6
6
  import type { WalkLayer } from './walkEncoding.js';
7
- export type FigureDataOptions = Pick<FigureOptions, 'width' | 'height' | 'walks' | 'facet' | 'colorScheme' | 'nodeWidth' | 'showDeletionEdges' | 'linearLayout' | 'contigThickness' | 'connectorThickness' | 'region' | 'referenceName' | 'colorDomain' | 'fitToDrawing'>;
7
+ export type FigureDataOptions = Pick<FigureOptions, 'width' | 'height' | 'walks' | 'facet' | 'colorScheme' | 'nodeWidth' | 'showDeletionEdges' | 'linearLayout' | 'contigThickness' | 'connectorThickness' | 'region' | 'referenceName' | 'colorDomain' | 'fitToDrawing' | 'genes'>;
8
8
  type Columns<T> = {
9
9
  [K in keyof T]: T[K][];
10
10
  };
@@ -35,6 +35,27 @@ interface EdgeRow {
35
35
  width: number;
36
36
  deletion: boolean;
37
37
  }
38
+ interface KeyRow {
39
+ panel: string;
40
+ walk: string;
41
+ note: string;
42
+ scale: string;
43
+ stops: string;
44
+ }
45
+ interface PinRow {
46
+ gene: string;
47
+ x: number;
48
+ y: number;
49
+ covered: number;
50
+ bp: number;
51
+ }
52
+ interface ExonRow {
53
+ gene: string;
54
+ node: string;
55
+ stretch: number;
56
+ x: number;
57
+ y: number;
58
+ }
38
59
  interface ArrowRow {
39
60
  panel: string;
40
61
  edge: number;
@@ -62,6 +83,10 @@ export declare function figureData(graph: Graph, layout: LayoutResult, o?: Figur
62
83
  key: string[];
63
84
  range: string[];
64
85
  };
86
+ keys: Columns<KeyRow>;
87
+ pins: Columns<PinRow>;
88
+ exons: Columns<ExonRow>;
89
+ walkNames: string[];
65
90
  nodes: Columns<NodeRow>;
66
91
  edges: Columns<EdgeRow>;
67
92
  arrows: Columns<ArrowRow>;
@@ -77,7 +102,7 @@ export declare function figureData(graph: Graph, layout: LayoutResult, o?: Figur
77
102
  y: number[];
78
103
  };
79
104
  };
80
- export interface GfaFigureSpec extends Omit<FigureDataOptions, 'region' | 'walks'> {
105
+ export interface GfaFigureSpec extends Omit<FigureDataOptions, 'region' | 'walks' | 'genes'> {
81
106
  region?: string;
82
107
  walks?: (string | WalkLayer)[];
83
108
  layout?: LayoutModeValue;
@@ -109,6 +134,10 @@ export declare function gfaFigureData(text: string, name: string, spec?: GfaFigu
109
134
  key: string[];
110
135
  range: string[];
111
136
  };
137
+ keys: Columns<KeyRow>;
138
+ pins: Columns<PinRow>;
139
+ exons: Columns<ExonRow>;
140
+ walkNames: string[];
112
141
  nodes: Columns<NodeRow>;
113
142
  edges: Columns<EdgeRow>;
114
143
  arrows: Columns<ArrowRow>;
@@ -0,0 +1,25 @@
1
+ import type { GeneFormat } from './geneFiles.js';
2
+ import type { GeneModel } from './genePins.js';
3
+ import type { Graph } from '../types.js';
4
+ export interface IndexedGeneFile {
5
+ getReferenceSequenceNames(): Promise<string[]>;
6
+ getLines(refName: string, start: number, end: number, o: {
7
+ lineCallback: (line: string) => void;
8
+ }): Promise<unknown>;
9
+ }
10
+ export type GeneSource = ({
11
+ text: string;
12
+ } | {
13
+ indexed: IndexedGeneFile;
14
+ }) & {
15
+ format?: GeneFormat;
16
+ refNames?: Record<string, string>;
17
+ };
18
+ export interface BackboneGenes {
19
+ genes: GeneModel[];
20
+ unbound?: {
21
+ names: string[];
22
+ contigs: string[];
23
+ };
24
+ }
25
+ export declare function backboneGenes(graph: Graph, source: GeneSource): Promise<BackboneGenes>;
@@ -16,6 +16,7 @@ export interface GenePin {
16
16
  exonsByNode: {
17
17
  nodeId: string;
18
18
  d: string;
19
+ stretches: NodeSegment[][];
19
20
  }[];
20
21
  nodeIds: ReadonlySet<string>;
21
22
  at: NodeSegment;
@@ -53,6 +53,8 @@ export { figureSvg } from './figure.js';
53
53
  export { figureData, gfaFigureData } from './figureData.js';
54
54
  export type { FigureDataOptions, GfaFigureSpec } from './figureData.js';
55
55
  export { genesFromBed, genesFromGff3Lines, genesFromText, mergeOverlappingByName, } from './genes/geneFiles.js';
56
+ export { backboneGenes } from './genes/backboneGenes.js';
57
+ export type { BackboneGenes, GeneSource, IndexedGeneFile, } from './genes/backboneGenes.js';
56
58
  export { HPRC_GBZ, cutGbzRegion, openGbz, parseRegion } from './gbzCut.js';
57
59
  export type { GbzSource } from './gbzCut.js';
58
60
  export { version } from './version.js';
@@ -72,7 +74,7 @@ export { BUBBLE_KIND_COLORS, BUBBLE_KIND_NAMES, bubbleSegmentIds, classifyBubble
72
74
  export { bubbleSubgraph } from './bubbles/popBubble.js';
73
75
  export type { MinigraphBubble } from './bubbles/bubbleLine.js';
74
76
  export { filterSamples, walkRows } from './layout/walkRows.js';
75
- export type { WalkAxis, WalkRow, WalkRows, WalkRun, WalkStop, } from './layout/walkRows.js';
77
+ export type { WalkAxis, WalkRow, WalkRows, WalkRun, WalkStop, WalkVisit, } from './layout/walkRows.js';
76
78
  export { BAR_PX as WALK_BAR_PX, CALL_TICK as WALK_CALL_TICK, DISAGREES as WALK_DISAGREES, GAP_PX as WALK_GAP_PX, GENE_INK as WALK_GENE_INK, OFF_REFERENCE as WALK_OFF_REFERENCE, ON_REFERENCE as WALK_ON_REFERENCE, OUTSIDE_CUT as WALK_OUTSIDE_CUT, UNBACKED_TICK as WALK_UNBACKED_TICK, alongRow, callTickInk, coalesceRuns, gapStyle, genesOnRow, placeRowGenes, readoutPlacement, rowGeneBoxes, rowPitch, rowSpan, runPaint, unitTicks, walkRowReadout, walkRowsKey, walkRowsKeyTree, walkRowsTree, } from './layout/walkRowDraw.js';
77
79
  export type { GeneBox, GeneGaps, KeyEntry, KeySwatch, ReadoutCall, RowGene, RowPitch, WalkRowsFrame, WalkRowsWithCalls, } from './layout/walkRowDraw.js';
78
80
  export { LABELLED_ROW_PX, WALK_STRIP_CEILING_PX, segmentAt, stripGeneGaps, stripMarks, stripRowAt, walkMarksTree, walkStripFrame, walkStripLabelsTree, } from './layout/walkStrip.js';
@@ -19,6 +19,11 @@ export interface WalkStop {
19
19
  contigEnds: boolean;
20
20
  shortBp: number;
21
21
  }
22
+ export interface WalkVisit {
23
+ node: string;
24
+ start: number;
25
+ onReference: boolean;
26
+ }
22
27
  export interface WalkRow {
23
28
  name: string;
24
29
  label: string;
@@ -30,6 +35,7 @@ export interface WalkRow {
30
35
  complete: boolean;
31
36
  stop?: WalkStop;
32
37
  runs: WalkRun[];
38
+ visits: WalkVisit[];
33
39
  axis?: WalkAxis;
34
40
  }
35
41
  export interface WalkRows {
@@ -1 +1 @@
1
- export declare const version = "11.0.0";
1
+ export declare const version = "11.1.0";
@@ -51,5 +51,6 @@ export declare const NO_VALUE_COLOR: number;
51
51
  export declare function encodingStops({ field, scheme }: WalkEncoding): {
52
52
  offset: number;
53
53
  color: string;
54
+ abgr: number;
54
55
  }[];
55
56
  export declare function encodingSwatchCss(encoding: WalkEncoding): string;
package/dist/version.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  version
3
- } from "./chunks/chunk-6OP4HPXG.js";
3
+ } from "./chunks/chunk-Y3FDMDNT.js";
4
4
  export {
5
5
  version
6
6
  };
@@ -9,7 +9,7 @@ import {
9
9
  schemeColor,
10
10
  schemeCss,
11
11
  schemeRgb
12
- } from "./chunks/chunk-DO62DG26.js";
12
+ } from "./chunks/chunk-TABI4JEU.js";
13
13
  import "./chunks/chunk-SWCULW6S.js";
14
14
  import "./chunks/chunk-G2FD7S3C.js";
15
15
  import "./chunks/chunk-GQZVR5DW.js";
@@ -2,8 +2,8 @@ import {
2
2
  facetLifts,
3
3
  walkHighlight,
4
4
  walkLift
5
- } from "./chunks/chunk-C3NT37C3.js";
6
- import "./chunks/chunk-DO62DG26.js";
5
+ } from "./chunks/chunk-DR24UTRS.js";
6
+ import "./chunks/chunk-TABI4JEU.js";
7
7
  import "./chunks/chunk-SWCULW6S.js";
8
8
  import "./chunks/chunk-G2FD7S3C.js";
9
9
  import "./chunks/chunk-GQZVR5DW.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/bandage-core",
3
- "version": "11.0.0",
3
+ "version": "11.1.0",
4
4
  "description": "Pangenome graph layout and drawing with no host: GFA in, the Bandage force-directed engine and reference-anchored layouts, a Canvas2D renderer, hit testing and labels out",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "repository": {