@jbrowse/plugin-alignments 1.7.9 → 2.0.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 (294) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +192 -207
  2. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -0
  3. package/dist/AlignmentsFeatureDetail/index.d.ts +28 -3
  4. package/dist/AlignmentsFeatureDetail/index.js +48 -55
  5. package/dist/AlignmentsFeatureDetail/index.js.map +1 -0
  6. package/dist/AlignmentsTrack/index.js +24 -32
  7. package/dist/AlignmentsTrack/index.js.map +1 -0
  8. package/dist/BamAdapter/BamAdapter.js +345 -585
  9. package/dist/BamAdapter/BamAdapter.js.map +1 -0
  10. package/dist/BamAdapter/BamSlightlyLazyFeature.js +143 -174
  11. package/dist/BamAdapter/BamSlightlyLazyFeature.js.map +1 -0
  12. package/dist/BamAdapter/MismatchParser.js +340 -416
  13. package/dist/BamAdapter/MismatchParser.js.map +1 -0
  14. package/dist/BamAdapter/configSchema.js +33 -46
  15. package/dist/BamAdapter/configSchema.js.map +1 -0
  16. package/dist/BamAdapter/index.js +36 -32
  17. package/dist/BamAdapter/index.js.map +1 -0
  18. package/dist/CramAdapter/CramAdapter.js +376 -644
  19. package/dist/CramAdapter/CramAdapter.js.map +1 -0
  20. package/dist/CramAdapter/CramSlightlyLazyFeature.js +374 -439
  21. package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -0
  22. package/dist/CramAdapter/CramTestAdapters.js +169 -227
  23. package/dist/CramAdapter/CramTestAdapters.js.map +1 -0
  24. package/dist/CramAdapter/configSchema.js +28 -38
  25. package/dist/CramAdapter/configSchema.js.map +1 -0
  26. package/dist/CramAdapter/index.js +37 -32
  27. package/dist/CramAdapter/index.js.map +1 -0
  28. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js +91 -93
  29. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js.map +1 -0
  30. package/dist/HtsgetBamAdapter/configSchema.js +19 -29
  31. package/dist/HtsgetBamAdapter/configSchema.js.map +1 -0
  32. package/dist/HtsgetBamAdapter/index.js +44 -38
  33. package/dist/HtsgetBamAdapter/index.js.map +1 -0
  34. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +36 -65
  35. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -0
  36. package/dist/LinearAlignmentsDisplay/index.js +22 -28
  37. package/dist/LinearAlignmentsDisplay/index.js.map +1 -0
  38. package/dist/LinearAlignmentsDisplay/models/configSchema.js +12 -23
  39. package/dist/LinearAlignmentsDisplay/models/configSchema.js.map +1 -0
  40. package/dist/LinearAlignmentsDisplay/models/model.d.ts +10 -10
  41. package/dist/LinearAlignmentsDisplay/models/model.js +257 -245
  42. package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -0
  43. package/dist/LinearPileupDisplay/components/ColorByModifications.js +98 -116
  44. package/dist/LinearPileupDisplay/components/ColorByModifications.js.map +1 -0
  45. package/dist/LinearPileupDisplay/components/ColorByTag.js +82 -91
  46. package/dist/LinearPileupDisplay/components/ColorByTag.js.map +1 -0
  47. package/dist/LinearPileupDisplay/components/FilterByTag.js +156 -192
  48. package/dist/LinearPileupDisplay/components/FilterByTag.js.map +1 -0
  49. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +15 -29
  50. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -0
  51. package/dist/LinearPileupDisplay/components/SetFeatureHeight.js +79 -93
  52. package/dist/LinearPileupDisplay/components/SetFeatureHeight.js.map +1 -0
  53. package/dist/LinearPileupDisplay/components/SetMaxHeight.js +78 -81
  54. package/dist/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -0
  55. package/dist/LinearPileupDisplay/components/SortByTag.js +80 -88
  56. package/dist/LinearPileupDisplay/components/SortByTag.js.map +1 -0
  57. package/dist/LinearPileupDisplay/configSchema.js +40 -42
  58. package/dist/LinearPileupDisplay/configSchema.js.map +1 -0
  59. package/dist/LinearPileupDisplay/index.js +21 -27
  60. package/dist/LinearPileupDisplay/index.js.map +1 -0
  61. package/dist/LinearPileupDisplay/model.d.ts +33 -20
  62. package/dist/LinearPileupDisplay/model.js +702 -716
  63. package/dist/LinearPileupDisplay/model.js.map +1 -0
  64. package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
  65. package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +105 -57
  66. package/dist/LinearSNPCoverageDisplay/components/Tooltip.js.map +1 -0
  67. package/dist/LinearSNPCoverageDisplay/index.js +21 -27
  68. package/dist/LinearSNPCoverageDisplay/index.js.map +1 -0
  69. package/dist/LinearSNPCoverageDisplay/models/configSchema.js +45 -55
  70. package/dist/LinearSNPCoverageDisplay/models/configSchema.js.map +1 -0
  71. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +14 -12
  72. package/dist/LinearSNPCoverageDisplay/models/model.js +257 -230
  73. package/dist/LinearSNPCoverageDisplay/models/model.js.map +1 -0
  74. package/dist/NestedFrequencyTable.js +104 -139
  75. package/dist/NestedFrequencyTable.js.map +1 -0
  76. package/dist/PileupRPC/rpcMethods.js +199 -278
  77. package/dist/PileupRPC/rpcMethods.js.map +1 -0
  78. package/dist/PileupRenderer/PileupLayoutSession.js +56 -76
  79. package/dist/PileupRenderer/PileupLayoutSession.js.map +1 -0
  80. package/dist/PileupRenderer/PileupRenderer.d.ts +56 -11
  81. package/dist/PileupRenderer/PileupRenderer.js +942 -1134
  82. package/dist/PileupRenderer/PileupRenderer.js.map +1 -0
  83. package/dist/PileupRenderer/components/PileupRendering.d.ts +1 -1
  84. package/dist/PileupRenderer/components/PileupRendering.js +173 -253
  85. package/dist/PileupRenderer/components/PileupRendering.js.map +1 -0
  86. package/dist/PileupRenderer/configSchema.js +65 -71
  87. package/dist/PileupRenderer/configSchema.js.map +1 -0
  88. package/dist/PileupRenderer/index.js +17 -22
  89. package/dist/PileupRenderer/index.js.map +1 -0
  90. package/dist/PileupRenderer/sortUtil.js +83 -107
  91. package/dist/PileupRenderer/sortUtil.js.map +1 -0
  92. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +2 -0
  93. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +436 -586
  94. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -0
  95. package/dist/SNPCoverageAdapter/configSchema.js +10 -20
  96. package/dist/SNPCoverageAdapter/configSchema.js.map +1 -0
  97. package/dist/SNPCoverageAdapter/index.js +46 -41
  98. package/dist/SNPCoverageAdapter/index.js.map +1 -0
  99. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +1 -1
  100. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +265 -290
  101. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -0
  102. package/dist/SNPCoverageRenderer/configSchema.js +30 -39
  103. package/dist/SNPCoverageRenderer/configSchema.js.map +1 -0
  104. package/dist/SNPCoverageRenderer/index.js +19 -30
  105. package/dist/SNPCoverageRenderer/index.js.map +1 -0
  106. package/dist/index.js +135 -152
  107. package/dist/index.js.map +1 -0
  108. package/dist/shared.js +84 -92
  109. package/dist/shared.js.map +1 -0
  110. package/dist/util.js +130 -121
  111. package/dist/util.js.map +1 -0
  112. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +6 -0
  113. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +145 -0
  114. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -0
  115. package/esm/AlignmentsFeatureDetail/index.d.ts +38 -0
  116. package/esm/AlignmentsFeatureDetail/index.js +23 -0
  117. package/esm/AlignmentsFeatureDetail/index.js.map +1 -0
  118. package/esm/AlignmentsTrack/index.d.ts +2 -0
  119. package/esm/AlignmentsTrack/index.js +23 -0
  120. package/esm/AlignmentsTrack/index.js.map +1 -0
  121. package/esm/BamAdapter/BamAdapter.d.ts +40 -0
  122. package/esm/BamAdapter/BamAdapter.js +173 -0
  123. package/esm/BamAdapter/BamAdapter.js.map +1 -0
  124. package/esm/BamAdapter/BamSlightlyLazyFeature.d.ts +33 -0
  125. package/esm/BamAdapter/BamSlightlyLazyFeature.js +107 -0
  126. package/esm/BamAdapter/BamSlightlyLazyFeature.js.map +1 -0
  127. package/esm/BamAdapter/MismatchParser.d.ts +25 -0
  128. package/esm/BamAdapter/MismatchParser.js +294 -0
  129. package/esm/BamAdapter/MismatchParser.js.map +1 -0
  130. package/esm/BamAdapter/configSchema.d.ts +2 -0
  131. package/esm/BamAdapter/configSchema.js +31 -0
  132. package/esm/BamAdapter/configSchema.js.map +1 -0
  133. package/esm/BamAdapter/index.d.ts +3 -0
  134. package/esm/BamAdapter/index.js +10 -0
  135. package/esm/BamAdapter/index.js.map +1 -0
  136. package/esm/CramAdapter/CramAdapter.d.ts +53 -0
  137. package/esm/CramAdapter/CramAdapter.js +228 -0
  138. package/esm/CramAdapter/CramAdapter.js.map +1 -0
  139. package/esm/CramAdapter/CramSlightlyLazyFeature.d.ts +49 -0
  140. package/esm/CramAdapter/CramSlightlyLazyFeature.js +349 -0
  141. package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -0
  142. package/esm/CramAdapter/CramTestAdapters.d.ts +29 -0
  143. package/esm/CramAdapter/CramTestAdapters.js +70 -0
  144. package/esm/CramAdapter/CramTestAdapters.js.map +1 -0
  145. package/esm/CramAdapter/configSchema.d.ts +3 -0
  146. package/esm/CramAdapter/configSchema.js +26 -0
  147. package/esm/CramAdapter/configSchema.js.map +1 -0
  148. package/esm/CramAdapter/index.d.ts +3 -0
  149. package/esm/CramAdapter/index.js +11 -0
  150. package/esm/CramAdapter/index.js.map +1 -0
  151. package/esm/HtsgetBamAdapter/HtsgetBamAdapter.d.ts +9 -0
  152. package/esm/HtsgetBamAdapter/HtsgetBamAdapter.js +27 -0
  153. package/esm/HtsgetBamAdapter/HtsgetBamAdapter.js.map +1 -0
  154. package/esm/HtsgetBamAdapter/configSchema.d.ts +2 -0
  155. package/esm/HtsgetBamAdapter/configSchema.js +17 -0
  156. package/esm/HtsgetBamAdapter/configSchema.js.map +1 -0
  157. package/esm/HtsgetBamAdapter/index.d.ts +3 -0
  158. package/esm/HtsgetBamAdapter/index.js +16 -0
  159. package/esm/HtsgetBamAdapter/index.js.map +1 -0
  160. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +7 -0
  161. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +34 -0
  162. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -0
  163. package/esm/LinearAlignmentsDisplay/index.d.ts +2 -0
  164. package/esm/LinearAlignmentsDisplay/index.js +19 -0
  165. package/esm/LinearAlignmentsDisplay/index.js.map +1 -0
  166. package/esm/LinearAlignmentsDisplay/models/configSchema.d.ts +4 -0
  167. package/esm/LinearAlignmentsDisplay/models/configSchema.js +12 -0
  168. package/esm/LinearAlignmentsDisplay/models/configSchema.js.map +1 -0
  169. package/esm/LinearAlignmentsDisplay/models/model.d.ts +105 -0
  170. package/esm/LinearAlignmentsDisplay/models/model.js +181 -0
  171. package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -0
  172. package/esm/LinearPileupDisplay/components/ColorByModifications.d.ts +14 -0
  173. package/esm/LinearPileupDisplay/components/ColorByModifications.js +71 -0
  174. package/esm/LinearPileupDisplay/components/ColorByModifications.js.map +1 -0
  175. package/esm/LinearPileupDisplay/components/ColorByTag.d.ts +9 -0
  176. package/esm/LinearPileupDisplay/components/ColorByTag.js +45 -0
  177. package/esm/LinearPileupDisplay/components/ColorByTag.js.map +1 -0
  178. package/esm/LinearPileupDisplay/components/FilterByTag.d.ts +18 -0
  179. package/esm/LinearPileupDisplay/components/FilterByTag.js +123 -0
  180. package/esm/LinearPileupDisplay/components/FilterByTag.js.map +1 -0
  181. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +13 -0
  182. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +13 -0
  183. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -0
  184. package/esm/LinearPileupDisplay/components/SetFeatureHeight.d.ts +16 -0
  185. package/esm/LinearPileupDisplay/components/SetFeatureHeight.js +41 -0
  186. package/esm/LinearPileupDisplay/components/SetFeatureHeight.js.map +1 -0
  187. package/esm/LinearPileupDisplay/components/SetMaxHeight.d.ts +10 -0
  188. package/esm/LinearPileupDisplay/components/SetMaxHeight.js +43 -0
  189. package/esm/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -0
  190. package/esm/LinearPileupDisplay/components/SortByTag.d.ts +9 -0
  191. package/esm/LinearPileupDisplay/components/SortByTag.js +43 -0
  192. package/esm/LinearPileupDisplay/components/SortByTag.js.map +1 -0
  193. package/esm/LinearPileupDisplay/configSchema.d.ts +6 -0
  194. package/esm/LinearPileupDisplay/configSchema.js +41 -0
  195. package/esm/LinearPileupDisplay/configSchema.js.map +1 -0
  196. package/esm/LinearPileupDisplay/index.d.ts +2 -0
  197. package/esm/LinearPileupDisplay/index.js +18 -0
  198. package/esm/LinearPileupDisplay/index.js.map +1 -0
  199. package/esm/LinearPileupDisplay/model.d.ts +332 -0
  200. package/esm/LinearPileupDisplay/model.js +576 -0
  201. package/esm/LinearPileupDisplay/model.js.map +1 -0
  202. package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +10 -0
  203. package/esm/LinearSNPCoverageDisplay/components/Tooltip.js +57 -0
  204. package/esm/LinearSNPCoverageDisplay/components/Tooltip.js.map +1 -0
  205. package/esm/LinearSNPCoverageDisplay/index.d.ts +2 -0
  206. package/esm/LinearSNPCoverageDisplay/index.js +18 -0
  207. package/esm/LinearSNPCoverageDisplay/index.js.map +1 -0
  208. package/esm/LinearSNPCoverageDisplay/models/configSchema.d.ts +2 -0
  209. package/esm/LinearSNPCoverageDisplay/models/configSchema.js +44 -0
  210. package/esm/LinearSNPCoverageDisplay/models/configSchema.js.map +1 -0
  211. package/esm/LinearSNPCoverageDisplay/models/model.d.ts +348 -0
  212. package/esm/LinearSNPCoverageDisplay/models/model.js +185 -0
  213. package/esm/LinearSNPCoverageDisplay/models/model.js.map +1 -0
  214. package/esm/NestedFrequencyTable.d.ts +14 -0
  215. package/esm/NestedFrequencyTable.js +101 -0
  216. package/esm/NestedFrequencyTable.js.map +1 -0
  217. package/esm/PileupRPC/rpcMethods.d.ts +34 -0
  218. package/esm/PileupRPC/rpcMethods.js +70 -0
  219. package/esm/PileupRPC/rpcMethods.js.map +1 -0
  220. package/esm/PileupRenderer/PileupLayoutSession.d.ts +32 -0
  221. package/esm/PileupRenderer/PileupLayoutSession.js +32 -0
  222. package/esm/PileupRenderer/PileupLayoutSession.js.map +1 -0
  223. package/esm/PileupRenderer/PileupRenderer.d.ts +182 -0
  224. package/esm/PileupRenderer/PileupRenderer.js +830 -0
  225. package/esm/PileupRenderer/PileupRenderer.js.map +1 -0
  226. package/esm/PileupRenderer/components/PileupRendering.d.ts +23 -0
  227. package/esm/PileupRenderer/components/PileupRendering.js +138 -0
  228. package/esm/PileupRenderer/components/PileupRendering.js.map +1 -0
  229. package/esm/PileupRenderer/configSchema.d.ts +2 -0
  230. package/esm/PileupRenderer/configSchema.js +64 -0
  231. package/esm/PileupRenderer/configSchema.js.map +1 -0
  232. package/esm/PileupRenderer/index.d.ts +2 -0
  233. package/esm/PileupRenderer/index.js +12 -0
  234. package/esm/PileupRenderer/index.js.map +1 -0
  235. package/esm/PileupRenderer/sortUtil.d.ts +8 -0
  236. package/esm/PileupRenderer/sortUtil.js +80 -0
  237. package/esm/PileupRenderer/sortUtil.js.map +1 -0
  238. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +67 -0
  239. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js +259 -0
  240. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -0
  241. package/esm/SNPCoverageAdapter/configSchema.d.ts +3 -0
  242. package/esm/SNPCoverageAdapter/configSchema.js +6 -0
  243. package/esm/SNPCoverageAdapter/configSchema.js.map +1 -0
  244. package/esm/SNPCoverageAdapter/index.d.ts +3 -0
  245. package/esm/SNPCoverageAdapter/index.js +18 -0
  246. package/esm/SNPCoverageAdapter/index.js.map +1 -0
  247. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +20 -0
  248. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +185 -0
  249. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -0
  250. package/esm/SNPCoverageRenderer/configSchema.d.ts +2 -0
  251. package/esm/SNPCoverageRenderer/configSchema.js +29 -0
  252. package/esm/SNPCoverageRenderer/configSchema.js.map +1 -0
  253. package/esm/SNPCoverageRenderer/index.d.ts +3 -0
  254. package/esm/SNPCoverageRenderer/index.js +14 -0
  255. package/esm/SNPCoverageRenderer/index.js.map +1 -0
  256. package/esm/index.d.ts +10 -0
  257. package/esm/index.js +91 -0
  258. package/esm/index.js.map +1 -0
  259. package/esm/shared.d.ts +25 -0
  260. package/esm/shared.js +28 -0
  261. package/esm/shared.js.map +1 -0
  262. package/esm/util.d.ts +19 -0
  263. package/esm/util.js +83 -0
  264. package/esm/util.js.map +1 -0
  265. package/package.json +19 -11
  266. package/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx +16 -6
  267. package/src/AlignmentsFeatureDetail/__snapshots__/index.test.js.snap +321 -397
  268. package/src/AlignmentsFeatureDetail/index.ts +7 -17
  269. package/src/BamAdapter/MismatchParser.ts +1 -0
  270. package/src/LinearAlignmentsDisplay/components/AlignmentsDisplay.tsx +3 -3
  271. package/src/LinearPileupDisplay/components/ColorByModifications.tsx +7 -7
  272. package/src/LinearPileupDisplay/components/ColorByTag.tsx +5 -5
  273. package/src/LinearPileupDisplay/components/FilterByTag.tsx +5 -5
  274. package/src/LinearPileupDisplay/components/LinearPileupDisplayBlurb.tsx +1 -1
  275. package/src/LinearPileupDisplay/components/SetFeatureHeight.tsx +9 -9
  276. package/src/LinearPileupDisplay/components/SetMaxHeight.tsx +5 -5
  277. package/src/LinearPileupDisplay/components/SortByTag.tsx +5 -5
  278. package/src/LinearPileupDisplay/model.ts +90 -32
  279. package/src/LinearSNPCoverageDisplay/components/Tooltip.tsx +44 -30
  280. package/src/LinearSNPCoverageDisplay/models/model.ts +25 -25
  281. package/src/PileupRenderer/PileupRenderer.tsx +399 -198
  282. package/src/PileupRenderer/components/PileupRendering.tsx +11 -11
  283. package/src/SNPCoverageAdapter/SNPCoverageAdapter.ts +5 -0
  284. package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +7 -5
  285. package/dist/AlignmentsFeatureDetail/index.test.js +0 -60
  286. package/dist/BamAdapter/BamAdapter.test.js +0 -177
  287. package/dist/BamAdapter/MismatchParser.test.js +0 -251
  288. package/dist/CramAdapter/CramAdapter.test.js +0 -138
  289. package/dist/LinearAlignmentsDisplay/models/configSchema.test.js +0 -83
  290. package/dist/LinearPileupDisplay/configSchema.test.js +0 -92
  291. package/dist/LinearSNPCoverageDisplay/models/configSchema.test.js +0 -62
  292. package/dist/PileupRenderer/components/PileupRendering.test.js +0 -36
  293. package/dist/declare.d.js +0 -1
  294. package/dist/index.test.js +0 -26
@@ -1,30 +1,20 @@
1
1
  import { lazy } from 'react'
2
2
  import PluginManager from '@jbrowse/core/PluginManager'
3
3
  import { ConfigurationSchema } from '@jbrowse/core/configuration'
4
- import { ElementId } from '@jbrowse/core/util/types/mst'
5
4
  import { types } from 'mobx-state-tree'
6
5
  import WidgetType from '@jbrowse/core/pluggableElementTypes/WidgetType'
6
+ import { stateModelFactory as baseModelFactory } from '@jbrowse/core/BaseFeatureWidget'
7
7
 
8
8
  const configSchema = ConfigurationSchema('AlignmentsFeatureWidget', {})
9
9
 
10
10
  export function stateModelFactory(pluginManager: PluginManager) {
11
- return types
12
- .model('AlignmentsFeatureWidget', {
13
- id: ElementId,
11
+ const baseModel = baseModelFactory(pluginManager)
12
+ return types.compose(
13
+ baseModel,
14
+ types.model('AlignmentsFeatureWidget', {
14
15
  type: types.literal('AlignmentsFeatureWidget'),
15
- featureData: types.frozen(),
16
- view: types.safeReference(
17
- pluginManager.pluggableMstType('view', 'stateModel'),
18
- ),
19
- })
20
- .actions(self => ({
21
- setFeatureData(data: unknown) {
22
- self.featureData = data
23
- },
24
- clearFeatureData() {
25
- self.featureData = undefined
26
- },
27
- }))
16
+ }),
17
+ )
28
18
  }
29
19
 
30
20
  export default function register(pluginManager: PluginManager) {
@@ -39,6 +39,7 @@ export function cigarToMismatches(
39
39
  start: roffset + j,
40
40
  type: 'mismatch',
41
41
  base: seq[soffset + j],
42
+ altbase: ref[roffset + j],
42
43
  length: 1,
43
44
  })
44
45
  }
@@ -2,10 +2,10 @@ import React from 'react'
2
2
  import { observer } from 'mobx-react'
3
3
  import { getConf } from '@jbrowse/core/configuration'
4
4
  import { ResizeHandle } from '@jbrowse/core/ui'
5
- import { makeStyles } from '@material-ui/core'
5
+ import { makeStyles } from 'tss-react/mui'
6
6
  import { AlignmentsDisplayModel } from '../models/model'
7
7
 
8
- const useStyles = makeStyles(() => ({
8
+ const useStyles = makeStyles()(() => ({
9
9
  resizeHandle: {
10
10
  height: 2,
11
11
  position: 'absolute',
@@ -15,7 +15,7 @@ const useStyles = makeStyles(() => ({
15
15
 
16
16
  function AlignmentsDisplay({ model }: { model: AlignmentsDisplayModel }) {
17
17
  const { PileupDisplay, SNPCoverageDisplay, showPileup, showCoverage } = model
18
- const classes = useStyles()
18
+ const { classes } = useStyles()
19
19
  const top = SNPCoverageDisplay.height
20
20
  return (
21
21
  <div
@@ -3,18 +3,18 @@ import { observer } from 'mobx-react'
3
3
  import { ObservableMap } from 'mobx'
4
4
  import {
5
5
  Button,
6
+ CircularProgress,
6
7
  Dialog,
7
8
  DialogActions,
8
9
  DialogContent,
9
10
  DialogTitle,
10
11
  IconButton,
11
12
  Typography,
12
- CircularProgress,
13
- makeStyles,
14
- } from '@material-ui/core'
15
- import CloseIcon from '@material-ui/icons/Close'
13
+ } from '@mui/material'
14
+ import { makeStyles } from 'tss-react/mui'
15
+ import CloseIcon from '@mui/icons-material/Close'
16
16
 
17
- const useStyles = makeStyles(theme => ({
17
+ const useStyles = makeStyles()(theme => ({
18
18
  closeButton: {
19
19
  position: 'absolute',
20
20
  right: theme.spacing(1),
@@ -35,7 +35,7 @@ function ModificationTable({
35
35
  }: {
36
36
  modifications: [string, string][]
37
37
  }) {
38
- const classes = useStyles()
38
+ const { classes } = useStyles()
39
39
  return (
40
40
  <table className={classes.table}>
41
41
  <tbody>
@@ -64,7 +64,7 @@ function ColorByTagDlg(props: {
64
64
  }
65
65
  handleClose: () => void
66
66
  }) {
67
- const classes = useStyles()
67
+ const { classes } = useStyles()
68
68
  const { model, handleClose } = props
69
69
  const { colorBy, modificationTagMap } = model
70
70
 
@@ -9,11 +9,11 @@ import {
9
9
  IconButton,
10
10
  TextField,
11
11
  Typography,
12
- makeStyles,
13
- } from '@material-ui/core'
14
- import CloseIcon from '@material-ui/icons/Close'
12
+ } from '@mui/material'
13
+ import { makeStyles } from 'tss-react/mui'
14
+ import CloseIcon from '@mui/icons-material/Close'
15
15
 
16
- const useStyles = makeStyles(theme => ({
16
+ const useStyles = makeStyles()(theme => ({
17
17
  root: {
18
18
  width: 300,
19
19
  },
@@ -29,7 +29,7 @@ function ColorByTagDlg(props: {
29
29
  model: { setColorScheme: Function }
30
30
  handleClose: () => void
31
31
  }) {
32
- const classes = useStyles()
32
+ const { classes } = useStyles()
33
33
  const { model, handleClose } = props
34
34
  const [tag, setTag] = useState('')
35
35
  const validTag = tag.match(/^[A-Za-z][A-Za-z0-9]$/)
@@ -11,12 +11,12 @@ import {
11
11
  Paper,
12
12
  TextField,
13
13
  Typography,
14
- makeStyles,
15
- } from '@material-ui/core'
14
+ } from '@mui/material'
15
+ import { makeStyles } from 'tss-react/mui'
16
16
 
17
- import CloseIcon from '@material-ui/icons/Close'
17
+ import CloseIcon from '@mui/icons-material/Close'
18
18
 
19
- const useStyles = makeStyles(theme => ({
19
+ const useStyles = makeStyles()(theme => ({
20
20
  paper: {
21
21
  padding: theme.spacing(2),
22
22
  margin: theme.spacing(2),
@@ -93,7 +93,7 @@ function FilterByTagDlg(props: {
93
93
  handleClose: () => void
94
94
  }) {
95
95
  const { model, handleClose } = props
96
- const classes = useStyles()
96
+ const { classes } = useStyles()
97
97
  const { filterBy } = model
98
98
  const [flagInclude, setFlagInclude] = useState(filterBy?.flagInclude)
99
99
  const [flagExclude, setFlagExclude] = useState(filterBy?.flagExclude)
@@ -1,6 +1,6 @@
1
1
  import React from 'react'
2
2
  import { observer } from 'mobx-react'
3
- import Typography from '@material-ui/core/Typography'
3
+ import Typography from '@mui/material/Typography'
4
4
 
5
5
  export interface LinearPileupDisplayBlurbProps {
6
6
  model: {
@@ -2,20 +2,20 @@ import React, { useState } from 'react'
2
2
  import { observer } from 'mobx-react'
3
3
  import {
4
4
  Button,
5
- TextField,
6
- Typography,
7
- IconButton,
5
+ Checkbox,
8
6
  Dialog,
9
7
  DialogActions,
10
8
  DialogContent,
11
9
  DialogTitle,
12
- Checkbox,
13
10
  FormControlLabel,
14
- makeStyles,
15
- } from '@material-ui/core'
16
- import CloseIcon from '@material-ui/icons/Close'
11
+ IconButton,
12
+ TextField,
13
+ Typography,
14
+ } from '@mui/material'
15
+ import { makeStyles } from 'tss-react/mui'
16
+ import CloseIcon from '@mui/icons-material/Close'
17
17
 
18
- const useStyles = makeStyles(theme => ({
18
+ const useStyles = makeStyles()(theme => ({
19
19
  closeButton: {
20
20
  position: 'absolute',
21
21
  right: theme.spacing(1),
@@ -37,7 +37,7 @@ function SetFeatureHeightDlg(props: {
37
37
  }
38
38
  handleClose: () => void
39
39
  }) {
40
- const classes = useStyles()
40
+ const { classes } = useStyles()
41
41
  const { model, handleClose } = props
42
42
  const { featureHeightSetting, noSpacing: noSpacingSetting } = model
43
43
  const [height, setHeight] = useState(`${featureHeightSetting}`)
@@ -9,11 +9,11 @@ import {
9
9
  IconButton,
10
10
  TextField,
11
11
  Typography,
12
- makeStyles,
13
- } from '@material-ui/core'
14
- import CloseIcon from '@material-ui/icons/Close'
12
+ } from '@mui/material'
13
+ import { makeStyles } from 'tss-react/mui'
14
+ import CloseIcon from '@mui/icons-material/Close'
15
15
 
16
- const useStyles = makeStyles(theme => ({
16
+ const useStyles = makeStyles()(theme => ({
17
17
  root: {
18
18
  width: 500,
19
19
  },
@@ -36,7 +36,7 @@ function SetMaxHeightDlg(props: {
36
36
  handleClose: () => void
37
37
  }) {
38
38
  const { model, handleClose } = props
39
- const classes = useStyles()
39
+ const { classes } = useStyles()
40
40
  const { maxHeight = '' } = model
41
41
  const [max, setMax] = useState(`${maxHeight}`)
42
42
 
@@ -9,12 +9,12 @@ import {
9
9
  IconButton,
10
10
  TextField,
11
11
  Typography,
12
- makeStyles,
13
- } from '@material-ui/core'
12
+ } from '@mui/material'
13
+ import { makeStyles } from 'tss-react/mui'
14
14
 
15
- import CloseIcon from '@material-ui/icons/Close'
15
+ import CloseIcon from '@mui/icons-material/Close'
16
16
 
17
- const useStyles = makeStyles(theme => ({
17
+ const useStyles = makeStyles()(theme => ({
18
18
  root: {
19
19
  margin: 0,
20
20
  padding: theme.spacing(2),
@@ -31,7 +31,7 @@ function SortByTagDlg(props: {
31
31
  model: { setSortedBy: Function }
32
32
  handleClose: () => void
33
33
  }) {
34
- const classes = useStyles()
34
+ const { classes } = useStyles()
35
35
  const { model, handleClose } = props
36
36
  const [tag, setTag] = useState('')
37
37
  const validTag = tag.match(/^[A-Za-z][A-Za-z0-9]$/)
@@ -1,5 +1,9 @@
1
1
  import { lazy } from 'react'
2
+ import { autorun, observable } from 'mobx'
3
+ import { cast, types, addDisposer, getEnv, Instance } from 'mobx-state-tree'
4
+ import copy from 'copy-to-clipboard'
2
5
  import {
6
+ AnyConfigurationModel,
3
7
  ConfigurationReference,
4
8
  readConfObject,
5
9
  getConf,
@@ -13,26 +17,25 @@ import {
13
17
  Feature,
14
18
  } from '@jbrowse/core/util'
15
19
 
16
- import VisibilityIcon from '@material-ui/icons/Visibility'
17
- import { ContentCopy as ContentCopyIcon } from '@jbrowse/core/ui/Icons'
18
20
  import {
19
21
  LinearGenomeViewModel,
20
22
  BaseLinearDisplay,
21
23
  } from '@jbrowse/plugin-linear-genome-view'
22
- import { cast, types, addDisposer, getEnv, Instance } from 'mobx-state-tree'
23
- import copy from 'copy-to-clipboard'
24
- import MenuOpenIcon from '@material-ui/icons/MenuOpen'
25
- import SortIcon from '@material-ui/icons/Sort'
26
- import PaletteIcon from '@material-ui/icons/Palette'
27
- import FilterListIcon from '@material-ui/icons/ClearAll'
28
24
 
29
- import { autorun, observable } from 'mobx'
30
- import { AnyConfigurationModel } from '@jbrowse/core/configuration/configurationSchema'
25
+ // icons
26
+ import VisibilityIcon from '@mui/icons-material/Visibility'
27
+ import { ContentCopy as ContentCopyIcon } from '@jbrowse/core/ui/Icons'
28
+ import MenuOpenIcon from '@mui/icons-material/MenuOpen'
29
+ import SortIcon from '@mui/icons-material/Sort'
30
+ import PaletteIcon from '@mui/icons-material/Palette'
31
+ import FilterListIcon from '@mui/icons-material/ClearAll'
32
+
33
+ // locals
31
34
  import { LinearPileupDisplayConfigModel } from './configSchema'
32
35
  import LinearPileupDisplayBlurb from './components/LinearPileupDisplayBlurb'
33
-
34
36
  import { getUniqueTagValues, getUniqueModificationValues } from '../shared'
35
37
 
38
+ // async
36
39
  const ColorByTagDlg = lazy(() => import('./components/ColorByTag'))
37
40
  const FilterByTagDlg = lazy(() => import('./components/FilterByTag'))
38
41
  const SortByTagDlg = lazy(() => import('./components/SortByTag'))
@@ -94,6 +97,7 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
94
97
  .volatile(() => ({
95
98
  colorTagMap: observable.map<string, string>({}),
96
99
  modificationTagMap: observable.map<string, string>({}),
100
+ featureUnderMouseVolatile: undefined as undefined | Feature,
97
101
  ready: false,
98
102
  }))
99
103
  .actions(self => ({
@@ -128,7 +132,9 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
128
132
  },
129
133
 
130
134
  updateColorTagMap(uniqueTag: string[]) {
131
- // pale color scheme https://cran.r-project.org/web/packages/khroma/vignettes/tol.html e.g. "tol_light"
135
+ // pale color scheme
136
+ // https://cran.r-project.org/web/packages/khroma/vignettes/tol.html
137
+ // e.g. "tol_light"
132
138
  const colorPalette = [
133
139
  '#BBCCEE',
134
140
  'pink',
@@ -150,6 +156,9 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
150
156
  }
151
157
  })
152
158
  },
159
+ setFeatureUnderMouse(feat?: Feature) {
160
+ self.featureUnderMouseVolatile = feat
161
+ },
153
162
  }))
154
163
  .actions(self => ({
155
164
  afterAttach() {
@@ -169,6 +178,13 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
169
178
  } = self
170
179
  const { staticBlocks, bpPerPx } = view
171
180
 
181
+ if (!self.estimatedStatsReady) {
182
+ return
183
+ }
184
+ if (self.regionTooLarge) {
185
+ return
186
+ }
187
+
172
188
  // continually generate the vc pairing, set and rerender if any
173
189
  // new values seen
174
190
  if (colorBy?.tag) {
@@ -226,6 +242,48 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
226
242
  { delay: 1000 },
227
243
  ),
228
244
  )
245
+
246
+ // autorun synchronizes featureUnderMouse with featureIdUnderMouse
247
+ addDisposer(
248
+ self,
249
+ autorun(async () => {
250
+ const session = getSession(self)
251
+ try {
252
+ const featureId = self.featureIdUnderMouse
253
+ if (self.featureUnderMouse?.id() !== featureId) {
254
+ if (!featureId) {
255
+ self.setFeatureUnderMouse(undefined)
256
+ } else {
257
+ const sessionId = getRpcSessionId(self)
258
+ const view = getContainingView(self)
259
+ const { feature } = (await session.rpcManager.call(
260
+ sessionId,
261
+ 'CoreGetFeatureDetails',
262
+ {
263
+ featureId,
264
+ sessionId,
265
+ layoutId: view.id,
266
+ rendererType: 'PileupRenderer',
267
+ },
268
+ )) as { feature: unknown }
269
+
270
+ // check featureIdUnderMouse is still the same as the
271
+ // feature.id that was returned e.g. that the user hasn't
272
+ // moused over to a new position during the async operation
273
+ // above
274
+ // @ts-ignore
275
+ if (self.featureIdUnderMouse === feature.uniqueId) {
276
+ // @ts-ignore
277
+ self.setFeatureUnderMouse(new SimpleFeature(feature))
278
+ }
279
+ }
280
+ }
281
+ } catch (e) {
282
+ console.error(e)
283
+ session.notify(`${e}`, 'error')
284
+ }
285
+ }),
286
+ )
229
287
  },
230
288
  selectFeature(feature: Feature) {
231
289
  const session = getSession(self)
@@ -270,16 +328,15 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
270
328
  }
271
329
  const { refName, assemblyName, offset } = centerLineInfo
272
330
  const centerBp = Math.round(offset) + 1
273
- const centerRefName = refName
274
331
 
275
- if (centerBp < 0) {
332
+ if (centerBp < 0 || !refName) {
276
333
  return
277
334
  }
278
335
 
279
336
  self.sortedBy = {
280
337
  type,
281
338
  pos: centerBp,
282
- refName: centerRefName,
339
+ refName,
283
340
  assemblyName,
284
341
  tag,
285
342
  }
@@ -337,6 +394,9 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
337
394
  ? self.mismatchAlpha
338
395
  : readConfObject(this.rendererConfig, 'mismatchAlpha')
339
396
  },
397
+ get featureUnderMouse() {
398
+ return self.featureUnderMouseVolatile
399
+ },
340
400
  }))
341
401
  .views(self => {
342
402
  const {
@@ -395,6 +455,8 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
395
455
  colorBy,
396
456
  filterBy,
397
457
  rpcDriverName,
458
+ currBpPerPx,
459
+ ready,
398
460
  } = self
399
461
 
400
462
  const superProps = superRenderProps()
@@ -403,18 +465,18 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
403
465
  ...superProps,
404
466
  notReady:
405
467
  superProps.notReady ||
406
- !self.ready ||
407
- (sortedBy && self.currBpPerPx !== view.bpPerPx),
468
+ !ready ||
469
+ (sortedBy && currBpPerPx !== view.bpPerPx),
408
470
  rpcDriverName,
409
471
  displayModel: self,
410
472
  sortedBy,
411
473
  colorBy,
412
474
  filterBy: JSON.parse(JSON.stringify(filterBy)),
413
- colorTagMap: JSON.parse(JSON.stringify(colorTagMap)),
414
- modificationTagMap: JSON.parse(JSON.stringify(modificationTagMap)),
475
+ colorTagMap: Object.fromEntries(colorTagMap.toJSON()),
476
+ modificationTagMap: Object.fromEntries(modificationTagMap.toJSON()),
415
477
  showSoftClip: self.showSoftClipping,
416
478
  config: self.rendererConfig,
417
- async onFeatureClick(_: unknown, featureId: string | undefined) {
479
+ async onFeatureClick(_: unknown, featureId?: string) {
418
480
  const session = getSession(self)
419
481
  const { rpcManager } = session
420
482
  try {
@@ -444,14 +506,12 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
444
506
  session.notify(`${e}`)
445
507
  }
446
508
  },
509
+
447
510
  onClick() {
448
511
  self.clearFeatureSelection()
449
512
  },
450
513
  // similar to click but opens a menu with further options
451
- async onFeatureContextMenu(
452
- _: unknown,
453
- featureId: string | undefined,
454
- ) {
514
+ async onFeatureContextMenu(_: unknown, featureId?: string) {
455
515
  const session = getSession(self)
456
516
  const { rpcManager } = session
457
517
  try {
@@ -507,19 +567,17 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
507
567
  disabled: self.showSoftClipping,
508
568
  subMenu: [
509
569
  ...['Start location', 'Read strand', 'Base pair'].map(
510
- option => {
511
- return {
512
- label: option,
513
- onClick: () => self.setSortedBy(option),
514
- }
515
- },
570
+ option => ({
571
+ label: option,
572
+ onClick: () => self.setSortedBy(option),
573
+ }),
516
574
  ),
517
575
  {
518
576
  label: 'Sort by tag...',
519
577
  onClick: () => {
520
- getSession(self).queueDialog(doneCallback => [
578
+ getSession(self).queueDialog(handleClose => [
521
579
  SortByTagDlg,
522
- { model: self, handleClose: doneCallback },
580
+ { model: self, handleClose },
523
581
  ])
524
582
  },
525
583
  },
@@ -7,37 +7,51 @@ import { Tooltip } from '@jbrowse/plugin-wiggle'
7
7
  type Count = {
8
8
  [key: string]: {
9
9
  total: number
10
+ '-1': number
11
+ '0': number
12
+ '1': number
10
13
  }
11
14
  }
12
15
 
13
16
  type SNPInfo = {
14
- ref: Count
15
17
  cov: Count
16
18
  lowqual: Count
17
19
  noncov: Count
18
20
  delskips: Count
21
+ refbase: string
19
22
  total: number
23
+ ref: number
24
+ all: number
20
25
  '-1': number
21
26
  '0': number
22
27
  '1': number
23
28
  }
24
29
 
25
30
  const en = (n: number) => n.toLocaleString('en-US')
31
+ const toP = (s = 0) => +(+s).toFixed(1)
32
+ const pct = (n: number, total: number) => `${toP((n / (total || 1)) * 100)}%`
26
33
 
27
34
  const TooltipContents = React.forwardRef(
28
- ({ feature }: { feature: Feature }, ref: any) => {
35
+ ({ feature }: { feature: Feature }, reactRef: any) => {
29
36
  const start = feature.get('start')
30
37
  const end = feature.get('end')
31
38
  const name = feature.get('refName')
32
- const info = feature.get('snpinfo') as SNPInfo
39
+ const {
40
+ refbase,
41
+ all,
42
+ total,
43
+ ref,
44
+ '-1': rn1,
45
+ '1': r1,
46
+ '0': r0,
47
+ ...info
48
+ } = feature.get('snpinfo') as SNPInfo
33
49
  const loc = [name, start === end ? en(start) : `${en(start)}..${en(end)}`]
34
50
  .filter(f => !!f)
35
51
  .join(':')
36
52
 
37
- const total = info?.total
38
-
39
53
  return (
40
- <div ref={ref}>
54
+ <div ref={reactRef}>
41
55
  <table>
42
56
  <caption>{loc}</caption>
43
57
  <thead>
@@ -52,37 +66,37 @@ const TooltipContents = React.forwardRef(
52
66
  <tbody>
53
67
  <tr>
54
68
  <td>Total</td>
55
- <td>{info.total}</td>
69
+ <td>{all}</td>
56
70
  </tr>
57
71
  <tr>
58
- <td>REF</td>
59
- <td>{info.ref}</td>
72
+ <td>REF {refbase ? `(${refbase.toUpperCase()})` : ''}</td>
73
+ <td>{ref}</td>
74
+ <td>{pct(ref, all)}</td>
60
75
  <td>
61
- {info['-1'] ? `${info['-1']}(-)` : ''}
62
- {info['1'] ? `${info['1']}(+)` : ''}
76
+ {rn1 ? `${rn1}(-)` : ''}
77
+ {r1 ? `${r1}(+)` : ''}
63
78
  </td>
64
79
  <td />
65
80
  </tr>
66
81
 
67
- {Object.entries(info).map(([key, entry]) =>
68
- Object.entries(entry).map(([base, score]) => (
69
- <tr key={base}>
70
- <td>{base.toUpperCase()}</td>
71
- <td>{score.total}</td>
72
- <td>
73
- {base === 'total' || base === 'skip'
74
- ? '---'
75
- : `${Math.floor(
76
- (score.total / (total || score.total || 1)) * 100,
77
- )}%`}
78
- </td>
79
- <td>
80
- {score['-1'] ? `${score['-1']}(-)` : ''}
81
- {score['1'] ? `${score['1']}(+)` : ''}
82
- </td>
83
- <td>{key}</td>
84
- </tr>
85
- )),
82
+ {Object.entries(info as unknown as Record<string, Count>).map(
83
+ ([key, entry]) =>
84
+ Object.entries(entry).map(([base, score]) => (
85
+ <tr key={base}>
86
+ <td>{base.toUpperCase()}</td>
87
+ <td>{score.total}</td>
88
+ <td>
89
+ {base === 'total' || base === 'skip'
90
+ ? '---'
91
+ : pct(score.total, all)}
92
+ </td>
93
+ <td>
94
+ {score['-1'] ? `${score['-1']}(-)` : ''}
95
+ {score['1'] ? `${score['1']}(+)` : ''}
96
+ </td>
97
+ <td>{key}</td>
98
+ </tr>
99
+ )),
86
100
  )}
87
101
  </tbody>
88
102
  </table>