@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
@@ -5,8 +5,11 @@ import {
5
5
  parseCigar,
6
6
  getNextRefPos,
7
7
  getModificationPositions,
8
+ getMethBins,
8
9
  Mismatch,
9
10
  } from '../MismatchParser'
11
+ import { doesIntersect2 } from '@jbrowse/core/util'
12
+ import { Bin, SkipMap } from './util'
10
13
 
11
14
  function mismatchLen(mismatch: Mismatch) {
12
15
  return !isInterbase(mismatch.type) ? mismatch.length : 1
@@ -38,49 +41,25 @@ export default async function generateCoverageBins(
38
41
  fetchSequence: (arg: Region) => Promise<string>,
39
42
  ) {
40
43
  const { colorBy } = opts
41
- const binMax = Math.ceil(region.end - region.start)
42
-
43
- const skipmap = {} as {
44
- [key: string]: {
45
- score: number
46
- feature: unknown
47
- start: number
48
- end: number
49
- strand: number
50
- xs: string
51
- }
44
+ const extendedRegion = {
45
+ ...region,
46
+ start: Math.max(0, region.start - 1),
47
+ end: region.end + 1,
52
48
  }
53
-
54
- // bins contain:
55
- // - cov feature if they contribute to coverage
56
- // - noncov are insertions/clip features that don't contribute to coverage
57
- // - delskips deletions or introns that don't contribute to coverage
58
- type BinType = { total: number; strands: { [key: string]: number } }
59
-
60
- const regionSeq =
49
+ const binMax = Math.ceil(extendedRegion.end - extendedRegion.start)
50
+ const skipmap = {} as SkipMap
51
+ const regionSequence =
61
52
  features.length && shouldFetchReferenceSequence(opts.colorBy?.type)
62
53
  ? await fetchSequence(region)
63
54
  : undefined
64
55
 
65
- const bins = [] as {
66
- refbase?: string
67
- total: number
68
- all: number
69
- ref: number
70
- '-1': 0
71
- '0': 0
72
- '1': 0
73
- lowqual: BinType
74
- cov: BinType
75
- delskips: BinType
76
- noncov: BinType
77
- }[]
78
-
79
- for (let i = 0; i < features.length; i++) {
80
- const feature = features[i]
56
+ const bins = [] as Bin[]
57
+
58
+ for (const feature of features) {
81
59
  const fstart = feature.get('start')
82
60
  const fend = feature.get('end')
83
61
  const fstrand = feature.get('strand') as -1 | 0 | 1
62
+ const mismatches = (feature.get('mismatches') as Mismatch[]) || []
84
63
 
85
64
  for (let j = fstart; j < fend + 1; j++) {
86
65
  const i = j - region.start
@@ -93,10 +72,10 @@ export default async function generateCoverageBins(
93
72
  '-1': 0,
94
73
  '0': 0,
95
74
  '1': 0,
96
- lowqual: {} as BinType,
97
- cov: {} as BinType,
98
- delskips: {} as BinType,
99
- noncov: {} as BinType,
75
+ lowqual: {},
76
+ cov: {},
77
+ delskips: {},
78
+ noncov: {},
100
79
  }
101
80
  }
102
81
  if (j !== fend) {
@@ -109,17 +88,31 @@ export default async function generateCoverageBins(
109
88
  }
110
89
 
111
90
  if (colorBy?.type === 'modifications') {
112
- const seq = feature.get('seq') as string
91
+ const seq = feature.get('seq') as string | undefined
113
92
  const mm = (getTagAlt(feature, 'MM', 'Mm') as string) || ''
114
93
  const ops = parseCigar(feature.get('CIGAR'))
115
94
  const fend = feature.get('end')
116
-
117
- getModificationPositions(mm, seq, fstrand).forEach(
118
- ({ type, positions }) => {
95
+ if (seq) {
96
+ const modifications = getModificationPositions(mm, seq, fstrand)
97
+ for (const { type, positions } of modifications) {
119
98
  const mod = `mod_${type}`
120
99
  for (const pos of getNextRefPos(ops, positions)) {
121
100
  const epos = pos + fstart - region.start
122
101
  if (epos >= 0 && epos < bins.length && pos + fstart < fend) {
102
+ if (bins[epos] === undefined) {
103
+ bins[epos] = {
104
+ total: 0,
105
+ all: 0,
106
+ ref: 0,
107
+ '-1': 0,
108
+ '0': 0,
109
+ '1': 0,
110
+ lowqual: {},
111
+ cov: {},
112
+ delskips: {},
113
+ noncov: {},
114
+ }
115
+ }
123
116
  const bin = bins[epos]
124
117
  if (bin) {
125
118
  inc(bin, fstrand, 'cov', mod)
@@ -130,61 +123,84 @@ export default async function generateCoverageBins(
130
123
  }
131
124
  }
132
125
  }
133
- },
134
- )
126
+ }
127
+ }
135
128
  }
136
129
 
137
- // methylation based coloring takes into account both reference
138
- // sequence CpG detection and reads
139
- else if (colorBy?.type === 'methylation') {
140
- if (!regionSeq) {
130
+ if (colorBy?.type === 'methylation') {
131
+ if (!regionSequence) {
141
132
  throw new Error(
142
133
  'no region sequence detected, need sequenceAdapter configuration',
143
134
  )
144
135
  }
145
- const seq = feature.get('seq')
146
- const mm = getTagAlt(feature, 'MM', 'Mm') || ''
147
- const methBins = new Array(region.end - region.start).fill(0)
148
- const ops = parseCigar(feature.get('CIGAR'))
149
-
150
- getModificationPositions(mm, seq, fstrand).forEach(
151
- ({ type, positions }) => {
152
- // we are processing methylation
153
- if (type === 'm') {
154
- for (const pos of getNextRefPos(ops, positions)) {
155
- const epos = pos + fstart - region.start
156
- if (epos >= 0 && epos < methBins.length) {
157
- methBins[epos] = 1
158
- }
159
- }
160
- }
161
- },
162
- )
136
+ const seq = feature.get('seq') as string | undefined
137
+ if (!seq) {
138
+ continue
139
+ }
140
+ const { methBins, methProbs } = getMethBins(feature)
141
+ const dels = mismatches.filter(f => f.type === 'deletion')
163
142
 
164
- for (let j = fstart; j < fend; j++) {
165
- const i = j - region.start
166
- if (i >= 0 && i < bins.length - 1) {
167
- const l1 = regionSeq[i].toLowerCase()
168
- const l2 = regionSeq[i + 1].toLowerCase()
169
- const bin = bins[i]
170
- const bin1 = bins[i + 1]
143
+ // methylation based coloring takes into account both reference sequence
144
+ // CpG detection and reads
145
+ for (let i = 0; i < fend - fstart; i++) {
146
+ const j = i + fstart
147
+ const l1 = regionSequence[j - region.start + 1]?.toLowerCase()
148
+ const l2 = regionSequence[j - region.start + 2]?.toLowerCase()
149
+ if (l1 === 'c' && l2 === 'g') {
150
+ const bin0 = bins[j - region.start]
151
+ const bin1 = bins[j - region.start + 1]
152
+ const b0 = methBins[i]
153
+ const b1 = methBins[i + 1]
154
+ const p0 = methProbs[i]
155
+ const p1 = methProbs[i + 1]
171
156
 
172
157
  // color
173
- if (l1 === 'c' && l2 === 'g') {
174
- if (methBins[i] || methBins[i + 1]) {
175
- inc(bin, fstrand, 'cov', 'meth')
158
+ if (
159
+ (b0 && (p0 !== undefined ? p0 > 0.5 : true)) ||
160
+ (b1 && (p1 !== undefined ? p1 > 0.5 : true))
161
+ ) {
162
+ if (bin0) {
163
+ inc(bin0, fstrand, 'cov', 'meth')
164
+ bin0.ref--
165
+ bin0[fstrand]--
166
+ }
167
+ if (bin1) {
176
168
  inc(bin1, fstrand, 'cov', 'meth')
177
- bins[i].ref--
178
- bins[i][fstrand]--
179
- bins[i + 1].ref--
180
- bins[i + 1][fstrand]--
181
- } else {
182
- inc(bin, fstrand, 'cov', 'unmeth')
183
- inc(bin1, fstrand, 'cov', 'unmeth')
184
- bins[i].ref--
185
- bins[i][fstrand]--
186
- bins[i + 1].ref--
187
- bins[i + 1][fstrand]--
169
+ bin1.ref--
170
+ bin1[fstrand]--
171
+ }
172
+ } else {
173
+ if (bin0) {
174
+ if (
175
+ !dels?.some(d =>
176
+ doesIntersect2(
177
+ j,
178
+ j + 1,
179
+ d.start + fstart,
180
+ d.start + fstart + d.length,
181
+ ),
182
+ )
183
+ ) {
184
+ inc(bin0, fstrand, 'cov', 'unmeth')
185
+ bin0.ref--
186
+ bin0[fstrand]
187
+ }
188
+ }
189
+ if (bin1) {
190
+ if (
191
+ !dels?.some(d =>
192
+ doesIntersect2(
193
+ j + 1,
194
+ j + 2,
195
+ d.start + fstart,
196
+ d.start + fstart + d.length,
197
+ ),
198
+ )
199
+ ) {
200
+ inc(bin1, fstrand, 'cov', 'unmeth')
201
+ bin1.ref--
202
+ bin1[fstrand]--
203
+ }
188
204
  }
189
205
  }
190
206
  }
@@ -192,12 +208,10 @@ export default async function generateCoverageBins(
192
208
  }
193
209
 
194
210
  // normal SNP based coloring
195
- const mismatches = (feature.get('mismatches') as Mismatch[]) || []
196
211
  const colorSNPs =
197
212
  colorBy?.type !== 'modifications' && colorBy?.type !== 'methylation'
198
213
 
199
- for (let i = 0; i < mismatches.length; i++) {
200
- const mismatch = mismatches[i]
214
+ for (const mismatch of mismatches) {
201
215
  const mstart = fstart + mismatch.start
202
216
  const mlen = mismatchLen(mismatch)
203
217
  const mend = mstart + mlen
@@ -1,7 +1,6 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager'
2
2
  import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType'
3
3
  import configSchema from './configSchema'
4
- import { capabilities } from './SNPCoverageAdapter'
5
4
 
6
5
  export default function (pluginManager: PluginManager) {
7
6
  pluginManager.addAdapterType(() => {
@@ -14,7 +13,6 @@ export default function (pluginManager: PluginManager) {
14
13
  getAdapterClass: () =>
15
14
  import('./SNPCoverageAdapter').then(r => r.default),
16
15
  configSchema,
17
- adapterCapabilities: capabilities,
18
16
  })
19
17
  })
20
18
  }
@@ -0,0 +1,33 @@
1
+ export interface SkipMap {
2
+ [key: string]: {
3
+ score: number
4
+ feature: unknown
5
+ start: number
6
+ end: number
7
+ strand: number
8
+ xs: string
9
+ }
10
+ }
11
+
12
+ // bins contain:
13
+ // - cov feature if they contribute to coverage
14
+ // - noncov are insertions/clip features that don't contribute to coverage
15
+ // - delskips deletions or introns that don't contribute to coverage
16
+ export interface BinType {
17
+ total?: number
18
+ strands?: { [key: string]: number }
19
+ }
20
+
21
+ export interface Bin {
22
+ refbase?: string
23
+ total: number
24
+ all: number
25
+ ref: number
26
+ '-1': number
27
+ '0': number
28
+ '1': number
29
+ lowqual: BinType
30
+ cov: BinType
31
+ delskips: BinType
32
+ noncov: BinType
33
+ }
@@ -22,7 +22,7 @@ export interface RenderArgsDeserializedWithFeatures
22
22
  features: Map<string, Feature>
23
23
  ticks: { values: number[] }
24
24
  displayCrossHatches: boolean
25
- modificationTagMap?: Record<string, string>
25
+ modificationTagMap?: Record<string, string | undefined>
26
26
  }
27
27
 
28
28
  type Counts = {
@@ -100,10 +100,10 @@ export default class SNPCoverageRenderer extends WiggleBaseRenderer {
100
100
  C: bases.C.main,
101
101
  G: bases.G.main,
102
102
  T: bases.T.main,
103
- total: 'lightgrey',
104
103
  insertion: 'purple',
105
104
  softclip: 'blue',
106
105
  hardclip: 'red',
106
+ total: readConfObject(cfg, 'color'),
107
107
  meth: 'red',
108
108
  unmeth: 'blue',
109
109
  }
@@ -155,7 +155,7 @@ export default class SNPCoverageRenderer extends WiggleBaseRenderer {
155
155
  ctx.fillStyle =
156
156
  colorForBase[base] ||
157
157
  modificationTagMap[base.replace('mod_', '')] ||
158
- '#888'
158
+ 'black'
159
159
 
160
160
  const height = toHeight(score)
161
161
  const bottom = toY(score) + height
@@ -51,6 +51,12 @@ const SNPCoverageRenderer = ConfigurationSchema(
51
51
  'draw a triangular indicator where an event has been detected',
52
52
  defaultValue: true,
53
53
  },
54
+
55
+ color: {
56
+ type: 'color',
57
+ description: 'Background color for the SNPCoverage renderer',
58
+ defaultValue: '#d3d3d3',
59
+ },
54
60
  },
55
61
  { explicitlyTyped: true },
56
62
  )
@@ -0,0 +1,83 @@
1
+ import React from 'react'
2
+ import { LoadingEllipses } from '@jbrowse/core/ui'
3
+ import { BlockMsg } from '@jbrowse/plugin-linear-genome-view'
4
+ import { makeStyles } from 'tss-react/mui'
5
+ import { observer } from 'mobx-react'
6
+
7
+ // local
8
+ import { LinearReadCloudDisplayModel } from '../LinearReadCloudDisplay/model'
9
+ import { LinearReadArcsDisplayModel } from '../LinearReadArcsDisplay/model'
10
+ import { getContainingView } from '@jbrowse/core/util'
11
+
12
+ const useStyles = makeStyles()(theme => {
13
+ const bg = theme.palette.action.disabledBackground
14
+ return {
15
+ loading: {
16
+ backgroundColor: theme.palette.background.default,
17
+ backgroundImage: `repeating-linear-gradient(45deg, transparent, transparent 5px, ${bg} 5px, ${bg} 10px)`,
18
+ position: 'absolute',
19
+ bottom: 0,
20
+ height: 50,
21
+ width: 300,
22
+ right: 0,
23
+ pointerEvents: 'none',
24
+ textAlign: 'center',
25
+ },
26
+ }
27
+ })
28
+
29
+ export default observer(function ({
30
+ model,
31
+ children,
32
+ }: {
33
+ model: LinearReadArcsDisplayModel | LinearReadCloudDisplayModel
34
+ children?: React.ReactNode
35
+ }) {
36
+ const { error, regionTooLarge } = model
37
+ return error ? (
38
+ <BlockMsg
39
+ message={`${error}`}
40
+ severity="error"
41
+ buttonText="Reload"
42
+ action={model.reload}
43
+ />
44
+ ) : regionTooLarge ? (
45
+ model.regionCannotBeRendered()
46
+ ) : (
47
+ <DataDisplay model={model}>{children}</DataDisplay>
48
+ )
49
+ })
50
+
51
+ const DataDisplay = observer(function ({
52
+ model,
53
+ children,
54
+ }: {
55
+ model: LinearReadArcsDisplayModel | LinearReadCloudDisplayModel
56
+ children?: React.ReactNode
57
+ }) {
58
+ const { drawn, loading } = model
59
+ const view = getContainingView(model)
60
+ const left = (model.lastDrawnOffsetPx || 0) - view.offsetPx
61
+ return (
62
+ // this data-testid is located here because changing props on the canvas
63
+ // itself is very sensitive to triggering ref invalidation
64
+ <div data-testid={`drawn-${drawn}`}>
65
+ <div style={{ position: 'absolute', left }}>{children}</div>
66
+ {left !== 0 || loading ? <LoadingBar model={model} /> : null}
67
+ </div>
68
+ )
69
+ })
70
+
71
+ const LoadingBar = observer(function ({
72
+ model,
73
+ }: {
74
+ model: LinearReadArcsDisplayModel | LinearReadCloudDisplayModel
75
+ }) {
76
+ const { classes } = useStyles()
77
+ const { message } = model
78
+ return (
79
+ <div className={classes.loading}>
80
+ <LoadingEllipses message={message} />
81
+ </div>
82
+ )
83
+ })
@@ -69,27 +69,27 @@ function Bitmask(props: { flag?: number; setFlag: Function }) {
69
69
  </>
70
70
  )
71
71
  }
72
-
72
+ interface FilterBy {
73
+ flagExclude: number
74
+ flagInclude: number
75
+ readName?: string
76
+ tagFilter?: { tag: string; value: string }
77
+ }
73
78
  function FilterByTagDlg(props: {
74
79
  model: {
75
- filterBy?: {
76
- flagExclude: number
77
- flagInclude: number
78
- readName?: string
79
- tagFilter?: { tag: string; value: string }
80
- }
81
- setFilterBy: Function
80
+ filterBy: FilterBy
81
+ setFilterBy: (arg: FilterBy) => void
82
82
  }
83
83
  handleClose: () => void
84
84
  }) {
85
85
  const { model, handleClose } = props
86
86
  const { classes } = useStyles()
87
87
  const { filterBy } = model
88
- const [flagInclude, setFlagInclude] = useState(filterBy?.flagInclude)
89
- const [flagExclude, setFlagExclude] = useState(filterBy?.flagExclude)
90
- const [tag, setTag] = useState(filterBy?.tagFilter?.tag || '')
91
- const [tagValue, setTagValue] = useState(filterBy?.tagFilter?.value || '')
92
- const [readName, setReadName] = useState(filterBy?.readName || '')
88
+ const [flagInclude, setFlagInclude] = useState(filterBy.flagInclude)
89
+ const [flagExclude, setFlagExclude] = useState(filterBy.flagExclude)
90
+ const [tag, setTag] = useState(filterBy.tagFilter?.tag || '')
91
+ const [tagValue, setTagValue] = useState(filterBy.tagFilter?.value || '')
92
+ const [readName, setReadName] = useState(filterBy.readName || '')
93
93
  const validTag = tag.match(/^[A-Za-z][A-Za-z0-9]$/)
94
94
 
95
95
  const site = 'https://broadinstitute.github.io/picard/explain-flags.html'
@@ -127,21 +127,15 @@ function FilterByTagDlg(props: {
127
127
  placeholder="Enter tag name"
128
128
  inputProps={{
129
129
  maxLength: 2,
130
- 'data-testid': 'color-tag-name-input',
131
130
  }}
132
131
  error={tag.length === 2 && !validTag}
133
132
  helperText={tag.length === 2 && !validTag ? 'Not a valid tag' : ''}
134
- data-testid="color-tag-name"
135
133
  />
136
134
  <TextField
137
135
  className={classes.field}
138
136
  value={tagValue}
139
137
  onChange={event => setTagValue(event.target.value)}
140
138
  placeholder="Enter tag value"
141
- inputProps={{
142
- 'data-testid': 'color-tag-name-input',
143
- }}
144
- data-testid="color-tag-value"
145
139
  />
146
140
  </Paper>
147
141
  <Paper className={classes.paper} variant="outlined">
@@ -151,10 +145,6 @@ function FilterByTagDlg(props: {
151
145
  value={readName}
152
146
  onChange={event => setReadName(event.target.value)}
153
147
  placeholder="Enter read name"
154
- inputProps={{
155
- 'data-testid': 'color-tag-readname-input',
156
- }}
157
- data-testid="color-tag-readname"
158
148
  />
159
149
  </Paper>
160
150
  <DialogActions>
@@ -0,0 +1,66 @@
1
+ import { getContainingView } from '@jbrowse/core/util'
2
+ import { createAutorun } from '../util'
3
+ import { fetchChains } from './fetchChains'
4
+ import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'
5
+ import { IAnyStateTreeNode } from 'mobx-state-tree'
6
+
7
+ type LGV = LinearGenomeViewModel
8
+
9
+ export function doAfterAttach<T extends IAnyStateTreeNode>(
10
+ self: T,
11
+ cb: (
12
+ self: T,
13
+ ctx: CanvasRenderingContext2D,
14
+ width: number,
15
+ height: number,
16
+ ) => void,
17
+ ) {
18
+ createAutorun(
19
+ self,
20
+ async () => {
21
+ await fetchChains(self)
22
+ },
23
+ { delay: 1000 },
24
+ )
25
+
26
+ function draw(view: LGV) {
27
+ const canvas = self.ref
28
+ if (!canvas) {
29
+ return
30
+ }
31
+
32
+ const ctx = canvas.getContext('2d')
33
+ if (!ctx) {
34
+ return
35
+ }
36
+
37
+ if (!self.chainData) {
38
+ return
39
+ }
40
+
41
+ ctx.clearRect(0, 0, canvas.width, self.height * 2)
42
+ ctx.resetTransform()
43
+ ctx.scale(2, 2)
44
+ cb(self, ctx, canvas.width, self.height)
45
+ self.setLastDrawnOffsetPx(view.offsetPx)
46
+ self.setLastDrawnBpPerPx(view.bpPerPx)
47
+ }
48
+
49
+ // first autorun instantly draws if bpPerPx changes
50
+ createAutorun(self, async () => {
51
+ const view = getContainingView(self) as LGV
52
+ if (view.bpPerPx !== self.lastDrawnBpPerPx) {
53
+ draw(view)
54
+ }
55
+ })
56
+
57
+ // second autorun draws after delay 1000 e.g. if offsetPx changes
58
+ createAutorun(
59
+ self,
60
+ async () => {
61
+ const view = getContainingView(self) as LGV
62
+ draw(view)
63
+ },
64
+ { delay: 1000 },
65
+ )
66
+ }