@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
@@ -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
+ }
@@ -1,13 +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'
3
+ import { BaseDisplay } from '@jbrowse/core/pluggableElementTypes'
4
4
  import {
5
5
  AnyConfigurationSchemaType,
6
6
  ConfigurationReference,
7
- ConfigurationSchema,
8
7
  } from '@jbrowse/core/configuration'
9
- import { getContainingView, getSession } from '@jbrowse/core/util'
10
- import { BaseLinearDisplay } from '@jbrowse/plugin-linear-genome-view'
8
+ import { getSession } from '@jbrowse/core/util'
9
+ import {
10
+ FeatureDensityMixin,
11
+ TrackHeightMixin,
12
+ } from '@jbrowse/plugin-linear-genome-view'
11
13
 
12
14
  // icons
13
15
  import PaletteIcon from '@mui/icons-material/Palette'
@@ -15,9 +17,7 @@ import FilterListIcon from '@mui/icons-material/ClearAll'
15
17
 
16
18
  // locals
17
19
  import { FilterModel } from '../shared'
18
- import { fetchChains, ChainData } from '../shared/fetchChains'
19
- import drawFeats from './drawFeats'
20
- import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'
20
+ import { ChainData } from '../shared/fetchChains'
21
21
 
22
22
  // async
23
23
  const FilterByTagDlg = lazy(() => import('../shared/FilterByTag'))
@@ -29,21 +29,17 @@ interface Filter {
29
29
  tagFilter?: { tag: string; value: string }
30
30
  }
31
31
 
32
- // stabilize clipid under test for snapshot
33
- function getId(id: string) {
34
- const isJest = typeof jest === 'undefined'
35
- return `cloud-clip-${isJest ? id : 'jest'}`
36
- }
37
-
38
32
  /**
39
33
  * #stateModel LinearReadCloudDisplay
40
- * extends `BaseLinearDisplay`
34
+ * extends `BaseDisplay`, it is not a block based track, hence not BaseLinearDisplay
41
35
  */
42
36
  function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
43
37
  return types
44
38
  .compose(
45
39
  'LinearReadCloudDisplay',
46
- BaseLinearDisplay,
40
+ BaseDisplay,
41
+ TrackHeightMixin(),
42
+ FeatureDensityMixin(),
47
43
  types.model({
48
44
  /**
49
45
  * #property
@@ -69,39 +65,38 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
69
65
  extra: types.frozen(),
70
66
  }),
71
67
  ),
68
+
69
+ /**
70
+ * #property
71
+ */
72
+ drawSingletons: true,
72
73
  }),
73
74
  )
74
75
  .volatile(() => ({
75
76
  loading: false,
76
- drawn: false,
77
77
  chainData: undefined as ChainData | undefined,
78
+ lastDrawnOffsetPx: undefined as number | undefined,
79
+ lastDrawnBpPerPx: 0,
78
80
  ref: null as HTMLCanvasElement | null,
79
- lastDrawnOffsetPx: 0,
80
81
  }))
81
82
  .actions(self => ({
82
83
  /**
83
84
  * #action
84
- * internal, a reference to a HTMLCanvas because we use a autorun to draw the canvas
85
85
  */
86
- reload() {
87
- self.error = undefined
86
+ setDrawSingletons(f: boolean) {
87
+ self.drawSingletons = f
88
88
  },
89
89
  /**
90
90
  * #action
91
91
  */
92
- setRef(ref: HTMLCanvasElement | null) {
93
- self.ref = ref
94
- },
95
-
96
- setColorScheme(s: { type: string }) {
97
- self.colorBy = cast(s)
92
+ setLastDrawnOffsetPx(n: number) {
93
+ self.lastDrawnOffsetPx = n
98
94
  },
99
-
100
95
  /**
101
96
  * #action
102
97
  */
103
- setChainData(args: ChainData) {
104
- self.chainData = args
98
+ setLastDrawnBpPerPx(n: number) {
99
+ self.lastDrawnBpPerPx = n
105
100
  },
106
101
 
107
102
  /**
@@ -110,29 +105,44 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
110
105
  setLoading(f: boolean) {
111
106
  self.loading = f
112
107
  },
113
-
114
108
  /**
115
109
  * #action
116
110
  */
117
- setDrawn(f: boolean) {
118
- self.drawn = f
111
+ reload() {
112
+ self.error = undefined
113
+ },
114
+ /**
115
+ * #action
116
+ * internal, a reference to a HTMLCanvas because we use a autorun to draw
117
+ * the canvas
118
+ */
119
+ setRef(ref: HTMLCanvasElement | null) {
120
+ self.ref = ref
121
+ },
122
+
123
+ setColorScheme(s: { type: string }) {
124
+ self.colorBy = cast(s)
119
125
  },
120
126
 
121
127
  /**
122
128
  * #action
123
129
  */
124
- setFilterBy(filter: Filter) {
125
- self.filterBy = cast(filter)
130
+ setChainData(args: ChainData) {
131
+ self.chainData = args
126
132
  },
127
133
 
128
134
  /**
129
135
  * #action
130
136
  */
131
- setLastDrawnOffsetPx(n: number) {
132
- self.lastDrawnOffsetPx = n
137
+ setFilterBy(filter: Filter) {
138
+ self.filterBy = cast(filter)
139
+ },
140
+ }))
141
+ .views(self => ({
142
+ get drawn() {
143
+ return self.lastDrawnOffsetPx !== undefined
133
144
  },
134
145
  }))
135
-
136
146
  .views(self => {
137
147
  const {
138
148
  trackMenuItems: superTrackMenuItems,
@@ -140,25 +150,12 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
140
150
  } = self
141
151
 
142
152
  return {
143
- /**
144
- * #getter
145
- */
146
- get ready() {
147
- return !!self.chainData
148
- },
149
- // we don't use a server side renderer, but we need to provide this
150
- // to avoid confusing the system currently
151
- get rendererTypeName() {
152
- return 'PileupRenderer'
153
- },
154
153
  // we don't use a server side renderer, so this fills in minimal
155
154
  // info so as not to crash
156
155
  renderProps() {
157
156
  return {
158
157
  ...superRenderProps(),
159
- // never ready, we don't want to use server side render
160
- notReady: true,
161
- config: ConfigurationSchema('empty', {}).create(),
158
+ notReady: !self.chainData,
162
159
  }
163
160
  },
164
161
 
@@ -168,6 +165,12 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
168
165
  trackMenuItems() {
169
166
  return [
170
167
  ...superTrackMenuItems(),
168
+ {
169
+ label: 'Draw singletons',
170
+ type: 'checkbox',
171
+ checked: self.drawSingletons,
172
+ onClick: () => self.setDrawSingletons(!self.drawSingletons),
173
+ },
171
174
  {
172
175
  label: 'Filter by',
173
176
  icon: FilterListIcon,
@@ -208,90 +211,28 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
208
211
  /**
209
212
  * #method
210
213
  */
211
- async renderSvg(opts: { rasterizeLayers?: boolean }) {
212
- const view = getContainingView(self) as LinearGenomeViewModel
213
- const width = view.dynamicBlocks.totalWidthPx
214
- const height = self.height
215
- let str
216
- if (opts.rasterizeLayers) {
217
- const canvas = document.createElement('canvas')
218
- canvas.width = width * 2
219
- canvas.height = height * 2
220
- const ctx = canvas.getContext('2d')
221
- if (!ctx) {
222
- return
223
- }
224
- ctx.scale(2, 2)
225
- await drawFeats(self, ctx)
226
- str = (
227
- <image
228
- width={width}
229
- height={height}
230
- xlinkHref={canvas.toDataURL('image/png')}
231
- />
232
- )
233
- } else {
234
- // @ts-ignore
235
- const C2S = await import('canvas2svg')
236
- const ctx = new C2S.default(width, height)
237
- await drawFeats(self, ctx)
238
- const clipid = getId(self.id)
239
- str = (
240
- <>
241
- <defs>
242
- <clipPath id={clipid}>
243
- <rect x={0} y={0} width={width} height={height} />
244
- </clipPath>
245
- </defs>
246
- <g
247
- /* eslint-disable-next-line react/no-danger */
248
- dangerouslySetInnerHTML={{
249
- __html: ctx.getSvg().innerHTML,
250
- }}
251
- clipPath={`url(#${clipid})`}
252
- />
253
- </>
254
- )
255
- }
256
-
257
- return <g>{str}</g>
214
+ async renderSvg(opts: {
215
+ rasterizeLayers?: boolean
216
+ }): Promise<React.ReactNode> {
217
+ const { renderSvg } = await import('../shared/renderSvg')
218
+ const { drawFeats } = await import('./drawFeats')
219
+ return renderSvg(self as LinearReadCloudDisplayModel, opts, drawFeats)
258
220
  },
259
221
  }
260
222
  })
261
223
  .actions(self => ({
262
224
  afterAttach() {
263
- addDisposer(
264
- self,
265
- autorun(() => fetchChains(self), { delay: 1000 }),
266
- )
267
-
268
- addDisposer(
269
- self,
270
- autorun(
271
- async () => {
272
- try {
273
- const canvas = self.ref
274
- if (!canvas) {
275
- return
276
- }
277
- const ctx = canvas.getContext('2d')
278
- if (!ctx) {
279
- return
280
- }
281
- ctx.clearRect(0, 0, canvas.width, self.height * 2)
282
- ctx.resetTransform()
283
- ctx.scale(2, 2)
284
-
285
- await drawFeats(self, ctx)
286
- self.setDrawn(true)
287
- } catch (e) {
288
- console.error(e)
289
- self.setError(e)
290
- }
291
- },
292
- { delay: 1000 },
293
- ),
294
- )
225
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
226
+ ;(async () => {
227
+ try {
228
+ const { doAfterAttach } = await import('../shared/afterAttach')
229
+ const { drawFeats } = await import('./drawFeats')
230
+ doAfterAttach(self, drawFeats)
231
+ } catch (e) {
232
+ console.error(e)
233
+ self.setError(e)
234
+ }
235
+ })()
295
236
  },
296
237
  }))
297
238
  }
@@ -0,0 +1,47 @@
1
+ // avoid drawing negative width features for SVG exports
2
+ export function fillRectCtx(
3
+ x: number,
4
+ y: number,
5
+ width: number,
6
+ height: number,
7
+ ctx: CanvasRenderingContext2D,
8
+ fillColor?: string,
9
+ ) {
10
+ if (width < 0) {
11
+ x += width
12
+ width = -width
13
+ }
14
+ if (height < 0) {
15
+ y += height
16
+ height = -height
17
+ }
18
+
19
+ if (fillColor) {
20
+ ctx.fillStyle = fillColor
21
+ }
22
+
23
+ ctx.fillRect(x, y, width, height)
24
+ }
25
+
26
+ export function strokeRectCtx(
27
+ x: number,
28
+ y: number,
29
+ width: number,
30
+ height: number,
31
+ ctx: CanvasRenderingContext2D,
32
+ strokeColor?: 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 (strokeColor) {
44
+ ctx.strokeStyle = strokeColor
45
+ }
46
+ ctx.strokeRect(x, y, width, height)
47
+ }