@jbrowse/bandage-core 11.5.0 → 11.7.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 (147) hide show
  1. package/dist/alleleProjection/projectAlleles.js +1 -1
  2. package/dist/bubbles/bubbleHalos.js +9 -6
  3. package/dist/bubbles/classifyBubble.js +8 -5
  4. package/dist/bubbles/popBubble.js +3 -3
  5. package/dist/bubbles/superbubbles.js +11 -11
  6. package/dist/chunks/{chunk-4XWZNPQ2.js → chunk-2JL2JVZ2.js} +1 -1
  7. package/dist/chunks/{chunk-BZFOFC4D.js → chunk-2VMKQKVO.js} +17 -7
  8. package/dist/chunks/{chunk-HN3WHMPJ.js → chunk-2XEAITWM.js} +15 -5
  9. package/dist/chunks/{chunk-7BTO7MZS.js → chunk-376YFQOY.js} +2 -2
  10. package/dist/chunks/{chunk-B5X2RLJG.js → chunk-3YBP46PB.js} +27 -2
  11. package/dist/chunks/{chunk-EJRJAAN7.js → chunk-4DMSPNYV.js} +47 -27
  12. package/dist/chunks/{chunk-OMUPUB4J.js → chunk-56L6R6D2.js} +2 -2
  13. package/dist/chunks/{chunk-C44YRP5F.js → chunk-5OJZV6YT.js} +3 -2
  14. package/dist/chunks/{chunk-234NFZS4.js → chunk-5ORP7EFJ.js} +1 -1
  15. package/dist/chunks/{chunk-XKZ56L5A.js → chunk-5ZQKQ24Z.js} +1 -1
  16. package/dist/chunks/{chunk-VD4MLYEK.js → chunk-65YCFVS4.js} +2 -2
  17. package/dist/chunks/{chunk-3VCKBSML.js → chunk-6YRSOL4K.js} +2 -2
  18. package/dist/chunks/{chunk-NJGYLYU7.js → chunk-7L7MN2OM.js} +6 -3
  19. package/dist/chunks/{chunk-TRGKMLXT.js → chunk-A7Q7RTWX.js} +26 -19
  20. package/dist/chunks/{chunk-77EGQQJU.js → chunk-BFUS3ENH.js} +2 -2
  21. package/dist/chunks/{chunk-TGUFT6KK.js → chunk-BLUEFYIR.js} +4 -1
  22. package/dist/chunks/{chunk-3GP3KT5L.js → chunk-BW2NMXRV.js} +5 -5
  23. package/dist/chunks/{chunk-IOWLTUEB.js → chunk-BXE3SBBN.js} +1 -1
  24. package/dist/chunks/{chunk-2E25TX4G.js → chunk-C6E6HXP5.js} +4 -4
  25. package/dist/chunks/{chunk-5I3K4R2G.js → chunk-CFXXFHRK.js} +2 -1
  26. package/dist/chunks/{chunk-JMABOQWL.js → chunk-CO6RGQAD.js} +1 -6
  27. package/dist/chunks/{chunk-5F4D35U5.js → chunk-DD5EZG3T.js} +3 -3
  28. package/dist/chunks/{chunk-AKLSY4GD.js → chunk-DTEXQ65J.js} +1 -1
  29. package/dist/chunks/{chunk-VQ7474EH.js → chunk-DUREQSOJ.js} +9 -8
  30. package/dist/chunks/{chunk-CGMSKIEO.js → chunk-DV5B5UU7.js} +55 -8
  31. package/dist/chunks/{chunk-KOJKFNCW.js → chunk-EH5JZETS.js} +26 -12
  32. package/dist/chunks/{chunk-G6UIYQZR.js → chunk-EQDQ7P4Y.js} +3 -2
  33. package/dist/chunks/{chunk-J3JODFDF.js → chunk-FNDNSDKW.js} +3 -3
  34. package/dist/chunks/{chunk-64FCX424.js → chunk-G7SG4XMK.js} +62 -14
  35. package/dist/chunks/{chunk-6EOB6ANX.js → chunk-GZ36HNPJ.js} +1 -1
  36. package/dist/chunks/{chunk-A32ZKSHN.js → chunk-HELOUO6K.js} +5 -5
  37. package/dist/chunks/{chunk-PQBALYSO.js → chunk-HERVZPWA.js} +16 -16
  38. package/dist/chunks/{chunk-3U3C4PRK.js → chunk-HMEAGAGC.js} +3 -3
  39. package/dist/chunks/{chunk-WC6HX6GJ.js → chunk-IJCSW6MV.js} +2 -2
  40. package/dist/chunks/{chunk-JOWKKQAL.js → chunk-JGHZ3N34.js} +14 -9
  41. package/dist/chunks/{chunk-PSCSZSVK.js → chunk-KA4F3N55.js} +4 -4
  42. package/dist/chunks/{chunk-SOMZGDVS.js → chunk-KJDERUQF.js} +1 -1
  43. package/dist/chunks/{chunk-E4ZM4OOJ.js → chunk-KZMSSPS6.js} +2 -2
  44. package/dist/chunks/{chunk-EIY2SKD3.js → chunk-LG2UK4MB.js} +2 -1
  45. package/dist/chunks/{chunk-PNMJFFNB.js → chunk-MHZTTLBU.js} +1 -1
  46. package/dist/chunks/{chunk-K5LDBMLX.js → chunk-NTKWT6XL.js} +1 -1
  47. package/dist/chunks/{chunk-WA5WNP6V.js → chunk-OYCQVJYY.js} +1 -1
  48. package/dist/chunks/{chunk-JOLLU34X.js → chunk-PQIFYQVI.js} +1 -1
  49. package/dist/chunks/{chunk-EGBBIXTG.js → chunk-QCOVHLJO.js} +1 -1
  50. package/dist/chunks/{chunk-A7H753BA.js → chunk-SDI6BVG7.js} +5 -6
  51. package/dist/chunks/{chunk-FWSERUJV.js → chunk-SENPGW4O.js} +1 -1
  52. package/dist/chunks/{chunk-RK3HRRCW.js → chunk-SIA75TEG.js} +6 -7
  53. package/dist/chunks/{chunk-A4JDEUAI.js → chunk-SNF2MIEF.js} +1 -1
  54. package/dist/chunks/{chunk-D4ZFRBB4.js → chunk-SVPR7IZO.js} +4 -4
  55. package/dist/chunks/{chunk-PFRQBCGC.js → chunk-T3H5ELLA.js} +4 -4
  56. package/dist/chunks/{chunk-FFHJGWDK.js → chunk-TUMJNAOL.js} +5 -5
  57. package/dist/chunks/{chunk-UBQSRCWR.js → chunk-VACK24HF.js} +43 -3
  58. package/dist/chunks/{chunk-HSVFCA2J.js → chunk-VO6FKNZE.js} +1 -1
  59. package/dist/chunks/{chunk-DZR37KXT.js → chunk-VSSIYQYF.js} +1 -1
  60. package/dist/chunks/{chunk-3BCVMZUT.js → chunk-WWIUC4N4.js} +10 -10
  61. package/dist/chunks/{chunk-GJU6BJJA.js → chunk-XR2HMGAS.js} +1 -1
  62. package/dist/chunks/{chunk-WG5D2H7X.js → chunk-YER6TUXV.js} +11 -11
  63. package/dist/chunks/{chunk-7EDGWT67.js → chunk-YEYQFNFQ.js} +1 -1
  64. package/dist/chunks/{chunk-UFUSPK2A.js → chunk-YYIU7P73.js} +4 -1
  65. package/dist/chunks/{chunk-CRCD3ODN.js → chunk-ZANALBSX.js} +11 -3
  66. package/dist/chunks/{chunk-WLR4KJVI.js → chunk-ZHZRAYEM.js} +1 -1
  67. package/dist/chunks/{chunk-NMWQUFPF.js → chunk-ZKSC7QVE.js} +3 -3
  68. package/dist/cli/figure.js +53 -48
  69. package/dist/cli/fold.js +13 -13
  70. package/dist/deletionEdges.js +5 -2
  71. package/dist/facetGrid.js +2 -2
  72. package/dist/figure.js +37 -37
  73. package/dist/figureData.js +39 -39
  74. package/dist/figureScene.js +27 -27
  75. package/dist/figureSettings.js +13 -13
  76. package/dist/foldVariants.js +2 -2
  77. package/dist/gaf/parseGaf.js +1 -1
  78. package/dist/gbzCut.js +6 -6
  79. package/dist/gbzWindow.js +5 -5
  80. package/dist/genes/backboneGenes.js +4 -4
  81. package/dist/genes/geneFiles.js +1 -1
  82. package/dist/genes/genePins.js +3 -3
  83. package/dist/gfa/gfaConverter.js +5 -5
  84. package/dist/gfa/gfaTables.js +2 -2
  85. package/dist/gfa/graphTables.js +3 -3
  86. package/dist/gfa/walkStops.js +1 -1
  87. package/dist/gfa-core/gfaParser.js +1 -1
  88. package/dist/gfa-core/index.js +1 -1
  89. package/dist/graphLabels.js +7 -4
  90. package/dist/index.js +64 -64
  91. package/dist/labelLayout.js +11 -8
  92. package/dist/layout/anchoredLayout.js +1 -1
  93. package/dist/layout/forceCache.js +13 -13
  94. package/dist/layout/mergeRuns.js +2 -2
  95. package/dist/layout/placeOffReference.js +1 -1
  96. package/dist/layout/sampleRowLayout.js +2 -2
  97. package/dist/layout/trimToWindow.js +2 -2
  98. package/dist/layout/tubeMapLayout.js +15 -15
  99. package/dist/layout/walkRowDraw.js +15 -13
  100. package/dist/layout/walkRowLayout.js +8 -8
  101. package/dist/layout/walkRowLinks.js +1 -1
  102. package/dist/layout/walkRowRuns.js +5 -5
  103. package/dist/layout/walkRows.js +6 -6
  104. package/dist/layout/walkStrip.js +18 -18
  105. package/dist/layoutEngines.js +1 -1
  106. package/dist/layoutModes.js +18 -18
  107. package/dist/locus.js +1 -1
  108. package/dist/nodeWidths.js +5 -3
  109. package/dist/pansn.js +1 -1
  110. package/dist/pathAnchoring.js +4 -2
  111. package/dist/pathColors.js +8 -8
  112. package/dist/pipeline.js +12 -12
  113. package/dist/reference.js +2 -2
  114. package/dist/referenceStrip.js +12 -12
  115. package/dist/renderer/Canvas2DRenderer.js +1 -1
  116. package/dist/renderer/GeometryBuilder.js +11 -11
  117. package/dist/tubeMap/axis.js +8 -5
  118. package/dist/tubeMap/bundle.js +16 -16
  119. package/dist/tubeMap/coarsen.js +16 -16
  120. package/dist/tubeMap/deviations.js +19 -19
  121. package/dist/tubeMap/draw.js +11 -9
  122. package/dist/tubeMap/genes.js +9 -6
  123. package/dist/tubeMap/nodeColors.js +12 -12
  124. package/dist/tubeMap/reads.js +4 -4
  125. package/dist/types/figureData.d.ts +12 -0
  126. package/dist/types/gaf/parseGaf.d.ts +1 -1
  127. package/dist/types/gfa/graphTables.d.ts +2 -0
  128. package/dist/types/gfa/walkStops.d.ts +1 -1
  129. package/dist/types/layout/walkRowDraw.d.ts +2 -1
  130. package/dist/types/layout/walkRows.d.ts +1 -0
  131. package/dist/types/nodeWidths.d.ts +2 -1
  132. package/dist/types/pathAnchoring.d.ts +2 -0
  133. package/dist/types/renderer/Canvas2DRenderer.d.ts +2 -0
  134. package/dist/types/tubeMap/reads.d.ts +0 -1
  135. package/dist/types/types.d.ts +4 -0
  136. package/dist/types/util/geometry.d.ts +7 -1
  137. package/dist/types/version.d.ts +1 -1
  138. package/dist/util/SpatialIndex.js +7 -4
  139. package/dist/util/edgeCurves.js +6 -3
  140. package/dist/util/geometry.js +1 -1
  141. package/dist/util/hitDetection.js +8 -5
  142. package/dist/version.js +1 -1
  143. package/dist/viewport.js +13 -13
  144. package/dist/walkEncoding.js +12 -12
  145. package/dist/walkHighlight.js +14 -14
  146. package/dist/walkKey.js +9 -6
  147. package/package.json +1 -1
@@ -2,10 +2,10 @@ import {
2
2
  stripGeneGaps,
3
3
  walkStripFrame,
4
4
  walkStripLabelsTree
5
- } from "./chunk-A32ZKSHN.js";
5
+ } from "./chunk-HELOUO6K.js";
6
6
  import {
7
7
  Canvas2DRenderer
8
- } from "./chunk-EJRJAAN7.js";
8
+ } from "./chunk-4DMSPNYV.js";
9
9
  import {
10
10
  svgCanvas
11
11
  } from "./chunk-V4YML3GR.js";
@@ -13,7 +13,7 @@ import {
13
13
  walkRowsKey,
14
14
  walkRowsKeyTree,
15
15
  walkRowsTree
16
- } from "./chunk-TRGKMLXT.js";
16
+ } from "./chunk-A7Q7RTWX.js";
17
17
  import {
18
18
  EXON_COLOR,
19
19
  exonOutlineTree,
@@ -21,45 +21,45 @@ import {
21
21
  } from "./chunk-JSUCGZ6K.js";
22
22
  import {
23
23
  geneLabelCandidates
24
- } from "./chunk-PSCSZSVK.js";
24
+ } from "./chunk-KA4F3N55.js";
25
25
  import {
26
26
  nodesUnderBox
27
- } from "./chunk-OMUPUB4J.js";
27
+ } from "./chunk-56L6R6D2.js";
28
28
  import {
29
29
  escapeAttr,
30
30
  serializeEl
31
31
  } from "./chunk-H2H4Y3TV.js";
32
32
  import {
33
33
  genePins
34
- } from "./chunk-77EGQQJU.js";
34
+ } from "./chunk-BFUS3ENH.js";
35
35
  import {
36
36
  version
37
- } from "./chunk-WLR4KJVI.js";
37
+ } from "./chunk-ZHZRAYEM.js";
38
38
  import {
39
39
  axisScaleOf
40
- } from "./chunk-XKZ56L5A.js";
40
+ } from "./chunk-5ZQKQ24Z.js";
41
41
  import {
42
42
  figureScene
43
- } from "./chunk-3BCVMZUT.js";
43
+ } from "./chunk-WWIUC4N4.js";
44
44
  import {
45
45
  encodingStops
46
- } from "./chunk-HN3WHMPJ.js";
46
+ } from "./chunk-2XEAITWM.js";
47
47
  import {
48
48
  rangeText
49
- } from "./chunk-D4ZFRBB4.js";
49
+ } from "./chunk-SVPR7IZO.js";
50
50
  import {
51
51
  walkRowLabels
52
- } from "./chunk-FWSERUJV.js";
52
+ } from "./chunk-SENPGW4O.js";
53
53
  import {
54
54
  nodeInk
55
- } from "./chunk-CRCD3ODN.js";
55
+ } from "./chunk-ZANALBSX.js";
56
56
  import {
57
57
  FIGURE_DEFAULTS
58
- } from "./chunk-K5LDBMLX.js";
58
+ } from "./chunk-NTKWT6XL.js";
59
59
  import {
60
60
  FIT_PADDING,
61
61
  fitTransform
62
- } from "./chunk-WG5D2H7X.js";
62
+ } from "./chunk-YER6TUXV.js";
63
63
  import {
64
64
  LABEL_CHAR_PX,
65
65
  LABEL_PAD,
@@ -72,7 +72,7 @@ import {
72
72
  FACET_PAD_PX,
73
73
  FACET_TITLE_PX,
74
74
  facetGrid
75
- } from "./chunk-TGUFT6KK.js";
75
+ } from "./chunk-BLUEFYIR.js";
76
76
 
77
77
  // src/figure.ts
78
78
  var FONT = 'font-family="Helvetica, Arial, sans-serif" font-size="11"';
@@ -6,13 +6,13 @@ import {
6
6
  } from "./chunk-MYDHU2UV.js";
7
7
  import {
8
8
  readColor
9
- } from "./chunk-A7H753BA.js";
9
+ } from "./chunk-SDI6BVG7.js";
10
10
  import {
11
11
  referenceWalkName
12
- } from "./chunk-64FCX424.js";
12
+ } from "./chunk-G7SG4XMK.js";
13
13
  import {
14
14
  pathOrigin
15
- } from "./chunk-B5X2RLJG.js";
15
+ } from "./chunk-3YBP46PB.js";
16
16
  import {
17
17
  pushTo
18
18
  } from "./chunk-BSOZW3FC.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  pathSteps
3
- } from "./chunk-RK3HRRCW.js";
3
+ } from "./chunk-SIA75TEG.js";
4
4
  import {
5
5
  pathOrigin
6
- } from "./chunk-B5X2RLJG.js";
6
+ } from "./chunk-3YBP46PB.js";
7
7
  import {
8
8
  PathVisitsBuilder
9
9
  } from "./chunk-ZPZ7GNBT.js";
@@ -10,17 +10,18 @@ import {
10
10
  } from "./chunk-GQZVR5DW.js";
11
11
  import {
12
12
  baseEdgeCurves
13
- } from "./chunk-WA5WNP6V.js";
13
+ } from "./chunk-OYCQVJYY.js";
14
14
  import {
15
15
  PATH_LIGHTNESS,
16
16
  PATH_SATURATION,
17
17
  nameHue,
18
18
  pathHueAt
19
- } from "./chunk-3GP3KT5L.js";
19
+ } from "./chunk-BW2NMXRV.js";
20
20
  import {
21
21
  meanDepth,
22
- nodeWidthPx
23
- } from "./chunk-CRCD3ODN.js";
22
+ nodeWidthPx,
23
+ walkLaneWidthPx
24
+ } from "./chunk-ZANALBSX.js";
24
25
  import {
25
26
  referenceMidpoints
26
27
  } from "./chunk-VX656OAZ.js";
@@ -31,7 +32,7 @@ import {
31
32
  strandSides,
32
33
  translateCurves,
33
34
  yToXOf
34
- } from "./chunk-UBQSRCWR.js";
35
+ } from "./chunk-VACK24HF.js";
35
36
  import {
36
37
  pushTo
37
38
  } from "./chunk-BSOZW3FC.js";
@@ -51,7 +52,6 @@ var LIFT_BACKDROP_CSS = abgrToCssRgba(
51
52
  );
52
53
  var DELETION_DASH_PX = 11;
53
54
  var MIN_PATH_STRIPE_PX = 1.2;
54
- var MIN_WALK_LANE_PX = 4;
55
55
  var MIN_SCALE_FOR_OFFSET = 1e-6;
56
56
  var ARROW_LENGTH_BASE_PX = 7;
57
57
  var ARROW_LENGTH_PER_EDGE_PX = 3;
@@ -518,7 +518,12 @@ function buildGeometry(options) {
518
518
  const inView = (curves) => !viewportBounds || isBezierInBounds(curves, viewportBounds);
519
519
  const stroke = (curves, thickness, color) => {
520
520
  if (isDeletion) {
521
- for (const dash of dashCurves(curves, DELETION_DASH_PX / scale)) {
521
+ for (const dash of dashCurves(
522
+ curves,
523
+ DELETION_DASH_PX / scale,
524
+ yToX,
525
+ viewportBounds
526
+ )) {
522
527
  edgeCurves.push({ curves: dash, thickness, color });
523
528
  }
524
529
  } else {
@@ -546,7 +551,7 @@ function buildGeometry(options) {
546
551
  if (laneWalks) {
547
552
  const fromNode = nodeById.get(edge.from);
548
553
  const width = fromNode ? nodeWidthPx(fromNode, contigThickness, nodeWidth, depthNorm) : contigThickness;
549
- const laneWidth = Math.max(width / laneWalks.length, MIN_WALK_LANE_PX);
554
+ const laneWidth = walkLaneWidthPx(width, laneWalks.length);
550
555
  const normals = pointNormalsOf(fromSegments, yToX);
551
556
  const { nx, ny } = (leavesStart(
552
557
  edge,
@@ -638,7 +643,7 @@ function buildGeometry(options) {
638
643
  const drawable = segments.length >= 2;
639
644
  const lanes = highlight?.walks.length && !faded && !slots?.length ? highlight.walks : void 0;
640
645
  if (drawable && lanes) {
641
- const laneWidth = Math.max(width / lanes.length, MIN_WALK_LANE_PX);
646
+ const laneWidth = walkLaneWidthPx(width, lanes.length);
642
647
  const normals = pointNormalsOf(segments, yToX);
643
648
  lanes.forEach((walk, lane) => {
644
649
  const laneColor = walk.colors.get(nodeId);
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  nodesUnderBox
3
- } from "./chunk-OMUPUB4J.js";
3
+ } from "./chunk-56L6R6D2.js";
4
4
  import {
5
5
  graphLabels,
6
6
  rowLabelBox
7
- } from "./chunk-PFRQBCGC.js";
7
+ } from "./chunk-T3H5ELLA.js";
8
8
  import {
9
9
  LABEL_CHAR_PX,
10
10
  LABEL_PAD,
@@ -25,7 +25,7 @@ function geneCoverageNote(pin) {
25
25
  if (pin.covered >= 0.98) {
26
26
  return void 0;
27
27
  }
28
- const [per, unit] = length >= 1e6 ? [1e6, "Mb"] : length >= 1e3 ? [1e3, "kb"] : [1, "bp"];
28
+ const [per, unit] = length >= 999500 ? [1e6, "Mb"] : length >= 1e3 ? [1e3, "kb"] : [1, "bp"];
29
29
  const amount = (bp) => +(bp / per).toFixed(per === 1 ? 0 : 1);
30
30
  return `${amount(pin.covered * length)} of ${amount(length)} ${unit}`;
31
31
  }
@@ -114,7 +114,7 @@ function layoutLabels(m) {
114
114
  frame,
115
115
  take
116
116
  );
117
- const ticks = m.bubbleHalos.filter((h) => h.tick && !h.whole).map((h) => ({ item: h, ...above(h, 2) })).filter((t) => t.x >= 0 && t.x <= width && t.y >= 0 && t.y <= height);
117
+ const ticks = m.bubbleHalos.filter((h) => h.tick).map((h) => ({ item: h, ...above(h, 2) })).filter((t) => t.x >= 0 && t.x <= width && t.y >= 0 && t.y <= height);
118
118
  const genes = placeLabels(
119
119
  geneLabelCandidates(
120
120
  m.genePins,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ownStrand
3
- } from "./chunk-UBQSRCWR.js";
3
+ } from "./chunk-VACK24HF.js";
4
4
  import {
5
5
  groupBy
6
6
  } from "./chunk-BSOZW3FC.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  bubbleSegmentIds,
3
3
  classifyBubble
4
- } from "./chunk-A4JDEUAI.js";
4
+ } from "./chunk-SNF2MIEF.js";
5
5
  import {
6
6
  svgPath
7
- } from "./chunk-UBQSRCWR.js";
7
+ } from "./chunk-VACK24HF.js";
8
8
  import {
9
9
  isBackbone
10
10
  } from "./chunk-RJWPJCIB.js";
@@ -5,7 +5,8 @@ var STOP_KINDS = ["elsewhere", "break", "end"];
5
5
  var GAP_CAUSE_TEXT = {
6
6
  missing: "not in the graph",
7
7
  elsewhere: "on nodes filed elsewhere",
8
- unknown: "gap, cause unknown"
8
+ unknown: "gap, cause unknown",
9
+ abridged: "abridged: steps not loaded"
9
10
  };
10
11
  var OUTSIDE_TEXT = "outside the extracted subgraph";
11
12
  function gapParts(bp, after, before) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  trimOrigins
3
- } from "./chunk-B5X2RLJG.js";
3
+ } from "./chunk-3YBP46PB.js";
4
4
 
5
5
  // src/bubbles/popBubble.ts
6
6
  function bubbleSubgraph(graph, segmentIds) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ENGINE_DEFAULTS
3
- } from "./chunk-WG5D2H7X.js";
3
+ } from "./chunk-YER6TUXV.js";
4
4
 
5
5
  // src/figureSettings.ts
6
6
  var FIGURE_DEFAULTS = {
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-HMXCN6PG.js";
4
4
  import {
5
5
  edgeCurvesOf
6
- } from "./chunk-CGMSKIEO.js";
6
+ } from "./chunk-DV5B5UU7.js";
7
7
 
8
8
  // src/util/edgeCurves.ts
9
9
  var cache = weakMemo();
@@ -1,5 +1,5 @@
1
1
  // src/locus.ts
2
- var LOCUS = /^\s*([^:\s]+):\s*([\d,]+)(?:\s*(?:-|\.\.)\s*([\d,]+))?\s*$/;
2
+ var LOCUS = /^\s*(\S+?):\s*([\d,]+)(?:\s*(?:-|\.\.)\s*([\d,]+))?\s*$/;
3
3
  function parseLocus(text) {
4
4
  const m = LOCUS.exec(text);
5
5
  if (!m) {
@@ -2,7 +2,7 @@ import {
2
2
  LIFT_BACKDROP_CSS,
3
3
  computeColorSchemeRange,
4
4
  getNodeColor
5
- } from "./chunk-JOWKKQAL.js";
5
+ } from "./chunk-JGHZ3N34.js";
6
6
  import {
7
7
  abgrToCssRgba
8
8
  } from "./chunk-G2FD7S3C.js";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  parseCs
3
- } from "./chunk-C44YRP5F.js";
3
+ } from "./chunk-5OJZV6YT.js";
4
+ import {
5
+ ownStrand
6
+ } from "./chunk-VACK24HF.js";
4
7
 
5
8
  // src/tubeMap/reads.ts
6
- function canonicalStrand(node) {
7
- return node.id.endsWith("-") ? "-" : "+";
8
- }
9
9
  function stepName(node, strand) {
10
- return strand === canonicalStrand(node) ? node.id : `-${node.id}`;
10
+ return strand === ownStrand(node.id) ? node.id : `-${node.id}`;
11
11
  }
12
12
  function stepStarts(lengths, total) {
13
13
  const starts = lengths.map(() => void 0);
@@ -137,7 +137,6 @@ function readColor(read) {
137
137
  }
138
138
 
139
139
  export {
140
- canonicalStrand,
141
140
  stepName,
142
141
  tubeMapReads,
143
142
  FORWARD_READ_COLORS,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  walkRows
3
- } from "./chunk-IOWLTUEB.js";
3
+ } from "./chunk-BXE3SBBN.js";
4
4
  import {
5
5
  ROW_HEIGHT_PX
6
6
  } from "./chunk-CPMHA4W5.js";
@@ -1,22 +1,21 @@
1
1
  import {
2
- canonicalStrand,
3
2
  stepName,
4
3
  tubeMapReads
5
- } from "./chunk-A7H753BA.js";
4
+ } from "./chunk-SDI6BVG7.js";
6
5
  import {
7
6
  referenceWalkName
8
- } from "./chunk-64FCX424.js";
7
+ } from "./chunk-G7SG4XMK.js";
9
8
  import {
10
9
  pathCssColor,
11
10
  pathGreyCssColor
12
- } from "./chunk-3GP3KT5L.js";
11
+ } from "./chunk-BW2NMXRV.js";
13
12
  import {
14
13
  pathOrigin
15
- } from "./chunk-B5X2RLJG.js";
14
+ } from "./chunk-3YBP46PB.js";
16
15
  import {
17
16
  ownStrand,
18
17
  strandSides
19
- } from "./chunk-UBQSRCWR.js";
18
+ } from "./chunk-VACK24HF.js";
20
19
  import {
21
20
  groupBy
22
21
  } from "./chunk-BSOZW3FC.js";
@@ -39,7 +38,7 @@ function pathSteps(graph) {
39
38
  }
40
39
  const at = visits && next ? next(visits.slot(node.name), walk) : -1;
41
40
  return [
42
- { node, strand: at >= 0 ? visits.strand(at) : canonicalStrand(node) }
41
+ { node, strand: at >= 0 ? visits.strand(at) : ownStrand(node.id) }
43
42
  ];
44
43
  });
45
44
  });
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-FX4RDMDN.js";
4
4
  import {
5
5
  formatBp
6
- } from "./chunk-PFRQBCGC.js";
6
+ } from "./chunk-T3H5ELLA.js";
7
7
 
8
8
  // src/bubbles/classifyBubble.ts
9
9
  var REPEAT_GROWTH = 10;
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  GAP_CAUSE_TEXT,
3
3
  OUTSIDE_TEXT
4
- } from "./chunk-EIY2SKD3.js";
4
+ } from "./chunk-LG2UK4MB.js";
5
5
  import {
6
6
  formatBp,
7
7
  groupDigits
8
- } from "./chunk-PFRQBCGC.js";
8
+ } from "./chunk-T3H5ELLA.js";
9
9
 
10
10
  // src/walkKey.ts
11
11
  function rangeText(contig, start, end) {
12
12
  const s = Math.round(start);
13
13
  const e = Math.round(end);
14
- return `${contig ? `${contig}:` : ""}${groupDigits(s)}-${groupDigits(e)} (${formatBp(e - s)})`;
14
+ return `${contig ? `${contig}:` : ""}${groupDigits(s + 1)}-${groupDigits(e)} (${formatBp(e - s)})`;
15
15
  }
16
16
  function walkKey(walk, reference) {
17
17
  const { field } = walk.encoding;
@@ -42,7 +42,7 @@ function walkPosition(walk, nodeId, length) {
42
42
  const start = Math.round(
43
43
  range.start + progress * (range.end - range.start) - length / 2
44
44
  );
45
- return `${range.contig}:${groupDigits(start)}-${groupDigits(start + length)}`;
45
+ return `${range.contig}:${groupDigits(start + 1)}-${groupDigits(start + length)}`;
46
46
  }
47
47
 
48
48
  export {
@@ -7,15 +7,15 @@ import {
7
7
  } from "./chunk-AB35TJST.js";
8
8
  import {
9
9
  polylineMidpoint
10
- } from "./chunk-BZFOFC4D.js";
10
+ } from "./chunk-2VMKQKVO.js";
11
11
  import {
12
12
  edgeCurvesOf
13
- } from "./chunk-CGMSKIEO.js";
13
+ } from "./chunk-DV5B5UU7.js";
14
14
  import {
15
15
  curveBounds,
16
16
  curveMidpoint,
17
17
  polylinePx
18
- } from "./chunk-UBQSRCWR.js";
18
+ } from "./chunk-VACK24HF.js";
19
19
 
20
20
  // src/graphLabels.ts
21
21
  var MIN_DELETION_LABEL_PX = 26;
@@ -55,7 +55,7 @@ function groupDigits(n) {
55
55
  return String(n).replace(/\B(?=(\d{3})+$)/g, ",");
56
56
  }
57
57
  function formatBp(bp) {
58
- const [value, unit] = bp >= 1e6 ? [bp / 1e6, "Mb"] : bp >= 1e3 ? [bp / 1e3, "kb"] : [];
58
+ const [value, unit] = bp >= 999500 ? [bp / 1e6, "Mb"] : bp >= 1e3 ? [bp / 1e3, "kb"] : [];
59
59
  if (value === void 0) {
60
60
  return `${bp} bp`;
61
61
  }
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  stableCoordinate
3
- } from "./chunk-5I3K4R2G.js";
3
+ } from "./chunk-CFXXFHRK.js";
4
+ import {
5
+ walkStopFields
6
+ } from "./chunk-LG2UK4MB.js";
4
7
  import {
5
8
  pathOrigin,
6
9
  surveyPaths
7
- } from "./chunk-B5X2RLJG.js";
8
- import {
9
- walkStopFields
10
- } from "./chunk-EIY2SKD3.js";
10
+ } from "./chunk-3YBP46PB.js";
11
11
 
12
12
  // src/gfa/gfaConverter.ts
13
13
  function surveySegments(gfaGraph, pathSteps) {
@@ -71,16 +71,56 @@ function curveTangentAt(c, t) {
71
71
  y: a * (c.cy0 - c.y0) + b * (c.cy1 - c.cy0) + d * (c.y1 - c.cy1)
72
72
  };
73
73
  }
74
- function dashCurves(curves, dashWorld) {
74
+ var VISIBLE_SAMPLES = 32;
75
+ function visibleStretches(curves, lengths, bounds, yToX) {
76
+ const stretches = [];
77
+ let start = 0;
78
+ curves.forEach((c, k) => {
79
+ const length = lengths[k];
80
+ const pad = length / VISIBLE_SAMPLES;
81
+ let last = curvePointAt(c, 0);
82
+ for (let i = 1; i <= VISIBLE_SAMPLES; i++) {
83
+ const next = curvePointAt(c, i / VISIBLE_SAMPLES);
84
+ if (Math.max(last.x, next.x) + pad >= bounds.minX && Math.min(last.x, next.x) - pad <= bounds.maxX && Math.max(last.y, next.y) + pad / yToX >= bounds.minY && Math.min(last.y, next.y) - pad / yToX <= bounds.maxY) {
85
+ const from = start + length * (i - 1) / VISIBLE_SAMPLES;
86
+ const to = start + length * i / VISIBLE_SAMPLES;
87
+ const prev = stretches.at(-1);
88
+ if (prev && prev[1] >= from) {
89
+ prev[1] = to;
90
+ } else {
91
+ stretches.push([from, to]);
92
+ }
93
+ }
94
+ last = next;
95
+ }
96
+ start += length;
97
+ });
98
+ return stretches;
99
+ }
100
+ function dashCurves(curves, dashWorld, yToX = 1, bounds) {
75
101
  const lengths = curves.map(
76
- (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)
102
+ (c) => Math.hypot(c.cx0 - c.x0, (c.cy0 - c.y0) * yToX) + Math.hypot(c.cx1 - c.cx0, (c.cy1 - c.cy0) * yToX) + Math.hypot(c.x1 - c.cx1, (c.y1 - c.cy1) * yToX)
77
103
  );
78
104
  const total = lengths.reduce((a, b) => a + b, 0);
79
- const spans = Math.max(3, Math.round(total / dashWorld) | 1);
105
+ const periods = Math.round(total / dashWorld);
106
+ const spans = Math.max(3, periods % 2 ? periods : periods + 1);
107
+ const stretches = bounds ? visibleStretches(curves, lengths, bounds, yToX) : void 0;
108
+ let seen = 0;
80
109
  const out = [];
81
110
  for (let i = 0; i < spans; i += 2) {
82
111
  const from = i / spans * total;
83
112
  const to = (i + 1) / spans * total;
113
+ if (stretches) {
114
+ while (seen < stretches.length && stretches[seen][1] < from) {
115
+ seen++;
116
+ }
117
+ if (seen === stretches.length) {
118
+ break;
119
+ }
120
+ if (stretches[seen][0] > to) {
121
+ continue;
122
+ }
123
+ }
84
124
  const dash = [];
85
125
  let start = 0;
86
126
  curves.forEach((c, k) => {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  formatBp
3
- } from "./chunk-PFRQBCGC.js";
3
+ } from "./chunk-T3H5ELLA.js";
4
4
  import {
5
5
  pushTo
6
6
  } from "./chunk-BSOZW3FC.js";
@@ -3,7 +3,7 @@ import {
3
3
  START_STOP_TAG,
4
4
  StopColumns,
5
5
  parseStopTag
6
- } from "./chunk-EIY2SKD3.js";
6
+ } from "./chunk-LG2UK4MB.js";
7
7
  import {
8
8
  Column
9
9
  } from "./chunk-ZPZ7GNBT.js";
@@ -4,41 +4,41 @@ import {
4
4
  import {
5
5
  facetLifts,
6
6
  walkLift
7
- } from "./chunk-VQ7474EH.js";
7
+ } from "./chunk-DUREQSOJ.js";
8
8
  import {
9
9
  buildGeometry,
10
10
  computeReferenceRamp
11
- } from "./chunk-JOWKKQAL.js";
11
+ } from "./chunk-JGHZ3N34.js";
12
12
  import {
13
13
  walkKey
14
- } from "./chunk-D4ZFRBB4.js";
14
+ } from "./chunk-SVPR7IZO.js";
15
15
  import {
16
16
  walkRowsExtent
17
- } from "./chunk-FWSERUJV.js";
17
+ } from "./chunk-SENPGW4O.js";
18
18
  import {
19
19
  pathLegend,
20
20
  walkLabelsOf
21
- } from "./chunk-3GP3KT5L.js";
21
+ } from "./chunk-BW2NMXRV.js";
22
22
  import {
23
23
  FIGURE_DEFAULTS
24
- } from "./chunk-K5LDBMLX.js";
24
+ } from "./chunk-NTKWT6XL.js";
25
25
  import {
26
26
  drawingBounds
27
- } from "./chunk-WG5D2H7X.js";
27
+ } from "./chunk-YER6TUXV.js";
28
28
  import {
29
29
  referenceLabel
30
- } from "./chunk-234NFZS4.js";
30
+ } from "./chunk-5ORP7EFJ.js";
31
31
  import {
32
32
  resolveColorScheme
33
33
  } from "./chunk-JKJWSY4V.js";
34
34
  import {
35
35
  deletionDrawing,
36
36
  deletionEdges
37
- } from "./chunk-CGMSKIEO.js";
37
+ } from "./chunk-DV5B5UU7.js";
38
38
  import {
39
39
  facetCells,
40
40
  facetSettingOf
41
- } from "./chunk-TGUFT6KK.js";
41
+ } from "./chunk-BLUEFYIR.js";
42
42
 
43
43
  // src/figureScene.ts
44
44
  function figureScene(graph, layout, o) {
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-RJWPJCIB.js";
13
13
  import {
14
14
  panSNSample
15
- } from "./chunk-4XWZNPQ2.js";
15
+ } from "./chunk-2JL2JVZ2.js";
16
16
 
17
17
  // src/layout/sampleRowLayout.ts
18
18
  function contributingSamples(graph, keep) {
@@ -14,23 +14,20 @@ import {
14
14
  } from "./chunk-VPE4AYP7.js";
15
15
  import {
16
16
  convertGFAToGraph
17
- } from "./chunk-FFHJGWDK.js";
17
+ } from "./chunk-TUMJNAOL.js";
18
18
  import {
19
19
  parseGFA
20
- } from "./chunk-5I3K4R2G.js";
20
+ } from "./chunk-CFXXFHRK.js";
21
21
  import {
22
22
  graphFromTables
23
- } from "./chunk-NJGYLYU7.js";
24
- import {
25
- anchorGraph
26
- } from "./chunk-B5X2RLJG.js";
23
+ } from "./chunk-7L7MN2OM.js";
27
24
  import {
28
25
  gfaTables
29
- } from "./chunk-DZR37KXT.js";
26
+ } from "./chunk-VSSIYQYF.js";
30
27
  import {
31
28
  mergeRuns,
32
29
  splitRuns
33
- } from "./chunk-BZFOFC4D.js";
30
+ } from "./chunk-2VMKQKVO.js";
34
31
  import {
35
32
  spreadFor
36
33
  } from "./chunk-HKYXWZQS.js";
@@ -42,7 +39,10 @@ import {
42
39
  import {
43
40
  deletionDrawing,
44
41
  deletionEdges
45
- } from "./chunk-CGMSKIEO.js";
42
+ } from "./chunk-DV5B5UU7.js";
43
+ import {
44
+ anchorGraph
45
+ } from "./chunk-3YBP46PB.js";
46
46
  import {
47
47
  isBackbone
48
48
  } from "./chunk-RJWPJCIB.js";
@@ -56,7 +56,7 @@ function graphOf(source, name) {
56
56
  return tables ? graphFromTables(tables, name) : convertGFAToGraph(parseGFA(source), name);
57
57
  }
58
58
  function loadGraph(source, name, opts = {}) {
59
- const graph = anchorGraph(graphOf(source, name), opts.referencePath);
59
+ const graph = graphOf(source, name);
60
60
  if (graph.nodes.length === 0) {
61
61
  throw new Error(`No graph segments in ${name}`);
62
62
  }
@@ -65,7 +65,7 @@ function loadGraph(source, name, opts = {}) {
65
65
  `Graph too large to draw: ${graph.nodes.length.toLocaleString()} nodes (limit ${opts.maxNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`
66
66
  );
67
67
  }
68
- return graph;
68
+ return anchorGraph(graph, opts.referencePath);
69
69
  }
70
70
  var ENGINE_DEFAULTS = {
71
71
  engine: "fmmm",