@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
@@ -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,60 +1,16 @@
1
- import { AnyConfigurationModel, 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
- configuration: AnyConfigurationModel
57
- },
12
+ export function drawFeats(
13
+ self: LinearReadCloudDisplayModel,
58
14
  ctx: CanvasRenderingContext2D,
59
15
  ) {
60
16
  const { chainData } = self
@@ -62,8 +18,6 @@ export default async function drawFeats(
62
18
  return
63
19
  }
64
20
  const { assemblyManager } = getSession(self)
65
- const featureHeight = getConf(self, 'featureHeight')
66
- const displayHeight = self.height
67
21
  const view = getContainingView(self) as LGV
68
22
  const assemblyName = view.assemblyNames[0]
69
23
  const asm = assemblyManager.get(assemblyName)
@@ -71,120 +25,11 @@ export default async function drawFeats(
71
25
  return
72
26
  }
73
27
 
74
- self.setLastDrawnOffsetPx(view.offsetPx)
75
-
76
- const { chains, stats } = chainData
77
- const coords: ChainCoord[] = []
78
- for (let i = 0; i < chains.length; i++) {
79
- const chain = chains[i]
80
- // if we're looking at a paired read (flag 1) then assume it is just two
81
- // reads (some small cases may defy this assumption such as secondary
82
- // alignments but this may be uncommon)
83
- if (chain[0].flags & 1 && chain.length > 1) {
84
- const v0 = chain[0]
85
- const v1 = chain[1]
86
- const ra1 = asm.getCanonicalRefName(v0.refName) || v0.refName
87
- const ra2 = asm.getCanonicalRefName(v1.refName) || v1.refName
88
- const r1s = view.bpToPx({ refName: ra1, coord: v0.start })
89
- const r1e = view.bpToPx({ refName: ra1, coord: v0.end })
90
- const r2s = view.bpToPx({ refName: ra2, coord: v1.start })
91
- const r2e = view.bpToPx({ refName: ra2, coord: v1.end })
92
-
93
- let distance = 0
94
-
95
- if (
96
- r1s !== undefined &&
97
- r1e !== undefined &&
98
- r2s !== undefined &&
99
- r2e !== undefined
100
- ) {
101
- if (v0.refName === v1.refName) {
102
- const s = Math.min(v0.start, v1.start)
103
- const e = Math.max(v0.end, v1.end)
104
- distance = Math.abs(e - s)
105
- }
106
- coords.push({
107
- r1s: r1s.offsetPx,
108
- r1e: r1e.offsetPx,
109
- r2s: r2s.offsetPx,
110
- r2e: r2e.offsetPx,
111
- v0,
112
- v1,
113
- distance,
114
- })
115
- }
116
- } else {
117
- // if we're not looking at pairs, then it could be a multiply-split-long
118
- // read, so traverse chain
119
- for (let i = 1; i < chain.length; i++) {
120
- const v0 = chain[i - 1]
121
- const v1 = chain[i]
122
- const ra1 = asm.getCanonicalRefName(v0.refName) || v0.refName
123
- const ra2 = asm.getCanonicalRefName(v1.refName) || v1.refName
124
- const r1s = view.bpToPx({ refName: ra1, coord: v0.start })
125
- const r1e = view.bpToPx({ refName: ra1, coord: v0.end })
126
- const r2s = view.bpToPx({ refName: ra2, coord: v1.start })
127
- const r2e = view.bpToPx({ refName: ra2, coord: v1.end })
128
-
129
- let distance = 0
130
-
131
- if (
132
- r1s !== undefined &&
133
- r1e !== undefined &&
134
- r2s !== undefined &&
135
- r2e !== undefined
136
- ) {
137
- if (v0.refName === v1.refName) {
138
- const s = Math.min(v0.start, v1.start)
139
- const e = Math.max(v0.end, v1.end)
140
- distance = Math.abs(e - s)
141
- }
142
- coords.push({
143
- r1s: r1s.offsetPx,
144
- r1e: r1e.offsetPx,
145
- r2s: r2s.offsetPx,
146
- r2e: r2e.offsetPx,
147
- v0,
148
- v1,
149
- distance,
150
- })
151
- }
152
- }
153
- }
154
- }
155
-
156
- let max = 0
157
- for (let i = 0; i < coords.length; i++) {
158
- const { distance } = coords[i]
159
- max = Math.max(max, distance)
160
- }
161
- const halfHeight = featureHeight / 2 - 0.5
162
- const scaler = (displayHeight - 20) / Math.log(max)
163
-
164
- for (let i = 0; i < coords.length; i++) {
165
- const { r1s, r1e, r2s, r2e, v0, v1, distance } = coords[i]
166
- const type = self.colorBy?.type || 'insertSizeAndOrientation'
167
-
168
- const top = Math.log(distance) * scaler
169
- ctx.fillStyle = 'black'
170
- const w = r2s - r1e
171
- fillRectCtx(r1e - view.offsetPx, top + halfHeight, w, 1, ctx)
172
-
173
- if (type === 'insertSizeAndOrientation') {
174
- ctx.fillStyle = getInsertSizeAndOrientationColor(v0, v1, stats)
175
- } else if (type === 'orientation') {
176
- ctx.fillStyle = getOrientationColor(v0)
177
- } else if (type === 'insertSize') {
178
- ctx.fillStyle = getInsertSizeColor(v0, v1, stats) || 'grey'
179
- } else if (type === 'gradient') {
180
- const s = Math.min(v0.start, v1.start)
181
- const e = Math.max(v0.end, v1.end)
182
- ctx.fillStyle = `hsl(${Math.log10(Math.abs(e - s)) * 10},50%,50%)`
183
- }
28
+ const hasPaired = hasPairedReads(chainData)
184
29
 
185
- const w1 = Math.max(r1e - r1s, 2)
186
- const w2 = Math.max(r2e - r2s, 2)
187
- fillRectCtx(r1s - view.offsetPx, top, w1, featureHeight, ctx)
188
- 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 })
189
34
  }
190
35
  }
@@ -0,0 +1,85 @@
1
+ import { getConf } from '@jbrowse/core/configuration'
2
+ import { max, min } from '@jbrowse/core/util'
3
+ import { Assembly } from '@jbrowse/core/assemblyManager/assembly'
4
+ import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'
5
+
6
+ // locals
7
+ import { ChainData } from '../shared/fetchChains'
8
+ import { LinearReadCloudDisplayModel } from './model'
9
+ import { fillColor, strokeColor } from '../shared/color'
10
+ import { fillRectCtx, strokeRectCtx } from './util'
11
+
12
+ export function drawLongReadChains({
13
+ ctx,
14
+ self,
15
+ chainData,
16
+ view,
17
+ asm,
18
+ }: {
19
+ ctx: CanvasRenderingContext2D
20
+ self: LinearReadCloudDisplayModel
21
+ chainData: ChainData
22
+ view: LinearGenomeViewModel
23
+ asm: Assembly
24
+ }) {
25
+ const distances: number[] = []
26
+ const minXs: number[] = []
27
+ const { chains } = chainData
28
+ const { height } = self
29
+ const featureHeight = getConf(self, 'featureHeight')
30
+
31
+ // get bounds on the 'distances' (pixel span that a particular split long
32
+ // read 'chain' would have in view)
33
+ for (const chain of chains) {
34
+ let minX = Number.MAX_VALUE
35
+ let maxX = Number.MIN_VALUE
36
+ for (const elt of chain) {
37
+ const refName = asm.getCanonicalRefName(elt.refName) || elt.refName
38
+ const rs = view.bpToPx({ refName, coord: elt.start })?.offsetPx
39
+ const re = view.bpToPx({ refName, coord: elt.end })?.offsetPx
40
+ if (rs !== undefined && re !== undefined) {
41
+ minX = Math.min(minX, rs)
42
+ maxX = Math.max(maxX, re)
43
+ }
44
+ }
45
+ const distance = Math.abs(maxX - minX)
46
+ distances.push(distance)
47
+ minXs.push(minX)
48
+ }
49
+
50
+ const maxD = Math.log(max(distances))
51
+ const minD = Math.max(Math.log(min(distances)) - 1, 0)
52
+ const scaler = (height - 20) / (maxD - minD)
53
+ const halfHeight = featureHeight / 2 - 0.5
54
+
55
+ // draw split long read 'chains' as connected entities
56
+ for (let i = 0; i < chains.length; i++) {
57
+ const chain = chains[i]
58
+ const w = distances[i]
59
+ const top = (Math.log(w) - minD) * scaler
60
+ const min = minXs[i]
61
+ fillRectCtx(min - view.offsetPx, top + halfHeight, w, 1, ctx, 'black')
62
+ const c1 = chain[0]
63
+ let primaryStrand: undefined | number
64
+ if (!(c1.flags & 2048)) {
65
+ primaryStrand = c1.strand
66
+ } else {
67
+ const res = c1.SA?.split(';')[0].split(',')[2]
68
+ primaryStrand = res === '-' ? -1 : 1
69
+ }
70
+ for (const v0 of chain) {
71
+ const ra = asm.getCanonicalRefName(v0.refName) || v0.refName
72
+ const rs = view.bpToPx({ refName: ra, coord: v0.start })?.offsetPx
73
+ const re = view.bpToPx({ refName: ra, coord: v0.end })?.offsetPx
74
+ if (rs !== undefined && re !== undefined) {
75
+ const w = Math.max(re - rs, 2)
76
+ const l = rs - view.offsetPx
77
+ const effectiveStrand = v0.strand * primaryStrand
78
+ const c =
79
+ effectiveStrand === -1 ? 'color_rev_strand' : 'color_fwd_strand'
80
+ strokeRectCtx(l, top, w, featureHeight, ctx, strokeColor[c])
81
+ fillRectCtx(l, top, w, featureHeight, ctx, fillColor[c])
82
+ }
83
+ }
84
+ }
85
+ }
@@ -0,0 +1,139 @@
1
+ import { getConf } from '@jbrowse/core/configuration'
2
+ import { max, min } from '@jbrowse/core/util'
3
+ import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'
4
+ import { Assembly } from '@jbrowse/core/assemblyManager/assembly'
5
+
6
+ import { ChainData, ChainStats, ReducedFeature } from '../shared/fetchChains'
7
+ import { LinearReadCloudDisplayModel } from './model'
8
+ import { fillRectCtx, strokeRectCtx } from './util'
9
+ import {
10
+ getPairedInsertSizeAndOrientationColor,
11
+ getPairedInsertSizeColor,
12
+ getPairedOrientationColor,
13
+ } from '../shared/color'
14
+
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
+ export function drawPairChains({
26
+ ctx,
27
+ self,
28
+ chainData,
29
+ view,
30
+ asm,
31
+ }: {
32
+ ctx: CanvasRenderingContext2D
33
+ self: LinearReadCloudDisplayModel
34
+ chainData: ChainData
35
+ view: LinearGenomeViewModel
36
+ asm: Assembly
37
+ }) {
38
+ const coords: ChainCoord[] = []
39
+ const featureHeight = getConf(self, 'featureHeight')
40
+ const type = self.colorBy?.type || 'insertSizeAndOrientation'
41
+ const { chains, stats } = chainData
42
+
43
+ for (const chain of chains) {
44
+ // if we're looking at a paired read (flag 1) then assume it is just
45
+ // two reads (some small cases may defy this assumption such as
46
+ // secondary alignments but this may be uncommon)
47
+ if (chain.length > 1) {
48
+ const v0 = chain[0]
49
+ const v1 = chain[1]
50
+ const ra1 = asm.getCanonicalRefName(v0.refName) || v0.refName
51
+ const ra2 = asm.getCanonicalRefName(v1.refName) || v1.refName
52
+ const r1s = view.bpToPx({ refName: ra1, coord: v0.start })?.offsetPx
53
+ const r1e = view.bpToPx({ refName: ra1, coord: v0.end })?.offsetPx
54
+ const r2s = view.bpToPx({ refName: ra2, coord: v1.start })?.offsetPx
55
+ const r2e = view.bpToPx({ refName: ra2, coord: v1.end })?.offsetPx
56
+
57
+ let distance = 0
58
+
59
+ if (
60
+ r1s !== undefined &&
61
+ r1e !== undefined &&
62
+ r2s !== undefined &&
63
+ r2e !== undefined
64
+ ) {
65
+ if (v0.refName === v1.refName) {
66
+ const s = Math.min(v0.start, v1.start)
67
+ const e = Math.max(v0.end, v1.end)
68
+ distance = Math.abs(e - s)
69
+ }
70
+ coords.push({
71
+ r1s,
72
+ r1e,
73
+ r2s,
74
+ r2e,
75
+ v0,
76
+ v1,
77
+ distance,
78
+ })
79
+ }
80
+ } else if (self.drawSingletons) {
81
+ const v0 = chain[0]
82
+
83
+ const ra1 = asm.getCanonicalRefName(v0.refName) || v0.refName
84
+ const r1s = view.bpToPx({ refName: ra1, coord: v0.start })?.offsetPx
85
+ const r1e = view.bpToPx({ refName: ra1, coord: v0.end })?.offsetPx
86
+ if (r1s !== undefined && r1e !== undefined) {
87
+ const w1 = Math.max(r1e - r1s, 2)
88
+ fillRectCtx(r1s - view.offsetPx, 0, w1, featureHeight, ctx, '#f00')
89
+ strokeRectCtx(r1s - view.offsetPx, 0, w1, featureHeight, ctx, '#a00')
90
+ }
91
+ }
92
+ }
93
+
94
+ const maxD = Math.log(max(coords.map(c => c.distance)))
95
+ const minD = Math.max(Math.log(min(coords.map(c => c.distance))) - 1, 0)
96
+ const scaler = (self.height - 20) / (maxD - minD)
97
+ for (let i = 0; i < coords.length; i++) {
98
+ const { r1e, r1s, r2e, r2s, distance, v0, v1 } = coords[i]
99
+ const w1 = Math.max(r1e - r1s, 2)
100
+ const w2 = Math.max(r2e - r2s, 2)
101
+ const [fill, stroke] = getPairedColor({ type, v0, v1, stats }) || []
102
+ const top = (Math.log(distance) - minD) * scaler
103
+ const halfHeight = featureHeight / 2 - 0.5
104
+ const w = r2s - r1e
105
+ fillRectCtx(r1e - view.offsetPx, top + halfHeight, w, 1, ctx, 'black')
106
+ strokeRectCtx(r1s - view.offsetPx, top, w1, featureHeight, ctx, stroke)
107
+ strokeRectCtx(r2s - view.offsetPx, top, w2, featureHeight, ctx, stroke)
108
+ fillRectCtx(r1s - view.offsetPx, top, w1, featureHeight, ctx, fill)
109
+ fillRectCtx(r2s - view.offsetPx, top, w2, featureHeight, ctx, fill)
110
+ }
111
+ }
112
+
113
+ export function getPairedColor({
114
+ type,
115
+ v0,
116
+ v1,
117
+ stats,
118
+ }: {
119
+ type: string
120
+ v0: ReducedFeature
121
+ v1: ReducedFeature
122
+ stats?: ChainStats
123
+ }): readonly [string, string] | undefined {
124
+ if (type === 'insertSizeAndOrientation') {
125
+ return getPairedInsertSizeAndOrientationColor(v0, v1, stats)
126
+ } else if (type === 'orientation') {
127
+ return getPairedOrientationColor(v0)
128
+ } else if (type === 'insertSize') {
129
+ return getPairedInsertSizeColor(v0, v1, stats)
130
+ } else if (type === 'gradient') {
131
+ const s = Math.min(v0.start, v1.start)
132
+ const e = Math.max(v0.end, v1.end)
133
+ return [
134
+ `hsl(${Math.log10(Math.abs(e - s)) * 10},50%,50%)`,
135
+ `hsl(${Math.log10(Math.abs(e - s)) * 10},50%,30%)`,
136
+ ] as const
137
+ }
138
+ return undefined
139
+ }