jbrowse-plugin-mafviewer 1.4.3 → 1.4.6

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 (204) hide show
  1. package/README.md +1 -1
  2. package/dist/BigMafAdapter/BigMafAdapter.js +4 -5
  3. package/dist/BigMafAdapter/BigMafAdapter.js.map +1 -1
  4. package/dist/BigMafAdapter/configSchema.d.ts +2 -2
  5. package/dist/LinearMafDisplay/components/LinearMafDisplayComponent.js +39 -109
  6. package/dist/LinearMafDisplay/components/LinearMafDisplayComponent.js.map +1 -1
  7. package/dist/LinearMafDisplay/components/MAFTooltip.d.ts +0 -3
  8. package/dist/LinearMafDisplay/components/MAFTooltip.js.map +1 -1
  9. package/dist/LinearMafDisplay/components/MsaHighlightOverlay.d.ts +9 -0
  10. package/dist/LinearMafDisplay/components/MsaHighlightOverlay.js +34 -0
  11. package/dist/LinearMafDisplay/components/MsaHighlightOverlay.js.map +1 -0
  12. package/dist/LinearMafDisplay/components/Sidebar/ColorLegend.js +2 -2
  13. package/dist/LinearMafDisplay/components/Sidebar/ColorLegend.js.map +1 -1
  14. package/dist/LinearMafDisplay/components/Sidebar/RectBg.d.ts +1 -1
  15. package/dist/LinearMafDisplay/components/Sidebar/RectBg.js +2 -3
  16. package/dist/LinearMafDisplay/components/Sidebar/RectBg.js.map +1 -1
  17. package/dist/LinearMafDisplay/components/Sidebar/SvgWrapper.js +81 -11
  18. package/dist/LinearMafDisplay/components/Sidebar/SvgWrapper.js.map +1 -1
  19. package/dist/LinearMafDisplay/components/Sidebar/Tree.js +30 -9
  20. package/dist/LinearMafDisplay/components/Sidebar/Tree.js.map +1 -1
  21. package/dist/LinearMafDisplay/components/Sidebar/YScaleBars.d.ts +0 -1
  22. package/dist/LinearMafDisplay/components/Sidebar/YScaleBars.js.map +1 -1
  23. package/dist/LinearMafDisplay/components/useDragSelection.d.ts +25 -0
  24. package/dist/LinearMafDisplay/components/useDragSelection.js +103 -0
  25. package/dist/LinearMafDisplay/components/useDragSelection.js.map +1 -0
  26. package/dist/LinearMafDisplay/configSchema.d.ts +3 -30
  27. package/dist/LinearMafDisplay/renderSvg.js +1 -1
  28. package/dist/LinearMafDisplay/renderSvg.js.map +1 -1
  29. package/dist/LinearMafDisplay/stateModel.d.ts +1090 -102
  30. package/dist/LinearMafDisplay/stateModel.js +156 -17
  31. package/dist/LinearMafDisplay/stateModel.js.map +1 -1
  32. package/dist/LinearMafDisplay/types.d.ts +2 -2
  33. package/dist/LinearMafDisplay/util.d.ts +6 -0
  34. package/dist/LinearMafDisplay/util.js +28 -6
  35. package/dist/LinearMafDisplay/util.js.map +1 -1
  36. package/dist/LinearMafRenderer/LinearMafRenderer.d.ts +43 -10
  37. package/dist/LinearMafRenderer/LinearMafRenderer.js +1 -1
  38. package/dist/LinearMafRenderer/LinearMafRenderer.js.map +1 -1
  39. package/dist/LinearMafRenderer/components/LinearMafRendering.d.ts +14 -5
  40. package/dist/LinearMafRenderer/components/LinearMafRendering.js +40 -20
  41. package/dist/LinearMafRenderer/components/LinearMafRendering.js.map +1 -1
  42. package/dist/LinearMafRenderer/configSchema.d.ts +1 -6
  43. package/dist/LinearMafRenderer/configSchema.js +1 -6
  44. package/dist/LinearMafRenderer/configSchema.js.map +1 -1
  45. package/dist/LinearMafRenderer/makeImageData.js +6 -7
  46. package/dist/LinearMafRenderer/makeImageData.js.map +1 -1
  47. package/dist/LinearMafRenderer/rendering/features.d.ts +0 -1
  48. package/dist/LinearMafRenderer/rendering/features.js +1 -14
  49. package/dist/LinearMafRenderer/rendering/features.js.map +1 -1
  50. package/dist/LinearMafRenderer/rendering/insertions.d.ts +1 -1
  51. package/dist/LinearMafRenderer/rendering/insertions.js +10 -8
  52. package/dist/LinearMafRenderer/rendering/insertions.js.map +1 -1
  53. package/dist/LinearMafRenderer/rendering/matches.d.ts +1 -1
  54. package/dist/LinearMafRenderer/rendering/matches.js +3 -15
  55. package/dist/LinearMafRenderer/rendering/matches.js.map +1 -1
  56. package/dist/LinearMafRenderer/rendering/mismatches.d.ts +1 -1
  57. package/dist/LinearMafRenderer/rendering/mismatches.js +3 -3
  58. package/dist/LinearMafRenderer/rendering/spatialIndex.js +8 -2
  59. package/dist/LinearMafRenderer/rendering/spatialIndex.js.map +1 -1
  60. package/dist/LinearMafRenderer/rendering/text.js +1 -3
  61. package/dist/LinearMafRenderer/rendering/text.js.map +1 -1
  62. package/dist/LinearMafRenderer/rendering/types.d.ts +6 -5
  63. package/dist/MafAddTrackWorkflow/AddTrackWorkflow.js +1 -1
  64. package/dist/MafAddTrackWorkflow/AddTrackWorkflow.js.map +1 -1
  65. package/dist/MafAddTrackWorkflow/index.js +1 -1
  66. package/dist/MafAddTrackWorkflow/index.js.map +1 -1
  67. package/dist/MafGetSequences/MafGetSequences.d.ts +1 -0
  68. package/dist/MafGetSequences/MafGetSequences.js +2 -1
  69. package/dist/MafGetSequences/MafGetSequences.js.map +1 -1
  70. package/dist/MafSequenceWidget/LabelsCanvas.d.ts +8 -0
  71. package/dist/MafSequenceWidget/LabelsCanvas.js +37 -0
  72. package/dist/MafSequenceWidget/LabelsCanvas.js.map +1 -0
  73. package/dist/MafSequenceWidget/MafSequenceHoverHighlight.d.ts +6 -0
  74. package/dist/MafSequenceWidget/MafSequenceHoverHighlight.js +52 -0
  75. package/dist/MafSequenceWidget/MafSequenceHoverHighlight.js.map +1 -0
  76. package/dist/MafSequenceWidget/MafSequenceHoverHighlightExtension.d.ts +2 -0
  77. package/dist/MafSequenceWidget/MafSequenceHoverHighlightExtension.js +12 -0
  78. package/dist/MafSequenceWidget/MafSequenceHoverHighlightExtension.js.map +1 -0
  79. package/dist/MafSequenceWidget/MafSequenceWidget.d.ts +6 -0
  80. package/dist/MafSequenceWidget/MafSequenceWidget.js +189 -0
  81. package/dist/MafSequenceWidget/MafSequenceWidget.js.map +1 -0
  82. package/dist/MafSequenceWidget/SequenceCanvas.d.ts +12 -0
  83. package/dist/MafSequenceWidget/SequenceCanvas.js +86 -0
  84. package/dist/MafSequenceWidget/SequenceCanvas.js.map +1 -0
  85. package/dist/MafSequenceWidget/SequenceDisplay.d.ts +12 -0
  86. package/dist/MafSequenceWidget/SequenceDisplay.js +117 -0
  87. package/dist/MafSequenceWidget/SequenceDisplay.js.map +1 -0
  88. package/dist/MafSequenceWidget/SequenceTooltip.d.ts +11 -0
  89. package/dist/MafSequenceWidget/SequenceTooltip.js +39 -0
  90. package/dist/MafSequenceWidget/SequenceTooltip.js.map +1 -0
  91. package/dist/MafSequenceWidget/baseColors.d.ts +3 -0
  92. package/dist/MafSequenceWidget/baseColors.js +64 -0
  93. package/dist/MafSequenceWidget/baseColors.js.map +1 -0
  94. package/dist/MafSequenceWidget/colToGenomePos.d.ts +13 -0
  95. package/dist/MafSequenceWidget/colToGenomePos.js +32 -0
  96. package/dist/MafSequenceWidget/colToGenomePos.js.map +1 -0
  97. package/dist/MafSequenceWidget/colToGenomePos.test.d.ts +1 -0
  98. package/dist/MafSequenceWidget/colToGenomePos.test.js +136 -0
  99. package/dist/MafSequenceWidget/colToGenomePos.test.js.map +1 -0
  100. package/dist/MafSequenceWidget/configSchema.d.ts +1 -0
  101. package/dist/MafSequenceWidget/configSchema.js +3 -0
  102. package/dist/MafSequenceWidget/configSchema.js.map +1 -0
  103. package/dist/MafSequenceWidget/constants.d.ts +4 -0
  104. package/dist/MafSequenceWidget/constants.js +5 -0
  105. package/dist/MafSequenceWidget/constants.js.map +1 -0
  106. package/dist/MafSequenceWidget/index.d.ts +2 -0
  107. package/dist/MafSequenceWidget/index.js +16 -0
  108. package/dist/MafSequenceWidget/index.js.map +1 -0
  109. package/dist/MafSequenceWidget/stateModelFactory.d.ts +67 -0
  110. package/dist/MafSequenceWidget/stateModelFactory.js +21 -0
  111. package/dist/MafSequenceWidget/stateModelFactory.js.map +1 -0
  112. package/dist/MafTabixAdapter/MafTabixAdapter.js +4 -35
  113. package/dist/MafTabixAdapter/MafTabixAdapter.js.map +1 -1
  114. package/dist/MafTabixAdapter/configSchema.d.ts +4 -4
  115. package/dist/MafTrack/configSchema.d.ts +16 -11
  116. package/dist/index.js +2 -0
  117. package/dist/index.js.map +1 -1
  118. package/dist/jbrowse-plugin-mafviewer.umd.production.min.js +12 -24
  119. package/dist/jbrowse-plugin-mafviewer.umd.production.min.js.map +4 -4
  120. package/dist/util/clipboard.d.ts +2 -0
  121. package/dist/util/clipboard.js +28 -0
  122. package/dist/util/clipboard.js.map +1 -0
  123. package/dist/util/fastaUtils.d.ts +2 -1
  124. package/dist/util/fastaUtils.js +93 -50
  125. package/dist/util/fastaUtils.js.map +1 -1
  126. package/dist/util/fastaUtils.test.js +190 -0
  127. package/dist/util/fastaUtils.test.js.map +1 -1
  128. package/dist/util/parseAssemblyName.d.ts +32 -0
  129. package/dist/util/parseAssemblyName.js +87 -0
  130. package/dist/util/parseAssemblyName.js.map +1 -0
  131. package/dist/util/parseAssemblyName.test.d.ts +1 -0
  132. package/dist/util/parseAssemblyName.test.js +269 -0
  133. package/dist/util/parseAssemblyName.test.js.map +1 -0
  134. package/package.json +12 -12
  135. package/src/BigMafAdapter/BigMafAdapter.ts +5 -5
  136. package/src/LinearMafDisplay/components/LinearMafDisplayComponent.tsx +63 -145
  137. package/src/LinearMafDisplay/components/MAFTooltip.tsx +0 -3
  138. package/src/LinearMafDisplay/components/MsaHighlightOverlay.tsx +62 -0
  139. package/src/LinearMafDisplay/components/Sidebar/ColorLegend.tsx +2 -6
  140. package/src/LinearMafDisplay/components/Sidebar/RectBg.tsx +8 -3
  141. package/src/LinearMafDisplay/components/Sidebar/SvgWrapper.tsx +117 -15
  142. package/src/LinearMafDisplay/components/Sidebar/Tree.tsx +53 -8
  143. package/src/LinearMafDisplay/components/Sidebar/YScaleBars.tsx +0 -1
  144. package/src/LinearMafDisplay/components/useDragSelection.ts +159 -0
  145. package/src/LinearMafDisplay/renderSvg.tsx +1 -1
  146. package/src/LinearMafDisplay/stateModel.ts +215 -20
  147. package/src/LinearMafDisplay/types.ts +2 -2
  148. package/src/LinearMafDisplay/util.ts +35 -7
  149. package/src/LinearMafRenderer/LinearMafRenderer.ts +3 -5
  150. package/src/LinearMafRenderer/components/LinearMafRendering.tsx +67 -33
  151. package/src/LinearMafRenderer/configSchema.ts +1 -6
  152. package/src/LinearMafRenderer/makeImageData.ts +5 -14
  153. package/src/LinearMafRenderer/rendering/features.ts +2 -36
  154. package/src/LinearMafRenderer/rendering/insertions.ts +13 -8
  155. package/src/LinearMafRenderer/rendering/matches.ts +2 -27
  156. package/src/LinearMafRenderer/rendering/mismatches.ts +3 -3
  157. package/src/LinearMafRenderer/rendering/spatialIndex.ts +9 -2
  158. package/src/LinearMafRenderer/rendering/text.ts +1 -2
  159. package/src/LinearMafRenderer/rendering/types.ts +8 -5
  160. package/src/MafAddTrackWorkflow/AddTrackWorkflow.tsx +1 -1
  161. package/src/MafAddTrackWorkflow/index.ts +1 -1
  162. package/src/MafGetSequences/MafGetSequences.ts +10 -2
  163. package/src/MafSequenceWidget/LabelsCanvas.tsx +58 -0
  164. package/src/MafSequenceWidget/MafSequenceHoverHighlight.tsx +83 -0
  165. package/src/MafSequenceWidget/MafSequenceHoverHighlightExtension.tsx +24 -0
  166. package/src/MafSequenceWidget/MafSequenceWidget.tsx +294 -0
  167. package/src/MafSequenceWidget/SequenceCanvas.tsx +136 -0
  168. package/src/MafSequenceWidget/SequenceDisplay.tsx +188 -0
  169. package/src/MafSequenceWidget/SequenceTooltip.tsx +70 -0
  170. package/src/MafSequenceWidget/baseColors.ts +76 -0
  171. package/src/MafSequenceWidget/colToGenomePos.test.ts +166 -0
  172. package/src/MafSequenceWidget/colToGenomePos.ts +40 -0
  173. package/src/MafSequenceWidget/configSchema.ts +3 -0
  174. package/src/MafSequenceWidget/constants.ts +4 -0
  175. package/src/MafSequenceWidget/index.ts +24 -0
  176. package/src/MafSequenceWidget/stateModelFactory.ts +43 -0
  177. package/src/MafTabixAdapter/MafTabixAdapter.ts +12 -51
  178. package/src/index.ts +2 -0
  179. package/src/util/__snapshots__/fastaUtils.test.ts.snap +35 -0
  180. package/src/util/clipboard.ts +35 -0
  181. package/src/util/fastaUtils.test.ts +199 -0
  182. package/src/util/fastaUtils.ts +118 -51
  183. package/src/util/parseAssemblyName.test.ts +350 -0
  184. package/src/util/parseAssemblyName.ts +106 -0
  185. package/dist/LinearMafDisplay/components/GetSequenceDialog/GetSequenceDialog.d.ts +0 -11
  186. package/dist/LinearMafDisplay/components/GetSequenceDialog/GetSequenceDialog.js +0 -97
  187. package/dist/LinearMafDisplay/components/GetSequenceDialog/GetSequenceDialog.js.map +0 -1
  188. package/dist/LinearMafDisplay/components/util.d.ts +0 -1
  189. package/dist/LinearMafDisplay/components/util.js +0 -8
  190. package/dist/LinearMafDisplay/components/util.js.map +0 -1
  191. package/dist/LinearMafRenderer/components/util.d.ts +0 -1
  192. package/dist/LinearMafRenderer/components/util.js +0 -13
  193. package/dist/LinearMafRenderer/components/util.js.map +0 -1
  194. package/dist/util/fetchSequences.d.ts +0 -18
  195. package/dist/util/fetchSequences.js +0 -39
  196. package/dist/util/fetchSequences.js.map +0 -1
  197. package/dist/util/useSequences.d.ts +0 -21
  198. package/dist/util/useSequences.js +0 -64
  199. package/dist/util/useSequences.js.map +0 -1
  200. package/src/LinearMafDisplay/components/GetSequenceDialog/GetSequenceDialog.tsx +0 -175
  201. package/src/LinearMafDisplay/components/util.ts +0 -7
  202. package/src/LinearMafRenderer/components/util.ts +0 -13
  203. package/src/util/fetchSequences.ts +0 -57
  204. package/src/util/useSequences.ts +0 -90
@@ -1,14 +1,22 @@
1
1
  import { lazy } from 'react';
2
2
  import { ConfigurationReference, getConf } from '@jbrowse/core/configuration';
3
- import { getEnv, getSession, max, measureText } from '@jbrowse/core/util';
3
+ import { getContainingTrack, getContainingView, getEnv, getSession, max, measureText, } from '@jbrowse/core/util';
4
4
  import { getRpcSessionId } from '@jbrowse/core/util/tracks';
5
+ import { addDisposer, isAlive, types } from '@jbrowse/mobx-state-tree';
5
6
  import { ascending } from 'd3-array';
6
7
  import { cluster, hierarchy } from 'd3-hierarchy';
7
8
  import deepEqual from 'fast-deep-equal';
8
9
  import { autorun } from 'mobx';
9
- import { addDisposer, isAlive, types } from 'mobx-state-tree';
10
- import { maxLength, setBrLength } from './util';
10
+ import { computeNodeDescendantNames, maxLength, setBrLength } from './util';
11
11
  import { normalize } from '../util';
12
+ const defaultRowHeight = 15;
13
+ const defaultRowProportion = 0.8;
14
+ const defaultShowAllLetters = false;
15
+ const defaultMismatchRendering = true;
16
+ const defaultShowBranchLen = false;
17
+ const defaultTreeAreaWidth = 80;
18
+ const defaultShowAsUpperCase = true;
19
+ const defaultShowSidebar = true;
12
20
  const SetRowHeightDialog = lazy(() => import('./components/SetRowHeightDialog/SetRowHeightDialog'));
13
21
  /**
14
22
  * #stateModel LinearMafDisplay
@@ -30,31 +38,35 @@ export default function stateModelFactory(configSchema, pluginManager) {
30
38
  /**
31
39
  * #property
32
40
  */
33
- rowHeight: 15,
41
+ rowHeight: defaultRowHeight,
34
42
  /**
35
43
  * #property
36
44
  */
37
- rowProportion: 0.8,
45
+ rowProportion: defaultRowProportion,
38
46
  /**
39
47
  * #property
40
48
  */
41
- showAllLetters: false,
49
+ showAllLetters: defaultShowAllLetters,
42
50
  /**
43
51
  * #property
44
52
  */
45
- mismatchRendering: true,
53
+ mismatchRendering: defaultMismatchRendering,
46
54
  /**
47
55
  * #property
48
56
  */
49
- showBranchLen: false,
57
+ showBranchLen: defaultShowBranchLen,
50
58
  /**
51
59
  * #property
52
60
  */
53
- treeAreaWidth: 80,
61
+ treeAreaWidth: defaultTreeAreaWidth,
54
62
  /**
55
63
  * #property
56
64
  */
57
- showAsUpperCase: true,
65
+ showAsUpperCase: defaultShowAsUpperCase,
66
+ /**
67
+ * #property
68
+ */
69
+ showSidebar: defaultShowSidebar,
58
70
  }))
59
71
  .volatile(() => ({
60
72
  /**
@@ -73,6 +85,14 @@ export default function stateModelFactory(configSchema, pluginManager) {
73
85
  * #volatile
74
86
  */
75
87
  volatileTree: undefined,
88
+ /**
89
+ * #volatile
90
+ */
91
+ highlightedRowNames: undefined,
92
+ /**
93
+ * #volatile
94
+ */
95
+ hoveredTreeNode: undefined,
76
96
  }))
77
97
  .actions(self => ({
78
98
  /**
@@ -108,7 +128,7 @@ export default function stateModelFactory(configSchema, pluginManager) {
108
128
  /**
109
129
  * #action
110
130
  */
111
- setSamples({ samples, tree }) {
131
+ setSamples({ samples, tree, }) {
112
132
  if (!deepEqual(samples, self.volatileSamples)) {
113
133
  self.volatileSamples = samples;
114
134
  }
@@ -122,6 +142,49 @@ export default function stateModelFactory(configSchema, pluginManager) {
122
142
  setShowAsUpperCase(arg) {
123
143
  self.showAsUpperCase = arg;
124
144
  },
145
+ /**
146
+ * #action
147
+ */
148
+ setTreeAreaWidth(width) {
149
+ self.treeAreaWidth = width;
150
+ },
151
+ /**
152
+ * #action
153
+ */
154
+ setShowSidebar(arg) {
155
+ self.showSidebar = arg;
156
+ },
157
+ /**
158
+ * #action
159
+ */
160
+ setHighlightedRowNames(names, nodePosition) {
161
+ self.highlightedRowNames = names;
162
+ self.hoveredTreeNode = nodePosition;
163
+ },
164
+ /**
165
+ * #action
166
+ */
167
+ showInsertionSequenceDialog(insertionData) {
168
+ const { sequence, sampleLabel, chr, pos } = insertionData;
169
+ const session = getSession(self);
170
+ const featureWidget = session.addWidget('BaseFeatureWidget', 'baseFeature', {
171
+ featureData: {
172
+ uniqueId: `insertion-${chr}-${pos}-${sampleLabel}`,
173
+ type: 'insertion',
174
+ refName: chr,
175
+ start: pos,
176
+ end: pos + 1,
177
+ sample: sampleLabel,
178
+ insertionLength: sequence.length,
179
+ sequence: self.showAsUpperCase
180
+ ? sequence.toUpperCase()
181
+ : sequence.toLowerCase(),
182
+ },
183
+ view: getContainingView(self),
184
+ track: getContainingTrack(self),
185
+ });
186
+ session.showWidget(featureWidget);
187
+ },
125
188
  }))
126
189
  .views(self => ({
127
190
  /**
@@ -149,8 +212,7 @@ export default function stateModelFactory(configSchema, pluginManager) {
149
212
  get root() {
150
213
  return self.volatileTree
151
214
  ? hierarchy(self.volatileTree, d => d.children)
152
- // todo: investigate whether needed, typescript says children always true
153
- .sum(d => (d.children ? 0 : 1))
215
+ .sum(d => (d.children?.length ? 0 : 1))
154
216
  .sort((a, b) => ascending(a.data.length || 1, b.data.length || 1))
155
217
  : undefined;
156
218
  },
@@ -164,11 +226,18 @@ export default function stateModelFactory(configSchema, pluginManager) {
164
226
  const r = self.root;
165
227
  if (r) {
166
228
  const width = self.treeAreaWidth;
229
+ // Use totalHeight - rowHeight so leaves are centered in rows
230
+ // (first leaf at rowHeight/2, last at totalHeight - rowHeight/2)
167
231
  const clust = cluster()
168
- .size([this.totalHeight, width])
232
+ .size([this.totalHeight - self.rowHeight, width])
169
233
  .separation(() => 1);
170
234
  clust(r);
171
- setBrLength(r, (r.data.length = 0), width / maxLength(r));
235
+ // Offset all nodes by rowHeight/2 to center in rows
236
+ for (const node of r.descendants()) {
237
+ node.x = node.x + self.rowHeight / 2;
238
+ }
239
+ r.data.length = 0;
240
+ setBrLength(r, 0, width / maxLength(r));
172
241
  return r;
173
242
  }
174
243
  else {
@@ -205,6 +274,22 @@ export default function stateModelFactory(configSchema, pluginManager) {
205
274
  get leaves() {
206
275
  return self.root?.leaves();
207
276
  },
277
+ /**
278
+ * #getter
279
+ */
280
+ get leafMap() {
281
+ return new Map(this.leaves?.map(leaf => [leaf.data.name, leaf]));
282
+ },
283
+ /**
284
+ * #getter
285
+ * Precomputed map from hierarchy node to its descendant leaf names
286
+ */
287
+ get nodeDescendantNames() {
288
+ if (this.hierarchy) {
289
+ return computeNodeDescendantNames(this.hierarchy);
290
+ }
291
+ return new Map();
292
+ },
208
293
  /**
209
294
  * #getter
210
295
  */
@@ -233,7 +318,7 @@ export default function stateModelFactory(configSchema, pluginManager) {
233
318
  const s = superRenderProps();
234
319
  return {
235
320
  ...s,
236
- notReady: (!self.volatileSamples && !self.volatileTree) || super.notReady,
321
+ notReady: (!self.volatileSamples && !self.volatileTree) || s.notReady,
237
322
  config: rendererConfig,
238
323
  samples,
239
324
  rowHeight,
@@ -305,11 +390,41 @@ export default function stateModelFactory(configSchema, pluginManager) {
305
390
  self.setMismatchRendering(!self.mismatchRendering);
306
391
  },
307
392
  },
393
+ {
394
+ label: 'Show sidebar',
395
+ type: 'checkbox',
396
+ checked: self.showSidebar,
397
+ onClick: () => {
398
+ self.setShowSidebar(!self.showSidebar);
399
+ },
400
+ },
308
401
  ];
309
402
  },
310
403
  };
311
404
  })
312
405
  .views(self => ({
406
+ /**
407
+ * #getter
408
+ * Get highlight regions from connected MSA views
409
+ */
410
+ get msaHighlights() {
411
+ const session = getSession(self);
412
+ const view = getContainingView(self);
413
+ const highlights = [];
414
+ // Find MSA views that are connected to our parent view
415
+ for (const v of session.views) {
416
+ if (v.type === 'MsaView' &&
417
+ v.connectedViewId === view.id) {
418
+ const msaView = v;
419
+ if (msaView.connectedHighlights) {
420
+ for (const h of msaView.connectedHighlights) {
421
+ highlights.push(h);
422
+ }
423
+ }
424
+ }
425
+ }
426
+ return highlights;
427
+ },
313
428
  /**
314
429
  * #getter
315
430
  */
@@ -331,6 +446,12 @@ export default function stateModelFactory(configSchema, pluginManager) {
331
446
  ?.map(s => measureText(s.label, this.svgFontSize))
332
447
  .map(width => (this.canDisplayLabel ? width : minWidth)) || [], 0);
333
448
  },
449
+ /**
450
+ * #getter
451
+ */
452
+ get sidebarWidth() {
453
+ return self.showSidebar ? this.labelWidth + 5 + self.treeWidth : 0;
454
+ },
334
455
  }))
335
456
  .actions(self => ({
336
457
  afterCreate() {
@@ -343,7 +464,7 @@ export default function stateModelFactory(configSchema, pluginManager) {
343
464
  adapterConfig: self.adapterConfig,
344
465
  statusCallback: (message) => {
345
466
  if (isAlive(self)) {
346
- self.setMessage(message);
467
+ self.setStatusMessage(message);
347
468
  }
348
469
  },
349
470
  })));
@@ -367,6 +488,24 @@ export default function stateModelFactory(configSchema, pluginManager) {
367
488
  return renderSvg(self, opts, superRenderSvg);
368
489
  },
369
490
  };
491
+ })
492
+ .postProcessSnapshot(snap => {
493
+ const { rowHeight, rowProportion, showAllLetters, mismatchRendering, showBranchLen, treeAreaWidth, showAsUpperCase, showSidebar, ...rest } = snap;
494
+ return {
495
+ ...rest,
496
+ ...(rowHeight !== defaultRowHeight ? { rowHeight } : {}),
497
+ ...(rowProportion !== defaultRowProportion ? { rowProportion } : {}),
498
+ ...(showAllLetters !== defaultShowAllLetters ? { showAllLetters } : {}),
499
+ ...(mismatchRendering !== defaultMismatchRendering
500
+ ? { mismatchRendering }
501
+ : {}),
502
+ ...(showBranchLen !== defaultShowBranchLen ? { showBranchLen } : {}),
503
+ ...(treeAreaWidth !== defaultTreeAreaWidth ? { treeAreaWidth } : {}),
504
+ ...(showAsUpperCase !== defaultShowAsUpperCase
505
+ ? { showAsUpperCase }
506
+ : {}),
507
+ ...(showSidebar !== defaultShowSidebar ? { showSidebar } : {}),
508
+ };
370
509
  });
371
510
  }
372
511
  //# sourceMappingURL=stateModel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stateModel.js","sourceRoot":"","sources":["../../src/LinearMafDisplay/stateModel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stateModel.js","sourceRoot":"","sources":["../../src/LinearMafDisplay/stateModel.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  export interface NodeWithIds {
2
2
  id: string;
3
3
  name: string;
4
- children: NodeWithIds[];
4
+ children?: NodeWithIds[];
5
5
  length?: number;
6
6
  noTree?: boolean;
7
7
  }
8
8
  export interface NodeWithIdsAndLength {
9
9
  id: string;
10
10
  name: string;
11
- children: NodeWithIdsAndLength[];
11
+ children?: NodeWithIdsAndLength[];
12
12
  noTree?: boolean;
13
13
  length: number;
14
14
  }
@@ -2,9 +2,12 @@ import type { NodeWithIds } from './types';
2
2
  import type { HierarchyNode } from 'd3-hierarchy';
3
3
  export interface HoveredInfo {
4
4
  sampleId: string;
5
+ sampleLabel: string;
5
6
  pos: number;
6
7
  base: string;
7
8
  chr: string;
9
+ isInsertion?: boolean;
10
+ isLargeInsertion?: boolean;
8
11
  [key: string]: unknown;
9
12
  }
10
13
  export interface GenomicPosition {
@@ -22,3 +25,6 @@ export interface GenomicPosition {
22
25
  export declare function generateTooltipContent(hoveredInfo: HoveredInfo | undefined, p1: GenomicPosition | undefined, p2: GenomicPosition): string;
23
26
  export declare function maxLength(d: HierarchyNode<NodeWithIds>): number;
24
27
  export declare function setBrLength(d: HierarchyNode<NodeWithIds>, y0: number, k: number): void;
28
+ export declare function computeNodeDescendantNames<T extends {
29
+ name: string;
30
+ }>(root: HierarchyNode<T>): Map<HierarchyNode<T>, string[]>;
@@ -18,12 +18,13 @@ export function generateTooltipContent(hoveredInfo, p1, p2) {
18
18
  // Single position mode
19
19
  contentLines.push(`Ref: ${p2.refName}:${toLocale(p2.coord)}`);
20
20
  if (hoveredInfo) {
21
- const { base, sampleId, pos, chr } = hoveredInfo;
21
+ const { base, sampleLabel, pos, chr, isInsertion } = hoveredInfo;
22
22
  const thresh = 20;
23
23
  const len = base.length;
24
24
  const lengthSuffix = len > 1 ? ` ${len}bp` : '';
25
25
  const baseDisplay = base.length > thresh ? base.slice(0, thresh) + '...' : base;
26
- contentLines.push(`Alt ${sampleId}: ${chr}:${pos.toLocaleString('en-US')} (${baseDisplay}${lengthSuffix})`);
26
+ const insertionLabel = isInsertion ? ' Insertion' : '';
27
+ contentLines.push(`Alt ${sampleLabel}: ${chr}:${pos.toLocaleString('en-US')} (${baseDisplay}${lengthSuffix}${insertionLabel})`);
27
28
  }
28
29
  }
29
30
  return contentLines.filter(line => !!line).join('<br/>');
@@ -34,12 +35,33 @@ export function maxLength(d) {
34
35
  }
35
36
  // basically same as setRadius from https://observablehq.com/@d3/tree-of-life
36
37
  export function setBrLength(d, y0, k) {
38
+ const newY0 = y0 + Math.max(d.data.length || 0, 0);
37
39
  // @ts-expect-error
38
- d.len = (y0 += Math.max(d.data.length || 0, 0)) * k;
40
+ d.len = newY0 * k;
39
41
  if (d.children) {
40
- d.children.forEach(d => {
41
- setBrLength(d, y0, k);
42
- });
42
+ for (const child of d.children) {
43
+ setBrLength(child, newY0, k);
44
+ }
45
+ }
46
+ }
47
+ export function computeNodeDescendantNames(root) {
48
+ const map = new Map();
49
+ function visit(node) {
50
+ if (!node.children || node.children.length === 0) {
51
+ const names = [node.data.name];
52
+ map.set(node, names);
53
+ return names;
54
+ }
55
+ const names = [];
56
+ for (const child of node.children) {
57
+ for (const name of visit(child)) {
58
+ names.push(name);
59
+ }
60
+ }
61
+ map.set(node, names);
62
+ return names;
43
63
  }
64
+ visit(root);
65
+ return map;
44
66
  }
45
67
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/LinearMafDisplay/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAkB9B;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAAoC,EACpC,EAA+B,EAC/B,EAAmB;IAEnB,MAAM,YAAY,GAAa,EAAE,CAAA;IAEjC,IAAI,EAAE,EAAE,CAAC;QACP,uBAAuB;QACvB,YAAY,CAAC,IAAI,CACf,UAAU,EAAE,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAC5C,QAAQ,EAAE,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAC1C,WAAW,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAC5D,CAAA;IACH,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAE7D,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,WAAW,CAAA;YAChD,MAAM,MAAM,GAAG,EAAE,CAAA;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAA;YACvB,MAAM,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;YAC/C,MAAM,WAAW,GACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;YAE7D,YAAY,CAAC,IAAI,CACf,OAAO,QAAQ,KAAK,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,WAAW,GAAG,YAAY,GAAG,CACzF,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC1D,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,SAAS,CAAC,CAA6B;IACrD,OAAO,CACL,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1E,CAAA;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CACzB,CAA6B,EAC7B,EAAU,EACV,CAAS;IAET,mBAAmB;IACnB,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAEnD,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACf,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACrB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/LinearMafDisplay/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAqB9B;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAAoC,EACpC,EAA+B,EAC/B,EAAmB;IAEnB,MAAM,YAAY,GAAa,EAAE,CAAA;IAEjC,IAAI,EAAE,EAAE,CAAC;QACP,uBAAuB;QACvB,YAAY,CAAC,IAAI,CACf,UAAU,EAAE,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAC5C,QAAQ,EAAE,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAC1C,WAAW,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAC5D,CAAA;IACH,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAE7D,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,WAAW,CAAA;YAChE,MAAM,MAAM,GAAG,EAAE,CAAA;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAA;YACvB,MAAM,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;YAC/C,MAAM,WAAW,GACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;YAC7D,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;YAEtD,YAAY,CAAC,IAAI,CACf,OAAO,WAAW,KAAK,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,WAAW,GAAG,YAAY,GAAG,cAAc,GAAG,CAC7G,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC1D,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,SAAS,CAAC,CAA6B;IACrD,OAAO,CACL,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1E,CAAA;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CACzB,CAA6B,EAC7B,EAAU,EACV,CAAS;IAET,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAClD,mBAAmB;IACnB,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,CAAA;IAEjB,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/B,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,IAAsB;IAEtB,MAAM,GAAG,GAAG,IAAI,GAAG,EAA8B,CAAA;IACjD,SAAS,KAAK,CAAC,IAAsB;QACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC9B,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACpB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACpB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAA;IACX,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1,10 +1,7 @@
1
1
  import { FeatureRendererType } from '@jbrowse/core/pluggableElementTypes';
2
2
  import { RenderArgsDeserialized } from '@jbrowse/core/pluggableElementTypes/renderers/BoxRendererType';
3
3
  import { Region } from '@jbrowse/core/util';
4
- interface Sample {
5
- id: string;
6
- color?: string;
7
- }
4
+ import type { Sample } from '../LinearMafDisplay/types';
8
5
  interface RenderArgs extends RenderArgsDeserialized {
9
6
  samples: Sample[];
10
7
  rowHeight: number;
@@ -27,9 +24,9 @@ export default class LinearMafRenderer extends FeatureRendererType {
27
24
  width: number;
28
25
  height: number;
29
26
  containsNoTransferables: boolean;
30
- samples: import("./rendering").Sample[];
31
27
  flatbush: ArrayBufferLike;
32
28
  items: import("./rendering").RenderedBase[];
29
+ samples: Sample[];
33
30
  canvasRecordedData: Record<string, unknown>;
34
31
  reactElement?: React.ReactElement;
35
32
  html?: string;
@@ -38,10 +35,10 @@ export default class LinearMafRenderer extends FeatureRendererType {
38
35
  width: number;
39
36
  height: number;
40
37
  containsNoTransferables: boolean;
41
- samples: import("./rendering").Sample[];
42
38
  flatbush: ArrayBufferLike;
43
39
  items: import("./rendering").RenderedBase[];
44
- imageData: any;
40
+ samples: Sample[];
41
+ imageData: ImageBitmap;
45
42
  reactElement?: React.ReactElement;
46
43
  html?: string;
47
44
  } | {
@@ -49,11 +46,47 @@ export default class LinearMafRenderer extends FeatureRendererType {
49
46
  width: number;
50
47
  height: number;
51
48
  containsNoTransferables: boolean;
52
- samples: import("./rendering").Sample[];
53
49
  flatbush: ArrayBufferLike;
54
50
  items: import("./rendering").RenderedBase[];
55
- reactElement: React.ReactElement;
56
- html?: string;
51
+ samples: Sample[];
52
+ html: string;
53
+ reactElement?: React.ReactElement;
54
+ } | {
55
+ features: Map<any, any>;
56
+ width: number;
57
+ height: number;
58
+ containsNoTransferables: boolean;
59
+ flatbush: ArrayBufferLike;
60
+ items: import("./rendering").RenderedBase[];
61
+ samples: Sample[];
62
+ canvasRecordedData: Record<string, unknown>;
63
+ __rpcResult: true;
64
+ value: unknown;
65
+ transferables: Transferable[];
66
+ } | {
67
+ features: Map<any, any>;
68
+ width: number;
69
+ height: number;
70
+ containsNoTransferables: boolean;
71
+ flatbush: ArrayBufferLike;
72
+ items: import("./rendering").RenderedBase[];
73
+ samples: Sample[];
74
+ imageData: ImageBitmap;
75
+ __rpcResult: true;
76
+ value: unknown;
77
+ transferables: Transferable[];
78
+ } | {
79
+ features: Map<any, any>;
80
+ width: number;
81
+ height: number;
82
+ containsNoTransferables: boolean;
83
+ flatbush: ArrayBufferLike;
84
+ items: import("./rendering").RenderedBase[];
85
+ samples: Sample[];
86
+ html: string;
87
+ __rpcResult: true;
88
+ value: unknown;
89
+ transferables: Transferable[];
57
90
  }>;
58
91
  }
59
92
  export {};
@@ -6,7 +6,7 @@ export default class LinearMafRenderer extends FeatureRendererType {
6
6
  const { start, end } = region;
7
7
  const bpExpansion = 1;
8
8
  return {
9
- // xref https://github.com/mobxjs/mobx-state-tree/issues/1524 for Omit
9
+ // xref https://github.com/mobxjs/@jbrowse/mobx-state-tree/issues/1524 for Omit
10
10
  ...region,
11
11
  start: Math.floor(Math.max(start - bpExpansion, 0)),
12
12
  end: Math.ceil(end + bpExpansion),
@@ -1 +1 @@
1
- {"version":3,"file":"LinearMafRenderer.js","sourceRoot":"","sources":["../../src/LinearMafRenderer/LinearMafRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AAEzE,OAAO,EAEL,sBAAsB,EACtB,YAAY,GACb,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAgB/C,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,mBAAmB;IAChE,iBAAiB,CAAC,MAAc;QAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAA;QAC7B,MAAM,WAAW,GAAG,CAAC,CAAA;QAErB,OAAO;YACL,sEAAsE;YACtE,GAAI,MAAsC;YAC1C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC;YACnD,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC;SAClC,CAAA;IACH,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,WAAuB;QAClC,MAAM,EACJ,cAAc,GAAG,GAAG,EAAE,GAAE,CAAC,EACzB,OAAO,EACP,OAAO,EACP,OAAO,EACP,SAAS,GACV,GAAG,WAAW,CAAA;QACf,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,GAAG,CAAA;QAC/C,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACpD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,qBAAqB,EAAE,cAAc,EAAE,GAAG,EAAE,CACzE,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE;YACvD,OAAO,aAAa,CAAC;gBACnB,GAAG;gBACH,UAAU,EAAE;oBACV,GAAG,WAAW;oBACd,QAAQ;iBACT;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CACH,CAAA;QACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;YACjC,GAAG,WAAW;YACd,GAAG,GAAG;YACN,KAAK;YACL,MAAM;SACP,CAAC,CAAA;QACF,OAAO;YACL,GAAG,OAAO;YACV,GAAG,GAAG;YACN,QAAQ,EAAE,IAAI,GAAG,EAAE;YACnB,KAAK;YACL,MAAM;YACN,uBAAuB,EAAE,IAAI;SAC9B,CAAA;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"LinearMafRenderer.js","sourceRoot":"","sources":["../../src/LinearMafRenderer/LinearMafRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AAEzE,OAAO,EAEL,sBAAsB,EACtB,YAAY,GACb,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAc/C,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,mBAAmB;IAChE,iBAAiB,CAAC,MAAc;QAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAA;QAC7B,MAAM,WAAW,GAAG,CAAC,CAAA;QAErB,OAAO;YACL,+EAA+E;YAC/E,GAAI,MAAsC;YAC1C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC;YACnD,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC;SAClC,CAAA;IACH,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,WAAuB;QAClC,MAAM,EACJ,cAAc,GAAG,GAAG,EAAE,GAAE,CAAC,EACzB,OAAO,EACP,OAAO,EACP,OAAO,EACP,SAAS,GACV,GAAG,WAAW,CAAA;QACf,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,GAAG,CAAA;QAC/C,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACpD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,qBAAqB,EAAE,cAAc,EAAE,GAAG,EAAE,CACzE,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE;YACvD,OAAO,aAAa,CAAC;gBACnB,GAAG;gBACH,UAAU,EAAE;oBACV,GAAG,WAAW;oBACd,QAAQ;iBACT;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CACH,CAAA;QACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;YACjC,GAAG,WAAW;YACd,GAAG,GAAG;YACN,KAAK;YACL,MAAM;SACP,CAAC,CAAA;QACF,OAAO;YACL,GAAG,OAAO;YACV,GAAG,GAAG;YACN,QAAQ,EAAE,IAAI,GAAG,EAAE;YACnB,KAAK;YACL,MAAM;YACN,uBAAuB,EAAE,IAAI;SAC9B,CAAA;IACH,CAAC;CACF"}
@@ -1,12 +1,21 @@
1
1
  import React from 'react';
2
- import { Sample } from '../../LinearMafDisplay/types';
3
- import { RenderedBase } from '../rendering';
4
- type SerializedRBush = any;
2
+ import type { Sample } from '../../LinearMafDisplay/types';
3
+ import type { RenderedBase } from '../rendering';
4
+ interface DisplayModel {
5
+ setHoveredInfo?: (info: Record<string, unknown> | undefined) => void;
6
+ setHighlightedRowNames?: (names: string[] | undefined) => void;
7
+ showInsertionSequenceDialog?: (data: {
8
+ sequence: string;
9
+ sampleLabel: string;
10
+ chr: string;
11
+ pos: number;
12
+ }) => void;
13
+ }
5
14
  declare const LinearMafRendering: (props: {
6
15
  width: number;
7
16
  height: number;
8
- displayModel: any;
9
- flatbush: SerializedRBush;
17
+ displayModel: DisplayModel;
18
+ flatbush: ArrayBuffer;
10
19
  items: RenderedBase[];
11
20
  samples: Sample[];
12
21
  }) => React.JSX.Element;
@@ -1,41 +1,61 @@
1
- import React, { useMemo, useRef } from 'react';
1
+ import React, { useCallback, useMemo, useRef, useState } from 'react';
2
2
  import { PrerenderedCanvas } from '@jbrowse/core/ui';
3
3
  import Flatbush from 'flatbush';
4
4
  import { observer } from 'mobx-react';
5
5
  const LinearMafRendering = observer(function (props) {
6
6
  const { items, displayModel, height, samples, flatbush } = props;
7
7
  const ref = useRef(null);
8
- const rbush2 = useMemo(() => Flatbush.from(flatbush), [flatbush]);
9
- function getFeatureUnderMouse(eventClientX, eventClientY) {
8
+ const flatbush2 = useMemo(() => Flatbush.from(flatbush), [flatbush]);
9
+ const [isOverInsertion, setIsOverInsertion] = useState(false);
10
+ const getFeatureUnderMouse = useCallback((eventClientX, eventClientY) => {
10
11
  let offsetX = 0;
11
12
  let offsetY = 0;
12
13
  if (ref.current) {
13
- const r = ref.current.getBoundingClientRect();
14
- offsetX = eventClientX - r.left;
15
- offsetY = eventClientY - r.top;
14
+ const rect = ref.current.getBoundingClientRect();
15
+ offsetX = eventClientX - rect.left;
16
+ offsetY = eventClientY - rect.top;
16
17
  }
17
- const x = rbush2.search(offsetX, offsetY, offsetX + 1, offsetY + 1);
18
- if (x.length) {
19
- const elt = x.find(idx => items[idx]?.isInsertion);
20
- const r = elt !== undefined ? items[elt] : items[x[0]];
21
- const s = samples[r.sampleId];
22
- return {
23
- ...r,
24
- sampleId: s?.label || s?.id || 'unknown',
25
- };
18
+ const hits = flatbush2.search(offsetX, offsetY, offsetX + 1, offsetY + 1);
19
+ if (hits.length === 0) {
20
+ return undefined;
26
21
  }
27
- else {
22
+ const insertionHit = hits.find(idx => items[idx]?.isInsertion);
23
+ const hitIdx = insertionHit ?? hits[0];
24
+ const item = hitIdx !== undefined ? items[hitIdx] : undefined;
25
+ if (!item) {
28
26
  return undefined;
29
27
  }
30
- }
31
- return (React.createElement("div", { ref: ref, onMouseMove: e => displayModel.setHoveredInfo?.(getFeatureUnderMouse(e.clientX, e.clientY)), onMouseLeave: () => {
32
- displayModel.setHoveredInfo?.(undefined);
33
- }, onMouseOut: () => {
28
+ const sample = samples[item.rowIndex];
29
+ return {
30
+ ...item,
31
+ sampleId: sample?.id ?? 'unknown',
32
+ sampleLabel: sample?.label || sample?.id || 'unknown',
33
+ };
34
+ }, [flatbush2, items, samples]);
35
+ return (React.createElement("div", { ref: ref, onClick: e => {
36
+ const feature = getFeatureUnderMouse(e.clientX, e.clientY);
37
+ if (feature?.isInsertion) {
38
+ displayModel.showInsertionSequenceDialog?.({
39
+ sequence: feature.base,
40
+ sampleLabel: feature.sampleLabel,
41
+ chr: feature.chr,
42
+ pos: feature.pos,
43
+ });
44
+ }
45
+ }, onMouseMove: e => {
46
+ const feature = getFeatureUnderMouse(e.clientX, e.clientY);
47
+ displayModel.setHoveredInfo?.(feature);
48
+ displayModel.setHighlightedRowNames?.(feature?.sampleId ? [feature.sampleId] : undefined);
49
+ setIsOverInsertion(!!feature?.isInsertion);
50
+ }, onMouseLeave: () => {
34
51
  displayModel.setHoveredInfo?.(undefined);
52
+ displayModel.setHighlightedRowNames?.(undefined);
53
+ setIsOverInsertion(false);
35
54
  }, style: {
36
55
  overflow: 'visible',
37
56
  position: 'relative',
38
57
  height,
58
+ cursor: isOverInsertion ? 'pointer' : 'default',
39
59
  } },
40
60
  React.createElement(PrerenderedCanvas, { ...props, style: {
41
61
  position: 'absolute',