@jbrowse/plugin-alignments 1.7.11 → 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 (289) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +192 -216
  2. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -0
  3. package/dist/AlignmentsFeatureDetail/index.d.ts +3 -3
  4. package/dist/AlignmentsFeatureDetail/index.js +48 -44
  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 -417
  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 +27 -17
  62. package/dist/LinearPileupDisplay/model.js +702 -797
  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 +104 -77
  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 +13 -11
  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 +4 -4
  81. package/dist/PileupRenderer/PileupRenderer.js +938 -1205
  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.js +436 -589
  93. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -0
  94. package/dist/SNPCoverageAdapter/configSchema.js +10 -20
  95. package/dist/SNPCoverageAdapter/configSchema.js.map +1 -0
  96. package/dist/SNPCoverageAdapter/index.js +46 -41
  97. package/dist/SNPCoverageAdapter/index.js.map +1 -0
  98. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +1 -1
  99. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +265 -290
  100. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -0
  101. package/dist/SNPCoverageRenderer/configSchema.js +30 -39
  102. package/dist/SNPCoverageRenderer/configSchema.js.map +1 -0
  103. package/dist/SNPCoverageRenderer/index.js +19 -30
  104. package/dist/SNPCoverageRenderer/index.js.map +1 -0
  105. package/dist/index.js +135 -152
  106. package/dist/index.js.map +1 -0
  107. package/dist/shared.js +84 -92
  108. package/dist/shared.js.map +1 -0
  109. package/dist/util.js +130 -121
  110. package/dist/util.js.map +1 -0
  111. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +6 -0
  112. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +145 -0
  113. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -0
  114. package/esm/AlignmentsFeatureDetail/index.d.ts +38 -0
  115. package/esm/AlignmentsFeatureDetail/index.js +23 -0
  116. package/esm/AlignmentsFeatureDetail/index.js.map +1 -0
  117. package/esm/AlignmentsTrack/index.d.ts +2 -0
  118. package/esm/AlignmentsTrack/index.js +23 -0
  119. package/esm/AlignmentsTrack/index.js.map +1 -0
  120. package/esm/BamAdapter/BamAdapter.d.ts +40 -0
  121. package/esm/BamAdapter/BamAdapter.js +173 -0
  122. package/esm/BamAdapter/BamAdapter.js.map +1 -0
  123. package/esm/BamAdapter/BamSlightlyLazyFeature.d.ts +33 -0
  124. package/esm/BamAdapter/BamSlightlyLazyFeature.js +107 -0
  125. package/esm/BamAdapter/BamSlightlyLazyFeature.js.map +1 -0
  126. package/esm/BamAdapter/MismatchParser.d.ts +25 -0
  127. package/esm/BamAdapter/MismatchParser.js +294 -0
  128. package/esm/BamAdapter/MismatchParser.js.map +1 -0
  129. package/esm/BamAdapter/configSchema.d.ts +2 -0
  130. package/esm/BamAdapter/configSchema.js +31 -0
  131. package/esm/BamAdapter/configSchema.js.map +1 -0
  132. package/esm/BamAdapter/index.d.ts +3 -0
  133. package/esm/BamAdapter/index.js +10 -0
  134. package/esm/BamAdapter/index.js.map +1 -0
  135. package/esm/CramAdapter/CramAdapter.d.ts +53 -0
  136. package/esm/CramAdapter/CramAdapter.js +228 -0
  137. package/esm/CramAdapter/CramAdapter.js.map +1 -0
  138. package/esm/CramAdapter/CramSlightlyLazyFeature.d.ts +49 -0
  139. package/esm/CramAdapter/CramSlightlyLazyFeature.js +349 -0
  140. package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -0
  141. package/esm/CramAdapter/CramTestAdapters.d.ts +29 -0
  142. package/esm/CramAdapter/CramTestAdapters.js +70 -0
  143. package/esm/CramAdapter/CramTestAdapters.js.map +1 -0
  144. package/esm/CramAdapter/configSchema.d.ts +3 -0
  145. package/esm/CramAdapter/configSchema.js +26 -0
  146. package/esm/CramAdapter/configSchema.js.map +1 -0
  147. package/esm/CramAdapter/index.d.ts +3 -0
  148. package/esm/CramAdapter/index.js +11 -0
  149. package/esm/CramAdapter/index.js.map +1 -0
  150. package/esm/HtsgetBamAdapter/HtsgetBamAdapter.d.ts +9 -0
  151. package/esm/HtsgetBamAdapter/HtsgetBamAdapter.js +27 -0
  152. package/esm/HtsgetBamAdapter/HtsgetBamAdapter.js.map +1 -0
  153. package/esm/HtsgetBamAdapter/configSchema.d.ts +2 -0
  154. package/esm/HtsgetBamAdapter/configSchema.js +17 -0
  155. package/esm/HtsgetBamAdapter/configSchema.js.map +1 -0
  156. package/esm/HtsgetBamAdapter/index.d.ts +3 -0
  157. package/esm/HtsgetBamAdapter/index.js +16 -0
  158. package/esm/HtsgetBamAdapter/index.js.map +1 -0
  159. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +7 -0
  160. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +34 -0
  161. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -0
  162. package/esm/LinearAlignmentsDisplay/index.d.ts +2 -0
  163. package/esm/LinearAlignmentsDisplay/index.js +19 -0
  164. package/esm/LinearAlignmentsDisplay/index.js.map +1 -0
  165. package/esm/LinearAlignmentsDisplay/models/configSchema.d.ts +4 -0
  166. package/esm/LinearAlignmentsDisplay/models/configSchema.js +12 -0
  167. package/esm/LinearAlignmentsDisplay/models/configSchema.js.map +1 -0
  168. package/esm/LinearAlignmentsDisplay/models/model.d.ts +105 -0
  169. package/esm/LinearAlignmentsDisplay/models/model.js +181 -0
  170. package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -0
  171. package/esm/LinearPileupDisplay/components/ColorByModifications.d.ts +14 -0
  172. package/esm/LinearPileupDisplay/components/ColorByModifications.js +71 -0
  173. package/esm/LinearPileupDisplay/components/ColorByModifications.js.map +1 -0
  174. package/esm/LinearPileupDisplay/components/ColorByTag.d.ts +9 -0
  175. package/esm/LinearPileupDisplay/components/ColorByTag.js +45 -0
  176. package/esm/LinearPileupDisplay/components/ColorByTag.js.map +1 -0
  177. package/esm/LinearPileupDisplay/components/FilterByTag.d.ts +18 -0
  178. package/esm/LinearPileupDisplay/components/FilterByTag.js +123 -0
  179. package/esm/LinearPileupDisplay/components/FilterByTag.js.map +1 -0
  180. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +13 -0
  181. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +13 -0
  182. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -0
  183. package/esm/LinearPileupDisplay/components/SetFeatureHeight.d.ts +16 -0
  184. package/esm/LinearPileupDisplay/components/SetFeatureHeight.js +41 -0
  185. package/esm/LinearPileupDisplay/components/SetFeatureHeight.js.map +1 -0
  186. package/esm/LinearPileupDisplay/components/SetMaxHeight.d.ts +10 -0
  187. package/esm/LinearPileupDisplay/components/SetMaxHeight.js +43 -0
  188. package/esm/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -0
  189. package/esm/LinearPileupDisplay/components/SortByTag.d.ts +9 -0
  190. package/esm/LinearPileupDisplay/components/SortByTag.js +43 -0
  191. package/esm/LinearPileupDisplay/components/SortByTag.js.map +1 -0
  192. package/esm/LinearPileupDisplay/configSchema.d.ts +6 -0
  193. package/esm/LinearPileupDisplay/configSchema.js +41 -0
  194. package/esm/LinearPileupDisplay/configSchema.js.map +1 -0
  195. package/esm/LinearPileupDisplay/index.d.ts +2 -0
  196. package/esm/LinearPileupDisplay/index.js +18 -0
  197. package/esm/LinearPileupDisplay/index.js.map +1 -0
  198. package/esm/LinearPileupDisplay/model.d.ts +332 -0
  199. package/esm/LinearPileupDisplay/model.js +576 -0
  200. package/esm/LinearPileupDisplay/model.js.map +1 -0
  201. package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +10 -0
  202. package/esm/LinearSNPCoverageDisplay/components/Tooltip.js +57 -0
  203. package/esm/LinearSNPCoverageDisplay/components/Tooltip.js.map +1 -0
  204. package/esm/LinearSNPCoverageDisplay/index.d.ts +2 -0
  205. package/esm/LinearSNPCoverageDisplay/index.js +18 -0
  206. package/esm/LinearSNPCoverageDisplay/index.js.map +1 -0
  207. package/esm/LinearSNPCoverageDisplay/models/configSchema.d.ts +2 -0
  208. package/esm/LinearSNPCoverageDisplay/models/configSchema.js +44 -0
  209. package/esm/LinearSNPCoverageDisplay/models/configSchema.js.map +1 -0
  210. package/esm/LinearSNPCoverageDisplay/models/model.d.ts +348 -0
  211. package/esm/LinearSNPCoverageDisplay/models/model.js +185 -0
  212. package/esm/LinearSNPCoverageDisplay/models/model.js.map +1 -0
  213. package/esm/NestedFrequencyTable.d.ts +14 -0
  214. package/esm/NestedFrequencyTable.js +101 -0
  215. package/esm/NestedFrequencyTable.js.map +1 -0
  216. package/esm/PileupRPC/rpcMethods.d.ts +34 -0
  217. package/esm/PileupRPC/rpcMethods.js +70 -0
  218. package/esm/PileupRPC/rpcMethods.js.map +1 -0
  219. package/esm/PileupRenderer/PileupLayoutSession.d.ts +32 -0
  220. package/esm/PileupRenderer/PileupLayoutSession.js +32 -0
  221. package/esm/PileupRenderer/PileupLayoutSession.js.map +1 -0
  222. package/esm/PileupRenderer/PileupRenderer.d.ts +182 -0
  223. package/esm/PileupRenderer/PileupRenderer.js +830 -0
  224. package/esm/PileupRenderer/PileupRenderer.js.map +1 -0
  225. package/esm/PileupRenderer/components/PileupRendering.d.ts +23 -0
  226. package/esm/PileupRenderer/components/PileupRendering.js +138 -0
  227. package/esm/PileupRenderer/components/PileupRendering.js.map +1 -0
  228. package/esm/PileupRenderer/configSchema.d.ts +2 -0
  229. package/esm/PileupRenderer/configSchema.js +64 -0
  230. package/esm/PileupRenderer/configSchema.js.map +1 -0
  231. package/esm/PileupRenderer/index.d.ts +2 -0
  232. package/esm/PileupRenderer/index.js +12 -0
  233. package/esm/PileupRenderer/index.js.map +1 -0
  234. package/esm/PileupRenderer/sortUtil.d.ts +8 -0
  235. package/esm/PileupRenderer/sortUtil.js +80 -0
  236. package/esm/PileupRenderer/sortUtil.js.map +1 -0
  237. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +67 -0
  238. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js +259 -0
  239. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -0
  240. package/esm/SNPCoverageAdapter/configSchema.d.ts +3 -0
  241. package/esm/SNPCoverageAdapter/configSchema.js +6 -0
  242. package/esm/SNPCoverageAdapter/configSchema.js.map +1 -0
  243. package/esm/SNPCoverageAdapter/index.d.ts +3 -0
  244. package/esm/SNPCoverageAdapter/index.js +18 -0
  245. package/esm/SNPCoverageAdapter/index.js.map +1 -0
  246. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +20 -0
  247. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +185 -0
  248. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -0
  249. package/esm/SNPCoverageRenderer/configSchema.d.ts +2 -0
  250. package/esm/SNPCoverageRenderer/configSchema.js +29 -0
  251. package/esm/SNPCoverageRenderer/configSchema.js.map +1 -0
  252. package/esm/SNPCoverageRenderer/index.d.ts +3 -0
  253. package/esm/SNPCoverageRenderer/index.js +14 -0
  254. package/esm/SNPCoverageRenderer/index.js.map +1 -0
  255. package/esm/index.d.ts +10 -0
  256. package/esm/index.js +91 -0
  257. package/esm/index.js.map +1 -0
  258. package/esm/shared.d.ts +25 -0
  259. package/esm/shared.js +28 -0
  260. package/esm/shared.js.map +1 -0
  261. package/esm/util.d.ts +19 -0
  262. package/esm/util.js +83 -0
  263. package/esm/util.js.map +1 -0
  264. package/package.json +19 -11
  265. package/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx +4 -4
  266. package/src/AlignmentsFeatureDetail/__snapshots__/index.test.js.snap +321 -397
  267. package/src/LinearAlignmentsDisplay/components/AlignmentsDisplay.tsx +3 -3
  268. package/src/LinearPileupDisplay/components/ColorByModifications.tsx +7 -7
  269. package/src/LinearPileupDisplay/components/ColorByTag.tsx +5 -5
  270. package/src/LinearPileupDisplay/components/FilterByTag.tsx +5 -5
  271. package/src/LinearPileupDisplay/components/LinearPileupDisplayBlurb.tsx +1 -1
  272. package/src/LinearPileupDisplay/components/SetFeatureHeight.tsx +9 -9
  273. package/src/LinearPileupDisplay/components/SetMaxHeight.tsx +5 -5
  274. package/src/LinearPileupDisplay/components/SortByTag.tsx +5 -5
  275. package/src/LinearPileupDisplay/model.ts +16 -10
  276. package/src/LinearSNPCoverageDisplay/models/model.ts +25 -25
  277. package/src/PileupRenderer/PileupRenderer.tsx +54 -40
  278. package/src/PileupRenderer/components/PileupRendering.tsx +11 -11
  279. package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +7 -5
  280. package/dist/AlignmentsFeatureDetail/index.test.js +0 -60
  281. package/dist/BamAdapter/BamAdapter.test.js +0 -177
  282. package/dist/BamAdapter/MismatchParser.test.js +0 -251
  283. package/dist/CramAdapter/CramAdapter.test.js +0 -138
  284. package/dist/LinearAlignmentsDisplay/models/configSchema.test.js +0 -83
  285. package/dist/LinearPileupDisplay/configSchema.test.js +0 -92
  286. package/dist/LinearSNPCoverageDisplay/models/configSchema.test.js +0 -62
  287. package/dist/PileupRenderer/components/PileupRendering.test.js +0 -36
  288. package/dist/declare.d.js +0 -1
  289. package/dist/index.test.js +0 -26
@@ -1,809 +1,714 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
-
12
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
-
14
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
15
-
16
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
-
18
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
19
-
20
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
21
-
22
- var _react = require("react");
23
-
24
- var _mobx = require("mobx");
25
-
26
- var _mobxStateTree = require("mobx-state-tree");
27
-
28
- var _copyToClipboard = _interopRequireDefault(require("copy-to-clipboard"));
29
-
30
- var _configuration = require("@jbrowse/core/configuration");
31
-
32
- var _tracks = require("@jbrowse/core/util/tracks");
33
-
34
- var _util = require("@jbrowse/core/util");
35
-
36
- var _pluginLinearGenomeView = require("@jbrowse/plugin-linear-genome-view");
37
-
38
- var _Visibility = _interopRequireDefault(require("@material-ui/icons/Visibility"));
39
-
40
- var _Icons = require("@jbrowse/core/ui/Icons");
41
-
42
- var _MenuOpen = _interopRequireDefault(require("@material-ui/icons/MenuOpen"));
43
-
44
- var _Sort = _interopRequireDefault(require("@material-ui/icons/Sort"));
45
-
46
- var _Palette = _interopRequireDefault(require("@material-ui/icons/Palette"));
47
-
48
- var _ClearAll = _interopRequireDefault(require("@material-ui/icons/ClearAll"));
49
-
50
- var _LinearPileupDisplayBlurb = _interopRequireDefault(require("./components/LinearPileupDisplayBlurb"));
51
-
52
- var _shared = require("../shared");
53
-
54
- var _excluded = ["uniqueId"];
55
-
56
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
57
-
58
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
59
-
60
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
61
-
62
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || (0, _typeof2.default)(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
63
-
64
- // async
65
- var ColorByTagDlg = /*#__PURE__*/(0, _react.lazy)(function () {
66
- return Promise.resolve().then(function () {
67
- return _interopRequireWildcard(require('./components/ColorByTag'));
68
- });
69
- });
70
- var FilterByTagDlg = /*#__PURE__*/(0, _react.lazy)(function () {
71
- return Promise.resolve().then(function () {
72
- return _interopRequireWildcard(require('./components/FilterByTag'));
73
- });
74
- });
75
- var SortByTagDlg = /*#__PURE__*/(0, _react.lazy)(function () {
76
- return Promise.resolve().then(function () {
77
- return _interopRequireWildcard(require('./components/SortByTag'));
78
- });
79
- });
80
- var SetFeatureHeightDlg = /*#__PURE__*/(0, _react.lazy)(function () {
81
- return Promise.resolve().then(function () {
82
- return _interopRequireWildcard(require('./components/SetFeatureHeight'));
83
- });
84
- });
85
- var SetMaxHeightDlg = /*#__PURE__*/(0, _react.lazy)(function () {
86
- return Promise.resolve().then(function () {
87
- return _interopRequireWildcard(require('./components/SetMaxHeight'));
88
- });
89
- });
90
- var ModificationsDlg = /*#__PURE__*/(0, _react.lazy)(function () {
91
- return Promise.resolve().then(function () {
92
- return _interopRequireWildcard(require('./components/ColorByModifications'));
93
- });
94
- }); // using a map because it preserves order
95
-
96
- var rendererTypes = new Map([['pileup', 'PileupRenderer'], ['svg', 'SvgFeatureRenderer']]);
97
-
98
- var stateModelFactory = function stateModelFactory(configSchema) {
99
- return _mobxStateTree.types.compose('LinearPileupDisplay', _pluginLinearGenomeView.BaseLinearDisplay, _mobxStateTree.types.model({
100
- type: _mobxStateTree.types.literal('LinearPileupDisplay'),
101
- configuration: (0, _configuration.ConfigurationReference)(configSchema),
102
- showSoftClipping: false,
103
- featureHeight: _mobxStateTree.types.maybe(_mobxStateTree.types.number),
104
- noSpacing: _mobxStateTree.types.maybe(_mobxStateTree.types.boolean),
105
- fadeLikelihood: _mobxStateTree.types.maybe(_mobxStateTree.types.boolean),
106
- trackMaxHeight: _mobxStateTree.types.maybe(_mobxStateTree.types.number),
107
- mismatchAlpha: _mobxStateTree.types.maybe(_mobxStateTree.types.boolean),
108
- sortedBy: _mobxStateTree.types.maybe(_mobxStateTree.types.model({
109
- type: _mobxStateTree.types.string,
110
- pos: _mobxStateTree.types.number,
111
- tag: _mobxStateTree.types.maybe(_mobxStateTree.types.string),
112
- refName: _mobxStateTree.types.string,
113
- assemblyName: _mobxStateTree.types.string
114
- })),
115
- colorBy: _mobxStateTree.types.maybe(_mobxStateTree.types.model({
116
- type: _mobxStateTree.types.string,
117
- tag: _mobxStateTree.types.maybe(_mobxStateTree.types.string),
118
- extra: _mobxStateTree.types.frozen()
119
- })),
120
- filterBy: _mobxStateTree.types.optional(_mobxStateTree.types.model({
121
- flagInclude: _mobxStateTree.types.optional(_mobxStateTree.types.number, 0),
122
- flagExclude: _mobxStateTree.types.optional(_mobxStateTree.types.number, 1540),
123
- readName: _mobxStateTree.types.maybe(_mobxStateTree.types.string),
124
- tagFilter: _mobxStateTree.types.maybe(_mobxStateTree.types.model({
125
- tag: _mobxStateTree.types.string,
126
- value: _mobxStateTree.types.string
127
- }))
128
- }), {})
129
- })).volatile(function () {
130
- return {
131
- colorTagMap: _mobx.observable.map({}),
132
- modificationTagMap: _mobx.observable.map({}),
133
- featureUnderMouseVolatile: undefined,
134
- ready: false
135
- };
136
- }).actions(function (self) {
137
- return {
138
- setReady: function setReady(flag) {
139
- self.ready = flag;
140
- },
141
- setMaxHeight: function setMaxHeight(n) {
142
- self.trackMaxHeight = n;
143
- },
144
- setFeatureHeight: function setFeatureHeight(n) {
145
- self.featureHeight = n;
146
- },
147
- setNoSpacing: function setNoSpacing(flag) {
148
- self.noSpacing = flag;
149
- },
150
- setColorScheme: function setColorScheme(colorScheme) {
151
- self.colorTagMap = _mobx.observable.map({}); // clear existing mapping
152
-
153
- self.colorBy = (0, _mobxStateTree.cast)(colorScheme);
154
- self.ready = false;
155
- },
156
- updateModificationColorMap: function updateModificationColorMap(uniqueModifications) {
157
- var colorPalette = ['red', 'blue', 'green', 'orange', 'purple'];
158
- uniqueModifications.forEach(function (value) {
159
- if (!self.modificationTagMap.has(value)) {
160
- var totalKeys = (0, _toConsumableArray2.default)(self.modificationTagMap.keys()).length;
161
- var newColor = colorPalette[totalKeys];
162
- self.modificationTagMap.set(value, newColor);
163
- }
164
- });
165
- },
166
- updateColorTagMap: function updateColorTagMap(uniqueTag) {
167
- // pale color scheme
168
- // https://cran.r-project.org/web/packages/khroma/vignettes/tol.html
169
- // e.g. "tol_light"
170
- var colorPalette = ['#BBCCEE', 'pink', '#CCDDAA', '#EEEEBB', '#FFCCCC', 'lightblue', 'lightgreen', 'tan', '#CCEEFF', 'lightsalmon'];
171
- uniqueTag.forEach(function (value) {
172
- if (!self.colorTagMap.has(value)) {
173
- var totalKeys = (0, _toConsumableArray2.default)(self.colorTagMap.keys()).length;
174
- var newColor = colorPalette[totalKeys];
175
- self.colorTagMap.set(value, newColor);
176
- }
177
- });
178
- },
179
- setFeatureUnderMouse: function setFeatureUnderMouse(feat) {
180
- self.featureUnderMouseVolatile = feat;
181
- }
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
182
10
  };
183
- }).actions(function (self) {
184
- return {
185
- afterAttach: function afterAttach() {
186
- (0, _mobxStateTree.addDisposer)(self, (0, _mobx.autorun)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
187
- var _getSession, rpcManager, view, sortedBy, colorBy, parentTrack, adapterConfig, rendererType, staticBlocks, bpPerPx, uniqueTagSet, adapter, pos, refName, assemblyName;
188
-
189
- return _regenerator.default.wrap(function _callee$(_context) {
190
- while (1) {
191
- switch (_context.prev = _context.next) {
192
- case 0:
193
- _context.prev = 0;
194
- _getSession = (0, _util.getSession)(self), rpcManager = _getSession.rpcManager;
195
- view = (0, _util.getContainingView)(self);
196
- sortedBy = self.sortedBy, colorBy = self.colorBy, parentTrack = self.parentTrack, adapterConfig = self.adapterConfig, rendererType = self.rendererType;
197
- staticBlocks = view.staticBlocks, bpPerPx = view.bpPerPx; // continually generate the vc pairing, set and rerender if any
198
- // new values seen
199
-
200
- if (!(colorBy !== null && colorBy !== void 0 && colorBy.tag)) {
201
- _context.next = 10;
202
- break;
203
- }
204
-
205
- _context.next = 8;
206
- return (0, _shared.getUniqueTagValues)(self, colorBy, staticBlocks);
207
-
208
- case 8:
209
- uniqueTagSet = _context.sent;
210
- self.updateColorTagMap(uniqueTagSet);
211
-
212
- case 10:
213
- if (!((colorBy === null || colorBy === void 0 ? void 0 : colorBy.type) === 'modifications')) {
214
- _context.next = 17;
215
- break;
216
- }
217
-
218
- adapter = (0, _configuration.getConf)(parentTrack, ['adapter']);
219
- _context.t0 = self;
220
- _context.next = 15;
221
- return (0, _shared.getUniqueModificationValues)(self, adapter, colorBy, staticBlocks);
222
-
223
- case 15:
224
- _context.t1 = _context.sent;
225
-
226
- _context.t0.updateModificationColorMap.call(_context.t0, _context.t1);
227
-
228
- case 17:
229
- if (!sortedBy) {
230
- _context.next = 25;
231
- break;
232
- }
233
-
234
- pos = sortedBy.pos, refName = sortedBy.refName, assemblyName = sortedBy.assemblyName; // render just the sorted region first
235
-
236
- _context.next = 21;
237
- return self.rendererType.renderInClient(rpcManager, _objectSpread({
238
- assemblyName: assemblyName,
239
- regions: [{
240
- start: pos,
241
- end: pos + 1,
242
- refName: refName,
243
- assemblyName: assemblyName
244
- }],
245
- adapterConfig: adapterConfig,
246
- rendererType: rendererType.name,
247
- sessionId: (0, _tracks.getRpcSessionId)(self),
248
- layoutId: view.id,
249
- timeout: 1000000
250
- }, self.renderProps()));
251
-
252
- case 21:
253
- self.setReady(true);
254
- self.setCurrBpPerPx(bpPerPx);
255
- _context.next = 26;
256
- break;
257
-
258
- case 25:
259
- self.setReady(true);
260
-
261
- case 26:
262
- _context.next = 32;
263
- break;
264
-
265
- case 28:
266
- _context.prev = 28;
267
- _context.t2 = _context["catch"](0);
268
- console.error(_context.t2);
269
- self.setError(_context.t2);
270
-
271
- case 32:
272
- case "end":
273
- return _context.stop();
274
- }
275
- }
276
- }, _callee, null, [[0, 28]]);
277
- })), {
278
- delay: 1000
279
- })); // autorun synchronizes featureUnderMouse with featureIdUnderMouse
280
-
281
- (0, _mobxStateTree.addDisposer)(self, (0, _mobx.autorun)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
282
- var session, _self$featureUnderMou, featureId, sessionId, view, _ref3, feature;
283
-
284
- return _regenerator.default.wrap(function _callee2$(_context2) {
285
- while (1) {
286
- switch (_context2.prev = _context2.next) {
287
- case 0:
288
- session = (0, _util.getSession)(self);
289
- _context2.prev = 1;
290
- featureId = self.featureIdUnderMouse;
291
-
292
- if (!(((_self$featureUnderMou = self.featureUnderMouse) === null || _self$featureUnderMou === void 0 ? void 0 : _self$featureUnderMou.id()) !== featureId)) {
293
- _context2.next = 15;
294
- break;
295
- }
296
-
297
- if (featureId) {
298
- _context2.next = 8;
299
- break;
300
- }
301
-
302
- self.setFeatureUnderMouse(undefined);
303
- _context2.next = 15;
304
- break;
305
-
306
- case 8:
307
- sessionId = (0, _tracks.getRpcSessionId)(self);
308
- view = (0, _util.getContainingView)(self);
309
- _context2.next = 12;
310
- return session.rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
311
- featureId: featureId,
312
- sessionId: sessionId,
313
- layoutId: view.id,
314
- rendererType: 'PileupRenderer'
315
- });
316
-
317
- case 12:
318
- _ref3 = _context2.sent;
319
- feature = _ref3.feature;
320
-
321
- // check featureIdUnderMouse is still the same as the
322
- // feature.id that was returned e.g. that the user hasn't
323
- // moused over to a new position during the async operation
324
- // above
325
- // @ts-ignore
326
- if (self.featureIdUnderMouse === feature.uniqueId) {
327
- // @ts-ignore
328
- self.setFeatureUnderMouse(new _util.SimpleFeature(feature));
329
- }
330
-
331
- case 15:
332
- _context2.next = 21;
333
- break;
334
-
335
- case 17:
336
- _context2.prev = 17;
337
- _context2.t0 = _context2["catch"](1);
338
- console.error(_context2.t0);
339
- session.notify("".concat(_context2.t0), 'error');
340
-
341
- case 21:
342
- case "end":
343
- return _context2.stop();
344
- }
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (_) try {
52
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
345
66
  }
346
- }, _callee2, null, [[1, 17]]);
347
- }))));
348
- },
349
- selectFeature: function selectFeature(feature) {
350
- var session = (0, _util.getSession)(self);
351
-
352
- if ((0, _util.isSessionModelWithWidgets)(session)) {
353
- var featureWidget = session.addWidget('AlignmentsFeatureWidget', 'alignmentFeature', {
354
- featureData: feature.toJSON(),
355
- view: (0, _util.getContainingView)(self)
356
- });
357
- session.showWidget(featureWidget);
358
- }
359
-
360
- session.setSelection(feature);
361
- },
362
- clearSelected: function clearSelected() {
363
- self.sortedBy = undefined;
364
- },
365
- // uses copy-to-clipboard and generates notification
366
- copyFeatureToClipboard: function copyFeatureToClipboard(feature) {
367
- var _feature$toJSON = feature.toJSON(),
368
- uniqueId = _feature$toJSON.uniqueId,
369
- rest = (0, _objectWithoutProperties2.default)(_feature$toJSON, _excluded);
370
-
371
- var session = (0, _util.getSession)(self);
372
- (0, _copyToClipboard.default)(JSON.stringify(rest, null, 4));
373
- session.notify('Copied to clipboard', 'success');
374
- },
375
- toggleSoftClipping: function toggleSoftClipping() {
376
- self.showSoftClipping = !self.showSoftClipping;
377
- },
378
- toggleMismatchAlpha: function toggleMismatchAlpha() {
379
- self.mismatchAlpha = !self.mismatchAlpha;
380
- },
381
- setConfig: function setConfig(configuration) {
382
- self.configuration = configuration;
383
- },
384
- setSortedBy: function setSortedBy(type, tag) {
385
- var _ref4 = (0, _util.getContainingView)(self),
386
- centerLineInfo = _ref4.centerLineInfo;
387
-
388
- if (!centerLineInfo) {
389
- return;
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
72
+ var __rest = (this && this.__rest) || function (s, e) {
73
+ var t = {};
74
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
75
+ t[p] = s[p];
76
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
77
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
78
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
79
+ t[p[i]] = s[p[i]];
390
80
  }
391
-
392
- var refName = centerLineInfo.refName,
393
- assemblyName = centerLineInfo.assemblyName,
394
- offset = centerLineInfo.offset;
395
- var centerBp = Math.round(offset) + 1;
396
- var centerRefName = refName;
397
-
398
- if (centerBp < 0) {
399
- return;
81
+ return t;
82
+ };
83
+ var __read = (this && this.__read) || function (o, n) {
84
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
85
+ if (!m) return o;
86
+ var i = m.call(o), r, ar = [], e;
87
+ try {
88
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
89
+ }
90
+ catch (error) { e = { error: error }; }
91
+ finally {
92
+ try {
93
+ if (r && !r.done && (m = i["return"])) m.call(i);
400
94
  }
401
-
402
- self.sortedBy = {
403
- type: type,
404
- pos: centerBp,
405
- refName: centerRefName,
406
- assemblyName: assemblyName,
407
- tag: tag
408
- };
409
- self.ready = false;
410
- },
411
- setFilterBy: function setFilterBy(filter) {
412
- self.filterBy = (0, _mobxStateTree.cast)(filter);
413
- }
414
- };
415
- }).actions(function (self) {
416
- // resets the sort object and refresh whole display on reload
417
- var superReload = self.reload;
418
- return {
419
- reload: function reload() {
420
- self.clearSelected();
421
- superReload();
422
- }
423
- };
424
- }).views(function (self) {
425
- return {
426
- get maxHeight() {
427
- var conf = (0, _configuration.getConf)(self, ['renderers', self.rendererTypeName]) || {};
428
- return self.trackMaxHeight !== undefined ? self.trackMaxHeight : conf.maxHeight;
429
- },
430
-
431
- get rendererConfig() {
432
- var configBlob = (0, _configuration.getConf)(self, ['renderers', self.rendererTypeName]) || {};
433
- return self.rendererType.configSchema.create(_objectSpread(_objectSpread({}, configBlob), {}, {
434
- height: self.featureHeight,
435
- noSpacing: self.noSpacing,
436
- maxHeight: this.maxHeight,
437
- mismatchAlpha: self.mismatchAlpha
438
- }), (0, _mobxStateTree.getEnv)(self));
439
- },
440
-
441
- get featureHeightSetting() {
442
- return self.featureHeight || (0, _configuration.readConfObject)(this.rendererConfig, 'height');
443
- },
444
-
445
- get mismatchAlphaSetting() {
446
- return self.mismatchAlpha !== undefined ? self.mismatchAlpha : (0, _configuration.readConfObject)(this.rendererConfig, 'mismatchAlpha');
447
- },
448
-
449
- get featureUnderMouse() {
450
- return self.featureUnderMouseVolatile;
451
- }
452
-
453
- };
454
- }).views(function (self) {
455
- var superTrackMenuItems = self.trackMenuItems,
456
- superRenderProps = self.renderProps;
457
- return {
458
- get rendererTypeName() {
459
- var viewName = (0, _configuration.getConf)(self, 'defaultRendering');
460
- var rendererType = rendererTypes.get(viewName);
461
-
462
- if (!rendererType) {
463
- throw new Error("unknown alignments view name ".concat(viewName));
95
+ finally { if (e) throw e.error; }
96
+ }
97
+ return ar;
98
+ };
99
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
100
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
101
+ if (ar || !(i in from)) {
102
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
103
+ ar[i] = from[i];
464
104
  }
465
-
466
- return rendererType;
467
- },
468
-
469
- contextMenuItems: function contextMenuItems() {
470
- var feat = self.contextMenuFeature;
471
- var contextMenuItems = feat ? [{
472
- label: 'Open feature details',
473
- icon: _MenuOpen.default,
474
- onClick: function onClick() {
475
- self.clearFeatureSelection();
476
-
477
- if (feat) {
478
- self.selectFeature(feat);
479
- }
480
- }
481
- }, {
482
- label: 'Copy info to clipboard',
483
- icon: _Icons.ContentCopy,
484
- onClick: function onClick() {
485
- if (feat) {
486
- self.copyFeatureToClipboard(feat);
487
- }
488
- }
489
- }] : [];
490
- return contextMenuItems;
491
- },
492
-
493
- get DisplayBlurb() {
494
- return _LinearPileupDisplayBlurb.default;
495
- },
496
-
497
- renderProps: function renderProps() {
498
- var view = (0, _util.getContainingView)(self);
499
- var colorTagMap = self.colorTagMap,
500
- modificationTagMap = self.modificationTagMap,
501
- sortedBy = self.sortedBy,
502
- colorBy = self.colorBy,
503
- filterBy = self.filterBy,
504
- rpcDriverName = self.rpcDriverName,
505
- currBpPerPx = self.currBpPerPx,
506
- ready = self.ready;
507
- var superProps = superRenderProps();
508
- return _objectSpread(_objectSpread({}, superProps), {}, {
509
- notReady: superProps.notReady || !ready || sortedBy && currBpPerPx !== view.bpPerPx,
510
- rpcDriverName: rpcDriverName,
511
- displayModel: self,
512
- sortedBy: sortedBy,
513
- colorBy: colorBy,
514
- filterBy: JSON.parse(JSON.stringify(filterBy)),
515
- colorTagMap: JSON.parse(JSON.stringify(colorTagMap)),
516
- modificationTagMap: JSON.parse(JSON.stringify(modificationTagMap)),
517
- showSoftClip: self.showSoftClipping,
518
- config: self.rendererConfig,
519
- onFeatureClick: function onFeatureClick(_, featureId) {
520
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
521
- var session, rpcManager, f, sessionId, _ref5, feature;
522
-
523
- return _regenerator.default.wrap(function _callee3$(_context3) {
524
- while (1) {
525
- switch (_context3.prev = _context3.next) {
526
- case 0:
527
- session = (0, _util.getSession)(self);
528
- rpcManager = session.rpcManager;
529
- _context3.prev = 2;
530
- f = featureId || self.featureIdUnderMouse;
531
-
532
- if (f) {
533
- _context3.next = 8;
534
- break;
535
- }
536
-
537
- self.clearFeatureSelection();
538
- _context3.next = 14;
539
- break;
540
-
541
- case 8:
542
- sessionId = (0, _tracks.getRpcSessionId)(self);
543
- _context3.next = 11;
544
- return rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
545
- featureId: f,
546
- sessionId: sessionId,
547
- layoutId: (0, _util.getContainingView)(self).id,
548
- rendererType: 'PileupRenderer'
549
- });
550
-
551
- case 11:
552
- _ref5 = _context3.sent;
553
- feature = _ref5.feature;
554
-
555
- if (feature) {
556
- // @ts-ignore
557
- self.selectFeature(new _util.SimpleFeature(feature));
558
- }
559
-
560
- case 14:
561
- _context3.next = 20;
562
- break;
563
-
564
- case 16:
565
- _context3.prev = 16;
566
- _context3.t0 = _context3["catch"](2);
567
- console.error(_context3.t0);
568
- session.notify("".concat(_context3.t0));
569
-
570
- case 20:
571
- case "end":
572
- return _context3.stop();
573
- }
105
+ }
106
+ return to.concat(ar || Array.prototype.slice.call(from));
107
+ };
108
+ var __importDefault = (this && this.__importDefault) || function (mod) {
109
+ return (mod && mod.__esModule) ? mod : { "default": mod };
110
+ };
111
+ Object.defineProperty(exports, "__esModule", { value: true });
112
+ var react_1 = require("react");
113
+ var mobx_1 = require("mobx");
114
+ var mobx_state_tree_1 = require("mobx-state-tree");
115
+ var copy_to_clipboard_1 = __importDefault(require("copy-to-clipboard"));
116
+ var configuration_1 = require("@jbrowse/core/configuration");
117
+ var tracks_1 = require("@jbrowse/core/util/tracks");
118
+ var util_1 = require("@jbrowse/core/util");
119
+ var plugin_linear_genome_view_1 = require("@jbrowse/plugin-linear-genome-view");
120
+ // icons
121
+ var Visibility_1 = __importDefault(require("@mui/icons-material/Visibility"));
122
+ var Icons_1 = require("@jbrowse/core/ui/Icons");
123
+ var MenuOpen_1 = __importDefault(require("@mui/icons-material/MenuOpen"));
124
+ var Sort_1 = __importDefault(require("@mui/icons-material/Sort"));
125
+ var Palette_1 = __importDefault(require("@mui/icons-material/Palette"));
126
+ var ClearAll_1 = __importDefault(require("@mui/icons-material/ClearAll"));
127
+ var LinearPileupDisplayBlurb_1 = __importDefault(require("./components/LinearPileupDisplayBlurb"));
128
+ var shared_1 = require("../shared");
129
+ // async
130
+ var ColorByTagDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('./components/ColorByTag')); }); });
131
+ var FilterByTagDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('./components/FilterByTag')); }); });
132
+ var SortByTagDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('./components/SortByTag')); }); });
133
+ var SetFeatureHeightDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('./components/SetFeatureHeight')); }); });
134
+ var SetMaxHeightDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('./components/SetMaxHeight')); }); });
135
+ var ModificationsDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('./components/ColorByModifications')); }); });
136
+ // using a map because it preserves order
137
+ var rendererTypes = new Map([
138
+ ['pileup', 'PileupRenderer'],
139
+ ['svg', 'SvgFeatureRenderer'],
140
+ ]);
141
+ var stateModelFactory = function (configSchema) {
142
+ return mobx_state_tree_1.types
143
+ .compose('LinearPileupDisplay', plugin_linear_genome_view_1.BaseLinearDisplay, mobx_state_tree_1.types.model({
144
+ type: mobx_state_tree_1.types.literal('LinearPileupDisplay'),
145
+ configuration: (0, configuration_1.ConfigurationReference)(configSchema),
146
+ showSoftClipping: false,
147
+ featureHeight: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
148
+ noSpacing: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
149
+ fadeLikelihood: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
150
+ trackMaxHeight: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
151
+ mismatchAlpha: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
152
+ sortedBy: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({
153
+ type: mobx_state_tree_1.types.string,
154
+ pos: mobx_state_tree_1.types.number,
155
+ tag: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
156
+ refName: mobx_state_tree_1.types.string,
157
+ assemblyName: mobx_state_tree_1.types.string,
158
+ })),
159
+ colorBy: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({
160
+ type: mobx_state_tree_1.types.string,
161
+ tag: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
162
+ extra: mobx_state_tree_1.types.frozen(),
163
+ })),
164
+ filterBy: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.model({
165
+ flagInclude: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.number, 0),
166
+ flagExclude: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.number, 1540),
167
+ readName: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
168
+ tagFilter: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({ tag: mobx_state_tree_1.types.string, value: mobx_state_tree_1.types.string })),
169
+ }), {}),
170
+ }))
171
+ .volatile(function () { return ({
172
+ colorTagMap: mobx_1.observable.map({}),
173
+ modificationTagMap: mobx_1.observable.map({}),
174
+ featureUnderMouseVolatile: undefined,
175
+ ready: false,
176
+ }); })
177
+ .actions(function (self) { return ({
178
+ setReady: function (flag) {
179
+ self.ready = flag;
180
+ },
181
+ setMaxHeight: function (n) {
182
+ self.trackMaxHeight = n;
183
+ },
184
+ setFeatureHeight: function (n) {
185
+ self.featureHeight = n;
186
+ },
187
+ setNoSpacing: function (flag) {
188
+ self.noSpacing = flag;
189
+ },
190
+ setColorScheme: function (colorScheme) {
191
+ self.colorTagMap = mobx_1.observable.map({}); // clear existing mapping
192
+ self.colorBy = (0, mobx_state_tree_1.cast)(colorScheme);
193
+ self.ready = false;
194
+ },
195
+ updateModificationColorMap: function (uniqueModifications) {
196
+ var colorPalette = ['red', 'blue', 'green', 'orange', 'purple'];
197
+ uniqueModifications.forEach(function (value) {
198
+ if (!self.modificationTagMap.has(value)) {
199
+ var totalKeys = __spreadArray([], __read(self.modificationTagMap.keys()), false).length;
200
+ var newColor = colorPalette[totalKeys];
201
+ self.modificationTagMap.set(value, newColor);
574
202
  }
575
- }, _callee3, null, [[2, 16]]);
576
- }))();
577
- },
578
- onClick: function onClick() {
579
- self.clearFeatureSelection();
580
- },
581
- // similar to click but opens a menu with further options
582
- onFeatureContextMenu: function onFeatureContextMenu(_, featureId) {
583
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
584
- var session, rpcManager, f, sessionId, _ref6, feature;
585
-
586
- return _regenerator.default.wrap(function _callee4$(_context4) {
587
- while (1) {
588
- switch (_context4.prev = _context4.next) {
589
- case 0:
590
- session = (0, _util.getSession)(self);
591
- rpcManager = session.rpcManager;
592
- _context4.prev = 2;
593
- f = featureId || self.featureIdUnderMouse;
594
-
595
- if (f) {
596
- _context4.next = 8;
597
- break;
598
- }
599
-
600
- self.clearFeatureSelection();
601
- _context4.next = 14;
602
- break;
603
-
604
- case 8:
605
- sessionId = (0, _tracks.getRpcSessionId)(self);
606
- _context4.next = 11;
607
- return rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
608
- featureId: f,
609
- sessionId: sessionId,
610
- layoutId: (0, _util.getContainingView)(self).id,
611
- rendererType: 'PileupRenderer'
612
- });
613
-
614
- case 11:
615
- _ref6 = _context4.sent;
616
- feature = _ref6.feature;
617
-
618
- if (feature) {
619
- // @ts-ignore
620
- self.setContextMenuFeature(new _util.SimpleFeature(feature));
621
- }
622
-
623
- case 14:
624
- _context4.next = 20;
625
- break;
626
-
627
- case 16:
628
- _context4.prev = 16;
629
- _context4.t0 = _context4["catch"](2);
630
- console.error(_context4.t0);
631
- session.notify("".concat(_context4.t0));
632
-
633
- case 20:
634
- case "end":
635
- return _context4.stop();
636
- }
203
+ });
204
+ },
205
+ updateColorTagMap: function (uniqueTag) {
206
+ // pale color scheme
207
+ // https://cran.r-project.org/web/packages/khroma/vignettes/tol.html
208
+ // e.g. "tol_light"
209
+ var colorPalette = [
210
+ '#BBCCEE',
211
+ 'pink',
212
+ '#CCDDAA',
213
+ '#EEEEBB',
214
+ '#FFCCCC',
215
+ 'lightblue',
216
+ 'lightgreen',
217
+ 'tan',
218
+ '#CCEEFF',
219
+ 'lightsalmon',
220
+ ];
221
+ uniqueTag.forEach(function (value) {
222
+ if (!self.colorTagMap.has(value)) {
223
+ var totalKeys = __spreadArray([], __read(self.colorTagMap.keys()), false).length;
224
+ var newColor = colorPalette[totalKeys];
225
+ self.colorTagMap.set(value, newColor);
637
226
  }
638
- }, _callee4, null, [[2, 16]]);
639
- }))();
640
- }
641
- });
642
- },
643
- trackMenuItems: function trackMenuItems() {
644
- return [].concat((0, _toConsumableArray2.default)(superTrackMenuItems()), [{
645
- label: 'Show soft clipping',
646
- icon: _Visibility.default,
647
- type: 'checkbox',
648
- checked: self.showSoftClipping,
649
- onClick: function onClick() {
650
- self.toggleSoftClipping(); // if toggling from off to on, will break sort for this track
651
- // so clear it
652
-
653
- if (self.showSoftClipping) {
654
- self.clearSelected();
655
- }
656
- }
657
- }, {
658
- label: 'Sort by',
659
- icon: _Sort.default,
660
- disabled: self.showSoftClipping,
661
- subMenu: [].concat((0, _toConsumableArray2.default)(['Start location', 'Read strand', 'Base pair'].map(function (option) {
662
- return {
663
- label: option,
664
- onClick: function onClick() {
665
- return self.setSortedBy(option);
666
- }
667
- };
668
- })), [{
669
- label: 'Sort by tag...',
670
- onClick: function onClick() {
671
- (0, _util.getSession)(self).queueDialog(function (handleClose) {
672
- return [SortByTagDlg, {
673
- model: self,
674
- handleClose: handleClose
675
- }];
676
- });
677
- }
678
- }, {
679
- label: 'Clear sort',
680
- onClick: function onClick() {
681
- return self.clearSelected();
682
- }
683
- }])
684
- }, {
685
- label: 'Color scheme',
686
- icon: _Palette.default,
687
- subMenu: [{
688
- label: 'Normal',
689
- onClick: function onClick() {
690
- self.setColorScheme({
691
- type: 'normal'
692
- });
693
- }
694
- }, {
695
- label: 'Mapping quality',
696
- onClick: function onClick() {
697
- self.setColorScheme({
698
- type: 'mappingQuality'
699
- });
700
- }
701
- }, {
702
- label: 'Strand',
703
- onClick: function onClick() {
704
- self.setColorScheme({
705
- type: 'strand'
706
- });
707
- }
708
- }, {
709
- label: 'Pair orientation',
710
- onClick: function onClick() {
711
- self.setColorScheme({
712
- type: 'pairOrientation'
713
- });
714
- }
715
- }, {
716
- label: 'Per-base quality',
717
- onClick: function onClick() {
718
- self.setColorScheme({
719
- type: 'perBaseQuality'
720
- });
721
- }
722
- }, {
723
- label: 'Per-base lettering',
724
- onClick: function onClick() {
725
- self.setColorScheme({
726
- type: 'perBaseLettering'
727
- });
728
- }
729
- }, {
730
- label: 'Modifications or methylation',
731
- onClick: function onClick() {
732
- (0, _util.getSession)(self).queueDialog(function (doneCallback) {
733
- return [ModificationsDlg, {
734
- model: self,
735
- handleClose: doneCallback
736
- }];
737
- });
738
- }
739
- }, {
740
- label: 'Insert size',
741
- onClick: function onClick() {
742
- self.setColorScheme({
743
- type: 'insertSize'
744
- });
227
+ });
228
+ },
229
+ setFeatureUnderMouse: function (feat) {
230
+ self.featureUnderMouseVolatile = feat;
231
+ },
232
+ }); })
233
+ .actions(function (self) { return ({
234
+ afterAttach: function () {
235
+ var _this = this;
236
+ (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(function () { return __awaiter(_this, void 0, void 0, function () {
237
+ var rpcManager, view, sortedBy, colorBy, parentTrack, adapterConfig, rendererType, staticBlocks, bpPerPx, uniqueTagSet, adapter, _a, _b, pos, refName, assemblyName, e_1;
238
+ return __generator(this, function (_c) {
239
+ switch (_c.label) {
240
+ case 0:
241
+ _c.trys.push([0, 8, , 9]);
242
+ rpcManager = (0, util_1.getSession)(self).rpcManager;
243
+ view = (0, util_1.getContainingView)(self);
244
+ sortedBy = self.sortedBy, colorBy = self.colorBy, parentTrack = self.parentTrack, adapterConfig = self.adapterConfig, rendererType = self.rendererType;
245
+ staticBlocks = view.staticBlocks, bpPerPx = view.bpPerPx;
246
+ if (!self.estimatedStatsReady) {
247
+ return [2 /*return*/];
248
+ }
249
+ if (self.regionTooLarge) {
250
+ return [2 /*return*/];
251
+ }
252
+ if (!(colorBy === null || colorBy === void 0 ? void 0 : colorBy.tag)) return [3 /*break*/, 2];
253
+ return [4 /*yield*/, (0, shared_1.getUniqueTagValues)(self, colorBy, staticBlocks)];
254
+ case 1:
255
+ uniqueTagSet = _c.sent();
256
+ self.updateColorTagMap(uniqueTagSet);
257
+ _c.label = 2;
258
+ case 2:
259
+ if (!((colorBy === null || colorBy === void 0 ? void 0 : colorBy.type) === 'modifications')) return [3 /*break*/, 4];
260
+ adapter = (0, configuration_1.getConf)(parentTrack, ['adapter']);
261
+ _b = (_a = self).updateModificationColorMap;
262
+ return [4 /*yield*/, (0, shared_1.getUniqueModificationValues)(self, adapter, colorBy, staticBlocks)];
263
+ case 3:
264
+ _b.apply(_a, [_c.sent()]);
265
+ _c.label = 4;
266
+ case 4:
267
+ if (!sortedBy) return [3 /*break*/, 6];
268
+ pos = sortedBy.pos, refName = sortedBy.refName, assemblyName = sortedBy.assemblyName;
269
+ // render just the sorted region first
270
+ return [4 /*yield*/, self.rendererType.renderInClient(rpcManager, __assign({ assemblyName: assemblyName, regions: [
271
+ {
272
+ start: pos,
273
+ end: pos + 1,
274
+ refName: refName,
275
+ assemblyName: assemblyName,
276
+ },
277
+ ], adapterConfig: adapterConfig, rendererType: rendererType.name, sessionId: (0, tracks_1.getRpcSessionId)(self), layoutId: view.id, timeout: 1000000 }, self.renderProps()))];
278
+ case 5:
279
+ // render just the sorted region first
280
+ _c.sent();
281
+ self.setReady(true);
282
+ self.setCurrBpPerPx(bpPerPx);
283
+ return [3 /*break*/, 7];
284
+ case 6:
285
+ self.setReady(true);
286
+ _c.label = 7;
287
+ case 7: return [3 /*break*/, 9];
288
+ case 8:
289
+ e_1 = _c.sent();
290
+ console.error(e_1);
291
+ self.setError(e_1);
292
+ return [3 /*break*/, 9];
293
+ case 9: return [2 /*return*/];
294
+ }
295
+ });
296
+ }); }, { delay: 1000 }));
297
+ // autorun synchronizes featureUnderMouse with featureIdUnderMouse
298
+ (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(function () { return __awaiter(_this, void 0, void 0, function () {
299
+ var session, featureId, sessionId, view, feature, e_2;
300
+ var _a;
301
+ return __generator(this, function (_b) {
302
+ switch (_b.label) {
303
+ case 0:
304
+ session = (0, util_1.getSession)(self);
305
+ _b.label = 1;
306
+ case 1:
307
+ _b.trys.push([1, 5, , 6]);
308
+ featureId = self.featureIdUnderMouse;
309
+ if (!(((_a = self.featureUnderMouse) === null || _a === void 0 ? void 0 : _a.id()) !== featureId)) return [3 /*break*/, 4];
310
+ if (!!featureId) return [3 /*break*/, 2];
311
+ self.setFeatureUnderMouse(undefined);
312
+ return [3 /*break*/, 4];
313
+ case 2:
314
+ sessionId = (0, tracks_1.getRpcSessionId)(self);
315
+ view = (0, util_1.getContainingView)(self);
316
+ return [4 /*yield*/, session.rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
317
+ featureId: featureId,
318
+ sessionId: sessionId,
319
+ layoutId: view.id,
320
+ rendererType: 'PileupRenderer',
321
+ })];
322
+ case 3:
323
+ feature = (_b.sent()).feature;
324
+ // check featureIdUnderMouse is still the same as the
325
+ // feature.id that was returned e.g. that the user hasn't
326
+ // moused over to a new position during the async operation
327
+ // above
328
+ // @ts-ignore
329
+ if (self.featureIdUnderMouse === feature.uniqueId) {
330
+ // @ts-ignore
331
+ self.setFeatureUnderMouse(new util_1.SimpleFeature(feature));
332
+ }
333
+ _b.label = 4;
334
+ case 4: return [3 /*break*/, 6];
335
+ case 5:
336
+ e_2 = _b.sent();
337
+ console.error(e_2);
338
+ session.notify("".concat(e_2), 'error');
339
+ return [3 /*break*/, 6];
340
+ case 6: return [2 /*return*/];
341
+ }
342
+ });
343
+ }); }));
344
+ },
345
+ selectFeature: function (feature) {
346
+ var session = (0, util_1.getSession)(self);
347
+ if ((0, util_1.isSessionModelWithWidgets)(session)) {
348
+ var featureWidget = session.addWidget('AlignmentsFeatureWidget', 'alignmentFeature', { featureData: feature.toJSON(), view: (0, util_1.getContainingView)(self) });
349
+ session.showWidget(featureWidget);
745
350
  }
746
- }, {
747
- label: 'Stranded paired-end',
748
- onClick: function onClick() {
749
- self.setColorScheme({
750
- type: 'reverseTemplate'
751
- });
351
+ session.setSelection(feature);
352
+ },
353
+ clearSelected: function () {
354
+ self.sortedBy = undefined;
355
+ },
356
+ // uses copy-to-clipboard and generates notification
357
+ copyFeatureToClipboard: function (feature) {
358
+ var _a = feature.toJSON(), uniqueId = _a.uniqueId, rest = __rest(_a, ["uniqueId"]);
359
+ var session = (0, util_1.getSession)(self);
360
+ (0, copy_to_clipboard_1.default)(JSON.stringify(rest, null, 4));
361
+ session.notify('Copied to clipboard', 'success');
362
+ },
363
+ toggleSoftClipping: function () {
364
+ self.showSoftClipping = !self.showSoftClipping;
365
+ },
366
+ toggleMismatchAlpha: function () {
367
+ self.mismatchAlpha = !self.mismatchAlpha;
368
+ },
369
+ setConfig: function (configuration) {
370
+ self.configuration = configuration;
371
+ },
372
+ setSortedBy: function (type, tag) {
373
+ var centerLineInfo = (0, util_1.getContainingView)(self).centerLineInfo;
374
+ if (!centerLineInfo) {
375
+ return;
752
376
  }
753
- }, {
754
- label: 'Color by tag...',
755
- onClick: function onClick() {
756
- (0, _util.getSession)(self).queueDialog(function (doneCallback) {
757
- return [ColorByTagDlg, {
758
- model: self,
759
- handleClose: doneCallback
760
- }];
761
- });
377
+ var refName = centerLineInfo.refName, assemblyName = centerLineInfo.assemblyName, offset = centerLineInfo.offset;
378
+ var centerBp = Math.round(offset) + 1;
379
+ if (centerBp < 0 || !refName) {
380
+ return;
762
381
  }
763
- }]
764
- }, {
765
- label: 'Filter by',
766
- icon: _ClearAll.default,
767
- onClick: function onClick() {
768
- (0, _util.getSession)(self).queueDialog(function (doneCallback) {
769
- return [FilterByTagDlg, {
770
- model: self,
771
- handleClose: doneCallback
772
- }];
773
- });
774
- }
775
- }, {
776
- label: 'Set feature height',
777
- onClick: function onClick() {
778
- (0, _util.getSession)(self).queueDialog(function (doneCallback) {
779
- return [SetFeatureHeightDlg, {
780
- model: self,
781
- handleClose: doneCallback
782
- }];
783
- });
784
- }
785
- }, {
786
- label: 'Set max height',
787
- onClick: function onClick() {
788
- (0, _util.getSession)(self).queueDialog(function (doneCallback) {
789
- return [SetMaxHeightDlg, {
790
- model: self,
791
- handleClose: doneCallback
792
- }];
793
- });
794
- }
795
- }, {
796
- label: 'Fade mismatches by quality',
797
- type: 'checkbox',
798
- checked: self.mismatchAlphaSetting,
799
- onClick: function onClick() {
800
- self.toggleMismatchAlpha();
801
- }
802
- }]);
803
- }
804
- };
805
- });
382
+ self.sortedBy = {
383
+ type: type,
384
+ pos: centerBp,
385
+ refName: refName,
386
+ assemblyName: assemblyName,
387
+ tag: tag,
388
+ };
389
+ self.ready = false;
390
+ },
391
+ setFilterBy: function (filter) {
392
+ self.filterBy = (0, mobx_state_tree_1.cast)(filter);
393
+ },
394
+ }); })
395
+ .actions(function (self) {
396
+ // resets the sort object and refresh whole display on reload
397
+ var superReload = self.reload;
398
+ return {
399
+ reload: function () {
400
+ self.clearSelected();
401
+ superReload();
402
+ },
403
+ };
404
+ })
405
+ .views(function (self) { return ({
406
+ get maxHeight() {
407
+ var conf = (0, configuration_1.getConf)(self, ['renderers', self.rendererTypeName]) || {};
408
+ return self.trackMaxHeight !== undefined
409
+ ? self.trackMaxHeight
410
+ : conf.maxHeight;
411
+ },
412
+ get rendererConfig() {
413
+ var configBlob = (0, configuration_1.getConf)(self, ['renderers', self.rendererTypeName]) || {};
414
+ return self.rendererType.configSchema.create(__assign(__assign({}, configBlob), { height: self.featureHeight, noSpacing: self.noSpacing, maxHeight: this.maxHeight, mismatchAlpha: self.mismatchAlpha }), (0, mobx_state_tree_1.getEnv)(self));
415
+ },
416
+ get featureHeightSetting() {
417
+ return (self.featureHeight || (0, configuration_1.readConfObject)(this.rendererConfig, 'height'));
418
+ },
419
+ get mismatchAlphaSetting() {
420
+ return self.mismatchAlpha !== undefined
421
+ ? self.mismatchAlpha
422
+ : (0, configuration_1.readConfObject)(this.rendererConfig, 'mismatchAlpha');
423
+ },
424
+ get featureUnderMouse() {
425
+ return self.featureUnderMouseVolatile;
426
+ },
427
+ }); })
428
+ .views(function (self) {
429
+ var superTrackMenuItems = self.trackMenuItems, superRenderProps = self.renderProps;
430
+ return {
431
+ get rendererTypeName() {
432
+ var viewName = (0, configuration_1.getConf)(self, 'defaultRendering');
433
+ var rendererType = rendererTypes.get(viewName);
434
+ if (!rendererType) {
435
+ throw new Error("unknown alignments view name ".concat(viewName));
436
+ }
437
+ return rendererType;
438
+ },
439
+ contextMenuItems: function () {
440
+ var feat = self.contextMenuFeature;
441
+ var contextMenuItems = feat
442
+ ? [
443
+ {
444
+ label: 'Open feature details',
445
+ icon: MenuOpen_1.default,
446
+ onClick: function () {
447
+ self.clearFeatureSelection();
448
+ if (feat) {
449
+ self.selectFeature(feat);
450
+ }
451
+ },
452
+ },
453
+ {
454
+ label: 'Copy info to clipboard',
455
+ icon: Icons_1.ContentCopy,
456
+ onClick: function () {
457
+ if (feat) {
458
+ self.copyFeatureToClipboard(feat);
459
+ }
460
+ },
461
+ },
462
+ ]
463
+ : [];
464
+ return contextMenuItems;
465
+ },
466
+ get DisplayBlurb() {
467
+ return LinearPileupDisplayBlurb_1.default;
468
+ },
469
+ renderProps: function () {
470
+ var view = (0, util_1.getContainingView)(self);
471
+ var colorTagMap = self.colorTagMap, modificationTagMap = self.modificationTagMap, sortedBy = self.sortedBy, colorBy = self.colorBy, filterBy = self.filterBy, rpcDriverName = self.rpcDriverName, currBpPerPx = self.currBpPerPx, ready = self.ready;
472
+ var superProps = superRenderProps();
473
+ return __assign(__assign({}, superProps), { notReady: superProps.notReady ||
474
+ !ready ||
475
+ (sortedBy && currBpPerPx !== view.bpPerPx), rpcDriverName: rpcDriverName, displayModel: self, sortedBy: sortedBy, colorBy: colorBy, filterBy: JSON.parse(JSON.stringify(filterBy)), colorTagMap: Object.fromEntries(colorTagMap.toJSON()), modificationTagMap: Object.fromEntries(modificationTagMap.toJSON()), showSoftClip: self.showSoftClipping, config: self.rendererConfig, onFeatureClick: function (_, featureId) {
476
+ return __awaiter(this, void 0, void 0, function () {
477
+ var session, rpcManager, f, sessionId, feature, e_3;
478
+ return __generator(this, function (_a) {
479
+ switch (_a.label) {
480
+ case 0:
481
+ session = (0, util_1.getSession)(self);
482
+ rpcManager = session.rpcManager;
483
+ _a.label = 1;
484
+ case 1:
485
+ _a.trys.push([1, 5, , 6]);
486
+ f = featureId || self.featureIdUnderMouse;
487
+ if (!!f) return [3 /*break*/, 2];
488
+ self.clearFeatureSelection();
489
+ return [3 /*break*/, 4];
490
+ case 2:
491
+ sessionId = (0, tracks_1.getRpcSessionId)(self);
492
+ return [4 /*yield*/, rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
493
+ featureId: f,
494
+ sessionId: sessionId,
495
+ layoutId: (0, util_1.getContainingView)(self).id,
496
+ rendererType: 'PileupRenderer',
497
+ })];
498
+ case 3:
499
+ feature = (_a.sent()).feature;
500
+ if (feature) {
501
+ // @ts-ignore
502
+ self.selectFeature(new util_1.SimpleFeature(feature));
503
+ }
504
+ _a.label = 4;
505
+ case 4: return [3 /*break*/, 6];
506
+ case 5:
507
+ e_3 = _a.sent();
508
+ console.error(e_3);
509
+ session.notify("".concat(e_3));
510
+ return [3 /*break*/, 6];
511
+ case 6: return [2 /*return*/];
512
+ }
513
+ });
514
+ });
515
+ }, onClick: function () {
516
+ self.clearFeatureSelection();
517
+ },
518
+ // similar to click but opens a menu with further options
519
+ onFeatureContextMenu: function (_, featureId) {
520
+ return __awaiter(this, void 0, void 0, function () {
521
+ var session, rpcManager, f, sessionId, feature, e_4;
522
+ return __generator(this, function (_a) {
523
+ switch (_a.label) {
524
+ case 0:
525
+ session = (0, util_1.getSession)(self);
526
+ rpcManager = session.rpcManager;
527
+ _a.label = 1;
528
+ case 1:
529
+ _a.trys.push([1, 5, , 6]);
530
+ f = featureId || self.featureIdUnderMouse;
531
+ if (!!f) return [3 /*break*/, 2];
532
+ self.clearFeatureSelection();
533
+ return [3 /*break*/, 4];
534
+ case 2:
535
+ sessionId = (0, tracks_1.getRpcSessionId)(self);
536
+ return [4 /*yield*/, rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
537
+ featureId: f,
538
+ sessionId: sessionId,
539
+ layoutId: (0, util_1.getContainingView)(self).id,
540
+ rendererType: 'PileupRenderer',
541
+ })];
542
+ case 3:
543
+ feature = (_a.sent()).feature;
544
+ if (feature) {
545
+ // @ts-ignore
546
+ self.setContextMenuFeature(new util_1.SimpleFeature(feature));
547
+ }
548
+ _a.label = 4;
549
+ case 4: return [3 /*break*/, 6];
550
+ case 5:
551
+ e_4 = _a.sent();
552
+ console.error(e_4);
553
+ session.notify("".concat(e_4));
554
+ return [3 /*break*/, 6];
555
+ case 6: return [2 /*return*/];
556
+ }
557
+ });
558
+ });
559
+ } });
560
+ },
561
+ trackMenuItems: function () {
562
+ return __spreadArray(__spreadArray([], __read(superTrackMenuItems()), false), [
563
+ {
564
+ label: 'Show soft clipping',
565
+ icon: Visibility_1.default,
566
+ type: 'checkbox',
567
+ checked: self.showSoftClipping,
568
+ onClick: function () {
569
+ self.toggleSoftClipping();
570
+ // if toggling from off to on, will break sort for this track
571
+ // so clear it
572
+ if (self.showSoftClipping) {
573
+ self.clearSelected();
574
+ }
575
+ },
576
+ },
577
+ {
578
+ label: 'Sort by',
579
+ icon: Sort_1.default,
580
+ disabled: self.showSoftClipping,
581
+ subMenu: __spreadArray(__spreadArray([], __read(['Start location', 'Read strand', 'Base pair'].map(function (option) { return ({
582
+ label: option,
583
+ onClick: function () { return self.setSortedBy(option); },
584
+ }); })), false), [
585
+ {
586
+ label: 'Sort by tag...',
587
+ onClick: function () {
588
+ (0, util_1.getSession)(self).queueDialog(function (handleClose) { return [
589
+ SortByTagDlg,
590
+ { model: self, handleClose: handleClose },
591
+ ]; });
592
+ },
593
+ },
594
+ {
595
+ label: 'Clear sort',
596
+ onClick: function () { return self.clearSelected(); },
597
+ },
598
+ ], false),
599
+ },
600
+ {
601
+ label: 'Color scheme',
602
+ icon: Palette_1.default,
603
+ subMenu: [
604
+ {
605
+ label: 'Normal',
606
+ onClick: function () {
607
+ self.setColorScheme({ type: 'normal' });
608
+ },
609
+ },
610
+ {
611
+ label: 'Mapping quality',
612
+ onClick: function () {
613
+ self.setColorScheme({ type: 'mappingQuality' });
614
+ },
615
+ },
616
+ {
617
+ label: 'Strand',
618
+ onClick: function () {
619
+ self.setColorScheme({ type: 'strand' });
620
+ },
621
+ },
622
+ {
623
+ label: 'Pair orientation',
624
+ onClick: function () {
625
+ self.setColorScheme({ type: 'pairOrientation' });
626
+ },
627
+ },
628
+ {
629
+ label: 'Per-base quality',
630
+ onClick: function () {
631
+ self.setColorScheme({ type: 'perBaseQuality' });
632
+ },
633
+ },
634
+ {
635
+ label: 'Per-base lettering',
636
+ onClick: function () {
637
+ self.setColorScheme({ type: 'perBaseLettering' });
638
+ },
639
+ },
640
+ {
641
+ label: 'Modifications or methylation',
642
+ onClick: function () {
643
+ (0, util_1.getSession)(self).queueDialog(function (doneCallback) { return [
644
+ ModificationsDlg,
645
+ { model: self, handleClose: doneCallback },
646
+ ]; });
647
+ },
648
+ },
649
+ {
650
+ label: 'Insert size',
651
+ onClick: function () {
652
+ self.setColorScheme({ type: 'insertSize' });
653
+ },
654
+ },
655
+ {
656
+ label: 'Stranded paired-end',
657
+ onClick: function () {
658
+ self.setColorScheme({ type: 'reverseTemplate' });
659
+ },
660
+ },
661
+ {
662
+ label: 'Color by tag...',
663
+ onClick: function () {
664
+ (0, util_1.getSession)(self).queueDialog(function (doneCallback) { return [
665
+ ColorByTagDlg,
666
+ { model: self, handleClose: doneCallback },
667
+ ]; });
668
+ },
669
+ },
670
+ ],
671
+ },
672
+ {
673
+ label: 'Filter by',
674
+ icon: ClearAll_1.default,
675
+ onClick: function () {
676
+ (0, util_1.getSession)(self).queueDialog(function (doneCallback) { return [
677
+ FilterByTagDlg,
678
+ { model: self, handleClose: doneCallback },
679
+ ]; });
680
+ },
681
+ },
682
+ {
683
+ label: 'Set feature height',
684
+ onClick: function () {
685
+ (0, util_1.getSession)(self).queueDialog(function (doneCallback) { return [
686
+ SetFeatureHeightDlg,
687
+ { model: self, handleClose: doneCallback },
688
+ ]; });
689
+ },
690
+ },
691
+ {
692
+ label: 'Set max height',
693
+ onClick: function () {
694
+ (0, util_1.getSession)(self).queueDialog(function (doneCallback) { return [
695
+ SetMaxHeightDlg,
696
+ { model: self, handleClose: doneCallback },
697
+ ]; });
698
+ },
699
+ },
700
+ {
701
+ label: 'Fade mismatches by quality',
702
+ type: 'checkbox',
703
+ checked: self.mismatchAlphaSetting,
704
+ onClick: function () {
705
+ self.toggleMismatchAlpha();
706
+ },
707
+ },
708
+ ], false);
709
+ },
710
+ };
711
+ });
806
712
  };
807
-
808
- var _default = stateModelFactory;
809
- exports.default = _default;
713
+ exports.default = stateModelFactory;
714
+ //# sourceMappingURL=model.js.map