@jbrowse/plugin-alignments 2.4.2 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +2 -2
  2. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.d.ts +2 -2
  3. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js +2 -1
  4. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js.map +1 -1
  5. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.d.ts +2 -2
  6. package/dist/AlignmentsFeatureDetail/index.d.ts +4 -1
  7. package/dist/AlignmentsTrack/configSchemaF.d.ts +74 -0
  8. package/dist/AlignmentsTrack/configSchemaF.js +19 -0
  9. package/dist/AlignmentsTrack/configSchemaF.js.map +1 -0
  10. package/dist/AlignmentsTrack/index.js +2 -15
  11. package/dist/AlignmentsTrack/index.js.map +1 -1
  12. package/dist/BamAdapter/BamAdapter.d.ts +2 -2
  13. package/dist/BamAdapter/BamAdapter.js +27 -32
  14. package/dist/BamAdapter/BamAdapter.js.map +1 -1
  15. package/dist/BamAdapter/BamSlightlyLazyFeature.d.ts +1 -1
  16. package/dist/BamAdapter/configSchema.d.ts +50 -1
  17. package/dist/CramAdapter/CramAdapter.d.ts +1 -1
  18. package/dist/CramAdapter/CramAdapter.js +49 -47
  19. package/dist/CramAdapter/CramAdapter.js.map +1 -1
  20. package/dist/CramAdapter/CramSlightlyLazyFeature.js +3 -5
  21. package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  22. package/dist/CramAdapter/CramTestAdapters.js +3 -3
  23. package/dist/CramAdapter/CramTestAdapters.js.map +1 -1
  24. package/dist/CramAdapter/configSchema.d.ts +40 -1
  25. package/dist/HtsgetBamAdapter/configSchema.d.ts +26 -1
  26. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +2 -2
  27. package/dist/LinearAlignmentsDisplay/models/configSchema.d.ts +39 -1
  28. package/dist/LinearAlignmentsDisplay/models/model.d.ts +20 -6
  29. package/dist/LinearAlignmentsDisplay/models/model.js +9 -4
  30. package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -1
  31. package/dist/LinearPileupDisplay/components/ColorByModifications.d.ts +2 -2
  32. package/dist/LinearPileupDisplay/components/ColorByModifications.js +3 -23
  33. package/dist/LinearPileupDisplay/components/ColorByModifications.js.map +1 -1
  34. package/dist/LinearPileupDisplay/components/ColorByTag.d.ts +2 -2
  35. package/dist/LinearPileupDisplay/components/ColorByTag.js +2 -6
  36. package/dist/LinearPileupDisplay/components/ColorByTag.js.map +1 -1
  37. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +3 -3
  38. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +6 -6
  39. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -1
  40. package/dist/LinearPileupDisplay/components/ModificationsTable.d.ts +4 -0
  41. package/dist/LinearPileupDisplay/components/ModificationsTable.js +29 -0
  42. package/dist/LinearPileupDisplay/components/ModificationsTable.js.map +1 -0
  43. package/dist/LinearPileupDisplay/components/SetFeatureHeight.d.ts +2 -2
  44. package/dist/LinearPileupDisplay/components/SetMaxHeight.d.ts +2 -2
  45. package/dist/LinearPileupDisplay/components/SetMaxHeight.js +3 -5
  46. package/dist/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -1
  47. package/dist/LinearPileupDisplay/components/SortByTag.d.ts +2 -2
  48. package/dist/LinearPileupDisplay/configSchema.d.ts +57 -1
  49. package/dist/LinearPileupDisplay/model.d.ts +160 -80
  50. package/dist/LinearPileupDisplay/model.js +181 -138
  51. package/dist/LinearPileupDisplay/model.js.map +1 -1
  52. package/dist/LinearReadArcsDisplay/components/ReactComponent.d.ts +2 -2
  53. package/dist/LinearReadArcsDisplay/components/ReactComponent.js +36 -39
  54. package/dist/LinearReadArcsDisplay/components/ReactComponent.js.map +1 -1
  55. package/dist/LinearReadArcsDisplay/configSchema.d.ts +59 -1
  56. package/dist/LinearReadArcsDisplay/drawFeats.d.ts +2 -15
  57. package/dist/LinearReadArcsDisplay/drawFeats.js +58 -66
  58. package/dist/LinearReadArcsDisplay/drawFeats.js.map +1 -1
  59. package/dist/LinearReadArcsDisplay/model.d.ts +58 -193
  60. package/dist/LinearReadArcsDisplay/model.js +65 -115
  61. package/dist/LinearReadArcsDisplay/model.js.map +1 -1
  62. package/dist/LinearReadArcsDisplay/util.d.ts +2 -0
  63. package/dist/LinearReadArcsDisplay/util.js +13 -0
  64. package/dist/LinearReadArcsDisplay/util.js.map +1 -0
  65. package/dist/LinearReadCloudDisplay/components/ReactComponent.d.ts +2 -2
  66. package/dist/LinearReadCloudDisplay/components/ReactComponent.js +34 -36
  67. package/dist/LinearReadCloudDisplay/components/ReactComponent.js.map +1 -1
  68. package/dist/LinearReadCloudDisplay/configSchema.d.ts +52 -1
  69. package/dist/LinearReadCloudDisplay/drawFeats.d.ts +2 -10
  70. package/dist/LinearReadCloudDisplay/drawFeats.js +11 -127
  71. package/dist/LinearReadCloudDisplay/drawFeats.js.map +1 -1
  72. package/dist/LinearReadCloudDisplay/drawLongReadChains.d.ts +11 -0
  73. package/dist/LinearReadCloudDisplay/drawLongReadChains.js +69 -0
  74. package/dist/LinearReadCloudDisplay/drawLongReadChains.js.map +1 -0
  75. package/dist/LinearReadCloudDisplay/drawPairChains.d.ts +17 -0
  76. package/dist/LinearReadCloudDisplay/drawPairChains.js +100 -0
  77. package/dist/LinearReadCloudDisplay/drawPairChains.js.map +1 -0
  78. package/dist/LinearReadCloudDisplay/model.d.ts +65 -196
  79. package/dist/LinearReadCloudDisplay/model.js +55 -92
  80. package/dist/LinearReadCloudDisplay/model.js.map +1 -1
  81. package/dist/LinearReadCloudDisplay/util.d.ts +2 -0
  82. package/dist/LinearReadCloudDisplay/util.js +35 -0
  83. package/dist/LinearReadCloudDisplay/util.js.map +1 -0
  84. package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +2 -2
  85. package/dist/LinearSNPCoverageDisplay/models/configSchema.d.ts +79 -1
  86. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +157 -70
  87. package/dist/LinearSNPCoverageDisplay/models/model.js +46 -33
  88. package/dist/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  89. package/dist/MismatchParser/index.d.ts +7 -2
  90. package/dist/MismatchParser/index.js +44 -5
  91. package/dist/MismatchParser/index.js.map +1 -1
  92. package/dist/PileupRPC/methods/GetReducedFeatures.d.ts +15 -2
  93. package/dist/PileupRPC/methods/GetReducedFeatures.js +1 -8
  94. package/dist/PileupRPC/methods/GetReducedFeatures.js.map +1 -1
  95. package/dist/PileupRenderer/PileupLayoutSession.d.ts +1 -1
  96. package/dist/PileupRenderer/PileupRenderer.d.ts +4 -117
  97. package/dist/PileupRenderer/PileupRenderer.js +18 -752
  98. package/dist/PileupRenderer/PileupRenderer.js.map +1 -1
  99. package/dist/PileupRenderer/colorBy.d.ts +7 -0
  100. package/dist/PileupRenderer/colorBy.js +69 -0
  101. package/dist/PileupRenderer/colorBy.js.map +1 -0
  102. package/dist/PileupRenderer/components/PileupRendering.d.ts +7 -2
  103. package/dist/PileupRenderer/components/PileupRendering.js +17 -18
  104. package/dist/PileupRenderer/components/PileupRendering.js.map +1 -1
  105. package/dist/PileupRenderer/configSchema.d.ts +87 -1
  106. package/dist/PileupRenderer/getAlignmentShapeColor.d.ts +10 -0
  107. package/dist/PileupRenderer/getAlignmentShapeColor.js +60 -0
  108. package/dist/PileupRenderer/getAlignmentShapeColor.js.map +1 -0
  109. package/dist/PileupRenderer/index.js +1 -1
  110. package/dist/PileupRenderer/index.js.map +1 -1
  111. package/dist/PileupRenderer/layoutFeature.d.ts +18 -0
  112. package/dist/PileupRenderer/layoutFeature.js +41 -0
  113. package/dist/PileupRenderer/layoutFeature.js.map +1 -0
  114. package/dist/PileupRenderer/layoutFeatures.d.ts +2 -0
  115. package/dist/PileupRenderer/layoutFeatures.js +35 -0
  116. package/dist/PileupRenderer/layoutFeatures.js.map +1 -0
  117. package/dist/PileupRenderer/makeImageData.d.ts +17 -0
  118. package/dist/PileupRenderer/makeImageData.js +64 -0
  119. package/dist/PileupRenderer/makeImageData.js.map +1 -0
  120. package/dist/PileupRenderer/renderAlignment.d.ts +13 -0
  121. package/dist/PileupRenderer/renderAlignment.js +72 -0
  122. package/dist/PileupRenderer/renderAlignment.js.map +1 -0
  123. package/dist/PileupRenderer/renderAlignmentShape.d.ts +7 -0
  124. package/dist/PileupRenderer/renderAlignmentShape.js +41 -0
  125. package/dist/PileupRenderer/renderAlignmentShape.js.map +1 -0
  126. package/dist/PileupRenderer/renderMethylation.d.ts +11 -0
  127. package/dist/PileupRenderer/renderMethylation.js +63 -0
  128. package/dist/PileupRenderer/renderMethylation.js.map +1 -0
  129. package/dist/PileupRenderer/renderMismatches.d.ts +21 -0
  130. package/dist/PileupRenderer/renderMismatches.js +135 -0
  131. package/dist/PileupRenderer/renderMismatches.js.map +1 -0
  132. package/dist/PileupRenderer/renderModifications.d.ts +11 -0
  133. package/dist/PileupRenderer/renderModifications.js +54 -0
  134. package/dist/PileupRenderer/renderModifications.js.map +1 -0
  135. package/dist/PileupRenderer/renderPerBaseLettering.d.ts +13 -0
  136. package/dist/PileupRenderer/renderPerBaseLettering.js +47 -0
  137. package/dist/PileupRenderer/renderPerBaseLettering.js.map +1 -0
  138. package/dist/PileupRenderer/renderPerBaseQuality.d.ts +9 -0
  139. package/dist/PileupRenderer/renderPerBaseQuality.js +39 -0
  140. package/dist/PileupRenderer/renderPerBaseQuality.js.map +1 -0
  141. package/dist/PileupRenderer/renderSoftClipping.d.ts +13 -0
  142. package/dist/PileupRenderer/renderSoftClipping.js +48 -0
  143. package/dist/PileupRenderer/renderSoftClipping.js.map +1 -0
  144. package/dist/PileupRenderer/sortUtil.js +1 -2
  145. package/dist/PileupRenderer/sortUtil.js.map +1 -1
  146. package/dist/PileupRenderer/util.d.ts +24 -0
  147. package/dist/PileupRenderer/util.js +51 -0
  148. package/dist/PileupRenderer/util.js.map +1 -0
  149. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +1 -3
  150. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +2 -5
  151. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -1
  152. package/dist/SNPCoverageAdapter/configSchema.d.ts +10 -1
  153. package/dist/SNPCoverageAdapter/generateCoverageBins.d.ts +3 -43
  154. package/dist/SNPCoverageAdapter/generateCoverageBins.js +86 -59
  155. package/dist/SNPCoverageAdapter/generateCoverageBins.js.map +1 -1
  156. package/dist/SNPCoverageAdapter/index.js +0 -2
  157. package/dist/SNPCoverageAdapter/index.js.map +1 -1
  158. package/dist/SNPCoverageAdapter/util.d.ts +29 -0
  159. package/dist/SNPCoverageAdapter/util.js +3 -0
  160. package/dist/SNPCoverageAdapter/util.js.map +1 -0
  161. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +1 -1
  162. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +2 -2
  163. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
  164. package/dist/SNPCoverageRenderer/configSchema.d.ts +47 -1
  165. package/dist/SNPCoverageRenderer/configSchema.js +5 -0
  166. package/dist/SNPCoverageRenderer/configSchema.js.map +1 -1
  167. package/dist/shared/BaseDisplayComponent.d.ts +8 -0
  168. package/dist/shared/BaseDisplayComponent.js +49 -0
  169. package/dist/shared/BaseDisplayComponent.js.map +1 -0
  170. package/dist/shared/FilterByTag.d.ts +13 -12
  171. package/dist/shared/FilterByTag.js +8 -13
  172. package/dist/shared/FilterByTag.js.map +1 -1
  173. package/dist/shared/afterAttach.d.ts +2 -0
  174. package/dist/shared/afterAttach.js +44 -0
  175. package/dist/shared/afterAttach.js.map +1 -0
  176. package/dist/shared/color.d.ts +44 -6
  177. package/dist/shared/color.js +57 -23
  178. package/dist/shared/color.js.map +1 -1
  179. package/dist/shared/fetchChains.d.ts +3 -2
  180. package/dist/shared/fetchChains.js +14 -20
  181. package/dist/shared/fetchChains.js.map +1 -1
  182. package/dist/shared/renderSvg.d.ts +7 -0
  183. package/dist/shared/renderSvg.js +69 -0
  184. package/dist/shared/renderSvg.js.map +1 -0
  185. package/dist/shared/util.d.ts +2 -0
  186. package/dist/shared/util.js +13 -0
  187. package/dist/shared/util.js.map +1 -0
  188. package/dist/util.d.ts +16 -2
  189. package/dist/util.js +45 -4
  190. package/dist/util.js.map +1 -1
  191. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +2 -2
  192. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.d.ts +2 -2
  193. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js +3 -2
  194. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js.map +1 -1
  195. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.d.ts +2 -2
  196. package/esm/AlignmentsFeatureDetail/index.d.ts +4 -1
  197. package/esm/AlignmentsTrack/configSchemaF.d.ts +74 -0
  198. package/esm/AlignmentsTrack/configSchemaF.js +16 -0
  199. package/esm/AlignmentsTrack/configSchemaF.js.map +1 -0
  200. package/esm/AlignmentsTrack/index.js +3 -16
  201. package/esm/AlignmentsTrack/index.js.map +1 -1
  202. package/esm/BamAdapter/BamAdapter.d.ts +2 -2
  203. package/esm/BamAdapter/BamAdapter.js +27 -32
  204. package/esm/BamAdapter/BamAdapter.js.map +1 -1
  205. package/esm/BamAdapter/BamSlightlyLazyFeature.d.ts +1 -1
  206. package/esm/BamAdapter/configSchema.d.ts +50 -1
  207. package/esm/CramAdapter/CramAdapter.d.ts +1 -1
  208. package/esm/CramAdapter/CramAdapter.js +50 -48
  209. package/esm/CramAdapter/CramAdapter.js.map +1 -1
  210. package/esm/CramAdapter/CramSlightlyLazyFeature.js +3 -5
  211. package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  212. package/esm/CramAdapter/CramTestAdapters.js +2 -2
  213. package/esm/CramAdapter/CramTestAdapters.js.map +1 -1
  214. package/esm/CramAdapter/configSchema.d.ts +40 -1
  215. package/esm/HtsgetBamAdapter/configSchema.d.ts +26 -1
  216. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +2 -2
  217. package/esm/LinearAlignmentsDisplay/models/configSchema.d.ts +39 -1
  218. package/esm/LinearAlignmentsDisplay/models/model.d.ts +20 -6
  219. package/esm/LinearAlignmentsDisplay/models/model.js +9 -4
  220. package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -1
  221. package/esm/LinearPileupDisplay/components/ColorByModifications.d.ts +2 -2
  222. package/esm/LinearPileupDisplay/components/ColorByModifications.js +2 -22
  223. package/esm/LinearPileupDisplay/components/ColorByModifications.js.map +1 -1
  224. package/esm/LinearPileupDisplay/components/ColorByTag.d.ts +2 -2
  225. package/esm/LinearPileupDisplay/components/ColorByTag.js +2 -6
  226. package/esm/LinearPileupDisplay/components/ColorByTag.js.map +1 -1
  227. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +3 -3
  228. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +6 -6
  229. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -1
  230. package/esm/LinearPileupDisplay/components/ModificationsTable.d.ts +4 -0
  231. package/esm/LinearPileupDisplay/components/ModificationsTable.js +23 -0
  232. package/esm/LinearPileupDisplay/components/ModificationsTable.js.map +1 -0
  233. package/esm/LinearPileupDisplay/components/SetFeatureHeight.d.ts +2 -2
  234. package/esm/LinearPileupDisplay/components/SetMaxHeight.d.ts +2 -2
  235. package/esm/LinearPileupDisplay/components/SetMaxHeight.js +3 -5
  236. package/esm/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -1
  237. package/esm/LinearPileupDisplay/components/SortByTag.d.ts +2 -2
  238. package/esm/LinearPileupDisplay/configSchema.d.ts +57 -1
  239. package/esm/LinearPileupDisplay/model.d.ts +160 -80
  240. package/esm/LinearPileupDisplay/model.js +182 -139
  241. package/esm/LinearPileupDisplay/model.js.map +1 -1
  242. package/esm/LinearReadArcsDisplay/components/ReactComponent.d.ts +2 -2
  243. package/esm/LinearReadArcsDisplay/components/ReactComponent.js +13 -39
  244. package/esm/LinearReadArcsDisplay/components/ReactComponent.js.map +1 -1
  245. package/esm/LinearReadArcsDisplay/configSchema.d.ts +59 -1
  246. package/esm/LinearReadArcsDisplay/drawFeats.d.ts +2 -15
  247. package/esm/LinearReadArcsDisplay/drawFeats.js +56 -63
  248. package/esm/LinearReadArcsDisplay/drawFeats.js.map +1 -1
  249. package/esm/LinearReadArcsDisplay/model.d.ts +58 -193
  250. package/esm/LinearReadArcsDisplay/model.js +69 -119
  251. package/esm/LinearReadArcsDisplay/model.js.map +1 -1
  252. package/esm/LinearReadArcsDisplay/util.d.ts +2 -0
  253. package/esm/LinearReadArcsDisplay/util.js +9 -0
  254. package/esm/LinearReadArcsDisplay/util.js.map +1 -0
  255. package/esm/LinearReadCloudDisplay/components/ReactComponent.d.ts +2 -2
  256. package/esm/LinearReadCloudDisplay/components/ReactComponent.js +11 -36
  257. package/esm/LinearReadCloudDisplay/components/ReactComponent.js.map +1 -1
  258. package/esm/LinearReadCloudDisplay/configSchema.d.ts +52 -1
  259. package/esm/LinearReadCloudDisplay/drawFeats.d.ts +2 -10
  260. package/esm/LinearReadCloudDisplay/drawFeats.js +9 -126
  261. package/esm/LinearReadCloudDisplay/drawFeats.js.map +1 -1
  262. package/esm/LinearReadCloudDisplay/drawLongReadChains.d.ts +11 -0
  263. package/esm/LinearReadCloudDisplay/drawLongReadChains.js +65 -0
  264. package/esm/LinearReadCloudDisplay/drawLongReadChains.js.map +1 -0
  265. package/esm/LinearReadCloudDisplay/drawPairChains.d.ts +17 -0
  266. package/esm/LinearReadCloudDisplay/drawPairChains.js +95 -0
  267. package/esm/LinearReadCloudDisplay/drawPairChains.js.map +1 -0
  268. package/esm/LinearReadCloudDisplay/model.d.ts +65 -196
  269. package/esm/LinearReadCloudDisplay/model.js +59 -96
  270. package/esm/LinearReadCloudDisplay/model.js.map +1 -1
  271. package/esm/LinearReadCloudDisplay/util.d.ts +2 -0
  272. package/esm/LinearReadCloudDisplay/util.js +30 -0
  273. package/esm/LinearReadCloudDisplay/util.js.map +1 -0
  274. package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +2 -2
  275. package/esm/LinearSNPCoverageDisplay/models/configSchema.d.ts +79 -1
  276. package/esm/LinearSNPCoverageDisplay/models/model.d.ts +157 -70
  277. package/esm/LinearSNPCoverageDisplay/models/model.js +48 -35
  278. package/esm/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  279. package/esm/MismatchParser/index.d.ts +7 -2
  280. package/esm/MismatchParser/index.js +41 -4
  281. package/esm/MismatchParser/index.js.map +1 -1
  282. package/esm/PileupRPC/methods/GetReducedFeatures.d.ts +15 -2
  283. package/esm/PileupRPC/methods/GetReducedFeatures.js +2 -9
  284. package/esm/PileupRPC/methods/GetReducedFeatures.js.map +1 -1
  285. package/esm/PileupRenderer/PileupLayoutSession.d.ts +1 -1
  286. package/esm/PileupRenderer/PileupRenderer.d.ts +4 -117
  287. package/esm/PileupRenderer/PileupRenderer.js +20 -754
  288. package/esm/PileupRenderer/PileupRenderer.js.map +1 -1
  289. package/esm/PileupRenderer/colorBy.d.ts +7 -0
  290. package/esm/PileupRenderer/colorBy.js +61 -0
  291. package/esm/PileupRenderer/colorBy.js.map +1 -0
  292. package/esm/PileupRenderer/components/PileupRendering.d.ts +7 -2
  293. package/esm/PileupRenderer/components/PileupRendering.js +17 -18
  294. package/esm/PileupRenderer/components/PileupRendering.js.map +1 -1
  295. package/esm/PileupRenderer/configSchema.d.ts +87 -1
  296. package/esm/PileupRenderer/getAlignmentShapeColor.d.ts +10 -0
  297. package/esm/PileupRenderer/getAlignmentShapeColor.js +56 -0
  298. package/esm/PileupRenderer/getAlignmentShapeColor.js.map +1 -0
  299. package/esm/PileupRenderer/index.js +1 -1
  300. package/esm/PileupRenderer/index.js.map +1 -1
  301. package/esm/PileupRenderer/layoutFeature.d.ts +18 -0
  302. package/esm/PileupRenderer/layoutFeature.js +37 -0
  303. package/esm/PileupRenderer/layoutFeature.js.map +1 -0
  304. package/esm/PileupRenderer/layoutFeatures.d.ts +2 -0
  305. package/esm/PileupRenderer/layoutFeatures.js +31 -0
  306. package/esm/PileupRenderer/layoutFeatures.js.map +1 -0
  307. package/esm/PileupRenderer/makeImageData.d.ts +17 -0
  308. package/esm/PileupRenderer/makeImageData.js +60 -0
  309. package/esm/PileupRenderer/makeImageData.js.map +1 -0
  310. package/esm/PileupRenderer/renderAlignment.d.ts +13 -0
  311. package/esm/PileupRenderer/renderAlignment.js +68 -0
  312. package/esm/PileupRenderer/renderAlignment.js.map +1 -0
  313. package/esm/PileupRenderer/renderAlignmentShape.d.ts +7 -0
  314. package/esm/PileupRenderer/renderAlignmentShape.js +37 -0
  315. package/esm/PileupRenderer/renderAlignmentShape.js.map +1 -0
  316. package/esm/PileupRenderer/renderMethylation.d.ts +11 -0
  317. package/esm/PileupRenderer/renderMethylation.js +59 -0
  318. package/esm/PileupRenderer/renderMethylation.js.map +1 -0
  319. package/esm/PileupRenderer/renderMismatches.d.ts +21 -0
  320. package/esm/PileupRenderer/renderMismatches.js +131 -0
  321. package/esm/PileupRenderer/renderMismatches.js.map +1 -0
  322. package/esm/PileupRenderer/renderModifications.d.ts +11 -0
  323. package/esm/PileupRenderer/renderModifications.js +50 -0
  324. package/esm/PileupRenderer/renderModifications.js.map +1 -0
  325. package/esm/PileupRenderer/renderPerBaseLettering.d.ts +13 -0
  326. package/esm/PileupRenderer/renderPerBaseLettering.js +43 -0
  327. package/esm/PileupRenderer/renderPerBaseLettering.js.map +1 -0
  328. package/esm/PileupRenderer/renderPerBaseQuality.d.ts +9 -0
  329. package/esm/PileupRenderer/renderPerBaseQuality.js +35 -0
  330. package/esm/PileupRenderer/renderPerBaseQuality.js.map +1 -0
  331. package/esm/PileupRenderer/renderSoftClipping.d.ts +13 -0
  332. package/esm/PileupRenderer/renderSoftClipping.js +44 -0
  333. package/esm/PileupRenderer/renderSoftClipping.js.map +1 -0
  334. package/esm/PileupRenderer/sortUtil.js +1 -2
  335. package/esm/PileupRenderer/sortUtil.js.map +1 -1
  336. package/esm/PileupRenderer/util.d.ts +24 -0
  337. package/esm/PileupRenderer/util.js +42 -0
  338. package/esm/PileupRenderer/util.js.map +1 -0
  339. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +1 -3
  340. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js +2 -4
  341. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -1
  342. package/esm/SNPCoverageAdapter/configSchema.d.ts +10 -1
  343. package/esm/SNPCoverageAdapter/generateCoverageBins.d.ts +3 -43
  344. package/esm/SNPCoverageAdapter/generateCoverageBins.js +87 -60
  345. package/esm/SNPCoverageAdapter/generateCoverageBins.js.map +1 -1
  346. package/esm/SNPCoverageAdapter/index.js +0 -2
  347. package/esm/SNPCoverageAdapter/index.js.map +1 -1
  348. package/esm/SNPCoverageAdapter/util.d.ts +29 -0
  349. package/esm/SNPCoverageAdapter/util.js +2 -0
  350. package/esm/SNPCoverageAdapter/util.js.map +1 -0
  351. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +1 -1
  352. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +2 -2
  353. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
  354. package/esm/SNPCoverageRenderer/configSchema.d.ts +47 -1
  355. package/esm/SNPCoverageRenderer/configSchema.js +5 -0
  356. package/esm/SNPCoverageRenderer/configSchema.js.map +1 -1
  357. package/esm/shared/BaseDisplayComponent.d.ts +8 -0
  358. package/esm/shared/BaseDisplayComponent.js +44 -0
  359. package/esm/shared/BaseDisplayComponent.js.map +1 -0
  360. package/esm/shared/FilterByTag.d.ts +13 -12
  361. package/esm/shared/FilterByTag.js +8 -13
  362. package/esm/shared/FilterByTag.js.map +1 -1
  363. package/esm/shared/afterAttach.d.ts +2 -0
  364. package/esm/shared/afterAttach.js +40 -0
  365. package/esm/shared/afterAttach.js.map +1 -0
  366. package/esm/shared/color.d.ts +44 -6
  367. package/esm/shared/color.js +54 -20
  368. package/esm/shared/color.js.map +1 -1
  369. package/esm/shared/fetchChains.d.ts +3 -2
  370. package/esm/shared/fetchChains.js +14 -20
  371. package/esm/shared/fetchChains.js.map +1 -1
  372. package/esm/shared/renderSvg.d.ts +7 -0
  373. package/esm/shared/renderSvg.js +39 -0
  374. package/esm/shared/renderSvg.js.map +1 -0
  375. package/esm/shared/util.d.ts +2 -0
  376. package/esm/shared/util.js +9 -0
  377. package/esm/shared/util.js.map +1 -0
  378. package/esm/util.d.ts +16 -2
  379. package/esm/util.js +42 -3
  380. package/esm/util.js.map +1 -1
  381. package/package.json +3 -3
  382. package/src/AlignmentsFeatureDetail/AlignmentsFeatureFlags.tsx +3 -5
  383. package/src/AlignmentsFeatureDetail/__snapshots__/index.test.tsx.snap +1 -2
  384. package/src/AlignmentsTrack/configSchemaF.ts +22 -0
  385. package/src/AlignmentsTrack/index.ts +3 -24
  386. package/src/BamAdapter/BamAdapter.ts +46 -44
  387. package/src/CombinationTest.test.ts +2 -2
  388. package/src/CramAdapter/CramAdapter.ts +70 -56
  389. package/src/CramAdapter/CramSlightlyLazyFeature.ts +2 -5
  390. package/src/CramAdapter/CramTestAdapters.ts +2 -2
  391. package/src/LinearAlignmentsDisplay/models/model.tsx +16 -4
  392. package/src/LinearPileupDisplay/components/ColorByModifications.tsx +3 -39
  393. package/src/LinearPileupDisplay/components/ColorByTag.tsx +1 -6
  394. package/src/LinearPileupDisplay/components/LinearPileupDisplayBlurb.tsx +10 -11
  395. package/src/LinearPileupDisplay/components/ModificationsTable.tsx +38 -0
  396. package/src/LinearPileupDisplay/components/SetMaxHeight.tsx +3 -5
  397. package/src/LinearPileupDisplay/model.ts +235 -186
  398. package/src/LinearReadArcsDisplay/components/ReactComponent.tsx +23 -61
  399. package/src/LinearReadArcsDisplay/drawFeats.ts +79 -87
  400. package/src/LinearReadArcsDisplay/model.tsx +77 -155
  401. package/src/LinearReadArcsDisplay/util.ts +10 -0
  402. package/src/LinearReadCloudDisplay/components/ReactComponent.tsx +21 -59
  403. package/src/LinearReadCloudDisplay/drawFeats.ts +12 -166
  404. package/src/LinearReadCloudDisplay/drawLongReadChains.ts +85 -0
  405. package/src/LinearReadCloudDisplay/drawPairChains.ts +139 -0
  406. package/src/LinearReadCloudDisplay/model.tsx +72 -131
  407. package/src/LinearReadCloudDisplay/util.ts +47 -0
  408. package/src/LinearSNPCoverageDisplay/models/model.ts +63 -50
  409. package/src/MismatchParser/index.ts +46 -4
  410. package/src/PileupRPC/methods/GetReducedFeatures.ts +2 -10
  411. package/src/PileupRenderer/PileupLayoutSession.ts +1 -1
  412. package/src/PileupRenderer/PileupRenderer.ts +23 -1190
  413. package/src/PileupRenderer/colorBy.ts +74 -0
  414. package/src/PileupRenderer/components/PileupRendering.tsx +20 -25
  415. package/src/PileupRenderer/getAlignmentShapeColor.ts +87 -0
  416. package/src/PileupRenderer/index.ts +1 -1
  417. package/src/PileupRenderer/layoutFeature.ts +83 -0
  418. package/src/PileupRenderer/layoutFeatures.ts +44 -0
  419. package/src/PileupRenderer/makeImageData.ts +93 -0
  420. package/src/PileupRenderer/renderAlignment.ts +97 -0
  421. package/src/PileupRenderer/renderAlignmentShape.ts +45 -0
  422. package/src/PileupRenderer/renderMethylation.ts +75 -0
  423. package/src/PileupRenderer/renderMismatches.ts +206 -0
  424. package/src/PileupRenderer/renderModifications.ts +74 -0
  425. package/src/PileupRenderer/renderPerBaseLettering.ts +67 -0
  426. package/src/PileupRenderer/renderPerBaseQuality.ts +46 -0
  427. package/src/PileupRenderer/renderSoftClipping.ts +78 -0
  428. package/src/PileupRenderer/sortUtil.ts +1 -3
  429. package/src/PileupRenderer/util.ts +63 -0
  430. package/src/SNPCoverageAdapter/SNPCoverageAdapter.ts +5 -5
  431. package/src/SNPCoverageAdapter/generateCoverageBins.ts +105 -91
  432. package/src/SNPCoverageAdapter/index.ts +0 -2
  433. package/src/SNPCoverageAdapter/util.ts +33 -0
  434. package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +3 -3
  435. package/src/SNPCoverageRenderer/configSchema.ts +6 -0
  436. package/src/shared/BaseDisplayComponent.tsx +83 -0
  437. package/src/shared/FilterByTag.tsx +13 -23
  438. package/src/shared/afterAttach.tsx +66 -0
  439. package/src/shared/color.ts +59 -20
  440. package/src/shared/fetchChains.ts +23 -24
  441. package/src/shared/renderSvg.tsx +64 -0
  442. package/src/shared/util.ts +10 -0
  443. package/src/util.ts +54 -5
@@ -1,6 +1,12 @@
1
1
  import { lazy } from 'react'
2
2
  import { autorun, observable } from 'mobx'
3
- import { cast, types, addDisposer, Instance } from 'mobx-state-tree'
3
+ import {
4
+ cast,
5
+ types,
6
+ addDisposer,
7
+ getSnapshot,
8
+ Instance,
9
+ } from 'mobx-state-tree'
4
10
  import copy from 'copy-to-clipboard'
5
11
  import {
6
12
  AnyConfigurationModel,
@@ -40,6 +46,8 @@ import {
40
46
  FilterModel,
41
47
  } from '../shared'
42
48
  import { SimpleFeatureSerialized } from '@jbrowse/core/util/simpleFeature'
49
+ import { createAutorun, modificationColors } from '../util'
50
+ import { randomColor } from '../util'
43
51
 
44
52
  // async
45
53
  const FilterByTagDlg = lazy(() => import('../shared/FilterByTag'))
@@ -57,8 +65,16 @@ const rendererTypes = new Map([
57
65
 
58
66
  type LGV = LinearGenomeViewModel
59
67
 
68
+ export interface Filter {
69
+ flagInclude: number
70
+ flagExclude: number
71
+ readName?: string
72
+ tagFilter?: { tag: string; value: string }
73
+ }
74
+
60
75
  /**
61
76
  * #stateModel LinearPileupDisplay
77
+ * #category display
62
78
  * extends `BaseLinearDisplay`
63
79
  */
64
80
  function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
@@ -99,6 +115,7 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
99
115
  * #property
100
116
  */
101
117
  mismatchAlpha: types.maybe(types.boolean),
118
+
102
119
  /**
103
120
  * #property
104
121
  */
@@ -134,14 +151,38 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
134
151
  modificationTagMap: observable.map<string, string>({}),
135
152
  featureUnderMouseVolatile: undefined as undefined | Feature,
136
153
  currSortBpPerPx: 0,
137
- ready: false,
154
+ modificationsReady: false,
155
+ sortReady: false,
156
+ tagsReady: false,
157
+ }))
158
+ .views(self => ({
159
+ get autorunReady() {
160
+ const view = getContainingView(self) as LGV
161
+ return (
162
+ view.initialized &&
163
+ self.featureDensityStatsReady &&
164
+ !self.regionTooLarge
165
+ )
166
+ },
138
167
  }))
139
168
  .actions(self => ({
140
169
  /**
141
170
  * #action
142
171
  */
143
- setReady(flag: boolean) {
144
- self.ready = flag
172
+ setModificationsReady(flag: boolean) {
173
+ self.modificationsReady = flag
174
+ },
175
+ /**
176
+ * #action
177
+ */
178
+ setTagsReady(flag: boolean) {
179
+ self.tagsReady = flag
180
+ },
181
+ /**
182
+ * #action
183
+ */
184
+ setSortReady(flag: boolean) {
185
+ self.sortReady = flag
145
186
  },
146
187
  /**
147
188
  * #action
@@ -174,19 +215,20 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
174
215
  setColorScheme(colorScheme: { type: string; tag?: string }) {
175
216
  self.colorTagMap = observable.map({}) // clear existing mapping
176
217
  self.colorBy = cast(colorScheme)
177
- self.ready = false
218
+ self.tagsReady = false
219
+ self.modificationsReady = false
178
220
  },
179
221
 
180
222
  /**
181
223
  * #action
182
224
  */
183
225
  updateModificationColorMap(uniqueModifications: string[]) {
184
- const colorPalette = ['red', 'blue', 'green', 'orange', 'purple']
185
226
  uniqueModifications.forEach(value => {
186
227
  if (!self.modificationTagMap.has(value)) {
187
- const totalKeys = [...self.modificationTagMap.keys()].length
188
- const newColor = colorPalette[totalKeys]
189
- self.modificationTagMap.set(value, newColor)
228
+ self.modificationTagMap.set(
229
+ value,
230
+ modificationColors[value] || randomColor(),
231
+ )
190
232
  }
191
233
  })
192
234
  },
@@ -214,8 +256,7 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
214
256
  uniqueTag.forEach(value => {
215
257
  if (!self.colorTagMap.has(value)) {
216
258
  const totalKeys = [...self.colorTagMap.keys()].length
217
- const newColor = colorPalette[totalKeys]
218
- self.colorTagMap.set(value, newColor)
259
+ self.colorTagMap.set(value, colorPalette[totalKeys])
219
260
  }
220
261
  })
221
262
  },
@@ -225,132 +266,6 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
225
266
  setFeatureUnderMouse(feat?: Feature) {
226
267
  self.featureUnderMouseVolatile = feat
227
268
  },
228
- }))
229
- .actions(self => ({
230
- afterAttach() {
231
- addDisposer(
232
- self,
233
- autorun(
234
- async () => {
235
- try {
236
- const { rpcManager } = getSession(self)
237
- const view = getContainingView(self) as LGV
238
- const {
239
- sortedBy,
240
- colorBy,
241
- parentTrack,
242
- adapterConfig,
243
- rendererType,
244
- } = self
245
-
246
- if (
247
- !view.initialized ||
248
- !self.estimatedStatsReady ||
249
- self.regionTooLarge
250
- ) {
251
- return
252
- }
253
-
254
- const { staticBlocks, bpPerPx } = view
255
- // continually generate the vc pairing, set and rerender if any
256
- // new values seen
257
- if (colorBy?.tag) {
258
- self.updateColorTagMap(
259
- await getUniqueTagValues(self, colorBy, staticBlocks),
260
- )
261
- }
262
-
263
- if (colorBy?.type === 'modifications') {
264
- const adapter = getConf(parentTrack, ['adapter'])
265
- self.updateModificationColorMap(
266
- await getUniqueModificationValues(
267
- self,
268
- adapter,
269
- colorBy,
270
- staticBlocks,
271
- ),
272
- )
273
- }
274
-
275
- if (sortedBy) {
276
- const { pos, refName, assemblyName } = sortedBy
277
- // render just the sorted region first
278
- // @ts-expect-error
279
- await self.rendererType.renderInClient(rpcManager, {
280
- assemblyName,
281
- regions: [
282
- {
283
- start: pos,
284
- end: pos + 1,
285
- refName,
286
- assemblyName,
287
- },
288
- ],
289
- adapterConfig: adapterConfig,
290
- rendererType: rendererType.name,
291
- sessionId: getRpcSessionId(self),
292
- layoutId: view.id,
293
- timeout: 1000000,
294
- ...self.renderProps(),
295
- })
296
- self.setReady(true)
297
- self.setCurrSortBpPerPx(bpPerPx)
298
- } else {
299
- self.setReady(true)
300
- }
301
- } catch (e) {
302
- console.error(e)
303
- self.setError(e)
304
- }
305
- },
306
- { delay: 1000 },
307
- ),
308
- )
309
-
310
- // autorun synchronizes featureUnderMouse with featureIdUnderMouse
311
- // asynchronously. this is needed due to how we do not serialize all
312
- // features from the BAM/CRAM over the rpc
313
- addDisposer(
314
- self,
315
- autorun(async () => {
316
- const session = getSession(self)
317
- try {
318
- const featureId = self.featureIdUnderMouse
319
- if (self.featureUnderMouse?.id() !== featureId) {
320
- if (!featureId) {
321
- self.setFeatureUnderMouse(undefined)
322
- } else {
323
- const sessionId = getRpcSessionId(self)
324
- const view = getContainingView(self)
325
- const { feature } = (await session.rpcManager.call(
326
- sessionId,
327
- 'CoreGetFeatureDetails',
328
- {
329
- featureId,
330
- sessionId,
331
- layoutId: view.id,
332
- rendererType: 'PileupRenderer',
333
- },
334
- )) as { feature: unknown }
335
-
336
- // check featureIdUnderMouse is still the same as the
337
- // feature.id that was returned e.g. that the user hasn't
338
- // moused over to a new position during the async operation
339
- // above
340
- // @ts-expect-error
341
- if (self.featureIdUnderMouse === feature.uniqueId) {
342
- // @ts-expect-error
343
- self.setFeatureUnderMouse(new SimpleFeature(feature))
344
- }
345
- }
346
- }
347
- } catch (e) {
348
- console.error(e)
349
- session.notify(`${e}`, 'error')
350
- }
351
- }),
352
- )
353
- },
354
269
 
355
270
  /**
356
271
  * #action
@@ -403,8 +318,8 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
403
318
  /**
404
319
  * #action
405
320
  */
406
- setConfig(configuration: AnyConfigurationModel) {
407
- self.configuration = configuration
321
+ setConfig(conf: AnyConfigurationModel) {
322
+ self.configuration = conf
408
323
  },
409
324
 
410
325
  /**
@@ -422,6 +337,7 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
422
337
  return
423
338
  }
424
339
 
340
+ self.sortReady = false
425
341
  self.sortedBy = {
426
342
  type,
427
343
  pos: centerBp,
@@ -429,14 +345,8 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
429
345
  assemblyName,
430
346
  tag,
431
347
  }
432
- self.ready = false
433
348
  },
434
- setFilterBy(filter: {
435
- flagInclude: number
436
- flagExclude: number
437
- readName?: string
438
- tagFilter?: { tag: string; value: string }
439
- }) {
349
+ setFilterBy(filter: Filter) {
440
350
  self.filterBy = cast(filter)
441
351
  },
442
352
  }))
@@ -456,49 +366,51 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
456
366
  })
457
367
 
458
368
  .views(self => ({
459
- /**
460
- * #getter
461
- */
462
- get maxHeight() {
463
- const conf = getConf(self, ['renderers', self.rendererTypeName]) || {}
464
- return self.trackMaxHeight !== undefined
465
- ? self.trackMaxHeight
466
- : conf.maxHeight
467
- },
468
-
469
369
  /**
470
370
  * #getter
471
371
  */
472
372
  get rendererConfig() {
473
- const configBlob =
474
- getConf(self, ['renderers', self.rendererTypeName]) || {}
373
+ const {
374
+ featureHeight,
375
+ noSpacing,
376
+ trackMaxHeight,
377
+ mismatchAlpha,
378
+ rendererTypeName,
379
+ } = self
380
+ const configBlob = getConf(self, ['renderers', rendererTypeName]) || {}
475
381
  return self.rendererType.configSchema.create(
476
382
  {
477
383
  ...configBlob,
478
- height: self.featureHeight,
479
- noSpacing: self.noSpacing,
480
- maxHeight: this.maxHeight,
481
- mismatchAlpha: self.mismatchAlpha,
384
+ ...(featureHeight !== undefined ? { height: featureHeight } : {}),
385
+ ...(noSpacing !== undefined ? { noSpacing } : {}),
386
+ ...(mismatchAlpha !== undefined ? { mismatchAlpha } : {}),
387
+ ...(trackMaxHeight !== undefined
388
+ ? { maxHeight: trackMaxHeight }
389
+ : {}),
482
390
  },
483
391
  getEnv(self),
484
392
  )
485
393
  },
394
+ }))
395
+ .views(self => ({
396
+ /**
397
+ * #getter
398
+ */
399
+ get maxHeight() {
400
+ return readConfObject(self.rendererConfig, 'maxHeight')
401
+ },
486
402
 
487
403
  /**
488
404
  * #getter
489
405
  */
490
406
  get featureHeightSetting() {
491
- return (
492
- self.featureHeight || readConfObject(this.rendererConfig, 'height')
493
- )
407
+ return readConfObject(self.rendererConfig, 'height')
494
408
  },
495
409
  /**
496
410
  * #getter
497
411
  */
498
412
  get mismatchAlphaSetting() {
499
- return self.mismatchAlpha !== undefined
500
- ? self.mismatchAlpha
501
- : readConfObject(this.rendererConfig, 'mismatchAlpha')
413
+ return readConfObject(self.rendererConfig, 'mismatchAlpha')
502
414
  },
503
415
  /**
504
416
  * #getter
@@ -506,6 +418,17 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
506
418
  get featureUnderMouse() {
507
419
  return self.featureUnderMouseVolatile
508
420
  },
421
+ /**
422
+ * #getter
423
+ */
424
+ get renderReady() {
425
+ const view = getContainingView(self) as LGV
426
+ return (
427
+ self.modificationsReady &&
428
+ self.tagsReady &&
429
+ self.currSortBpPerPx === view.bpPerPx
430
+ )
431
+ },
509
432
  }))
510
433
  .views(self => {
511
434
  const {
@@ -531,12 +454,12 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
531
454
  */
532
455
  contextMenuItems() {
533
456
  const feat = self.contextMenuFeature
534
- const contextMenuItems = feat
457
+ return feat
535
458
  ? [
536
459
  {
537
460
  label: 'Open feature details',
538
461
  icon: MenuOpenIcon,
539
- onClick: () => {
462
+ onClick: (): void => {
540
463
  self.clearFeatureSelection()
541
464
  if (feat) {
542
465
  self.selectFeature(feat)
@@ -546,7 +469,7 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
546
469
  {
547
470
  label: 'Copy info to clipboard',
548
471
  icon: ContentCopyIcon,
549
- onClick: () => {
472
+ onClick: (): void => {
550
473
  if (feat) {
551
474
  self.copyFeatureToClipboard(feat)
552
475
  }
@@ -554,7 +477,6 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
554
477
  },
555
478
  ]
556
479
  : []
557
- return contextMenuItems
558
480
  },
559
481
 
560
482
  /**
@@ -566,8 +488,7 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
566
488
  /**
567
489
  * #method
568
490
  */
569
- renderProps() {
570
- const view = getContainingView(self) as LGV
491
+ renderPropsPre() {
571
492
  const {
572
493
  colorTagMap,
573
494
  modificationTagMap,
@@ -575,22 +496,16 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
575
496
  colorBy,
576
497
  filterBy,
577
498
  rpcDriverName,
578
- currSortBpPerPx,
579
- ready,
580
499
  } = self
581
500
 
582
501
  const superProps = superRenderProps()
583
-
584
502
  return {
585
503
  ...superProps,
586
- notReady:
587
- superProps.notReady ||
588
- !ready ||
589
- (sortedBy && currSortBpPerPx !== view.bpPerPx),
504
+ notReady: superProps.notReady || !self.renderReady,
590
505
  rpcDriverName,
591
506
  displayModel: self,
592
- sortedBy,
593
- colorBy,
507
+ sortedBy: sortedBy ? getSnapshot(sortedBy) : undefined,
508
+ colorBy: colorBy ? getSnapshot(colorBy) : undefined,
594
509
  filterBy: JSON.parse(JSON.stringify(filterBy)),
595
510
  colorTagMap: Object.fromEntries(colorTagMap.toJSON()),
596
511
  modificationTagMap: Object.fromEntries(modificationTagMap.toJSON()),
@@ -614,10 +529,9 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
614
529
  layoutId: getContainingView(self).id,
615
530
  rendererType: 'PileupRenderer',
616
531
  },
617
- )) as { feature: unknown }
532
+ )) as { feature: SimpleFeatureSerialized | undefined }
618
533
 
619
534
  if (feature) {
620
- // @ts-expect-error
621
535
  self.selectFeature(new SimpleFeature(feature))
622
536
  }
623
537
  }
@@ -663,6 +577,20 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
663
577
  }
664
578
  },
665
579
 
580
+ // renderProps and renderPropsPre are separated due to sortReady
581
+ // causing a infinite loop in the sort autorun, since the sort autorun
582
+ // uses renderProps
583
+ /**
584
+ * #method
585
+ */
586
+ renderProps() {
587
+ const pre = this.renderPropsPre()
588
+ return {
589
+ ...pre,
590
+ notReady: pre.notReady || !self.sortReady,
591
+ }
592
+ },
593
+
666
594
  /**
667
595
  * #method
668
596
  */
@@ -827,9 +755,130 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
827
755
  },
828
756
  }
829
757
  })
758
+ .actions(self => ({
759
+ afterAttach() {
760
+ createAutorun(
761
+ self,
762
+ async () => {
763
+ const view = getContainingView(self) as LGV
764
+ if (!self.autorunReady) {
765
+ return
766
+ }
767
+
768
+ const { colorBy } = self
769
+ const { staticBlocks } = view
770
+ if (colorBy?.tag) {
771
+ const vals = await getUniqueTagValues(self, colorBy, staticBlocks)
772
+ self.updateColorTagMap(vals)
773
+ }
774
+ self.setTagsReady(true)
775
+ },
776
+ { delay: 1000 },
777
+ )
778
+ createAutorun(self, async () => {
779
+ if (!self.autorunReady) {
780
+ return
781
+ }
782
+ const { parentTrack, colorBy } = self
783
+ const { staticBlocks } = getContainingView(self) as LGV
784
+ if (colorBy?.type === 'modifications') {
785
+ const adapter = getConf(parentTrack, ['adapter'])
786
+ const vals = await getUniqueModificationValues(
787
+ self,
788
+ adapter,
789
+ colorBy,
790
+ staticBlocks,
791
+ )
792
+ self.updateModificationColorMap(vals)
793
+ }
794
+ self.setModificationsReady(true)
795
+ })
796
+
797
+ createAutorun(
798
+ self,
799
+ async () => {
800
+ const { rpcManager } = getSession(self)
801
+ const view = getContainingView(self) as LGV
802
+ if (!self.autorunReady) {
803
+ return
804
+ }
805
+
806
+ const { sortedBy, adapterConfig, rendererType } = self
807
+ const { bpPerPx } = view
808
+
809
+ if (sortedBy) {
810
+ const { pos, refName, assemblyName } = sortedBy
811
+ // render just the sorted region first
812
+ // @ts-expect-error
813
+ await self.rendererType.renderInClient(rpcManager, {
814
+ assemblyName,
815
+ regions: [
816
+ {
817
+ start: pos,
818
+ end: pos + 1,
819
+ refName,
820
+ assemblyName,
821
+ },
822
+ ],
823
+ adapterConfig,
824
+ rendererType: rendererType.name,
825
+ sessionId: getRpcSessionId(self),
826
+ layoutId: view.id,
827
+ timeout: 1_000_000,
828
+ ...self.renderPropsPre(),
829
+ })
830
+ }
831
+ self.setCurrSortBpPerPx(bpPerPx)
832
+ self.setSortReady(true)
833
+ },
834
+ { delay: 1000 },
835
+ )
836
+
837
+ // autorun synchronizes featureUnderMouse with featureIdUnderMouse
838
+ // asynchronously. this is needed due to how we do not serialize all
839
+ // features from the BAM/CRAM over the rpc
840
+ addDisposer(
841
+ self,
842
+ autorun(async () => {
843
+ const session = getSession(self)
844
+ try {
845
+ const featureId = self.featureIdUnderMouse
846
+ if (self.featureUnderMouse?.id() !== featureId) {
847
+ if (!featureId) {
848
+ self.setFeatureUnderMouse(undefined)
849
+ } else {
850
+ const sessionId = getRpcSessionId(self)
851
+ const view = getContainingView(self)
852
+ const { feature } = (await session.rpcManager.call(
853
+ sessionId,
854
+ 'CoreGetFeatureDetails',
855
+ {
856
+ featureId,
857
+ sessionId,
858
+ layoutId: view.id,
859
+ rendererType: 'PileupRenderer',
860
+ },
861
+ )) as { feature: SimpleFeatureSerialized }
862
+
863
+ // check featureIdUnderMouse is still the same as the
864
+ // feature.id that was returned e.g. that the user hasn't
865
+ // moused over to a new position during the async operation
866
+ // above
867
+ if (self.featureIdUnderMouse === feature.uniqueId) {
868
+ self.setFeatureUnderMouse(new SimpleFeature(feature))
869
+ }
870
+ }
871
+ }
872
+ } catch (e) {
873
+ console.error(e)
874
+ session.notify(`${e}`, 'error')
875
+ }
876
+ }),
877
+ )
878
+ },
879
+ }))
830
880
  }
831
881
 
832
882
  export type LinearPileupDisplayStateModel = ReturnType<typeof stateModelFactory>
833
883
  export type LinearPileupDisplayModel = Instance<LinearPileupDisplayStateModel>
834
-
835
884
  export default stateModelFactory