@jbrowse/plugin-alignments 2.5.0 → 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 (402) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +2 -1
  2. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.d.ts +2 -1
  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 -1
  6. package/dist/BamAdapter/BamAdapter.d.ts +1 -1
  7. package/dist/BamAdapter/BamAdapter.js +25 -30
  8. package/dist/BamAdapter/BamAdapter.js.map +1 -1
  9. package/dist/BamAdapter/BamSlightlyLazyFeature.d.ts +1 -1
  10. package/dist/CramAdapter/CramAdapter.js +48 -46
  11. package/dist/CramAdapter/CramAdapter.js.map +1 -1
  12. package/dist/CramAdapter/CramSlightlyLazyFeature.js +3 -5
  13. package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  14. package/dist/CramAdapter/CramTestAdapters.js +1 -1
  15. package/dist/CramAdapter/CramTestAdapters.js.map +1 -1
  16. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +2 -1
  17. package/dist/LinearAlignmentsDisplay/models/model.d.ts +16 -6
  18. package/dist/LinearAlignmentsDisplay/models/model.js +2 -1
  19. package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -1
  20. package/dist/LinearPileupDisplay/components/ColorByModifications.d.ts +2 -1
  21. package/dist/LinearPileupDisplay/components/ColorByModifications.js +3 -23
  22. package/dist/LinearPileupDisplay/components/ColorByModifications.js.map +1 -1
  23. package/dist/LinearPileupDisplay/components/ColorByTag.d.ts +2 -1
  24. package/dist/LinearPileupDisplay/components/ColorByTag.js +2 -6
  25. package/dist/LinearPileupDisplay/components/ColorByTag.js.map +1 -1
  26. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +3 -2
  27. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +6 -6
  28. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -1
  29. package/dist/LinearPileupDisplay/components/ModificationsTable.d.ts +4 -0
  30. package/dist/LinearPileupDisplay/components/ModificationsTable.js +29 -0
  31. package/dist/LinearPileupDisplay/components/ModificationsTable.js.map +1 -0
  32. package/dist/LinearPileupDisplay/components/SetFeatureHeight.d.ts +2 -1
  33. package/dist/LinearPileupDisplay/components/SetMaxHeight.d.ts +2 -1
  34. package/dist/LinearPileupDisplay/components/SortByTag.d.ts +2 -1
  35. package/dist/LinearPileupDisplay/model.d.ts +101 -78
  36. package/dist/LinearPileupDisplay/model.js +161 -115
  37. package/dist/LinearPileupDisplay/model.js.map +1 -1
  38. package/dist/LinearReadArcsDisplay/components/ReactComponent.d.ts +2 -1
  39. package/dist/LinearReadArcsDisplay/components/ReactComponent.js +36 -39
  40. package/dist/LinearReadArcsDisplay/components/ReactComponent.js.map +1 -1
  41. package/dist/LinearReadArcsDisplay/configSchema.d.ts +0 -3
  42. package/dist/LinearReadArcsDisplay/drawFeats.d.ts +2 -15
  43. package/dist/LinearReadArcsDisplay/drawFeats.js +56 -64
  44. package/dist/LinearReadArcsDisplay/drawFeats.js.map +1 -1
  45. package/dist/LinearReadArcsDisplay/model.d.ts +52 -244
  46. package/dist/LinearReadArcsDisplay/model.js +65 -115
  47. package/dist/LinearReadArcsDisplay/model.js.map +1 -1
  48. package/dist/LinearReadArcsDisplay/util.d.ts +2 -0
  49. package/dist/LinearReadArcsDisplay/util.js +13 -0
  50. package/dist/LinearReadArcsDisplay/util.js.map +1 -0
  51. package/dist/LinearReadCloudDisplay/components/ReactComponent.d.ts +2 -1
  52. package/dist/LinearReadCloudDisplay/components/ReactComponent.js +34 -36
  53. package/dist/LinearReadCloudDisplay/components/ReactComponent.js.map +1 -1
  54. package/dist/LinearReadCloudDisplay/configSchema.d.ts +3 -1
  55. package/dist/LinearReadCloudDisplay/drawFeats.d.ts +2 -12
  56. package/dist/LinearReadCloudDisplay/drawFeats.js +11 -127
  57. package/dist/LinearReadCloudDisplay/drawFeats.js.map +1 -1
  58. package/dist/LinearReadCloudDisplay/drawLongReadChains.d.ts +11 -0
  59. package/dist/LinearReadCloudDisplay/drawLongReadChains.js +69 -0
  60. package/dist/LinearReadCloudDisplay/drawLongReadChains.js.map +1 -0
  61. package/dist/LinearReadCloudDisplay/drawPairChains.d.ts +17 -0
  62. package/dist/LinearReadCloudDisplay/drawPairChains.js +100 -0
  63. package/dist/LinearReadCloudDisplay/drawPairChains.js.map +1 -0
  64. package/dist/LinearReadCloudDisplay/model.d.ts +60 -238
  65. package/dist/LinearReadCloudDisplay/model.js +55 -92
  66. package/dist/LinearReadCloudDisplay/model.js.map +1 -1
  67. package/dist/LinearReadCloudDisplay/util.d.ts +2 -0
  68. package/dist/LinearReadCloudDisplay/util.js +35 -0
  69. package/dist/LinearReadCloudDisplay/util.js.map +1 -0
  70. package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +2 -1
  71. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +134 -74
  72. package/dist/LinearSNPCoverageDisplay/models/model.js +46 -33
  73. package/dist/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  74. package/dist/MismatchParser/index.d.ts +7 -2
  75. package/dist/MismatchParser/index.js +44 -5
  76. package/dist/MismatchParser/index.js.map +1 -1
  77. package/dist/PileupRPC/methods/GetReducedFeatures.d.ts +15 -2
  78. package/dist/PileupRPC/methods/GetReducedFeatures.js +1 -8
  79. package/dist/PileupRPC/methods/GetReducedFeatures.js.map +1 -1
  80. package/dist/PileupRenderer/PileupRenderer.d.ts +4 -117
  81. package/dist/PileupRenderer/PileupRenderer.js +18 -761
  82. package/dist/PileupRenderer/PileupRenderer.js.map +1 -1
  83. package/dist/PileupRenderer/colorBy.d.ts +7 -0
  84. package/dist/PileupRenderer/colorBy.js +69 -0
  85. package/dist/PileupRenderer/colorBy.js.map +1 -0
  86. package/dist/PileupRenderer/components/PileupRendering.d.ts +7 -2
  87. package/dist/PileupRenderer/components/PileupRendering.js +17 -18
  88. package/dist/PileupRenderer/components/PileupRendering.js.map +1 -1
  89. package/dist/PileupRenderer/getAlignmentShapeColor.d.ts +10 -0
  90. package/dist/PileupRenderer/getAlignmentShapeColor.js +60 -0
  91. package/dist/PileupRenderer/getAlignmentShapeColor.js.map +1 -0
  92. package/dist/PileupRenderer/index.js +1 -1
  93. package/dist/PileupRenderer/index.js.map +1 -1
  94. package/dist/PileupRenderer/layoutFeature.d.ts +18 -0
  95. package/dist/PileupRenderer/layoutFeature.js +41 -0
  96. package/dist/PileupRenderer/layoutFeature.js.map +1 -0
  97. package/dist/PileupRenderer/layoutFeatures.d.ts +2 -0
  98. package/dist/PileupRenderer/layoutFeatures.js +35 -0
  99. package/dist/PileupRenderer/layoutFeatures.js.map +1 -0
  100. package/dist/PileupRenderer/makeImageData.d.ts +17 -0
  101. package/dist/PileupRenderer/makeImageData.js +64 -0
  102. package/dist/PileupRenderer/makeImageData.js.map +1 -0
  103. package/dist/PileupRenderer/renderAlignment.d.ts +13 -0
  104. package/dist/PileupRenderer/renderAlignment.js +72 -0
  105. package/dist/PileupRenderer/renderAlignment.js.map +1 -0
  106. package/dist/PileupRenderer/renderAlignmentShape.d.ts +7 -0
  107. package/dist/PileupRenderer/renderAlignmentShape.js +41 -0
  108. package/dist/PileupRenderer/renderAlignmentShape.js.map +1 -0
  109. package/dist/PileupRenderer/renderMethylation.d.ts +11 -0
  110. package/dist/PileupRenderer/renderMethylation.js +63 -0
  111. package/dist/PileupRenderer/renderMethylation.js.map +1 -0
  112. package/dist/PileupRenderer/renderMismatches.d.ts +21 -0
  113. package/dist/PileupRenderer/renderMismatches.js +135 -0
  114. package/dist/PileupRenderer/renderMismatches.js.map +1 -0
  115. package/dist/PileupRenderer/renderModifications.d.ts +11 -0
  116. package/dist/PileupRenderer/renderModifications.js +54 -0
  117. package/dist/PileupRenderer/renderModifications.js.map +1 -0
  118. package/dist/PileupRenderer/renderPerBaseLettering.d.ts +13 -0
  119. package/dist/PileupRenderer/renderPerBaseLettering.js +47 -0
  120. package/dist/PileupRenderer/renderPerBaseLettering.js.map +1 -0
  121. package/dist/PileupRenderer/renderPerBaseQuality.d.ts +9 -0
  122. package/dist/PileupRenderer/renderPerBaseQuality.js +39 -0
  123. package/dist/PileupRenderer/renderPerBaseQuality.js.map +1 -0
  124. package/dist/PileupRenderer/renderSoftClipping.d.ts +13 -0
  125. package/dist/PileupRenderer/renderSoftClipping.js +48 -0
  126. package/dist/PileupRenderer/renderSoftClipping.js.map +1 -0
  127. package/dist/PileupRenderer/sortUtil.js +1 -2
  128. package/dist/PileupRenderer/sortUtil.js.map +1 -1
  129. package/dist/PileupRenderer/util.d.ts +24 -0
  130. package/dist/PileupRenderer/util.js +51 -0
  131. package/dist/PileupRenderer/util.js.map +1 -0
  132. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +0 -2
  133. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +0 -3
  134. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -1
  135. package/dist/SNPCoverageAdapter/generateCoverageBins.d.ts +3 -43
  136. package/dist/SNPCoverageAdapter/generateCoverageBins.js +72 -49
  137. package/dist/SNPCoverageAdapter/generateCoverageBins.js.map +1 -1
  138. package/dist/SNPCoverageAdapter/index.js +0 -2
  139. package/dist/SNPCoverageAdapter/index.js.map +1 -1
  140. package/dist/SNPCoverageAdapter/util.d.ts +29 -0
  141. package/dist/SNPCoverageAdapter/util.js +3 -0
  142. package/dist/SNPCoverageAdapter/util.js.map +1 -0
  143. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +1 -1
  144. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +2 -2
  145. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
  146. package/dist/SNPCoverageRenderer/configSchema.d.ts +5 -0
  147. package/dist/SNPCoverageRenderer/configSchema.js +5 -0
  148. package/dist/SNPCoverageRenderer/configSchema.js.map +1 -1
  149. package/dist/shared/BaseDisplayComponent.d.ts +8 -0
  150. package/dist/shared/BaseDisplayComponent.js +49 -0
  151. package/dist/shared/BaseDisplayComponent.js.map +1 -0
  152. package/dist/shared/FilterByTag.d.ts +13 -11
  153. package/dist/shared/FilterByTag.js +8 -13
  154. package/dist/shared/FilterByTag.js.map +1 -1
  155. package/dist/shared/afterAttach.d.ts +2 -0
  156. package/dist/shared/afterAttach.js +44 -0
  157. package/dist/shared/afterAttach.js.map +1 -0
  158. package/dist/shared/color.d.ts +44 -6
  159. package/dist/shared/color.js +57 -23
  160. package/dist/shared/color.js.map +1 -1
  161. package/dist/shared/fetchChains.d.ts +3 -2
  162. package/dist/shared/fetchChains.js +14 -20
  163. package/dist/shared/fetchChains.js.map +1 -1
  164. package/dist/shared/renderSvg.d.ts +7 -0
  165. package/dist/shared/renderSvg.js +69 -0
  166. package/dist/shared/renderSvg.js.map +1 -0
  167. package/dist/shared/util.d.ts +2 -0
  168. package/dist/shared/util.js +13 -0
  169. package/dist/shared/util.js.map +1 -0
  170. package/dist/util.d.ts +16 -2
  171. package/dist/util.js +45 -4
  172. package/dist/util.js.map +1 -1
  173. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +2 -1
  174. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.d.ts +2 -1
  175. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js +3 -2
  176. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js.map +1 -1
  177. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.d.ts +2 -1
  178. package/esm/BamAdapter/BamAdapter.d.ts +1 -1
  179. package/esm/BamAdapter/BamAdapter.js +25 -30
  180. package/esm/BamAdapter/BamAdapter.js.map +1 -1
  181. package/esm/BamAdapter/BamSlightlyLazyFeature.d.ts +1 -1
  182. package/esm/CramAdapter/CramAdapter.js +49 -47
  183. package/esm/CramAdapter/CramAdapter.js.map +1 -1
  184. package/esm/CramAdapter/CramSlightlyLazyFeature.js +3 -5
  185. package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  186. package/esm/CramAdapter/CramTestAdapters.js +1 -1
  187. package/esm/CramAdapter/CramTestAdapters.js.map +1 -1
  188. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +2 -1
  189. package/esm/LinearAlignmentsDisplay/models/model.d.ts +16 -6
  190. package/esm/LinearAlignmentsDisplay/models/model.js +2 -1
  191. package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -1
  192. package/esm/LinearPileupDisplay/components/ColorByModifications.d.ts +2 -1
  193. package/esm/LinearPileupDisplay/components/ColorByModifications.js +2 -22
  194. package/esm/LinearPileupDisplay/components/ColorByModifications.js.map +1 -1
  195. package/esm/LinearPileupDisplay/components/ColorByTag.d.ts +2 -1
  196. package/esm/LinearPileupDisplay/components/ColorByTag.js +2 -6
  197. package/esm/LinearPileupDisplay/components/ColorByTag.js.map +1 -1
  198. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +3 -2
  199. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +6 -6
  200. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -1
  201. package/esm/LinearPileupDisplay/components/ModificationsTable.d.ts +4 -0
  202. package/esm/LinearPileupDisplay/components/ModificationsTable.js +23 -0
  203. package/esm/LinearPileupDisplay/components/ModificationsTable.js.map +1 -0
  204. package/esm/LinearPileupDisplay/components/SetFeatureHeight.d.ts +2 -1
  205. package/esm/LinearPileupDisplay/components/SetMaxHeight.d.ts +2 -1
  206. package/esm/LinearPileupDisplay/components/SortByTag.d.ts +2 -1
  207. package/esm/LinearPileupDisplay/model.d.ts +101 -78
  208. package/esm/LinearPileupDisplay/model.js +162 -116
  209. package/esm/LinearPileupDisplay/model.js.map +1 -1
  210. package/esm/LinearReadArcsDisplay/components/ReactComponent.d.ts +2 -1
  211. package/esm/LinearReadArcsDisplay/components/ReactComponent.js +13 -39
  212. package/esm/LinearReadArcsDisplay/components/ReactComponent.js.map +1 -1
  213. package/esm/LinearReadArcsDisplay/configSchema.d.ts +0 -3
  214. package/esm/LinearReadArcsDisplay/drawFeats.d.ts +2 -15
  215. package/esm/LinearReadArcsDisplay/drawFeats.js +54 -61
  216. package/esm/LinearReadArcsDisplay/drawFeats.js.map +1 -1
  217. package/esm/LinearReadArcsDisplay/model.d.ts +52 -244
  218. package/esm/LinearReadArcsDisplay/model.js +69 -119
  219. package/esm/LinearReadArcsDisplay/model.js.map +1 -1
  220. package/esm/LinearReadArcsDisplay/util.d.ts +2 -0
  221. package/esm/LinearReadArcsDisplay/util.js +9 -0
  222. package/esm/LinearReadArcsDisplay/util.js.map +1 -0
  223. package/esm/LinearReadCloudDisplay/components/ReactComponent.d.ts +2 -1
  224. package/esm/LinearReadCloudDisplay/components/ReactComponent.js +11 -36
  225. package/esm/LinearReadCloudDisplay/components/ReactComponent.js.map +1 -1
  226. package/esm/LinearReadCloudDisplay/configSchema.d.ts +3 -1
  227. package/esm/LinearReadCloudDisplay/drawFeats.d.ts +2 -12
  228. package/esm/LinearReadCloudDisplay/drawFeats.js +9 -126
  229. package/esm/LinearReadCloudDisplay/drawFeats.js.map +1 -1
  230. package/esm/LinearReadCloudDisplay/drawLongReadChains.d.ts +11 -0
  231. package/esm/LinearReadCloudDisplay/drawLongReadChains.js +65 -0
  232. package/esm/LinearReadCloudDisplay/drawLongReadChains.js.map +1 -0
  233. package/esm/LinearReadCloudDisplay/drawPairChains.d.ts +17 -0
  234. package/esm/LinearReadCloudDisplay/drawPairChains.js +95 -0
  235. package/esm/LinearReadCloudDisplay/drawPairChains.js.map +1 -0
  236. package/esm/LinearReadCloudDisplay/model.d.ts +60 -238
  237. package/esm/LinearReadCloudDisplay/model.js +59 -96
  238. package/esm/LinearReadCloudDisplay/model.js.map +1 -1
  239. package/esm/LinearReadCloudDisplay/util.d.ts +2 -0
  240. package/esm/LinearReadCloudDisplay/util.js +30 -0
  241. package/esm/LinearReadCloudDisplay/util.js.map +1 -0
  242. package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +2 -1
  243. package/esm/LinearSNPCoverageDisplay/models/model.d.ts +134 -74
  244. package/esm/LinearSNPCoverageDisplay/models/model.js +48 -35
  245. package/esm/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  246. package/esm/MismatchParser/index.d.ts +7 -2
  247. package/esm/MismatchParser/index.js +41 -4
  248. package/esm/MismatchParser/index.js.map +1 -1
  249. package/esm/PileupRPC/methods/GetReducedFeatures.d.ts +15 -2
  250. package/esm/PileupRPC/methods/GetReducedFeatures.js +2 -9
  251. package/esm/PileupRPC/methods/GetReducedFeatures.js.map +1 -1
  252. package/esm/PileupRenderer/PileupRenderer.d.ts +4 -117
  253. package/esm/PileupRenderer/PileupRenderer.js +20 -763
  254. package/esm/PileupRenderer/PileupRenderer.js.map +1 -1
  255. package/esm/PileupRenderer/colorBy.d.ts +7 -0
  256. package/esm/PileupRenderer/colorBy.js +61 -0
  257. package/esm/PileupRenderer/colorBy.js.map +1 -0
  258. package/esm/PileupRenderer/components/PileupRendering.d.ts +7 -2
  259. package/esm/PileupRenderer/components/PileupRendering.js +17 -18
  260. package/esm/PileupRenderer/components/PileupRendering.js.map +1 -1
  261. package/esm/PileupRenderer/getAlignmentShapeColor.d.ts +10 -0
  262. package/esm/PileupRenderer/getAlignmentShapeColor.js +56 -0
  263. package/esm/PileupRenderer/getAlignmentShapeColor.js.map +1 -0
  264. package/esm/PileupRenderer/index.js +1 -1
  265. package/esm/PileupRenderer/index.js.map +1 -1
  266. package/esm/PileupRenderer/layoutFeature.d.ts +18 -0
  267. package/esm/PileupRenderer/layoutFeature.js +37 -0
  268. package/esm/PileupRenderer/layoutFeature.js.map +1 -0
  269. package/esm/PileupRenderer/layoutFeatures.d.ts +2 -0
  270. package/esm/PileupRenderer/layoutFeatures.js +31 -0
  271. package/esm/PileupRenderer/layoutFeatures.js.map +1 -0
  272. package/esm/PileupRenderer/makeImageData.d.ts +17 -0
  273. package/esm/PileupRenderer/makeImageData.js +60 -0
  274. package/esm/PileupRenderer/makeImageData.js.map +1 -0
  275. package/esm/PileupRenderer/renderAlignment.d.ts +13 -0
  276. package/esm/PileupRenderer/renderAlignment.js +68 -0
  277. package/esm/PileupRenderer/renderAlignment.js.map +1 -0
  278. package/esm/PileupRenderer/renderAlignmentShape.d.ts +7 -0
  279. package/esm/PileupRenderer/renderAlignmentShape.js +37 -0
  280. package/esm/PileupRenderer/renderAlignmentShape.js.map +1 -0
  281. package/esm/PileupRenderer/renderMethylation.d.ts +11 -0
  282. package/esm/PileupRenderer/renderMethylation.js +59 -0
  283. package/esm/PileupRenderer/renderMethylation.js.map +1 -0
  284. package/esm/PileupRenderer/renderMismatches.d.ts +21 -0
  285. package/esm/PileupRenderer/renderMismatches.js +131 -0
  286. package/esm/PileupRenderer/renderMismatches.js.map +1 -0
  287. package/esm/PileupRenderer/renderModifications.d.ts +11 -0
  288. package/esm/PileupRenderer/renderModifications.js +50 -0
  289. package/esm/PileupRenderer/renderModifications.js.map +1 -0
  290. package/esm/PileupRenderer/renderPerBaseLettering.d.ts +13 -0
  291. package/esm/PileupRenderer/renderPerBaseLettering.js +43 -0
  292. package/esm/PileupRenderer/renderPerBaseLettering.js.map +1 -0
  293. package/esm/PileupRenderer/renderPerBaseQuality.d.ts +9 -0
  294. package/esm/PileupRenderer/renderPerBaseQuality.js +35 -0
  295. package/esm/PileupRenderer/renderPerBaseQuality.js.map +1 -0
  296. package/esm/PileupRenderer/renderSoftClipping.d.ts +13 -0
  297. package/esm/PileupRenderer/renderSoftClipping.js +44 -0
  298. package/esm/PileupRenderer/renderSoftClipping.js.map +1 -0
  299. package/esm/PileupRenderer/sortUtil.js +1 -2
  300. package/esm/PileupRenderer/sortUtil.js.map +1 -1
  301. package/esm/PileupRenderer/util.d.ts +24 -0
  302. package/esm/PileupRenderer/util.js +42 -0
  303. package/esm/PileupRenderer/util.js.map +1 -0
  304. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +0 -2
  305. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js +0 -2
  306. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -1
  307. package/esm/SNPCoverageAdapter/generateCoverageBins.d.ts +3 -43
  308. package/esm/SNPCoverageAdapter/generateCoverageBins.js +73 -50
  309. package/esm/SNPCoverageAdapter/generateCoverageBins.js.map +1 -1
  310. package/esm/SNPCoverageAdapter/index.js +0 -2
  311. package/esm/SNPCoverageAdapter/index.js.map +1 -1
  312. package/esm/SNPCoverageAdapter/util.d.ts +29 -0
  313. package/esm/SNPCoverageAdapter/util.js +2 -0
  314. package/esm/SNPCoverageAdapter/util.js.map +1 -0
  315. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +1 -1
  316. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +2 -2
  317. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
  318. package/esm/SNPCoverageRenderer/configSchema.d.ts +5 -0
  319. package/esm/SNPCoverageRenderer/configSchema.js +5 -0
  320. package/esm/SNPCoverageRenderer/configSchema.js.map +1 -1
  321. package/esm/shared/BaseDisplayComponent.d.ts +8 -0
  322. package/esm/shared/BaseDisplayComponent.js +44 -0
  323. package/esm/shared/BaseDisplayComponent.js.map +1 -0
  324. package/esm/shared/FilterByTag.d.ts +13 -11
  325. package/esm/shared/FilterByTag.js +8 -13
  326. package/esm/shared/FilterByTag.js.map +1 -1
  327. package/esm/shared/afterAttach.d.ts +2 -0
  328. package/esm/shared/afterAttach.js +40 -0
  329. package/esm/shared/afterAttach.js.map +1 -0
  330. package/esm/shared/color.d.ts +44 -6
  331. package/esm/shared/color.js +54 -20
  332. package/esm/shared/color.js.map +1 -1
  333. package/esm/shared/fetchChains.d.ts +3 -2
  334. package/esm/shared/fetchChains.js +14 -20
  335. package/esm/shared/fetchChains.js.map +1 -1
  336. package/esm/shared/renderSvg.d.ts +7 -0
  337. package/esm/shared/renderSvg.js +39 -0
  338. package/esm/shared/renderSvg.js.map +1 -0
  339. package/esm/shared/util.d.ts +2 -0
  340. package/esm/shared/util.js +9 -0
  341. package/esm/shared/util.js.map +1 -0
  342. package/esm/util.d.ts +16 -2
  343. package/esm/util.js +42 -3
  344. package/esm/util.js.map +1 -1
  345. package/package.json +3 -3
  346. package/src/AlignmentsFeatureDetail/AlignmentsFeatureFlags.tsx +3 -5
  347. package/src/BamAdapter/BamAdapter.ts +41 -42
  348. package/src/CombinationTest.test.ts +2 -2
  349. package/src/CramAdapter/CramAdapter.ts +66 -55
  350. package/src/CramAdapter/CramSlightlyLazyFeature.ts +2 -5
  351. package/src/CramAdapter/CramTestAdapters.ts +1 -1
  352. package/src/LinearAlignmentsDisplay/models/model.tsx +5 -1
  353. package/src/LinearPileupDisplay/components/ColorByModifications.tsx +3 -39
  354. package/src/LinearPileupDisplay/components/ColorByTag.tsx +1 -6
  355. package/src/LinearPileupDisplay/components/LinearPileupDisplayBlurb.tsx +10 -11
  356. package/src/LinearPileupDisplay/components/ModificationsTable.tsx +38 -0
  357. package/src/LinearPileupDisplay/model.ts +199 -152
  358. package/src/LinearReadArcsDisplay/components/ReactComponent.tsx +23 -61
  359. package/src/LinearReadArcsDisplay/drawFeats.ts +77 -85
  360. package/src/LinearReadArcsDisplay/model.tsx +77 -155
  361. package/src/LinearReadArcsDisplay/util.ts +10 -0
  362. package/src/LinearReadCloudDisplay/components/ReactComponent.tsx +21 -59
  363. package/src/LinearReadCloudDisplay/drawFeats.ts +12 -167
  364. package/src/LinearReadCloudDisplay/drawLongReadChains.ts +85 -0
  365. package/src/LinearReadCloudDisplay/drawPairChains.ts +139 -0
  366. package/src/LinearReadCloudDisplay/model.tsx +72 -131
  367. package/src/LinearReadCloudDisplay/util.ts +47 -0
  368. package/src/LinearSNPCoverageDisplay/models/model.ts +63 -50
  369. package/src/MismatchParser/index.ts +46 -4
  370. package/src/PileupRPC/methods/GetReducedFeatures.ts +2 -10
  371. package/src/PileupRenderer/PileupRenderer.ts +23 -1200
  372. package/src/PileupRenderer/colorBy.ts +74 -0
  373. package/src/PileupRenderer/components/PileupRendering.tsx +20 -25
  374. package/src/PileupRenderer/getAlignmentShapeColor.ts +87 -0
  375. package/src/PileupRenderer/index.ts +1 -1
  376. package/src/PileupRenderer/layoutFeature.ts +83 -0
  377. package/src/PileupRenderer/layoutFeatures.ts +44 -0
  378. package/src/PileupRenderer/makeImageData.ts +93 -0
  379. package/src/PileupRenderer/renderAlignment.ts +97 -0
  380. package/src/PileupRenderer/renderAlignmentShape.ts +45 -0
  381. package/src/PileupRenderer/renderMethylation.ts +75 -0
  382. package/src/PileupRenderer/renderMismatches.ts +206 -0
  383. package/src/PileupRenderer/renderModifications.ts +74 -0
  384. package/src/PileupRenderer/renderPerBaseLettering.ts +67 -0
  385. package/src/PileupRenderer/renderPerBaseQuality.ts +46 -0
  386. package/src/PileupRenderer/renderSoftClipping.ts +78 -0
  387. package/src/PileupRenderer/sortUtil.ts +1 -3
  388. package/src/PileupRenderer/util.ts +63 -0
  389. package/src/SNPCoverageAdapter/SNPCoverageAdapter.ts +0 -3
  390. package/src/SNPCoverageAdapter/generateCoverageBins.ts +111 -100
  391. package/src/SNPCoverageAdapter/index.ts +0 -2
  392. package/src/SNPCoverageAdapter/util.ts +33 -0
  393. package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +3 -3
  394. package/src/SNPCoverageRenderer/configSchema.ts +6 -0
  395. package/src/shared/BaseDisplayComponent.tsx +83 -0
  396. package/src/shared/FilterByTag.tsx +13 -23
  397. package/src/shared/afterAttach.tsx +66 -0
  398. package/src/shared/color.ts +59 -20
  399. package/src/shared/fetchChains.ts +23 -24
  400. package/src/shared/renderSvg.tsx +64 -0
  401. package/src/shared/util.ts +10 -0
  402. package/src/util.ts +54 -5
@@ -0,0 +1,74 @@
1
+ import {
2
+ AnyConfigurationModel,
3
+ readConfObject,
4
+ } from '@jbrowse/core/configuration'
5
+ import { Feature } from '@jbrowse/core/util'
6
+ import { fillColor } from '../shared/color'
7
+ import { orientationTypes } from '../util'
8
+
9
+ export function colorByInsertSize(feature: Feature) {
10
+ return feature.get('is_paired') &&
11
+ feature.get('refName') !== feature.get('next_ref')
12
+ ? '#555'
13
+ : `hsl(${Math.abs(feature.get('template_length')) / 10},50%,50%)`
14
+ }
15
+
16
+ export function colorByMappingQuality(feature: Feature) {
17
+ return `hsl(${feature.get('mq')},50%,50%)`
18
+ }
19
+
20
+ function getOrientation(feature: Feature, config: AnyConfigurationModel) {
21
+ const orientationType = readConfObject(config, 'orientationType') as
22
+ | 'fr'
23
+ | 'ff'
24
+ | 'rf'
25
+ const type = orientationTypes[orientationType]
26
+ const orientation = type[feature.get('pair_orientation') as string]
27
+ return {
28
+ LR: 'color_pair_lr' as const,
29
+ RR: 'color_pair_rr' as const,
30
+ RL: 'color_pair_rl' as const,
31
+ LL: 'color_pair_ll' as const,
32
+ }[orientation]
33
+ }
34
+
35
+ export function colorByStrand(feature: Feature) {
36
+ return feature.get('strand') === -1 ? '#8F8FD8' : '#EC8B8B'
37
+ }
38
+
39
+ export function colorByOrientation(
40
+ feature: Feature,
41
+ config: AnyConfigurationModel,
42
+ ) {
43
+ return fillColor[getOrientation(feature, config) || 'color_nostrand']
44
+ }
45
+ function getStranded(feature: Feature) {
46
+ const flags = feature.get('flags')
47
+ const strand = feature.get('strand')
48
+ // is paired
49
+ if (flags & 1) {
50
+ const revflag = flags & 64
51
+ const flipper = revflag ? -1 : 1
52
+
53
+ // proper pairing
54
+ if (flags & 2) {
55
+ return strand * flipper === 1 ? 'color_rev_strand' : 'color_fwd_strand'
56
+ } else if (feature.get('multi_segment_next_segment_unmapped')) {
57
+ return strand * flipper === 1
58
+ ? 'color_rev_missing_mate'
59
+ : 'color_fwd_missing_mate'
60
+ } else if (feature.get('refName') === feature.get('next_refName')) {
61
+ return strand * flipper === 1
62
+ ? 'color_rev_strand_not_proper'
63
+ : 'color_fwd_strand_not_proper'
64
+ } else {
65
+ // should only leave aberrant chr
66
+ return strand === 1 ? 'color_fwd_diff_chr' : 'color_rev_diff_chr'
67
+ }
68
+ }
69
+ return strand === 1 ? 'color_fwd_strand' : 'color_rev_strand'
70
+ }
71
+
72
+ export function colorByStrandedRnaSeq(feature: Feature) {
73
+ return fillColor[getStranded(feature)]
74
+ }
@@ -17,7 +17,8 @@ function PileupRendering(props: {
17
17
  bpPerPx: number
18
18
  sortedBy?: { type: string; pos: number; refName: string }
19
19
  colorBy?: { type: string; tag?: string }
20
- onMouseMove?: (event: React.MouseEvent, featureId: string | undefined) => void
20
+ filterBy?: { tagFilter?: { tag: string } }
21
+ onMouseMove?: (event: React.MouseEvent, featureId?: string) => void
21
22
  }) {
22
23
  const {
23
24
  onMouseMove,
@@ -29,6 +30,7 @@ function PileupRendering(props: {
29
30
  bpPerPx,
30
31
  sortedBy,
31
32
  colorBy,
33
+ filterBy,
32
34
  } = props
33
35
  const { selectedFeatureId, featureIdUnderMouse, contextMenuFeature } =
34
36
  displayModel
@@ -131,31 +133,22 @@ function PileupRendering(props: {
131
133
  }
132
134
 
133
135
  function mouseMove(event: React.MouseEvent) {
136
+ if (!highlightOverlayCanvas.current) {
137
+ return
138
+ }
134
139
  if (mouseIsDown) {
135
140
  setMovedDuringLastMouseDown(true)
136
141
  }
137
- let offsetX = 0
138
- let offsetY = 0
139
- const canvas = highlightOverlayCanvas.current
140
- if (canvas) {
141
- const { left, top } = canvas.getBoundingClientRect()
142
- offsetX = left
143
- offsetY = top
144
- }
145
- offsetX = event.clientX - offsetX
146
- offsetY = event.clientY - offsetY
142
+ const rect = highlightOverlayCanvas.current.getBoundingClientRect()
143
+ const offsetX = event.clientX - rect.left
144
+ const offsetY = event.clientY - rect.top
147
145
  const px = region.reversed ? width - offsetX : offsetX
148
146
  const clientBp = region.start + bpPerPx * px
149
147
 
150
- const featIdUnderMouse = displayModel.getFeatureOverlapping(
151
- blockKey,
152
- clientBp,
153
- offsetY,
148
+ onMouseMove?.(
149
+ event,
150
+ displayModel.getFeatureOverlapping(blockKey, clientBp, offsetY),
154
151
  )
155
-
156
- if (onMouseMove) {
157
- onMouseMove(event, featIdUnderMouse)
158
- }
159
152
  }
160
153
 
161
154
  function callMouseHandler(handlerName: string, event: React.MouseEvent) {
@@ -176,12 +169,14 @@ function PileupRendering(props: {
176
169
  // need to call this in render so we get the right observer behavior
177
170
  return (
178
171
  <div
179
- className="PileupRendering"
180
- data-testid={`pileup-${
181
- sortedBy || colorBy
182
- ? `${sortedBy?.type || ''}${colorBy?.type || ''}${colorBy?.tag || ''}`
183
- : 'normal'
184
- }`}
172
+ data-testid={`pileup-${[
173
+ sortedBy?.type,
174
+ colorBy?.type,
175
+ colorBy?.tag,
176
+ filterBy?.tagFilter?.tag,
177
+ ]
178
+ .filter(f => !!f)
179
+ .join('-')}`}
185
180
  style={{ position: 'relative', width: canvasWidth, height }}
186
181
  >
187
182
  <PrerenderedCanvas
@@ -0,0 +1,87 @@
1
+ import {
2
+ AnyConfigurationModel,
3
+ readConfObject,
4
+ } from '@jbrowse/core/configuration'
5
+ import { Feature } from '@jbrowse/core/util'
6
+ import { fillColor } from '../shared/color'
7
+ import {
8
+ colorByInsertSize,
9
+ colorByMappingQuality,
10
+ colorByOrientation,
11
+ colorByStrand,
12
+ colorByStrandedRnaSeq,
13
+ } from './colorBy'
14
+
15
+ export function getAlignmentShapeColor({
16
+ colorType,
17
+ tag,
18
+ feature,
19
+ config,
20
+ defaultColor,
21
+ colorTagMap,
22
+ }: {
23
+ colorType: string
24
+ tag: string
25
+ feature: Feature
26
+ defaultColor: boolean
27
+ config: AnyConfigurationModel
28
+ colorTagMap: Record<string, string>
29
+ }) {
30
+ // first pass for simple color changes that change the color of the
31
+ // alignment
32
+ switch (colorType) {
33
+ case 'insertSize':
34
+ return colorByInsertSize(feature)
35
+ case 'strand':
36
+ return colorByStrand(feature)
37
+ case 'mappingQuality':
38
+ return colorByMappingQuality(feature)
39
+ case 'pairOrientation':
40
+ return colorByOrientation(feature, config)
41
+ case 'stranded':
42
+ return colorByStrandedRnaSeq(feature)
43
+ case 'xs':
44
+ case 'tag': {
45
+ const tags = feature.get('tags')
46
+ const val = tags ? tags[tag] : feature.get(tag)
47
+
48
+ if (tag === 'XS' || tag === 'TS') {
49
+ return fillColor[
50
+ {
51
+ '-': 'color_rev_strand' as const,
52
+ '+': 'color_fwd_strand' as const,
53
+ }[val as '-' | '+'] || 'color_nostrand'
54
+ ]
55
+ } else if (tag === 'ts') {
56
+ return fillColor[
57
+ {
58
+ '-':
59
+ feature.get('strand') === -1
60
+ ? ('color_fwd_strand' as const)
61
+ : ('color_rev_strand' as const),
62
+ '+':
63
+ feature.get('strand') === -1
64
+ ? ('color_rev_strand' as const)
65
+ : ('color_fwd_strand' as const),
66
+ }[val as '-' | '+'] || 'color_nostrand'
67
+ ]
68
+ } else {
69
+ return colorTagMap[val] || fillColor['color_nostrand']
70
+ }
71
+ }
72
+ case 'insertSizeAndPairOrientation':
73
+ break
74
+
75
+ case 'modifications':
76
+ case 'methylation':
77
+ // this coloring is similar to igv.js, and is helpful to color negative
78
+ // strand reads differently because their c-g will be flipped (e.g. g-c
79
+ // read right to left)
80
+ return feature.get('flags') & 16 ? '#c8dcc8' : '#c8c8c8'
81
+
82
+ default:
83
+ return defaultColor
84
+ ? 'lightgrey'
85
+ : readConfObject(config, 'color', { feature })
86
+ }
87
+ }
@@ -1,7 +1,7 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager'
2
2
  import PileupRenderer from './PileupRenderer'
3
- import ReactComponent from './components/PileupRendering'
4
3
  import configSchema from './configSchema'
4
+ import ReactComponent from './components/PileupRendering'
5
5
 
6
6
  export default function register(pluginManager: PluginManager) {
7
7
  pluginManager.addRendererType(() => {
@@ -0,0 +1,83 @@
1
+ import { bpSpanPx, Feature, Region } from '@jbrowse/core/util'
2
+ import { BaseLayout } from '@jbrowse/core/util/layouts'
3
+ // locals
4
+ import { Mismatch } from '../MismatchParser'
5
+
6
+ export interface LayoutRecord {
7
+ feature: Feature
8
+ leftPx: number
9
+ rightPx: number
10
+ topPx: number
11
+ heightPx: number
12
+ }
13
+
14
+ export function layoutFeature({
15
+ feature,
16
+ layout,
17
+ bpPerPx,
18
+ region,
19
+ showSoftClip,
20
+ heightPx,
21
+ displayMode,
22
+ }: {
23
+ feature: Feature
24
+ layout: BaseLayout<Feature>
25
+ bpPerPx: number
26
+ region: Region
27
+ showSoftClip?: boolean
28
+ heightPx: number
29
+ displayMode: string
30
+ }): LayoutRecord | null {
31
+ let expansionBefore = 0
32
+ let expansionAfter = 0
33
+
34
+ // Expand the start and end of feature when softclipping enabled
35
+ if (showSoftClip) {
36
+ const mismatches = feature.get('mismatches') as Mismatch[]
37
+ const seq = feature.get('seq') as string
38
+ if (seq) {
39
+ for (let i = 0; i < mismatches.length; i += 1) {
40
+ const { type, start, cliplen = 0 } = mismatches[i]
41
+ if (type === 'softclip') {
42
+ start === 0 ? (expansionBefore = cliplen) : (expansionAfter = cliplen)
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+ const [leftPx, rightPx] = bpSpanPx(
49
+ feature.get('start') - expansionBefore,
50
+ feature.get('end') + expansionAfter,
51
+ region,
52
+ bpPerPx,
53
+ )
54
+
55
+ if (displayMode === 'compact') {
56
+ heightPx /= 3
57
+ }
58
+ if (feature.get('refName') !== region.refName) {
59
+ throw new Error(
60
+ `feature ${feature.id()} is not on the current region's reference sequence ${
61
+ region.refName
62
+ }`,
63
+ )
64
+ }
65
+ const topPx = layout.addRect(
66
+ feature.id(),
67
+ feature.get('start') - expansionBefore,
68
+ feature.get('end') + expansionAfter,
69
+ heightPx,
70
+ feature,
71
+ )
72
+ if (topPx === null) {
73
+ return null
74
+ }
75
+
76
+ return {
77
+ feature,
78
+ leftPx,
79
+ rightPx,
80
+ topPx: displayMode === 'collapse' ? 0 : topPx,
81
+ heightPx,
82
+ }
83
+ }
@@ -0,0 +1,44 @@
1
+ import { readConfObject } from '@jbrowse/core/configuration'
2
+ import { iterMap } from '@jbrowse/core/util'
3
+
4
+ // locals
5
+ import { layoutFeature } from './layoutFeature'
6
+ import { RenderArgsDeserializedWithFeaturesAndLayout } from './PileupRenderer'
7
+ import { sortFeature } from './sortUtil'
8
+
9
+ // layout determines the height of the canvas that we use to render
10
+ export function layoutFeats(
11
+ props: RenderArgsDeserializedWithFeaturesAndLayout,
12
+ ) {
13
+ const { layout, features, sortedBy, config, bpPerPx, showSoftClip, regions } =
14
+ props
15
+ const [region] = regions
16
+ if (!layout) {
17
+ throw new Error(`layout required`)
18
+ }
19
+ if (!layout.addRect) {
20
+ throw new Error('invalid layout object')
21
+ }
22
+
23
+ const featureMap =
24
+ sortedBy?.type && region.start === sortedBy.pos
25
+ ? sortFeature(features, sortedBy)
26
+ : features
27
+
28
+ const heightPx = readConfObject(config, 'height')
29
+ const displayMode = readConfObject(config, 'displayMode')
30
+ return iterMap(
31
+ featureMap.values(),
32
+ feature =>
33
+ layoutFeature({
34
+ feature,
35
+ layout,
36
+ bpPerPx,
37
+ region,
38
+ showSoftClip,
39
+ heightPx,
40
+ displayMode,
41
+ }),
42
+ featureMap.size,
43
+ )
44
+ }
@@ -0,0 +1,93 @@
1
+ import { Feature } from '@jbrowse/core/util'
2
+ import { RenderArgsDeserializedWithFeaturesAndLayout } from './PileupRenderer'
3
+ import { readConfObject } from '@jbrowse/core/configuration'
4
+ import { createJBrowseTheme } from '@jbrowse/core/ui'
5
+ import {
6
+ getCharWidthHeight,
7
+ getColorBaseMap,
8
+ getContrastBaseMap,
9
+ shouldDrawIndels,
10
+ shouldDrawSNPsMuted,
11
+ } from './util'
12
+ import { renderAlignment } from './renderAlignment'
13
+ import { renderMismatches } from './renderMismatches'
14
+ import { renderSoftClipping } from './renderSoftClipping'
15
+
16
+ export interface RenderArgsWithColor
17
+ extends RenderArgsDeserializedWithFeaturesAndLayout {
18
+ Color: Awaited<typeof import('color')>
19
+ }
20
+
21
+ interface LayoutFeature {
22
+ heightPx: number
23
+ topPx: number
24
+ feature: Feature
25
+ }
26
+
27
+ export function makeImageData({
28
+ ctx,
29
+ layoutRecords,
30
+ canvasWidth,
31
+ renderArgs,
32
+ }: {
33
+ ctx: CanvasRenderingContext2D
34
+ canvasWidth: number
35
+ layoutRecords: LayoutFeature[]
36
+ renderArgs: RenderArgsWithColor
37
+ }) {
38
+ const { config, showSoftClip, colorBy, theme: configTheme } = renderArgs
39
+ const mismatchAlpha = readConfObject(config, 'mismatchAlpha')
40
+ const minSubfeatureWidth = readConfObject(config, 'minSubfeatureWidth')
41
+ const largeInsertionIndicatorScale = readConfObject(
42
+ config,
43
+ 'largeInsertionIndicatorScale',
44
+ )
45
+ const defaultColor = readConfObject(config, 'color') === '#f0f'
46
+ const theme = createJBrowseTheme(configTheme)
47
+ const colorForBase = getColorBaseMap(theme)
48
+ const contrastForBase = getContrastBaseMap(theme)
49
+ ctx.font = 'bold 10px Courier New,monospace'
50
+
51
+ const { charWidth, charHeight } = getCharWidthHeight()
52
+ const drawSNPsMuted = shouldDrawSNPsMuted(colorBy?.type)
53
+ const drawIndels = shouldDrawIndels()
54
+ for (const feat of layoutRecords) {
55
+ renderAlignment({
56
+ ctx,
57
+ feat,
58
+ renderArgs,
59
+ defaultColor,
60
+ colorForBase,
61
+ contrastForBase,
62
+ charWidth,
63
+ charHeight,
64
+ canvasWidth,
65
+ })
66
+ renderMismatches({
67
+ ctx,
68
+ feat,
69
+ renderArgs,
70
+ mismatchAlpha,
71
+ drawSNPsMuted,
72
+ drawIndels,
73
+ largeInsertionIndicatorScale,
74
+ minSubfeatureWidth,
75
+ charWidth,
76
+ charHeight,
77
+ colorForBase,
78
+ contrastForBase,
79
+ canvasWidth,
80
+ })
81
+ if (showSoftClip) {
82
+ renderSoftClipping({
83
+ ctx,
84
+ feat,
85
+ renderArgs,
86
+ colorForBase,
87
+ config,
88
+ theme,
89
+ canvasWidth,
90
+ })
91
+ }
92
+ }
93
+ }
@@ -0,0 +1,97 @@
1
+ import { LayoutFeature } from './util'
2
+
3
+ import { getAlignmentShapeColor } from './getAlignmentShapeColor'
4
+ import { renderAlignmentShape } from './renderAlignmentShape'
5
+ import { renderPerBaseQuality } from './renderPerBaseQuality'
6
+ import { renderPerBaseLettering } from './renderPerBaseLettering'
7
+ import { renderModifications } from './renderModifications'
8
+ import { renderMethylation } from './renderMethylation'
9
+ import { RenderArgsWithColor } from './makeImageData'
10
+
11
+ export function renderAlignment({
12
+ ctx,
13
+ feat,
14
+ renderArgs,
15
+ colorForBase,
16
+ contrastForBase,
17
+ charWidth,
18
+ charHeight,
19
+ defaultColor,
20
+ canvasWidth,
21
+ }: {
22
+ ctx: CanvasRenderingContext2D
23
+ feat: LayoutFeature
24
+ renderArgs: RenderArgsWithColor
25
+ colorForBase: Record<string, string>
26
+ contrastForBase: Record<string, string>
27
+ charWidth: number
28
+ charHeight: number
29
+ defaultColor: boolean
30
+ canvasWidth: number
31
+ }) {
32
+ const { config, bpPerPx, regions, colorBy, colorTagMap = {} } = renderArgs
33
+ const { tag = '', type: colorType = '' } = colorBy || {}
34
+ const { feature } = feat
35
+ const region = regions[0]
36
+
37
+ ctx.fillStyle = getAlignmentShapeColor({
38
+ feature,
39
+ config,
40
+ tag,
41
+ defaultColor,
42
+ colorType,
43
+ colorTagMap,
44
+ })
45
+
46
+ renderAlignmentShape({ ctx, feat, renderArgs })
47
+
48
+ // second pass for color types that render per-base things that go over the
49
+ // existing drawing
50
+ switch (colorType) {
51
+ case 'perBaseQuality':
52
+ renderPerBaseQuality({
53
+ ctx,
54
+ feat,
55
+ region,
56
+ bpPerPx,
57
+ canvasWidth,
58
+ })
59
+ break
60
+
61
+ case 'perBaseLettering':
62
+ renderPerBaseLettering({
63
+ ctx,
64
+ feat,
65
+ region,
66
+ bpPerPx,
67
+ colorForBase,
68
+ contrastForBase,
69
+ charWidth,
70
+ charHeight,
71
+ canvasWidth,
72
+ })
73
+ break
74
+
75
+ case 'modifications':
76
+ renderModifications({
77
+ ctx,
78
+ feat,
79
+ region,
80
+ bpPerPx,
81
+ renderArgs,
82
+ canvasWidth,
83
+ })
84
+ break
85
+
86
+ case 'methylation':
87
+ renderMethylation({
88
+ ctx,
89
+ feat,
90
+ region,
91
+ bpPerPx,
92
+ renderArgs,
93
+ canvasWidth,
94
+ })
95
+ break
96
+ }
97
+ }
@@ -0,0 +1,45 @@
1
+ import { bpSpanPx } from '@jbrowse/core/util'
2
+ import { RenderArgsDeserialized } from './PileupRenderer'
3
+ import { LayoutFeature } from './util'
4
+
5
+ export function renderAlignmentShape({
6
+ ctx,
7
+ feat,
8
+ renderArgs,
9
+ }: {
10
+ ctx: CanvasRenderingContext2D
11
+ feat: LayoutFeature
12
+ renderArgs: RenderArgsDeserialized
13
+ }) {
14
+ const { regions, bpPerPx } = renderArgs
15
+ const { heightPx, topPx, feature } = feat
16
+ const [region] = regions
17
+ const s = feature.get('start')
18
+ const e = feature.get('end')
19
+ const [leftPx, rightPx] = bpSpanPx(s, e, region, bpPerPx)
20
+ const flip = region.reversed ? -1 : 1
21
+ const strand = feature.get('strand') * flip
22
+ if (bpPerPx < 10) {
23
+ if (strand === -1) {
24
+ ctx.beginPath()
25
+ ctx.moveTo(leftPx - 5, topPx + heightPx / 2)
26
+ ctx.lineTo(leftPx, topPx + heightPx)
27
+ ctx.lineTo(rightPx, topPx + heightPx)
28
+ ctx.lineTo(rightPx, topPx)
29
+ ctx.lineTo(leftPx, topPx)
30
+ ctx.closePath()
31
+ ctx.fill()
32
+ } else {
33
+ ctx.beginPath()
34
+ ctx.moveTo(leftPx, topPx)
35
+ ctx.lineTo(leftPx, topPx + heightPx)
36
+ ctx.lineTo(rightPx, topPx + heightPx)
37
+ ctx.lineTo(rightPx + 5, topPx + heightPx / 2)
38
+ ctx.lineTo(rightPx, topPx)
39
+ ctx.closePath()
40
+ ctx.fill()
41
+ }
42
+ } else {
43
+ ctx.fillRect(leftPx, topPx, rightPx - leftPx, heightPx)
44
+ }
45
+ }
@@ -0,0 +1,75 @@
1
+ import { bpSpanPx, Region } from '@jbrowse/core/util'
2
+ import { getMethBins } from '../MismatchParser'
3
+ import { fillRect, LayoutFeature } from './util'
4
+ import { RenderArgsWithColor } from './makeImageData'
5
+
6
+ // Color by methylation is slightly modified version of color by
7
+ // modifications that focuses on CpG sites, with non-methylated CpG colored
8
+ export function renderMethylation({
9
+ ctx,
10
+ feat,
11
+ region,
12
+ bpPerPx,
13
+ renderArgs,
14
+ canvasWidth,
15
+ }: {
16
+ ctx: CanvasRenderingContext2D
17
+ feat: LayoutFeature
18
+ region: Region
19
+ bpPerPx: number
20
+ renderArgs: RenderArgsWithColor
21
+ canvasWidth: number
22
+ }) {
23
+ const { regionSequence, Color } = renderArgs
24
+ const { feature, topPx, heightPx } = feat
25
+ if (!regionSequence) {
26
+ throw new Error('region sequence required for methylation')
27
+ }
28
+
29
+ const seq = feature.get('seq') as string | undefined
30
+ if (!seq) {
31
+ return
32
+ }
33
+ const fstart = feature.get('start')
34
+ const fend = feature.get('end')
35
+ const { methBins, methProbs } = getMethBins(feature)
36
+
37
+ function getCol(k: number) {
38
+ if (methBins[k]) {
39
+ const p = methProbs[k] || 0
40
+ return p > 0.5
41
+ ? Color('red')
42
+ .alpha((p - 0.5) * 2)
43
+ .hsl()
44
+ .string()
45
+ : Color('blue')
46
+ .alpha(1 - p * 2)
47
+ .hsl()
48
+ .string()
49
+ }
50
+ return undefined
51
+ }
52
+ for (let i = 0; i < fend - fstart; i++) {
53
+ const j = i + fstart
54
+ const l1 = regionSequence[j - region.start + 1]?.toLowerCase()
55
+ const l2 = regionSequence[j - region.start + 2]?.toLowerCase()
56
+
57
+ if (l1 === 'c' && l2 === 'g') {
58
+ if (bpPerPx > 2) {
59
+ const [leftPx, rightPx] = bpSpanPx(j, j + 2, region, bpPerPx)
60
+ const w = rightPx - leftPx + 0.5
61
+ const c = getCol(i) || getCol(i + 1) || 'blue'
62
+ fillRect(ctx, leftPx, topPx, w, heightPx, canvasWidth, c)
63
+ } else {
64
+ const [leftPx, rightPx] = bpSpanPx(j, j + 1, region, bpPerPx)
65
+ const w = rightPx - leftPx + 0.5
66
+ const c = getCol(i) || 'blue'
67
+ fillRect(ctx, leftPx, topPx, w, heightPx, canvasWidth, c)
68
+ const [leftPx2, rightPx2] = bpSpanPx(j + 1, j + 2, region, bpPerPx)
69
+ const w2 = rightPx2 - leftPx2 + 0.5
70
+ const c2 = getCol(i + 1) || 'blue'
71
+ fillRect(ctx, leftPx2, topPx, w2, heightPx, canvasWidth, c2)
72
+ }
73
+ }
74
+ }
75
+ }