@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
@@ -1,17 +1,15 @@
1
1
  import React, { lazy } from 'react'
2
- import { autorun } from 'mobx'
3
- import { addDisposer, cast, types, Instance } from 'mobx-state-tree'
2
+ import { cast, types, Instance } from 'mobx-state-tree'
4
3
  import {
5
4
  AnyConfigurationSchemaType,
6
5
  ConfigurationReference,
7
- ConfigurationSchema,
8
6
  getConf,
9
7
  } from '@jbrowse/core/configuration'
10
- import { getSession, getContainingView } from '@jbrowse/core/util'
11
-
8
+ import { getSession } from '@jbrowse/core/util'
9
+ import { BaseDisplay } from '@jbrowse/core/pluggableElementTypes'
12
10
  import {
13
- BaseLinearDisplay,
14
- LinearGenomeViewModel,
11
+ FeatureDensityMixin,
12
+ TrackHeightMixin,
15
13
  } from '@jbrowse/plugin-linear-genome-view'
16
14
 
17
15
  // icons
@@ -20,18 +18,11 @@ import FilterListIcon from '@mui/icons-material/ClearAll'
20
18
 
21
19
  // locals
22
20
  import { FilterModel } from '../shared'
23
- import drawFeats from './drawFeats'
24
- import { fetchChains, ChainData } from '../shared/fetchChains'
21
+ import { ChainData } from '../shared/fetchChains'
25
22
 
26
23
  // async
27
24
  const FilterByTagDlg = lazy(() => import('../shared/FilterByTag'))
28
25
 
29
- // stabilize clipid under test for snapshot
30
- function getId(id: string) {
31
- const isJest = typeof jest === 'undefined'
32
- return `arc-clip-${isJest ? id : 'jest'}`
33
- }
34
-
35
26
  interface Filter {
36
27
  flagInclude: number
37
28
  flagExclude: number
@@ -39,17 +30,18 @@ interface Filter {
39
30
  tagFilter?: { tag: string; value: string }
40
31
  }
41
32
 
42
- type LGV = LinearGenomeViewModel
43
-
44
33
  /**
45
34
  * #stateModel LinearReadArcsDisplay
46
- * extends `BaseLinearDisplay`
35
+ * extends `BaseDisplay`, it is not a block based track, hence not
36
+ * BaseLinearDisplay
47
37
  */
48
38
  function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
49
39
  return types
50
40
  .compose(
51
41
  'LinearReadArcsDisplay',
52
- BaseLinearDisplay,
42
+ BaseDisplay,
43
+ TrackHeightMixin(),
44
+ FeatureDensityMixin(),
53
45
  types.model({
54
46
  /**
55
47
  * #property
@@ -99,22 +91,41 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
99
91
  )
100
92
  .volatile(() => ({
101
93
  loading: false,
102
- drawn: false,
103
94
  chainData: undefined as ChainData | undefined,
95
+ lastDrawnOffsetPx: undefined as number | undefined,
96
+ lastDrawnBpPerPx: 0,
104
97
  ref: null as HTMLCanvasElement | null,
105
- lastDrawnOffsetPx: 0,
106
98
  }))
107
99
  .actions(self => ({
108
100
  /**
109
101
  * #action
110
- * internal, a reference to a HTMLCanvas because we use a autorun to draw the canvas
102
+ */
103
+ setLastDrawnOffsetPx(n: number) {
104
+ self.lastDrawnOffsetPx = n
105
+ },
106
+ /**
107
+ * #action
108
+ */
109
+ setLastDrawnBpPerPx(n: number) {
110
+ self.lastDrawnBpPerPx = n
111
+ },
112
+ /**
113
+ * #action
114
+ */
115
+ setLoading(f: boolean) {
116
+ self.loading = f
117
+ },
118
+
119
+ /**
120
+ * #action
111
121
  */
112
122
  reload() {
113
123
  self.error = undefined
114
124
  },
115
125
  /**
116
126
  * #action
117
- * internal, a reference to a HTMLCanvas because we use a autorun to draw the canvas
127
+ * internal, a reference to a HTMLCanvas because we use a autorun to draw
128
+ * the canvas
118
129
  */
119
130
  setRef(ref: HTMLCanvasElement | null) {
120
131
  self.ref = ref
@@ -151,90 +162,63 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
151
162
  /**
152
163
  * #action
153
164
  */
154
- setLoading(f: boolean) {
155
- self.loading = f
165
+ setFilterBy(filter: Filter) {
166
+ self.filterBy = cast(filter)
156
167
  },
157
168
 
158
169
  /**
159
170
  * #action
160
- * used during tests to detect when we can complete a snapshot test
171
+ * thin, bold, extrabold, etc
161
172
  */
162
- setDrawn(f: boolean) {
163
- self.drawn = f
173
+ setLineWidth(n: number) {
174
+ self.lineWidth = n
164
175
  },
165
176
 
166
177
  /**
167
178
  * #action
179
+ * jitter val, helpful to jitter the x direction so you see better
180
+ * evidence when e.g. 100 long reads map to same x position
168
181
  */
169
- setFilterBy(filter: Filter) {
170
- self.filterBy = cast(filter)
182
+ setJitter(n: number) {
183
+ self.jitter = n
171
184
  },
185
+ }))
172
186
 
187
+ .views(self => ({
173
188
  /**
174
- * #action
175
- * allows the drawing to slide around a little bit if it takes a long time to refresh
189
+ * #getter
176
190
  */
177
- setLastDrawnOffsetPx(n: number) {
178
- self.lastDrawnOffsetPx = n
191
+ get drawn() {
192
+ return self.lastDrawnOffsetPx !== undefined
179
193
  },
180
-
181
194
  /**
182
- * #action
183
- * thin, bold, extrabold, etc
195
+ * #getter
184
196
  */
185
- setLineWidth(n: number) {
186
- self.lineWidth = n
197
+ get lineWidthSetting() {
198
+ return self.lineWidth ?? getConf(self, 'lineWidth')
187
199
  },
188
200
 
189
201
  /**
190
- * #action
191
- * jitter val, helpful to jitter the x direction so you see better evidence when e.g. 100
192
- * long reads map to same x position
202
+ * #getter
193
203
  */
194
- setJitter(n: number) {
195
- self.jitter = n
204
+ get jitterVal(): number {
205
+ return self.jitter ?? getConf(self, 'jitter')
196
206
  },
197
207
  }))
198
-
199
208
  .views(self => {
200
209
  const {
201
210
  trackMenuItems: superTrackMenuItems,
202
211
  renderProps: superRenderProps,
203
212
  } = self
204
-
205
213
  return {
206
214
  /**
207
- * #getter
208
- */
209
- get lineWidthSetting() {
210
- return self.lineWidth ?? getConf(self, 'lineWidth')
211
- },
212
-
213
- /**
214
- * #getter
215
- */
216
- get jitterVal(): number {
217
- return self.jitter ?? getConf(self, 'jitter')
218
- },
219
- /**
220
- * #getter
215
+ * #method
216
+ * only used to tell system it's ready for export
221
217
  */
222
- get ready() {
223
- return !!self.chainData
224
- },
225
- // we don't use a server side renderer, but we need to provide this
226
- // to avoid confusing the system currently
227
- get rendererTypeName() {
228
- return 'PileupRenderer'
229
- },
230
- // we don't use a server side renderer, so this fills in minimal
231
- // info so as not to crash
232
218
  renderProps() {
233
219
  return {
234
220
  ...superRenderProps(),
235
- // never ready, we don't want to use server side render
236
- notReady: true,
237
- config: ConfigurationSchema('empty', {}).create(),
221
+ notReady: !self.chainData,
238
222
  }
239
223
  },
240
224
 
@@ -276,25 +260,24 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
276
260
  subMenu: [
277
261
  {
278
262
  type: 'checkbox',
279
- checked: this.jitterVal === 0,
263
+ checked: self.jitterVal === 0,
280
264
  label: 'None',
281
265
  onClick: () => self.setJitter(0),
282
266
  },
283
267
  {
284
268
  type: 'checkbox',
285
- checked: this.jitterVal === 2,
269
+ checked: self.jitterVal === 2,
286
270
  label: 'Small',
287
271
  onClick: () => self.setJitter(2),
288
272
  },
289
273
  {
290
274
  type: 'checkbox',
291
- checked: this.jitterVal === 10,
275
+ checked: self.jitterVal === 10,
292
276
  label: 'Large',
293
277
  onClick: () => self.setJitter(10),
294
278
  },
295
279
  ],
296
280
  },
297
-
298
281
  {
299
282
  label: 'Draw inter-region vertical lines',
300
283
  type: 'checkbox',
@@ -338,88 +321,27 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
338
321
  /**
339
322
  * #method
340
323
  */
341
- async renderSvg(opts: { rasterizeLayers?: boolean }) {
342
- const view = getContainingView(self) as LGV
343
- const width = view.dynamicBlocks.totalWidthPx
344
- const height = self.height
345
- let str
346
- if (opts.rasterizeLayers) {
347
- const canvas = document.createElement('canvas')
348
- canvas.width = width * 2
349
- canvas.height = height * 2
350
- const ctx = canvas.getContext('2d')
351
- if (!ctx) {
352
- return
353
- }
354
- ctx.scale(2, 2)
355
- await drawFeats(self, ctx)
356
- str = (
357
- <image
358
- width={width}
359
- height={height}
360
- xlinkHref={canvas.toDataURL('image/png')}
361
- />
362
- )
363
- } else {
364
- // @ts-ignore
365
- const C2S = await import('canvas2svg')
366
- const ctx = new C2S.default(width, height)
367
- await drawFeats(self, ctx)
368
- const clipid = getId(self.id)
369
- str = (
370
- <>
371
- <defs>
372
- <clipPath id={clipid}>
373
- <rect x={0} y={0} width={width} height={height} />
374
- </clipPath>
375
- </defs>
376
- <g
377
- /* eslint-disable-next-line react/no-danger */
378
- dangerouslySetInnerHTML={{
379
- __html: ctx.getSvg().innerHTML,
380
- }}
381
- clipPath={`url(#${clipid})`}
382
- />
383
- </>
384
- )
385
- }
386
-
387
- return <>{str}</>
324
+ async renderSvg(opts: {
325
+ rasterizeLayers?: boolean
326
+ }): Promise<React.ReactNode> {
327
+ const { renderSvg } = await import('../shared/renderSvg')
328
+ const { drawFeats } = await import('./drawFeats')
329
+ return renderSvg(self as LinearReadArcsDisplayModel, opts, drawFeats)
388
330
  },
389
331
  }))
390
332
  .actions(self => ({
391
333
  afterAttach() {
392
- addDisposer(
393
- self,
394
- autorun(() => fetchChains(self), { delay: 1000 }),
395
- )
396
-
397
- addDisposer(
398
- self,
399
- autorun(
400
- async () => {
401
- try {
402
- const canvas = self.ref
403
- if (!canvas) {
404
- return
405
- }
406
- const ctx = canvas.getContext('2d')
407
- if (!ctx) {
408
- return
409
- }
410
- ctx.clearRect(0, 0, canvas.width, self.height * 2)
411
- ctx.resetTransform()
412
- ctx.scale(2, 2)
413
- await drawFeats(self, ctx)
414
- self.setDrawn(true)
415
- } catch (e) {
416
- console.error(e)
417
- self.setError(e)
418
- }
419
- },
420
- { delay: 1000 },
421
- ),
422
- )
334
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
335
+ ;(async () => {
336
+ try {
337
+ const { doAfterAttach } = await import('../shared/afterAttach')
338
+ const { drawFeats } = await import('./drawFeats')
339
+ doAfterAttach(self, drawFeats)
340
+ } catch (e) {
341
+ console.error(e)
342
+ self.setError(e)
343
+ }
344
+ })()
423
345
  },
424
346
  }))
425
347
  }
@@ -0,0 +1,10 @@
1
+ import { ChainData } from '../shared/fetchChains'
2
+
3
+ export function hasPairedReads(features: ChainData) {
4
+ for (const f of features.chains.values()) {
5
+ if (f[0].flags & 1) {
6
+ return true
7
+ }
8
+ }
9
+ return false
10
+ }
@@ -1,54 +1,36 @@
1
- import React from 'react'
2
- import { isAlive } from 'mobx-state-tree'
1
+ import React, { useCallback } from 'react'
3
2
  import { observer } from 'mobx-react'
4
- import { makeStyles } from 'tss-react/mui'
5
3
  import { getContainingView } from '@jbrowse/core/util'
6
- import { LoadingEllipses } from '@jbrowse/core/ui'
7
- import {
8
- BlockMsg,
9
- LinearGenomeViewModel,
10
- } from '@jbrowse/plugin-linear-genome-view'
4
+ import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'
11
5
 
12
6
  // local
13
7
  import { LinearReadCloudDisplayModel } from '../model'
8
+ import BaseDisplayComponent from '../../shared/BaseDisplayComponent'
14
9
 
15
10
  type LGV = LinearGenomeViewModel
16
11
 
17
- const useStyles = makeStyles()(theme => ({
18
- loading: {
19
- paddingLeft: '0.6em',
20
- backgroundColor: theme.palette.action.disabledBackground,
21
- backgroundImage:
22
- 'repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255,255,255,.5) 5px, rgba(255,255,255,.5) 10px)',
23
- height: '100%',
24
- width: '100%',
25
- pointerEvents: 'none',
26
- textAlign: 'center',
27
- },
28
- }))
29
-
30
12
  const Cloud = observer(function ({
31
13
  model,
32
14
  }: {
33
15
  model: LinearReadCloudDisplayModel
34
16
  }) {
35
17
  const view = getContainingView(model) as LGV
18
+ const width = Math.round(view.dynamicBlocks.totalWidthPx)
19
+ const height = model.height
20
+ const cb = useCallback(
21
+ (ref: HTMLCanvasElement) => model.setRef(ref),
22
+ // eslint-disable-next-line react-hooks/exhaustive-deps
23
+ [model, width, height],
24
+ )
25
+
26
+ // note: the position absolute below avoids scrollbar from appearing on track
36
27
  return (
37
28
  <canvas
38
- data-testid={`ReadCloud-display-${model.drawn}`}
39
- ref={ref => {
40
- if (isAlive(model)) {
41
- model.setRef(ref)
42
- }
43
- }}
44
- style={{
45
- position: 'absolute',
46
- left: -view.offsetPx + model.lastDrawnOffsetPx,
47
- width: view.dynamicBlocks.totalWidthPx,
48
- height: model.height,
49
- }}
50
- width={view.dynamicBlocks.totalWidthPx * 2}
51
- height={model.height * 2}
29
+ data-testid="cloud-canvas"
30
+ ref={cb}
31
+ style={{ width, height, position: 'absolute' }}
32
+ width={width * 2}
33
+ height={height * 2}
52
34
  />
53
35
  )
54
36
  })
@@ -58,29 +40,9 @@ export default observer(function ({
58
40
  }: {
59
41
  model: LinearReadCloudDisplayModel
60
42
  }) {
61
- const view = getContainingView(model)
62
- const { classes } = useStyles()
63
- const err = model.error
64
- return err ? (
65
- <BlockMsg
66
- message={`${err}`}
67
- severity="error"
68
- buttonText={'Reload'}
69
- action={model.reload}
70
- />
71
- ) : model.loading ? (
72
- <div
73
- className={classes.loading}
74
- style={{
75
- width: view.dynamicBlocks.totalWidthPx,
76
- height: 20,
77
- position: 'absolute',
78
- left: Math.max(0, -view.offsetPx),
79
- }}
80
- >
81
- <LoadingEllipses message={model.message} />
82
- </div>
83
- ) : (
84
- <Cloud model={model} />
43
+ return (
44
+ <BaseDisplayComponent model={model}>
45
+ <Cloud model={model} />
46
+ </BaseDisplayComponent>
85
47
  )
86
48
  })
@@ -1,59 +1,16 @@
1
- import { getConf } from '@jbrowse/core/configuration'
2
1
  import { getContainingView, getSession } from '@jbrowse/core/util'
3
-
4
2
  import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'
3
+
5
4
  // locals
6
- import {
7
- getOrientationColor,
8
- getInsertSizeColor,
9
- getInsertSizeAndOrientationColor,
10
- } from '../shared/color'
11
- import { ChainData, ReducedFeature } from '../shared/fetchChains'
5
+ import { LinearReadCloudDisplayModel } from './model'
6
+ import { hasPairedReads } from '../shared/util'
7
+ import { drawPairChains } from './drawPairChains'
8
+ import { drawLongReadChains } from './drawLongReadChains'
12
9
 
13
10
  type LGV = LinearGenomeViewModel
14
11
 
15
- interface ChainCoord {
16
- distance: number
17
- r1s: number
18
- r1e: number
19
- r2s: number
20
- r2e: number
21
- v0: ReducedFeature
22
- v1: ReducedFeature
23
- }
24
-
25
- // avoid drawing negative width features for SVG exports
26
- function fillRectCtx(
27
- x: number,
28
- y: number,
29
- width: number,
30
- height: number,
31
- ctx: CanvasRenderingContext2D,
32
- color?: string,
33
- ) {
34
- if (width < 0) {
35
- x += width
36
- width = -width
37
- }
38
- if (height < 0) {
39
- y += height
40
- height = -height
41
- }
42
-
43
- if (color) {
44
- ctx.fillStyle = color
45
- }
46
- ctx.fillRect(x, y, width, height)
47
- }
48
-
49
- export default async function drawFeats(
50
- self: {
51
- setLastDrawnOffsetPx: (n: number) => void
52
- setError: (e: unknown) => void
53
- colorBy?: { type: string }
54
- height: number
55
- chainData?: ChainData
56
- },
12
+ export function drawFeats(
13
+ self: LinearReadCloudDisplayModel,
57
14
  ctx: CanvasRenderingContext2D,
58
15
  ) {
59
16
  const { chainData } = self
@@ -61,8 +18,6 @@ export default async function drawFeats(
61
18
  return
62
19
  }
63
20
  const { assemblyManager } = getSession(self)
64
- const featureHeight = getConf(self, 'featureHeight')
65
- const displayHeight = self.height
66
21
  const view = getContainingView(self) as LGV
67
22
  const assemblyName = view.assemblyNames[0]
68
23
  const asm = assemblyManager.get(assemblyName)
@@ -70,120 +25,11 @@ export default async function drawFeats(
70
25
  return
71
26
  }
72
27
 
73
- self.setLastDrawnOffsetPx(view.offsetPx)
74
-
75
- const { chains, stats } = chainData
76
- const coords: ChainCoord[] = []
77
- for (let i = 0; i < chains.length; i++) {
78
- const chain = chains[i]
79
- // if we're looking at a paired read (flag 1) then assume it is just two
80
- // reads (some small cases may defy this assumption such as secondary
81
- // alignments but this may be uncommon)
82
- if (chain[0].flags & 1 && chain.length > 1) {
83
- const v0 = chain[0]
84
- const v1 = chain[1]
85
- const ra1 = asm.getCanonicalRefName(v0.refName)
86
- const ra2 = asm.getCanonicalRefName(v1.refName)
87
- const r1s = view.bpToPx({ refName: ra1, coord: v0.start })
88
- const r1e = view.bpToPx({ refName: ra1, coord: v0.end })
89
- const r2s = view.bpToPx({ refName: ra2, coord: v1.start })
90
- const r2e = view.bpToPx({ refName: ra2, coord: v1.end })
91
-
92
- let distance = 0
93
-
94
- if (
95
- r1s !== undefined &&
96
- r1e !== undefined &&
97
- r2s !== undefined &&
98
- r2e !== undefined
99
- ) {
100
- if (v0.refName === v1.refName) {
101
- const s = Math.min(v0.start, v1.start)
102
- const e = Math.max(v0.end, v1.end)
103
- distance = Math.abs(e - s)
104
- }
105
- coords.push({
106
- r1s: r1s.offsetPx,
107
- r1e: r1e.offsetPx,
108
- r2s: r2s.offsetPx,
109
- r2e: r2e.offsetPx,
110
- v0,
111
- v1,
112
- distance,
113
- })
114
- }
115
- } else {
116
- // if we're not looking at pairs, then it could be a multiply-split-long
117
- // read, so traverse chain
118
- for (let i = 1; i < chain.length; i++) {
119
- const v0 = chain[i - 1]
120
- const v1 = chain[i]
121
- const ra1 = asm.getCanonicalRefName(v0.refName)
122
- const ra2 = asm.getCanonicalRefName(v1.refName)
123
- const r1s = view.bpToPx({ refName: ra1, coord: v0.start })
124
- const r1e = view.bpToPx({ refName: ra1, coord: v0.end })
125
- const r2s = view.bpToPx({ refName: ra2, coord: v1.start })
126
- const r2e = view.bpToPx({ refName: ra2, coord: v1.end })
127
-
128
- let distance = 0
129
-
130
- if (
131
- r1s !== undefined &&
132
- r1e !== undefined &&
133
- r2s !== undefined &&
134
- r2e !== undefined
135
- ) {
136
- if (v0.refName === v1.refName) {
137
- const s = Math.min(v0.start, v1.start)
138
- const e = Math.max(v0.end, v1.end)
139
- distance = Math.abs(e - s)
140
- }
141
- coords.push({
142
- r1s: r1s.offsetPx,
143
- r1e: r1e.offsetPx,
144
- r2s: r2s.offsetPx,
145
- r2e: r2e.offsetPx,
146
- v0,
147
- v1,
148
- distance,
149
- })
150
- }
151
- }
152
- }
153
- }
154
-
155
- let max = 0
156
- for (let i = 0; i < coords.length; i++) {
157
- const { distance } = coords[i]
158
- max = Math.max(max, distance)
159
- }
160
- const halfHeight = featureHeight / 2 - 0.5
161
- const scaler = (displayHeight - 20) / Math.log(max)
162
-
163
- for (let i = 0; i < coords.length; i++) {
164
- const { r1s, r1e, r2s, r2e, v0, v1, distance } = coords[i]
165
- const type = self.colorBy?.type || 'insertSizeAndOrientation'
166
-
167
- const top = Math.log(distance) * scaler
168
- ctx.fillStyle = 'black'
169
- const w = r2s - r1e
170
- fillRectCtx(r1e - view.offsetPx, top + halfHeight, w, 1, ctx)
171
-
172
- if (type === 'insertSizeAndOrientation') {
173
- ctx.fillStyle = getInsertSizeAndOrientationColor(v0, v1, stats)
174
- } else if (type === 'orientation') {
175
- ctx.fillStyle = getOrientationColor(v0)
176
- } else if (type === 'insertSize') {
177
- ctx.fillStyle = getInsertSizeColor(v0, v1, stats) || 'grey'
178
- } else if (type === 'gradient') {
179
- const s = Math.min(v0.start, v1.start)
180
- const e = Math.max(v0.end, v1.end)
181
- ctx.fillStyle = `hsl(${Math.log10(Math.abs(e - s)) * 10},50%,50%)`
182
- }
28
+ const hasPaired = hasPairedReads(chainData)
183
29
 
184
- const w1 = Math.max(r1e - r1s, 2)
185
- const w2 = Math.max(r2e - r2s, 2)
186
- fillRectCtx(r1s - view.offsetPx, top, w1, featureHeight, ctx)
187
- fillRectCtx(r2s - view.offsetPx, top, w2, featureHeight, ctx)
30
+ if (hasPaired) {
31
+ drawPairChains({ self, view, asm, ctx, chainData })
32
+ } else {
33
+ drawLongReadChains({ self, view, asm, ctx, chainData })
188
34
  }
189
35
  }