@jbrowse/plugin-alignments 1.7.9 → 2.0.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 (294) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +192 -207
  2. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -0
  3. package/dist/AlignmentsFeatureDetail/index.d.ts +28 -3
  4. package/dist/AlignmentsFeatureDetail/index.js +48 -55
  5. package/dist/AlignmentsFeatureDetail/index.js.map +1 -0
  6. package/dist/AlignmentsTrack/index.js +24 -32
  7. package/dist/AlignmentsTrack/index.js.map +1 -0
  8. package/dist/BamAdapter/BamAdapter.js +345 -585
  9. package/dist/BamAdapter/BamAdapter.js.map +1 -0
  10. package/dist/BamAdapter/BamSlightlyLazyFeature.js +143 -174
  11. package/dist/BamAdapter/BamSlightlyLazyFeature.js.map +1 -0
  12. package/dist/BamAdapter/MismatchParser.js +340 -416
  13. package/dist/BamAdapter/MismatchParser.js.map +1 -0
  14. package/dist/BamAdapter/configSchema.js +33 -46
  15. package/dist/BamAdapter/configSchema.js.map +1 -0
  16. package/dist/BamAdapter/index.js +36 -32
  17. package/dist/BamAdapter/index.js.map +1 -0
  18. package/dist/CramAdapter/CramAdapter.js +376 -644
  19. package/dist/CramAdapter/CramAdapter.js.map +1 -0
  20. package/dist/CramAdapter/CramSlightlyLazyFeature.js +374 -439
  21. package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -0
  22. package/dist/CramAdapter/CramTestAdapters.js +169 -227
  23. package/dist/CramAdapter/CramTestAdapters.js.map +1 -0
  24. package/dist/CramAdapter/configSchema.js +28 -38
  25. package/dist/CramAdapter/configSchema.js.map +1 -0
  26. package/dist/CramAdapter/index.js +37 -32
  27. package/dist/CramAdapter/index.js.map +1 -0
  28. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js +91 -93
  29. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js.map +1 -0
  30. package/dist/HtsgetBamAdapter/configSchema.js +19 -29
  31. package/dist/HtsgetBamAdapter/configSchema.js.map +1 -0
  32. package/dist/HtsgetBamAdapter/index.js +44 -38
  33. package/dist/HtsgetBamAdapter/index.js.map +1 -0
  34. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +36 -65
  35. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -0
  36. package/dist/LinearAlignmentsDisplay/index.js +22 -28
  37. package/dist/LinearAlignmentsDisplay/index.js.map +1 -0
  38. package/dist/LinearAlignmentsDisplay/models/configSchema.js +12 -23
  39. package/dist/LinearAlignmentsDisplay/models/configSchema.js.map +1 -0
  40. package/dist/LinearAlignmentsDisplay/models/model.d.ts +10 -10
  41. package/dist/LinearAlignmentsDisplay/models/model.js +257 -245
  42. package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -0
  43. package/dist/LinearPileupDisplay/components/ColorByModifications.js +98 -116
  44. package/dist/LinearPileupDisplay/components/ColorByModifications.js.map +1 -0
  45. package/dist/LinearPileupDisplay/components/ColorByTag.js +82 -91
  46. package/dist/LinearPileupDisplay/components/ColorByTag.js.map +1 -0
  47. package/dist/LinearPileupDisplay/components/FilterByTag.js +156 -192
  48. package/dist/LinearPileupDisplay/components/FilterByTag.js.map +1 -0
  49. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +15 -29
  50. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -0
  51. package/dist/LinearPileupDisplay/components/SetFeatureHeight.js +79 -93
  52. package/dist/LinearPileupDisplay/components/SetFeatureHeight.js.map +1 -0
  53. package/dist/LinearPileupDisplay/components/SetMaxHeight.js +78 -81
  54. package/dist/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -0
  55. package/dist/LinearPileupDisplay/components/SortByTag.js +80 -88
  56. package/dist/LinearPileupDisplay/components/SortByTag.js.map +1 -0
  57. package/dist/LinearPileupDisplay/configSchema.js +40 -42
  58. package/dist/LinearPileupDisplay/configSchema.js.map +1 -0
  59. package/dist/LinearPileupDisplay/index.js +21 -27
  60. package/dist/LinearPileupDisplay/index.js.map +1 -0
  61. package/dist/LinearPileupDisplay/model.d.ts +33 -20
  62. package/dist/LinearPileupDisplay/model.js +702 -716
  63. package/dist/LinearPileupDisplay/model.js.map +1 -0
  64. package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
  65. package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +105 -57
  66. package/dist/LinearSNPCoverageDisplay/components/Tooltip.js.map +1 -0
  67. package/dist/LinearSNPCoverageDisplay/index.js +21 -27
  68. package/dist/LinearSNPCoverageDisplay/index.js.map +1 -0
  69. package/dist/LinearSNPCoverageDisplay/models/configSchema.js +45 -55
  70. package/dist/LinearSNPCoverageDisplay/models/configSchema.js.map +1 -0
  71. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +14 -12
  72. package/dist/LinearSNPCoverageDisplay/models/model.js +257 -230
  73. package/dist/LinearSNPCoverageDisplay/models/model.js.map +1 -0
  74. package/dist/NestedFrequencyTable.js +104 -139
  75. package/dist/NestedFrequencyTable.js.map +1 -0
  76. package/dist/PileupRPC/rpcMethods.js +199 -278
  77. package/dist/PileupRPC/rpcMethods.js.map +1 -0
  78. package/dist/PileupRenderer/PileupLayoutSession.js +56 -76
  79. package/dist/PileupRenderer/PileupLayoutSession.js.map +1 -0
  80. package/dist/PileupRenderer/PileupRenderer.d.ts +56 -11
  81. package/dist/PileupRenderer/PileupRenderer.js +942 -1134
  82. package/dist/PileupRenderer/PileupRenderer.js.map +1 -0
  83. package/dist/PileupRenderer/components/PileupRendering.d.ts +1 -1
  84. package/dist/PileupRenderer/components/PileupRendering.js +173 -253
  85. package/dist/PileupRenderer/components/PileupRendering.js.map +1 -0
  86. package/dist/PileupRenderer/configSchema.js +65 -71
  87. package/dist/PileupRenderer/configSchema.js.map +1 -0
  88. package/dist/PileupRenderer/index.js +17 -22
  89. package/dist/PileupRenderer/index.js.map +1 -0
  90. package/dist/PileupRenderer/sortUtil.js +83 -107
  91. package/dist/PileupRenderer/sortUtil.js.map +1 -0
  92. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +2 -0
  93. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +436 -586
  94. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -0
  95. package/dist/SNPCoverageAdapter/configSchema.js +10 -20
  96. package/dist/SNPCoverageAdapter/configSchema.js.map +1 -0
  97. package/dist/SNPCoverageAdapter/index.js +46 -41
  98. package/dist/SNPCoverageAdapter/index.js.map +1 -0
  99. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +1 -1
  100. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +265 -290
  101. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -0
  102. package/dist/SNPCoverageRenderer/configSchema.js +30 -39
  103. package/dist/SNPCoverageRenderer/configSchema.js.map +1 -0
  104. package/dist/SNPCoverageRenderer/index.js +19 -30
  105. package/dist/SNPCoverageRenderer/index.js.map +1 -0
  106. package/dist/index.js +135 -152
  107. package/dist/index.js.map +1 -0
  108. package/dist/shared.js +84 -92
  109. package/dist/shared.js.map +1 -0
  110. package/dist/util.js +130 -121
  111. package/dist/util.js.map +1 -0
  112. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +6 -0
  113. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +145 -0
  114. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -0
  115. package/esm/AlignmentsFeatureDetail/index.d.ts +38 -0
  116. package/esm/AlignmentsFeatureDetail/index.js +23 -0
  117. package/esm/AlignmentsFeatureDetail/index.js.map +1 -0
  118. package/esm/AlignmentsTrack/index.d.ts +2 -0
  119. package/esm/AlignmentsTrack/index.js +23 -0
  120. package/esm/AlignmentsTrack/index.js.map +1 -0
  121. package/esm/BamAdapter/BamAdapter.d.ts +40 -0
  122. package/esm/BamAdapter/BamAdapter.js +173 -0
  123. package/esm/BamAdapter/BamAdapter.js.map +1 -0
  124. package/esm/BamAdapter/BamSlightlyLazyFeature.d.ts +33 -0
  125. package/esm/BamAdapter/BamSlightlyLazyFeature.js +107 -0
  126. package/esm/BamAdapter/BamSlightlyLazyFeature.js.map +1 -0
  127. package/esm/BamAdapter/MismatchParser.d.ts +25 -0
  128. package/esm/BamAdapter/MismatchParser.js +294 -0
  129. package/esm/BamAdapter/MismatchParser.js.map +1 -0
  130. package/esm/BamAdapter/configSchema.d.ts +2 -0
  131. package/esm/BamAdapter/configSchema.js +31 -0
  132. package/esm/BamAdapter/configSchema.js.map +1 -0
  133. package/esm/BamAdapter/index.d.ts +3 -0
  134. package/esm/BamAdapter/index.js +10 -0
  135. package/esm/BamAdapter/index.js.map +1 -0
  136. package/esm/CramAdapter/CramAdapter.d.ts +53 -0
  137. package/esm/CramAdapter/CramAdapter.js +228 -0
  138. package/esm/CramAdapter/CramAdapter.js.map +1 -0
  139. package/esm/CramAdapter/CramSlightlyLazyFeature.d.ts +49 -0
  140. package/esm/CramAdapter/CramSlightlyLazyFeature.js +349 -0
  141. package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -0
  142. package/esm/CramAdapter/CramTestAdapters.d.ts +29 -0
  143. package/esm/CramAdapter/CramTestAdapters.js +70 -0
  144. package/esm/CramAdapter/CramTestAdapters.js.map +1 -0
  145. package/esm/CramAdapter/configSchema.d.ts +3 -0
  146. package/esm/CramAdapter/configSchema.js +26 -0
  147. package/esm/CramAdapter/configSchema.js.map +1 -0
  148. package/esm/CramAdapter/index.d.ts +3 -0
  149. package/esm/CramAdapter/index.js +11 -0
  150. package/esm/CramAdapter/index.js.map +1 -0
  151. package/esm/HtsgetBamAdapter/HtsgetBamAdapter.d.ts +9 -0
  152. package/esm/HtsgetBamAdapter/HtsgetBamAdapter.js +27 -0
  153. package/esm/HtsgetBamAdapter/HtsgetBamAdapter.js.map +1 -0
  154. package/esm/HtsgetBamAdapter/configSchema.d.ts +2 -0
  155. package/esm/HtsgetBamAdapter/configSchema.js +17 -0
  156. package/esm/HtsgetBamAdapter/configSchema.js.map +1 -0
  157. package/esm/HtsgetBamAdapter/index.d.ts +3 -0
  158. package/esm/HtsgetBamAdapter/index.js +16 -0
  159. package/esm/HtsgetBamAdapter/index.js.map +1 -0
  160. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +7 -0
  161. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +34 -0
  162. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -0
  163. package/esm/LinearAlignmentsDisplay/index.d.ts +2 -0
  164. package/esm/LinearAlignmentsDisplay/index.js +19 -0
  165. package/esm/LinearAlignmentsDisplay/index.js.map +1 -0
  166. package/esm/LinearAlignmentsDisplay/models/configSchema.d.ts +4 -0
  167. package/esm/LinearAlignmentsDisplay/models/configSchema.js +12 -0
  168. package/esm/LinearAlignmentsDisplay/models/configSchema.js.map +1 -0
  169. package/esm/LinearAlignmentsDisplay/models/model.d.ts +105 -0
  170. package/esm/LinearAlignmentsDisplay/models/model.js +181 -0
  171. package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -0
  172. package/esm/LinearPileupDisplay/components/ColorByModifications.d.ts +14 -0
  173. package/esm/LinearPileupDisplay/components/ColorByModifications.js +71 -0
  174. package/esm/LinearPileupDisplay/components/ColorByModifications.js.map +1 -0
  175. package/esm/LinearPileupDisplay/components/ColorByTag.d.ts +9 -0
  176. package/esm/LinearPileupDisplay/components/ColorByTag.js +45 -0
  177. package/esm/LinearPileupDisplay/components/ColorByTag.js.map +1 -0
  178. package/esm/LinearPileupDisplay/components/FilterByTag.d.ts +18 -0
  179. package/esm/LinearPileupDisplay/components/FilterByTag.js +123 -0
  180. package/esm/LinearPileupDisplay/components/FilterByTag.js.map +1 -0
  181. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +13 -0
  182. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +13 -0
  183. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -0
  184. package/esm/LinearPileupDisplay/components/SetFeatureHeight.d.ts +16 -0
  185. package/esm/LinearPileupDisplay/components/SetFeatureHeight.js +41 -0
  186. package/esm/LinearPileupDisplay/components/SetFeatureHeight.js.map +1 -0
  187. package/esm/LinearPileupDisplay/components/SetMaxHeight.d.ts +10 -0
  188. package/esm/LinearPileupDisplay/components/SetMaxHeight.js +43 -0
  189. package/esm/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -0
  190. package/esm/LinearPileupDisplay/components/SortByTag.d.ts +9 -0
  191. package/esm/LinearPileupDisplay/components/SortByTag.js +43 -0
  192. package/esm/LinearPileupDisplay/components/SortByTag.js.map +1 -0
  193. package/esm/LinearPileupDisplay/configSchema.d.ts +6 -0
  194. package/esm/LinearPileupDisplay/configSchema.js +41 -0
  195. package/esm/LinearPileupDisplay/configSchema.js.map +1 -0
  196. package/esm/LinearPileupDisplay/index.d.ts +2 -0
  197. package/esm/LinearPileupDisplay/index.js +18 -0
  198. package/esm/LinearPileupDisplay/index.js.map +1 -0
  199. package/esm/LinearPileupDisplay/model.d.ts +332 -0
  200. package/esm/LinearPileupDisplay/model.js +576 -0
  201. package/esm/LinearPileupDisplay/model.js.map +1 -0
  202. package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +10 -0
  203. package/esm/LinearSNPCoverageDisplay/components/Tooltip.js +57 -0
  204. package/esm/LinearSNPCoverageDisplay/components/Tooltip.js.map +1 -0
  205. package/esm/LinearSNPCoverageDisplay/index.d.ts +2 -0
  206. package/esm/LinearSNPCoverageDisplay/index.js +18 -0
  207. package/esm/LinearSNPCoverageDisplay/index.js.map +1 -0
  208. package/esm/LinearSNPCoverageDisplay/models/configSchema.d.ts +2 -0
  209. package/esm/LinearSNPCoverageDisplay/models/configSchema.js +44 -0
  210. package/esm/LinearSNPCoverageDisplay/models/configSchema.js.map +1 -0
  211. package/esm/LinearSNPCoverageDisplay/models/model.d.ts +348 -0
  212. package/esm/LinearSNPCoverageDisplay/models/model.js +185 -0
  213. package/esm/LinearSNPCoverageDisplay/models/model.js.map +1 -0
  214. package/esm/NestedFrequencyTable.d.ts +14 -0
  215. package/esm/NestedFrequencyTable.js +101 -0
  216. package/esm/NestedFrequencyTable.js.map +1 -0
  217. package/esm/PileupRPC/rpcMethods.d.ts +34 -0
  218. package/esm/PileupRPC/rpcMethods.js +70 -0
  219. package/esm/PileupRPC/rpcMethods.js.map +1 -0
  220. package/esm/PileupRenderer/PileupLayoutSession.d.ts +32 -0
  221. package/esm/PileupRenderer/PileupLayoutSession.js +32 -0
  222. package/esm/PileupRenderer/PileupLayoutSession.js.map +1 -0
  223. package/esm/PileupRenderer/PileupRenderer.d.ts +182 -0
  224. package/esm/PileupRenderer/PileupRenderer.js +830 -0
  225. package/esm/PileupRenderer/PileupRenderer.js.map +1 -0
  226. package/esm/PileupRenderer/components/PileupRendering.d.ts +23 -0
  227. package/esm/PileupRenderer/components/PileupRendering.js +138 -0
  228. package/esm/PileupRenderer/components/PileupRendering.js.map +1 -0
  229. package/esm/PileupRenderer/configSchema.d.ts +2 -0
  230. package/esm/PileupRenderer/configSchema.js +64 -0
  231. package/esm/PileupRenderer/configSchema.js.map +1 -0
  232. package/esm/PileupRenderer/index.d.ts +2 -0
  233. package/esm/PileupRenderer/index.js +12 -0
  234. package/esm/PileupRenderer/index.js.map +1 -0
  235. package/esm/PileupRenderer/sortUtil.d.ts +8 -0
  236. package/esm/PileupRenderer/sortUtil.js +80 -0
  237. package/esm/PileupRenderer/sortUtil.js.map +1 -0
  238. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +67 -0
  239. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js +259 -0
  240. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -0
  241. package/esm/SNPCoverageAdapter/configSchema.d.ts +3 -0
  242. package/esm/SNPCoverageAdapter/configSchema.js +6 -0
  243. package/esm/SNPCoverageAdapter/configSchema.js.map +1 -0
  244. package/esm/SNPCoverageAdapter/index.d.ts +3 -0
  245. package/esm/SNPCoverageAdapter/index.js +18 -0
  246. package/esm/SNPCoverageAdapter/index.js.map +1 -0
  247. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +20 -0
  248. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +185 -0
  249. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -0
  250. package/esm/SNPCoverageRenderer/configSchema.d.ts +2 -0
  251. package/esm/SNPCoverageRenderer/configSchema.js +29 -0
  252. package/esm/SNPCoverageRenderer/configSchema.js.map +1 -0
  253. package/esm/SNPCoverageRenderer/index.d.ts +3 -0
  254. package/esm/SNPCoverageRenderer/index.js +14 -0
  255. package/esm/SNPCoverageRenderer/index.js.map +1 -0
  256. package/esm/index.d.ts +10 -0
  257. package/esm/index.js +91 -0
  258. package/esm/index.js.map +1 -0
  259. package/esm/shared.d.ts +25 -0
  260. package/esm/shared.js +28 -0
  261. package/esm/shared.js.map +1 -0
  262. package/esm/util.d.ts +19 -0
  263. package/esm/util.js +83 -0
  264. package/esm/util.js.map +1 -0
  265. package/package.json +19 -11
  266. package/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx +16 -6
  267. package/src/AlignmentsFeatureDetail/__snapshots__/index.test.js.snap +321 -397
  268. package/src/AlignmentsFeatureDetail/index.ts +7 -17
  269. package/src/BamAdapter/MismatchParser.ts +1 -0
  270. package/src/LinearAlignmentsDisplay/components/AlignmentsDisplay.tsx +3 -3
  271. package/src/LinearPileupDisplay/components/ColorByModifications.tsx +7 -7
  272. package/src/LinearPileupDisplay/components/ColorByTag.tsx +5 -5
  273. package/src/LinearPileupDisplay/components/FilterByTag.tsx +5 -5
  274. package/src/LinearPileupDisplay/components/LinearPileupDisplayBlurb.tsx +1 -1
  275. package/src/LinearPileupDisplay/components/SetFeatureHeight.tsx +9 -9
  276. package/src/LinearPileupDisplay/components/SetMaxHeight.tsx +5 -5
  277. package/src/LinearPileupDisplay/components/SortByTag.tsx +5 -5
  278. package/src/LinearPileupDisplay/model.ts +90 -32
  279. package/src/LinearSNPCoverageDisplay/components/Tooltip.tsx +44 -30
  280. package/src/LinearSNPCoverageDisplay/models/model.ts +25 -25
  281. package/src/PileupRenderer/PileupRenderer.tsx +399 -198
  282. package/src/PileupRenderer/components/PileupRendering.tsx +11 -11
  283. package/src/SNPCoverageAdapter/SNPCoverageAdapter.ts +5 -0
  284. package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +7 -5
  285. package/dist/AlignmentsFeatureDetail/index.test.js +0 -60
  286. package/dist/BamAdapter/BamAdapter.test.js +0 -177
  287. package/dist/BamAdapter/MismatchParser.test.js +0 -251
  288. package/dist/CramAdapter/CramAdapter.test.js +0 -138
  289. package/dist/LinearAlignmentsDisplay/models/configSchema.test.js +0 -83
  290. package/dist/LinearPileupDisplay/configSchema.test.js +0 -92
  291. package/dist/LinearSNPCoverageDisplay/models/configSchema.test.js +0 -62
  292. package/dist/PileupRenderer/components/PileupRendering.test.js +0 -36
  293. package/dist/declare.d.js +0 -1
  294. package/dist/index.test.js +0 -26
@@ -0,0 +1,576 @@
1
+ import { lazy } from 'react';
2
+ import { autorun, observable } from 'mobx';
3
+ import { cast, types, addDisposer, getEnv } from 'mobx-state-tree';
4
+ import copy from 'copy-to-clipboard';
5
+ import { ConfigurationReference, readConfObject, getConf, } from '@jbrowse/core/configuration';
6
+ import { getRpcSessionId } from '@jbrowse/core/util/tracks';
7
+ import { getSession, isSessionModelWithWidgets, getContainingView, SimpleFeature, } from '@jbrowse/core/util';
8
+ import { BaseLinearDisplay, } from '@jbrowse/plugin-linear-genome-view';
9
+ // icons
10
+ import VisibilityIcon from '@mui/icons-material/Visibility';
11
+ import { ContentCopy as ContentCopyIcon } from '@jbrowse/core/ui/Icons';
12
+ import MenuOpenIcon from '@mui/icons-material/MenuOpen';
13
+ import SortIcon from '@mui/icons-material/Sort';
14
+ import PaletteIcon from '@mui/icons-material/Palette';
15
+ import FilterListIcon from '@mui/icons-material/ClearAll';
16
+ import LinearPileupDisplayBlurb from './components/LinearPileupDisplayBlurb';
17
+ import { getUniqueTagValues, getUniqueModificationValues } from '../shared';
18
+ // async
19
+ const ColorByTagDlg = lazy(() => import('./components/ColorByTag'));
20
+ const FilterByTagDlg = lazy(() => import('./components/FilterByTag'));
21
+ const SortByTagDlg = lazy(() => import('./components/SortByTag'));
22
+ const SetFeatureHeightDlg = lazy(() => import('./components/SetFeatureHeight'));
23
+ const SetMaxHeightDlg = lazy(() => import('./components/SetMaxHeight'));
24
+ const ModificationsDlg = lazy(() => import('./components/ColorByModifications'));
25
+ // using a map because it preserves order
26
+ const rendererTypes = new Map([
27
+ ['pileup', 'PileupRenderer'],
28
+ ['svg', 'SvgFeatureRenderer'],
29
+ ]);
30
+ const stateModelFactory = (configSchema) => types
31
+ .compose('LinearPileupDisplay', BaseLinearDisplay, types.model({
32
+ type: types.literal('LinearPileupDisplay'),
33
+ configuration: ConfigurationReference(configSchema),
34
+ showSoftClipping: false,
35
+ featureHeight: types.maybe(types.number),
36
+ noSpacing: types.maybe(types.boolean),
37
+ fadeLikelihood: types.maybe(types.boolean),
38
+ trackMaxHeight: types.maybe(types.number),
39
+ mismatchAlpha: types.maybe(types.boolean),
40
+ sortedBy: types.maybe(types.model({
41
+ type: types.string,
42
+ pos: types.number,
43
+ tag: types.maybe(types.string),
44
+ refName: types.string,
45
+ assemblyName: types.string,
46
+ })),
47
+ colorBy: types.maybe(types.model({
48
+ type: types.string,
49
+ tag: types.maybe(types.string),
50
+ extra: types.frozen(),
51
+ })),
52
+ filterBy: types.optional(types.model({
53
+ flagInclude: types.optional(types.number, 0),
54
+ flagExclude: types.optional(types.number, 1540),
55
+ readName: types.maybe(types.string),
56
+ tagFilter: types.maybe(types.model({ tag: types.string, value: types.string })),
57
+ }), {}),
58
+ }))
59
+ .volatile(() => ({
60
+ colorTagMap: observable.map({}),
61
+ modificationTagMap: observable.map({}),
62
+ featureUnderMouseVolatile: undefined,
63
+ ready: false,
64
+ }))
65
+ .actions(self => ({
66
+ setReady(flag) {
67
+ self.ready = flag;
68
+ },
69
+ setMaxHeight(n) {
70
+ self.trackMaxHeight = n;
71
+ },
72
+ setFeatureHeight(n) {
73
+ self.featureHeight = n;
74
+ },
75
+ setNoSpacing(flag) {
76
+ self.noSpacing = flag;
77
+ },
78
+ setColorScheme(colorScheme) {
79
+ self.colorTagMap = observable.map({}); // clear existing mapping
80
+ self.colorBy = cast(colorScheme);
81
+ self.ready = false;
82
+ },
83
+ updateModificationColorMap(uniqueModifications) {
84
+ const colorPalette = ['red', 'blue', 'green', 'orange', 'purple'];
85
+ uniqueModifications.forEach(value => {
86
+ if (!self.modificationTagMap.has(value)) {
87
+ const totalKeys = [...self.modificationTagMap.keys()].length;
88
+ const newColor = colorPalette[totalKeys];
89
+ self.modificationTagMap.set(value, newColor);
90
+ }
91
+ });
92
+ },
93
+ updateColorTagMap(uniqueTag) {
94
+ // pale color scheme
95
+ // https://cran.r-project.org/web/packages/khroma/vignettes/tol.html
96
+ // e.g. "tol_light"
97
+ const colorPalette = [
98
+ '#BBCCEE',
99
+ 'pink',
100
+ '#CCDDAA',
101
+ '#EEEEBB',
102
+ '#FFCCCC',
103
+ 'lightblue',
104
+ 'lightgreen',
105
+ 'tan',
106
+ '#CCEEFF',
107
+ 'lightsalmon',
108
+ ];
109
+ uniqueTag.forEach(value => {
110
+ if (!self.colorTagMap.has(value)) {
111
+ const totalKeys = [...self.colorTagMap.keys()].length;
112
+ const newColor = colorPalette[totalKeys];
113
+ self.colorTagMap.set(value, newColor);
114
+ }
115
+ });
116
+ },
117
+ setFeatureUnderMouse(feat) {
118
+ self.featureUnderMouseVolatile = feat;
119
+ },
120
+ }))
121
+ .actions(self => ({
122
+ afterAttach() {
123
+ addDisposer(self, autorun(async () => {
124
+ try {
125
+ const { rpcManager } = getSession(self);
126
+ const view = getContainingView(self);
127
+ const { sortedBy, colorBy, parentTrack, adapterConfig, rendererType, } = self;
128
+ const { staticBlocks, bpPerPx } = view;
129
+ if (!self.estimatedStatsReady) {
130
+ return;
131
+ }
132
+ if (self.regionTooLarge) {
133
+ return;
134
+ }
135
+ // continually generate the vc pairing, set and rerender if any
136
+ // new values seen
137
+ if (colorBy === null || colorBy === void 0 ? void 0 : colorBy.tag) {
138
+ const uniqueTagSet = await getUniqueTagValues(self, colorBy, staticBlocks);
139
+ self.updateColorTagMap(uniqueTagSet);
140
+ }
141
+ if ((colorBy === null || colorBy === void 0 ? void 0 : colorBy.type) === 'modifications') {
142
+ const adapter = getConf(parentTrack, ['adapter']);
143
+ self.updateModificationColorMap(await getUniqueModificationValues(self, adapter, colorBy, staticBlocks));
144
+ }
145
+ if (sortedBy) {
146
+ const { pos, refName, assemblyName } = sortedBy;
147
+ // render just the sorted region first
148
+ await self.rendererType.renderInClient(rpcManager, {
149
+ assemblyName,
150
+ regions: [
151
+ {
152
+ start: pos,
153
+ end: pos + 1,
154
+ refName,
155
+ assemblyName,
156
+ },
157
+ ],
158
+ adapterConfig: adapterConfig,
159
+ rendererType: rendererType.name,
160
+ sessionId: getRpcSessionId(self),
161
+ layoutId: view.id,
162
+ timeout: 1000000,
163
+ ...self.renderProps(),
164
+ });
165
+ self.setReady(true);
166
+ self.setCurrBpPerPx(bpPerPx);
167
+ }
168
+ else {
169
+ self.setReady(true);
170
+ }
171
+ }
172
+ catch (e) {
173
+ console.error(e);
174
+ self.setError(e);
175
+ }
176
+ }, { delay: 1000 }));
177
+ // autorun synchronizes featureUnderMouse with featureIdUnderMouse
178
+ addDisposer(self, autorun(async () => {
179
+ var _a;
180
+ const session = getSession(self);
181
+ try {
182
+ const featureId = self.featureIdUnderMouse;
183
+ if (((_a = self.featureUnderMouse) === null || _a === void 0 ? void 0 : _a.id()) !== featureId) {
184
+ if (!featureId) {
185
+ self.setFeatureUnderMouse(undefined);
186
+ }
187
+ else {
188
+ const sessionId = getRpcSessionId(self);
189
+ const view = getContainingView(self);
190
+ const { feature } = (await session.rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
191
+ featureId,
192
+ sessionId,
193
+ layoutId: view.id,
194
+ rendererType: 'PileupRenderer',
195
+ }));
196
+ // check featureIdUnderMouse is still the same as the
197
+ // feature.id that was returned e.g. that the user hasn't
198
+ // moused over to a new position during the async operation
199
+ // above
200
+ // @ts-ignore
201
+ if (self.featureIdUnderMouse === feature.uniqueId) {
202
+ // @ts-ignore
203
+ self.setFeatureUnderMouse(new SimpleFeature(feature));
204
+ }
205
+ }
206
+ }
207
+ }
208
+ catch (e) {
209
+ console.error(e);
210
+ session.notify(`${e}`, 'error');
211
+ }
212
+ }));
213
+ },
214
+ selectFeature(feature) {
215
+ const session = getSession(self);
216
+ if (isSessionModelWithWidgets(session)) {
217
+ const featureWidget = session.addWidget('AlignmentsFeatureWidget', 'alignmentFeature', { featureData: feature.toJSON(), view: getContainingView(self) });
218
+ session.showWidget(featureWidget);
219
+ }
220
+ session.setSelection(feature);
221
+ },
222
+ clearSelected() {
223
+ self.sortedBy = undefined;
224
+ },
225
+ // uses copy-to-clipboard and generates notification
226
+ copyFeatureToClipboard(feature) {
227
+ const { uniqueId, ...rest } = feature.toJSON();
228
+ const session = getSession(self);
229
+ copy(JSON.stringify(rest, null, 4));
230
+ session.notify('Copied to clipboard', 'success');
231
+ },
232
+ toggleSoftClipping() {
233
+ self.showSoftClipping = !self.showSoftClipping;
234
+ },
235
+ toggleMismatchAlpha() {
236
+ self.mismatchAlpha = !self.mismatchAlpha;
237
+ },
238
+ setConfig(configuration) {
239
+ self.configuration = configuration;
240
+ },
241
+ setSortedBy(type, tag) {
242
+ const { centerLineInfo } = getContainingView(self);
243
+ if (!centerLineInfo) {
244
+ return;
245
+ }
246
+ const { refName, assemblyName, offset } = centerLineInfo;
247
+ const centerBp = Math.round(offset) + 1;
248
+ if (centerBp < 0 || !refName) {
249
+ return;
250
+ }
251
+ self.sortedBy = {
252
+ type,
253
+ pos: centerBp,
254
+ refName,
255
+ assemblyName,
256
+ tag,
257
+ };
258
+ self.ready = false;
259
+ },
260
+ setFilterBy(filter) {
261
+ self.filterBy = cast(filter);
262
+ },
263
+ }))
264
+ .actions(self => {
265
+ // resets the sort object and refresh whole display on reload
266
+ const superReload = self.reload;
267
+ return {
268
+ reload() {
269
+ self.clearSelected();
270
+ superReload();
271
+ },
272
+ };
273
+ })
274
+ .views(self => ({
275
+ get maxHeight() {
276
+ const conf = getConf(self, ['renderers', self.rendererTypeName]) || {};
277
+ return self.trackMaxHeight !== undefined
278
+ ? self.trackMaxHeight
279
+ : conf.maxHeight;
280
+ },
281
+ get rendererConfig() {
282
+ const configBlob = getConf(self, ['renderers', self.rendererTypeName]) || {};
283
+ return self.rendererType.configSchema.create({
284
+ ...configBlob,
285
+ height: self.featureHeight,
286
+ noSpacing: self.noSpacing,
287
+ maxHeight: this.maxHeight,
288
+ mismatchAlpha: self.mismatchAlpha,
289
+ }, getEnv(self));
290
+ },
291
+ get featureHeightSetting() {
292
+ return (self.featureHeight || readConfObject(this.rendererConfig, 'height'));
293
+ },
294
+ get mismatchAlphaSetting() {
295
+ return self.mismatchAlpha !== undefined
296
+ ? self.mismatchAlpha
297
+ : readConfObject(this.rendererConfig, 'mismatchAlpha');
298
+ },
299
+ get featureUnderMouse() {
300
+ return self.featureUnderMouseVolatile;
301
+ },
302
+ }))
303
+ .views(self => {
304
+ const { trackMenuItems: superTrackMenuItems, renderProps: superRenderProps, } = self;
305
+ return {
306
+ get rendererTypeName() {
307
+ const viewName = getConf(self, 'defaultRendering');
308
+ const rendererType = rendererTypes.get(viewName);
309
+ if (!rendererType) {
310
+ throw new Error(`unknown alignments view name ${viewName}`);
311
+ }
312
+ return rendererType;
313
+ },
314
+ contextMenuItems() {
315
+ const feat = self.contextMenuFeature;
316
+ const contextMenuItems = feat
317
+ ? [
318
+ {
319
+ label: 'Open feature details',
320
+ icon: MenuOpenIcon,
321
+ onClick: () => {
322
+ self.clearFeatureSelection();
323
+ if (feat) {
324
+ self.selectFeature(feat);
325
+ }
326
+ },
327
+ },
328
+ {
329
+ label: 'Copy info to clipboard',
330
+ icon: ContentCopyIcon,
331
+ onClick: () => {
332
+ if (feat) {
333
+ self.copyFeatureToClipboard(feat);
334
+ }
335
+ },
336
+ },
337
+ ]
338
+ : [];
339
+ return contextMenuItems;
340
+ },
341
+ get DisplayBlurb() {
342
+ return LinearPileupDisplayBlurb;
343
+ },
344
+ renderProps() {
345
+ const view = getContainingView(self);
346
+ const { colorTagMap, modificationTagMap, sortedBy, colorBy, filterBy, rpcDriverName, currBpPerPx, ready, } = self;
347
+ const superProps = superRenderProps();
348
+ return {
349
+ ...superProps,
350
+ notReady: superProps.notReady ||
351
+ !ready ||
352
+ (sortedBy && currBpPerPx !== view.bpPerPx),
353
+ rpcDriverName,
354
+ displayModel: self,
355
+ sortedBy,
356
+ colorBy,
357
+ filterBy: JSON.parse(JSON.stringify(filterBy)),
358
+ colorTagMap: Object.fromEntries(colorTagMap.toJSON()),
359
+ modificationTagMap: Object.fromEntries(modificationTagMap.toJSON()),
360
+ showSoftClip: self.showSoftClipping,
361
+ config: self.rendererConfig,
362
+ async onFeatureClick(_, featureId) {
363
+ const session = getSession(self);
364
+ const { rpcManager } = session;
365
+ try {
366
+ const f = featureId || self.featureIdUnderMouse;
367
+ if (!f) {
368
+ self.clearFeatureSelection();
369
+ }
370
+ else {
371
+ const sessionId = getRpcSessionId(self);
372
+ const { feature } = (await rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
373
+ featureId: f,
374
+ sessionId,
375
+ layoutId: getContainingView(self).id,
376
+ rendererType: 'PileupRenderer',
377
+ }));
378
+ if (feature) {
379
+ // @ts-ignore
380
+ self.selectFeature(new SimpleFeature(feature));
381
+ }
382
+ }
383
+ }
384
+ catch (e) {
385
+ console.error(e);
386
+ session.notify(`${e}`);
387
+ }
388
+ },
389
+ onClick() {
390
+ self.clearFeatureSelection();
391
+ },
392
+ // similar to click but opens a menu with further options
393
+ async onFeatureContextMenu(_, featureId) {
394
+ const session = getSession(self);
395
+ const { rpcManager } = session;
396
+ try {
397
+ const f = featureId || self.featureIdUnderMouse;
398
+ if (!f) {
399
+ self.clearFeatureSelection();
400
+ }
401
+ else {
402
+ const sessionId = getRpcSessionId(self);
403
+ const { feature } = (await rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
404
+ featureId: f,
405
+ sessionId,
406
+ layoutId: getContainingView(self).id,
407
+ rendererType: 'PileupRenderer',
408
+ }));
409
+ if (feature) {
410
+ // @ts-ignore
411
+ self.setContextMenuFeature(new SimpleFeature(feature));
412
+ }
413
+ }
414
+ }
415
+ catch (e) {
416
+ console.error(e);
417
+ session.notify(`${e}`);
418
+ }
419
+ },
420
+ };
421
+ },
422
+ trackMenuItems() {
423
+ return [
424
+ ...superTrackMenuItems(),
425
+ {
426
+ label: 'Show soft clipping',
427
+ icon: VisibilityIcon,
428
+ type: 'checkbox',
429
+ checked: self.showSoftClipping,
430
+ onClick: () => {
431
+ self.toggleSoftClipping();
432
+ // if toggling from off to on, will break sort for this track
433
+ // so clear it
434
+ if (self.showSoftClipping) {
435
+ self.clearSelected();
436
+ }
437
+ },
438
+ },
439
+ {
440
+ label: 'Sort by',
441
+ icon: SortIcon,
442
+ disabled: self.showSoftClipping,
443
+ subMenu: [
444
+ ...['Start location', 'Read strand', 'Base pair'].map(option => ({
445
+ label: option,
446
+ onClick: () => self.setSortedBy(option),
447
+ })),
448
+ {
449
+ label: 'Sort by tag...',
450
+ onClick: () => {
451
+ getSession(self).queueDialog(handleClose => [
452
+ SortByTagDlg,
453
+ { model: self, handleClose },
454
+ ]);
455
+ },
456
+ },
457
+ {
458
+ label: 'Clear sort',
459
+ onClick: () => self.clearSelected(),
460
+ },
461
+ ],
462
+ },
463
+ {
464
+ label: 'Color scheme',
465
+ icon: PaletteIcon,
466
+ subMenu: [
467
+ {
468
+ label: 'Normal',
469
+ onClick: () => {
470
+ self.setColorScheme({ type: 'normal' });
471
+ },
472
+ },
473
+ {
474
+ label: 'Mapping quality',
475
+ onClick: () => {
476
+ self.setColorScheme({ type: 'mappingQuality' });
477
+ },
478
+ },
479
+ {
480
+ label: 'Strand',
481
+ onClick: () => {
482
+ self.setColorScheme({ type: 'strand' });
483
+ },
484
+ },
485
+ {
486
+ label: 'Pair orientation',
487
+ onClick: () => {
488
+ self.setColorScheme({ type: 'pairOrientation' });
489
+ },
490
+ },
491
+ {
492
+ label: 'Per-base quality',
493
+ onClick: () => {
494
+ self.setColorScheme({ type: 'perBaseQuality' });
495
+ },
496
+ },
497
+ {
498
+ label: 'Per-base lettering',
499
+ onClick: () => {
500
+ self.setColorScheme({ type: 'perBaseLettering' });
501
+ },
502
+ },
503
+ {
504
+ label: 'Modifications or methylation',
505
+ onClick: () => {
506
+ getSession(self).queueDialog(doneCallback => [
507
+ ModificationsDlg,
508
+ { model: self, handleClose: doneCallback },
509
+ ]);
510
+ },
511
+ },
512
+ {
513
+ label: 'Insert size',
514
+ onClick: () => {
515
+ self.setColorScheme({ type: 'insertSize' });
516
+ },
517
+ },
518
+ {
519
+ label: 'Stranded paired-end',
520
+ onClick: () => {
521
+ self.setColorScheme({ type: 'reverseTemplate' });
522
+ },
523
+ },
524
+ {
525
+ label: 'Color by tag...',
526
+ onClick: () => {
527
+ getSession(self).queueDialog(doneCallback => [
528
+ ColorByTagDlg,
529
+ { model: self, handleClose: doneCallback },
530
+ ]);
531
+ },
532
+ },
533
+ ],
534
+ },
535
+ {
536
+ label: 'Filter by',
537
+ icon: FilterListIcon,
538
+ onClick: () => {
539
+ getSession(self).queueDialog(doneCallback => [
540
+ FilterByTagDlg,
541
+ { model: self, handleClose: doneCallback },
542
+ ]);
543
+ },
544
+ },
545
+ {
546
+ label: 'Set feature height',
547
+ onClick: () => {
548
+ getSession(self).queueDialog(doneCallback => [
549
+ SetFeatureHeightDlg,
550
+ { model: self, handleClose: doneCallback },
551
+ ]);
552
+ },
553
+ },
554
+ {
555
+ label: 'Set max height',
556
+ onClick: () => {
557
+ getSession(self).queueDialog(doneCallback => [
558
+ SetMaxHeightDlg,
559
+ { model: self, handleClose: doneCallback },
560
+ ]);
561
+ },
562
+ },
563
+ {
564
+ label: 'Fade mismatches by quality',
565
+ type: 'checkbox',
566
+ checked: self.mismatchAlphaSetting,
567
+ onClick: () => {
568
+ self.toggleMismatchAlpha();
569
+ },
570
+ },
571
+ ];
572
+ },
573
+ };
574
+ });
575
+ export default stateModelFactory;
576
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/LinearPileupDisplay/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ declare type Coord = [number, number];
3
+ declare const SNPCoverageTooltip: (props: {
4
+ model: any;
5
+ height: number;
6
+ offsetMouseCoord: Coord;
7
+ clientMouseCoord: Coord;
8
+ clientRect?: DOMRect;
9
+ }) => JSX.Element | null;
10
+ export default SNPCoverageTooltip;
@@ -0,0 +1,57 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import React from 'react';
3
+ import { observer } from 'mobx-react';
4
+ import { Tooltip } from '@jbrowse/plugin-wiggle';
5
+ const en = (n) => n.toLocaleString('en-US');
6
+ const toP = (s = 0) => +(+s).toFixed(1);
7
+ const pct = (n, total) => `${toP((n / (total || 1)) * 100)}%`;
8
+ const TooltipContents = React.forwardRef(({ feature }, reactRef) => {
9
+ const start = feature.get('start');
10
+ const end = feature.get('end');
11
+ const name = feature.get('refName');
12
+ const { refbase, all, total, ref, '-1': rn1, '1': r1, '0': r0, ...info } = feature.get('snpinfo');
13
+ const loc = [name, start === end ? en(start) : `${en(start)}..${en(end)}`]
14
+ .filter(f => !!f)
15
+ .join(':');
16
+ return (React.createElement("div", { ref: reactRef },
17
+ React.createElement("table", null,
18
+ React.createElement("caption", null, loc),
19
+ React.createElement("thead", null,
20
+ React.createElement("tr", null,
21
+ React.createElement("th", null, "Base"),
22
+ React.createElement("th", null, "Count"),
23
+ React.createElement("th", null, "% of Total"),
24
+ React.createElement("th", null, "Strands"),
25
+ React.createElement("th", null, "Source"))),
26
+ React.createElement("tbody", null,
27
+ React.createElement("tr", null,
28
+ React.createElement("td", null, "Total"),
29
+ React.createElement("td", null, all)),
30
+ React.createElement("tr", null,
31
+ React.createElement("td", null,
32
+ "REF ",
33
+ refbase ? `(${refbase.toUpperCase()})` : ''),
34
+ React.createElement("td", null, ref),
35
+ React.createElement("td", null, pct(ref, all)),
36
+ React.createElement("td", null,
37
+ rn1 ? `${rn1}(-)` : '',
38
+ r1 ? `${r1}(+)` : ''),
39
+ React.createElement("td", null)),
40
+ Object.entries(info).map(([key, entry]) => Object.entries(entry).map(([base, score]) => (React.createElement("tr", { key: base },
41
+ React.createElement("td", null, base.toUpperCase()),
42
+ React.createElement("td", null, score.total),
43
+ React.createElement("td", null, base === 'total' || base === 'skip'
44
+ ? '---'
45
+ : pct(score.total, all)),
46
+ React.createElement("td", null,
47
+ score['-1'] ? `${score['-1']}(-)` : '',
48
+ score['1'] ? `${score['1']}(+)` : ''),
49
+ React.createElement("td", null, key)))))))));
50
+ });
51
+ const SNPCoverageTooltip = observer((props) => {
52
+ const { model } = props;
53
+ const { featureUnderMouse: feat } = model;
54
+ return feat && feat.get('type') === 'skip' ? null : (React.createElement(Tooltip, { TooltipContents: TooltipContents, ...props }));
55
+ });
56
+ export default SNPCoverageTooltip;
57
+ //# sourceMappingURL=Tooltip.js.map