@jbrowse/bandage-core 10.2.7 → 10.3.1

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 (190) hide show
  1. package/dist/alleleProjection/projectAlleles.js +8 -4
  2. package/dist/anchoredNodes.js +2 -1
  3. package/dist/bubbleSpreads.js +2 -2
  4. package/dist/bubbles/bubbleHalos.js +10 -11
  5. package/dist/bubbles/bubblesFromGraph.js +8 -3
  6. package/dist/bubbles/classifyBubble.js +9 -6
  7. package/dist/bubbles/popBubble.js +7 -5
  8. package/dist/bubbles/superbubbles.js +18 -14
  9. package/dist/chunks/{chunk-RAKOB6IV.js → chunk-234NFZS4.js} +8 -6
  10. package/dist/chunks/{chunk-ABUIN5AK.js → chunk-2Q22S52W.js} +29 -24
  11. package/dist/chunks/{chunk-6JEWNXCQ.js → chunk-34BOZKIE.js} +0 -2
  12. package/dist/chunks/{chunk-RVS2QCOX.js → chunk-3GLG3ZLE.js} +2 -11
  13. package/dist/chunks/{chunk-3XSM4OZU.js → chunk-3GP3KT5L.js} +5 -5
  14. package/dist/chunks/{chunk-PUG7LXDF.js → chunk-3PZSBNLI.js} +4 -1
  15. package/dist/chunks/{chunk-JLSJMCDJ.js → chunk-3UST3ZQE.js} +3 -3
  16. package/dist/chunks/{chunk-KBEP7VYK.js → chunk-3VCKBSML.js} +4 -4
  17. package/dist/chunks/{chunk-BPLIXMH7.js → chunk-4XWZNPQ2.js} +14 -0
  18. package/dist/chunks/{chunk-4DRQTBBE.js → chunk-6EOB6ANX.js} +1 -1
  19. package/dist/chunks/{chunk-L2HDM2R3.js → chunk-A2TJ5UX6.js} +7 -7
  20. package/dist/chunks/{chunk-URZ3CH2R.js → chunk-A4JDEUAI.js} +1 -1
  21. package/dist/chunks/{chunk-CWFNEKST.js → chunk-A7H753BA.js} +3 -3
  22. package/dist/chunks/{chunk-CG35S2S2.js → chunk-AQCOIE5R.js} +1 -1
  23. package/dist/chunks/{chunk-TKIJ5535.js → chunk-AZ4EEF6Q.js} +6 -6
  24. package/dist/chunks/{chunk-M6LK4GII.js → chunk-B5X2RLJG.js} +17 -10
  25. package/dist/chunks/{chunk-A7CFWFQS.js → chunk-BKEZLETL.js} +1 -1
  26. package/dist/chunks/{chunk-RPRHR56C.js → chunk-BS6HPYCZ.js} +3 -3
  27. package/dist/chunks/chunk-BSOZW3FC.js +30 -0
  28. package/dist/chunks/{chunk-XXT2JCAC.js → chunk-BX4AUMZE.js} +11 -13
  29. package/dist/chunks/{chunk-N73TI3VG.js → chunk-BZFOFC4D.js} +6 -9
  30. package/dist/chunks/{chunk-4ETPXDO6.js → chunk-CGFPFBT2.js} +1 -1
  31. package/dist/chunks/{chunk-24WITXQY.js → chunk-CGMSKIEO.js} +9 -25
  32. package/dist/chunks/{chunk-VV6KGJ7M.js → chunk-CHNESV7L.js} +18 -27
  33. package/dist/chunks/{chunk-IGVV37VI.js → chunk-CKUVEHSS.js} +3 -3
  34. package/dist/chunks/{chunk-JBCZIBFC.js → chunk-CRCD3ODN.js} +0 -1
  35. package/dist/chunks/{chunk-AUFAPUO4.js → chunk-D7WIYPG3.js} +3 -1
  36. package/dist/chunks/{chunk-OIV2GBAJ.js → chunk-DBLV7PGG.js} +27 -17
  37. package/dist/chunks/{chunk-VQC7KELB.js → chunk-DO62DG26.js} +11 -3
  38. package/dist/chunks/{chunk-JA2HJIYS.js → chunk-E4ZM4OOJ.js} +3 -5
  39. package/dist/chunks/{chunk-QLWI2PZ3.js → chunk-EJRJAAN7.js} +24 -21
  40. package/dist/chunks/{chunk-QBHPHLAQ.js → chunk-EWLXU3UG.js} +41 -36
  41. package/dist/chunks/{chunk-XI3ZUTWF.js → chunk-FW2R7UDZ.js} +14 -20
  42. package/dist/chunks/{chunk-Q7LYHGGQ.js → chunk-GIHTHYXY.js} +5 -4
  43. package/dist/chunks/{chunk-L3O7AWLI.js → chunk-GJLZ2MKE.js} +2 -2
  44. package/dist/chunks/{chunk-LOEA5IHZ.js → chunk-GJU6BJJA.js} +8 -8
  45. package/dist/chunks/{chunk-XL472HHD.js → chunk-GQZVR5DW.js} +12 -7
  46. package/dist/chunks/{chunk-UVBGRJQX.js → chunk-HKYXWZQS.js} +1 -1
  47. package/dist/chunks/chunk-HMXCN6PG.js +17 -0
  48. package/dist/chunks/{chunk-WSIFAZU7.js → chunk-HNWJ4B7S.js} +12 -13
  49. package/dist/chunks/chunk-HOAIOEI7.js +18 -0
  50. package/dist/chunks/{chunk-XMW266WS.js → chunk-HSVFCA2J.js} +18 -20
  51. package/dist/chunks/{chunk-QXUEF3AJ.js → chunk-KMBE2Q42.js} +22 -17
  52. package/dist/chunks/{chunk-VQWHMWLF.js → chunk-M5NPD55W.js} +18 -14
  53. package/dist/chunks/chunk-MWOVW4AH.js +327 -0
  54. package/dist/chunks/{chunk-HK5Y2YWV.js → chunk-MYDHU2UV.js} +6 -11
  55. package/dist/chunks/{chunk-TZFWUT2C.js → chunk-MYLAJDKB.js} +2 -2
  56. package/dist/chunks/{chunk-AR4BUBMU.js → chunk-NZTYV3JL.js} +34 -35
  57. package/dist/chunks/{chunk-4HWM3FNK.js → chunk-OMUPUB4J.js} +39 -56
  58. package/dist/chunks/{chunk-LKW2TP4N.js → chunk-OOIOX36I.js} +18 -16
  59. package/dist/chunks/{chunk-EQ2NIFRH.js → chunk-OXRUPNSV.js} +1 -1
  60. package/dist/chunks/{chunk-PTABFYQ7.js → chunk-PFRQBCGC.js} +49 -60
  61. package/dist/chunks/{chunk-T6V4KI2L.js → chunk-PNMJFFNB.js} +1 -1
  62. package/dist/chunks/{chunk-KC7T5RWG.js → chunk-PSCSZSVK.js} +9 -16
  63. package/dist/chunks/{chunk-23YFB5BB.js → chunk-QH2MIXBA.js} +29 -13
  64. package/dist/chunks/{chunk-5GMFEPWR.js → chunk-R2PJKD3Y.js} +16 -28
  65. package/dist/chunks/{chunk-CQHUZHET.js → chunk-RFG42VIO.js} +46 -30
  66. package/dist/chunks/{chunk-FYQWPEEY.js → chunk-RJWPJCIB.js} +5 -11
  67. package/dist/chunks/{chunk-WBSWROE6.js → chunk-SFP3E4RI.js} +14 -18
  68. package/dist/chunks/{chunk-2CMYNW3E.js → chunk-SI3BB4DO.js} +1 -1
  69. package/dist/chunks/{chunk-DY3JCAMX.js → chunk-SOMZGDVS.js} +7 -16
  70. package/dist/chunks/{chunk-A4PFFC4Q.js → chunk-SWCULW6S.js} +60 -102
  71. package/dist/chunks/{chunk-XV4P5KEQ.js → chunk-TGUFT6KK.js} +6 -3
  72. package/dist/chunks/{chunk-CM6LO6OC.js → chunk-UAFATXYA.js} +10 -14
  73. package/dist/chunks/{chunk-7SRWJLSC.js → chunk-UBQSRCWR.js} +11 -8
  74. package/dist/chunks/{chunk-RUCH6ZFL.js → chunk-V4YML3GR.js} +2 -1
  75. package/dist/chunks/{chunk-ES2N6V56.js → chunk-VX656OAZ.js} +6 -11
  76. package/dist/chunks/chunk-WA5WNP6V.js +37 -0
  77. package/dist/chunks/{chunk-B6IW3IRE.js → chunk-WYJQIC75.js} +14 -15
  78. package/dist/chunks/{chunk-T2PCSAFY.js → chunk-XVS52NMZ.js} +2 -2
  79. package/dist/chunks/{chunk-CU6P5RUG.js → chunk-YZQI35UJ.js} +22 -16
  80. package/dist/chunks/{chunk-G45YY72K.js → chunk-Z6XZWPXK.js} +17 -25
  81. package/dist/chunks/{chunk-EFQLEGWM.js → chunk-ZJBOM73S.js} +7 -8
  82. package/dist/chunks/{chunk-RAEABQNW.js → chunk-ZPZ7GNBT.js} +1 -0
  83. package/dist/cli/figure.js +59 -56
  84. package/dist/cli/fold.js +19 -17
  85. package/dist/deletionEdges.js +5 -7
  86. package/dist/facetGrid.js +2 -1
  87. package/dist/figure.js +45 -42
  88. package/dist/figureData.js +48 -44
  89. package/dist/figureScene.js +34 -29
  90. package/dist/figureSettings.js +19 -17
  91. package/dist/foldVariants.js +5 -3
  92. package/dist/gbzCut.js +12 -7
  93. package/dist/gbzJoin.js +2 -1
  94. package/dist/gbzWindow.js +11 -6
  95. package/dist/genes/genePins.js +6 -4
  96. package/dist/gfa/gfaConverter.js +7 -5
  97. package/dist/gfa/gfaTables.js +2 -1
  98. package/dist/gfa/graphTables.js +3 -3
  99. package/dist/graphLabels.js +8 -5
  100. package/dist/index.js +88 -85
  101. package/dist/labelLayout.js +12 -9
  102. package/dist/layout/anchoredLayout.js +8 -5
  103. package/dist/layout/drawnScale.js +1 -5
  104. package/dist/layout/forceCache.js +19 -17
  105. package/dist/layout/mergeRuns.js +5 -3
  106. package/dist/layout/orderedLayout.js +5 -2
  107. package/dist/layout/orientToReference.js +3 -2
  108. package/dist/layout/placeOffReference.js +7 -4
  109. package/dist/layout/referenceSeeds.js +6 -4
  110. package/dist/layout/sampleRowLayout.js +8 -5
  111. package/dist/layout/trimToWindow.js +6 -4
  112. package/dist/layout/tubeMapLayout.js +17 -19
  113. package/dist/layout/walkRowDraw.js +18 -17
  114. package/dist/layout/walkRowLayout.js +10 -6
  115. package/dist/layout/walkRows.js +9 -5
  116. package/dist/layout/walkStrip.js +21 -18
  117. package/dist/layoutModes.js +23 -20
  118. package/dist/nodeWidths.js +1 -3
  119. package/dist/pansn.js +5 -1
  120. package/dist/pathAnchoring.js +6 -4
  121. package/dist/pathColors.js +12 -9
  122. package/dist/pathVisits.js +3 -1
  123. package/dist/pipeline.js +18 -16
  124. package/dist/reference.js +5 -3
  125. package/dist/referenceRampCss.js +9 -17
  126. package/dist/referenceSpan.js +4 -2
  127. package/dist/referenceStrip.js +18 -14
  128. package/dist/renderer/Canvas2DRenderer.js +1 -1
  129. package/dist/renderer/GeometryBuilder.js +19 -14
  130. package/dist/renderer/svgCanvas.js +1 -1
  131. package/dist/tubeMap/axis.js +11 -6
  132. package/dist/tubeMap/bundle.js +16 -12
  133. package/dist/tubeMap/coarsen.js +20 -345
  134. package/dist/tubeMap/deviations.js +53 -23
  135. package/dist/tubeMap/draw.js +11 -8
  136. package/dist/tubeMap/frame.js +3 -2
  137. package/dist/tubeMap/genes.js +10 -7
  138. package/dist/tubeMap/mismatches.js +1 -1
  139. package/dist/tubeMap/nodeColors.js +18 -14
  140. package/dist/tubeMap/reads.js +1 -1
  141. package/dist/tubeMap/warp.js +2 -1
  142. package/dist/types/alleleProjection/projectAlleles.d.ts +1 -4
  143. package/dist/types/bubbles/bubbleHalos.d.ts +0 -2
  144. package/dist/types/bubbles/bubblesFromGraph.d.ts +6 -4
  145. package/dist/types/bubbles/classifyBubble.d.ts +2 -1
  146. package/dist/types/deletionEdges.d.ts +0 -8
  147. package/dist/types/figureScene.d.ts +17 -7
  148. package/dist/types/figureSettings.d.ts +2 -0
  149. package/dist/types/gbzCut.d.ts +4 -0
  150. package/dist/types/gbzWindow.d.ts +1 -0
  151. package/dist/types/gfa-core/gfaParser.d.ts +1 -1
  152. package/dist/types/graphLabels.d.ts +2 -1
  153. package/dist/types/layout/drawnScale.d.ts +0 -2
  154. package/dist/types/layout/referenceSeeds.d.ts +2 -1
  155. package/dist/types/layout/tubeMapLayout.d.ts +0 -7
  156. package/dist/types/layout/walkRowDraw.d.ts +0 -1
  157. package/dist/types/layout/walkRowLayout.d.ts +1 -0
  158. package/dist/types/layout/walkRows.d.ts +1 -0
  159. package/dist/types/nodeWidths.d.ts +0 -1
  160. package/dist/types/pansn.d.ts +9 -0
  161. package/dist/types/pathVisits.d.ts +6 -0
  162. package/dist/types/referenceRampCss.d.ts +4 -0
  163. package/dist/types/renderer/Canvas2DRenderer.d.ts +1 -0
  164. package/dist/types/renderer/GeometryBuilder.d.ts +3 -2
  165. package/dist/types/tubeMap/axis.d.ts +3 -1
  166. package/dist/types/tubeMap/coarsen.d.ts +3 -1
  167. package/dist/types/tubeMap/deviations.d.ts +2 -1
  168. package/dist/types/tubeMap/mismatches.d.ts +0 -1
  169. package/dist/types/tubeMap/warp.d.ts +2 -1
  170. package/dist/types/util/SpatialIndex.d.ts +1 -1
  171. package/dist/types/util/geometry.d.ts +4 -0
  172. package/dist/types/util/groups.d.ts +3 -0
  173. package/dist/types/util/hitDetection.d.ts +2 -2
  174. package/dist/types/util/partitionPoint.d.ts +1 -0
  175. package/dist/types/util/weakMemo.d.ts +1 -0
  176. package/dist/types/version.d.ts +1 -1
  177. package/dist/util/SpatialIndex.js +8 -5
  178. package/dist/util/edgeCurves.js +7 -4
  179. package/dist/util/geometry.js +3 -1
  180. package/dist/util/groups.js +10 -0
  181. package/dist/util/hitDetection.js +9 -6
  182. package/dist/util/partitionPoint.js +6 -0
  183. package/dist/util/weakMemo.js +6 -0
  184. package/dist/version.js +1 -1
  185. package/dist/viewport.js +19 -17
  186. package/dist/walkEncoding.js +18 -14
  187. package/dist/walkHighlight.js +19 -15
  188. package/dist/walkKey.js +9 -6
  189. package/package.json +2 -2
  190. package/dist/chunks/chunk-ZY2AFL4Y.js +0 -43
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  svgCanvas
3
- } from "./chunk-RUCH6ZFL.js";
3
+ } from "./chunk-V4YML3GR.js";
4
4
  import {
5
5
  stripGeneGaps,
6
6
  walkStripFrame,
7
7
  walkStripLabelsTree
8
- } from "./chunk-WBSWROE6.js";
8
+ } from "./chunk-SFP3E4RI.js";
9
9
  import {
10
10
  walkRowsKey,
11
11
  walkRowsKeyTree,
12
12
  walkRowsTree
13
- } from "./chunk-EFQLEGWM.js";
13
+ } from "./chunk-ZJBOM73S.js";
14
14
  import {
15
15
  Canvas2DRenderer
16
- } from "./chunk-QLWI2PZ3.js";
16
+ } from "./chunk-EJRJAAN7.js";
17
17
  import {
18
18
  EXON_COLOR,
19
19
  exonOutlineTree,
@@ -21,43 +21,45 @@ import {
21
21
  } from "./chunk-JSUCGZ6K.js";
22
22
  import {
23
23
  genePins
24
- } from "./chunk-RPRHR56C.js";
24
+ } from "./chunk-BS6HPYCZ.js";
25
25
  import {
26
26
  geneLabelCandidates
27
- } from "./chunk-KC7T5RWG.js";
27
+ } from "./chunk-PSCSZSVK.js";
28
28
  import {
29
29
  nodesUnderBox
30
- } from "./chunk-4HWM3FNK.js";
30
+ } from "./chunk-OMUPUB4J.js";
31
31
  import {
32
32
  escapeAttr,
33
33
  serializeEl
34
34
  } from "./chunk-H2H4Y3TV.js";
35
35
  import {
36
36
  version
37
- } from "./chunk-CG35S2S2.js";
37
+ } from "./chunk-AQCOIE5R.js";
38
38
  import {
39
39
  axisScaleOf
40
- } from "./chunk-A7CFWFQS.js";
41
- import {
42
- rangeText,
43
- walkKey
44
- } from "./chunk-4ETPXDO6.js";
40
+ } from "./chunk-BKEZLETL.js";
45
41
  import {
46
42
  figureScene
47
- } from "./chunk-23YFB5BB.js";
43
+ } from "./chunk-QH2MIXBA.js";
48
44
  import {
49
45
  encodingStops
50
- } from "./chunk-VQC7KELB.js";
46
+ } from "./chunk-DO62DG26.js";
47
+ import {
48
+ rangeText
49
+ } from "./chunk-CGFPFBT2.js";
51
50
  import {
52
51
  walkRowLabels
53
- } from "./chunk-L2HDM2R3.js";
52
+ } from "./chunk-A2TJ5UX6.js";
54
53
  import {
55
54
  nodeInk
56
- } from "./chunk-JBCZIBFC.js";
55
+ } from "./chunk-CRCD3ODN.js";
56
+ import {
57
+ FIGURE_DEFAULTS
58
+ } from "./chunk-D7WIYPG3.js";
57
59
  import {
58
60
  FIT_PADDING,
59
61
  fitTransform
60
- } from "./chunk-QXUEF3AJ.js";
62
+ } from "./chunk-KMBE2Q42.js";
61
63
  import {
62
64
  LABEL_CHAR_PX,
63
65
  LABEL_PAD,
@@ -69,9 +71,8 @@ import {
69
71
  FACET_GAP_PX,
70
72
  FACET_PAD_PX,
71
73
  FACET_TITLE_PX,
72
- facetCells,
73
74
  facetGrid
74
- } from "./chunk-XV4P5KEQ.js";
75
+ } from "./chunk-TGUFT6KK.js";
75
76
 
76
77
  // src/figure.ts
77
78
  var FONT = 'font-family="Helvetica, Arial, sans-serif" font-size="11"';
@@ -100,15 +101,14 @@ function exonKeySvg(x, y) {
100
101
  markup: `<g transform="translate(${x} ${y})" ${FONT}><rect x="1" y="4" width="${SWATCH_PX - 2}" height="10" rx="4" fill="none" stroke="${EXON_COLOR}" stroke-width="2"/><text x="${SWATCH_PX + 5}" y="13">exon</text></g>`
101
102
  };
102
103
  }
103
- function walkKeySvg(id, x, y, walk, label, reference) {
104
- const key = walkKey(walk, reference);
104
+ function walkKeySvg(id, x, y, walk, label, key) {
105
105
  return keySvg(
106
106
  id,
107
107
  x,
108
108
  y,
109
109
  encodingStops(walk.encoding),
110
110
  label,
111
- key.delta + key.outside + key.reversed,
111
+ key.note,
112
112
  key.scale
113
113
  );
114
114
  }
@@ -122,8 +122,8 @@ function chip(x, y, w, name, note) {
122
122
  return `<rect x="${x - w / 2}" y="${y - LABEL_PX - LABEL_PAD + 2}" width="${w}" height="${LABEL_PX + LABEL_PAD * 2 - 2}" rx="3" fill="#fff" fill-opacity="0.85" stroke="${EXON_COLOR}"/><text x="${x}" y="${y}" font-family="Helvetica, Arial, sans-serif" font-size="${LABEL_PX}" fill="${GENE_INK}" text-anchor="middle"><tspan font-style="italic" font-weight="600">${escapeAttr(name)}</tspan>${note ? escapeAttr(note) : ""}</text>`;
123
123
  }
124
124
  function figureSvg(graph, layout, o = {}) {
125
- const width = o.width ?? 1200;
126
- const room = o.height ?? 800;
125
+ const width = o.width ?? FIGURE_DEFAULTS.width;
126
+ const room = o.height ?? FIGURE_DEFAULTS.height;
127
127
  const rows = o.walkRows;
128
128
  const {
129
129
  bounds,
@@ -132,10 +132,10 @@ function figureSvg(graph, layout, o = {}) {
132
132
  layers,
133
133
  lift,
134
134
  facet,
135
- panels,
135
+ facets,
136
136
  labelOf,
137
137
  referenceName,
138
- reference,
138
+ keyText,
139
139
  contigThickness,
140
140
  nodeWidth,
141
141
  geometry
@@ -209,7 +209,7 @@ function figureSvg(graph, layout, o = {}) {
209
209
  w,
210
210
  h,
211
211
  pixelRows,
212
- panels ? {
212
+ facets ? {
213
213
  padLeft: FACET_PAD_PX,
214
214
  padTop: FACET_PAD_PX,
215
215
  padRight: FACET_PAD_PX,
@@ -235,12 +235,8 @@ function figureSvg(graph, layout, o = {}) {
235
235
  }
236
236
  const parts = [];
237
237
  let height;
238
- if (panels) {
239
- const place = facetCells(
240
- panels.map((p) => p.walks[0].name),
241
- facet.field || "walk",
242
- facet.domain
243
- );
238
+ if (facets) {
239
+ const { panels, place } = facets;
244
240
  const grid = facetGrid({
245
241
  count: place.count,
246
242
  bounds,
@@ -255,7 +251,14 @@ function figureSvg(graph, layout, o = {}) {
255
251
  const y = Math.floor(cell / grid.columns) * (grid.height + FACET_TITLE_PX + FACET_GAP_PX);
256
252
  const walk = panel.walks[0];
257
253
  parts.push(
258
- walkKeySvg(`key${i}`, x + 6, y + 2, walk, labelOf(walk.name), reference).markup,
254
+ walkKeySvg(
255
+ `key${i}`,
256
+ x + 6,
257
+ y + 2,
258
+ walk,
259
+ labelOf(walk.name),
260
+ keyText(walk)
261
+ ).markup,
259
262
  `<svg x="${x}" y="${y + FACET_TITLE_PX}" width="${grid.width}" height="${grid.height}">${drawing(panel, grid.width, grid.height)}</svg>`
260
263
  );
261
264
  });
@@ -268,7 +271,9 @@ function figureSvg(graph, layout, o = {}) {
268
271
  };
269
272
  if (lift) {
270
273
  lift.walks.forEach((walk, i) => {
271
- push(walkKeySvg(`key${i}`, x, 2, walk, labelOf(walk.name), reference));
274
+ push(
275
+ walkKeySvg(`key${i}`, x, 2, walk, labelOf(walk.name), keyText(walk))
276
+ );
272
277
  });
273
278
  push(
274
279
  keySvg(
@@ -2,21 +2,27 @@ import {
2
2
  canonicalStrand,
3
3
  stepName,
4
4
  tubeMapReads
5
- } from "./chunk-CWFNEKST.js";
5
+ } from "./chunk-A7H753BA.js";
6
+ import {
7
+ referenceWalkName
8
+ } from "./chunk-OOIOX36I.js";
6
9
  import {
7
10
  pathCssColor,
8
11
  pathGreyCssColor
9
- } from "./chunk-3XSM4OZU.js";
12
+ } from "./chunk-3GP3KT5L.js";
10
13
  import {
11
14
  pathOrigin
12
- } from "./chunk-M6LK4GII.js";
15
+ } from "./chunk-B5X2RLJG.js";
13
16
  import {
14
17
  ownStrand,
15
18
  strandSides
16
- } from "./chunk-7SRWJLSC.js";
19
+ } from "./chunk-UBQSRCWR.js";
20
+ import {
21
+ groupBy
22
+ } from "./chunk-BSOZW3FC.js";
17
23
  import {
18
24
  isBackbone
19
- } from "./chunk-FYQWPEEY.js";
25
+ } from "./chunk-RJWPJCIB.js";
20
26
 
21
27
  // src/layout/tubeMapLayout.ts
22
28
  import { forward, isReverse, layoutTubeMap } from "@jbrowse/tubemap-core";
@@ -53,9 +59,8 @@ function tubeMapTracks(graph) {
53
59
  }
54
60
  ] : [];
55
61
  });
56
- const reference = tracks.findIndex(
57
- (t) => pathOrigin(t.name).name === graph.referencePath
58
- );
62
+ const name = referenceWalkName(graph);
63
+ const reference = tracks.findIndex((t) => pathOrigin(t.name).name === name);
59
64
  if (reference > 0) {
60
65
  tracks.unshift(...tracks.splice(reference, 1));
61
66
  }
@@ -279,15 +284,7 @@ function tubeMapLayout(graph) {
279
284
  }
280
285
  function tubeMapColumns(graph, layout) {
281
286
  const nodeById = new Map(graph.nodes.map((n) => [n.id, n]));
282
- const byOrder = /* @__PURE__ */ new Map();
283
- for (const node of drawnNodes(layout)) {
284
- const list = byOrder.get(node.order);
285
- if (list) {
286
- list.push(node);
287
- } else {
288
- byOrder.set(node.order, [node]);
289
- }
290
- }
287
+ const byOrder = groupBy(drawnNodes(layout), (node) => node.order);
291
288
  const columns = [];
292
289
  let end = -Infinity;
293
290
  for (const order of [...byOrder.keys()].sort((a, b) => a - b)) {
@@ -355,9 +352,6 @@ export {
355
352
  pathSteps,
356
353
  tubeMapTracks,
357
354
  hasTubeMapPaths,
358
- tubeWidth,
359
- mergedRuns,
360
- boxGraph,
361
355
  tubeMapLayout,
362
356
  hasTubeMapBackbone,
363
357
  tubeMapReferenceLayout
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  joinCuts
3
- } from "./chunk-WSIFAZU7.js";
3
+ } from "./chunk-HNWJ4B7S.js";
4
4
  import {
5
5
  wellKnownSample
6
- } from "./chunk-RAKOB6IV.js";
6
+ } from "./chunk-234NFZS4.js";
7
7
  import {
8
8
  gfaTables
9
- } from "./chunk-G45YY72K.js";
9
+ } from "./chunk-Z6XZWPXK.js";
10
10
  import {
11
11
  panSNMatchesPrefix,
12
12
  panSNSample
13
- } from "./chunk-BPLIXMH7.js";
13
+ } from "./chunk-4XWZNPQ2.js";
14
14
 
15
15
  // src/gbzWindow.ts
16
16
  import { isReverse, nodeId } from "@gmod/gbz-base";
@@ -210,6 +210,7 @@ export {
210
210
  haplotypePrefix,
211
211
  haplotypeWanted,
212
212
  referenceSamplesOf,
213
+ aliasedSample,
213
214
  resolveReferenceSample,
214
215
  referencePathQuery,
215
216
  nodeLimitError,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  placeOffReference
3
- } from "./chunk-TZFWUT2C.js";
3
+ } from "./chunk-MYLAJDKB.js";
4
4
  import {
5
5
  ROW_HEIGHT_PX
6
6
  } from "./chunk-CPMHA4W5.js";
@@ -8,7 +8,7 @@ import {
8
8
  backboneNodes,
9
9
  backbonePositions,
10
10
  referenceSpan
11
- } from "./chunk-FYQWPEEY.js";
11
+ } from "./chunk-RJWPJCIB.js";
12
12
 
13
13
  // src/layout/anchoredLayout.ts
14
14
  function rankRows(graph) {
@@ -1,9 +1,6 @@
1
1
  import {
2
2
  placeOffReference
3
- } from "./chunk-TZFWUT2C.js";
4
- import {
5
- parsePanSN
6
- } from "./chunk-RVS2QCOX.js";
3
+ } from "./chunk-MYLAJDKB.js";
7
4
  import {
8
5
  ROW_HEIGHT_PX
9
6
  } from "./chunk-CPMHA4W5.js";
@@ -12,14 +9,17 @@ import {
12
9
  backbonePositions,
13
10
  isOffReference,
14
11
  referenceSpan
15
- } from "./chunk-FYQWPEEY.js";
12
+ } from "./chunk-RJWPJCIB.js";
13
+ import {
14
+ panSNSample
15
+ } from "./chunk-4XWZNPQ2.js";
16
16
 
17
17
  // src/layout/sampleRowLayout.ts
18
18
  function contributingSamples(graph, keep) {
19
19
  const carried = /* @__PURE__ */ new Map();
20
20
  for (const node of graph.nodes) {
21
21
  if (isOffReference(node)) {
22
- const { sample } = parsePanSN(node.stable.refName);
22
+ const sample = panSNSample(node.stable.refName);
23
23
  carried.set(sample, (carried.get(sample) ?? 0) + node.length);
24
24
  }
25
25
  }
@@ -43,12 +43,12 @@ function sampleRowLayout(graph, region, keep = []) {
43
43
  span,
44
44
  rowY: (node) => {
45
45
  const stable = node.stable;
46
- const row = stable ? rowOf.get(parsePanSN(stable.refName).sample) : void 0;
46
+ const row = stable ? rowOf.get(panSNSample(stable.refName)) : void 0;
47
47
  return (row ?? spareRow) * ROW_HEIGHT_PX;
48
48
  },
49
49
  positions: nodePositions
50
50
  });
51
- const referenceSample = parsePanSN(backbone[0].stable.refName).sample;
51
+ const referenceSample = panSNSample(backbone[0].stable.refName);
52
52
  const rowLabels = [
53
53
  { label: referenceSample, y: 0 },
54
54
  ...samples.map((sample) => ({
@@ -1,15 +1,16 @@
1
- import {
2
- REFERENCE_RAMP_MAX_HUE
3
- } from "./chunk-A4PFFC4Q.js";
4
-
5
1
  // src/referenceRampCss.ts
2
+ var REFERENCE_RAMP_MAX_HUE = 300;
3
+ var REFERENCE_RAMP_SATURATION = 0.7;
4
+ var REFERENCE_RAMP_LIGHTNESS = 0.5;
6
5
  function rampHueCss(hue) {
7
- return `hsl(${hue}, 70%, 50%)`;
6
+ return `hsl(${hue}, ${REFERENCE_RAMP_SATURATION * 100}%, ${REFERENCE_RAMP_LIGHTNESS * 100}%)`;
8
7
  }
9
- function rampHue(bp, domain) {
10
- const frac = (bp - domain.start) / (domain.end - domain.start);
8
+ function rampHueAt(frac) {
11
9
  return Math.max(0, Math.min(1, frac)) * REFERENCE_RAMP_MAX_HUE;
12
10
  }
11
+ function rampHue(bp, domain) {
12
+ return rampHueAt((bp - domain.start) / (domain.end - domain.start));
13
+ }
13
14
  var HUE_STOP_DEG = 30;
14
15
  function rampStops({ start, bp, reversed }, domain) {
15
16
  const low = rampHue(start, domain);
@@ -32,7 +33,11 @@ var RAMP_GRADIENT_CSS = `linear-gradient(to right, ${RAMP_GRADIENT_STOPS.map(
32
33
  ).join(", ")})`;
33
34
 
34
35
  export {
36
+ REFERENCE_RAMP_MAX_HUE,
37
+ REFERENCE_RAMP_SATURATION,
38
+ REFERENCE_RAMP_LIGHTNESS,
35
39
  rampHueCss,
40
+ rampHueAt,
36
41
  rampHue,
37
42
  rampStops,
38
43
  RAMP_GRADIENT_STOPS,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  MEAN_NODE_LENGTH,
3
3
  PROPORTIONAL_LENGTH
4
- } from "./chunk-6JEWNXCQ.js";
4
+ } from "./chunk-34BOZKIE.js";
5
5
 
6
6
  // src/bubbleSpreads.ts
7
7
  var BUBBLE_SPREADS = [
@@ -0,0 +1,17 @@
1
+ // src/util/weakMemo.ts
2
+ function weakMemo() {
3
+ const cache = /* @__PURE__ */ new WeakMap();
4
+ return (key, deps, compute) => {
5
+ const hit = cache.get(key);
6
+ if (hit?.deps.length === deps.length && hit.deps.every((d, i) => Object.is(d, deps[i]))) {
7
+ return hit.value;
8
+ }
9
+ const value = compute();
10
+ cache.set(key, { deps, value });
11
+ return value;
12
+ };
13
+ }
14
+
15
+ export {
16
+ weakMemo
17
+ };
@@ -1,3 +1,7 @@
1
+ import {
2
+ groupBy
3
+ } from "./chunk-BSOZW3FC.js";
4
+
1
5
  // src/gbzJoin.ts
2
6
  var UNKNOWN_SAMPLE = "unknown";
3
7
  function parseWalk(line) {
@@ -18,7 +22,7 @@ function segmentLengths(lines) {
18
22
  const ln = tags.find((tag) => tag.startsWith("LN:i:"));
19
23
  lengths.set(
20
24
  id,
21
- sequence === "*" && ln ? +ln.slice("LN:i:".length) : sequence.length
25
+ sequence !== "*" ? sequence.length : ln ? +ln.slice("LN:i:".length) : 0
22
26
  );
23
27
  }
24
28
  }
@@ -94,18 +98,13 @@ function joinCuts(gfas, startsPath) {
94
98
  }
95
99
  return walks2;
96
100
  });
97
- const byName = /* @__PURE__ */ new Map();
98
- for (const walk of [
99
- ...walksByCut.flatMap((walks2) => walks2.slice(0, 1)),
100
- ...walksByCut.flatMap((walks2) => walks2.slice(1))
101
- ]) {
102
- const pieces = byName.get(walk.name);
103
- if (pieces) {
104
- pieces.push(walk);
105
- } else {
106
- byName.set(walk.name, [walk]);
107
- }
108
- }
101
+ const byName = groupBy(
102
+ [
103
+ ...walksByCut.flatMap((walks2) => walks2.slice(0, 1)),
104
+ ...walksByCut.flatMap((walks2) => walks2.slice(1))
105
+ ],
106
+ (walk) => walk.name
107
+ );
109
108
  const walks = [...byName.values()].flatMap(
110
109
  (pieces) => joinPieces(pieces, lengths, startsPath)
111
110
  );
@@ -0,0 +1,18 @@
1
+ // src/util/partitionPoint.ts
2
+ function partitionPoint(n, pred) {
3
+ let lo = 0;
4
+ let hi = n;
5
+ while (lo < hi) {
6
+ const mid = lo + hi >> 1;
7
+ if (pred(mid)) {
8
+ lo = mid + 1;
9
+ } else {
10
+ hi = mid;
11
+ }
12
+ }
13
+ return lo;
14
+ }
15
+
16
+ export {
17
+ partitionPoint
18
+ };
@@ -1,9 +1,15 @@
1
1
  import {
2
2
  formatBp
3
- } from "./chunk-PTABFYQ7.js";
3
+ } from "./chunk-PFRQBCGC.js";
4
+ import {
5
+ pushTo
6
+ } from "./chunk-BSOZW3FC.js";
4
7
  import {
5
8
  isBackbone
6
- } from "./chunk-FYQWPEEY.js";
9
+ } from "./chunk-RJWPJCIB.js";
10
+ import {
11
+ partitionPoint
12
+ } from "./chunk-HOAIOEI7.js";
7
13
 
8
14
  // src/tubeMap/axis.ts
9
15
  function referenceBoxes({
@@ -16,8 +22,7 @@ function referenceBoxes({
16
22
  const graphNode = nodeById.get(node.name);
17
23
  if (node.order >= 0 && graphNode && isBackbone(graphNode)) {
18
24
  const { refName, start } = graphNode.stable;
19
- const boxes = byRefName.get(refName) ?? byRefName.set(refName, []).get(refName);
20
- boxes.push({
25
+ pushTo(byRefName, refName, {
21
26
  name: node.name,
22
27
  index,
23
28
  bp0: start,
@@ -33,23 +38,15 @@ function referenceBoxes({
33
38
  return byRefName;
34
39
  }
35
40
  function tubeX(boxes, bp, isEnd = false) {
36
- let lo = 0;
37
- let hi = boxes.length - 1;
38
- while (lo < hi) {
39
- const mid = lo + hi >> 1;
40
- const bp1 = boxes[mid].bp1;
41
- if (isEnd ? bp1 < bp : bp1 <= bp) {
42
- lo = mid + 1;
43
- } else {
44
- hi = mid;
45
- }
46
- }
47
- const box = boxes[lo];
48
- if (bp <= box.bp0) {
49
- return box.x0;
50
- }
41
+ const i = partitionPoint(
42
+ boxes.length - 1,
43
+ (j) => isEnd ? boxes[j].bp1 < bp : boxes[j].bp1 <= bp
44
+ );
45
+ return boxX(boxes[i], bp);
46
+ }
47
+ function boxX(box, bp) {
51
48
  const span = box.bp1 - box.bp0;
52
- return span > 0 ? box.x0 + (Math.min(bp, box.bp1) - box.bp0) / span * (box.x1 - box.x0) : box.x0;
49
+ return bp <= box.bp0 || span <= 0 ? box.x0 : box.x0 + (Math.min(bp, box.bp1) - box.bp0) / span * (box.x1 - box.x0);
53
50
  }
54
51
  function tubeSpan(boxes, start, end) {
55
52
  const a = tubeX(boxes, start);
@@ -199,6 +196,7 @@ function drawTubeMapRuler(ctx, boxes, frame, top, referenceAxis = false) {
199
196
  export {
200
197
  referenceBoxes,
201
198
  tubeX,
199
+ boxX,
202
200
  tubeSpan,
203
201
  rulerBoxes,
204
202
  rulerInk,
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  orientToReference
3
- } from "./chunk-PUG7LXDF.js";
3
+ } from "./chunk-3PZSBNLI.js";
4
4
  import {
5
5
  seededNodes
6
- } from "./chunk-IGVV37VI.js";
6
+ } from "./chunk-CKUVEHSS.js";
7
7
  import {
8
8
  smoothChain
9
9
  } from "./chunk-OPPVSPEF.js";
@@ -14,38 +14,38 @@ import {
14
14
  } from "./chunk-VPE4AYP7.js";
15
15
  import {
16
16
  convertGFAToGraph
17
- } from "./chunk-AR4BUBMU.js";
17
+ } from "./chunk-NZTYV3JL.js";
18
18
  import {
19
19
  parseGFA
20
20
  } from "./chunk-5I3K4R2G.js";
21
21
  import {
22
22
  graphFromTables
23
- } from "./chunk-OIV2GBAJ.js";
23
+ } from "./chunk-DBLV7PGG.js";
24
24
  import {
25
25
  anchorGraph
26
- } from "./chunk-M6LK4GII.js";
26
+ } from "./chunk-B5X2RLJG.js";
27
27
  import {
28
28
  gfaTables
29
- } from "./chunk-G45YY72K.js";
29
+ } from "./chunk-Z6XZWPXK.js";
30
30
  import {
31
31
  mergeRuns,
32
32
  splitRuns
33
- } from "./chunk-N73TI3VG.js";
33
+ } from "./chunk-BZFOFC4D.js";
34
34
  import {
35
35
  spreadFor
36
- } from "./chunk-UVBGRJQX.js";
36
+ } from "./chunk-HKYXWZQS.js";
37
37
  import {
38
38
  drawnLengthOf,
39
39
  drawnNodeLength,
40
40
  layoutScaling
41
- } from "./chunk-6JEWNXCQ.js";
41
+ } from "./chunk-34BOZKIE.js";
42
42
  import {
43
43
  deletionDrawing,
44
44
  deletionEdges
45
- } from "./chunk-24WITXQY.js";
45
+ } from "./chunk-CGMSKIEO.js";
46
46
  import {
47
47
  isBackbone
48
- } from "./chunk-FYQWPEEY.js";
48
+ } from "./chunk-RJWPJCIB.js";
49
49
 
50
50
  // src/pipeline.ts
51
51
  function graphOf(source, name) {
@@ -90,11 +90,12 @@ function engineSettingsOf(s = {}) {
90
90
  var COMPONENT_SEPARATION = 15;
91
91
  function engineRequest(graph, scaling, settings) {
92
92
  const anchored = graph.nodes.some(isBackbone);
93
+ const s = engineSettingsOf(settings);
93
94
  const spaced = {
94
95
  ...scaling,
95
96
  opts: {
96
97
  ...scaling.opts,
97
- edgeLength: scaling.opts.edgeLength * (settings.spacing ?? 1)
98
+ edgeLength: scaling.opts.edgeLength * s.spacing
98
99
  }
99
100
  };
100
101
  return {
@@ -103,18 +104,22 @@ function engineRequest(graph, scaling, settings) {
103
104
  edges: graph.edges
104
105
  },
105
106
  options: {
106
- quality: settings.quality,
107
- linearLayout: settings.linearLayout,
107
+ quality: s.quality,
108
+ linearLayout: s.linearLayout,
108
109
  ...spaced.opts,
109
- componentSeparation: COMPONENT_SEPARATION * (settings.componentSeparation ?? 1),
110
+ componentSeparation: COMPONENT_SEPARATION * s.componentSeparation,
110
111
  ...anchored ? { rotateComponents: false } : {},
111
- engine: settings.engine ?? "fmmm"
112
+ engine: s.engine
112
113
  }
113
114
  };
114
115
  }
115
116
  function engineKey(graph, settings) {
116
117
  const anchored = graph.nodes.some(isBackbone);
117
- return `${settings.engine ?? "fmmm"}|${settings.quality}|${settings.linearLayout}|${settings.bubbleSpread}|${settings.spacing ?? 1}|${settings.componentSeparation ?? 1}|${settings.showDeletionEdges !== false}|${anchored}|${graph.referencePath ?? ""}`;
118
+ return [
119
+ ...Object.values(engineSettingsOf(settings)),
120
+ anchored,
121
+ graph.referencePath ?? ""
122
+ ].join("|");
118
123
  }
119
124
  async function forceLayout(graph, settings, engine) {
120
125
  const spread = spreadFor(settings.bubbleSpread);