@jbrowse/plugin-alignments 2.4.2 → 2.6.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 (443) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +2 -2
  2. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.d.ts +2 -2
  3. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js +2 -1
  4. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js.map +1 -1
  5. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.d.ts +2 -2
  6. package/dist/AlignmentsFeatureDetail/index.d.ts +4 -1
  7. package/dist/AlignmentsTrack/configSchemaF.d.ts +74 -0
  8. package/dist/AlignmentsTrack/configSchemaF.js +19 -0
  9. package/dist/AlignmentsTrack/configSchemaF.js.map +1 -0
  10. package/dist/AlignmentsTrack/index.js +2 -15
  11. package/dist/AlignmentsTrack/index.js.map +1 -1
  12. package/dist/BamAdapter/BamAdapter.d.ts +2 -2
  13. package/dist/BamAdapter/BamAdapter.js +27 -32
  14. package/dist/BamAdapter/BamAdapter.js.map +1 -1
  15. package/dist/BamAdapter/BamSlightlyLazyFeature.d.ts +1 -1
  16. package/dist/BamAdapter/configSchema.d.ts +50 -1
  17. package/dist/CramAdapter/CramAdapter.d.ts +1 -1
  18. package/dist/CramAdapter/CramAdapter.js +49 -47
  19. package/dist/CramAdapter/CramAdapter.js.map +1 -1
  20. package/dist/CramAdapter/CramSlightlyLazyFeature.js +3 -5
  21. package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  22. package/dist/CramAdapter/CramTestAdapters.js +3 -3
  23. package/dist/CramAdapter/CramTestAdapters.js.map +1 -1
  24. package/dist/CramAdapter/configSchema.d.ts +40 -1
  25. package/dist/HtsgetBamAdapter/configSchema.d.ts +26 -1
  26. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +2 -2
  27. package/dist/LinearAlignmentsDisplay/models/configSchema.d.ts +39 -1
  28. package/dist/LinearAlignmentsDisplay/models/model.d.ts +20 -6
  29. package/dist/LinearAlignmentsDisplay/models/model.js +9 -4
  30. package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -1
  31. package/dist/LinearPileupDisplay/components/ColorByModifications.d.ts +2 -2
  32. package/dist/LinearPileupDisplay/components/ColorByModifications.js +3 -23
  33. package/dist/LinearPileupDisplay/components/ColorByModifications.js.map +1 -1
  34. package/dist/LinearPileupDisplay/components/ColorByTag.d.ts +2 -2
  35. package/dist/LinearPileupDisplay/components/ColorByTag.js +2 -6
  36. package/dist/LinearPileupDisplay/components/ColorByTag.js.map +1 -1
  37. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +3 -3
  38. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +6 -6
  39. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -1
  40. package/dist/LinearPileupDisplay/components/ModificationsTable.d.ts +4 -0
  41. package/dist/LinearPileupDisplay/components/ModificationsTable.js +29 -0
  42. package/dist/LinearPileupDisplay/components/ModificationsTable.js.map +1 -0
  43. package/dist/LinearPileupDisplay/components/SetFeatureHeight.d.ts +2 -2
  44. package/dist/LinearPileupDisplay/components/SetMaxHeight.d.ts +2 -2
  45. package/dist/LinearPileupDisplay/components/SetMaxHeight.js +3 -5
  46. package/dist/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -1
  47. package/dist/LinearPileupDisplay/components/SortByTag.d.ts +2 -2
  48. package/dist/LinearPileupDisplay/configSchema.d.ts +57 -1
  49. package/dist/LinearPileupDisplay/model.d.ts +160 -80
  50. package/dist/LinearPileupDisplay/model.js +181 -138
  51. package/dist/LinearPileupDisplay/model.js.map +1 -1
  52. package/dist/LinearReadArcsDisplay/components/ReactComponent.d.ts +2 -2
  53. package/dist/LinearReadArcsDisplay/components/ReactComponent.js +36 -39
  54. package/dist/LinearReadArcsDisplay/components/ReactComponent.js.map +1 -1
  55. package/dist/LinearReadArcsDisplay/configSchema.d.ts +59 -1
  56. package/dist/LinearReadArcsDisplay/drawFeats.d.ts +2 -15
  57. package/dist/LinearReadArcsDisplay/drawFeats.js +58 -66
  58. package/dist/LinearReadArcsDisplay/drawFeats.js.map +1 -1
  59. package/dist/LinearReadArcsDisplay/model.d.ts +58 -193
  60. package/dist/LinearReadArcsDisplay/model.js +65 -115
  61. package/dist/LinearReadArcsDisplay/model.js.map +1 -1
  62. package/dist/LinearReadArcsDisplay/util.d.ts +2 -0
  63. package/dist/LinearReadArcsDisplay/util.js +13 -0
  64. package/dist/LinearReadArcsDisplay/util.js.map +1 -0
  65. package/dist/LinearReadCloudDisplay/components/ReactComponent.d.ts +2 -2
  66. package/dist/LinearReadCloudDisplay/components/ReactComponent.js +34 -36
  67. package/dist/LinearReadCloudDisplay/components/ReactComponent.js.map +1 -1
  68. package/dist/LinearReadCloudDisplay/configSchema.d.ts +52 -1
  69. package/dist/LinearReadCloudDisplay/drawFeats.d.ts +2 -10
  70. package/dist/LinearReadCloudDisplay/drawFeats.js +11 -127
  71. package/dist/LinearReadCloudDisplay/drawFeats.js.map +1 -1
  72. package/dist/LinearReadCloudDisplay/drawLongReadChains.d.ts +11 -0
  73. package/dist/LinearReadCloudDisplay/drawLongReadChains.js +69 -0
  74. package/dist/LinearReadCloudDisplay/drawLongReadChains.js.map +1 -0
  75. package/dist/LinearReadCloudDisplay/drawPairChains.d.ts +17 -0
  76. package/dist/LinearReadCloudDisplay/drawPairChains.js +100 -0
  77. package/dist/LinearReadCloudDisplay/drawPairChains.js.map +1 -0
  78. package/dist/LinearReadCloudDisplay/model.d.ts +65 -196
  79. package/dist/LinearReadCloudDisplay/model.js +55 -92
  80. package/dist/LinearReadCloudDisplay/model.js.map +1 -1
  81. package/dist/LinearReadCloudDisplay/util.d.ts +2 -0
  82. package/dist/LinearReadCloudDisplay/util.js +35 -0
  83. package/dist/LinearReadCloudDisplay/util.js.map +1 -0
  84. package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +2 -2
  85. package/dist/LinearSNPCoverageDisplay/models/configSchema.d.ts +79 -1
  86. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +157 -70
  87. package/dist/LinearSNPCoverageDisplay/models/model.js +46 -33
  88. package/dist/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  89. package/dist/MismatchParser/index.d.ts +7 -2
  90. package/dist/MismatchParser/index.js +44 -5
  91. package/dist/MismatchParser/index.js.map +1 -1
  92. package/dist/PileupRPC/methods/GetReducedFeatures.d.ts +15 -2
  93. package/dist/PileupRPC/methods/GetReducedFeatures.js +1 -8
  94. package/dist/PileupRPC/methods/GetReducedFeatures.js.map +1 -1
  95. package/dist/PileupRenderer/PileupLayoutSession.d.ts +1 -1
  96. package/dist/PileupRenderer/PileupRenderer.d.ts +4 -117
  97. package/dist/PileupRenderer/PileupRenderer.js +18 -752
  98. package/dist/PileupRenderer/PileupRenderer.js.map +1 -1
  99. package/dist/PileupRenderer/colorBy.d.ts +7 -0
  100. package/dist/PileupRenderer/colorBy.js +69 -0
  101. package/dist/PileupRenderer/colorBy.js.map +1 -0
  102. package/dist/PileupRenderer/components/PileupRendering.d.ts +7 -2
  103. package/dist/PileupRenderer/components/PileupRendering.js +17 -18
  104. package/dist/PileupRenderer/components/PileupRendering.js.map +1 -1
  105. package/dist/PileupRenderer/configSchema.d.ts +87 -1
  106. package/dist/PileupRenderer/getAlignmentShapeColor.d.ts +10 -0
  107. package/dist/PileupRenderer/getAlignmentShapeColor.js +60 -0
  108. package/dist/PileupRenderer/getAlignmentShapeColor.js.map +1 -0
  109. package/dist/PileupRenderer/index.js +1 -1
  110. package/dist/PileupRenderer/index.js.map +1 -1
  111. package/dist/PileupRenderer/layoutFeature.d.ts +18 -0
  112. package/dist/PileupRenderer/layoutFeature.js +41 -0
  113. package/dist/PileupRenderer/layoutFeature.js.map +1 -0
  114. package/dist/PileupRenderer/layoutFeatures.d.ts +2 -0
  115. package/dist/PileupRenderer/layoutFeatures.js +35 -0
  116. package/dist/PileupRenderer/layoutFeatures.js.map +1 -0
  117. package/dist/PileupRenderer/makeImageData.d.ts +17 -0
  118. package/dist/PileupRenderer/makeImageData.js +64 -0
  119. package/dist/PileupRenderer/makeImageData.js.map +1 -0
  120. package/dist/PileupRenderer/renderAlignment.d.ts +13 -0
  121. package/dist/PileupRenderer/renderAlignment.js +72 -0
  122. package/dist/PileupRenderer/renderAlignment.js.map +1 -0
  123. package/dist/PileupRenderer/renderAlignmentShape.d.ts +7 -0
  124. package/dist/PileupRenderer/renderAlignmentShape.js +41 -0
  125. package/dist/PileupRenderer/renderAlignmentShape.js.map +1 -0
  126. package/dist/PileupRenderer/renderMethylation.d.ts +11 -0
  127. package/dist/PileupRenderer/renderMethylation.js +63 -0
  128. package/dist/PileupRenderer/renderMethylation.js.map +1 -0
  129. package/dist/PileupRenderer/renderMismatches.d.ts +21 -0
  130. package/dist/PileupRenderer/renderMismatches.js +135 -0
  131. package/dist/PileupRenderer/renderMismatches.js.map +1 -0
  132. package/dist/PileupRenderer/renderModifications.d.ts +11 -0
  133. package/dist/PileupRenderer/renderModifications.js +54 -0
  134. package/dist/PileupRenderer/renderModifications.js.map +1 -0
  135. package/dist/PileupRenderer/renderPerBaseLettering.d.ts +13 -0
  136. package/dist/PileupRenderer/renderPerBaseLettering.js +47 -0
  137. package/dist/PileupRenderer/renderPerBaseLettering.js.map +1 -0
  138. package/dist/PileupRenderer/renderPerBaseQuality.d.ts +9 -0
  139. package/dist/PileupRenderer/renderPerBaseQuality.js +39 -0
  140. package/dist/PileupRenderer/renderPerBaseQuality.js.map +1 -0
  141. package/dist/PileupRenderer/renderSoftClipping.d.ts +13 -0
  142. package/dist/PileupRenderer/renderSoftClipping.js +48 -0
  143. package/dist/PileupRenderer/renderSoftClipping.js.map +1 -0
  144. package/dist/PileupRenderer/sortUtil.js +1 -2
  145. package/dist/PileupRenderer/sortUtil.js.map +1 -1
  146. package/dist/PileupRenderer/util.d.ts +24 -0
  147. package/dist/PileupRenderer/util.js +51 -0
  148. package/dist/PileupRenderer/util.js.map +1 -0
  149. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +1 -3
  150. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +2 -5
  151. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -1
  152. package/dist/SNPCoverageAdapter/configSchema.d.ts +10 -1
  153. package/dist/SNPCoverageAdapter/generateCoverageBins.d.ts +3 -43
  154. package/dist/SNPCoverageAdapter/generateCoverageBins.js +86 -59
  155. package/dist/SNPCoverageAdapter/generateCoverageBins.js.map +1 -1
  156. package/dist/SNPCoverageAdapter/index.js +0 -2
  157. package/dist/SNPCoverageAdapter/index.js.map +1 -1
  158. package/dist/SNPCoverageAdapter/util.d.ts +29 -0
  159. package/dist/SNPCoverageAdapter/util.js +3 -0
  160. package/dist/SNPCoverageAdapter/util.js.map +1 -0
  161. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +1 -1
  162. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +2 -2
  163. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
  164. package/dist/SNPCoverageRenderer/configSchema.d.ts +47 -1
  165. package/dist/SNPCoverageRenderer/configSchema.js +5 -0
  166. package/dist/SNPCoverageRenderer/configSchema.js.map +1 -1
  167. package/dist/shared/BaseDisplayComponent.d.ts +8 -0
  168. package/dist/shared/BaseDisplayComponent.js +49 -0
  169. package/dist/shared/BaseDisplayComponent.js.map +1 -0
  170. package/dist/shared/FilterByTag.d.ts +13 -12
  171. package/dist/shared/FilterByTag.js +8 -13
  172. package/dist/shared/FilterByTag.js.map +1 -1
  173. package/dist/shared/afterAttach.d.ts +2 -0
  174. package/dist/shared/afterAttach.js +44 -0
  175. package/dist/shared/afterAttach.js.map +1 -0
  176. package/dist/shared/color.d.ts +44 -6
  177. package/dist/shared/color.js +57 -23
  178. package/dist/shared/color.js.map +1 -1
  179. package/dist/shared/fetchChains.d.ts +3 -2
  180. package/dist/shared/fetchChains.js +14 -20
  181. package/dist/shared/fetchChains.js.map +1 -1
  182. package/dist/shared/renderSvg.d.ts +7 -0
  183. package/dist/shared/renderSvg.js +69 -0
  184. package/dist/shared/renderSvg.js.map +1 -0
  185. package/dist/shared/util.d.ts +2 -0
  186. package/dist/shared/util.js +13 -0
  187. package/dist/shared/util.js.map +1 -0
  188. package/dist/util.d.ts +16 -2
  189. package/dist/util.js +45 -4
  190. package/dist/util.js.map +1 -1
  191. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +2 -2
  192. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.d.ts +2 -2
  193. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js +3 -2
  194. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js.map +1 -1
  195. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.d.ts +2 -2
  196. package/esm/AlignmentsFeatureDetail/index.d.ts +4 -1
  197. package/esm/AlignmentsTrack/configSchemaF.d.ts +74 -0
  198. package/esm/AlignmentsTrack/configSchemaF.js +16 -0
  199. package/esm/AlignmentsTrack/configSchemaF.js.map +1 -0
  200. package/esm/AlignmentsTrack/index.js +3 -16
  201. package/esm/AlignmentsTrack/index.js.map +1 -1
  202. package/esm/BamAdapter/BamAdapter.d.ts +2 -2
  203. package/esm/BamAdapter/BamAdapter.js +27 -32
  204. package/esm/BamAdapter/BamAdapter.js.map +1 -1
  205. package/esm/BamAdapter/BamSlightlyLazyFeature.d.ts +1 -1
  206. package/esm/BamAdapter/configSchema.d.ts +50 -1
  207. package/esm/CramAdapter/CramAdapter.d.ts +1 -1
  208. package/esm/CramAdapter/CramAdapter.js +50 -48
  209. package/esm/CramAdapter/CramAdapter.js.map +1 -1
  210. package/esm/CramAdapter/CramSlightlyLazyFeature.js +3 -5
  211. package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  212. package/esm/CramAdapter/CramTestAdapters.js +2 -2
  213. package/esm/CramAdapter/CramTestAdapters.js.map +1 -1
  214. package/esm/CramAdapter/configSchema.d.ts +40 -1
  215. package/esm/HtsgetBamAdapter/configSchema.d.ts +26 -1
  216. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +2 -2
  217. package/esm/LinearAlignmentsDisplay/models/configSchema.d.ts +39 -1
  218. package/esm/LinearAlignmentsDisplay/models/model.d.ts +20 -6
  219. package/esm/LinearAlignmentsDisplay/models/model.js +9 -4
  220. package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -1
  221. package/esm/LinearPileupDisplay/components/ColorByModifications.d.ts +2 -2
  222. package/esm/LinearPileupDisplay/components/ColorByModifications.js +2 -22
  223. package/esm/LinearPileupDisplay/components/ColorByModifications.js.map +1 -1
  224. package/esm/LinearPileupDisplay/components/ColorByTag.d.ts +2 -2
  225. package/esm/LinearPileupDisplay/components/ColorByTag.js +2 -6
  226. package/esm/LinearPileupDisplay/components/ColorByTag.js.map +1 -1
  227. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +3 -3
  228. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +6 -6
  229. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -1
  230. package/esm/LinearPileupDisplay/components/ModificationsTable.d.ts +4 -0
  231. package/esm/LinearPileupDisplay/components/ModificationsTable.js +23 -0
  232. package/esm/LinearPileupDisplay/components/ModificationsTable.js.map +1 -0
  233. package/esm/LinearPileupDisplay/components/SetFeatureHeight.d.ts +2 -2
  234. package/esm/LinearPileupDisplay/components/SetMaxHeight.d.ts +2 -2
  235. package/esm/LinearPileupDisplay/components/SetMaxHeight.js +3 -5
  236. package/esm/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -1
  237. package/esm/LinearPileupDisplay/components/SortByTag.d.ts +2 -2
  238. package/esm/LinearPileupDisplay/configSchema.d.ts +57 -1
  239. package/esm/LinearPileupDisplay/model.d.ts +160 -80
  240. package/esm/LinearPileupDisplay/model.js +182 -139
  241. package/esm/LinearPileupDisplay/model.js.map +1 -1
  242. package/esm/LinearReadArcsDisplay/components/ReactComponent.d.ts +2 -2
  243. package/esm/LinearReadArcsDisplay/components/ReactComponent.js +13 -39
  244. package/esm/LinearReadArcsDisplay/components/ReactComponent.js.map +1 -1
  245. package/esm/LinearReadArcsDisplay/configSchema.d.ts +59 -1
  246. package/esm/LinearReadArcsDisplay/drawFeats.d.ts +2 -15
  247. package/esm/LinearReadArcsDisplay/drawFeats.js +56 -63
  248. package/esm/LinearReadArcsDisplay/drawFeats.js.map +1 -1
  249. package/esm/LinearReadArcsDisplay/model.d.ts +58 -193
  250. package/esm/LinearReadArcsDisplay/model.js +69 -119
  251. package/esm/LinearReadArcsDisplay/model.js.map +1 -1
  252. package/esm/LinearReadArcsDisplay/util.d.ts +2 -0
  253. package/esm/LinearReadArcsDisplay/util.js +9 -0
  254. package/esm/LinearReadArcsDisplay/util.js.map +1 -0
  255. package/esm/LinearReadCloudDisplay/components/ReactComponent.d.ts +2 -2
  256. package/esm/LinearReadCloudDisplay/components/ReactComponent.js +11 -36
  257. package/esm/LinearReadCloudDisplay/components/ReactComponent.js.map +1 -1
  258. package/esm/LinearReadCloudDisplay/configSchema.d.ts +52 -1
  259. package/esm/LinearReadCloudDisplay/drawFeats.d.ts +2 -10
  260. package/esm/LinearReadCloudDisplay/drawFeats.js +9 -126
  261. package/esm/LinearReadCloudDisplay/drawFeats.js.map +1 -1
  262. package/esm/LinearReadCloudDisplay/drawLongReadChains.d.ts +11 -0
  263. package/esm/LinearReadCloudDisplay/drawLongReadChains.js +65 -0
  264. package/esm/LinearReadCloudDisplay/drawLongReadChains.js.map +1 -0
  265. package/esm/LinearReadCloudDisplay/drawPairChains.d.ts +17 -0
  266. package/esm/LinearReadCloudDisplay/drawPairChains.js +95 -0
  267. package/esm/LinearReadCloudDisplay/drawPairChains.js.map +1 -0
  268. package/esm/LinearReadCloudDisplay/model.d.ts +65 -196
  269. package/esm/LinearReadCloudDisplay/model.js +59 -96
  270. package/esm/LinearReadCloudDisplay/model.js.map +1 -1
  271. package/esm/LinearReadCloudDisplay/util.d.ts +2 -0
  272. package/esm/LinearReadCloudDisplay/util.js +30 -0
  273. package/esm/LinearReadCloudDisplay/util.js.map +1 -0
  274. package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +2 -2
  275. package/esm/LinearSNPCoverageDisplay/models/configSchema.d.ts +79 -1
  276. package/esm/LinearSNPCoverageDisplay/models/model.d.ts +157 -70
  277. package/esm/LinearSNPCoverageDisplay/models/model.js +48 -35
  278. package/esm/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  279. package/esm/MismatchParser/index.d.ts +7 -2
  280. package/esm/MismatchParser/index.js +41 -4
  281. package/esm/MismatchParser/index.js.map +1 -1
  282. package/esm/PileupRPC/methods/GetReducedFeatures.d.ts +15 -2
  283. package/esm/PileupRPC/methods/GetReducedFeatures.js +2 -9
  284. package/esm/PileupRPC/methods/GetReducedFeatures.js.map +1 -1
  285. package/esm/PileupRenderer/PileupLayoutSession.d.ts +1 -1
  286. package/esm/PileupRenderer/PileupRenderer.d.ts +4 -117
  287. package/esm/PileupRenderer/PileupRenderer.js +20 -754
  288. package/esm/PileupRenderer/PileupRenderer.js.map +1 -1
  289. package/esm/PileupRenderer/colorBy.d.ts +7 -0
  290. package/esm/PileupRenderer/colorBy.js +61 -0
  291. package/esm/PileupRenderer/colorBy.js.map +1 -0
  292. package/esm/PileupRenderer/components/PileupRendering.d.ts +7 -2
  293. package/esm/PileupRenderer/components/PileupRendering.js +17 -18
  294. package/esm/PileupRenderer/components/PileupRendering.js.map +1 -1
  295. package/esm/PileupRenderer/configSchema.d.ts +87 -1
  296. package/esm/PileupRenderer/getAlignmentShapeColor.d.ts +10 -0
  297. package/esm/PileupRenderer/getAlignmentShapeColor.js +56 -0
  298. package/esm/PileupRenderer/getAlignmentShapeColor.js.map +1 -0
  299. package/esm/PileupRenderer/index.js +1 -1
  300. package/esm/PileupRenderer/index.js.map +1 -1
  301. package/esm/PileupRenderer/layoutFeature.d.ts +18 -0
  302. package/esm/PileupRenderer/layoutFeature.js +37 -0
  303. package/esm/PileupRenderer/layoutFeature.js.map +1 -0
  304. package/esm/PileupRenderer/layoutFeatures.d.ts +2 -0
  305. package/esm/PileupRenderer/layoutFeatures.js +31 -0
  306. package/esm/PileupRenderer/layoutFeatures.js.map +1 -0
  307. package/esm/PileupRenderer/makeImageData.d.ts +17 -0
  308. package/esm/PileupRenderer/makeImageData.js +60 -0
  309. package/esm/PileupRenderer/makeImageData.js.map +1 -0
  310. package/esm/PileupRenderer/renderAlignment.d.ts +13 -0
  311. package/esm/PileupRenderer/renderAlignment.js +68 -0
  312. package/esm/PileupRenderer/renderAlignment.js.map +1 -0
  313. package/esm/PileupRenderer/renderAlignmentShape.d.ts +7 -0
  314. package/esm/PileupRenderer/renderAlignmentShape.js +37 -0
  315. package/esm/PileupRenderer/renderAlignmentShape.js.map +1 -0
  316. package/esm/PileupRenderer/renderMethylation.d.ts +11 -0
  317. package/esm/PileupRenderer/renderMethylation.js +59 -0
  318. package/esm/PileupRenderer/renderMethylation.js.map +1 -0
  319. package/esm/PileupRenderer/renderMismatches.d.ts +21 -0
  320. package/esm/PileupRenderer/renderMismatches.js +131 -0
  321. package/esm/PileupRenderer/renderMismatches.js.map +1 -0
  322. package/esm/PileupRenderer/renderModifications.d.ts +11 -0
  323. package/esm/PileupRenderer/renderModifications.js +50 -0
  324. package/esm/PileupRenderer/renderModifications.js.map +1 -0
  325. package/esm/PileupRenderer/renderPerBaseLettering.d.ts +13 -0
  326. package/esm/PileupRenderer/renderPerBaseLettering.js +43 -0
  327. package/esm/PileupRenderer/renderPerBaseLettering.js.map +1 -0
  328. package/esm/PileupRenderer/renderPerBaseQuality.d.ts +9 -0
  329. package/esm/PileupRenderer/renderPerBaseQuality.js +35 -0
  330. package/esm/PileupRenderer/renderPerBaseQuality.js.map +1 -0
  331. package/esm/PileupRenderer/renderSoftClipping.d.ts +13 -0
  332. package/esm/PileupRenderer/renderSoftClipping.js +44 -0
  333. package/esm/PileupRenderer/renderSoftClipping.js.map +1 -0
  334. package/esm/PileupRenderer/sortUtil.js +1 -2
  335. package/esm/PileupRenderer/sortUtil.js.map +1 -1
  336. package/esm/PileupRenderer/util.d.ts +24 -0
  337. package/esm/PileupRenderer/util.js +42 -0
  338. package/esm/PileupRenderer/util.js.map +1 -0
  339. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +1 -3
  340. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js +2 -4
  341. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -1
  342. package/esm/SNPCoverageAdapter/configSchema.d.ts +10 -1
  343. package/esm/SNPCoverageAdapter/generateCoverageBins.d.ts +3 -43
  344. package/esm/SNPCoverageAdapter/generateCoverageBins.js +87 -60
  345. package/esm/SNPCoverageAdapter/generateCoverageBins.js.map +1 -1
  346. package/esm/SNPCoverageAdapter/index.js +0 -2
  347. package/esm/SNPCoverageAdapter/index.js.map +1 -1
  348. package/esm/SNPCoverageAdapter/util.d.ts +29 -0
  349. package/esm/SNPCoverageAdapter/util.js +2 -0
  350. package/esm/SNPCoverageAdapter/util.js.map +1 -0
  351. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +1 -1
  352. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +2 -2
  353. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
  354. package/esm/SNPCoverageRenderer/configSchema.d.ts +47 -1
  355. package/esm/SNPCoverageRenderer/configSchema.js +5 -0
  356. package/esm/SNPCoverageRenderer/configSchema.js.map +1 -1
  357. package/esm/shared/BaseDisplayComponent.d.ts +8 -0
  358. package/esm/shared/BaseDisplayComponent.js +44 -0
  359. package/esm/shared/BaseDisplayComponent.js.map +1 -0
  360. package/esm/shared/FilterByTag.d.ts +13 -12
  361. package/esm/shared/FilterByTag.js +8 -13
  362. package/esm/shared/FilterByTag.js.map +1 -1
  363. package/esm/shared/afterAttach.d.ts +2 -0
  364. package/esm/shared/afterAttach.js +40 -0
  365. package/esm/shared/afterAttach.js.map +1 -0
  366. package/esm/shared/color.d.ts +44 -6
  367. package/esm/shared/color.js +54 -20
  368. package/esm/shared/color.js.map +1 -1
  369. package/esm/shared/fetchChains.d.ts +3 -2
  370. package/esm/shared/fetchChains.js +14 -20
  371. package/esm/shared/fetchChains.js.map +1 -1
  372. package/esm/shared/renderSvg.d.ts +7 -0
  373. package/esm/shared/renderSvg.js +39 -0
  374. package/esm/shared/renderSvg.js.map +1 -0
  375. package/esm/shared/util.d.ts +2 -0
  376. package/esm/shared/util.js +9 -0
  377. package/esm/shared/util.js.map +1 -0
  378. package/esm/util.d.ts +16 -2
  379. package/esm/util.js +42 -3
  380. package/esm/util.js.map +1 -1
  381. package/package.json +3 -3
  382. package/src/AlignmentsFeatureDetail/AlignmentsFeatureFlags.tsx +3 -5
  383. package/src/AlignmentsFeatureDetail/__snapshots__/index.test.tsx.snap +1 -2
  384. package/src/AlignmentsTrack/configSchemaF.ts +22 -0
  385. package/src/AlignmentsTrack/index.ts +3 -24
  386. package/src/BamAdapter/BamAdapter.ts +46 -44
  387. package/src/CombinationTest.test.ts +2 -2
  388. package/src/CramAdapter/CramAdapter.ts +70 -56
  389. package/src/CramAdapter/CramSlightlyLazyFeature.ts +2 -5
  390. package/src/CramAdapter/CramTestAdapters.ts +2 -2
  391. package/src/LinearAlignmentsDisplay/models/model.tsx +16 -4
  392. package/src/LinearPileupDisplay/components/ColorByModifications.tsx +3 -39
  393. package/src/LinearPileupDisplay/components/ColorByTag.tsx +1 -6
  394. package/src/LinearPileupDisplay/components/LinearPileupDisplayBlurb.tsx +10 -11
  395. package/src/LinearPileupDisplay/components/ModificationsTable.tsx +38 -0
  396. package/src/LinearPileupDisplay/components/SetMaxHeight.tsx +3 -5
  397. package/src/LinearPileupDisplay/model.ts +235 -186
  398. package/src/LinearReadArcsDisplay/components/ReactComponent.tsx +23 -61
  399. package/src/LinearReadArcsDisplay/drawFeats.ts +79 -87
  400. package/src/LinearReadArcsDisplay/model.tsx +77 -155
  401. package/src/LinearReadArcsDisplay/util.ts +10 -0
  402. package/src/LinearReadCloudDisplay/components/ReactComponent.tsx +21 -59
  403. package/src/LinearReadCloudDisplay/drawFeats.ts +12 -166
  404. package/src/LinearReadCloudDisplay/drawLongReadChains.ts +85 -0
  405. package/src/LinearReadCloudDisplay/drawPairChains.ts +139 -0
  406. package/src/LinearReadCloudDisplay/model.tsx +72 -131
  407. package/src/LinearReadCloudDisplay/util.ts +47 -0
  408. package/src/LinearSNPCoverageDisplay/models/model.ts +63 -50
  409. package/src/MismatchParser/index.ts +46 -4
  410. package/src/PileupRPC/methods/GetReducedFeatures.ts +2 -10
  411. package/src/PileupRenderer/PileupLayoutSession.ts +1 -1
  412. package/src/PileupRenderer/PileupRenderer.ts +23 -1190
  413. package/src/PileupRenderer/colorBy.ts +74 -0
  414. package/src/PileupRenderer/components/PileupRendering.tsx +20 -25
  415. package/src/PileupRenderer/getAlignmentShapeColor.ts +87 -0
  416. package/src/PileupRenderer/index.ts +1 -1
  417. package/src/PileupRenderer/layoutFeature.ts +83 -0
  418. package/src/PileupRenderer/layoutFeatures.ts +44 -0
  419. package/src/PileupRenderer/makeImageData.ts +93 -0
  420. package/src/PileupRenderer/renderAlignment.ts +97 -0
  421. package/src/PileupRenderer/renderAlignmentShape.ts +45 -0
  422. package/src/PileupRenderer/renderMethylation.ts +75 -0
  423. package/src/PileupRenderer/renderMismatches.ts +206 -0
  424. package/src/PileupRenderer/renderModifications.ts +74 -0
  425. package/src/PileupRenderer/renderPerBaseLettering.ts +67 -0
  426. package/src/PileupRenderer/renderPerBaseQuality.ts +46 -0
  427. package/src/PileupRenderer/renderSoftClipping.ts +78 -0
  428. package/src/PileupRenderer/sortUtil.ts +1 -3
  429. package/src/PileupRenderer/util.ts +63 -0
  430. package/src/SNPCoverageAdapter/SNPCoverageAdapter.ts +5 -5
  431. package/src/SNPCoverageAdapter/generateCoverageBins.ts +105 -91
  432. package/src/SNPCoverageAdapter/index.ts +0 -2
  433. package/src/SNPCoverageAdapter/util.ts +33 -0
  434. package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +3 -3
  435. package/src/SNPCoverageRenderer/configSchema.ts +6 -0
  436. package/src/shared/BaseDisplayComponent.tsx +83 -0
  437. package/src/shared/FilterByTag.tsx +13 -23
  438. package/src/shared/afterAttach.tsx +66 -0
  439. package/src/shared/color.ts +59 -20
  440. package/src/shared/fetchChains.ts +23 -24
  441. package/src/shared/renderSvg.tsx +64 -0
  442. package/src/shared/util.ts +10 -0
  443. package/src/util.ts +54 -5
package/esm/util.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
2
- import { Feature } from '@jbrowse/core/util/simpleFeature';
3
- import { AugmentedRegion } from '@jbrowse/core/util';
2
+ import { Feature, AugmentedRegion } from '@jbrowse/core/util';
3
+ import { IAnyStateTreeNode } from 'mobx-state-tree';
4
+ import { IAutorunOptions } from 'mobx';
4
5
  export declare function getTag(feature: Feature, tag: string): any;
5
6
  export declare function getTagAlt(feature: Feature, tag: string, alt: string): any;
6
7
  export declare const orientationTypes: {
@@ -14,6 +15,19 @@ export declare const orientationTypes: {
14
15
  [key: string]: string;
15
16
  };
16
17
  };
18
+ export declare const pairMap: {
19
+ readonly LR: "color_pair_lr";
20
+ readonly LL: "color_pair_ll";
21
+ readonly RR: "color_pair_rr";
22
+ readonly RL: "color_pair_rl";
23
+ };
17
24
  export declare function getColorWGBS(strand: number, base: string): "#f00" | "#00f" | "#888";
18
25
  export declare function fetchSequence(region: AugmentedRegion, adapter: BaseFeatureDataAdapter): Promise<any>;
19
26
  export declare function shouldFetchReferenceSequence(type?: string): boolean;
27
+ export declare const modificationColors: Record<string, string | undefined>;
28
+ type DisplayModel = IAnyStateTreeNode & {
29
+ setError: (arg: unknown) => void;
30
+ };
31
+ export declare function createAutorun(self: DisplayModel, cb: () => Promise<void>, opts?: IAutorunOptions): void;
32
+ export declare function randomColor(): string;
33
+ export {};
package/esm/util.js CHANGED
@@ -1,15 +1,18 @@
1
1
  import { toArray } from 'rxjs/operators';
2
2
  import { firstValueFrom } from 'rxjs';
3
+ import { addDisposer, isAlive } from 'mobx-state-tree';
4
+ import { autorun } from 'mobx';
3
5
  // get tag from BAM or CRAM feature, where CRAM uses feature.get('tags') and
4
6
  // BAM does not
5
7
  export function getTag(feature, tag) {
6
8
  const tags = feature.get('tags');
7
- return tags ? tags[tag] : feature.get(tag);
9
+ return tags !== undefined ? tags[tag] : feature.get(tag);
8
10
  }
9
11
  // use fallback alt tag, used in situations where upper case/lower case tags
10
12
  // exist e.g. Mm/MM for base modifications
11
13
  export function getTagAlt(feature, tag, alt) {
12
- return getTag(feature, tag) || getTag(feature, alt);
14
+ var _a;
15
+ return (_a = getTag(feature, tag)) !== null && _a !== void 0 ? _a : getTag(feature, alt);
13
16
  }
14
17
  // orientation definitions from igv.js, see also
15
18
  // https://software.broadinstitute.org/software/igv/interpreting_pair_orientations
@@ -45,6 +48,12 @@ export const orientationTypes = {
45
48
  F1F2: 'RL',
46
49
  },
47
50
  };
51
+ export const pairMap = {
52
+ LR: 'color_pair_lr',
53
+ LL: 'color_pair_ll',
54
+ RR: 'color_pair_rr',
55
+ RL: 'color_pair_rl',
56
+ };
48
57
  export function getColorWGBS(strand, base) {
49
58
  if (strand === 1) {
50
59
  if (base === 'C') {
@@ -64,14 +73,17 @@ export function getColorWGBS(strand, base) {
64
73
  }
65
74
  return '#888';
66
75
  }
76
+ // fetches region sequence augmenting by +/- 1bp for CpG on either side of
77
+ // requested region
67
78
  export async function fetchSequence(region, adapter) {
68
79
  var _a;
69
- const { end, originalRefName, refName } = region;
80
+ const { start, end, originalRefName, refName } = region;
70
81
  const feats = await firstValueFrom(adapter
71
82
  .getFeatures({
72
83
  ...region,
73
84
  refName: originalRefName || refName,
74
85
  end: end + 1,
86
+ start: Math.max(0, start - 1),
75
87
  })
76
88
  .pipe(toArray()));
77
89
  return (_a = feats[0]) === null || _a === void 0 ? void 0 : _a.get('seq');
@@ -80,4 +92,31 @@ export async function fetchSequence(region, adapter) {
80
92
  export function shouldFetchReferenceSequence(type) {
81
93
  return type === 'methylation';
82
94
  }
95
+ // adapted from IGV
96
+ // https://github.com/igvteam/igv/blob/e803e3af2d8c9ea049961dfd4628146bdde9a574/src/main/java/org/broad/igv/sam/mods/BaseModificationColors.java#L27
97
+ export const modificationColors = {
98
+ m: 'rgb(255,0,0)',
99
+ h: 'rgb(11, 132, 165)',
100
+ o: 'rgb(111, 78, 129)',
101
+ f: 'rgb(246, 200, 95)',
102
+ c: 'rgb(157, 216, 102)',
103
+ g: 'rgb(255, 160, 86)',
104
+ e: 'rgb(141, 221, 208)',
105
+ b: 'rgb(202, 71, 47)',
106
+ };
107
+ export function createAutorun(self, cb, opts) {
108
+ addDisposer(self, autorun(async () => {
109
+ try {
110
+ await cb();
111
+ }
112
+ catch (e) {
113
+ if (isAlive(self)) {
114
+ self.setError(e);
115
+ }
116
+ }
117
+ }, opts));
118
+ }
119
+ export function randomColor() {
120
+ return `hsl(${Math.random() * 200}, 50%, 50%)`;
121
+ }
83
122
  //# sourceMappingURL=util.js.map
package/esm/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAGxC,OAAO,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AACrC,4EAA4E;AAC5E,eAAe;AACf,MAAM,UAAU,MAAM,CAAC,OAAgB,EAAE,GAAW;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAC5C,CAAC;AAED,4EAA4E;AAC5E,0CAA0C;AAC1C,MAAM,UAAU,SAAS,CAAC,OAAgB,EAAE,GAAW,EAAE,GAAW;IAClE,OAAO,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AACrD,CAAC;AAED,gDAAgD;AAChD,kFAAkF;AAClF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,EAAE,EAAE;QACF,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QAEV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QAEV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QAEV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;KACkB;IAE9B,EAAE,EAAE;QACF,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QAEV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QAEV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QAEV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;KACkB;IAE9B,EAAE,EAAE;QACF,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QAEV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QAEV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QAEV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;KACkB;CAC/B,CAAA;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAAY;IACvD,IAAI,MAAM,KAAK,CAAC,EAAE;QAChB,IAAI,IAAI,KAAK,GAAG,EAAE;YAChB,OAAO,MAAM,CAAA;SACd;QACD,IAAI,IAAI,KAAK,GAAG,EAAE;YAChB,OAAO,MAAM,CAAA;SACd;KACF;SAAM,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;QACxB,IAAI,IAAI,KAAK,GAAG,EAAE;YAChB,OAAO,MAAM,CAAA;SACd;QACD,IAAI,IAAI,KAAK,GAAG,EAAE;YAChB,OAAO,MAAM,CAAA;SACd;KACF;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAuB,EACvB,OAA+B;;IAE/B,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAEhD,MAAM,KAAK,GAAG,MAAM,cAAc,CAChC,OAAO;SACJ,WAAW,CAAC;QACX,GAAG,MAAM;QACT,OAAO,EAAE,eAAe,IAAI,OAAO;QACnC,GAAG,EAAE,GAAG,GAAG,CAAC;KACb,CAAC;SACD,IAAI,CAAC,OAAO,EAAE,CAAC,CACnB,CAAA;IACD,OAAO,MAAA,KAAK,CAAC,CAAC,CAAC,0CAAE,GAAG,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,4BAA4B,CAAC,IAAa;IACxD,OAAO,IAAI,KAAK,aAAa,CAAA;AAC/B,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-alignments",
3
- "version": "2.4.2",
3
+ "version": "2.6.0",
4
4
  "description": "JBrowse 2 alignments adapters, tracks, etc.",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -37,7 +37,7 @@
37
37
  "clean": "rimraf dist esm *.tsbuildinfo"
38
38
  },
39
39
  "dependencies": {
40
- "@gmod/bam": "^1.1.15",
40
+ "@gmod/bam": "^2.0.0",
41
41
  "@gmod/cram": "^1.7.1",
42
42
  "@mui/icons-material": "^5.0.1",
43
43
  "canvas2svg": "^1.0.16",
@@ -65,5 +65,5 @@
65
65
  "distModule": "esm/index.js",
66
66
  "srcModule": "src/index.ts",
67
67
  "module": "esm/index.js",
68
- "gitHead": "36e382a70e7d220343b873e7e6aba5c83e5342c8"
68
+ "gitHead": "9962c94711dd3386dcb76c16f3646937d9c4751a"
69
69
  }
@@ -1,10 +1,8 @@
1
1
  import React from 'react'
2
2
  import { Checkbox, FormControlLabel, FormGroup } from '@mui/material'
3
3
  import { makeStyles } from 'tss-react/mui'
4
- import {
5
- BaseCard,
6
- SimpleValue,
7
- } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail'
4
+ import { BaseCard } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail'
5
+ import SimpleField from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/SimpleField'
8
6
 
9
7
  const useStyles = makeStyles()({
10
8
  compact: {
@@ -36,7 +34,7 @@ export default function AlignmentFlags(props: { feature: { flags: number } }) {
36
34
 
37
35
  return (
38
36
  <BaseCard {...props} title="Flags">
39
- <SimpleValue name="Flag" value={flags} />
37
+ <SimpleField name="Flag" value={flags} />
40
38
  <FormGroup>
41
39
  {flagNames.map((name, idx) => {
42
40
  const val = flags & (1 << idx)
@@ -280,7 +280,7 @@ exports[`open up a widget 1`] = `
280
280
  </div>
281
281
  </div>
282
282
  <div
283
- class="css-1upvn7b-container2"
283
+ class="css-1lttu3w-container"
284
284
  >
285
285
  <button
286
286
  class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium css-sghohy-MuiButtonBase-root-MuiButton-root"
@@ -316,7 +316,6 @@ exports[`open up a widget 1`] = `
316
316
  />
317
317
  </button>
318
318
  </div>
319
- <br />
320
319
  </div>
321
320
  </div>
322
321
  </div>
@@ -0,0 +1,22 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration'
2
+ import { createBaseTrackConfig } from '@jbrowse/core/pluggableElementTypes'
3
+ import PluginManager from '@jbrowse/core/PluginManager'
4
+
5
+ /**
6
+ * #config AlignmentsTrack
7
+ * has very little config; most config and state logic is on the display
8
+ */
9
+ function x() {} // eslint-disable-line @typescript-eslint/no-unused-vars
10
+
11
+ export default function configSchemaFactory(pluginManager: PluginManager) {
12
+ return ConfigurationSchema(
13
+ 'AlignmentsTrack',
14
+ {},
15
+ {
16
+ /**
17
+ * #baseConfiguration
18
+ */
19
+ baseConfiguration: createBaseTrackConfig(pluginManager),
20
+ },
21
+ )
22
+ }
@@ -1,32 +1,11 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager'
2
2
  import TrackType from '@jbrowse/core/pluggableElementTypes/TrackType'
3
- import { ConfigurationSchema } from '@jbrowse/core/configuration'
4
- import {
5
- createBaseTrackConfig,
6
- createBaseTrackModel,
7
- } from '@jbrowse/core/pluggableElementTypes/models'
3
+ import { createBaseTrackModel } from '@jbrowse/core/pluggableElementTypes/models'
4
+ import configSchemaF from './configSchemaF'
8
5
 
9
- /**
10
- * #config AlignmentsTrack
11
- * has very little config; most config and state logic is on the display
12
- */
13
- function x() {} // eslint-disable-line @typescript-eslint/no-unused-vars
14
-
15
- function configSchemaFactory(pluginManager: PluginManager) {
16
- return ConfigurationSchema(
17
- 'AlignmentsTrack',
18
- {},
19
- {
20
- /**
21
- * #baseConfiguration
22
- */
23
- baseConfiguration: createBaseTrackConfig(pluginManager),
24
- },
25
- )
26
- }
27
6
  export default function register(pm: PluginManager) {
28
7
  pm.addTrackType(() => {
29
- const configSchema = configSchemaFactory(pm)
8
+ const configSchema = configSchemaF(pm)
30
9
  const track = new TrackType({
31
10
  name: 'AlignmentsTrack',
32
11
  displayName: 'Alignments track',
@@ -8,10 +8,10 @@ import { bytesForRegions, updateStatus, Feature } from '@jbrowse/core/util'
8
8
  import { openLocation } from '@jbrowse/core/util/io'
9
9
  import { ObservableCreate } from '@jbrowse/core/util/rxjs'
10
10
  import { toArray } from 'rxjs/operators'
11
+ import { firstValueFrom } from 'rxjs'
11
12
 
12
13
  // locals
13
14
  import BamSlightlyLazyFeature from './BamSlightlyLazyFeature'
14
- import { firstValueFrom } from 'rxjs'
15
15
 
16
16
  interface Header {
17
17
  idToName: string[]
@@ -43,8 +43,6 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
43
43
  // chunkSizeLimit and fetchSizeLimit are more troublesome than
44
44
  // helpful, and have given overly large values on the ultra long
45
45
  // nanopore reads even with 500MB limits, so disabled with infinity
46
- chunkSizeLimit: Infinity,
47
- fetchSizeLimit: Infinity,
48
46
  yieldThreadTime: Infinity,
49
47
  })
50
48
 
@@ -89,7 +87,7 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
89
87
  const idToName: string[] = []
90
88
  const nameToId: Record<string, number> = {}
91
89
  samHeader
92
- .filter(l => l.tag === 'SQ')
90
+ ?.filter(l => l.tag === 'SQ')
93
91
  .forEach((sqLine, refId) => {
94
92
  sqLine.data.forEach(item => {
95
93
  if (item.tag === 'SN') {
@@ -182,61 +180,65 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
182
180
  return ObservableCreate<Feature>(async observer => {
183
181
  const { bam } = await this.configure()
184
182
  await this.setup(opts)
185
- statusCallback('Downloading alignments')
186
- const records = await bam.getRecordsForRange(refName, start, end, opts)
187
-
188
- const {
189
- flagInclude = 0,
190
- flagExclude = 0,
191
- tagFilter,
192
- readName,
193
- } = filterBy || {}
194
-
195
- for (const record of records) {
196
- let ref: string | undefined
197
- if (!record.get('MD')) {
198
- ref = await this.seqFetch(
199
- originalRefName || refName,
200
- record.get('start'),
201
- record.get('end'),
202
- )
203
- }
183
+ const records = await updateStatus(
184
+ 'Downloading alignments',
185
+ statusCallback,
186
+ () => bam.getRecordsForRange(refName, start, end, opts),
187
+ )
204
188
 
205
- const flags = record.flags
206
- if (
207
- !((flags & flagInclude) === flagInclude && !(flags & flagExclude))
208
- ) {
209
- continue
210
- }
189
+ await updateStatus('Processing alignments', statusCallback, async () => {
190
+ const {
191
+ flagInclude = 0,
192
+ flagExclude = 0,
193
+ tagFilter,
194
+ readName,
195
+ } = filterBy || {}
196
+
197
+ for (const record of records) {
198
+ let ref: string | undefined
199
+ if (!record.get('MD')) {
200
+ ref = await this.seqFetch(
201
+ originalRefName || refName,
202
+ record.get('start'),
203
+ record.get('end'),
204
+ )
205
+ }
211
206
 
212
- if (tagFilter) {
213
- const val = record.get(tagFilter.tag)
214
- if (!(val === '*' ? val !== undefined : val === tagFilter.value)) {
207
+ const flags = record.flags
208
+ if ((flags & flagInclude) !== flagInclude && !(flags & flagExclude)) {
215
209
  continue
216
210
  }
217
- }
218
211
 
219
- if (readName && record.get('name') !== readName) {
220
- continue
221
- }
212
+ if (tagFilter) {
213
+ const v = record.get(tagFilter.tag)
214
+ if (!(v === '*' ? v !== undefined : `${v}` === tagFilter.value)) {
215
+ continue
216
+ }
217
+ }
222
218
 
223
- observer.next(new BamSlightlyLazyFeature(record, this, ref))
224
- }
225
- statusCallback('')
226
- observer.complete()
219
+ if (readName && record.get('name') !== readName) {
220
+ continue
221
+ }
222
+
223
+ observer.next(new BamSlightlyLazyFeature(record, this, ref))
224
+ }
225
+ observer.complete()
226
+ })
227
227
  }, signal)
228
228
  }
229
229
 
230
- async estimateRegionsStats(regions: Region[], opts?: BaseOptions) {
230
+ async getMultiRegionFeatureDensityStats(
231
+ regions: Region[],
232
+ opts?: BaseOptions,
233
+ ) {
231
234
  const { bam } = await this.configure()
232
235
  // this is a method to avoid calling on htsget adapters
233
- // @ts-expect-error
234
- if (bam.index.filehandle !== '?') {
236
+ if (bam.index) {
235
237
  const bytes = await bytesForRegions(regions, bam)
236
238
  const fetchSizeLimit = this.getConf('fetchSizeLimit')
237
239
  return { bytes, fetchSizeLimit }
238
240
  } else {
239
- return super.estimateRegionsStats(regions, opts)
241
+ return super.getMultiRegionFeatureDensityStats(regions, opts)
240
242
  }
241
243
  }
242
244
 
@@ -100,9 +100,9 @@ async function mismatchesCheck(f: string) {
100
100
  test('match CIGAR across file types', async () => {
101
101
  await cigarCheck('volvox-sorted')
102
102
  await cigarCheck('volvox-long-reads.fastq.sorted')
103
- })
103
+ }, 20000)
104
104
 
105
105
  test('mismatches same across file types', async () => {
106
106
  await mismatchesCheck('volvox-sorted')
107
107
  await mismatchesCheck('volvox-long-reads.fastq.sorted')
108
- })
108
+ }, 20000)
@@ -4,7 +4,12 @@ import {
4
4
  BaseOptions,
5
5
  BaseSequenceAdapter,
6
6
  } from '@jbrowse/core/data_adapters/BaseAdapter'
7
- import { checkAbortSignal, Region, Feature } from '@jbrowse/core/util'
7
+ import {
8
+ checkAbortSignal,
9
+ Region,
10
+ Feature,
11
+ updateStatus,
12
+ } from '@jbrowse/core/util'
8
13
  import { openLocation } from '@jbrowse/core/util/io'
9
14
  import { ObservableCreate } from '@jbrowse/core/util/rxjs'
10
15
  import { toArray } from 'rxjs/operators'
@@ -142,36 +147,36 @@ export default class CramAdapter extends BaseFeatureDataAdapter {
142
147
 
143
148
  private async setupPre(opts?: BaseOptions) {
144
149
  const { statusCallback = () => {} } = opts || {}
145
- const conf = await this.configure()
146
- statusCallback('Downloading index')
147
- const { cram } = conf
148
- const samHeader = await cram.cram.getSamHeader()
149
-
150
- // use the @SQ lines in the header to figure out the
151
- // mapping between ref ID numbers and names
152
- const idToName: string[] = []
153
- const nameToId: Record<string, number> = {}
154
- samHeader
155
- .filter(l => l.tag === 'SQ')
156
- .forEach((sqLine, refId) => {
157
- sqLine.data.forEach(item => {
158
- if (item.tag === 'SN') {
159
- // this is the ref name
160
- const refName = item.value
161
- nameToId[refName] = refId
162
- idToName[refId] = refName
163
- }
150
+ return updateStatus('Downloading index', statusCallback, async () => {
151
+ const conf = await this.configure()
152
+ const { cram } = conf
153
+ const samHeader = await cram.cram.getSamHeader()
154
+
155
+ // use the @SQ lines in the header to figure out the
156
+ // mapping between ref ID numbers and names
157
+ const idToName: string[] = []
158
+ const nameToId: Record<string, number> = {}
159
+ samHeader
160
+ .filter(l => l.tag === 'SQ')
161
+ .forEach((sqLine, refId) => {
162
+ sqLine.data.forEach(item => {
163
+ if (item.tag === 'SN') {
164
+ // this is the ref name
165
+ const refName = item.value
166
+ nameToId[refName] = refId
167
+ idToName[refId] = refName
168
+ }
169
+ })
164
170
  })
165
- })
166
171
 
167
- const readGroups = samHeader
168
- .filter(l => l.tag === 'RG')
169
- .map(rgLine => rgLine.data.find(item => item.tag === 'ID')?.value)
172
+ const readGroups = samHeader
173
+ .filter(l => l.tag === 'RG')
174
+ .map(rgLine => rgLine.data.find(item => item.tag === 'ID')?.value)
170
175
 
171
- const data = { idToName, nameToId, readGroups }
172
- statusCallback('')
173
- this.samHeader = data
174
- return { samHeader: data, ...conf }
176
+ const data = { idToName, nameToId, readGroups }
177
+ this.samHeader = data
178
+ return { samHeader: data, ...conf }
179
+ })
175
180
  }
176
181
 
177
182
  private async setup(opts?: BaseOptions) {
@@ -236,38 +241,44 @@ export default class CramAdapter extends BaseFeatureDataAdapter {
236
241
  if (originalRefName) {
237
242
  this.seqIdToOriginalRefName[refId] = originalRefName
238
243
  }
239
- statusCallback('Downloading alignments')
240
- const records = await cram.getRecordsForRange(refId, start, end)
244
+ const records = await updateStatus(
245
+ 'Downloading alignments',
246
+ statusCallback,
247
+ () => cram.getRecordsForRange(refId, start, end),
248
+ )
241
249
  checkAbortSignal(signal)
242
- const {
243
- flagInclude = 0,
244
- flagExclude = 0,
245
- tagFilter,
246
- readName,
247
- } = filterBy || {}
248
-
249
- let filtered = records.filter(record => {
250
- const flags = record.flags
251
- return (flags & flagInclude) === flagInclude && !(flags & flagExclude)
252
- })
250
+ await updateStatus('Processing alignments', statusCallback, () => {
251
+ const {
252
+ flagInclude = 0,
253
+ flagExclude = 0,
254
+ tagFilter,
255
+ readName,
256
+ } = filterBy || {}
257
+
258
+ for (const record of records) {
259
+ const flags = record.flags
260
+ if ((flags & flagInclude) !== flagInclude && !(flags & flagExclude)) {
261
+ continue
262
+ }
253
263
 
254
- if (tagFilter) {
255
- filtered = filtered.filter(record => {
256
- // @ts-expect-error
257
- const val = record[tagFilter.tag]
258
- return val === '*' ? val !== undefined : val === tagFilter.value
259
- })
260
- }
264
+ if (tagFilter) {
265
+ const v =
266
+ tagFilter.tag === 'RG'
267
+ ? this.samHeader.readGroups?.[record.readGroupId]
268
+ : record.tags[tagFilter.tag]
269
+ if (!(v === '*' ? v !== undefined : `${v}` === tagFilter.value)) {
270
+ continue
271
+ }
272
+ }
261
273
 
262
- if (readName) {
263
- filtered = filtered.filter(record => record.readName === readName)
264
- }
274
+ if (readName && record.readName !== readName) {
275
+ continue
276
+ }
277
+ observer.next(this.cramRecordToFeature(record))
278
+ }
265
279
 
266
- filtered.forEach(record => {
267
- observer.next(this.cramRecordToFeature(record))
280
+ observer.complete()
268
281
  })
269
- statusCallback('')
270
- observer.complete()
271
282
  }, signal)
272
283
  }
273
284
 
@@ -278,7 +289,10 @@ export default class CramAdapter extends BaseFeatureDataAdapter {
278
289
  }
279
290
 
280
291
  // we return the configured fetchSizeLimit, and the bytes for the region
281
- async estimateRegionsStats(regions: Region[], opts?: BaseOptions) {
292
+ async getMultiRegionFeatureDensityStats(
293
+ regions: Region[],
294
+ opts?: BaseOptions,
295
+ ) {
282
296
  const bytes = await this.bytesForRegions(regions, opts)
283
297
  const fetchSizeLimit = this.getConf('fetchSizeLimit')
284
298
  return {
@@ -47,8 +47,7 @@ export default class CramSlightlyLazyFeature implements Feature {
47
47
  }
48
48
 
49
49
  _read_group_id() {
50
- const rg = this._store.samHeader.readGroups
51
- return rg ? rg[this.record.readGroupId] : undefined
50
+ return this._store.samHeader.readGroups?.[this.record.readGroupId]
52
51
  }
53
52
 
54
53
  _get_qual() {
@@ -157,9 +156,7 @@ export default class CramSlightlyLazyFeature implements Feature {
157
156
  const mismatches = this.get('mismatches')
158
157
  if (mismatches.length) {
159
158
  const record =
160
- this.get('strand') === -1
161
- ? mismatches[mismatches.length - 1]
162
- : mismatches[0]
159
+ this.get('strand') === -1 ? mismatches.at(-1) : mismatches[0]
163
160
  const { type, cliplen } = record
164
161
  if (type === 'softclip' || type === 'hardclip') {
165
162
  return cliplen
@@ -2,7 +2,7 @@ import { GenericFilehandle } from 'generic-filehandle'
2
2
  import { Observable } from 'rxjs'
3
3
  import SimpleFeature from '@jbrowse/core/util/simpleFeature'
4
4
  import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter'
5
- import { ConfigurationSchema } from '@jbrowse/core/configuration/configurationSchema'
5
+ import { ConfigurationSchema } from '@jbrowse/core/configuration'
6
6
 
7
7
  // setup for Cram Adapter Testing
8
8
  export function parseSmallFasta(text: string) {
@@ -13,7 +13,7 @@ export function parseSmallFasta(text: string) {
13
13
  const [defLine, ...seqLines] = entryText.split(/\n|\r\n|\r/)
14
14
  const [id, ...descriptionLines] = defLine.split(' ')
15
15
  const description = descriptionLines.join(' ')
16
- const sequence = seqLines.join('').replace(/\s/g, '')
16
+ const sequence = seqLines.join('').replaceAll(/\s/g, '')
17
17
  return { id, description, sequence }
18
18
  })
19
19
  }
@@ -20,6 +20,7 @@ import {
20
20
  import { BaseDisplay } from '@jbrowse/core/pluggableElementTypes/models'
21
21
  import PluginManager from '@jbrowse/core/PluginManager'
22
22
  import { MenuItem } from '@jbrowse/core/ui'
23
+ import { FeatureDensityStats } from '@jbrowse/core/data_adapters/BaseAdapter'
23
24
 
24
25
  const minDisplayHeight = 20
25
26
 
@@ -161,6 +162,13 @@ function stateModelFactory(
161
162
  get height() {
162
163
  return self.heightPreConfig ?? getConf(self, 'height')
163
164
  },
165
+
166
+ get featureIdUnderMouse() {
167
+ return (
168
+ self.PileupDisplay.featureIdUnderMouse ||
169
+ self.SNPCoverageDisplay.featureIdUnderMouse
170
+ )
171
+ },
164
172
  }))
165
173
  .views(self => ({
166
174
  /**
@@ -234,9 +242,9 @@ function stateModelFactory(
234
242
  /**
235
243
  * #action
236
244
  */
237
- updateStatsLimit(stats?: unknown) {
238
- self.PileupDisplay.updateStatsLimit(stats)
239
- self.SNPCoverageDisplay.updateStatsLimit(stats)
245
+ setFeatureDensityStatsLimit(stats?: FeatureDensityStats) {
246
+ self.PileupDisplay.setFeatureDensityStatsLimit(stats)
247
+ self.SNPCoverageDisplay.setFeatureDensityStatsLimit(stats)
240
248
  },
241
249
 
242
250
  /**
@@ -328,7 +336,11 @@ function stateModelFactory(
328
336
  */
329
337
  async renderSvg(opts: { rasterizeLayers?: boolean }) {
330
338
  const pileupHeight = self.height - self.SNPCoverageDisplay.height
331
- await when(() => self.PileupDisplay.ready)
339
+ await when(
340
+ () =>
341
+ !self.PileupDisplay.renderProps().notReady &&
342
+ !self.SNPCoverageDisplay.renderProps().notReady,
343
+ )
332
344
  return (
333
345
  <>
334
346
  <g>{await self.SNPCoverageDisplay.renderSvg(opts)}</g>