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
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { MsaViewModel } from '../model';
3
+ interface Node {
4
+ x: number;
5
+ y: number;
6
+ name: string;
7
+ id: string;
8
+ }
9
+ declare const TreeBranchMenu: ({ node, model, onClose, }: {
10
+ node: Node;
11
+ model: MsaViewModel;
12
+ onClose: () => void;
13
+ }) => React.JSX.Element;
14
+ export default TreeBranchMenu;
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { Menu, MenuItem } from '@mui/material';
3
+ import { observer } from 'mobx-react';
4
+ const TreeBranchMenu = observer(function ({ node, model, onClose, }) {
5
+ return (React.createElement(Menu, { anchorReference: "anchorPosition", anchorPosition: {
6
+ left: node.x,
7
+ top: node.y,
8
+ }, transitionDuration: 0, keepMounted: true, open: Boolean(node), onClose: onClose },
9
+ React.createElement(MenuItem, { dense: true, disabled: true }, node.name),
10
+ React.createElement(MenuItem, { dense: true, onClick: () => {
11
+ model.toggleCollapsed(node.id);
12
+ onClose();
13
+ } }, model.collapsed.includes(node.id)
14
+ ? 'Expand this node'
15
+ : 'Collapse this node'),
16
+ React.createElement(MenuItem, { dense: true, onClick: () => {
17
+ model.showOnly === node.id
18
+ ? model.setShowOnly(undefined)
19
+ : model.setShowOnly(node.id);
20
+ onClose();
21
+ } }, model.showOnly === node.id
22
+ ? 'Disable show only this node'
23
+ : 'Show only this node')));
24
+ });
25
+ export default TreeBranchMenu;
26
+ //# sourceMappingURL=TreeBranchMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeBranchMenu.js","sourceRoot":"","sources":["../../src/components/TreeBranchMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAYrC,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,EACxC,IAAI,EACJ,KAAK,EACL,OAAO,GAKR;IACC,OAAO,CACL,oBAAC,IAAI,IACH,eAAe,EAAC,gBAAgB,EAChC,cAAc,EAAE;YACd,IAAI,EAAE,IAAI,CAAC,CAAC;YACZ,GAAG,EAAE,IAAI,CAAC,CAAC;SACZ,EACD,kBAAkB,EAAE,CAAC,EACrB,WAAW,QACX,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EACnB,OAAO,EAAE,OAAO;QAEhB,oBAAC,QAAQ,IAAC,KAAK,QAAC,QAAQ,UACrB,IAAI,CAAC,IAAI,CACD;QACX,oBAAC,QAAQ,IACP,KAAK,QACL,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAC9B,OAAO,EAAE,CAAA;YACX,CAAC,IAEA,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,oBAAoB,CACf;QACX,oBAAC,QAAQ,IACP,KAAK,QACL,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;oBACxB,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC;oBAC9B,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAC9B,OAAO,EAAE,CAAA;YACX,CAAC,IAEA,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;YACzB,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,qBAAqB,CAChB,CACN,CACR,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,cAAc,CAAA"}
@@ -1,6 +1,6 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  import { MsaViewModel } from '../model';
3
3
  declare const TreeCanvas: ({ model }: {
4
4
  model: MsaViewModel;
5
- }) => JSX.Element;
5
+ }) => React.JSX.Element;
6
6
  export default TreeCanvas;
@@ -1,359 +1,26 @@
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
1
  import React, { useEffect, useRef, useState } from 'react';
13
- import { Menu, MenuItem } from '@material-ui/core';
14
2
  import normalizeWheel from 'normalize-wheel';
15
3
  import { observer } from 'mobx-react';
16
- import RBush from 'rbush';
17
- import MoreInfoDlg from './MoreInfoDlg';
18
- var extendBounds = 5;
19
- var radius = 3.5;
20
- var d = radius * 2;
21
- var padding = 600;
22
- var TreeMenu = observer(function (_a) {
23
- var _b, _c;
24
- var node = _a.node, onClose = _a.onClose, model = _a.model;
25
- var structures = model.structures;
26
- var nodeDetails = node ? model.getRowDetails(node.name) : undefined;
27
- return (React.createElement(React.Fragment, null,
28
- React.createElement(Menu, { anchorReference: "anchorPosition", anchorPosition: {
29
- top: node.y,
30
- left: node.x,
31
- }, transitionDuration: 0, keepMounted: true, open: Boolean(node), onClose: onClose },
32
- React.createElement(MenuItem, { dense: true, disabled: true }, node.name),
33
- React.createElement(MenuItem, { dense: true, onClick: function () {
34
- model.setDialogComponent(MoreInfoDlg, {
35
- info: model.getRowDetails(node.name),
36
- });
37
- onClose();
38
- } }, "More info..."), (_b = structures[node.name]) === null || _b === void 0 ? void 0 :
39
- _b.map(function (entry) {
40
- return !model.selectedStructures.find(function (n) { return n.id === node.name; }) ? (React.createElement(MenuItem, { key: JSON.stringify(entry), dense: true, onClick: function () {
41
- model.addStructureToSelection({
42
- structure: entry,
43
- id: node.name,
44
- });
45
- onClose();
46
- } },
47
- "Add PDB to selection (",
48
- entry.pdb,
49
- ")")) : (React.createElement(MenuItem, { key: JSON.stringify(entry), dense: true, onClick: function () {
50
- model.removeStructureFromSelection({
51
- structure: entry,
52
- id: node.name,
53
- });
54
- onClose();
55
- } },
56
- "Remove PDB from selection (",
57
- entry.pdb,
58
- ")"));
59
- }), (_c = nodeDetails.accession) === null || _c === void 0 ? void 0 :
60
- _c.map(function (accession) { return (React.createElement(MenuItem, { dense: true, key: accession, onClick: function () {
61
- model.addUniprotTrack({ name: nodeDetails.name, accession: accession });
62
- onClose();
63
- } },
64
- "Open UniProt track (",
65
- accession,
66
- ")")); }))));
67
- });
68
- var TreeBranchMenu = observer(function (_a) {
69
- var node = _a.node, model = _a.model, onClose = _a.onClose;
70
- return (React.createElement(Menu, { anchorReference: "anchorPosition", anchorPosition: {
71
- left: node.x,
72
- top: node.y,
73
- }, transitionDuration: 0, keepMounted: true, open: Boolean(node), onClose: onClose },
74
- React.createElement(MenuItem, { dense: true, disabled: true }, node.name),
75
- React.createElement(MenuItem, { dense: true, onClick: function () {
76
- model.toggleCollapsed(node.id);
77
- onClose();
78
- } }, model.collapsed.includes(node.id)
79
- ? 'Expand this node'
80
- : 'Collapse this node'),
81
- React.createElement(MenuItem, { dense: true, onClick: function () {
82
- model.showOnly === node.id
83
- ? model.setShowOnly(undefined)
84
- : model.setShowOnly(node.id);
85
- onClose();
86
- } }, model.showOnly === node.id
87
- ? 'Disable show only this node'
88
- : 'Show only this node')));
89
- });
90
- var TreeBlock = observer(function (_a) {
91
- var model = _a.model, offsetY = _a.offsetY;
92
- var ref = useRef(null);
93
- var clickMap = useRef(new RBush());
94
- var mouseoverRef = useRef(null);
95
- var _b = useState(), branchMenu = _b[0], setBranchMenu = _b[1];
96
- var _c = useState(), toggleNodeMenu = _c[0], setToggleNodeMenu = _c[1];
97
- var _d = useState(), hoverElt = _d[0], setHoverElt = _d[1];
98
- var hierarchy = model.hierarchy, rowHeight = model.rowHeight, scrollY = model.scrollY, treeWidth = model.treeWidth, showBranchLen = model.showBranchLen, collapsed = model.collapsed, margin = model.margin, labelsAlignRight = model.labelsAlignRight, noTree = model.noTree, blockSize = model.blockSize, drawNodeBubbles = model.drawNodeBubbles, drawTree = model.drawTree, treeAreaWidth = model.treeAreaWidth, structures = model.structures, highResScaleFactor = model.highResScaleFactor;
99
- useEffect(function () {
100
- clickMap.current.clear();
101
- if (!ref.current) {
102
- return;
103
- }
104
- var ctx = ref.current.getContext('2d');
105
- if (!ctx) {
106
- return;
107
- }
108
- ctx.resetTransform();
109
- ctx.scale(highResScaleFactor, highResScaleFactor);
110
- ctx.clearRect(0, 0, treeWidth + padding, blockSize);
111
- ctx.translate(margin.left, -offsetY);
112
- var font = ctx.font;
113
- ctx.font = font.replace(/\d+px/, "".concat(Math.max(8, rowHeight - 8), "px"));
114
- if (!noTree && drawTree) {
115
- hierarchy.links().forEach(function (_a) {
116
- var source = _a.source, target = _a.target;
117
- var y = showBranchLen ? 'len' : 'y';
118
- //@ts-ignore
119
- var _b = source, sy = _b.x, _c = y, sx = _b[_c];
120
- //@ts-ignore
121
- var _d = target, ty = _d.x, _e = y, tx = _d[_e];
122
- var y1 = Math.min(sy, ty);
123
- var y2 = Math.max(sy, ty);
124
- //1d line intersection to check if line crosses block at all, this is
125
- //an optimization that allows us to skip drawing most tree links
126
- //outside the block
127
- if (offsetY + blockSize >= y1 && y2 >= offsetY) {
128
- ctx.beginPath();
129
- ctx.moveTo(sx, sy);
130
- ctx.lineTo(sx, ty);
131
- ctx.lineTo(tx, ty);
132
- ctx.stroke();
133
- }
134
- });
135
- if (drawNodeBubbles) {
136
- hierarchy.descendants().forEach(function (node) {
137
- var val = showBranchLen ? 'len' : 'y';
138
- var _a = node,
139
- //@ts-ignore
140
- y = _a.x,
141
- //@ts-ignore
142
- _b = val,
143
- //@ts-ignore
144
- x = _a[_b], data = _a.data;
145
- var _c = data.id, id = _c === void 0 ? '' : _c, _d = data.name, name = _d === void 0 ? '' : _d;
146
- if (y > offsetY - extendBounds &&
147
- y < offsetY + blockSize + extendBounds) {
148
- ctx.strokeStyle = 'black';
149
- ctx.fillStyle = collapsed.includes(id) ? 'black' : 'white';
150
- ctx.beginPath();
151
- ctx.arc(x, y, radius, 0, 2 * Math.PI);
152
- ctx.fill();
153
- ctx.stroke();
154
- clickMap.current.insert({
155
- minX: x - radius,
156
- maxX: x - radius + d,
157
- minY: y - radius,
158
- maxY: y - radius + d,
159
- branch: true,
160
- id: id,
161
- name: name,
162
- });
163
- }
164
- });
165
- }
166
- }
167
- if (rowHeight >= 10) {
168
- if (labelsAlignRight) {
169
- ctx.textAlign = 'right';
170
- ctx.setLineDash([1, 3]);
171
- }
172
- else {
173
- ctx.textAlign = 'start';
174
- }
175
- hierarchy.leaves().forEach(function (node) {
176
- var
177
- //@ts-ignore
178
- y = node.x,
179
- //@ts-ignore
180
- x = node.y, _a = node.data, name = _a.name, id = _a.id,
181
- //@ts-ignore
182
- len = node.len;
183
- if (y > offsetY - extendBounds &&
184
- y < offsetY + blockSize + extendBounds) {
185
- //note: +rowHeight/4 matches with -rowHeight/4 in msa
186
- var yp = y + rowHeight / 4;
187
- var xp = showBranchLen ? len : x;
188
- var width = ctx.measureText(name).width;
189
- var height = ctx.measureText('M').width; // use an 'em' for height
190
- var hasStructure = structures[name];
191
- ctx.fillStyle = hasStructure ? 'blue' : 'black';
192
- if (!drawTree && !labelsAlignRight) {
193
- ctx.fillText(name, 0, yp);
194
- clickMap.current.insert({
195
- minX: 0,
196
- maxX: width,
197
- minY: yp - height,
198
- maxY: yp,
199
- name: name,
200
- id: id,
201
- });
202
- }
203
- else if (labelsAlignRight) {
204
- var smallPadding = 2;
205
- var offset = treeAreaWidth - smallPadding - margin.left;
206
- if (drawTree && !noTree) {
207
- var width_1 = ctx.measureText(name).width;
208
- ctx.moveTo(xp + radius + 2, y);
209
- ctx.lineTo(offset - smallPadding - width_1, y);
210
- ctx.stroke();
211
- }
212
- ctx.fillText(name, offset, yp);
213
- clickMap.current.insert({
214
- minX: treeAreaWidth - margin.left - width,
215
- maxX: treeAreaWidth - margin.left,
216
- minY: yp - height,
217
- maxY: yp,
218
- name: name,
219
- id: id,
220
- });
221
- }
222
- else {
223
- ctx.fillText(name, xp + d, yp);
224
- clickMap.current.insert({
225
- minX: xp + d,
226
- maxX: xp + d + width,
227
- minY: yp - height,
228
- maxY: yp,
229
- name: name,
230
- id: id,
231
- });
232
- }
233
- }
234
- });
235
- ctx.setLineDash([]);
236
- }
237
- }, [
238
- collapsed,
239
- rowHeight,
240
- margin.left,
241
- hierarchy,
242
- offsetY,
243
- treeWidth,
244
- showBranchLen,
245
- noTree,
246
- blockSize,
247
- drawNodeBubbles,
248
- drawTree,
249
- labelsAlignRight,
250
- treeAreaWidth,
251
- structures,
252
- highResScaleFactor,
253
- ]);
254
- useEffect(function () {
255
- var canvas = mouseoverRef.current;
256
- if (!canvas) {
257
- return;
258
- }
259
- var ctx = canvas.getContext('2d');
260
- if (!ctx) {
261
- return;
262
- }
263
- ctx.resetTransform();
264
- ctx.clearRect(0, 0, treeWidth + padding, blockSize);
265
- ctx.translate(margin.left, -offsetY);
266
- if (hoverElt) {
267
- var minX = hoverElt.minX, maxX = hoverElt.maxX, minY = hoverElt.minY, maxY = hoverElt.maxY;
268
- ctx.fillStyle = 'rgba(0,0,0,0.1)';
269
- ctx.fillRect(minX, minY, maxX - minX, maxY - minY);
270
- }
271
- }, [hoverElt, margin.left, offsetY, blockSize, treeWidth]);
272
- function hoverBranchClickMap(event) {
273
- var x = event.nativeEvent.offsetX - margin.left;
274
- var y = event.nativeEvent.offsetY;
275
- var entry = clickMap.current.search({
276
- minX: x,
277
- maxX: x + 1,
278
- minY: y + offsetY,
279
- maxY: y + 1 + offsetY,
280
- })[0];
281
- return entry && entry.branch
282
- ? __assign(__assign({}, entry), { x: event.clientX, y: event.clientY }) : undefined;
283
- }
284
- function hoverNameClickMap(event) {
285
- var x = event.nativeEvent.offsetX - margin.left;
286
- var y = event.nativeEvent.offsetY;
287
- var entry = clickMap.current.search({
288
- minX: x,
289
- maxX: x + 1,
290
- minY: y + offsetY,
291
- maxY: y + 1 + offsetY,
292
- })[0];
293
- return entry && !entry.branch
294
- ? __assign(__assign({}, entry), { x: event.clientX, y: event.clientY }) : undefined;
295
- }
296
- return (React.createElement(React.Fragment, null,
297
- (branchMenu === null || branchMenu === void 0 ? void 0 : branchMenu.id) ? (React.createElement(TreeBranchMenu, { node: branchMenu, model: model, onClose: function () { return setBranchMenu(undefined); } })) : null,
298
- (toggleNodeMenu === null || toggleNodeMenu === void 0 ? void 0 : toggleNodeMenu.id) ? (React.createElement(TreeMenu, { node: toggleNodeMenu, model: model, onClose: function () { return setToggleNodeMenu(undefined); } })) : null,
299
- React.createElement("canvas", { width: (treeWidth + padding) * highResScaleFactor, height: blockSize * highResScaleFactor, style: {
300
- width: treeWidth + padding,
301
- height: blockSize,
302
- top: scrollY + offsetY,
303
- left: 0,
304
- position: 'absolute',
305
- }, onMouseMove: function (event) {
306
- if (!ref.current) {
307
- return;
308
- }
309
- var ret = hoverNameClickMap(event) || hoverBranchClickMap(event);
310
- if (ret) {
311
- ref.current.style.cursor = 'pointer';
312
- }
313
- else {
314
- ref.current.style.cursor = 'default';
315
- }
316
- setHoverElt(hoverNameClickMap(event));
317
- }, onClick: function (event) {
318
- var x = event.clientX, y = event.clientY;
319
- var data = hoverBranchClickMap(event);
320
- if (data === null || data === void 0 ? void 0 : data.id) {
321
- setBranchMenu(__assign(__assign({}, data), { x: x, y: y }));
322
- }
323
- var data2 = hoverNameClickMap(event);
324
- if (data2 === null || data2 === void 0 ? void 0 : data2.id) {
325
- setToggleNodeMenu(__assign(__assign({}, data2), { x: x, y: y }));
326
- }
327
- }, ref: ref }),
328
- React.createElement("canvas", { style: {
329
- width: treeWidth + padding,
330
- height: blockSize,
331
- top: scrollY + offsetY,
332
- left: 0,
333
- position: 'absolute',
334
- pointerEvents: 'none',
335
- zIndex: 100,
336
- }, width: treeWidth + padding, height: blockSize, ref: mouseoverRef })));
337
- });
338
- var TreeCanvas = observer(function (_a) {
339
- var model = _a.model;
340
- var ref = useRef(null);
341
- var scheduled = useRef(false);
342
- var deltaY = useRef(0);
343
- var prevY = useRef(0);
344
- var treeWidth = model.treeWidth, height = model.height, blocksY = model.blocksY;
345
- var _b = useState(false), mouseDragging = _b[0], setMouseDragging = _b[1];
346
- useEffect(function () {
347
- var curr = ref.current;
4
+ import TreeCanvasBlock from './TreeCanvasBlock';
5
+ const padding = 600;
6
+ const TreeCanvas = observer(function ({ model }) {
7
+ const ref = useRef(null);
8
+ const scheduled = useRef(false);
9
+ const deltaY = useRef(0);
10
+ const prevY = useRef(0);
11
+ const { treeWidth, height, blocksY } = model;
12
+ const [mouseDragging, setMouseDragging] = useState(false);
13
+ useEffect(() => {
14
+ const curr = ref.current;
348
15
  if (!curr) {
349
16
  return;
350
17
  }
351
18
  function onWheel(origEvent) {
352
- var event = normalizeWheel(origEvent);
19
+ const event = normalizeWheel(origEvent);
353
20
  deltaY.current += event.pixelY;
354
21
  if (!scheduled.current) {
355
22
  scheduled.current = true;
356
- requestAnimationFrame(function () {
23
+ requestAnimationFrame(() => {
357
24
  model.doScrollY(-deltaY.current);
358
25
  deltaY.current = 0;
359
26
  scheduled.current = false;
@@ -362,22 +29,22 @@ var TreeCanvas = observer(function (_a) {
362
29
  origEvent.preventDefault();
363
30
  }
364
31
  curr.addEventListener('wheel', onWheel);
365
- return function () {
32
+ return () => {
366
33
  curr.removeEventListener('wheel', onWheel);
367
34
  };
368
35
  }, [model]);
369
- useEffect(function () {
370
- var cleanup = function () { };
36
+ useEffect(() => {
37
+ let cleanup = () => { };
371
38
  function globalMouseMove(event) {
372
39
  event.preventDefault();
373
- var currY = event.clientY;
374
- var distanceY = currY - prevY.current;
40
+ const currY = event.clientY;
41
+ const distanceY = currY - prevY.current;
375
42
  if (distanceY) {
376
43
  // use rAF to make it so multiple event handlers aren't fired per-frame
377
44
  // see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/
378
45
  if (!scheduled.current) {
379
46
  scheduled.current = true;
380
- window.requestAnimationFrame(function () {
47
+ window.requestAnimationFrame(() => {
381
48
  model.doScrollY(distanceY);
382
49
  scheduled.current = false;
383
50
  prevY.current = event.clientY;
@@ -394,7 +61,7 @@ var TreeCanvas = observer(function (_a) {
394
61
  if (mouseDragging) {
395
62
  window.addEventListener('mousemove', globalMouseMove, true);
396
63
  window.addEventListener('mouseup', globalMouseUp, true);
397
- cleanup = function () {
64
+ cleanup = () => {
398
65
  window.removeEventListener('mousemove', globalMouseMove, true);
399
66
  window.removeEventListener('mouseup', globalMouseUp, true);
400
67
  };
@@ -403,7 +70,7 @@ var TreeCanvas = observer(function (_a) {
403
70
  }, [model, mouseDragging]);
404
71
  function mouseDown(event) {
405
72
  // check if clicking a draggable element or a resize handle
406
- var target = event.target;
73
+ const target = event.target;
407
74
  if (target.draggable || target.dataset.resizer) {
408
75
  return;
409
76
  }
@@ -423,10 +90,11 @@ var TreeCanvas = observer(function (_a) {
423
90
  event.preventDefault();
424
91
  }
425
92
  return (React.createElement("div", { ref: ref, onMouseDown: mouseDown, onMouseUp: mouseUp, onMouseLeave: mouseLeave, style: {
426
- height: height,
93
+ height,
427
94
  position: 'relative',
428
95
  overflow: 'hidden',
429
96
  width: treeWidth + padding,
430
- } }, blocksY.map(function (block) { return (React.createElement(TreeBlock, { key: block, model: model, offsetY: block })); })));
97
+ } }, blocksY.map(block => (React.createElement(TreeCanvasBlock, { key: block, model: model, offsetY: block })))));
431
98
  });
432
99
  export default TreeCanvas;
100
+ //# sourceMappingURL=TreeCanvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeCanvas.js","sourceRoot":"","sources":["../../src/components/TreeCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,cAAc,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAE/C,MAAM,OAAO,GAAG,GAAG,CAAA;AAEnB,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACtE,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACxB,MAAM,KAAK,GAAG,MAAM,CAAS,CAAC,CAAC,CAAA;IAC/B,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IAC5C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAA;QACxB,IAAI,CAAC,IAAI,EAAE;YACT,OAAM;SACP;QACD,SAAS,OAAO,CAAC,SAAqB;YACpC,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;YACvC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAA;YAE9B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;gBACtB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAA;gBACxB,qBAAqB,CAAC,GAAG,EAAE;oBACzB,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;oBAChC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;oBAClB,SAAS,CAAC,OAAO,GAAG,KAAK,CAAA;gBAC3B,CAAC,CAAC,CAAA;aACH;YACD,SAAS,CAAC,cAAc,EAAE,CAAA;QAC5B,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC5C,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;QAEtB,SAAS,eAAe,CAAC,KAAiB;YACxC,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAA;YAC3B,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,OAAO,CAAA;YACvC,IAAI,SAAS,EAAE;gBACb,uEAAuE;gBACvE,8EAA8E;gBAC9E,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;oBACtB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAA;oBACxB,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;wBAChC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;wBAC1B,SAAS,CAAC,OAAO,GAAG,KAAK,CAAA;wBACzB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;oBAC/B,CAAC,CAAC,CAAA;iBACH;aACF;QACH,CAAC;QAED,SAAS,aAAa;YACpB,KAAK,CAAC,OAAO,GAAG,CAAC,CAAA;YACjB,IAAI,aAAa,EAAE;gBACjB,gBAAgB,CAAC,KAAK,CAAC,CAAA;aACxB;QACH,CAAC;QAED,IAAI,aAAa,EAAE;YACjB,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,IAAI,CAAC,CAAA;YAC3D,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;YACvD,OAAO,GAAG,GAAG,EAAE;gBACb,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,eAAe,EAAE,IAAI,CAAC,CAAA;gBAC9D,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;YAC5D,CAAC,CAAA;SACF;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAA;IAE1B,SAAS,SAAS,CAAC,KAAuB;QACxC,2DAA2D;QAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAA;QAC1C,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;YAC9C,OAAM;SACP;QAED,qCAAqC;QACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;YAC7B,gBAAgB,CAAC,IAAI,CAAC,CAAA;SACvB;IACH,CAAC;IAED,yEAAyE;IACzE,wEAAwE;IACxE,SAAS,OAAO,CAAC,KAAuB;QACtC,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IAED,SAAS,UAAU,CAAC,KAAuB;QACzC,KAAK,CAAC,cAAc,EAAE,CAAA;IACxB,CAAC;IAED,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,SAAS,EACtB,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,UAAU,EACxB,KAAK,EAAE;YACL,MAAM;YACN,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,SAAS,GAAG,OAAO;SAC3B,IAEA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CACpB,oBAAC,eAAe,IAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAI,CAC9D,CAAC,CACE,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,UAAU,CAAA"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { MsaViewModel } from '../model';
3
+ declare const TreeCanvasBlock: ({ model, offsetY, }: {
4
+ model: MsaViewModel;
5
+ offsetY: number;
6
+ }) => React.JSX.Element;
7
+ export default TreeCanvasBlock;