@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,103 @@
1
+ export function readFeaturesToMismatches(readFeatures = [], start, qual) {
2
+ const mismatches = new Array(readFeatures.length);
3
+ let j = 0;
4
+ let refPos = 0;
5
+ let sublen = 0;
6
+ let lastPos = start;
7
+ let insertedBases = '';
8
+ for (const ret of readFeatures) {
9
+ const { refPos: p, code, pos, data, sub, ref } = ret;
10
+ sublen = refPos - lastPos;
11
+ lastPos = refPos;
12
+ if (sublen && insertedBases.length > 0) {
13
+ mismatches[j++] = {
14
+ start: refPos,
15
+ type: 'insertion',
16
+ base: `${insertedBases.length}`,
17
+ insertedBases,
18
+ length: 0,
19
+ };
20
+ insertedBases = '';
21
+ }
22
+ refPos = p - 1 - start;
23
+ if (code === 'X') {
24
+ mismatches[j++] = {
25
+ start: refPos,
26
+ length: 1,
27
+ base: sub,
28
+ qual: qual === null || qual === void 0 ? void 0 : qual[pos - 1],
29
+ altbase: ref === null || ref === void 0 ? void 0 : ref.toUpperCase(),
30
+ type: 'mismatch',
31
+ };
32
+ }
33
+ else if (code === 'I') {
34
+ mismatches[j++] = {
35
+ start: refPos,
36
+ type: 'insertion',
37
+ base: `${data.length}`,
38
+ insertedBases: data,
39
+ length: 0,
40
+ };
41
+ }
42
+ else if (code === 'N') {
43
+ mismatches[j++] = {
44
+ type: 'skip',
45
+ length: data,
46
+ start: refPos,
47
+ base: 'N',
48
+ };
49
+ }
50
+ else if (code === 'S') {
51
+ const len = data.length;
52
+ mismatches[j++] = {
53
+ start: refPos,
54
+ type: 'softclip',
55
+ base: `S${len}`,
56
+ cliplen: len,
57
+ length: 1,
58
+ };
59
+ }
60
+ else if (code === 'P') {
61
+ }
62
+ else if (code === 'H') {
63
+ const len = data;
64
+ mismatches[j++] = {
65
+ start: refPos,
66
+ type: 'hardclip',
67
+ base: `H${len}`,
68
+ cliplen: len,
69
+ length: 1,
70
+ };
71
+ }
72
+ else if (code === 'D') {
73
+ mismatches[j++] = {
74
+ type: 'deletion',
75
+ length: data,
76
+ start: refPos,
77
+ base: '*',
78
+ };
79
+ }
80
+ else if (code === 'b') {
81
+ }
82
+ else if (code === 'q') {
83
+ }
84
+ else if (code === 'B') {
85
+ }
86
+ else if (code === 'i') {
87
+ insertedBases += data;
88
+ }
89
+ else if (code === 'Q') {
90
+ }
91
+ }
92
+ if (sublen && insertedBases.length > 0) {
93
+ mismatches[j++] = {
94
+ start: refPos,
95
+ type: 'insertion',
96
+ base: `${insertedBases.length}`,
97
+ insertedBases,
98
+ length: 0,
99
+ };
100
+ insertedBases = '';
101
+ }
102
+ return mismatches.slice(0, j);
103
+ }
@@ -3,13 +3,17 @@ import { getConf } from '@jbrowse/core/configuration';
3
3
  import { ResizeHandle } from '@jbrowse/core/ui';
4
4
  import { observer } from 'mobx-react';
5
5
  import { makeStyles } from 'tss-react/mui';
6
- const useStyles = makeStyles()({
6
+ const useStyles = makeStyles()(theme => ({
7
7
  resizeHandle: {
8
8
  height: 5,
9
9
  position: 'absolute',
10
10
  zIndex: 2,
11
+ background: 'transparent',
12
+ '&:hover': {
13
+ background: theme.palette.divider,
14
+ },
11
15
  },
12
- });
16
+ }));
13
17
  const AlignmentsDisplay = observer(function AlignmentsDisplay({ model, }) {
14
18
  var _a;
15
19
  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
  } & {
@@ -15,8 +15,8 @@ import LinearPileupDisplayBlurb from './components/LinearPileupDisplayBlurb';
15
15
  import { getUniqueTags } from '../shared/getUniqueTags';
16
16
  const FilterByTagDialog = lazy(() => import('../shared/components/FilterByTagDialog'));
17
17
  const ColorByTagDialog = lazy(() => import('./components/ColorByTagDialog'));
18
- const SetFeatureHeightDialog = lazy(() => import('./components/SetFeatureHeightDialog'));
19
- const SetMaxHeightDialog = lazy(() => import('./components/SetMaxHeightDialog'));
18
+ const SetFeatureHeightDialog = lazy(() => import('../shared/components/SetFeatureHeightDialog'));
19
+ const SetMaxHeightDialog = lazy(() => import('../shared/components/SetMaxHeightDialog'));
20
20
  const rendererTypes = new Map([
21
21
  ['pileup', 'PileupRenderer'],
22
22
  ['svg', 'SvgFeatureRenderer'],
@@ -51,7 +51,7 @@ const GroupByTagDialog = observer(function (props) {
51
51
  maxLength: 2,
52
52
  'data-testid': 'group-tag-name-input',
53
53
  },
54
- } }), error ? (_jsx(ErrorMessage, { error: error })) : loading ? (_jsx(LoadingEllipses, { title: "Loading unique tags" })) : tagSet ? (_jsxs("div", { children: [_jsxs("div", { children: ["Found unique ", tag, " values:"] }), _jsx("div", { children: tagSet.join(', ') })] })) : null] })) : null] }), _jsxs(DialogActions, { children: [_jsx(Button, { variant: "contained", color: "primary", type: "submit", disabled: !tagSet, autoFocus: true, onClick: () => {
54
+ } }), error ? (_jsx(ErrorMessage, { error: error })) : loading ? (_jsx(LoadingEllipses, { message: "Loading unique tags" })) : tagSet ? (_jsxs("div", { children: [_jsxs("div", { children: ["Found unique ", tag, " values:"] }), _jsx("div", { children: tagSet.join(', ') })] })) : null] })) : null] }), _jsxs(DialogActions, { children: [_jsx(Button, { variant: "contained", color: "primary", type: "submit", disabled: !tagSet, autoFocus: true, onClick: () => {
55
55
  const track = getContainingTrack(model);
56
56
  const trackConf = structuredClone(getSnapshot(track.configuration));
57
57
  const session = getSession(model);
@@ -60,7 +60,7 @@ const GroupByTagDialog = observer(function (props) {
60
60
  if (tagSet) {
61
61
  const ret = [...tagSet, undefined];
62
62
  for (const tagValue of ret) {
63
- const t1 = `${trackConf.trackId}-${tag}:${tagValue}-${+Date.now()}-sessionTrack`;
63
+ const t1 = `${trackConf.trackId}-${tag}:${tagValue}-${Date.now()}-sessionTrack`;
64
64
  session.addTrackConf({
65
65
  ...trackConf,
66
66
  trackId: t1,
@@ -88,8 +88,8 @@ const GroupByTagDialog = observer(function (props) {
88
88
  }
89
89
  }
90
90
  else if (type === 'strand') {
91
- const t1 = `${trackConf.trackId}-${tag}:(-)-${+Date.now()}-sessionTrack`;
92
- const t2 = `${trackConf.trackId}-${tag}:(+)-${+Date.now()}-sessionTrack`;
91
+ const t1 = `${trackConf.trackId}-${tag}:(-)-${Date.now()}-sessionTrack`;
92
+ const t2 = `${trackConf.trackId}-${tag}:(+)-${Date.now()}-sessionTrack`;
93
93
  session.addTrackConf({
94
94
  ...trackConf,
95
95
  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,37 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { Dialog } from '@jbrowse/core/ui';
4
+ import { Button, DialogActions, DialogContent, TextField, Typography, } from '@mui/material';
5
+ import { observer } from 'mobx-react';
6
+ const SetModificationThresholdDialog = observer(function (props) {
7
+ const { model, handleClose } = props;
8
+ const [threshold, setThreshold] = useState(String(model.modificationThreshold));
9
+ const numThreshold = Number.parseFloat(threshold);
10
+ const validThreshold = !Number.isNaN(numThreshold) && numThreshold >= 0 && numThreshold <= 100;
11
+ return (_jsx(Dialog, { open: true, onClose: handleClose, title: "Adjust modification threshold", children: _jsxs(DialogContent, { children: [_jsx(Typography, { children: "Set the minimum probability threshold for displaying modifications" }), _jsx(Typography, { color: "textSecondary", children: "Only modifications with probability above this threshold will be displayed (0-100%)" }), _jsx(TextField, { value: threshold, onChange: event => {
12
+ setThreshold(event.target.value);
13
+ }, placeholder: "Enter threshold (e.g., 10)", error: threshold !== '' && !validThreshold, helperText: threshold !== '' && !validThreshold
14
+ ? 'Must be a number between 0 and 100'
15
+ : '', autoComplete: "off", type: "number", slotProps: {
16
+ htmlInput: {
17
+ min: 0,
18
+ max: 100,
19
+ step: 1,
20
+ },
21
+ } }), _jsxs(DialogActions, { children: [_jsx(Button, { variant: "contained", color: "primary", type: "submit", autoFocus: true, disabled: !validThreshold, onClick: () => {
22
+ const currentColorBy = model.colorBy || {
23
+ type: 'modifications',
24
+ };
25
+ model.setColorScheme({
26
+ ...currentColorBy,
27
+ modifications: {
28
+ ...currentColorBy.modifications,
29
+ threshold: numThreshold,
30
+ },
31
+ });
32
+ handleClose();
33
+ }, children: "Submit" }), _jsx(Button, { variant: "contained", color: "secondary", onClick: () => {
34
+ handleClose();
35
+ }, children: "Cancel" })] })] }) }));
36
+ });
37
+ export 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;
@@ -55,13 +55,14 @@ export function doAfterAttach(model) {
55
55
  }
56
56
  const { adapterConfig } = model;
57
57
  const { staticBlocks } = getContainingView(model);
58
- const vals = await getUniqueModifications({
58
+ const { modifications, simplexModifications } = await getUniqueModifications({
59
59
  model,
60
60
  adapterConfig,
61
61
  blocks: staticBlocks,
62
62
  });
63
63
  if (isAlive(model)) {
64
- model.updateVisibleModifications(vals);
64
+ model.updateVisibleModifications(modifications);
65
+ model.setSimplexModifications(simplexModifications);
65
66
  model.setModificationsReady(true);
66
67
  }
67
68
  }, { 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 & {
@@ -8,9 +8,11 @@ import WorkspacesIcon from '@mui/icons-material/Workspaces';
8
8
  import { observable } from 'mobx';
9
9
  import { types } from 'mobx-state-tree';
10
10
  import { SharedLinearPileupDisplayMixin } from './SharedLinearPileupDisplayMixin';
11
- import { getColorForModification, modificationData } from '../util';
11
+ import { modificationData } from '../shared/modificationData';
12
+ import { getColorForModification } from '../util';
12
13
  const SortByTagDialog = lazy(() => import('./components/SortByTagDialog'));
13
14
  const GroupByDialog = lazy(() => import('./components/GroupByDialog'));
15
+ const SetModificationThresholdDialog = lazy(() => import('./components/SetModificationThresholdDialog'));
14
16
  function stateModelFactory(configSchema) {
15
17
  return types
16
18
  .compose('LinearPileupDisplay', SharedLinearPileupDisplayMixin(configSchema), types.model({
@@ -24,6 +26,7 @@ function stateModelFactory(configSchema) {
24
26
  sortReady: false,
25
27
  currSortBpPerPx: 0,
26
28
  visibleModifications: observable.map({}),
29
+ simplexModifications: new Set(),
27
30
  modificationsReady: false,
28
31
  }))
29
32
  .actions(self => ({
@@ -40,6 +43,11 @@ function stateModelFactory(configSchema) {
40
43
  }
41
44
  }
42
45
  },
46
+ setSimplexModifications(simplex) {
47
+ for (const entry of simplex) {
48
+ self.simplexModifications.add(entry);
49
+ }
50
+ },
43
51
  setModificationsReady(flag) {
44
52
  self.modificationsReady = flag;
45
53
  },
@@ -92,6 +100,10 @@ function stateModelFactory(configSchema) {
92
100
  get visibleModificationTypes() {
93
101
  return [...self.visibleModifications.keys()];
94
102
  },
103
+ get modificationThreshold() {
104
+ var _a, _b, _c;
105
+ 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;
106
+ },
95
107
  get rendererConfig() {
96
108
  const { featureHeight, noSpacing, trackMaxHeight, mismatchAlpha, rendererTypeName, hideSmallIndels, } = self;
97
109
  const configBlob = getConf(self, ['renderers', rendererTypeName]) || {};
@@ -125,13 +137,14 @@ function stateModelFactory(configSchema) {
125
137
  const { trackMenuItems: superTrackMenuItems, renderPropsPre: superRenderPropsPre, renderProps: superRenderProps, colorSchemeSubMenuItems: superColorSchemeSubMenuItems, } = self;
126
138
  return {
127
139
  renderPropsPre() {
128
- const { sortedBy, showSoftClipping, visibleModifications } = self;
140
+ const { sortedBy, showSoftClipping, visibleModifications, simplexModifications, } = self;
129
141
  const superProps = superRenderPropsPre();
130
142
  return {
131
143
  ...superProps,
132
144
  showSoftClip: showSoftClipping,
133
145
  sortedBy,
134
146
  visibleModifications: Object.fromEntries(visibleModifications.toJSON()),
147
+ simplexModifications: [...simplexModifications],
135
148
  };
136
149
  },
137
150
  renderProps() {
@@ -194,22 +207,26 @@ function stateModelFactory(configSchema) {
194
207
  subMenu: self.modificationsReady
195
208
  ? [
196
209
  {
197
- label: 'All modifications',
210
+ label: `All modifications (>= ${self.modificationThreshold}% prob)`,
198
211
  onClick: () => {
199
212
  self.setColorScheme({
200
213
  type: 'modifications',
214
+ modifications: {
215
+ threshold: self.modificationThreshold,
216
+ },
201
217
  });
202
218
  },
203
219
  },
204
220
  ...self.visibleModificationTypes.map(key => {
205
221
  var _a;
206
222
  return ({
207
- label: `Show only ${((_a = modificationData[key]) === null || _a === void 0 ? void 0 : _a.name) || key}`,
223
+ label: `Show only ${((_a = modificationData[key]) === null || _a === void 0 ? void 0 : _a.name) || key} (>= ${self.modificationThreshold}% prob)`,
208
224
  onClick: () => {
209
225
  self.setColorScheme({
210
226
  type: 'modifications',
211
227
  modifications: {
212
228
  isolatedModification: key,
229
+ threshold: self.modificationThreshold,
213
230
  },
214
231
  });
215
232
  },
@@ -223,6 +240,7 @@ function stateModelFactory(configSchema) {
223
240
  type: 'modifications',
224
241
  modifications: {
225
242
  twoColor: true,
243
+ threshold: self.modificationThreshold,
226
244
  },
227
245
  });
228
246
  },
@@ -237,6 +255,7 @@ function stateModelFactory(configSchema) {
237
255
  modifications: {
238
256
  isolatedModification: key,
239
257
  twoColor: true,
258
+ threshold: self.modificationThreshold,
240
259
  },
241
260
  });
242
261
  },
@@ -248,9 +267,25 @@ function stateModelFactory(configSchema) {
248
267
  onClick: () => {
249
268
  self.setColorScheme({
250
269
  type: 'methylation',
270
+ modifications: {
271
+ threshold: self.modificationThreshold,
272
+ },
251
273
  });
252
274
  },
253
275
  },
276
+ { type: 'divider' },
277
+ {
278
+ label: `Adjust threshold (${self.modificationThreshold}%)`,
279
+ onClick: () => {
280
+ getSession(self).queueDialog(handleClose => [
281
+ SetModificationThresholdDialog,
282
+ {
283
+ model: self,
284
+ handleClose,
285
+ },
286
+ ]);
287
+ },
288
+ },
254
289
  ]
255
290
  : [
256
291
  {
@@ -7,7 +7,7 @@ export default function register(pluginManager) {
7
7
  const configSchema = configSchemaF(pluginManager);
8
8
  return new DisplayType({
9
9
  name: 'LinearReadArcsDisplay',
10
- displayName: 'Arc display',
10
+ displayName: 'Read arc display',
11
11
  configSchema,
12
12
  stateModel: stateModelF(configSchema),
13
13
  trackType: 'AlignmentsTrack',
@@ -1,6 +1,4 @@
1
1
  import type React from 'react';
2
- import type { ChainData } from '../shared/fetchChains';
3
- import type { ColorBy, FilterBy } from '../shared/types';
4
2
  import type { AnyConfigurationSchemaType } from '@jbrowse/core/configuration';
5
3
  import type { Instance } from 'mobx-state-tree';
6
4
  declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): import("mobx-state-tree").IModelType<{
@@ -12,13 +10,14 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
12
10
  } & {
13
11
  userBpPerPxLimit: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
14
12
  userByteSizeLimit: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
13
+ } & {
14
+ filterBySetting: import("mobx-state-tree").IType<import("../shared/types").FilterBy | undefined, import("../shared/types").FilterBy | undefined, import("../shared/types").FilterBy | undefined>;
15
+ colorBySetting: import("mobx-state-tree").IType<import("../shared/types").ColorBy | undefined, import("../shared/types").ColorBy | undefined, import("../shared/types").ColorBy | undefined>;
15
16
  } & {
16
17
  type: import("mobx-state-tree").ISimpleType<"LinearReadArcsDisplay">;
17
18
  configuration: AnyConfigurationSchemaType;
18
19
  lineWidth: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
19
20
  jitter: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
20
- colorBySetting: import("mobx-state-tree").IType<ColorBy | undefined, ColorBy | undefined, ColorBy | undefined>;
21
- filterBySetting: import("mobx-state-tree").IType<FilterBy | undefined, FilterBy | undefined, FilterBy | undefined>;
22
21
  drawInter: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
23
22
  drawLongRange: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
24
23
  }, {
@@ -115,43 +114,51 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
115
114
  regionCannotBeRendered(_region: import("@jbrowse/core/util").Region): import("react/jsx-runtime").JSX.Element | null;
116
115
  } & {
117
116
  loading: boolean;
118
- chainData: ChainData | undefined;
117
+ chainData: import("../shared/fetchChains").ChainData | undefined;
119
118
  lastDrawnOffsetPx: number | undefined;
120
119
  lastDrawnBpPerPx: number;
121
120
  ref: HTMLCanvasElement | null;
122
- } & {
123
- readonly colorBy: any;
124
- readonly filterBy: any;
125
121
  } & {
126
122
  setLastDrawnOffsetPx(n: number): void;
127
123
  setLastDrawnBpPerPx(n: number): void;
128
124
  setLoading(f: boolean): void;
129
- reload(): void;
130
125
  setRef(ref: HTMLCanvasElement | null): void;
131
126
  setColorScheme(colorBy: {
132
127
  type: string;
133
128
  }): void;
134
- setChainData(args: ChainData): void;
129
+ setChainData(args: import("../shared/fetchChains").ChainData): void;
130
+ setFilterBy(filter: import("../shared/types").FilterBy): void;
131
+ } & {
132
+ readonly drawn: boolean;
133
+ } & {
134
+ readonly colorBy: any;
135
+ readonly filterBy: any;
136
+ } & {
137
+ reload(): void;
135
138
  setDrawInter(f: boolean): void;
136
139
  setDrawLongRange(f: boolean): void;
137
- setFilterBy(filter: FilterBy): void;
138
140
  setLineWidth(n: number): void;
139
141
  setJitter(n: number): void;
140
142
  } & {
141
- readonly drawn: boolean;
142
143
  readonly lineWidthSetting: any;
143
144
  readonly jitterVal: number;
144
145
  } & {
145
146
  renderProps(): any;
146
147
  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 | {
148
+ label: string;
149
+ icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
150
+ muiName: string;
151
+ };
152
+ subMenu: {
153
+ label: string;
154
+ onClick: () => void;
155
+ }[];
156
+ } | {
147
157
  label: string;
148
158
  icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
149
159
  muiName: string;
150
160
  };
151
161
  onClick: () => void;
152
- subMenu?: undefined;
153
- type?: undefined;
154
- checked?: undefined;
155
162
  } | {
156
163
  label: string;
157
164
  subMenu: {
@@ -160,29 +167,15 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
160
167
  label: string;
161
168
  onClick: () => void;
162
169
  }[];
163
- icon?: undefined;
164
- onClick?: undefined;
165
170
  type?: undefined;
166
171
  checked?: undefined;
172
+ onClick?: undefined;
167
173
  } | {
168
174
  label: string;
169
175
  type: string;
170
176
  checked: boolean;
171
177
  onClick: () => void;
172
- icon?: undefined;
173
178
  subMenu?: undefined;
174
- } | {
175
- label: string;
176
- icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
177
- muiName: string;
178
- };
179
- subMenu: {
180
- label: string;
181
- onClick: () => void;
182
- }[];
183
- onClick?: undefined;
184
- type?: undefined;
185
- checked?: undefined;
186
179
  })[];
187
180
  } & {
188
181
  renderSvg(opts: {