@jbrowse/plugin-alignments 3.6.5 → 3.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 (241) hide show
  1. package/dist/AlignmentsFeatureDetail/stateModelFactory.d.ts +4 -4
  2. package/dist/CramAdapter/CramAdapter.js +1 -1
  3. package/dist/CramAdapter/CramSlightlyLazyFeature.js +8 -7
  4. package/dist/CramAdapter/{util.js → readFeaturesToCIGAR.js} +4 -5
  5. package/dist/CramAdapter/readFeaturesToMismatches.d.ts +5 -0
  6. package/dist/CramAdapter/readFeaturesToMismatches.js +106 -0
  7. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +6 -2
  8. package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +17 -2
  9. package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +2 -2
  10. package/dist/LinearPileupDisplay/components/GroupByDialog.js +4 -4
  11. package/dist/LinearPileupDisplay/components/SetModificationThresholdDialog.d.ts +10 -0
  12. package/dist/LinearPileupDisplay/components/SetModificationThresholdDialog.js +39 -0
  13. package/dist/LinearPileupDisplay/doAfterAttach.d.ts +1 -0
  14. package/dist/LinearPileupDisplay/doAfterAttach.js +3 -2
  15. package/dist/LinearPileupDisplay/model.d.ts +20 -2
  16. package/dist/LinearPileupDisplay/model.js +39 -4
  17. package/dist/LinearReadArcsDisplay/index.js +1 -1
  18. package/dist/LinearReadArcsDisplay/model.d.ts +23 -30
  19. package/dist/LinearReadArcsDisplay/model.js +5 -86
  20. package/dist/LinearReadCloudDisplay/components/ReactComponent.js +84 -2
  21. package/dist/LinearReadCloudDisplay/components/SetFeatureHeightDialog.d.ts +10 -0
  22. package/dist/LinearReadCloudDisplay/components/SetFeatureHeightDialog.js +26 -0
  23. package/dist/LinearReadCloudDisplay/configSchema.d.ts +7 -0
  24. package/dist/LinearReadCloudDisplay/configSchema.js +5 -0
  25. package/dist/LinearReadCloudDisplay/drawFeatsAbstract.js +13 -0
  26. package/dist/LinearReadCloudDisplay/drawFeatsCloud.js +24 -0
  27. package/dist/LinearReadCloudDisplay/drawFeatsCommon.d.ts +23 -0
  28. package/dist/LinearReadCloudDisplay/drawFeatsCommon.js +198 -0
  29. package/dist/LinearReadCloudDisplay/drawFeatsStack.d.ts +2 -0
  30. package/dist/LinearReadCloudDisplay/drawFeatsStack.js +36 -0
  31. package/dist/LinearReadCloudDisplay/index.js +1 -1
  32. package/dist/LinearReadCloudDisplay/model.d.ts +51 -31
  33. package/dist/LinearReadCloudDisplay/model.js +93 -78
  34. package/dist/LinearSNPCoverageDisplay/components/TooltipContents.d.ts +3 -0
  35. package/dist/LinearSNPCoverageDisplay/components/TooltipContents.js +148 -19
  36. package/dist/LinearSNPCoverageDisplay/model.js +14 -3
  37. package/dist/MismatchParser/cigarToMismatches.js +1 -0
  38. package/dist/ModificationParser/detectSimplexModifications.d.ts +4 -0
  39. package/dist/ModificationParser/detectSimplexModifications.js +20 -0
  40. package/dist/ModificationParser/getModPositions.d.ts +1 -1
  41. package/dist/ModificationParser/getModPositions.js +13 -16
  42. package/dist/PileupRPC/methods/GetVisibleModifications.d.ts +4 -1
  43. package/dist/PileupRPC/methods/GetVisibleModifications.js +16 -3
  44. package/dist/PileupRenderer/PileupRenderer.d.ts +6 -1
  45. package/dist/PileupRenderer/PileupRenderer.js +11 -14
  46. package/dist/PileupRenderer/components/PileupRendering.d.ts +8 -15
  47. package/dist/PileupRenderer/components/PileupRendering.js +18 -2
  48. package/dist/PileupRenderer/makeImageData.d.ts +5 -2
  49. package/dist/PileupRenderer/makeImageData.js +37 -6
  50. package/dist/PileupRenderer/{getAlignmentShapeColor.js → renderers/getAlignmentShapeColor.js} +2 -2
  51. package/{esm/PileupRenderer → dist/PileupRenderer/renderers}/renderAlignment.d.ts +6 -3
  52. package/dist/PileupRenderer/{renderAlignment.js → renderers/renderAlignment.js} +12 -3
  53. package/{esm/PileupRenderer → dist/PileupRenderer/renderers}/renderAlignmentShape.d.ts +2 -2
  54. package/dist/PileupRenderer/{renderAlignmentShape.js → renderers/renderAlignmentShape.js} +1 -1
  55. package/dist/PileupRenderer/{renderMethylation.d.ts → renderers/renderMethylation.d.ts} +2 -2
  56. package/dist/PileupRenderer/{renderMethylation.js → renderers/renderMethylation.js} +2 -2
  57. package/dist/PileupRenderer/{renderMismatches.d.ts → renderers/renderMismatches.d.ts} +6 -3
  58. package/dist/PileupRenderer/{renderMismatches.js → renderers/renderMismatches.js} +29 -5
  59. package/dist/PileupRenderer/{renderModifications.d.ts → renderers/renderModifications.d.ts} +6 -3
  60. package/dist/PileupRenderer/renderers/renderModifications.js +84 -0
  61. package/dist/PileupRenderer/{renderPerBaseLettering.d.ts → renderers/renderPerBaseLettering.d.ts} +1 -1
  62. package/dist/PileupRenderer/{renderPerBaseLettering.js → renderers/renderPerBaseLettering.js} +1 -1
  63. package/{esm/PileupRenderer → dist/PileupRenderer/renderers}/renderPerBaseQuality.d.ts +1 -1
  64. package/dist/PileupRenderer/{renderPerBaseQuality.js → renderers/renderPerBaseQuality.js} +1 -1
  65. package/dist/PileupRenderer/{renderSoftClipping.d.ts → renderers/renderSoftClipping.d.ts} +2 -2
  66. package/dist/PileupRenderer/{renderSoftClipping.js → renderers/renderSoftClipping.js} +2 -2
  67. package/dist/PileupRenderer/types.d.ts +6 -0
  68. package/dist/SNPCoverageAdapter/generateCoverageBins.js +5 -4
  69. package/dist/SNPCoverageAdapter/processModifications.js +14 -4
  70. package/dist/SNPCoverageRenderer/makeImage.js +44 -33
  71. package/dist/SNPCoverageRenderer/types.d.ts +1 -0
  72. package/dist/shared/LinearReadDisplayBaseMixin.d.ts +24 -0
  73. package/dist/shared/LinearReadDisplayBaseMixin.js +50 -0
  74. package/dist/shared/LinearReadDisplayWithLayoutMixin.d.ts +11 -0
  75. package/dist/shared/LinearReadDisplayWithLayoutMixin.js +24 -0
  76. package/dist/shared/LinearReadDisplayWithPairFiltersMixin.d.ts +11 -0
  77. package/dist/shared/LinearReadDisplayWithPairFiltersMixin.js +27 -0
  78. package/dist/shared/afterAttach.js +3 -2
  79. package/dist/shared/chainToSimpleFeature.d.ts +3 -0
  80. package/dist/shared/chainToSimpleFeature.js +43 -0
  81. package/dist/shared/chevron.d.ts +1 -0
  82. package/dist/shared/chevron.js +27 -0
  83. package/dist/shared/color.d.ts +43 -6
  84. package/dist/shared/color.js +101 -22
  85. package/dist/shared/components/BaseDisplayComponent.d.ts +12 -3
  86. package/dist/shared/components/BaseDisplayComponent.js +2 -2
  87. package/dist/shared/components/SetFeatureHeightDialog.d.ts +10 -0
  88. package/dist/shared/components/SetFeatureHeightDialog.js +26 -0
  89. package/dist/shared/components/SetMaxHeightDialog.d.ts +8 -0
  90. package/dist/shared/components/SetMaxHeightDialog.js +28 -0
  91. package/dist/shared/drawLongReadChains.d.ts +24 -0
  92. package/dist/shared/drawLongReadChains.js +104 -0
  93. package/dist/shared/drawPairChains.d.ts +24 -0
  94. package/dist/shared/drawPairChains.js +94 -0
  95. package/dist/shared/flatbushType.d.ts +12 -0
  96. package/dist/shared/flatbushType.js +2 -0
  97. package/dist/shared/getUniqueModifications.d.ts +4 -1
  98. package/dist/shared/menuItems.d.ts +23 -0
  99. package/dist/shared/menuItems.js +89 -0
  100. package/dist/shared/modificationData.d.ts +6 -0
  101. package/dist/shared/modificationData.js +22 -0
  102. package/dist/shared/primaryStrand.d.ts +3 -0
  103. package/dist/shared/primaryStrand.js +24 -0
  104. package/dist/shared/types.d.ts +2 -0
  105. package/dist/shared/util.d.ts +2 -0
  106. package/dist/shared/util.js +6 -1
  107. package/dist/util.d.ts +1 -6
  108. package/dist/util.js +4 -15
  109. package/esm/AlignmentsFeatureDetail/stateModelFactory.d.ts +4 -4
  110. package/esm/CramAdapter/CramAdapter.js +1 -1
  111. package/esm/CramAdapter/CramSlightlyLazyFeature.js +2 -1
  112. package/esm/CramAdapter/{util.js → readFeaturesToCIGAR.js} +4 -5
  113. package/esm/CramAdapter/readFeaturesToMismatches.d.ts +5 -0
  114. package/esm/CramAdapter/readFeaturesToMismatches.js +103 -0
  115. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +6 -2
  116. package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +17 -2
  117. package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +2 -2
  118. package/esm/LinearPileupDisplay/components/GroupByDialog.js +4 -4
  119. package/esm/LinearPileupDisplay/components/SetModificationThresholdDialog.d.ts +10 -0
  120. package/esm/LinearPileupDisplay/components/SetModificationThresholdDialog.js +37 -0
  121. package/esm/LinearPileupDisplay/doAfterAttach.d.ts +1 -0
  122. package/esm/LinearPileupDisplay/doAfterAttach.js +3 -2
  123. package/esm/LinearPileupDisplay/model.d.ts +20 -2
  124. package/esm/LinearPileupDisplay/model.js +39 -4
  125. package/esm/LinearReadArcsDisplay/index.js +1 -1
  126. package/esm/LinearReadArcsDisplay/model.d.ts +23 -30
  127. package/esm/LinearReadArcsDisplay/model.js +5 -83
  128. package/esm/LinearReadCloudDisplay/components/ReactComponent.js +86 -4
  129. package/esm/LinearReadCloudDisplay/components/SetFeatureHeightDialog.d.ts +10 -0
  130. package/esm/LinearReadCloudDisplay/components/SetFeatureHeightDialog.js +24 -0
  131. package/esm/LinearReadCloudDisplay/configSchema.d.ts +7 -0
  132. package/esm/LinearReadCloudDisplay/configSchema.js +5 -0
  133. package/esm/LinearReadCloudDisplay/drawFeatsAbstract.d.ts +2 -0
  134. package/esm/LinearReadCloudDisplay/drawFeatsAbstract.js +10 -0
  135. package/esm/LinearReadCloudDisplay/drawFeatsCloud.d.ts +2 -0
  136. package/esm/LinearReadCloudDisplay/drawFeatsCloud.js +21 -0
  137. package/esm/LinearReadCloudDisplay/drawFeatsCommon.d.ts +23 -0
  138. package/esm/LinearReadCloudDisplay/drawFeatsCommon.js +187 -0
  139. package/esm/LinearReadCloudDisplay/drawFeatsStack.d.ts +2 -0
  140. package/esm/LinearReadCloudDisplay/drawFeatsStack.js +30 -0
  141. package/esm/LinearReadCloudDisplay/index.js +1 -1
  142. package/esm/LinearReadCloudDisplay/model.d.ts +51 -31
  143. package/esm/LinearReadCloudDisplay/model.js +94 -76
  144. package/esm/LinearSNPCoverageDisplay/components/TooltipContents.d.ts +3 -0
  145. package/esm/LinearSNPCoverageDisplay/components/TooltipContents.js +149 -20
  146. package/esm/LinearSNPCoverageDisplay/model.js +14 -3
  147. package/esm/MismatchParser/cigarToMismatches.js +1 -0
  148. package/esm/ModificationParser/detectSimplexModifications.d.ts +4 -0
  149. package/esm/ModificationParser/detectSimplexModifications.js +17 -0
  150. package/esm/ModificationParser/getModPositions.d.ts +1 -1
  151. package/esm/ModificationParser/getModPositions.js +13 -16
  152. package/esm/PileupRPC/methods/GetVisibleModifications.d.ts +4 -1
  153. package/esm/PileupRPC/methods/GetVisibleModifications.js +16 -3
  154. package/esm/PileupRenderer/PileupRenderer.d.ts +6 -1
  155. package/esm/PileupRenderer/PileupRenderer.js +11 -14
  156. package/esm/PileupRenderer/components/PileupRendering.d.ts +8 -15
  157. package/esm/PileupRenderer/components/PileupRendering.js +16 -3
  158. package/esm/PileupRenderer/makeImageData.d.ts +5 -2
  159. package/esm/PileupRenderer/makeImageData.js +34 -6
  160. package/esm/PileupRenderer/{getAlignmentShapeColor.js → renderers/getAlignmentShapeColor.js} +2 -2
  161. package/{dist/PileupRenderer → esm/PileupRenderer/renderers}/renderAlignment.d.ts +6 -3
  162. package/esm/PileupRenderer/{renderAlignment.js → renderers/renderAlignment.js} +12 -3
  163. package/{dist/PileupRenderer → esm/PileupRenderer/renderers}/renderAlignmentShape.d.ts +2 -2
  164. package/esm/PileupRenderer/{renderAlignmentShape.js → renderers/renderAlignmentShape.js} +1 -1
  165. package/esm/PileupRenderer/{renderMethylation.d.ts → renderers/renderMethylation.d.ts} +2 -2
  166. package/esm/PileupRenderer/{renderMethylation.js → renderers/renderMethylation.js} +2 -2
  167. package/esm/PileupRenderer/{renderMismatches.d.ts → renderers/renderMismatches.d.ts} +6 -3
  168. package/esm/PileupRenderer/{renderMismatches.js → renderers/renderMismatches.js} +29 -5
  169. package/esm/PileupRenderer/{renderModifications.d.ts → renderers/renderModifications.d.ts} +6 -3
  170. package/esm/PileupRenderer/renderers/renderModifications.js +81 -0
  171. package/esm/PileupRenderer/{renderPerBaseLettering.d.ts → renderers/renderPerBaseLettering.d.ts} +1 -1
  172. package/esm/PileupRenderer/{renderPerBaseLettering.js → renderers/renderPerBaseLettering.js} +1 -1
  173. package/{dist/PileupRenderer → esm/PileupRenderer/renderers}/renderPerBaseQuality.d.ts +1 -1
  174. package/esm/PileupRenderer/{renderPerBaseQuality.js → renderers/renderPerBaseQuality.js} +1 -1
  175. package/esm/PileupRenderer/{renderSoftClipping.d.ts → renderers/renderSoftClipping.d.ts} +2 -2
  176. package/esm/PileupRenderer/{renderSoftClipping.js → renderers/renderSoftClipping.js} +2 -2
  177. package/esm/PileupRenderer/types.d.ts +6 -0
  178. package/esm/SNPCoverageAdapter/generateCoverageBins.js +5 -4
  179. package/esm/SNPCoverageAdapter/processModifications.js +14 -4
  180. package/esm/SNPCoverageRenderer/makeImage.js +44 -33
  181. package/esm/SNPCoverageRenderer/types.d.ts +1 -0
  182. package/esm/shared/LinearReadDisplayBaseMixin.d.ts +24 -0
  183. package/esm/shared/LinearReadDisplayBaseMixin.js +47 -0
  184. package/esm/shared/LinearReadDisplayWithLayoutMixin.d.ts +11 -0
  185. package/esm/shared/LinearReadDisplayWithLayoutMixin.js +21 -0
  186. package/esm/shared/LinearReadDisplayWithPairFiltersMixin.d.ts +11 -0
  187. package/esm/shared/LinearReadDisplayWithPairFiltersMixin.js +24 -0
  188. package/esm/shared/afterAttach.js +3 -2
  189. package/esm/shared/chainToSimpleFeature.d.ts +3 -0
  190. package/esm/shared/chainToSimpleFeature.js +40 -0
  191. package/esm/shared/chevron.d.ts +1 -0
  192. package/esm/shared/chevron.js +24 -0
  193. package/esm/shared/color.d.ts +43 -6
  194. package/esm/shared/color.js +96 -20
  195. package/esm/shared/components/BaseDisplayComponent.d.ts +12 -3
  196. package/esm/shared/components/BaseDisplayComponent.js +2 -2
  197. package/esm/shared/components/SetFeatureHeightDialog.d.ts +10 -0
  198. package/esm/shared/components/SetFeatureHeightDialog.js +24 -0
  199. package/esm/shared/components/SetMaxHeightDialog.d.ts +8 -0
  200. package/esm/shared/components/SetMaxHeightDialog.js +26 -0
  201. package/esm/shared/drawLongReadChains.d.ts +24 -0
  202. package/esm/shared/drawLongReadChains.js +101 -0
  203. package/esm/shared/drawPairChains.d.ts +24 -0
  204. package/esm/shared/drawPairChains.js +91 -0
  205. package/esm/shared/flatbushType.d.ts +12 -0
  206. package/esm/shared/flatbushType.js +1 -0
  207. package/esm/shared/getUniqueModifications.d.ts +4 -1
  208. package/esm/shared/menuItems.d.ts +23 -0
  209. package/esm/shared/menuItems.js +49 -0
  210. package/esm/shared/modificationData.d.ts +6 -0
  211. package/esm/shared/modificationData.js +18 -0
  212. package/esm/shared/primaryStrand.d.ts +3 -0
  213. package/esm/shared/primaryStrand.js +20 -0
  214. package/esm/shared/types.d.ts +2 -0
  215. package/esm/shared/util.d.ts +2 -0
  216. package/esm/shared/util.js +4 -0
  217. package/esm/util.d.ts +1 -6
  218. package/esm/util.js +2 -14
  219. package/package.json +6 -6
  220. package/dist/LinearReadCloudDisplay/drawFeats.js +0 -27
  221. package/dist/LinearReadCloudDisplay/drawLongReadChains.d.ts +0 -11
  222. package/dist/LinearReadCloudDisplay/drawLongReadChains.js +0 -64
  223. package/dist/LinearReadCloudDisplay/drawPairChains.d.ts +0 -17
  224. package/dist/LinearReadCloudDisplay/drawPairChains.js +0 -94
  225. package/dist/PileupRenderer/renderModifications.js +0 -44
  226. package/esm/LinearReadCloudDisplay/drawFeats.js +0 -24
  227. package/esm/LinearReadCloudDisplay/drawLongReadChains.d.ts +0 -11
  228. package/esm/LinearReadCloudDisplay/drawLongReadChains.js +0 -61
  229. package/esm/LinearReadCloudDisplay/drawPairChains.d.ts +0 -17
  230. package/esm/LinearReadCloudDisplay/drawPairChains.js +0 -90
  231. package/esm/PileupRenderer/renderModifications.js +0 -41
  232. /package/dist/CramAdapter/{util.d.ts → readFeaturesToCIGAR.d.ts} +0 -0
  233. /package/dist/LinearReadCloudDisplay/{drawFeats.d.ts → drawFeatsAbstract.d.ts} +0 -0
  234. /package/{esm/LinearReadCloudDisplay/drawFeats.d.ts → dist/LinearReadCloudDisplay/drawFeatsCloud.d.ts} +0 -0
  235. /package/dist/PileupRenderer/{getAlignmentShapeColor.d.ts → renderers/getAlignmentShapeColor.d.ts} +0 -0
  236. /package/dist/{LinearReadCloudDisplay/util.d.ts → shared/canvasUtils.d.ts} +0 -0
  237. /package/dist/{LinearReadCloudDisplay/util.js → shared/canvasUtils.js} +0 -0
  238. /package/esm/CramAdapter/{util.d.ts → readFeaturesToCIGAR.d.ts} +0 -0
  239. /package/esm/PileupRenderer/{getAlignmentShapeColor.d.ts → renderers/getAlignmentShapeColor.d.ts} +0 -0
  240. /package/esm/{LinearReadCloudDisplay/util.d.ts → shared/canvasUtils.d.ts} +0 -0
  241. /package/esm/{LinearReadCloudDisplay/util.js → shared/canvasUtils.js} +0 -0
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.filterChains = filterChains;
7
+ exports.computeChainBounds = computeChainBounds;
8
+ exports.sortComputedChains = sortComputedChains;
9
+ exports.buildFlatbushIndex = buildFlatbushIndex;
10
+ exports.addChainMouseoverRects = addChainMouseoverRects;
11
+ exports.drawFeatsCommon = drawFeatsCommon;
12
+ const configuration_1 = require("@jbrowse/core/configuration");
13
+ const util_1 = require("@jbrowse/core/util");
14
+ const flatbush_1 = __importDefault(require("@jbrowse/core/util/flatbush"));
15
+ const color_1 = require("../shared/color");
16
+ const drawLongReadChains_1 = require("../shared/drawLongReadChains");
17
+ const drawPairChains_1 = require("../shared/drawPairChains");
18
+ const util_2 = require("../shared/util");
19
+ function filterChains(chains, drawSingletons, drawProperPairs, type, chainData) {
20
+ const filtered = [];
21
+ for (const chain_ of chains) {
22
+ const chain = chain_;
23
+ if (!drawSingletons && chain.length === 1) {
24
+ continue;
25
+ }
26
+ let isPairedEnd = false;
27
+ for (const element of chain) {
28
+ if (element.flags & 1) {
29
+ isPairedEnd = true;
30
+ break;
31
+ }
32
+ }
33
+ if (!drawProperPairs && isPairedEnd) {
34
+ const nonSupplementary = [];
35
+ for (const element of chain) {
36
+ if (!(element.flags & 2048)) {
37
+ nonSupplementary.push(element);
38
+ }
39
+ }
40
+ if (nonSupplementary.length === 2) {
41
+ const v0 = nonSupplementary[0];
42
+ const v1 = nonSupplementary[1];
43
+ const pairType = (0, color_1.getPairedType)({
44
+ type,
45
+ f1: v0,
46
+ f2: v1,
47
+ stats: chainData.stats,
48
+ });
49
+ if (pairType === color_1.PairType.PROPER_PAIR) {
50
+ continue;
51
+ }
52
+ }
53
+ }
54
+ filtered.push(chain);
55
+ }
56
+ return filtered;
57
+ }
58
+ function computeChainBounds(chains, view, asm) {
59
+ var _a, _b;
60
+ const computedChains = [];
61
+ for (const chain_ of chains) {
62
+ const chain = chain_;
63
+ let minX = Number.MAX_VALUE;
64
+ let maxX = Number.MIN_VALUE;
65
+ let chainId = '';
66
+ let tlenDistance = 0;
67
+ const chainLength = chain.length;
68
+ for (let j = 0; j < chainLength; j++) {
69
+ const elt = chain[j];
70
+ const refName = asm.getCanonicalRefName(elt.refName) || elt.refName;
71
+ const rs = (_a = view.bpToPx({ refName, coord: elt.start })) === null || _a === void 0 ? void 0 : _a.offsetPx;
72
+ const re = (_b = view.bpToPx({ refName, coord: elt.end })) === null || _b === void 0 ? void 0 : _b.offsetPx;
73
+ if (rs !== undefined && re !== undefined) {
74
+ minX = Math.min(minX, rs);
75
+ maxX = Math.max(maxX, re);
76
+ }
77
+ if (!chainId) {
78
+ chainId = elt.id;
79
+ }
80
+ if (chainLength > 1 && tlenDistance === 0 && elt.tlen) {
81
+ tlenDistance = Math.abs(elt.tlen);
82
+ }
83
+ }
84
+ const distance = tlenDistance > 0 ? tlenDistance : Math.abs(maxX - minX);
85
+ computedChains.push({
86
+ distance,
87
+ minX,
88
+ maxX,
89
+ chain,
90
+ id: chainId,
91
+ });
92
+ }
93
+ return computedChains;
94
+ }
95
+ function sortComputedChains(computedChains) {
96
+ computedChains.sort((a, b) => {
97
+ const aIsSingleton = a.chain.length === 1 ? 1 : 0;
98
+ const bIsSingleton = b.chain.length === 1 ? 1 : 0;
99
+ if (bIsSingleton !== aIsSingleton) {
100
+ return bIsSingleton - aIsSingleton;
101
+ }
102
+ return a.distance - b.distance;
103
+ });
104
+ }
105
+ function buildFlatbushIndex(featuresForFlatbush, self) {
106
+ const finalFlatbush = new flatbush_1.default(Math.max(featuresForFlatbush.length, 1));
107
+ const length = featuresForFlatbush.length;
108
+ if (length) {
109
+ for (let i = 0; i < length; i++) {
110
+ const { x1, y1, x2, y2 } = featuresForFlatbush[i];
111
+ finalFlatbush.add(x1, y1, x2, y2);
112
+ }
113
+ }
114
+ else {
115
+ finalFlatbush.add(0, 0);
116
+ }
117
+ finalFlatbush.finish();
118
+ self.setFeatureLayout(finalFlatbush);
119
+ self.setFeaturesForFlatbush(featuresForFlatbush);
120
+ }
121
+ function addChainMouseoverRects(computedChains, chainYOffsets, featureHeight, view, featuresForFlatbush) {
122
+ for (const computedChain of computedChains) {
123
+ const { id, chain, minX, maxX } = computedChain;
124
+ const chainY = chainYOffsets.get(id);
125
+ if (chainY === undefined) {
126
+ continue;
127
+ }
128
+ const chainMinXPx = minX - view.offsetPx;
129
+ const chainMaxXPx = maxX - view.offsetPx;
130
+ if (chain.length > 0) {
131
+ featuresForFlatbush.push({
132
+ x1: chainMinXPx,
133
+ y1: chainY,
134
+ x2: chainMaxXPx,
135
+ y2: chainY + featureHeight,
136
+ data: chain[0],
137
+ chainId: id,
138
+ chainMinX: chainMinXPx,
139
+ chainMaxX: chainMaxXPx,
140
+ chain,
141
+ });
142
+ }
143
+ }
144
+ }
145
+ function drawFeatsCommon(self, ctx, calculateYOffsets) {
146
+ var _a, _b;
147
+ const { chainData } = self;
148
+ if (!chainData) {
149
+ return;
150
+ }
151
+ const { assemblyManager } = (0, util_1.getSession)(self);
152
+ const view = (0, util_1.getContainingView)(self);
153
+ const assemblyName = view.assemblyNames[0];
154
+ const asm = assemblyManager.get(assemblyName);
155
+ if (!asm) {
156
+ return;
157
+ }
158
+ const featureHeight = (_a = self.featureHeight) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'featureHeight');
159
+ const type = ((_b = self.colorBy) === null || _b === void 0 ? void 0 : _b.type) || 'insertSizeAndOrientation';
160
+ const drawSingletons = self.drawSingletons;
161
+ const drawProperPairs = self.drawProperPairs;
162
+ const { chains } = chainData;
163
+ const filteredChains = filterChains(chains, drawSingletons, drawProperPairs, type, chainData);
164
+ const computedChains = computeChainBounds(filteredChains, view, asm);
165
+ sortComputedChains(computedChains);
166
+ const { chainYOffsets, layoutHeight } = calculateYOffsets(computedChains, self, view, featureHeight);
167
+ const featuresForFlatbush = [];
168
+ const renderChevrons = (0, util_2.shouldRenderChevrons)(view.bpPerPx, featureHeight);
169
+ (0, drawPairChains_1.drawPairChains)({
170
+ ctx,
171
+ type,
172
+ chainData,
173
+ view,
174
+ asm,
175
+ chainYOffsets,
176
+ renderChevrons,
177
+ featureHeight,
178
+ featuresForFlatbush,
179
+ computedChains,
180
+ });
181
+ (0, drawLongReadChains_1.drawLongReadChains)({
182
+ ctx,
183
+ chainData,
184
+ view,
185
+ asm,
186
+ chainYOffsets,
187
+ renderChevrons,
188
+ featureHeight,
189
+ featuresForFlatbush,
190
+ computedChains,
191
+ flipStrandLongReadChains: self.flipStrandLongReadChains,
192
+ });
193
+ addChainMouseoverRects(computedChains, chainYOffsets, featureHeight, view, featuresForFlatbush);
194
+ buildFlatbushIndex(featuresForFlatbush, self);
195
+ if (layoutHeight !== undefined) {
196
+ self.setLayoutHeight(layoutHeight);
197
+ }
198
+ }
@@ -0,0 +1,2 @@
1
+ import type { LinearReadCloudDisplayModel } from './model';
2
+ export declare function drawFeats(self: LinearReadCloudDisplayModel, ctx: CanvasRenderingContext2D): void;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.drawFeats = drawFeats;
7
+ const GranularRectLayout_1 = __importDefault(require("@jbrowse/core/util/layouts/GranularRectLayout"));
8
+ const drawFeatsCommon_1 = require("./drawFeatsCommon");
9
+ function calculateStackYOffsets(computedChains, self, _view, featureHeight) {
10
+ var _a, _b;
11
+ const noSpacing = (_a = self.noSpacing) !== null && _a !== void 0 ? _a : false;
12
+ const maxHeight = (_b = self.trackMaxHeight) !== null && _b !== void 0 ? _b : 1200;
13
+ const layout = new GranularRectLayout_1.default({
14
+ pitchX: 1,
15
+ pitchY: 1,
16
+ maxHeight,
17
+ });
18
+ const layoutPadding = noSpacing ? 0 : 1;
19
+ for (const { id, minX, maxX, chain } of computedChains) {
20
+ layout.addRect(id, minX, maxX, featureHeight + layoutPadding, {
21
+ feat: chain[0],
22
+ fill: 'transparent',
23
+ stroke: 'transparent',
24
+ distance: maxX - minX,
25
+ });
26
+ }
27
+ const chainYOffsets = new Map();
28
+ for (const [id, rect] of layout.getRectangles()) {
29
+ const top = rect[1];
30
+ chainYOffsets.set(id, top);
31
+ }
32
+ return { chainYOffsets, layoutHeight: layout.getTotalHeight() };
33
+ }
34
+ function drawFeats(self, ctx) {
35
+ (0, drawFeatsCommon_1.drawFeatsCommon)(self, ctx, calculateStackYOffsets);
36
+ }
@@ -46,7 +46,7 @@ function register(pluginManager) {
46
46
  const configSchema = (0, configSchema_1.default)(pluginManager);
47
47
  return new DisplayType_1.default({
48
48
  name: 'LinearReadCloudDisplay',
49
- displayName: 'Read cloud display',
49
+ displayName: 'Linked reads display',
50
50
  configSchema,
51
51
  stateModel: (0, model_1.default)(configSchema),
52
52
  trackType: 'AlignmentsTrack',
@@ -1,6 +1,5 @@
1
1
  import type React from 'react';
2
- import type { ChainData } from '../shared/fetchChains';
3
- import type { ColorBy, FilterBy } from '../shared/types';
2
+ import type { ReducedFeature } from '../shared/fetchChains';
4
3
  import type { AnyConfigurationSchemaType } from '@jbrowse/core/configuration';
5
4
  import type { Instance } from 'mobx-state-tree';
6
5
  declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): import("mobx-state-tree").IModelType<{
@@ -12,12 +11,20 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
12
11
  } & {
13
12
  userBpPerPxLimit: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
14
13
  userByteSizeLimit: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
14
+ } & {
15
+ filterBySetting: import("mobx-state-tree").IType<import("../shared/types").FilterBy | undefined, import("../shared/types").FilterBy | undefined, import("../shared/types").FilterBy | undefined>;
16
+ colorBySetting: import("mobx-state-tree").IType<import("../shared/types").ColorBy | undefined, import("../shared/types").ColorBy | undefined, import("../shared/types").ColorBy | undefined>;
17
+ } & {
18
+ drawSingletons: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
19
+ drawProperPairs: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
20
+ flipStrandLongReadChains: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
21
+ featureHeight: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
15
22
  } & {
16
23
  type: import("mobx-state-tree").ISimpleType<"LinearReadCloudDisplay">;
17
24
  configuration: AnyConfigurationSchemaType;
18
- filterBySetting: import("mobx-state-tree").IType<FilterBy | undefined, FilterBy | undefined, FilterBy | undefined>;
19
- colorBySetting: import("mobx-state-tree").IType<ColorBy | undefined, ColorBy | undefined, ColorBy | undefined>;
20
- drawSingletons: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
25
+ drawCloud: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
26
+ noSpacing: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<boolean>>;
27
+ trackMaxHeight: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
21
28
  }, {
22
29
  rendererTypeName: string;
23
30
  error: unknown;
@@ -112,57 +119,70 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
112
119
  regionCannotBeRendered(_region: import("@jbrowse/core/util").Region): import("react/jsx-runtime").JSX.Element | null;
113
120
  } & {
114
121
  loading: boolean;
115
- chainData: ChainData | undefined;
122
+ chainData: import("../shared/fetchChains").ChainData | undefined;
116
123
  lastDrawnOffsetPx: number | undefined;
117
124
  lastDrawnBpPerPx: number;
118
125
  ref: HTMLCanvasElement | null;
119
126
  } & {
120
- readonly colorBy: any;
121
- readonly filterBy: any;
122
- } & {
123
- setDrawSingletons(f: boolean): void;
124
127
  setLastDrawnOffsetPx(n: number): void;
125
128
  setLastDrawnBpPerPx(n: number): void;
126
129
  setLoading(f: boolean): void;
127
- reload(): void;
128
130
  setRef(ref: HTMLCanvasElement | null): void;
129
131
  setColorScheme(colorBy: {
130
132
  type: string;
131
133
  }): void;
132
- setChainData(args: ChainData): void;
133
- setFilterBy(filter: FilterBy): void;
134
+ setChainData(args: import("../shared/fetchChains").ChainData): void;
135
+ setFilterBy(filter: import("../shared/types").FilterBy): void;
134
136
  } & {
135
137
  readonly drawn: boolean;
138
+ } & {
139
+ featureLayout: import("@jbrowse/core/util/flatbush").default | undefined;
140
+ mouseoverRef: HTMLCanvasElement | null;
141
+ featuresForFlatbush: import("../shared/flatbushType").FlatbushEntry[];
142
+ } & {
143
+ setFeatureLayout(layout: import("@jbrowse/core/util/flatbush").default): void;
144
+ setMouseoverRef(ref: HTMLCanvasElement | null): void;
145
+ setFeaturesForFlatbush(features: import("../shared/flatbushType").FlatbushEntry[]): void;
146
+ } & {
147
+ setDrawSingletons(f: boolean): void;
148
+ setDrawProperPairs(f: boolean): void;
149
+ setFlipStrandLongReadChains(f: boolean): void;
150
+ setFeatureHeight(n?: number): void;
151
+ } & {
152
+ layoutHeight: number;
153
+ } & {
154
+ readonly colorBy: any;
155
+ readonly filterBy: any;
156
+ readonly featureHeightSetting: any;
157
+ } & {
158
+ reload(): void;
159
+ setNoSpacing(flag?: boolean): void;
160
+ setMaxHeight(n?: number): void;
161
+ setLayoutHeight(n: number): void;
162
+ selectFeature(chain: ReducedFeature[]): void;
163
+ setDrawCloud(b: boolean): void;
136
164
  } & {
137
165
  renderProps(): any;
138
166
  trackMenuItems(): (import("@jbrowse/core/ui").MenuDivider | import("@jbrowse/core/ui").MenuSubHeader | import("@jbrowse/core/ui").NormalMenuItem | import("@jbrowse/core/ui").CheckboxMenuItem | import("@jbrowse/core/ui").RadioMenuItem | import("@jbrowse/core/ui").SubMenuItem | {
139
- label: string;
140
- type: string;
141
- checked: boolean;
142
- onClick: () => void;
143
- icon?: undefined;
144
- subMenu?: undefined;
145
- } | {
146
167
  label: string;
147
168
  icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
148
169
  muiName: string;
149
170
  };
150
- onClick: () => void;
151
- type?: undefined;
152
- checked?: undefined;
153
- subMenu?: undefined;
171
+ subMenu: {
172
+ label: string;
173
+ onClick: () => void;
174
+ }[];
154
175
  } | {
155
176
  label: string;
156
177
  icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
157
178
  muiName: string;
158
179
  };
159
- subMenu: {
160
- label: string;
161
- onClick: () => void;
162
- }[];
163
- type?: undefined;
164
- checked?: undefined;
165
- onClick?: undefined;
180
+ onClick: () => void;
181
+ } | {
182
+ label: string;
183
+ type: string;
184
+ checked: boolean;
185
+ onClick: () => void;
166
186
  })[];
167
187
  renderSvg(opts: {
168
188
  rasterizeLayers?: boolean;
@@ -32,34 +32,30 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
35
  Object.defineProperty(exports, "__esModule", { value: true });
39
36
  const react_1 = require("react");
40
37
  const configuration_1 = require("@jbrowse/core/configuration");
41
38
  const pluggableElementTypes_1 = require("@jbrowse/core/pluggableElementTypes");
42
39
  const util_1 = require("@jbrowse/core/util");
43
40
  const plugin_linear_genome_view_1 = require("@jbrowse/plugin-linear-genome-view");
44
- const ClearAll_1 = __importDefault(require("@mui/icons-material/ClearAll"));
45
- const Palette_1 = __importDefault(require("@mui/icons-material/Palette"));
46
41
  const mobx_state_tree_1 = require("mobx-state-tree");
47
- const FilterByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/components/FilterByTagDialog'))));
42
+ const LinearReadDisplayBaseMixin_1 = require("../shared/LinearReadDisplayBaseMixin");
43
+ const LinearReadDisplayWithLayoutMixin_1 = require("../shared/LinearReadDisplayWithLayoutMixin");
44
+ const LinearReadDisplayWithPairFiltersMixin_1 = require("../shared/LinearReadDisplayWithPairFiltersMixin");
45
+ const chainToSimpleFeature_1 = require("../shared/chainToSimpleFeature");
46
+ const menuItems_1 = require("../shared/menuItems");
47
+ const SetFeatureHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetFeatureHeightDialog'))));
48
48
  function stateModelFactory(configSchema) {
49
49
  return mobx_state_tree_1.types
50
- .compose('LinearReadCloudDisplay', pluggableElementTypes_1.BaseDisplay, (0, plugin_linear_genome_view_1.TrackHeightMixin)(), (0, plugin_linear_genome_view_1.FeatureDensityMixin)(), mobx_state_tree_1.types.model({
50
+ .compose('LinearReadCloudDisplay', pluggableElementTypes_1.BaseDisplay, (0, plugin_linear_genome_view_1.TrackHeightMixin)(), (0, plugin_linear_genome_view_1.FeatureDensityMixin)(), (0, LinearReadDisplayBaseMixin_1.LinearReadDisplayBaseMixin)(), (0, LinearReadDisplayWithLayoutMixin_1.LinearReadDisplayWithLayoutMixin)(), (0, LinearReadDisplayWithPairFiltersMixin_1.LinearReadDisplayWithPairFiltersMixin)(), mobx_state_tree_1.types.model({
51
51
  type: mobx_state_tree_1.types.literal('LinearReadCloudDisplay'),
52
52
  configuration: (0, configuration_1.ConfigurationReference)(configSchema),
53
- filterBySetting: mobx_state_tree_1.types.frozen(),
54
- colorBySetting: mobx_state_tree_1.types.frozen(),
55
- drawSingletons: true,
53
+ drawCloud: false,
54
+ noSpacing: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
55
+ trackMaxHeight: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
56
56
  }))
57
57
  .volatile(() => ({
58
- loading: false,
59
- chainData: undefined,
60
- lastDrawnOffsetPx: undefined,
61
- lastDrawnBpPerPx: 0,
62
- ref: null,
58
+ layoutHeight: 0,
63
59
  }))
64
60
  .views(self => ({
65
61
  get colorBy() {
@@ -70,43 +66,39 @@ function stateModelFactory(configSchema) {
70
66
  var _a;
71
67
  return (_a = self.filterBySetting) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'filterBy');
72
68
  },
69
+ get featureHeightSetting() {
70
+ var _a;
71
+ return (_a = self.featureHeight) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'featureHeight');
72
+ },
73
73
  }))
74
74
  .actions(self => ({
75
- setDrawSingletons(f) {
76
- self.drawSingletons = f;
77
- },
78
- setLastDrawnOffsetPx(n) {
79
- self.lastDrawnOffsetPx = n;
80
- },
81
- setLastDrawnBpPerPx(n) {
82
- self.lastDrawnBpPerPx = n;
83
- },
84
- setLoading(f) {
85
- self.loading = f;
86
- },
87
75
  reload() {
88
76
  self.error = undefined;
89
77
  },
90
- setRef(ref) {
91
- self.ref = ref;
78
+ setNoSpacing(flag) {
79
+ self.noSpacing = flag;
92
80
  },
93
- setColorScheme(colorBy) {
94
- self.colorBySetting = {
95
- ...colorBy,
96
- };
81
+ setMaxHeight(n) {
82
+ self.trackMaxHeight = n;
97
83
  },
98
- setChainData(args) {
99
- self.chainData = args;
84
+ setLayoutHeight(n) {
85
+ self.layoutHeight = n;
100
86
  },
101
- setFilterBy(filter) {
102
- self.filterBySetting = {
103
- ...filter,
104
- };
87
+ selectFeature(chain) {
88
+ const session = (0, util_1.getSession)(self);
89
+ const syntheticFeature = (0, chainToSimpleFeature_1.chainToSimpleFeature)(chain);
90
+ if ((0, util_1.isSessionModelWithWidgets)(session)) {
91
+ const featureWidget = session.addWidget('AlignmentsFeatureWidget', 'alignmentFeature', {
92
+ featureData: syntheticFeature.toJSON(),
93
+ view: (0, util_1.getContainingView)(self),
94
+ track: (0, util_1.getContainingTrack)(self),
95
+ });
96
+ session.showWidget(featureWidget);
97
+ }
98
+ session.setSelection(syntheticFeature);
105
99
  },
106
- }))
107
- .views(self => ({
108
- get drawn() {
109
- return self.lastDrawnOffsetPx !== undefined;
100
+ setDrawCloud(b) {
101
+ self.drawCloud = b;
110
102
  },
111
103
  }))
112
104
  .views(self => {
@@ -122,59 +114,82 @@ function stateModelFactory(configSchema) {
122
114
  return [
123
115
  ...superTrackMenuItems(),
124
116
  {
125
- label: 'Draw singletons',
126
- type: 'checkbox',
127
- checked: self.drawSingletons,
128
- onClick: () => {
129
- self.setDrawSingletons(!self.drawSingletons);
130
- },
131
- },
132
- {
133
- label: 'Filter by',
134
- icon: ClearAll_1.default,
135
- onClick: () => {
136
- (0, util_1.getSession)(self).queueDialog(handleClose => [
137
- FilterByTagDialog,
138
- { model: self, handleClose },
139
- ]);
140
- },
141
- },
142
- {
143
- label: 'Color scheme',
144
- icon: Palette_1.default,
117
+ label: 'Set feature height...',
145
118
  subMenu: [
146
119
  {
147
- label: 'Insert size ± 3σ and orientation',
148
- onClick: () => {
149
- self.setColorScheme({ type: 'insertSizeAndOrientation' });
150
- },
151
- },
152
- {
153
- label: 'Insert size ± 3σ',
120
+ label: 'Normal',
154
121
  onClick: () => {
155
- self.setColorScheme({ type: 'insertSize' });
122
+ self.setFeatureHeight(7);
123
+ self.setNoSpacing(false);
156
124
  },
157
125
  },
158
126
  {
159
- label: 'Orientation',
127
+ label: 'Compact',
160
128
  onClick: () => {
161
- self.setColorScheme({ type: 'orientation' });
129
+ self.setFeatureHeight(3);
130
+ self.setNoSpacing(true);
162
131
  },
163
132
  },
164
133
  {
165
- label: 'Insert size gradient',
134
+ label: 'Manually set height...',
166
135
  onClick: () => {
167
- self.setColorScheme({ type: 'gradient' });
136
+ (0, util_1.getSession)(self).queueDialog(handleClose => [
137
+ SetFeatureHeightDialog,
138
+ {
139
+ model: self,
140
+ handleClose,
141
+ },
142
+ ]);
168
143
  },
169
144
  },
170
145
  ],
171
146
  },
147
+ {
148
+ label: 'Toggle read cloud (y-coordinate proportional to TLEN)',
149
+ type: 'checkbox',
150
+ checked: self.drawCloud,
151
+ onClick: () => {
152
+ self.setDrawCloud(!self.drawCloud);
153
+ },
154
+ },
155
+ {
156
+ label: 'Draw singletons',
157
+ type: 'checkbox',
158
+ checked: self.drawSingletons,
159
+ onClick: () => {
160
+ self.setDrawSingletons(!self.drawSingletons);
161
+ },
162
+ },
163
+ {
164
+ label: 'Draw proper pairs',
165
+ type: 'checkbox',
166
+ checked: self.drawProperPairs,
167
+ onClick: () => {
168
+ self.setDrawProperPairs(!self.drawProperPairs);
169
+ },
170
+ },
171
+ {
172
+ label: 'Flip strand relative to primary alignment for long read chains',
173
+ type: 'checkbox',
174
+ checked: self.flipStrandLongReadChains,
175
+ onClick: () => {
176
+ self.setFlipStrandLongReadChains(!self.flipStrandLongReadChains);
177
+ },
178
+ },
179
+ (0, menuItems_1.getFilterByMenuItem)(self),
180
+ (0, menuItems_1.getColorSchemeMenuItem)(self),
172
181
  ];
173
182
  },
174
183
  async renderSvg(opts) {
175
184
  const { renderSvg } = await Promise.resolve().then(() => __importStar(require('../shared/renderSvgUtil')));
176
- const { drawFeats } = await Promise.resolve().then(() => __importStar(require('./drawFeats')));
177
- return renderSvg(self, opts, drawFeats);
185
+ if (self.drawCloud) {
186
+ const { drawFeats } = await Promise.resolve().then(() => __importStar(require('./drawFeatsCloud')));
187
+ return renderSvg(self, opts, drawFeats);
188
+ }
189
+ else {
190
+ const { drawFeats } = await Promise.resolve().then(() => __importStar(require('./drawFeatsStack')));
191
+ return renderSvg(self, opts, drawFeats);
192
+ }
178
193
  },
179
194
  };
180
195
  })
@@ -184,7 +199,7 @@ function stateModelFactory(configSchema) {
184
199
  (async () => {
185
200
  try {
186
201
  const { doAfterAttach } = await Promise.resolve().then(() => __importStar(require('../shared/afterAttach')));
187
- const { drawFeats } = await Promise.resolve().then(() => __importStar(require('./drawFeats')));
202
+ const { drawFeats } = await Promise.resolve().then(() => __importStar(require('./drawFeatsAbstract')));
188
203
  doAfterAttach(self, drawFeats);
189
204
  }
190
205
  catch (e) {
@@ -4,7 +4,10 @@ interface Props {
4
4
  model: {
5
5
  visibleModifications: Map<string, {
6
6
  color: string;
7
+ base: string;
8
+ strand: string;
7
9
  }>;
10
+ simplexModifications?: Set<string>;
8
11
  };
9
12
  }
10
13
  declare const TooltipContents: import("react").ForwardRefExoticComponent<Props & import("react").RefAttributes<HTMLDivElement>>;