@jbrowse/plugin-alignments 2.2.2 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +1 -1
  2. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -1
  3. package/dist/AlignmentsTrack/index.js +1 -0
  4. package/dist/AlignmentsTrack/index.js.map +1 -1
  5. package/dist/BamAdapter/BamSlightlyLazyFeature.d.ts +3 -4
  6. package/dist/BamAdapter/BamSlightlyLazyFeature.js +11 -18
  7. package/dist/BamAdapter/BamSlightlyLazyFeature.js.map +1 -1
  8. package/dist/BamAdapter/index.js +1 -0
  9. package/dist/BamAdapter/index.js.map +1 -1
  10. package/dist/CramAdapter/CramSlightlyLazyFeature.d.ts +5 -7
  11. package/dist/CramAdapter/CramSlightlyLazyFeature.js +6 -8
  12. package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  13. package/dist/CramAdapter/index.js +1 -0
  14. package/dist/CramAdapter/index.js.map +1 -1
  15. package/dist/GuessAlignmentsTypes/index.d.ts +3 -0
  16. package/dist/GuessAlignmentsTypes/index.js +56 -0
  17. package/dist/GuessAlignmentsTypes/index.js.map +1 -0
  18. package/dist/HtsgetBamAdapter/index.js +11 -11
  19. package/dist/HtsgetBamAdapter/index.js.map +1 -1
  20. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +10 -13
  21. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
  22. package/dist/LinearAlignmentsDisplay/index.js +1 -0
  23. package/dist/LinearAlignmentsDisplay/index.js.map +1 -1
  24. package/dist/LinearAlignmentsDisplay/models/configSchema.d.ts +6 -3
  25. package/dist/LinearAlignmentsDisplay/models/configSchema.js +2 -3
  26. package/dist/LinearAlignmentsDisplay/models/configSchema.js.map +1 -1
  27. package/dist/LinearAlignmentsDisplay/models/model.d.ts +22 -36
  28. package/dist/LinearAlignmentsDisplay/models/model.js +166 -151
  29. package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -1
  30. package/dist/LinearPileupDisplay/components/SetFeatureHeight.d.ts +2 -2
  31. package/dist/LinearPileupDisplay/components/SetFeatureHeight.js +2 -4
  32. package/dist/LinearPileupDisplay/components/SetFeatureHeight.js.map +1 -1
  33. package/dist/LinearPileupDisplay/configSchema.d.ts +0 -3
  34. package/dist/LinearPileupDisplay/configSchema.js.map +1 -1
  35. package/dist/LinearPileupDisplay/index.js +2 -0
  36. package/dist/LinearPileupDisplay/index.js.map +1 -1
  37. package/dist/LinearPileupDisplay/model.d.ts +19 -16
  38. package/dist/LinearPileupDisplay/model.js +28 -13
  39. package/dist/LinearPileupDisplay/model.js.map +1 -1
  40. package/dist/LinearReadArcsDisplay/components/ReactComponent.d.ts +6 -0
  41. package/dist/LinearReadArcsDisplay/components/ReactComponent.js +49 -0
  42. package/dist/LinearReadArcsDisplay/components/ReactComponent.js.map +1 -0
  43. package/dist/LinearReadArcsDisplay/configSchema.d.ts +6 -0
  44. package/dist/LinearReadArcsDisplay/configSchema.js +52 -0
  45. package/dist/LinearReadArcsDisplay/configSchema.js.map +1 -0
  46. package/dist/LinearReadArcsDisplay/drawFeats.d.ts +14 -0
  47. package/dist/LinearReadArcsDisplay/drawFeats.js +162 -0
  48. package/dist/LinearReadArcsDisplay/drawFeats.js.map +1 -0
  49. package/dist/LinearReadArcsDisplay/index.d.ts +2 -0
  50. package/dist/LinearReadArcsDisplay/index.js +27 -0
  51. package/dist/LinearReadArcsDisplay/index.js.map +1 -0
  52. package/dist/LinearReadArcsDisplay/model.d.ts +342 -0
  53. package/dist/LinearReadArcsDisplay/model.js +327 -0
  54. package/dist/LinearReadArcsDisplay/model.js.map +1 -0
  55. package/dist/LinearReadCloudDisplay/components/ReactComponent.d.ts +6 -0
  56. package/dist/LinearReadCloudDisplay/components/ReactComponent.js +49 -0
  57. package/dist/LinearReadCloudDisplay/components/ReactComponent.js.map +1 -0
  58. package/dist/LinearReadCloudDisplay/configSchema.d.ts +6 -0
  59. package/dist/LinearReadCloudDisplay/configSchema.js +51 -0
  60. package/dist/LinearReadCloudDisplay/configSchema.js.map +1 -0
  61. package/dist/LinearReadCloudDisplay/drawFeats.d.ts +10 -0
  62. package/dist/LinearReadCloudDisplay/drawFeats.js +159 -0
  63. package/dist/LinearReadCloudDisplay/drawFeats.js.map +1 -0
  64. package/dist/LinearReadCloudDisplay/index.d.ts +2 -0
  65. package/dist/LinearReadCloudDisplay/index.js +27 -0
  66. package/dist/LinearReadCloudDisplay/index.js.map +1 -0
  67. package/dist/LinearReadCloudDisplay/model.d.ts +320 -0
  68. package/dist/LinearReadCloudDisplay/model.js +252 -0
  69. package/dist/LinearReadCloudDisplay/model.js.map +1 -0
  70. package/dist/LinearSNPCoverageDisplay/index.js +1 -0
  71. package/dist/LinearSNPCoverageDisplay/index.js.map +1 -1
  72. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +19 -20
  73. package/dist/LinearSNPCoverageDisplay/models/model.js +1 -6
  74. package/dist/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  75. package/dist/{BamAdapter/MismatchParser.d.ts → MismatchParser/index.d.ts} +23 -0
  76. package/dist/{BamAdapter/MismatchParser.js → MismatchParser/index.js} +116 -3
  77. package/dist/MismatchParser/index.js.map +1 -0
  78. package/dist/PileupRPC/base.d.ts +8 -0
  79. package/dist/PileupRPC/base.js +22 -0
  80. package/dist/PileupRPC/base.js.map +1 -0
  81. package/dist/PileupRPC/index.d.ts +3 -0
  82. package/dist/PileupRPC/index.js +9 -0
  83. package/dist/PileupRPC/index.js.map +1 -0
  84. package/dist/PileupRPC/methods/GetGlobalValueForTag.d.ts +14 -0
  85. package/dist/PileupRPC/methods/GetGlobalValueForTag.js +29 -0
  86. package/dist/PileupRPC/methods/GetGlobalValueForTag.js.map +1 -0
  87. package/dist/PileupRPC/methods/GetReducedFeatures.d.ts +25 -0
  88. package/dist/PileupRPC/methods/GetReducedFeatures.js +61 -0
  89. package/dist/PileupRPC/methods/GetReducedFeatures.js.map +1 -0
  90. package/dist/PileupRPC/methods/GetVisibleModifications.d.ts +14 -0
  91. package/dist/PileupRPC/methods/GetVisibleModifications.js +32 -0
  92. package/dist/PileupRPC/methods/GetVisibleModifications.js.map +1 -0
  93. package/dist/PileupRPC/rpcMethods.d.ts +4 -34
  94. package/dist/PileupRPC/rpcMethods.js +7 -77
  95. package/dist/PileupRPC/rpcMethods.js.map +1 -1
  96. package/dist/PileupRPC/util.d.ts +8 -0
  97. package/dist/PileupRPC/util.js +20 -0
  98. package/dist/PileupRPC/util.js.map +1 -0
  99. package/dist/PileupRenderer/PileupRenderer.d.ts +1 -1
  100. package/dist/PileupRenderer/PileupRenderer.js +5 -5
  101. package/dist/PileupRenderer/PileupRenderer.js.map +1 -1
  102. package/dist/PileupRenderer/index.js +1 -0
  103. package/dist/PileupRenderer/index.js.map +1 -1
  104. package/dist/PileupRenderer/sortUtil.d.ts +1 -1
  105. package/dist/PileupRenderer/sortUtil.js +2 -2
  106. package/dist/PileupRenderer/sortUtil.js.map +1 -1
  107. package/dist/SNPCoverageAdapter/generateCoverageBins.js +1 -1
  108. package/dist/SNPCoverageAdapter/generateCoverageBins.js.map +1 -1
  109. package/dist/SNPCoverageAdapter/index.js +1 -3
  110. package/dist/SNPCoverageAdapter/index.js.map +1 -1
  111. package/dist/index.d.ts +2 -2
  112. package/dist/index.js +12 -58
  113. package/dist/index.js.map +1 -1
  114. package/dist/{LinearPileupDisplay/components → shared}/FilterByTag.d.ts +0 -0
  115. package/dist/{LinearPileupDisplay/components → shared}/FilterByTag.js +3 -9
  116. package/dist/shared/FilterByTag.js.map +1 -0
  117. package/dist/shared/color.d.ts +17 -0
  118. package/dist/shared/color.js +43 -0
  119. package/dist/shared/color.js.map +1 -0
  120. package/dist/shared/fetchChains.d.ts +27 -0
  121. package/dist/shared/fetchChains.js +30 -0
  122. package/dist/shared/fetchChains.js.map +1 -0
  123. package/dist/shared/index.d.ts +36 -0
  124. package/dist/{shared.js → shared/index.js} +12 -2
  125. package/dist/shared/index.js.map +1 -0
  126. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +1 -1
  127. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -1
  128. package/esm/AlignmentsTrack/index.js +1 -0
  129. package/esm/AlignmentsTrack/index.js.map +1 -1
  130. package/esm/BamAdapter/BamSlightlyLazyFeature.d.ts +3 -4
  131. package/esm/BamAdapter/BamSlightlyLazyFeature.js +11 -18
  132. package/esm/BamAdapter/BamSlightlyLazyFeature.js.map +1 -1
  133. package/esm/BamAdapter/index.js +1 -0
  134. package/esm/BamAdapter/index.js.map +1 -1
  135. package/esm/CramAdapter/CramSlightlyLazyFeature.d.ts +5 -7
  136. package/esm/CramAdapter/CramSlightlyLazyFeature.js +6 -8
  137. package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  138. package/esm/CramAdapter/index.js +1 -0
  139. package/esm/CramAdapter/index.js.map +1 -1
  140. package/esm/GuessAlignmentsTypes/index.d.ts +3 -0
  141. package/esm/GuessAlignmentsTypes/index.js +54 -0
  142. package/esm/GuessAlignmentsTypes/index.js.map +1 -0
  143. package/esm/HtsgetBamAdapter/index.js +11 -11
  144. package/esm/HtsgetBamAdapter/index.js.map +1 -1
  145. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +10 -13
  146. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
  147. package/esm/LinearAlignmentsDisplay/index.js +1 -0
  148. package/esm/LinearAlignmentsDisplay/index.js.map +1 -1
  149. package/esm/LinearAlignmentsDisplay/models/configSchema.d.ts +6 -3
  150. package/esm/LinearAlignmentsDisplay/models/configSchema.js +2 -4
  151. package/esm/LinearAlignmentsDisplay/models/configSchema.js.map +1 -1
  152. package/esm/LinearAlignmentsDisplay/models/model.d.ts +22 -36
  153. package/esm/LinearAlignmentsDisplay/models/model.js +167 -152
  154. package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -1
  155. package/esm/LinearPileupDisplay/components/SetFeatureHeight.d.ts +2 -2
  156. package/esm/LinearPileupDisplay/components/SetFeatureHeight.js +2 -4
  157. package/esm/LinearPileupDisplay/components/SetFeatureHeight.js.map +1 -1
  158. package/esm/LinearPileupDisplay/configSchema.d.ts +0 -3
  159. package/esm/LinearPileupDisplay/configSchema.js.map +1 -1
  160. package/esm/LinearPileupDisplay/index.js +2 -0
  161. package/esm/LinearPileupDisplay/index.js.map +1 -1
  162. package/esm/LinearPileupDisplay/model.d.ts +19 -16
  163. package/esm/LinearPileupDisplay/model.js +29 -14
  164. package/esm/LinearPileupDisplay/model.js.map +1 -1
  165. package/esm/LinearReadArcsDisplay/components/ReactComponent.d.ts +6 -0
  166. package/esm/LinearReadArcsDisplay/components/ReactComponent.js +44 -0
  167. package/esm/LinearReadArcsDisplay/components/ReactComponent.js.map +1 -0
  168. package/esm/LinearReadArcsDisplay/configSchema.d.ts +6 -0
  169. package/esm/LinearReadArcsDisplay/configSchema.js +50 -0
  170. package/esm/LinearReadArcsDisplay/configSchema.js.map +1 -0
  171. package/esm/LinearReadArcsDisplay/drawFeats.d.ts +14 -0
  172. package/esm/LinearReadArcsDisplay/drawFeats.js +157 -0
  173. package/esm/LinearReadArcsDisplay/drawFeats.js.map +1 -0
  174. package/esm/LinearReadArcsDisplay/index.d.ts +2 -0
  175. package/esm/LinearReadArcsDisplay/index.js +21 -0
  176. package/esm/LinearReadArcsDisplay/index.js.map +1 -0
  177. package/esm/LinearReadArcsDisplay/model.d.ts +342 -0
  178. package/esm/LinearReadArcsDisplay/model.js +299 -0
  179. package/esm/LinearReadArcsDisplay/model.js.map +1 -0
  180. package/esm/LinearReadCloudDisplay/components/ReactComponent.d.ts +6 -0
  181. package/esm/LinearReadCloudDisplay/components/ReactComponent.js +44 -0
  182. package/esm/LinearReadCloudDisplay/components/ReactComponent.js.map +1 -0
  183. package/esm/LinearReadCloudDisplay/configSchema.d.ts +6 -0
  184. package/esm/LinearReadCloudDisplay/configSchema.js +49 -0
  185. package/esm/LinearReadCloudDisplay/configSchema.js.map +1 -0
  186. package/esm/LinearReadCloudDisplay/drawFeats.d.ts +10 -0
  187. package/esm/LinearReadCloudDisplay/drawFeats.js +156 -0
  188. package/esm/LinearReadCloudDisplay/drawFeats.js.map +1 -0
  189. package/esm/LinearReadCloudDisplay/index.d.ts +2 -0
  190. package/esm/LinearReadCloudDisplay/index.js +21 -0
  191. package/esm/LinearReadCloudDisplay/index.js.map +1 -0
  192. package/esm/LinearReadCloudDisplay/model.d.ts +320 -0
  193. package/esm/LinearReadCloudDisplay/model.js +224 -0
  194. package/esm/LinearReadCloudDisplay/model.js.map +1 -0
  195. package/esm/LinearSNPCoverageDisplay/index.js +1 -0
  196. package/esm/LinearSNPCoverageDisplay/index.js.map +1 -1
  197. package/esm/LinearSNPCoverageDisplay/models/model.d.ts +19 -20
  198. package/esm/LinearSNPCoverageDisplay/models/model.js +2 -7
  199. package/esm/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  200. package/esm/{BamAdapter/MismatchParser.d.ts → MismatchParser/index.d.ts} +23 -0
  201. package/esm/{BamAdapter/MismatchParser.js → MismatchParser/index.js} +107 -2
  202. package/esm/MismatchParser/index.js.map +1 -0
  203. package/esm/PileupRPC/base.d.ts +8 -0
  204. package/esm/PileupRPC/base.js +16 -0
  205. package/esm/PileupRPC/base.js.map +1 -0
  206. package/esm/PileupRPC/index.d.ts +3 -0
  207. package/esm/PileupRPC/index.js +7 -0
  208. package/esm/PileupRPC/index.js.map +1 -0
  209. package/esm/PileupRPC/methods/GetGlobalValueForTag.d.ts +14 -0
  210. package/esm/PileupRPC/methods/GetGlobalValueForTag.js +23 -0
  211. package/esm/PileupRPC/methods/GetGlobalValueForTag.js.map +1 -0
  212. package/esm/PileupRPC/methods/GetReducedFeatures.d.ts +25 -0
  213. package/esm/PileupRPC/methods/GetReducedFeatures.js +55 -0
  214. package/esm/PileupRPC/methods/GetReducedFeatures.js.map +1 -0
  215. package/esm/PileupRPC/methods/GetVisibleModifications.d.ts +14 -0
  216. package/esm/PileupRPC/methods/GetVisibleModifications.js +26 -0
  217. package/esm/PileupRPC/methods/GetVisibleModifications.js.map +1 -0
  218. package/esm/PileupRPC/rpcMethods.d.ts +4 -34
  219. package/esm/PileupRPC/rpcMethods.js +4 -74
  220. package/esm/PileupRPC/rpcMethods.js.map +1 -1
  221. package/esm/PileupRPC/util.d.ts +8 -0
  222. package/esm/PileupRPC/util.js +15 -0
  223. package/esm/PileupRPC/util.js.map +1 -0
  224. package/esm/PileupRenderer/PileupRenderer.d.ts +1 -1
  225. package/esm/PileupRenderer/PileupRenderer.js +5 -5
  226. package/esm/PileupRenderer/PileupRenderer.js.map +1 -1
  227. package/esm/PileupRenderer/index.js +1 -0
  228. package/esm/PileupRenderer/index.js.map +1 -1
  229. package/esm/PileupRenderer/sortUtil.d.ts +1 -1
  230. package/esm/PileupRenderer/sortUtil.js +1 -1
  231. package/esm/PileupRenderer/sortUtil.js.map +1 -1
  232. package/esm/SNPCoverageAdapter/generateCoverageBins.js +1 -1
  233. package/esm/SNPCoverageAdapter/generateCoverageBins.js.map +1 -1
  234. package/esm/SNPCoverageAdapter/index.js +1 -3
  235. package/esm/SNPCoverageAdapter/index.js.map +1 -1
  236. package/esm/index.d.ts +2 -2
  237. package/esm/index.js +10 -56
  238. package/esm/index.js.map +1 -1
  239. package/esm/{LinearPileupDisplay/components → shared}/FilterByTag.d.ts +0 -0
  240. package/esm/{LinearPileupDisplay/components → shared}/FilterByTag.js +3 -9
  241. package/esm/shared/FilterByTag.js.map +1 -0
  242. package/esm/shared/color.d.ts +17 -0
  243. package/esm/shared/color.js +37 -0
  244. package/esm/shared/color.js.map +1 -0
  245. package/esm/shared/fetchChains.d.ts +27 -0
  246. package/esm/shared/fetchChains.js +26 -0
  247. package/esm/shared/fetchChains.js.map +1 -0
  248. package/esm/shared/index.d.ts +36 -0
  249. package/esm/{shared.js → shared/index.js} +11 -1
  250. package/esm/shared/index.js.map +1 -0
  251. package/package.json +4 -4
  252. package/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx +1 -1
  253. package/src/AlignmentsTrack/index.ts +1 -0
  254. package/src/BamAdapter/BamSlightlyLazyFeature.ts +13 -19
  255. package/src/BamAdapter/index.ts +1 -0
  256. package/src/CramAdapter/CramSlightlyLazyFeature.ts +13 -15
  257. package/src/CramAdapter/__snapshots__/CramAdapter.test.ts.snap +0 -10
  258. package/src/CramAdapter/index.ts +1 -0
  259. package/src/GuessAlignmentsTypes/index.ts +79 -0
  260. package/src/HtsgetBamAdapter/index.ts +11 -15
  261. package/src/LinearAlignmentsDisplay/components/AlignmentsDisplay.tsx +21 -29
  262. package/src/LinearAlignmentsDisplay/index.ts +1 -0
  263. package/src/LinearAlignmentsDisplay/models/configSchema.ts +2 -6
  264. package/src/LinearAlignmentsDisplay/models/model.tsx +238 -199
  265. package/src/LinearPileupDisplay/components/SetFeatureHeight.tsx +4 -6
  266. package/src/LinearPileupDisplay/configSchema.ts +1 -3
  267. package/src/LinearPileupDisplay/index.ts +2 -0
  268. package/src/LinearPileupDisplay/model.ts +36 -23
  269. package/src/LinearReadArcsDisplay/components/ReactComponent.tsx +86 -0
  270. package/src/LinearReadArcsDisplay/configSchema.ts +58 -0
  271. package/src/LinearReadArcsDisplay/declare.d.ts +1 -0
  272. package/src/LinearReadArcsDisplay/drawFeats.ts +199 -0
  273. package/src/LinearReadArcsDisplay/index.ts +23 -0
  274. package/src/LinearReadArcsDisplay/model.tsx +370 -0
  275. package/src/LinearReadCloudDisplay/components/ReactComponent.tsx +86 -0
  276. package/src/LinearReadCloudDisplay/configSchema.ts +57 -0
  277. package/src/LinearReadCloudDisplay/drawFeats.ts +201 -0
  278. package/src/LinearReadCloudDisplay/index.ts +23 -0
  279. package/src/LinearReadCloudDisplay/model.tsx +289 -0
  280. package/src/LinearSNPCoverageDisplay/index.ts +1 -0
  281. package/src/LinearSNPCoverageDisplay/models/model.ts +3 -13
  282. package/src/{BamAdapter/MismatchParser.test.ts → MismatchParser/index.test.ts} +1 -1
  283. package/src/{BamAdapter/MismatchParser.ts → MismatchParser/index.ts} +129 -2
  284. package/src/PileupRPC/base.ts +24 -0
  285. package/src/PileupRPC/index.ts +12 -0
  286. package/src/PileupRPC/methods/GetGlobalValueForTag.ts +41 -0
  287. package/src/PileupRPC/methods/GetReducedFeatures.ts +76 -0
  288. package/src/PileupRPC/methods/GetVisibleModifications.ts +45 -0
  289. package/src/PileupRPC/rpcMethods.ts +8 -113
  290. package/src/PileupRPC/util.ts +19 -0
  291. package/src/PileupRenderer/PileupRenderer.ts +5 -8
  292. package/src/PileupRenderer/index.ts +1 -0
  293. package/src/PileupRenderer/sortUtil.ts +2 -3
  294. package/src/SNPCoverageAdapter/generateCoverageBins.ts +1 -1
  295. package/src/SNPCoverageAdapter/index.ts +1 -3
  296. package/src/index.ts +12 -93
  297. package/src/{LinearPileupDisplay/components → shared}/FilterByTag.tsx +3 -9
  298. package/src/shared/color.ts +47 -0
  299. package/src/shared/fetchChains.ts +63 -0
  300. package/src/{shared.ts → shared/index.ts} +17 -4
  301. package/dist/BamAdapter/MismatchParser.js.map +0 -1
  302. package/dist/LinearPileupDisplay/components/FilterByTag.js.map +0 -1
  303. package/dist/shared.d.ts +0 -25
  304. package/dist/shared.js.map +0 -1
  305. package/esm/BamAdapter/MismatchParser.js.map +0 -1
  306. package/esm/LinearPileupDisplay/components/FilterByTag.js.map +0 -1
  307. package/esm/shared.d.ts +0 -25
  308. package/esm/shared.js.map +0 -1
@@ -1,4 +1,16 @@
1
1
  import React from 'react'
2
+ import { autorun, when } from 'mobx'
3
+ import {
4
+ addDisposer,
5
+ getSnapshot,
6
+ isAlive,
7
+ types,
8
+ Instance,
9
+ IStateTreeNode,
10
+ } from 'mobx-state-tree'
11
+ import deepEqual from 'fast-deep-equal'
12
+
13
+ // jbrowse
2
14
  import {
3
15
  ConfigurationReference,
4
16
  AnyConfigurationModel,
@@ -8,13 +20,109 @@ import {
8
20
  import { BaseDisplay } from '@jbrowse/core/pluggableElementTypes/models'
9
21
  import PluginManager from '@jbrowse/core/PluginManager'
10
22
  import { MenuItem } from '@jbrowse/core/ui'
11
- import { autorun, when } from 'mobx'
12
- import { addDisposer, getSnapshot, Instance, types } from 'mobx-state-tree'
13
- import { getContainingTrack } from '@jbrowse/core/util'
14
- import deepEqual from 'fast-deep-equal'
15
23
 
16
24
  const minDisplayHeight = 20
17
25
 
26
+ function getLowerPanelDisplays(pluginManager: PluginManager) {
27
+ return (
28
+ pluginManager
29
+ .getDisplayElements()
30
+ // @ts-ignore
31
+ .filter(f => f.subDisplay?.type === 'LinearAlignmentsDisplay')
32
+ // @ts-ignore
33
+ .filter(f => f.subDisplay?.lowerPanel)
34
+ )
35
+ }
36
+
37
+ function deepSnap<T extends IStateTreeNode, U extends IStateTreeNode>(
38
+ x1: T,
39
+ x2: U,
40
+ ) {
41
+ return deepEqual(
42
+ x1 ? getSnapshot(x1) : undefined,
43
+ x2 ? getSnapshot(x2) : undefined,
44
+ )
45
+ }
46
+
47
+ function preCheck(self: AlignmentsDisplayModel) {
48
+ const { PileupDisplay, SNPCoverageDisplay } = self
49
+ return (
50
+ PileupDisplay ||
51
+ isAlive(PileupDisplay) ||
52
+ SNPCoverageDisplay ||
53
+ isAlive(SNPCoverageDisplay)
54
+ )
55
+ }
56
+
57
+ function propagateColorBy(self: AlignmentsDisplayModel) {
58
+ const { PileupDisplay, SNPCoverageDisplay } = self
59
+ if (!preCheck(self) || !PileupDisplay.colorBy) {
60
+ return
61
+ }
62
+ if (!deepSnap(PileupDisplay.colorBy, SNPCoverageDisplay.colorBy)) {
63
+ SNPCoverageDisplay.setColorBy(getSnapshot(PileupDisplay.colorBy))
64
+ }
65
+ }
66
+
67
+ function propagateFilterBy(self: AlignmentsDisplayModel) {
68
+ const { PileupDisplay, SNPCoverageDisplay } = self
69
+ if (!preCheck(self) || !PileupDisplay.filterBy) {
70
+ return
71
+ }
72
+ if (!deepSnap(PileupDisplay.filterBy, SNPCoverageDisplay.filterBy)) {
73
+ SNPCoverageDisplay.setFilterBy(getSnapshot(PileupDisplay.filterBy))
74
+ }
75
+ }
76
+
77
+ function AlignmentsModel(
78
+ pluginManager: PluginManager,
79
+ configSchema: AnyConfigurationSchemaType,
80
+ ) {
81
+ const lowerPanelDisplays = getLowerPanelDisplays(pluginManager).map(
82
+ f => f.stateModel,
83
+ )
84
+
85
+ return types.model({
86
+ /**
87
+ * #property
88
+ * refers to LinearPileupDisplay sub-display model
89
+ */
90
+ // @ts-ignore
91
+ PileupDisplay: types.maybe(types.union(...lowerPanelDisplays)),
92
+ /**
93
+ * #property
94
+ * refers to LinearSNPCoverageDisplay sub-display model
95
+ */
96
+ SNPCoverageDisplay: types.maybe(
97
+ pluginManager.getDisplayType('LinearSNPCoverageDisplay').stateModel,
98
+ ),
99
+ /**
100
+ * #property
101
+ */
102
+ snpCovHeight: 45,
103
+ /**
104
+ * #property
105
+ */
106
+ type: types.literal('LinearAlignmentsDisplay'),
107
+ /**
108
+ * #property
109
+ */
110
+ configuration: ConfigurationReference(configSchema),
111
+ /**
112
+ * #property
113
+ */
114
+ height: 250,
115
+ /**
116
+ * #property
117
+ */
118
+ userFeatureScreenDensity: types.maybe(types.number),
119
+ /**
120
+ * #property
121
+ */
122
+ lowerPanelType: 'LinearPileupDisplay',
123
+ })
124
+ }
125
+
18
126
  /**
19
127
  * #stateModel LinearAlignmentsDisplay
20
128
  * extends `BaseDisplay`
@@ -27,67 +135,12 @@ function stateModelFactory(
27
135
  .compose(
28
136
  'LinearAlignmentsDisplay',
29
137
  BaseDisplay,
30
- types.model({
31
- /**
32
- * #property
33
- * refers to LinearPileupDisplay sub-display model
34
- */
35
- PileupDisplay: types.maybe(
36
- pluginManager.getDisplayType('LinearPileupDisplay').stateModel,
37
- ),
38
- /**
39
- * #property
40
- * refers to LinearSNPCoverageDisplay sub-display model
41
- */
42
- SNPCoverageDisplay: types.maybe(
43
- pluginManager.getDisplayType('LinearSNPCoverageDisplay').stateModel,
44
- ),
45
- /**
46
- * #property
47
- */
48
- snpCovHeight: 45,
49
- /**
50
- * #property
51
- */
52
- type: types.literal('LinearAlignmentsDisplay'),
53
- /**
54
- * #property
55
- */
56
- configuration: ConfigurationReference(configSchema),
57
- /**
58
- * #property
59
- */
60
- height: 250,
61
- /**
62
- * #property
63
- */
64
- showCoverage: true,
65
- /**
66
- * #property
67
- */
68
- showPileup: true,
69
- /**
70
- * #property
71
- */
72
- userFeatureScreenDensity: types.maybe(types.number),
73
- }),
138
+ AlignmentsModel(pluginManager, configSchema),
74
139
  )
75
140
  .volatile(() => ({
76
141
  scrollTop: 0,
77
142
  }))
78
143
  .actions(self => ({
79
- /**
80
- * #action
81
- */
82
- toggleCoverage() {
83
- self.showCoverage = !self.showCoverage
84
- },
85
- /**
86
- * #action
87
- */
88
- togglePileup() {
89
- self.showPileup = !self.showPileup
90
- },
91
144
  /**
92
145
  * #action
93
146
  */
@@ -102,103 +155,64 @@ function stateModelFactory(
102
155
  self.snpCovHeight = n
103
156
  },
104
157
  }))
105
- .views(self => {
106
- const { trackMenuItems: superTrackMenuItems } = self
107
- return {
108
- /**
109
- * #getter
110
- */
111
- get pileupDisplayConfig() {
112
- const conf = getConf(self, 'pileupDisplay')
113
- const track = getContainingTrack(self)
114
- return {
115
- ...conf,
116
- type: 'LinearPileupDisplay',
117
- name: `${getConf(track, 'name')} pileup`,
118
- displayId: `${self.configuration.displayId}_pileup_xyz`, // xyz to avoid someone accidentally naming the displayId similar to this
119
- }
120
- },
121
-
122
- /**
123
- * #method
124
- */
125
- getFeatureByID(blockKey: string, id: string) {
126
- return self.PileupDisplay.getFeatureByID(blockKey, id)
127
- },
128
- /**
129
- * #method
130
- */
131
- searchFeatureByID(id: string) {
132
- return self.PileupDisplay.searchFeatureByID(id)
133
- },
158
+ .views(self => ({
159
+ /**
160
+ * #getter
161
+ */
162
+ get pileupConf() {
163
+ const conf = getConf(self, 'pileupDisplay')
164
+ return {
165
+ ...conf,
166
+ type: self.lowerPanelType,
167
+ displayId: `${self.configuration.displayId}_${self.lowerPanelType}_xyz`, // xyz to avoid someone accidentally naming the displayId similar to this
168
+ }
169
+ },
134
170
 
135
- /**
136
- * #getter
137
- */
138
- get features() {
139
- return self.PileupDisplay.features
140
- },
171
+ /**
172
+ * #method
173
+ */
174
+ getFeatureByID(blockKey: string, id: string) {
175
+ return self.PileupDisplay.getFeatureByID(blockKey, id)
176
+ },
177
+ /**
178
+ * #method
179
+ */
180
+ searchFeatureByID(id: string) {
181
+ return self.PileupDisplay.searchFeatureByID(id)
182
+ },
141
183
 
142
- /**
143
- * #getter
144
- */
145
- get DisplayBlurb() {
146
- return self.PileupDisplay?.DisplayBlurb
147
- },
184
+ /**
185
+ * #getter
186
+ */
187
+ get features() {
188
+ return self.PileupDisplay.features
189
+ },
148
190
 
149
- /**
150
- * #getter
151
- */
152
- get sortedBy() {
153
- return self.PileupDisplay.sortedBy
154
- },
155
- /**
156
- * #getter
157
- */
158
- get sortedByPosition() {
159
- return self.PileupDisplay.sortedByPosition
160
- },
161
- /**
162
- * #getter
163
- */
164
- get sortedByRefName() {
165
- return self.PileupDisplay.sortedByRefName
166
- },
191
+ /**
192
+ * #getter
193
+ */
194
+ get DisplayBlurb() {
195
+ return self.PileupDisplay?.DisplayBlurb
196
+ },
167
197
 
168
- /**
169
- * #getter
170
- */
171
- get snpCoverageDisplayConfig() {
172
- const conf = getConf(self, 'snpCoverageDisplay')
173
- const track = getContainingTrack(self)
174
- return {
175
- ...conf,
176
- type: 'LinearSNPCoverageDisplay',
177
- name: `${getConf(track, 'name')} snp coverage`,
178
- displayId: `${self.configuration.displayId}_snpcoverage_xyz`, // xyz to avoid someone accidentally naming the displayId similar to this
179
- }
180
- },
198
+ /**
199
+ * #getter
200
+ */
201
+ get sortedBy() {
202
+ return self.PileupDisplay.sortedBy
203
+ },
181
204
 
182
- /**
183
- * #method
184
- */
185
- trackMenuItems(): MenuItem[] {
186
- return [
187
- ...superTrackMenuItems(),
188
- {
189
- type: 'subMenu',
190
- label: 'Pileup settings',
191
- subMenu: self.PileupDisplay.trackMenuItems(),
192
- },
193
- {
194
- type: 'subMenu',
195
- label: 'SNPCoverage settings',
196
- subMenu: self.SNPCoverageDisplay.trackMenuItems(),
197
- },
198
- ]
199
- },
200
- }
201
- })
205
+ /**
206
+ * #getter
207
+ */
208
+ get coverageConf() {
209
+ const conf = getConf(self, 'snpCoverageDisplay')
210
+ return {
211
+ ...conf,
212
+ displayId: `${self.configuration.displayId}_snpcoverage_xyz`, // xyz to avoid someone accidentally naming the displayId similar to this
213
+ }
214
+ },
215
+ }))
202
216
  .actions(self => ({
203
217
  /**
204
218
  * #action
@@ -223,21 +237,23 @@ function stateModelFactory(
223
237
  */
224
238
  setPileupDisplay(configuration: AnyConfigurationModel) {
225
239
  self.PileupDisplay = {
226
- type: 'LinearPileupDisplay',
240
+ type: configuration.type || 'LinearPileupDisplay',
227
241
  configuration,
228
242
  }
229
243
  },
230
244
  /**
231
245
  * #action
232
246
  */
233
- setHeight(displayHeight: number) {
234
- if (displayHeight > minDisplayHeight) {
235
- self.height = displayHeight
236
- } else {
237
- self.height = minDisplayHeight
238
- }
247
+ setHeight(n: number) {
248
+ self.height = Math.max(n, minDisplayHeight)
239
249
  return self.height
240
250
  },
251
+ /**
252
+ * #action
253
+ */
254
+ setLowerPanelType(type: string) {
255
+ self.lowerPanelType = type
256
+ },
241
257
  /**
242
258
  * #action
243
259
  */
@@ -252,64 +268,53 @@ function stateModelFactory(
252
268
  addDisposer(
253
269
  self,
254
270
  autorun(() => {
255
- if (!self.SNPCoverageDisplay) {
256
- self.setSNPCoverageDisplay(self.snpCoverageDisplayConfig)
271
+ const {
272
+ SNPCoverageDisplay,
273
+ PileupDisplay,
274
+ coverageConf,
275
+ pileupConf,
276
+ } = self
277
+
278
+ if (!SNPCoverageDisplay) {
279
+ self.setSNPCoverageDisplay(coverageConf)
257
280
  } else if (
258
281
  !deepEqual(
259
- self.snpCoverageDisplayConfig,
260
- getSnapshot(self.SNPCoverageDisplay.configuration),
282
+ coverageConf,
283
+ getSnapshot(SNPCoverageDisplay.configuration),
261
284
  )
262
285
  ) {
263
- self.SNPCoverageDisplay.setHeight(self.snpCovHeight)
264
- self.SNPCoverageDisplay.setConfig(self.snpCoverageDisplayConfig)
286
+ SNPCoverageDisplay.setHeight(self.snpCovHeight)
287
+ SNPCoverageDisplay.setConfig(self.coverageConf)
265
288
  }
266
289
 
267
- if (!self.PileupDisplay) {
268
- self.setPileupDisplay(self.pileupDisplayConfig)
290
+ if (!PileupDisplay || self.lowerPanelType !== PileupDisplay.type) {
291
+ self.setPileupDisplay(pileupConf)
269
292
  } else if (
270
- !deepEqual(
271
- self.pileupDisplayConfig,
272
- getSnapshot(self.PileupDisplay.configuration),
273
- )
293
+ !deepEqual(pileupConf, getSnapshot(PileupDisplay.configuration))
274
294
  ) {
275
- self.PileupDisplay.setConfig(self.pileupDisplayConfig)
295
+ PileupDisplay.setConfig(self.pileupConf)
276
296
  }
277
297
 
278
- // propagate the filterBy setting from pileupdisplay to snpcoverage
279
- // note: the snpcoverage display is not able to control filterBy
280
- // itself
281
- if (
282
- self.PileupDisplay.filterBy &&
283
- !deepEqual(
284
- getSnapshot(self.PileupDisplay.filterBy),
285
- getSnapshot(self.SNPCoverageDisplay.filterBy),
286
- )
287
- ) {
288
- self.SNPCoverageDisplay.setFilterBy(
289
- getSnapshot(self.PileupDisplay.filterBy),
290
- )
291
- }
292
- if (
293
- self.PileupDisplay.colorBy &&
294
- !deepEqual(
295
- getSnapshot(self.PileupDisplay.colorBy),
296
- self.SNPCoverageDisplay.colorBy
297
- ? getSnapshot(self.SNPCoverageDisplay.colorBy)
298
- : {},
299
- )
300
- ) {
301
- self.SNPCoverageDisplay.setColorBy(
302
- getSnapshot(self.PileupDisplay.colorBy),
303
- )
304
- }
298
+ propagateColorBy(self as AlignmentsDisplayModel)
299
+ propagateFilterBy(self as AlignmentsDisplayModel)
305
300
  }),
306
301
  )
302
+
307
303
  addDisposer(
308
304
  self,
309
305
  autorun(() => {
310
306
  self.setSNPCoverageHeight(self.SNPCoverageDisplay.height)
311
307
  }),
312
308
  )
309
+
310
+ addDisposer(
311
+ self,
312
+ autorun(() => {
313
+ self.PileupDisplay.setHeight(
314
+ self.height - self.SNPCoverageDisplay.height,
315
+ )
316
+ }),
317
+ )
313
318
  },
314
319
  /**
315
320
  * #action
@@ -330,6 +335,40 @@ function stateModelFactory(
330
335
  )
331
336
  },
332
337
  }))
338
+ .views(self => {
339
+ const { trackMenuItems: superTrackMenuItems } = self
340
+ return {
341
+ /**
342
+ * #method
343
+ */
344
+ trackMenuItems(): MenuItem[] {
345
+ const extra = getLowerPanelDisplays(pluginManager).map(d => ({
346
+ type: 'radio',
347
+ label: d.displayName,
348
+ checked: d.name === self.PileupDisplay.type,
349
+ onClick: () => self.setLowerPanelType(d.name),
350
+ }))
351
+ return [
352
+ ...superTrackMenuItems(),
353
+ {
354
+ type: 'subMenu',
355
+ label: 'Pileup settings',
356
+ subMenu: self.PileupDisplay.trackMenuItems(),
357
+ },
358
+ {
359
+ type: 'subMenu',
360
+ label: 'SNPCoverage settings',
361
+ subMenu: self.SNPCoverageDisplay.trackMenuItems(),
362
+ },
363
+ {
364
+ type: 'subMenu',
365
+ label: `Replace lower panel with...`,
366
+ subMenu: extra,
367
+ },
368
+ ]
369
+ },
370
+ }
371
+ })
333
372
  }
334
373
 
335
374
  export default stateModelFactory
@@ -13,8 +13,8 @@ import { Dialog } from '@jbrowse/core/ui'
13
13
 
14
14
  function SetFeatureHeightDlg(props: {
15
15
  model: {
16
- setFeatureHeight: Function
17
- setNoSpacing: Function
16
+ setFeatureHeight: (arg?: number) => void
17
+ setNoSpacing: (arg?: boolean) => void
18
18
  featureHeightSetting: number
19
19
  noSpacing?: boolean
20
20
  }
@@ -28,7 +28,7 @@ function SetFeatureHeightDlg(props: {
28
28
  const ok = height !== '' && !Number.isNaN(+height)
29
29
 
30
30
  return (
31
- <Dialog open onClose={handleClose} title={'Set feature height'}>
31
+ <Dialog open onClose={handleClose} title="Set feature height">
32
32
  <DialogContent>
33
33
  <Typography>
34
34
  Adjust the feature height and whether there is any spacing between
@@ -38,9 +38,7 @@ function SetFeatureHeightDlg(props: {
38
38
  <TextField
39
39
  value={height}
40
40
  helperText="Feature height"
41
- onChange={event => {
42
- setHeight(event.target.value)
43
- }}
41
+ onChange={event => setHeight(event.target.value)}
44
42
  />
45
43
  <FormControlLabel
46
44
  control={
@@ -1,6 +1,6 @@
1
1
  import { ConfigurationSchema } from '@jbrowse/core/configuration'
2
2
  import { linearBasicDisplayConfigSchemaFactory } from '@jbrowse/plugin-linear-genome-view'
3
- import { types, Instance } from 'mobx-state-tree'
3
+ import { types } from 'mobx-state-tree'
4
4
  import PluginManager from '@jbrowse/core/PluginManager'
5
5
 
6
6
  /**
@@ -64,6 +64,4 @@ function configSchemaF(pluginManager: PluginManager) {
64
64
  )
65
65
  }
66
66
 
67
- export type LinearPileupDisplayConfigModel = ReturnType<typeof configSchemaF>
68
- export type LinearPileupDisplayConfig = Instance<LinearPileupDisplayConfigModel>
69
67
  export default configSchemaF
@@ -9,8 +9,10 @@ export default function register(pluginManager: PluginManager) {
9
9
  const configSchema = configSchemaFactory(pluginManager)
10
10
  return new DisplayType({
11
11
  name: 'LinearPileupDisplay',
12
+ displayName: 'Pileup display',
12
13
  configSchema,
13
14
  stateModel: modelFactory(configSchema),
15
+ subDisplay: { type: 'LinearAlignmentsDisplay', lowerPanel: true },
14
16
  trackType: 'AlignmentsTrack',
15
17
  viewType: 'LinearGenomeView',
16
18
  ReactComponent: BaseLinearDisplayComponent,
@@ -4,6 +4,7 @@ import { cast, types, addDisposer, Instance } from 'mobx-state-tree'
4
4
  import copy from 'copy-to-clipboard'
5
5
  import {
6
6
  AnyConfigurationModel,
7
+ AnyConfigurationSchemaType,
7
8
  ConfigurationReference,
8
9
  readConfObject,
9
10
  getConf,
@@ -32,14 +33,17 @@ import PaletteIcon from '@mui/icons-material/Palette'
32
33
  import FilterListIcon from '@mui/icons-material/ClearAll'
33
34
 
34
35
  // locals
35
- import { LinearPileupDisplayConfigModel } from './configSchema'
36
36
  import LinearPileupDisplayBlurb from './components/LinearPileupDisplayBlurb'
37
- import { getUniqueTagValues, getUniqueModificationValues } from '../shared'
37
+ import {
38
+ getUniqueTagValues,
39
+ getUniqueModificationValues,
40
+ FilterModel,
41
+ } from '../shared'
38
42
  import { SimpleFeatureSerialized } from '@jbrowse/core/util/simpleFeature'
39
43
 
40
44
  // async
45
+ const FilterByTagDlg = lazy(() => import('../shared/FilterByTag'))
41
46
  const ColorByTagDlg = lazy(() => import('./components/ColorByTag'))
42
- const FilterByTagDlg = lazy(() => import('./components/FilterByTag'))
43
47
  const SortByTagDlg = lazy(() => import('./components/SortByTag'))
44
48
  const SetFeatureHeightDlg = lazy(() => import('./components/SetFeatureHeight'))
45
49
  const SetMaxHeightDlg = lazy(() => import('./components/SetMaxHeight'))
@@ -57,7 +61,7 @@ type LGV = LinearGenomeViewModel
57
61
  * #stateModel LinearPileupDisplay
58
62
  * extends `BaseLinearDisplay`
59
63
  */
60
- function stateModelFactory(configSchema: LinearPileupDisplayConfigModel) {
64
+ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
61
65
  return types
62
66
  .compose(
63
67
  'LinearPileupDisplay',
@@ -122,17 +126,7 @@ function stateModelFactory(configSchema: LinearPileupDisplayConfigModel) {
122
126
  /**
123
127
  * #property
124
128
  */
125
- filterBy: types.optional(
126
- types.model({
127
- flagInclude: types.optional(types.number, 0),
128
- flagExclude: types.optional(types.number, 1540),
129
- readName: types.maybe(types.string),
130
- tagFilter: types.maybe(
131
- types.model({ tag: types.string, value: types.string }),
132
- ),
133
- }),
134
- {},
135
- ),
129
+ filterBy: types.optional(FilterModel, {}),
136
130
  }),
137
131
  )
138
132
  .volatile(() => ({
@@ -164,13 +158,13 @@ function stateModelFactory(configSchema: LinearPileupDisplayConfigModel) {
164
158
  /**
165
159
  * #action
166
160
  */
167
- setFeatureHeight(n: number) {
161
+ setFeatureHeight(n?: number) {
168
162
  self.featureHeight = n
169
163
  },
170
164
  /**
171
165
  * #action
172
166
  */
173
- setNoSpacing(flag: boolean) {
167
+ setNoSpacing(flag?: boolean) {
174
168
  self.noSpacing = flag
175
169
  },
176
170
 
@@ -788,12 +782,31 @@ function stateModelFactory(configSchema: LinearPileupDisplayConfigModel) {
788
782
  },
789
783
  {
790
784
  label: 'Set feature height',
791
- onClick: () => {
792
- getSession(self).queueDialog(doneCallback => [
793
- SetFeatureHeightDlg,
794
- { model: self, handleClose: doneCallback },
795
- ])
796
- },
785
+ subMenu: [
786
+ {
787
+ label: 'Normal',
788
+ onClick: () => {
789
+ self.setFeatureHeight(7)
790
+ self.setNoSpacing(false)
791
+ },
792
+ },
793
+ {
794
+ label: 'Compact',
795
+ onClick: () => {
796
+ self.setFeatureHeight(2)
797
+ self.setNoSpacing(true)
798
+ },
799
+ },
800
+ {
801
+ label: 'Manually set height',
802
+ onClick: () => {
803
+ getSession(self).queueDialog(doneCallback => [
804
+ SetFeatureHeightDlg,
805
+ { model: self, handleClose: doneCallback },
806
+ ])
807
+ },
808
+ },
809
+ ],
797
810
  },
798
811
  {
799
812
  label: 'Set max height',