react-msaview 1.3.2 → 2.1.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 (245) hide show
  1. package/bundle/index.js +285 -97099
  2. package/dist/StructureModel.d.ts +9 -0
  3. package/dist/StructureModel.js +11 -0
  4. package/dist/StructureModel.js.map +1 -0
  5. package/dist/UniprotTrack.d.ts +27 -0
  6. package/dist/UniprotTrack.js +53 -0
  7. package/dist/UniprotTrack.js.map +1 -0
  8. package/dist/colorSchemes.d.ts +5 -11
  9. package/dist/colorSchemes.js +27 -32
  10. package/dist/colorSchemes.js.map +1 -0
  11. package/dist/components/BoxTrack.d.ts +6 -6
  12. package/dist/components/BoxTrack.js +9 -137
  13. package/dist/components/BoxTrack.js.map +1 -0
  14. package/dist/components/BoxTrackBlock.d.ts +8 -0
  15. package/dist/components/BoxTrackBlock.js +136 -0
  16. package/dist/components/BoxTrackBlock.js.map +1 -0
  17. package/dist/components/Header.d.ts +2 -2
  18. package/dist/components/Header.js +55 -48
  19. package/dist/components/Header.js.map +1 -0
  20. package/dist/components/ImportForm.d.ts +2 -2
  21. package/dist/components/ImportForm.js +59 -71
  22. package/dist/components/ImportForm.js.map +1 -0
  23. package/dist/components/MSABlock.d.ts +8 -0
  24. package/dist/components/MSABlock.js +103 -0
  25. package/dist/components/MSABlock.js.map +1 -0
  26. package/dist/components/MSACanvas.d.ts +2 -2
  27. package/dist/components/MSACanvas.js +32 -133
  28. package/dist/components/MSACanvas.js.map +1 -0
  29. package/dist/components/MSAMouseoverCanvas.d.ts +6 -0
  30. package/dist/components/MSAMouseoverCanvas.js +52 -0
  31. package/dist/components/MSAMouseoverCanvas.js.map +1 -0
  32. package/dist/components/MSAView.d.ts +2 -2
  33. package/dist/components/MSAView.js +17 -62
  34. package/dist/components/MSAView.js.map +1 -0
  35. package/dist/components/MultiAlignmentSelector.d.ts +6 -0
  36. package/dist/components/MultiAlignmentSelector.js +13 -0
  37. package/dist/components/MultiAlignmentSelector.js.map +1 -0
  38. package/dist/components/ResizeHandles.d.ts +5 -5
  39. package/dist/components/ResizeHandles.js +31 -32
  40. package/dist/components/ResizeHandles.js.map +1 -0
  41. package/dist/components/Rubberband.d.ts +3 -2
  42. package/dist/components/Rubberband.js +41 -64
  43. package/dist/components/Rubberband.js.map +1 -0
  44. package/dist/components/Ruler.d.ts +2 -16
  45. package/dist/components/Ruler.js +19 -88
  46. package/dist/components/Ruler.js.map +1 -0
  47. package/dist/components/TextTrack.d.ts +5 -5
  48. package/dist/components/TextTrack.js +23 -24
  49. package/dist/components/TextTrack.js.map +1 -0
  50. package/dist/components/Track.d.ts +5 -5
  51. package/dist/components/Track.js +41 -40
  52. package/dist/components/Track.js.map +1 -0
  53. package/dist/components/TreeBranchMenu.d.ts +14 -0
  54. package/dist/components/TreeBranchMenu.js +26 -0
  55. package/dist/components/TreeBranchMenu.js.map +1 -0
  56. package/dist/components/TreeCanvas.d.ts +2 -2
  57. package/dist/components/TreeCanvas.js +24 -356
  58. package/dist/components/TreeCanvas.js.map +1 -0
  59. package/dist/components/TreeCanvasBlock.d.ts +7 -0
  60. package/dist/components/TreeCanvasBlock.js +252 -0
  61. package/dist/components/TreeCanvasBlock.js.map +1 -0
  62. package/dist/components/TreeMenu.d.ts +12 -0
  63. package/dist/components/TreeMenu.js +56 -0
  64. package/dist/components/TreeMenu.js.map +1 -0
  65. package/dist/components/TreeRuler.d.ts +2 -2
  66. package/dist/components/TreeRuler.js +3 -3
  67. package/dist/components/TreeRuler.js.map +1 -0
  68. package/dist/components/VerticalGuide.d.ts +7 -0
  69. package/dist/components/VerticalGuide.js +30 -0
  70. package/dist/components/VerticalGuide.js.map +1 -0
  71. package/dist/components/ZoomControls.d.ts +6 -0
  72. package/dist/components/ZoomControls.js +58 -0
  73. package/dist/components/ZoomControls.js.map +1 -0
  74. package/dist/components/data/seq2.d.ts +3 -3
  75. package/dist/components/data/seq2.js +33 -3
  76. package/dist/components/data/seq2.js.map +1 -0
  77. package/dist/components/dialogs/AboutDlg.d.ts +4 -0
  78. package/dist/components/dialogs/AboutDlg.js +40 -0
  79. package/dist/components/dialogs/AboutDlg.js.map +1 -0
  80. package/{bundle/components → dist/components/dialogs}/AddTrackDlg.d.ts +3 -3
  81. package/dist/components/dialogs/AddTrackDlg.js +26 -0
  82. package/dist/components/dialogs/AddTrackDlg.js.map +1 -0
  83. package/dist/components/{AnnotationDlg.d.ts → dialogs/AnnotationDlg.d.ts} +3 -3
  84. package/dist/components/dialogs/AnnotationDlg.js +65 -0
  85. package/dist/components/dialogs/AnnotationDlg.js.map +1 -0
  86. package/dist/components/dialogs/DetailsDlg.d.ts +7 -0
  87. package/dist/components/dialogs/DetailsDlg.js +13 -0
  88. package/dist/components/dialogs/DetailsDlg.js.map +1 -0
  89. package/dist/components/dialogs/MoreInfoDlg.d.ts +6 -0
  90. package/dist/components/dialogs/MoreInfoDlg.js +11 -0
  91. package/dist/components/dialogs/MoreInfoDlg.js.map +1 -0
  92. package/dist/components/dialogs/SettingsDlg.d.ts +7 -0
  93. package/dist/components/dialogs/SettingsDlg.js +48 -0
  94. package/dist/components/dialogs/SettingsDlg.js.map +1 -0
  95. package/dist/components/dialogs/TrackInfoDlg.d.ts +9 -0
  96. package/{bundle/components → dist/components/dialogs}/TrackInfoDlg.js +12 -13
  97. package/dist/components/dialogs/TrackInfoDlg.js.map +1 -0
  98. package/dist/components/dialogs/TracklistDlg.d.ts +7 -0
  99. package/dist/components/dialogs/TracklistDlg.js +18 -0
  100. package/dist/components/dialogs/TracklistDlg.js.map +1 -0
  101. package/{bundle/components/Ruler.d.ts → dist/components/util.d.ts} +1 -6
  102. package/dist/components/util.js +68 -0
  103. package/dist/components/util.js.map +1 -0
  104. package/dist/index.d.ts +2 -4
  105. package/dist/index.js +3 -3
  106. package/dist/index.js.map +1 -0
  107. package/dist/layout.js +14 -20
  108. package/dist/layout.js.map +1 -0
  109. package/dist/model.d.ts +114 -97
  110. package/dist/model.js +248 -486
  111. package/dist/model.js.map +1 -0
  112. package/dist/parseNewick.d.ts +1 -5
  113. package/dist/parseNewick.js +11 -8
  114. package/dist/parseNewick.js.map +1 -0
  115. package/dist/parsers/ClustalMSA.d.ts +6 -18
  116. package/dist/parsers/ClustalMSA.js +55 -64
  117. package/dist/parsers/ClustalMSA.js.map +1 -0
  118. package/dist/parsers/FastaMSA.d.ts +5 -12
  119. package/dist/parsers/FastaMSA.js +55 -64
  120. package/dist/parsers/FastaMSA.js.map +1 -0
  121. package/dist/parsers/StockholmMSA.d.ts +10 -17
  122. package/dist/parsers/StockholmMSA.js +81 -110
  123. package/dist/parsers/StockholmMSA.js.map +1 -0
  124. package/dist/util.d.ts +34 -7
  125. package/dist/util.js +76 -24
  126. package/dist/util.js.map +1 -0
  127. package/dist/version.d.ts +1 -0
  128. package/dist/version.js +2 -0
  129. package/dist/version.js.map +1 -0
  130. package/package.json +34 -34
  131. package/src/StructureModel.ts +11 -0
  132. package/src/UniprotTrack.ts +59 -0
  133. package/src/colorSchemes.ts +520 -0
  134. package/src/components/BoxTrack.tsx +33 -0
  135. package/src/components/BoxTrackBlock.tsx +198 -0
  136. package/src/components/Header.tsx +106 -0
  137. package/src/components/ImportForm.tsx +192 -0
  138. package/src/components/MSABlock.tsx +164 -0
  139. package/src/components/MSACanvas.tsx +142 -0
  140. package/src/components/MSAMouseoverCanvas.tsx +87 -0
  141. package/src/components/MSAView.tsx +88 -0
  142. package/src/components/MultiAlignmentSelector.tsx +33 -0
  143. package/src/components/ResizeHandles.tsx +137 -0
  144. package/src/components/Rubberband.tsx +270 -0
  145. package/src/components/Ruler.tsx +123 -0
  146. package/src/components/TextTrack.tsx +120 -0
  147. package/src/components/Track.tsx +153 -0
  148. package/src/components/TreeBranchMenu.tsx +67 -0
  149. package/src/components/TreeCanvas.tsx +128 -0
  150. package/src/components/TreeCanvasBlock.tsx +359 -0
  151. package/src/components/TreeMenu.tsx +105 -0
  152. package/src/components/TreeRuler.tsx +12 -0
  153. package/src/components/VerticalGuide.tsx +50 -0
  154. package/src/components/ZoomControls.tsx +78 -0
  155. package/src/components/data/seq2.ts +35 -0
  156. package/src/components/dialogs/AboutDlg.tsx +58 -0
  157. package/src/components/dialogs/AddTrackDlg.tsx +74 -0
  158. package/src/components/dialogs/AnnotationDlg.tsx +144 -0
  159. package/src/components/dialogs/DetailsDlg.tsx +28 -0
  160. package/src/components/dialogs/MoreInfoDlg.tsx +21 -0
  161. package/src/components/dialogs/SettingsDlg.tsx +154 -0
  162. package/src/components/dialogs/TrackInfoDlg.tsx +59 -0
  163. package/src/components/dialogs/TracklistDlg.tsx +59 -0
  164. package/src/components/util.ts +93 -0
  165. package/src/declare.d.ts +1 -0
  166. package/src/index.ts +2 -0
  167. package/src/layout.ts +83 -0
  168. package/src/model.ts +793 -0
  169. package/{bundle/parseNewick.d.ts → src/parseNewick.ts} +35 -5
  170. package/src/parsers/ClustalMSA.ts +79 -0
  171. package/src/parsers/FastaMSA.ts +82 -0
  172. package/src/parsers/StockholmMSA.ts +137 -0
  173. package/src/util.ts +142 -0
  174. package/src/version.ts +1 -0
  175. package/bundle/colorSchemes.d.ts +0 -16
  176. package/bundle/colorSchemes.js +0 -455
  177. package/bundle/components/AboutDlg.d.ts +0 -5
  178. package/bundle/components/AboutDlg.js +0 -47
  179. package/bundle/components/AddTrackDlg.js +0 -26
  180. package/bundle/components/AnnotationDlg.d.ts +0 -11
  181. package/bundle/components/AnnotationDlg.js +0 -77
  182. package/bundle/components/BoxTrack.d.ts +0 -7
  183. package/bundle/components/BoxTrack.js +0 -143
  184. package/bundle/components/DetailsDlg.d.ts +0 -8
  185. package/bundle/components/DetailsDlg.js +0 -12
  186. package/bundle/components/Header.d.ts +0 -6
  187. package/bundle/components/Header.js +0 -63
  188. package/bundle/components/ImportForm.d.ts +0 -6
  189. package/bundle/components/ImportForm.js +0 -89
  190. package/bundle/components/MSACanvas.d.ts +0 -6
  191. package/bundle/components/MSACanvas.js +0 -210
  192. package/bundle/components/MSAView.d.ts +0 -6
  193. package/bundle/components/MSAView.js +0 -88
  194. package/bundle/components/MoreInfoDlg.d.ts +0 -6
  195. package/bundle/components/MoreInfoDlg.js +0 -11
  196. package/bundle/components/ResizeHandles.d.ts +0 -8
  197. package/bundle/components/ResizeHandles.js +0 -110
  198. package/bundle/components/Rubberband.d.ts +0 -7
  199. package/bundle/components/Rubberband.js +0 -196
  200. package/bundle/components/Ruler.js +0 -121
  201. package/bundle/components/SettingsDlg.d.ts +0 -8
  202. package/bundle/components/SettingsDlg.js +0 -40
  203. package/bundle/components/TextTrack.d.ts +0 -7
  204. package/bundle/components/TextTrack.js +0 -72
  205. package/bundle/components/Track.d.ts +0 -11
  206. package/bundle/components/Track.js +0 -81
  207. package/bundle/components/TrackInfoDlg.d.ts +0 -6
  208. package/bundle/components/TracklistDlg.d.ts +0 -8
  209. package/bundle/components/TracklistDlg.js +0 -18
  210. package/bundle/components/TreeCanvas.d.ts +0 -6
  211. package/bundle/components/TreeCanvas.js +0 -431
  212. package/bundle/components/TreeRuler.d.ts +0 -6
  213. package/bundle/components/TreeRuler.js +0 -8
  214. package/bundle/components/data/seq2.d.ts +0 -3
  215. package/bundle/components/data/seq2.js +0 -3
  216. package/bundle/index.d.ts +0 -4
  217. package/bundle/layout.d.ts +0 -23
  218. package/bundle/layout.js +0 -53
  219. package/bundle/model.d.ts +0 -364
  220. package/bundle/model.js +0 -894
  221. package/bundle/parseNewick.js +0 -94
  222. package/bundle/parsers/ClustalMSA.d.ts +0 -39
  223. package/bundle/parsers/ClustalMSA.js +0 -77
  224. package/bundle/parsers/FastaMSA.d.ts +0 -26
  225. package/bundle/parsers/FastaMSA.js +0 -78
  226. package/bundle/parsers/StockholmMSA.d.ts +0 -75
  227. package/bundle/parsers/StockholmMSA.js +0 -142
  228. package/bundle/util.d.ts +0 -17
  229. package/bundle/util.js +0 -33
  230. package/dist/components/AboutDlg.d.ts +0 -5
  231. package/dist/components/AboutDlg.js +0 -50
  232. package/dist/components/AddTrackDlg.d.ts +0 -8
  233. package/dist/components/AddTrackDlg.js +0 -26
  234. package/dist/components/AnnotationDlg.js +0 -77
  235. package/dist/components/DetailsDlg.d.ts +0 -8
  236. package/dist/components/DetailsDlg.js +0 -12
  237. package/dist/components/MoreInfoDlg.d.ts +0 -6
  238. package/dist/components/MoreInfoDlg.js +0 -11
  239. package/dist/components/SettingsDlg.d.ts +0 -8
  240. package/dist/components/SettingsDlg.js +0 -40
  241. package/dist/components/TrackInfoDlg.d.ts +0 -6
  242. package/dist/components/TrackInfoDlg.js +0 -33
  243. package/dist/components/TracklistDlg.d.ts +0 -8
  244. package/dist/components/TracklistDlg.js +0 -18
  245. package/dist/components/package.json +0 -62
package/bundle/model.js DELETED
@@ -1,894 +0,0 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
- return new (P || (P = Promise))(function (resolve, reject) {
15
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
- step((generator = generator.apply(thisArg, _arguments || [])).next());
19
- });
20
- };
21
- var __generator = (this && this.__generator) || function (thisArg, body) {
22
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
- function verb(n) { return function (v) { return step([n, v]); }; }
25
- function step(op) {
26
- if (f) throw new TypeError("Generator is already executing.");
27
- while (_) try {
28
- 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;
29
- if (y = 0, t) op = [op[0] & 2, t.value];
30
- switch (op[0]) {
31
- case 0: case 1: t = op; break;
32
- case 4: _.label++; return { value: op[1], done: false };
33
- case 5: _.label++; y = op[1]; op = [0]; continue;
34
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
- default:
36
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
- if (t[2]) _.ops.pop();
41
- _.trys.pop(); continue;
42
- }
43
- op = body.call(thisArg, _);
44
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
- }
47
- };
48
- var __rest = (this && this.__rest) || function (s, e) {
49
- var t = {};
50
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
51
- t[p] = s[p];
52
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
53
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
54
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
55
- t[p[i]] = s[p[i]];
56
- }
57
- return t;
58
- };
59
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
60
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
61
- if (ar || !(i in from)) {
62
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
63
- ar[i] = from[i];
64
- }
65
- }
66
- return to.concat(ar || Array.prototype.slice.call(from));
67
- };
68
- import { cast, types, addDisposer } from 'mobx-state-tree';
69
- import { hierarchy, cluster } from 'd3-hierarchy';
70
- import { ascending, max } from 'd3-array';
71
- import { FileLocation, ElementId } from '@jbrowse/core/util/types/mst';
72
- import { openLocation } from '@jbrowse/core/util/io';
73
- import { autorun } from 'mobx';
74
- import BaseViewModel from '@jbrowse/core/pluggableElementTypes/models/BaseViewModel';
75
- import Stockholm from 'stockholm-js';
76
- import ClustalMSA from './parsers/ClustalMSA';
77
- import StockholmMSA from './parsers/StockholmMSA';
78
- import FastaMSA from './parsers/FastaMSA';
79
- import parseNewick from './parseNewick';
80
- import colorSchemes from './colorSchemes';
81
- import { generateNodeIds } from './util';
82
- import TextTrack from './components/TextTrack';
83
- import BoxTrack from './components/BoxTrack';
84
- function skipBlanks(blanks, arg) {
85
- var s = '';
86
- var b = 0;
87
- for (var j = 0; j < arg.length; j++) {
88
- if (j === blanks[b]) {
89
- b++;
90
- }
91
- else {
92
- s += arg[j];
93
- }
94
- }
95
- return s;
96
- }
97
- function setBrLength(d, y0, k) {
98
- var _a;
99
- //@ts-ignore
100
- d.len = (y0 += Math.max(d.data.length || 0, 0)) * k;
101
- (_a = d.children) === null || _a === void 0 ? void 0 : _a.forEach(function (d) {
102
- setBrLength(d, y0, k);
103
- });
104
- }
105
- function maxLength(d) {
106
- return (d.data.length || 1) + (d.children ? max(d.children, maxLength) : 0);
107
- }
108
- // Collapse the node and all it's children, from
109
- // https://bl.ocks.org/d3noob/43a860bc0024792f8803bba8ca0d5ecd
110
- function collapse(d) {
111
- if (d.children) {
112
- //@ts-ignore
113
- d._children = d.children;
114
- //@ts-ignore
115
- d._children.forEach(collapse);
116
- //@ts-ignore
117
- d.children = null;
118
- }
119
- }
120
- function clamp(min, num, max) {
121
- return Math.min(Math.max(num, min), max);
122
- }
123
- var StructureModel = types.model({
124
- id: types.identifier,
125
- structure: types.model({
126
- pdb: types.string,
127
- startPos: types.number,
128
- endPos: types.number,
129
- }),
130
- range: types.maybe(types.string),
131
- });
132
- var UniprotTrack = types
133
- .model({
134
- id: types.string,
135
- accession: types.string,
136
- name: types.string,
137
- associatedRowName: types.string,
138
- height: types.optional(types.number, 100),
139
- })
140
- .volatile(function () { return ({
141
- error: undefined,
142
- data: undefined,
143
- }); })
144
- .actions(function (self) { return ({
145
- setError: function (error) {
146
- self.error = error;
147
- },
148
- setData: function (data) {
149
- self.data = data;
150
- },
151
- }); })
152
- .actions(function (self) { return ({
153
- afterCreate: function () {
154
- var _this = this;
155
- addDisposer(self, autorun(function () { return __awaiter(_this, void 0, void 0, function () {
156
- var accession, url, response, text, e_1;
157
- return __generator(this, function (_a) {
158
- switch (_a.label) {
159
- case 0:
160
- _a.trys.push([0, 3, , 4]);
161
- accession = self.accession;
162
- url = "https://www.uniprot.org/uniprot/" + accession + ".gff";
163
- return [4 /*yield*/, fetch(url)];
164
- case 1:
165
- response = _a.sent();
166
- if (!response.ok) {
167
- throw new Error("HTTP " + response.status + " " + response.statusText + " fetching " + url);
168
- }
169
- return [4 /*yield*/, response.text()];
170
- case 2:
171
- text = _a.sent();
172
- self.setData(text);
173
- return [3 /*break*/, 4];
174
- case 3:
175
- e_1 = _a.sent();
176
- self.setError(e_1);
177
- return [3 /*break*/, 4];
178
- case 4: return [2 /*return*/];
179
- }
180
- });
181
- }); }));
182
- },
183
- }); })
184
- .views(function (self) { return ({
185
- get loading() {
186
- return !self.data;
187
- },
188
- get features() {
189
- var _a;
190
- return (_a = self.data) === null || _a === void 0 ? void 0 : _a.split('\n').map(function (f) { return f.trim(); }).filter(function (f) { return !!f; }).filter(function (f) { return !f.startsWith('#'); }).map(function (f) {
191
- var _a = f.split('\t'), seq_id = _a[0], source = _a[1], type = _a[2], start = _a[3], end = _a[4], score = _a[5], strand = _a[6], phase = _a[7], col9 = _a[8];
192
- return __assign({ seq_id: seq_id, source: source, type: type, start: +start, end: +end, score: +score, strand: strand, phase: phase }, Object.fromEntries(col9
193
- .split(';')
194
- .map(function (f) { return f.trim(); })
195
- .filter(function (f) { return !!f; })
196
- .map(function (f) { return f.split('='); })
197
- .map(function (_a) {
198
- var key = _a[0], val = _a[1];
199
- return [
200
- key.trim(),
201
- decodeURIComponent(val).trim().split(',').join(' '),
202
- ];
203
- })));
204
- });
205
- },
206
- }); });
207
- var MSAModel = types
208
- .model('MsaView', {
209
- id: ElementId,
210
- type: types.literal('MsaView'),
211
- height: types.optional(types.number, 550),
212
- treeAreaWidth: types.optional(types.number, 400),
213
- treeWidth: types.optional(types.number, 300),
214
- rowHeight: 20,
215
- scrollY: 0,
216
- scrollX: 0,
217
- resizeHandleWidth: 5,
218
- blockSize: 1000,
219
- mouseRow: types.maybe(types.number),
220
- mouseCol: types.maybe(types.number),
221
- selectedStructures: types.array(StructureModel),
222
- labelsAlignRight: false,
223
- colWidth: 16,
224
- showBranchLen: true,
225
- bgColor: true,
226
- drawTree: true,
227
- drawNodeBubbles: true,
228
- highResScaleFactor: 2,
229
- colorSchemeName: 'maeditor',
230
- treeFilehandle: types.maybe(FileLocation),
231
- msaFilehandle: types.maybe(FileLocation),
232
- currentAlignment: 0,
233
- collapsed: types.array(types.string),
234
- showOnly: types.maybe(types.string),
235
- boxTracks: types.array(UniprotTrack),
236
- turnedOffTracks: types.map(types.boolean),
237
- annotatedRegions: types.array(types.model({
238
- start: types.number,
239
- end: types.number,
240
- attributes: types.frozen(),
241
- })),
242
- data: types.optional(types
243
- .model({
244
- tree: types.maybe(types.string),
245
- msa: types.maybe(types.string),
246
- })
247
- .actions(function (self) { return ({
248
- setTree: function (tree) {
249
- self.tree = tree;
250
- },
251
- setMSA: function (msa) {
252
- self.msa = msa;
253
- },
254
- }); }), { tree: '', msa: '' }),
255
- })
256
- .volatile(function () { return ({
257
- error: undefined,
258
- margin: { left: 20, top: 20 },
259
- //eslint-disable-next-line @typescript-eslint/no-explicit-any
260
- DialogComponent: undefined,
261
- //eslint-disable-next-line @typescript-eslint/no-explicit-any
262
- DialogProps: undefined,
263
- // annotations
264
- annotPos: undefined,
265
- }); })
266
- .actions(function (self) { return ({
267
- //eslint-disable-next-line @typescript-eslint/no-explicit-any
268
- setDialogComponent: function (dlg, props) {
269
- self.DialogComponent = dlg;
270
- self.DialogProps = props;
271
- },
272
- setHeight: function (height) {
273
- self.height = height;
274
- },
275
- addStructureToSelection: function (elt) {
276
- self.selectedStructures.push(elt);
277
- },
278
- removeStructureFromSelection: function (elt) {
279
- var r = self.selectedStructures.find(function (node) { return node.id === elt.id; });
280
- if (r) {
281
- self.selectedStructures.remove(r);
282
- }
283
- },
284
- toggleStructureSelection: function (elt) {
285
- var r = self.selectedStructures.find(function (node) { return node.id === elt.id; });
286
- if (r) {
287
- self.selectedStructures.remove(r);
288
- }
289
- else {
290
- self.selectedStructures.push(elt);
291
- }
292
- },
293
- clearSelectedStructures: function () {
294
- //@ts-ignore
295
- self.selectedStructures = [];
296
- },
297
- setError: function (error) {
298
- console.error(error);
299
- self.error = error;
300
- },
301
- setMousePos: function (col, row) {
302
- self.mouseCol = col;
303
- self.mouseRow = row;
304
- },
305
- setRowHeight: function (n) {
306
- self.rowHeight = n;
307
- },
308
- setColWidth: function (n) {
309
- self.colWidth = n;
310
- },
311
- setColorSchemeName: function (name) {
312
- self.colorSchemeName = name;
313
- },
314
- setScrollY: function (n) {
315
- self.scrollY = n;
316
- },
317
- setScrollX: function (n) {
318
- self.scrollX = n;
319
- },
320
- setTreeAreaWidth: function (n) {
321
- self.treeAreaWidth = n;
322
- },
323
- setTreeWidth: function (n) {
324
- self.treeWidth = n;
325
- },
326
- setCurrentAlignment: function (n) {
327
- self.currentAlignment = n;
328
- },
329
- toggleLabelsAlignRight: function () {
330
- self.labelsAlignRight = !self.labelsAlignRight;
331
- },
332
- toggleDrawTree: function () {
333
- self.drawTree = !self.drawTree;
334
- },
335
- toggleCollapsed: function (node) {
336
- if (self.collapsed.includes(node)) {
337
- self.collapsed.remove(node);
338
- }
339
- else {
340
- self.collapsed.push(node);
341
- }
342
- },
343
- setShowOnly: function (node) {
344
- self.showOnly = node;
345
- },
346
- toggleBranchLen: function () {
347
- self.showBranchLen = !self.showBranchLen;
348
- },
349
- toggleBgColor: function () {
350
- self.bgColor = !self.bgColor;
351
- },
352
- toggleNodeBubbles: function () {
353
- self.drawNodeBubbles = !self.drawNodeBubbles;
354
- },
355
- setData: function (data) {
356
- self.data = cast(data);
357
- },
358
- setMSAFilehandle: function (msaFilehandle) {
359
- return __awaiter(this, void 0, void 0, function () {
360
- return __generator(this, function (_a) {
361
- self.msaFilehandle = msaFilehandle;
362
- return [2 /*return*/];
363
- });
364
- });
365
- },
366
- setTreeFilehandle: function (treeFilehandle) {
367
- return __awaiter(this, void 0, void 0, function () {
368
- var r;
369
- return __generator(this, function (_a) {
370
- switch (_a.label) {
371
- case 0:
372
- if (!(treeFilehandle && 'blobId' in treeFilehandle)) return [3 /*break*/, 2];
373
- return [4 /*yield*/, openLocation(treeFilehandle).readFile('utf8')];
374
- case 1:
375
- r = (_a.sent());
376
- this.setTree(r);
377
- return [3 /*break*/, 3];
378
- case 2:
379
- self.treeFilehandle = treeFilehandle;
380
- _a.label = 3;
381
- case 3: return [2 /*return*/];
382
- }
383
- });
384
- });
385
- },
386
- setMSA: function (result) {
387
- self.data.setMSA(result);
388
- },
389
- setTree: function (result) {
390
- self.data.setTree(result);
391
- },
392
- afterCreate: function () {
393
- var _this = this;
394
- addDisposer(self, autorun(function () { return __awaiter(_this, void 0, void 0, function () {
395
- var treeFilehandle, _a, e_2;
396
- return __generator(this, function (_b) {
397
- switch (_b.label) {
398
- case 0:
399
- treeFilehandle = self.treeFilehandle;
400
- if (!treeFilehandle) return [3 /*break*/, 4];
401
- _b.label = 1;
402
- case 1:
403
- _b.trys.push([1, 3, , 4]);
404
- _a = this.setTree;
405
- return [4 /*yield*/, openLocation(treeFilehandle).readFile('utf8')];
406
- case 2:
407
- _a.apply(this, [(_b.sent())]);
408
- return [3 /*break*/, 4];
409
- case 3:
410
- e_2 = _b.sent();
411
- this.setError(e_2);
412
- return [3 /*break*/, 4];
413
- case 4: return [2 /*return*/];
414
- }
415
- });
416
- }); }));
417
- addDisposer(self, autorun(function () { return __awaiter(_this, void 0, void 0, function () {
418
- var msaFilehandle, _a, e_3;
419
- return __generator(this, function (_b) {
420
- switch (_b.label) {
421
- case 0:
422
- msaFilehandle = self.msaFilehandle;
423
- if (!msaFilehandle) return [3 /*break*/, 4];
424
- _b.label = 1;
425
- case 1:
426
- _b.trys.push([1, 3, , 4]);
427
- _a = this.setMSA;
428
- return [4 /*yield*/, openLocation(msaFilehandle).readFile('utf8')];
429
- case 2:
430
- _a.apply(this, [(_b.sent())]);
431
- return [3 /*break*/, 4];
432
- case 3:
433
- e_3 = _b.sent();
434
- this.setError(e_3);
435
- return [3 /*break*/, 4];
436
- case 4: return [2 /*return*/];
437
- }
438
- });
439
- }); }));
440
- },
441
- }); })
442
- .views(function (self) {
443
- var oldBlocksX = [];
444
- var oldBlocksY = [];
445
- var oldValX = 0;
446
- var oldValY = 0;
447
- return {
448
- get initialized() {
449
- return ((self.data.msa ||
450
- self.data.tree ||
451
- self.msaFilehandle ||
452
- self.treeFilehandle) &&
453
- !self.error);
454
- },
455
- get blocksX() {
456
- var scrollX = self.scrollX, size = self.blockSize, colWidth = self.colWidth;
457
- var ret = -(size * Math.floor(scrollX / size)) - size;
458
- var b = [];
459
- for (var i = ret; i < ret + size * 3; i += size) {
460
- if (i + size > 0) {
461
- b.push(i);
462
- }
463
- }
464
- if (JSON.stringify(b) !== JSON.stringify(oldBlocksX) ||
465
- colWidth !== oldValX) {
466
- oldBlocksX = b;
467
- oldValX = colWidth;
468
- }
469
- return oldBlocksX;
470
- },
471
- get blocksY() {
472
- var scrollY = self.scrollY, size = self.blockSize, rowHeight = self.rowHeight;
473
- var ret = -(size * Math.floor(scrollY / size)) - 2 * size;
474
- var b = [];
475
- for (var i = ret; i < ret + size * 3; i += size) {
476
- if (i + size > 0) {
477
- b.push(i);
478
- }
479
- }
480
- if (JSON.stringify(b) !== JSON.stringify(oldBlocksY) ||
481
- rowHeight !== oldValY) {
482
- oldBlocksY = b;
483
- oldValY = rowHeight;
484
- }
485
- return oldBlocksY;
486
- },
487
- };
488
- })
489
- .views(function (self) { return ({
490
- get blocks2d() {
491
- return self.blocksY.map(function (by) { return self.blocksX.map(function (bx) { return [bx, by]; }); }).flat();
492
- },
493
- get done() {
494
- return self.initialized && (self.data.msa || self.data.tree);
495
- },
496
- get colorScheme() {
497
- return colorSchemes[self.colorSchemeName];
498
- },
499
- get alignmentDetails() {
500
- var _a;
501
- return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getDetails()) || {};
502
- },
503
- getRowDetails: function (name) {
504
- var _a;
505
- //@ts-ignore
506
- var details = (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getRowDetails(name);
507
- var matches = name.match(/\S+\/(\d+)-(\d+)/);
508
- return __assign(__assign({}, details), (matches && { range: { start: +matches[1], end: +matches[2] } }));
509
- },
510
- get currentAlignmentName() {
511
- return this.alignmentNames[self.currentAlignment];
512
- },
513
- get alignmentNames() {
514
- var _a;
515
- return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.alignmentNames) || [];
516
- },
517
- get noTree() {
518
- return !!this.tree.noTree;
519
- },
520
- get menuItems() {
521
- return [];
522
- },
523
- get MSA() {
524
- var text = self.data.msa;
525
- if (text) {
526
- if (Stockholm.sniff(text)) {
527
- return new StockholmMSA(text, self.currentAlignment);
528
- }
529
- else if (text.startsWith('>')) {
530
- return new FastaMSA(text);
531
- }
532
- else {
533
- return new ClustalMSA(text);
534
- }
535
- }
536
- return null;
537
- },
538
- get numColumns() {
539
- var _a;
540
- return ((((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getWidth()) || 0) - this.blanks.length) * self.colWidth;
541
- },
542
- get tree() {
543
- var _a;
544
- return self.data.tree
545
- ? generateNodeIds(parseNewick(self.data.tree))
546
- : ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getTree()) || { noTree: true };
547
- },
548
- get rowNames() {
549
- return this.hierarchy.leaves().map(function (node) { return node.data.name; });
550
- },
551
- get mouseOverRowName() {
552
- return self.mouseRow !== undefined
553
- ? this.rowNames[self.mouseRow]
554
- : undefined;
555
- },
556
- getMouseOverResidue: function (rowName) {
557
- return this.columns[rowName];
558
- },
559
- get root() {
560
- var hier = hierarchy(this.tree, function (d) { return d.branchset; })
561
- .sum(function (d) { return (d.branchset ? 0 : 1); })
562
- .sort(function (a, b) {
563
- return ascending(a.data.length || 1, b.data.length || 1);
564
- });
565
- if (self.showOnly) {
566
- var res = hier.find(function (node) { return node.data.id === self.showOnly; });
567
- if (res) {
568
- hier = res;
569
- }
570
- }
571
- if (self.collapsed.length) {
572
- self.collapsed
573
- .map(function (collapsedId) {
574
- return hier.find(function (node) { return node.data.id === collapsedId; });
575
- })
576
- .filter(function (f) { return !!f; })
577
- .map(function (node) { return collapse(node); });
578
- }
579
- return hier;
580
- },
581
- get structures() {
582
- var _a;
583
- return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getStructures()) || {};
584
- },
585
- get inverseStructures() {
586
- var map = Object.entries(this.structures)
587
- .map(function (_a) {
588
- var key = _a[0], val = _a[1];
589
- return val.map(function (pdbEntry) { return [pdbEntry.pdb, { id: key }]; });
590
- })
591
- .flat();
592
- return Object.fromEntries(map);
593
- },
594
- get msaAreaWidth() {
595
- //@ts-ignore
596
- return self.width - self.treeAreaWidth;
597
- },
598
- get blanks() {
599
- var _this = this;
600
- var _a;
601
- var blanks = [];
602
- var strs = this.hierarchy
603
- .leaves()
604
- .map(function (_a) {
605
- var _b;
606
- var data = _a.data;
607
- return (_b = _this.MSA) === null || _b === void 0 ? void 0 : _b.getRow(data.name);
608
- })
609
- .filter(function (item) { return !!item; });
610
- for (var i = 0; i < ((_a = strs[0]) === null || _a === void 0 ? void 0 : _a.length); i++) {
611
- var counter = 0;
612
- for (var j = 0; j < strs.length; j++) {
613
- if (strs[j][i] === '-') {
614
- counter++;
615
- }
616
- }
617
- if (counter === strs.length) {
618
- blanks.push(i);
619
- }
620
- }
621
- return blanks;
622
- },
623
- get rows() {
624
- var _this = this;
625
- return this.hierarchy
626
- .leaves()
627
- .map(function (_a) {
628
- var _b;
629
- var data = _a.data;
630
- return [data.name, (_b = _this.MSA) === null || _b === void 0 ? void 0 : _b.getRow(data.name)];
631
- })
632
- .filter(function (f) { return !!f[1]; });
633
- },
634
- get columns() {
635
- var rows = this.rows;
636
- var cols = this.columns2d;
637
- return Object.fromEntries(rows.map(function (row, index) { return [row[0], cols[index]]; }));
638
- },
639
- get columns2d() {
640
- var strs = this.rows.map(function (r) { return r[1]; });
641
- var ret = [];
642
- for (var i = 0; i < strs.length; i++) {
643
- ret.push(skipBlanks(this.blanks, strs[i]));
644
- }
645
- return ret;
646
- },
647
- get colStats() {
648
- var r = [];
649
- var m = this.columns2d;
650
- for (var i = 0; i < m.length; i++) {
651
- for (var j = 0; j < m[i].length; j++) {
652
- var l = r[j] || {};
653
- if (!l[m[i][j]]) {
654
- l[m[i][j]] = 0;
655
- }
656
- l[m[i][j]]++;
657
- r[j] = l;
658
- }
659
- }
660
- return r;
661
- },
662
- // generates a new tree that is clustered with x,y positions
663
- get hierarchy() {
664
- var root = this.root;
665
- var clust = cluster()
666
- .size([this.totalHeight, self.treeWidth])
667
- .separation(function () { return 1; });
668
- clust(root);
669
- setBrLength(root,
670
- //@ts-ignore
671
- (root.data.length = 0), self.treeWidth / maxLength(root));
672
- return root;
673
- },
674
- get totalHeight() {
675
- return this.root.leaves().length * self.rowHeight;
676
- },
677
- }); })
678
- .actions(function (self) { return ({
679
- addUniprotTrack: function (node) {
680
- if (self.boxTracks.find(function (t) { return t.name === node.name; })) {
681
- if (self.turnedOffTracks.has(node.name)) {
682
- this.toggleTrack(node.name);
683
- }
684
- }
685
- else {
686
- self.boxTracks.push(__assign(__assign({}, node), { id: node.name, associatedRowName: node.name }));
687
- }
688
- },
689
- doScrollY: function (deltaY) {
690
- self.scrollY = clamp(-self.totalHeight + 10, self.scrollY + deltaY, 0);
691
- },
692
- doScrollX: function (deltaX) {
693
- self.scrollX = clamp(-self.numColumns + (self.msaAreaWidth - 100), self.scrollX + deltaX, 0);
694
- },
695
- setMouseoveredColumn: function (n, chain, file) {
696
- var _a;
697
- var j = 0;
698
- var i = 0;
699
- var id = (self.inverseStructures[file.slice(0, -4)] || {}).id;
700
- var row = (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.getRow(id);
701
- if (row) {
702
- for (i = 0; i < row.length && j < n; i++) {
703
- if (row[i] !== '-') {
704
- j++;
705
- }
706
- }
707
- self.mouseCol = j + 1;
708
- }
709
- else {
710
- self.mouseCol = undefined;
711
- }
712
- },
713
- toggleTrack: function (id) {
714
- if (self.turnedOffTracks.has(id)) {
715
- self.turnedOffTracks.delete(id);
716
- }
717
- else {
718
- self.turnedOffTracks.set(id, true);
719
- }
720
- },
721
- }); })
722
- .views(function (self) { return ({
723
- get secondaryStructureConsensus() {
724
- var _a;
725
- return (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.secondaryStructureConsensus;
726
- },
727
- get seqConsensus() {
728
- var _a;
729
- return (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.seqConsensus;
730
- },
731
- get conservation() {
732
- var m = self.columns2d;
733
- if (m.length) {
734
- for (var i = 0; i < m[0].length; i++) {
735
- var col = [];
736
- for (var j = 0; j < m.length; j++) {
737
- col.push(m[j][i]);
738
- }
739
- }
740
- }
741
- return ['a'];
742
- },
743
- get tracks() {
744
- var blanks = self.blanks;
745
- var adapterTracks = self.MSA
746
- ? self.MSA.tracks.map(function (track) {
747
- var data = track.data;
748
- return {
749
- model: __assign(__assign({}, track), { data: data ? skipBlanks(blanks, data) : undefined, height: self.rowHeight }),
750
- ReactComponent: TextTrack,
751
- };
752
- })
753
- : [];
754
- var boxTracks = self.boxTracks
755
- // filter out tracks that are associated with hidden rows
756
- .filter(function (track) { return !!self.rows.find(function (row) { return row[0] === track.name; }); })
757
- .map(function (track) { return ({
758
- model: track,
759
- ReactComponent: BoxTrack,
760
- }); });
761
- var annotationTracks = self.annotatedRegions.length > 0
762
- ? [
763
- {
764
- model: {
765
- features: self.annotatedRegions,
766
- height: 100,
767
- id: 'annotations',
768
- name: 'User-created annotations',
769
- data: self.annotatedRegions
770
- .map(function (region) {
771
- var attrs = region.attributes
772
- ? Object.entries(region.attributes)
773
- .map(function (_a) {
774
- var k = _a[0], v = _a[1];
775
- return k + "=" + v.join(',');
776
- })
777
- .join(';')
778
- : '.';
779
- return [
780
- 'MSA_refcoord',
781
- '.',
782
- '.',
783
- region.start,
784
- region.end,
785
- '.',
786
- '.',
787
- '.',
788
- attrs,
789
- ].join('\t');
790
- })
791
- .join('\n'),
792
- },
793
- ReactComponent: BoxTrack,
794
- },
795
- ]
796
- : [];
797
- return __spreadArray(__spreadArray(__spreadArray([], adapterTracks, true), boxTracks, true), annotationTracks, true);
798
- },
799
- get turnedOnTracks() {
800
- return this.tracks.filter(function (f) { return !self.turnedOffTracks.has(f.model.id); });
801
- },
802
- // returns coordinate in the current relative coordinate scheme
803
- pxToBp: function (coord) {
804
- return Math.floor((coord - self.scrollX) / self.colWidth);
805
- },
806
- rowSpecificBpToPx: function (rowName, position) {
807
- var _a;
808
- var rowNames = self.rowNames, rows = self.rows, blanks = self.blanks;
809
- var index = rowNames.indexOf(rowName);
810
- var row = rows[index][1];
811
- var details = self.getRowDetails(rowName);
812
- var offset = ((_a = details.range) === null || _a === void 0 ? void 0 : _a.start) || 0;
813
- var current = position - offset;
814
- if (current < 0) {
815
- return 0;
816
- }
817
- var j = 0;
818
- var i = 0;
819
- for (; i < row.length; i++) {
820
- if (row[i] !== '-' && j++ === current) {
821
- break;
822
- }
823
- }
824
- var count = 0;
825
- for (var k = 0; k < row.length; k++) {
826
- if (blanks.indexOf(k) !== -1 && k < i + 1) {
827
- count++;
828
- }
829
- }
830
- return i - count;
831
- },
832
- globalBpToPx: function (position) {
833
- var _a;
834
- var count = 0;
835
- for (var k = 0; k < ((_a = self.rows[0]) === null || _a === void 0 ? void 0 : _a[1].length); k++) {
836
- if (self.blanks.indexOf(k) !== -1 && k < position + 1) {
837
- count++;
838
- }
839
- }
840
- return position - count;
841
- },
842
- relativePxToBp: function (rowName, position) {
843
- var rowNames = self.rowNames, rows = self.rows;
844
- var index = rowNames.indexOf(rowName);
845
- var row = rows[index][1];
846
- var k = 0;
847
- for (var i = 0; i < position; i++) {
848
- if (row[i] !== '-') {
849
- k++;
850
- }
851
- else if (k >= position) {
852
- break;
853
- }
854
- }
855
- return k;
856
- },
857
- getPos: function (pos) {
858
- var j = 0;
859
- for (var i = 0, k = 0; i < pos; i++, j++) {
860
- while (j === self.blanks[k]) {
861
- k++;
862
- j++;
863
- }
864
- }
865
- return j;
866
- },
867
- }); })
868
- .actions(function (self) { return ({
869
- addAnnotation: function (start, end, attributes) {
870
- self.annotatedRegions.push({
871
- start: self.getPos(start),
872
- end: self.getPos(end),
873
- attributes: attributes,
874
- });
875
- },
876
- setOffsets: function (left, right) {
877
- self.annotPos = { left: left, right: right };
878
- },
879
- clearAnnotPos: function () {
880
- self.annotPos = undefined;
881
- },
882
- }); });
883
- var model = types.snapshotProcessor(types.compose(BaseViewModel, MSAModel), {
884
- postProcessor: function (result) {
885
- var _a = result.data, tree = _a.tree, msa = _a.msa, rest = __rest(result
886
- // remove the MSA/tree data from the tree if the filehandle available in
887
- // which case it can be reloaded on refresh
888
- , ["data"]);
889
- // remove the MSA/tree data from the tree if the filehandle available in
890
- // which case it can be reloaded on refresh
891
- return __assign({ data: __assign(__assign({}, (!result.treeFilehandle && { tree: tree })), (!result.msaFilehandle && { msa: msa })) }, rest);
892
- },
893
- });
894
- export default model;