@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
@@ -18,14 +18,14 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
18
18
  upperCaseCDS: boolean;
19
19
  charactersPerRow: number;
20
20
  feature: import("@jbrowse/core/util").SimpleFeatureSerialized | undefined;
21
- mode: string;
21
+ mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein";
22
22
  } & {
23
23
  setFeature(f: import("@jbrowse/core/util").SimpleFeatureSerialized): void;
24
24
  setUpDownBp(f: number): void;
25
25
  setIntronBp(f: number): void;
26
26
  setUpperCaseCDS(f: boolean): void;
27
27
  setShowCoordinates(f: "none" | "relative" | "genomic"): void;
28
- setMode(mode: string): void;
28
+ setMode(mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein"): void;
29
29
  } & {
30
30
  readonly showCoordinates: boolean;
31
31
  readonly showGenomicCoordsOption: boolean;
@@ -68,14 +68,14 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
68
68
  upperCaseCDS: boolean;
69
69
  charactersPerRow: number;
70
70
  feature: import("@jbrowse/core/util").SimpleFeatureSerialized | undefined;
71
- mode: string;
71
+ mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein";
72
72
  } & {
73
73
  setFeature(f: import("@jbrowse/core/util").SimpleFeatureSerialized): void;
74
74
  setUpDownBp(f: number): void;
75
75
  setIntronBp(f: number): void;
76
76
  setUpperCaseCDS(f: boolean): void;
77
77
  setShowCoordinates(f: "none" | "relative" | "genomic"): void;
78
- setMode(mode: string): void;
78
+ setMode(mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein"): void;
79
79
  } & {
80
80
  readonly showCoordinates: boolean;
81
81
  readonly showGenomicCoordsOption: boolean;
@@ -220,7 +220,7 @@ class CramAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
220
220
  const chrId = this.refNameToId(refName);
221
221
  return chrId !== undefined
222
222
  ? cram.index.getEntriesForRange(chrId, start, end)
223
- : [{ sliceBytes: 0 }];
223
+ : Promise.resolve([{ sliceBytes: 0 }]);
224
224
  }));
225
225
  return blockResults.flat().reduce((a, b) => a + b.sliceBytes, 0);
226
226
  }
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const util_1 = require("./util");
4
- const util_2 = require("../shared/util");
3
+ const readFeaturesToCIGAR_1 = require("./readFeaturesToCIGAR");
4
+ const readFeaturesToMismatches_1 = require("./readFeaturesToMismatches");
5
+ const util_1 = require("../shared/util");
5
6
  class CramSlightlyLazyFeature {
6
7
  constructor(record, _store) {
7
8
  this.record = record;
@@ -67,7 +68,7 @@ class CramSlightlyLazyFeature {
67
68
  return this.record.getReadBases();
68
69
  }
69
70
  get CIGAR() {
70
- return (0, util_1.readFeaturesToCIGAR)(this.record.readFeatures, this.record.alignmentStart, this.record.readLength, this.record._refRegion);
71
+ return (0, readFeaturesToCIGAR_1.readFeaturesToCIGAR)(this.record.readFeatures, this.record.alignmentStart, this.record.readLength, this.record._refRegion);
71
72
  }
72
73
  id() {
73
74
  return `${this._store.id}-${this.record.uniqueId}`;
@@ -88,7 +89,7 @@ class CramSlightlyLazyFeature {
88
89
  return undefined;
89
90
  }
90
91
  get mismatches() {
91
- return (0, util_1.readFeaturesToMismatches)(this.record.readFeatures, this.start, this.qualRaw);
92
+ return (0, readFeaturesToMismatches_1.readFeaturesToMismatches)(this.record.readFeatures, this.start, this.qualRaw);
92
93
  }
93
94
  get fields() {
94
95
  return {
@@ -119,6 +120,6 @@ class CramSlightlyLazyFeature {
119
120
  }
120
121
  }
121
122
  exports.default = CramSlightlyLazyFeature;
122
- (0, util_2.cacheGetter)(CramSlightlyLazyFeature, 'fields');
123
- (0, util_2.cacheGetter)(CramSlightlyLazyFeature, 'CIGAR');
124
- (0, util_2.cacheGetter)(CramSlightlyLazyFeature, 'mismatches');
123
+ (0, util_1.cacheGetter)(CramSlightlyLazyFeature, 'fields');
124
+ (0, util_1.cacheGetter)(CramSlightlyLazyFeature, 'CIGAR');
125
+ (0, util_1.cacheGetter)(CramSlightlyLazyFeature, 'mismatches');
@@ -2,17 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.readFeaturesToMismatches = readFeaturesToMismatches;
4
4
  exports.readFeaturesToCIGAR = readFeaturesToCIGAR;
5
- function readFeaturesToMismatches(readFeatures, start, qual) {
6
- if (!readFeatures) {
7
- return [];
8
- }
5
+ function readFeaturesToMismatches(readFeatures = [], start, qual) {
9
6
  const mismatches = new Array(readFeatures.length);
10
7
  let j = 0;
11
8
  let insLen = 0;
12
9
  let refPos = 0;
13
10
  let sublen = 0;
14
11
  let lastPos = start;
15
- for (const { refPos: p, code, pos, data, sub, ref } of readFeatures) {
12
+ for (const ret of readFeatures) {
13
+ const { refPos: p, code, pos, data, sub, ref } = ret;
16
14
  sublen = refPos - lastPos;
17
15
  lastPos = refPos;
18
16
  if (sublen && insLen > 0) {
@@ -20,6 +18,7 @@ function readFeaturesToMismatches(readFeatures, start, qual) {
20
18
  start: refPos,
21
19
  type: 'insertion',
22
20
  base: `${insLen}`,
21
+ insertedBases: data,
23
22
  length: 0,
24
23
  };
25
24
  insLen = 0;
@@ -0,0 +1,5 @@
1
+ import type { Mismatch } from '../shared/types';
2
+ import type { CramRecord } from '@gmod/cram';
3
+ type ReadFeatures = CramRecord['readFeatures'];
4
+ export declare function readFeaturesToMismatches(readFeatures: ReadFeatures, start: number, qual?: number[] | null): Mismatch[];
5
+ export {};
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readFeaturesToMismatches = readFeaturesToMismatches;
4
+ function readFeaturesToMismatches(readFeatures = [], start, qual) {
5
+ const mismatches = new Array(readFeatures.length);
6
+ let j = 0;
7
+ let refPos = 0;
8
+ let sublen = 0;
9
+ let lastPos = start;
10
+ let insertedBases = '';
11
+ for (const ret of readFeatures) {
12
+ const { refPos: p, code, pos, data, sub, ref } = ret;
13
+ sublen = refPos - lastPos;
14
+ lastPos = refPos;
15
+ if (sublen && insertedBases.length > 0) {
16
+ mismatches[j++] = {
17
+ start: refPos,
18
+ type: 'insertion',
19
+ base: `${insertedBases.length}`,
20
+ insertedBases,
21
+ length: 0,
22
+ };
23
+ insertedBases = '';
24
+ }
25
+ refPos = p - 1 - start;
26
+ if (code === 'X') {
27
+ mismatches[j++] = {
28
+ start: refPos,
29
+ length: 1,
30
+ base: sub,
31
+ qual: qual === null || qual === void 0 ? void 0 : qual[pos - 1],
32
+ altbase: ref === null || ref === void 0 ? void 0 : ref.toUpperCase(),
33
+ type: 'mismatch',
34
+ };
35
+ }
36
+ else if (code === 'I') {
37
+ mismatches[j++] = {
38
+ start: refPos,
39
+ type: 'insertion',
40
+ base: `${data.length}`,
41
+ insertedBases: data,
42
+ length: 0,
43
+ };
44
+ }
45
+ else if (code === 'N') {
46
+ mismatches[j++] = {
47
+ type: 'skip',
48
+ length: data,
49
+ start: refPos,
50
+ base: 'N',
51
+ };
52
+ }
53
+ else if (code === 'S') {
54
+ const len = data.length;
55
+ mismatches[j++] = {
56
+ start: refPos,
57
+ type: 'softclip',
58
+ base: `S${len}`,
59
+ cliplen: len,
60
+ length: 1,
61
+ };
62
+ }
63
+ else if (code === 'P') {
64
+ }
65
+ else if (code === 'H') {
66
+ const len = data;
67
+ mismatches[j++] = {
68
+ start: refPos,
69
+ type: 'hardclip',
70
+ base: `H${len}`,
71
+ cliplen: len,
72
+ length: 1,
73
+ };
74
+ }
75
+ else if (code === 'D') {
76
+ mismatches[j++] = {
77
+ type: 'deletion',
78
+ length: data,
79
+ start: refPos,
80
+ base: '*',
81
+ };
82
+ }
83
+ else if (code === 'b') {
84
+ }
85
+ else if (code === 'q') {
86
+ }
87
+ else if (code === 'B') {
88
+ }
89
+ else if (code === 'i') {
90
+ insertedBases += data;
91
+ }
92
+ else if (code === 'Q') {
93
+ }
94
+ }
95
+ if (sublen && insertedBases.length > 0) {
96
+ mismatches[j++] = {
97
+ start: refPos,
98
+ type: 'insertion',
99
+ base: `${insertedBases.length}`,
100
+ insertedBases,
101
+ length: 0,
102
+ };
103
+ insertedBases = '';
104
+ }
105
+ return mismatches.slice(0, j);
106
+ }
@@ -5,13 +5,17 @@ const configuration_1 = require("@jbrowse/core/configuration");
5
5
  const ui_1 = require("@jbrowse/core/ui");
6
6
  const mobx_react_1 = require("mobx-react");
7
7
  const mui_1 = require("tss-react/mui");
8
- const useStyles = (0, mui_1.makeStyles)()({
8
+ const useStyles = (0, mui_1.makeStyles)()(theme => ({
9
9
  resizeHandle: {
10
10
  height: 5,
11
11
  position: 'absolute',
12
12
  zIndex: 2,
13
+ background: 'transparent',
14
+ '&:hover': {
15
+ background: theme.palette.divider,
16
+ },
13
17
  },
14
- });
18
+ }));
15
19
  const AlignmentsDisplay = (0, mobx_react_1.observer)(function AlignmentsDisplay({ model, }) {
16
20
  var _a;
17
21
  const { PileupDisplay, SNPCoverageDisplay } = model;
@@ -181,6 +181,7 @@ export declare function SharedLinearPileupDisplayMixin(configSchema: AnyConfigur
181
181
  regionCannotBeRenderedText(_region: import("@jbrowse/core/util").Region): "" | "Force load to see features";
182
182
  regionCannotBeRendered(_region: import("@jbrowse/core/util").Region): import("react/jsx-runtime").JSX.Element | null;
183
183
  } & {
184
+ mouseoverExtraInformation: string | undefined;
184
185
  featureIdUnderMouse: undefined | string;
185
186
  contextMenuFeature: undefined | Feature;
186
187
  } & {
@@ -195,9 +196,22 @@ export declare function SharedLinearPileupDisplayMixin(configSchema: AnyConfigur
195
196
  } & {
196
197
  readonly features: import("@jbrowse/core/util/compositeMap").default<string, Feature>;
197
198
  readonly featureUnderMouse: Feature | undefined;
199
+ readonly layoutFeatures: import("@jbrowse/core/util/compositeMap").default<string, [number, number, number, number] | [number, number, number, number, {
200
+ label?: string;
201
+ description?: string;
202
+ refName: string;
203
+ }]>;
198
204
  getFeatureOverlapping(blockKey: string, x: number, y: number): string | undefined;
199
- getFeatureByID(blockKey: string, id: string): [number, number, number, number] | undefined;
200
- searchFeatureByID(id: string): [number, number, number, number] | undefined;
205
+ getFeatureByID(blockKey: string, id: string): ([number, number, number, number] | [number, number, number, number, {
206
+ label?: string;
207
+ description?: string;
208
+ refName: string;
209
+ }]) | undefined;
210
+ searchFeatureByID(id: string): ([number, number, number, number] | [number, number, number, number, {
211
+ label?: string;
212
+ description?: string;
213
+ refName: string;
214
+ }]) | undefined;
201
215
  } & {
202
216
  addBlock(key: string, block: import("@jbrowse/core/util/blockTypes").BaseBlock): void;
203
217
  deleteBlock(key: string): void;
@@ -206,6 +220,7 @@ export declare function SharedLinearPileupDisplayMixin(configSchema: AnyConfigur
206
220
  clearFeatureSelection(): void;
207
221
  setFeatureIdUnderMouse(feature?: string): void;
208
222
  setContextMenuFeature(feature?: Feature): void;
223
+ setMouseoverExtraInformation(extra?: string): void;
209
224
  } & {
210
225
  reload(): Promise<void>;
211
226
  } & {
@@ -54,8 +54,8 @@ const LinearPileupDisplayBlurb_1 = __importDefault(require("./components/LinearP
54
54
  const getUniqueTags_1 = require("../shared/getUniqueTags");
55
55
  const FilterByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/components/FilterByTagDialog'))));
56
56
  const ColorByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/ColorByTagDialog'))));
57
- const SetFeatureHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetFeatureHeightDialog'))));
58
- const SetMaxHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetMaxHeightDialog'))));
57
+ const SetFeatureHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/components/SetFeatureHeightDialog'))));
58
+ const SetMaxHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/components/SetMaxHeightDialog'))));
59
59
  const rendererTypes = new Map([
60
60
  ['pileup', 'PileupRenderer'],
61
61
  ['svg', 'SvgFeatureRenderer'],
@@ -53,7 +53,7 @@ const GroupByTagDialog = (0, mobx_react_1.observer)(function (props) {
53
53
  maxLength: 2,
54
54
  'data-testid': 'group-tag-name-input',
55
55
  },
56
- } }), error ? ((0, jsx_runtime_1.jsx)(ui_1.ErrorMessage, { error: error })) : loading ? ((0, jsx_runtime_1.jsx)(ui_1.LoadingEllipses, { title: "Loading unique tags" })) : tagSet ? ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["Found unique ", tag, " values:"] }), (0, jsx_runtime_1.jsx)("div", { children: tagSet.join(', ') })] })) : null] })) : null] }), (0, jsx_runtime_1.jsxs)(material_1.DialogActions, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", color: "primary", type: "submit", disabled: !tagSet, autoFocus: true, onClick: () => {
56
+ } }), error ? ((0, jsx_runtime_1.jsx)(ui_1.ErrorMessage, { error: error })) : loading ? ((0, jsx_runtime_1.jsx)(ui_1.LoadingEllipses, { message: "Loading unique tags" })) : tagSet ? ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["Found unique ", tag, " values:"] }), (0, jsx_runtime_1.jsx)("div", { children: tagSet.join(', ') })] })) : null] })) : null] }), (0, jsx_runtime_1.jsxs)(material_1.DialogActions, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", color: "primary", type: "submit", disabled: !tagSet, autoFocus: true, onClick: () => {
57
57
  const track = (0, util_1.getContainingTrack)(model);
58
58
  const trackConf = structuredClone((0, mobx_state_tree_1.getSnapshot)(track.configuration));
59
59
  const session = (0, util_1.getSession)(model);
@@ -62,7 +62,7 @@ const GroupByTagDialog = (0, mobx_react_1.observer)(function (props) {
62
62
  if (tagSet) {
63
63
  const ret = [...tagSet, undefined];
64
64
  for (const tagValue of ret) {
65
- const t1 = `${trackConf.trackId}-${tag}:${tagValue}-${+Date.now()}-sessionTrack`;
65
+ const t1 = `${trackConf.trackId}-${tag}:${tagValue}-${Date.now()}-sessionTrack`;
66
66
  session.addTrackConf({
67
67
  ...trackConf,
68
68
  trackId: t1,
@@ -90,8 +90,8 @@ const GroupByTagDialog = (0, mobx_react_1.observer)(function (props) {
90
90
  }
91
91
  }
92
92
  else if (type === 'strand') {
93
- const t1 = `${trackConf.trackId}-${tag}:(-)-${+Date.now()}-sessionTrack`;
94
- const t2 = `${trackConf.trackId}-${tag}:(+)-${+Date.now()}-sessionTrack`;
93
+ const t1 = `${trackConf.trackId}-${tag}:(-)-${Date.now()}-sessionTrack`;
94
+ const t2 = `${trackConf.trackId}-${tag}:(+)-${Date.now()}-sessionTrack`;
95
95
  session.addTrackConf({
96
96
  ...trackConf,
97
97
  trackId: t1,
@@ -0,0 +1,10 @@
1
+ import type { ColorBy } from '../../shared/types';
2
+ declare const SetModificationThresholdDialog: (props: {
3
+ model: {
4
+ modificationThreshold: number;
5
+ colorBy?: ColorBy;
6
+ setColorScheme: (colorBy: ColorBy) => void;
7
+ };
8
+ handleClose: () => void;
9
+ }) => import("react/jsx-runtime").JSX.Element;
10
+ export default SetModificationThresholdDialog;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("react");
5
+ const ui_1 = require("@jbrowse/core/ui");
6
+ const material_1 = require("@mui/material");
7
+ const mobx_react_1 = require("mobx-react");
8
+ const SetModificationThresholdDialog = (0, mobx_react_1.observer)(function (props) {
9
+ const { model, handleClose } = props;
10
+ const [threshold, setThreshold] = (0, react_1.useState)(String(model.modificationThreshold));
11
+ const numThreshold = Number.parseFloat(threshold);
12
+ const validThreshold = !Number.isNaN(numThreshold) && numThreshold >= 0 && numThreshold <= 100;
13
+ return ((0, jsx_runtime_1.jsx)(ui_1.Dialog, { open: true, onClose: handleClose, title: "Adjust modification threshold", children: (0, jsx_runtime_1.jsxs)(material_1.DialogContent, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { children: "Set the minimum probability threshold for displaying modifications" }), (0, jsx_runtime_1.jsx)(material_1.Typography, { color: "textSecondary", children: "Only modifications with probability above this threshold will be displayed (0-100%)" }), (0, jsx_runtime_1.jsx)(material_1.TextField, { value: threshold, onChange: event => {
14
+ setThreshold(event.target.value);
15
+ }, placeholder: "Enter threshold (e.g., 10)", error: threshold !== '' && !validThreshold, helperText: threshold !== '' && !validThreshold
16
+ ? 'Must be a number between 0 and 100'
17
+ : '', autoComplete: "off", type: "number", slotProps: {
18
+ htmlInput: {
19
+ min: 0,
20
+ max: 100,
21
+ step: 1,
22
+ },
23
+ } }), (0, jsx_runtime_1.jsxs)(material_1.DialogActions, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", color: "primary", type: "submit", autoFocus: true, disabled: !validThreshold, onClick: () => {
24
+ const currentColorBy = model.colorBy || {
25
+ type: 'modifications',
26
+ };
27
+ model.setColorScheme({
28
+ ...currentColorBy,
29
+ modifications: {
30
+ ...currentColorBy.modifications,
31
+ threshold: numThreshold,
32
+ },
33
+ });
34
+ handleClose();
35
+ }, children: "Submit" }), (0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", color: "secondary", onClick: () => {
36
+ handleClose();
37
+ }, children: "Cancel" })] })] }) }));
38
+ });
39
+ exports.default = SetModificationThresholdDialog;
@@ -14,6 +14,7 @@ export declare function doAfterAttach(model: {
14
14
  setCurrSortBpPerPx: (arg: number) => void;
15
15
  setError: (arg: unknown) => void;
16
16
  updateVisibleModifications: (arg: ModificationType[]) => void;
17
+ setSimplexModifications: (arg: string[]) => void;
17
18
  setModificationsReady: (arg: boolean) => void;
18
19
  setSortReady: (arg: boolean) => void;
19
20
  setMessage: (arg: string) => void;
@@ -58,13 +58,14 @@ function doAfterAttach(model) {
58
58
  }
59
59
  const { adapterConfig } = model;
60
60
  const { staticBlocks } = (0, util_1.getContainingView)(model);
61
- const vals = await (0, getUniqueModifications_1.getUniqueModifications)({
61
+ const { modifications, simplexModifications } = await (0, getUniqueModifications_1.getUniqueModifications)({
62
62
  model,
63
63
  adapterConfig,
64
64
  blocks: staticBlocks,
65
65
  });
66
66
  if ((0, mobx_state_tree_1.isAlive)(model)) {
67
- model.updateVisibleModifications(vals);
67
+ model.updateVisibleModifications(modifications);
68
+ model.setSimplexModifications(simplexModifications);
68
69
  model.setModificationsReady(true);
69
70
  }
70
71
  }, { delay: 1000 });
@@ -186,6 +186,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
186
186
  regionCannotBeRenderedText(_region: import("@jbrowse/core/util").Region): "" | "Force load to see features";
187
187
  regionCannotBeRendered(_region: import("@jbrowse/core/util").Region): import("react/jsx-runtime").JSX.Element | null;
188
188
  } & {
189
+ mouseoverExtraInformation: string | undefined;
189
190
  featureIdUnderMouse: undefined | string;
190
191
  contextMenuFeature: undefined | import("@jbrowse/core/util").Feature;
191
192
  } & {
@@ -200,9 +201,22 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
200
201
  } & {
201
202
  readonly features: import("@jbrowse/core/util/compositeMap").default<string, import("@jbrowse/core/util").Feature>;
202
203
  readonly featureUnderMouse: import("@jbrowse/core/util").Feature | undefined;
204
+ readonly layoutFeatures: import("@jbrowse/core/util/compositeMap").default<string, [number, number, number, number] | [number, number, number, number, {
205
+ label?: string;
206
+ description?: string;
207
+ refName: string;
208
+ }]>;
203
209
  getFeatureOverlapping(blockKey: string, x: number, y: number): string | undefined;
204
- getFeatureByID(blockKey: string, id: string): [number, number, number, number] | undefined;
205
- searchFeatureByID(id: string): [number, number, number, number] | undefined;
210
+ getFeatureByID(blockKey: string, id: string): ([number, number, number, number] | [number, number, number, number, {
211
+ label?: string;
212
+ description?: string;
213
+ refName: string;
214
+ }]) | undefined;
215
+ searchFeatureByID(id: string): ([number, number, number, number] | [number, number, number, number, {
216
+ label?: string;
217
+ description?: string;
218
+ refName: string;
219
+ }]) | undefined;
206
220
  } & {
207
221
  addBlock(key: string, block: import("@jbrowse/core/util/blockTypes").BaseBlock): void;
208
222
  deleteBlock(key: string): void;
@@ -211,6 +225,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
211
225
  clearFeatureSelection(): void;
212
226
  setFeatureIdUnderMouse(feature?: string): void;
213
227
  setContextMenuFeature(feature?: import("@jbrowse/core/util").Feature): void;
228
+ setMouseoverExtraInformation(extra?: string): void;
214
229
  } & {
215
230
  reload(): Promise<void>;
216
231
  } & {
@@ -306,10 +321,12 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
306
321
  sortReady: boolean;
307
322
  currSortBpPerPx: number;
308
323
  visibleModifications: import("mobx").ObservableMap<string, ModificationTypeWithColor>;
324
+ simplexModifications: Set<string>;
309
325
  modificationsReady: boolean;
310
326
  } & {
311
327
  setCurrSortBpPerPx(n: number): void;
312
328
  updateVisibleModifications(uniqueModifications: ModificationType[]): void;
329
+ setSimplexModifications(simplex: string[]): void;
313
330
  setModificationsReady(flag: boolean): void;
314
331
  setSortReady(flag: boolean): void;
315
332
  clearSelected(): void;
@@ -321,6 +338,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
321
338
  reload(): void;
322
339
  } & {
323
340
  readonly visibleModificationTypes: string[];
341
+ readonly modificationThreshold: any;
324
342
  readonly rendererConfig: {
325
343
  [x: string]: any;
326
344
  } & import("mobx-state-tree/dist/internal").NonEmptyObject & {
@@ -46,9 +46,11 @@ const Workspaces_1 = __importDefault(require("@mui/icons-material/Workspaces"));
46
46
  const mobx_1 = require("mobx");
47
47
  const mobx_state_tree_1 = require("mobx-state-tree");
48
48
  const SharedLinearPileupDisplayMixin_1 = require("./SharedLinearPileupDisplayMixin");
49
+ const modificationData_1 = require("../shared/modificationData");
49
50
  const util_2 = require("../util");
50
51
  const SortByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SortByTagDialog'))));
51
52
  const GroupByDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/GroupByDialog'))));
53
+ const SetModificationThresholdDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetModificationThresholdDialog'))));
52
54
  function stateModelFactory(configSchema) {
53
55
  return mobx_state_tree_1.types
54
56
  .compose('LinearPileupDisplay', (0, SharedLinearPileupDisplayMixin_1.SharedLinearPileupDisplayMixin)(configSchema), mobx_state_tree_1.types.model({
@@ -62,6 +64,7 @@ function stateModelFactory(configSchema) {
62
64
  sortReady: false,
63
65
  currSortBpPerPx: 0,
64
66
  visibleModifications: mobx_1.observable.map({}),
67
+ simplexModifications: new Set(),
65
68
  modificationsReady: false,
66
69
  }))
67
70
  .actions(self => ({
@@ -78,6 +81,11 @@ function stateModelFactory(configSchema) {
78
81
  }
79
82
  }
80
83
  },
84
+ setSimplexModifications(simplex) {
85
+ for (const entry of simplex) {
86
+ self.simplexModifications.add(entry);
87
+ }
88
+ },
81
89
  setModificationsReady(flag) {
82
90
  self.modificationsReady = flag;
83
91
  },
@@ -130,6 +138,10 @@ function stateModelFactory(configSchema) {
130
138
  get visibleModificationTypes() {
131
139
  return [...self.visibleModifications.keys()];
132
140
  },
141
+ get modificationThreshold() {
142
+ var _a, _b, _c;
143
+ return (_c = (_b = (_a = self.colorBy) === null || _a === void 0 ? void 0 : _a.modifications) === null || _b === void 0 ? void 0 : _b.threshold) !== null && _c !== void 0 ? _c : 10;
144
+ },
133
145
  get rendererConfig() {
134
146
  const { featureHeight, noSpacing, trackMaxHeight, mismatchAlpha, rendererTypeName, hideSmallIndels, } = self;
135
147
  const configBlob = (0, configuration_1.getConf)(self, ['renderers', rendererTypeName]) || {};
@@ -163,13 +175,14 @@ function stateModelFactory(configSchema) {
163
175
  const { trackMenuItems: superTrackMenuItems, renderPropsPre: superRenderPropsPre, renderProps: superRenderProps, colorSchemeSubMenuItems: superColorSchemeSubMenuItems, } = self;
164
176
  return {
165
177
  renderPropsPre() {
166
- const { sortedBy, showSoftClipping, visibleModifications } = self;
178
+ const { sortedBy, showSoftClipping, visibleModifications, simplexModifications, } = self;
167
179
  const superProps = superRenderPropsPre();
168
180
  return {
169
181
  ...superProps,
170
182
  showSoftClip: showSoftClipping,
171
183
  sortedBy,
172
184
  visibleModifications: Object.fromEntries(visibleModifications.toJSON()),
185
+ simplexModifications: [...simplexModifications],
173
186
  };
174
187
  },
175
188
  renderProps() {
@@ -232,22 +245,26 @@ function stateModelFactory(configSchema) {
232
245
  subMenu: self.modificationsReady
233
246
  ? [
234
247
  {
235
- label: 'All modifications',
248
+ label: `All modifications (>= ${self.modificationThreshold}% prob)`,
236
249
  onClick: () => {
237
250
  self.setColorScheme({
238
251
  type: 'modifications',
252
+ modifications: {
253
+ threshold: self.modificationThreshold,
254
+ },
239
255
  });
240
256
  },
241
257
  },
242
258
  ...self.visibleModificationTypes.map(key => {
243
259
  var _a;
244
260
  return ({
245
- label: `Show only ${((_a = util_2.modificationData[key]) === null || _a === void 0 ? void 0 : _a.name) || key}`,
261
+ label: `Show only ${((_a = modificationData_1.modificationData[key]) === null || _a === void 0 ? void 0 : _a.name) || key} (>= ${self.modificationThreshold}% prob)`,
246
262
  onClick: () => {
247
263
  self.setColorScheme({
248
264
  type: 'modifications',
249
265
  modifications: {
250
266
  isolatedModification: key,
267
+ threshold: self.modificationThreshold,
251
268
  },
252
269
  });
253
270
  },
@@ -261,6 +278,7 @@ function stateModelFactory(configSchema) {
261
278
  type: 'modifications',
262
279
  modifications: {
263
280
  twoColor: true,
281
+ threshold: self.modificationThreshold,
264
282
  },
265
283
  });
266
284
  },
@@ -268,13 +286,14 @@ function stateModelFactory(configSchema) {
268
286
  ...self.visibleModificationTypes.map(key => {
269
287
  var _a;
270
288
  return ({
271
- label: `Show only ${((_a = util_2.modificationData[key]) === null || _a === void 0 ? void 0 : _a.name) || key} (<50% prob colored blue)`,
289
+ label: `Show only ${((_a = modificationData_1.modificationData[key]) === null || _a === void 0 ? void 0 : _a.name) || key} (<50% prob colored blue)`,
272
290
  onClick: () => {
273
291
  self.setColorScheme({
274
292
  type: 'modifications',
275
293
  modifications: {
276
294
  isolatedModification: key,
277
295
  twoColor: true,
296
+ threshold: self.modificationThreshold,
278
297
  },
279
298
  });
280
299
  },
@@ -286,9 +305,25 @@ function stateModelFactory(configSchema) {
286
305
  onClick: () => {
287
306
  self.setColorScheme({
288
307
  type: 'methylation',
308
+ modifications: {
309
+ threshold: self.modificationThreshold,
310
+ },
289
311
  });
290
312
  },
291
313
  },
314
+ { type: 'divider' },
315
+ {
316
+ label: `Adjust threshold (${self.modificationThreshold}%)`,
317
+ onClick: () => {
318
+ (0, util_1.getSession)(self).queueDialog(handleClose => [
319
+ SetModificationThresholdDialog,
320
+ {
321
+ model: self,
322
+ handleClose,
323
+ },
324
+ ]);
325
+ },
326
+ },
292
327
  ]
293
328
  : [
294
329
  {
@@ -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: 'LinearReadArcsDisplay',
49
- displayName: 'Arc display',
49
+ displayName: 'Read arc display',
50
50
  configSchema,
51
51
  stateModel: (0, model_1.default)(configSchema),
52
52
  trackType: 'AlignmentsTrack',