@jbrowse/bandage-core 11.4.0 → 11.6.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 (142) 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-FFHJGWDK.js → chunk-2C5SATRZ.js} +5 -5
  7. package/dist/chunks/{chunk-4XWZNPQ2.js → chunk-2JL2JVZ2.js} +1 -1
  8. package/dist/chunks/{chunk-BZFOFC4D.js → chunk-2VMKQKVO.js} +17 -7
  9. package/dist/chunks/{chunk-GM7M25NW.js → chunk-2XEAITWM.js} +15 -5
  10. package/dist/chunks/{chunk-7BTO7MZS.js → chunk-376YFQOY.js} +2 -2
  11. package/dist/chunks/{chunk-EFD753MS.js → chunk-3FWNQNF7.js} +1 -1
  12. package/dist/chunks/{chunk-B5X2RLJG.js → chunk-3YBP46PB.js} +27 -2
  13. package/dist/chunks/{chunk-EJRJAAN7.js → chunk-4DMSPNYV.js} +47 -27
  14. package/dist/chunks/{chunk-I4BYUNJN.js → chunk-4WXFQOYV.js} +5 -5
  15. package/dist/chunks/{chunk-OMUPUB4J.js → chunk-56L6R6D2.js} +2 -2
  16. package/dist/chunks/{chunk-C44YRP5F.js → chunk-5OJZV6YT.js} +3 -2
  17. package/dist/chunks/{chunk-234NFZS4.js → chunk-5ORP7EFJ.js} +1 -1
  18. package/dist/chunks/{chunk-TUQKGAK3.js → chunk-5WB7O7IT.js} +4 -4
  19. package/dist/chunks/{chunk-3VCKBSML.js → chunk-6YRSOL4K.js} +2 -2
  20. package/dist/chunks/{chunk-REOWLPH4.js → chunk-7OTWJQGA.js} +13 -13
  21. package/dist/chunks/{chunk-77EGQQJU.js → chunk-BFUS3ENH.js} +2 -2
  22. package/dist/chunks/{chunk-TGUFT6KK.js → chunk-BLUEFYIR.js} +4 -1
  23. package/dist/chunks/{chunk-JQ52XYD2.js → chunk-BVWMVWLJ.js} +12 -12
  24. package/dist/chunks/{chunk-3GP3KT5L.js → chunk-BW2NMXRV.js} +5 -5
  25. package/dist/chunks/{chunk-2Q22S52W.js → chunk-C6E6HXP5.js} +8 -8
  26. package/dist/chunks/{chunk-5I3K4R2G.js → chunk-CFXXFHRK.js} +2 -1
  27. package/dist/chunks/{chunk-JMABOQWL.js → chunk-CO6RGQAD.js} +1 -6
  28. package/dist/chunks/{chunk-M75QPZNJ.js → chunk-D3E7AXBB.js} +68 -26
  29. package/dist/chunks/{chunk-CGMSKIEO.js → chunk-DV5B5UU7.js} +55 -8
  30. package/dist/chunks/{chunk-G6UIYQZR.js → chunk-EQDQ7P4Y.js} +3 -2
  31. package/dist/chunks/{chunk-FRTYQQDI.js → chunk-EVXXFMZ7.js} +9 -9
  32. package/dist/chunks/{chunk-BXLLMWC3.js → chunk-F3KQQDKP.js} +1 -1
  33. package/dist/chunks/{chunk-6EOB6ANX.js → chunk-GZ36HNPJ.js} +1 -1
  34. package/dist/chunks/{chunk-3HGYGISG.js → chunk-HV35LDYH.js} +3 -3
  35. package/dist/chunks/{chunk-XSF4RQRP.js → chunk-JGHZ3N34.js} +22 -15
  36. package/dist/chunks/{chunk-D4ZFRBB4.js → chunk-JGQQAUVL.js} +3 -3
  37. package/dist/chunks/{chunk-PSCSZSVK.js → chunk-KA4F3N55.js} +4 -4
  38. package/dist/chunks/{chunk-SOMZGDVS.js → chunk-KJDERUQF.js} +1 -1
  39. package/dist/chunks/{chunk-E4ZM4OOJ.js → chunk-KZMSSPS6.js} +2 -2
  40. package/dist/chunks/{chunk-JDZ5GTZT.js → chunk-MEVTV4FI.js} +1 -1
  41. package/dist/chunks/{chunk-PNMJFFNB.js → chunk-MHZTTLBU.js} +1 -1
  42. package/dist/chunks/{chunk-VIQL7GZ4.js → chunk-MXLYBDOX.js} +14 -13
  43. package/dist/chunks/{chunk-3LZ334X4.js → chunk-NXBW6KY6.js} +6 -7
  44. package/dist/chunks/{chunk-7O7EGTYG.js → chunk-OUM54ZSQ.js} +2 -2
  45. package/dist/chunks/{chunk-WA5WNP6V.js → chunk-OYCQVJYY.js} +1 -1
  46. package/dist/chunks/{chunk-TZLEHZVC.js → chunk-P5PBJONQ.js} +1 -1
  47. package/dist/chunks/chunk-PQIFYQVI.js +21 -0
  48. package/dist/chunks/{chunk-6VVGFQ7S.js → chunk-QCOVHLJO.js} +1 -1
  49. package/dist/chunks/{chunk-TEXAKEJX.js → chunk-QD35GH4C.js} +3 -3
  50. package/dist/chunks/{chunk-CE6ZIKJX.js → chunk-RLCYVZ4B.js} +1 -1
  51. package/dist/chunks/{chunk-6YJESZND.js → chunk-ROLACYCO.js} +20 -20
  52. package/dist/chunks/{chunk-A7H753BA.js → chunk-SDI6BVG7.js} +5 -6
  53. package/dist/chunks/{chunk-A4JDEUAI.js → chunk-SNF2MIEF.js} +1 -1
  54. package/dist/chunks/{chunk-NMWQUFPF.js → chunk-SVVFWTG4.js} +2 -2
  55. package/dist/chunks/{chunk-PFRQBCGC.js → chunk-T3H5ELLA.js} +4 -4
  56. package/dist/chunks/{chunk-QM7KEWWT.js → chunk-TXTSE44S.js} +1 -1
  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-B5ARSBOH.js → chunk-W2YAW36J.js} +8 -7
  60. package/dist/chunks/{chunk-TJOOHTJ6.js → chunk-WI6SUU5B.js} +2 -2
  61. package/dist/chunks/{chunk-GJU6BJJA.js → chunk-XR2HMGAS.js} +1 -1
  62. package/dist/chunks/{chunk-N7G5ROIV.js → chunk-XXOBCANT.js} +26 -12
  63. package/dist/chunks/{chunk-G3I4TCEZ.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/cli/figure.js +52 -47
  67. package/dist/cli/fold.js +12 -12
  68. package/dist/deletionEdges.js +5 -2
  69. package/dist/facetGrid.js +2 -2
  70. package/dist/figure.js +36 -36
  71. package/dist/figureData.js +38 -38
  72. package/dist/figureScene.js +26 -26
  73. package/dist/figureSettings.js +12 -12
  74. package/dist/foldVariants.js +2 -2
  75. package/dist/gaf/parseGaf.js +1 -1
  76. package/dist/gbzCut.js +4 -4
  77. package/dist/gbzWindow.js +3 -3
  78. package/dist/genes/backboneGenes.js +4 -4
  79. package/dist/genes/geneFiles.js +1 -1
  80. package/dist/genes/genePins.js +3 -3
  81. package/dist/gfa/gfaConverter.js +4 -4
  82. package/dist/gfa/graphTables.js +2 -2
  83. package/dist/gfa-core/gfaParser.js +1 -1
  84. package/dist/gfa-core/index.js +1 -1
  85. package/dist/graphLabels.js +7 -4
  86. package/dist/index.js +96 -90
  87. package/dist/labelLayout.js +11 -8
  88. package/dist/layout/anchoredLayout.js +1 -1
  89. package/dist/layout/forceCache.js +12 -12
  90. package/dist/layout/mergeRuns.js +2 -2
  91. package/dist/layout/placeOffReference.js +1 -1
  92. package/dist/layout/sampleRowLayout.js +2 -2
  93. package/dist/layout/trimToWindow.js +2 -2
  94. package/dist/layout/tubeMapLayout.js +14 -14
  95. package/dist/layout/walkRowDraw.js +12 -12
  96. package/dist/layout/walkRowLayout.js +7 -7
  97. package/dist/layout/walkRowLinks.js +1 -1
  98. package/dist/layout/walkRowRuns.js +4 -4
  99. package/dist/layout/walkRows.js +5 -5
  100. package/dist/layout/walkStrip.js +17 -17
  101. package/dist/layoutEngines.js +1 -1
  102. package/dist/layoutModes.js +17 -17
  103. package/dist/locus.js +8 -0
  104. package/dist/nodeWidths.js +5 -3
  105. package/dist/pansn.js +1 -1
  106. package/dist/pathAnchoring.js +4 -2
  107. package/dist/pathColors.js +8 -8
  108. package/dist/pipeline.js +11 -11
  109. package/dist/reference.js +2 -2
  110. package/dist/referenceStrip.js +12 -12
  111. package/dist/renderer/Canvas2DRenderer.js +1 -1
  112. package/dist/renderer/GeometryBuilder.js +15 -13
  113. package/dist/tubeMap/axis.js +8 -5
  114. package/dist/tubeMap/bundle.js +15 -15
  115. package/dist/tubeMap/coarsen.js +15 -15
  116. package/dist/tubeMap/deviations.js +18 -18
  117. package/dist/tubeMap/draw.js +10 -8
  118. package/dist/tubeMap/genes.js +9 -6
  119. package/dist/tubeMap/nodeColors.js +12 -12
  120. package/dist/tubeMap/reads.js +4 -4
  121. package/dist/types/figureData.d.ts +12 -0
  122. package/dist/types/gaf/parseGaf.d.ts +1 -1
  123. package/dist/types/gfa/graphTables.d.ts +3 -2
  124. package/dist/types/index.d.ts +1 -0
  125. package/dist/types/locus.d.ts +10 -0
  126. package/dist/types/nodeWidths.d.ts +2 -1
  127. package/dist/types/pathAnchoring.d.ts +2 -0
  128. package/dist/types/renderer/Canvas2DRenderer.d.ts +2 -0
  129. package/dist/types/renderer/GeometryBuilder.d.ts +1 -0
  130. package/dist/types/tubeMap/reads.d.ts +0 -1
  131. package/dist/types/util/geometry.d.ts +7 -1
  132. package/dist/types/version.d.ts +1 -1
  133. package/dist/util/SpatialIndex.js +7 -4
  134. package/dist/util/edgeCurves.js +6 -3
  135. package/dist/util/geometry.js +1 -1
  136. package/dist/util/hitDetection.js +8 -5
  137. package/dist/version.js +1 -1
  138. package/dist/viewport.js +12 -12
  139. package/dist/walkEncoding.js +12 -12
  140. package/dist/walkHighlight.js +13 -13
  141. package/dist/walkKey.js +8 -5
  142. package/package.json +1 -1
@@ -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";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  walkRowRuns,
3
3
  walkRowsOf
4
- } from "./chunk-M75QPZNJ.js";
4
+ } from "./chunk-D3E7AXBB.js";
5
5
 
6
6
  // src/layout/walkRows.ts
7
7
  function filterSamples(rows, samples) {
@@ -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) {
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-H2H4Y3TV.js";
4
4
  import {
5
5
  REFERENCE_RAMP_ALT_CSS
6
- } from "./chunk-XSF4RQRP.js";
6
+ } from "./chunk-JGHZ3N34.js";
7
7
  import {
8
8
  RAMP_GRADIENT_CSS,
9
9
  RAMP_GRADIENT_STOPS,
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-CPMHA4W5.js";
23
23
  import {
24
24
  panSNContig
25
- } from "./chunk-4XWZNPQ2.js";
25
+ } from "./chunk-2JL2JVZ2.js";
26
26
 
27
27
  // src/layout/walkRowDraw.ts
28
28
  var ON_REFERENCE = "#2f8fd6";
@@ -49,10 +49,10 @@ function units(bp, unit) {
49
49
  }
50
50
  var near = ({ refName, start }) => `${panSNContig(refName)}:${start < 1e6 ? `${Math.round(start / 1e3)} kb` : `${(start / 1e6).toFixed(1)} Mb`}`;
51
51
  function gapsText(gapBp, runs) {
52
- const gaps = (runs ?? []).filter((r) => r.gap);
53
52
  if (gapBp <= 0) {
54
53
  return "";
55
54
  }
55
+ const gaps = (runs ?? []).filter((r) => r.gap);
56
56
  if (!gaps.some((g) => g.cause)) {
57
57
  return ` \xB7 ${kb(gapBp)} ${OUTSIDE_TEXT}`;
58
58
  }
@@ -477,14 +477,15 @@ function walkRowsTree(bars, frame, o = {}) {
477
477
  })
478
478
  ) : [];
479
479
  const { call } = row;
480
- const text = walkRowReadout(
481
- row,
482
- i === 0 ? void 0 : reference,
483
- unit,
484
- call
485
- );
486
- const at = readoutPlacement(text, along(row.bp), frame.width);
487
- const readouts = frame.readouts ?? true;
480
+ const readout = frame.readouts ?? true ? {
481
+ text: walkRowReadout(
482
+ row,
483
+ i === 0 ? void 0 : reference,
484
+ unit,
485
+ call
486
+ )
487
+ } : void 0;
488
+ const at = readout && readoutPlacement(readout.text, along(row.bp), frame.width);
488
489
  return el(
489
490
  "g",
490
491
  {
@@ -504,7 +505,7 @@ function walkRowsTree(bars, frame, o = {}) {
504
505
  height: barPx + 2 * overhang,
505
506
  fill: callTickInk(call)
506
507
  }),
507
- readouts && el(
508
+ readout && at && el(
508
509
  "text",
509
510
  {
510
511
  x: at.x,
@@ -517,7 +518,7 @@ function walkRowsTree(bars, frame, o = {}) {
517
518
  "paint-order": "stroke",
518
519
  "text-anchor": at.anchor
519
520
  },
520
- text
521
+ readout.text
521
522
  )
522
523
  );
523
524
  };
@@ -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-M75QPZNJ.js";
7
+ } from "./chunk-D3E7AXBB.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
  });
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  pathSteps
3
- } from "./chunk-3LZ334X4.js";
3
+ } from "./chunk-NXBW6KY6.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";
@@ -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,6 +1,6 @@
1
1
  import {
2
2
  walkRows
3
- } from "./chunk-JDZ5GTZT.js";
3
+ } from "./chunk-MEVTV4FI.js";
4
4
  import {
5
5
  ROW_HEIGHT_PX
6
6
  } from "./chunk-CPMHA4W5.js";
@@ -0,0 +1,21 @@
1
+ // src/locus.ts
2
+ var LOCUS = /^\s*(\S+?):\s*([\d,]+)(?:\s*(?:-|\.\.)\s*([\d,]+))?\s*$/;
3
+ function parseLocus(text) {
4
+ const m = LOCUS.exec(text);
5
+ if (!m) {
6
+ return void 0;
7
+ }
8
+ const n = (s) => Number(s.replaceAll(",", ""));
9
+ const start = n(m[2]) - 1;
10
+ const end = m[3] ? n(m[3]) : start + 1;
11
+ return start >= 0 && end > start ? { refName: m[1], start, end } : void 0;
12
+ }
13
+ var grouped = (n) => String(n).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
14
+ function formatLocus(r) {
15
+ return `${r.refName}:${grouped(r.start + 1)}-${grouped(r.end)}`;
16
+ }
17
+
18
+ export {
19
+ parseLocus,
20
+ formatLocus
21
+ };
@@ -2,7 +2,7 @@ import {
2
2
  LIFT_BACKDROP_CSS,
3
3
  computeColorSchemeRange,
4
4
  getNodeColor
5
- } from "./chunk-XSF4RQRP.js";
5
+ } from "./chunk-JGHZ3N34.js";
6
6
  import {
7
7
  abgrToCssRgba
8
8
  } from "./chunk-G2FD7S3C.js";
@@ -3,10 +3,10 @@ import {
3
3
  hasTubeMapPaths,
4
4
  tubeMapLayout,
5
5
  tubeMapReferenceLayout
6
- } from "./chunk-3LZ334X4.js";
6
+ } from "./chunk-NXBW6KY6.js";
7
7
  import {
8
8
  sampleRowLayout
9
- } from "./chunk-GJU6BJJA.js";
9
+ } from "./chunk-XR2HMGAS.js";
10
10
  import {
11
11
  anchoredLayout
12
12
  } from "./chunk-GJLZ2MKE.js";
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-UAFATXYA.js";
16
16
  import {
17
17
  walkRowLayout
18
- } from "./chunk-TZLEHZVC.js";
18
+ } from "./chunk-P5PBJONQ.js";
19
19
  import {
20
20
  isBackbone,
21
21
  isOffReference
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  clampZoom
3
- } from "./chunk-REOWLPH4.js";
3
+ } from "./chunk-7OTWJQGA.js";
4
4
 
5
5
  // src/viewport.ts
6
6
  function axisScaleOf(scale, pixelRows) {
@@ -1,19 +1,19 @@
1
+ import {
2
+ stripGeneGaps,
3
+ walkStripFrame,
4
+ walkStripLabelsTree
5
+ } from "./chunk-4WXFQOYV.js";
1
6
  import {
2
7
  Canvas2DRenderer
3
- } from "./chunk-EJRJAAN7.js";
8
+ } from "./chunk-4DMSPNYV.js";
4
9
  import {
5
10
  svgCanvas
6
11
  } from "./chunk-V4YML3GR.js";
7
- import {
8
- stripGeneGaps,
9
- walkStripFrame,
10
- walkStripLabelsTree
11
- } from "./chunk-I4BYUNJN.js";
12
12
  import {
13
13
  walkRowsKey,
14
14
  walkRowsKeyTree,
15
15
  walkRowsTree
16
- } from "./chunk-VIQL7GZ4.js";
16
+ } from "./chunk-MXLYBDOX.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-QM7KEWWT.js";
37
+ } from "./chunk-TXTSE44S.js";
38
38
  import {
39
39
  axisScaleOf
40
- } from "./chunk-CE6ZIKJX.js";
40
+ } from "./chunk-RLCYVZ4B.js";
41
41
  import {
42
42
  figureScene
43
- } from "./chunk-JQ52XYD2.js";
43
+ } from "./chunk-BVWMVWLJ.js";
44
44
  import {
45
45
  encodingStops
46
- } from "./chunk-GM7M25NW.js";
46
+ } from "./chunk-2XEAITWM.js";
47
47
  import {
48
48
  rangeText
49
- } from "./chunk-D4ZFRBB4.js";
49
+ } from "./chunk-JGQQAUVL.js";
50
50
  import {
51
51
  walkRowLabels
52
- } from "./chunk-TZLEHZVC.js";
52
+ } from "./chunk-P5PBJONQ.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-EFD753MS.js";
58
+ } from "./chunk-3FWNQNF7.js";
59
59
  import {
60
60
  FIT_PADDING,
61
61
  fitTransform
62
- } from "./chunk-REOWLPH4.js";
62
+ } from "./chunk-7OTWJQGA.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"';
@@ -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,
@@ -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;
@@ -3,14 +3,14 @@ import {
3
3
  } from "./chunk-HNWJ4B7S.js";
4
4
  import {
5
5
  wellKnownSample
6
- } from "./chunk-234NFZS4.js";
6
+ } from "./chunk-5ORP7EFJ.js";
7
7
  import {
8
8
  gfaTables
9
9
  } from "./chunk-DZR37KXT.js";
10
10
  import {
11
11
  panSNMatchesPrefix,
12
12
  panSNSample
13
- } from "./chunk-4XWZNPQ2.js";
13
+ } from "./chunk-2JL2JVZ2.js";
14
14
 
15
15
  // src/gbzWindow.ts
16
16
  import { isReverse, nodeId } from "@gmod/gbz-base";
@@ -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,5 +1,5 @@
1
1
  // src/version.ts
2
- var version = "11.4.0";
2
+ var version = "11.6.1";
3
3
 
4
4
  export {
5
5
  version
@@ -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";
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  panSNFields,
11
11
  panSNSample
12
- } from "./chunk-4XWZNPQ2.js";
12
+ } from "./chunk-2JL2JVZ2.js";
13
13
 
14
14
  // src/gfa/graphTables.ts
15
15
  function pLineName(name, start, end) {
@@ -55,7 +55,7 @@ function namesByList(lists, names, listCount, pathNames) {
55
55
  return out;
56
56
  });
57
57
  }
58
- function tableNodeIds({ nodes: n, links: l, walks: w }) {
58
+ function tableNodeIds({ nodes: n, links: l, walks: w }, traversals) {
59
59
  const canonical = new Uint8Array(n.names.length);
60
60
  const claim = (node, reversed) => {
61
61
  if (canonical[node] === 0) {
@@ -68,7 +68,11 @@ function tableNodeIds({ nodes: n, links: l, walks: w }) {
68
68
  }
69
69
  const stepCount = w.offsets[w.names.length] ?? 0;
70
70
  for (let s = 0; s < stepCount; s++) {
71
- claim(w.steps[s], w.reversed[s]);
71
+ const node = w.steps[s];
72
+ claim(node, w.reversed[s]);
73
+ if (traversals) {
74
+ traversals[node]++;
75
+ }
72
76
  }
73
77
  return n.names.map(
74
78
  (segment, i) => `${segment}${canonical[i] === 2 ? "-" : "+"}`
@@ -84,10 +88,7 @@ function graphFromTables({ nodes: n, links: l, walks: w }, name = "Imported GFA"
84
88
  }
85
89
  }
86
90
  const traversals = new Int32Array(count);
87
- for (const node of w.steps.subarray(0, w.offsets[w.names.length])) {
88
- traversals[node]++;
89
- }
90
- const ids = tableNodeIds({ nodes: n, links: l, walks: w });
91
+ const ids = tableNodeIds({ nodes: n, links: l, walks: w }, traversals);
91
92
  const nodes = [];
92
93
  for (let i = 0; i < declared; i++) {
93
94
  const ref = n.refs[i];
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  pathSteps
3
- } from "./chunk-3LZ334X4.js";
3
+ } from "./chunk-NXBW6KY6.js";
4
4
  import {
5
5
  pathOrigin
6
- } from "./chunk-B5X2RLJG.js";
6
+ } from "./chunk-3YBP46PB.js";
7
7
  import {
8
8
  pushTo
9
9
  } from "./chunk-BSOZW3FC.js";
@@ -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) {