jbrowse-plugin-protein3d 0.0.2

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 (210) hide show
  1. package/README.md +3 -0
  2. package/dist/AddHighlightModel/GenomeMouseoverHighlight.d.ts +6 -0
  3. package/dist/AddHighlightModel/GenomeMouseoverHighlight.js +24 -0
  4. package/dist/AddHighlightModel/GenomeMouseoverHighlight.js.map +1 -0
  5. package/dist/AddHighlightModel/Highlight.d.ts +10 -0
  6. package/dist/AddHighlightModel/Highlight.js +24 -0
  7. package/dist/AddHighlightModel/Highlight.js.map +1 -0
  8. package/dist/AddHighlightModel/HighlightComponents.d.ts +7 -0
  9. package/dist/AddHighlightModel/HighlightComponents.js +14 -0
  10. package/dist/AddHighlightModel/HighlightComponents.js.map +1 -0
  11. package/dist/AddHighlightModel/ProteinToGenomeClickHighlight.d.ts +7 -0
  12. package/dist/AddHighlightModel/ProteinToGenomeClickHighlight.js +13 -0
  13. package/dist/AddHighlightModel/ProteinToGenomeClickHighlight.js.map +1 -0
  14. package/dist/AddHighlightModel/ProteinToGenomeHoverHighlight.d.ts +7 -0
  15. package/dist/AddHighlightModel/ProteinToGenomeHoverHighlight.js +13 -0
  16. package/dist/AddHighlightModel/ProteinToGenomeHoverHighlight.js.map +1 -0
  17. package/dist/AddHighlightModel/index.d.ts +2 -0
  18. package/dist/AddHighlightModel/index.js +14 -0
  19. package/dist/AddHighlightModel/index.js.map +1 -0
  20. package/dist/AddHighlightModel/util.d.ts +9 -0
  21. package/dist/AddHighlightModel/util.js +17 -0
  22. package/dist/AddHighlightModel/util.js.map +1 -0
  23. package/dist/LaunchProteinView/calculateProteinSequence.d.ts +28 -0
  24. package/dist/LaunchProteinView/calculateProteinSequence.js +77 -0
  25. package/dist/LaunchProteinView/calculateProteinSequence.js.map +1 -0
  26. package/dist/LaunchProteinView/components/AlphaFoldDBSearch.d.ts +8 -0
  27. package/dist/LaunchProteinView/components/AlphaFoldDBSearch.js +71 -0
  28. package/dist/LaunchProteinView/components/AlphaFoldDBSearch.js.map +1 -0
  29. package/dist/LaunchProteinView/components/AlphaFoldDBSearchStatus.d.ts +8 -0
  30. package/dist/LaunchProteinView/components/AlphaFoldDBSearchStatus.js +19 -0
  31. package/dist/LaunchProteinView/components/AlphaFoldDBSearchStatus.js.map +1 -0
  32. package/dist/LaunchProteinView/components/HelpButton.d.ts +2 -0
  33. package/dist/LaunchProteinView/components/HelpButton.js +15 -0
  34. package/dist/LaunchProteinView/components/HelpButton.js.map +1 -0
  35. package/dist/LaunchProteinView/components/HelpDialog.d.ts +4 -0
  36. package/dist/LaunchProteinView/components/HelpDialog.js +16 -0
  37. package/dist/LaunchProteinView/components/HelpDialog.js.map +1 -0
  38. package/dist/LaunchProteinView/components/LaunchProteinViewDialog.d.ts +7 -0
  39. package/dist/LaunchProteinView/components/LaunchProteinViewDialog.js +23 -0
  40. package/dist/LaunchProteinView/components/LaunchProteinViewDialog.js.map +1 -0
  41. package/dist/LaunchProteinView/components/PreLoadedStructureMapping.d.ts +8 -0
  42. package/dist/LaunchProteinView/components/PreLoadedStructureMapping.js +72 -0
  43. package/dist/LaunchProteinView/components/PreLoadedStructureMapping.js.map +1 -0
  44. package/dist/LaunchProteinView/components/TabPanel.d.ts +6 -0
  45. package/dist/LaunchProteinView/components/TabPanel.js +6 -0
  46. package/dist/LaunchProteinView/components/TabPanel.js.map +1 -0
  47. package/dist/LaunchProteinView/components/TranscriptSelector.d.ts +9 -0
  48. package/dist/LaunchProteinView/components/TranscriptSelector.js +28 -0
  49. package/dist/LaunchProteinView/components/TranscriptSelector.js.map +1 -0
  50. package/dist/LaunchProteinView/components/UserProvidedStructure.d.ts +8 -0
  51. package/dist/LaunchProteinView/components/UserProvidedStructure.js +118 -0
  52. package/dist/LaunchProteinView/components/UserProvidedStructure.js.map +1 -0
  53. package/dist/LaunchProteinView/components/useCheckAlphaFoldDBExistence.d.ts +7 -0
  54. package/dist/LaunchProteinView/components/useCheckAlphaFoldDBExistence.js +26 -0
  55. package/dist/LaunchProteinView/components/useCheckAlphaFoldDBExistence.js.map +1 -0
  56. package/dist/LaunchProteinView/index.d.ts +2 -0
  57. package/dist/LaunchProteinView/index.js +45 -0
  58. package/dist/LaunchProteinView/index.js.map +1 -0
  59. package/dist/LaunchProteinView/useMyGeneInfo.d.ts +7 -0
  60. package/dist/LaunchProteinView/useMyGeneInfo.js +29 -0
  61. package/dist/LaunchProteinView/useMyGeneInfo.js.map +1 -0
  62. package/dist/LaunchProteinView/useProteinSequences.d.ts +10 -0
  63. package/dist/LaunchProteinView/useProteinSequences.js +30 -0
  64. package/dist/LaunchProteinView/useProteinSequences.js.map +1 -0
  65. package/dist/LaunchProteinView/util.d.ts +18 -0
  66. package/dist/LaunchProteinView/util.js +54 -0
  67. package/dist/LaunchProteinView/util.js.map +1 -0
  68. package/dist/ProteinModelSessionExtension.d.ts +11 -0
  69. package/dist/ProteinModelSessionExtension.js +53 -0
  70. package/dist/ProteinModelSessionExtension.js.map +1 -0
  71. package/dist/ProteinView/clearSelection.d.ts +4 -0
  72. package/dist/ProteinView/clearSelection.js +4 -0
  73. package/dist/ProteinView/clearSelection.js.map +1 -0
  74. package/dist/ProteinView/components/Header.d.ts +6 -0
  75. package/dist/ProteinView/components/Header.js +49 -0
  76. package/dist/ProteinView/components/Header.js.map +1 -0
  77. package/dist/ProteinView/components/ProteinAlignment.d.ts +6 -0
  78. package/dist/ProteinView/components/ProteinAlignment.js +62 -0
  79. package/dist/ProteinView/components/ProteinAlignment.js.map +1 -0
  80. package/dist/ProteinView/components/ProteinAlignmentHelpButton.d.ts +5 -0
  81. package/dist/ProteinView/components/ProteinAlignmentHelpButton.js +14 -0
  82. package/dist/ProteinView/components/ProteinAlignmentHelpButton.js.map +1 -0
  83. package/dist/ProteinView/components/ProteinAlignmentHelpDialog.d.ts +4 -0
  84. package/dist/ProteinView/components/ProteinAlignmentHelpDialog.js +20 -0
  85. package/dist/ProteinView/components/ProteinAlignmentHelpDialog.js.map +1 -0
  86. package/dist/ProteinView/components/ProteinView.d.ts +6 -0
  87. package/dist/ProteinView/components/ProteinView.js +79 -0
  88. package/dist/ProteinView/components/ProteinView.js.map +1 -0
  89. package/dist/ProteinView/components/SplitString.d.ts +9 -0
  90. package/dist/ProteinView/components/SplitString.js +11 -0
  91. package/dist/ProteinView/components/SplitString.js.map +1 -0
  92. package/dist/ProteinView/css/molstar.d.ts +2 -0
  93. package/dist/ProteinView/css/molstar.js +3137 -0
  94. package/dist/ProteinView/css/molstar.js.map +1 -0
  95. package/dist/ProteinView/genomeToProtein.d.ts +4 -0
  96. package/dist/ProteinView/genomeToProtein.js +13 -0
  97. package/dist/ProteinView/genomeToProtein.js.map +1 -0
  98. package/dist/ProteinView/highlightResidue.d.ts +7 -0
  99. package/dist/ProteinView/highlightResidue.js +14 -0
  100. package/dist/ProteinView/highlightResidue.js.map +1 -0
  101. package/dist/ProteinView/index.d.ts +2 -0
  102. package/dist/ProteinView/index.js +15 -0
  103. package/dist/ProteinView/index.js.map +1 -0
  104. package/dist/ProteinView/launchRemotePairwiseAlignment.d.ts +14 -0
  105. package/dist/ProteinView/launchRemotePairwiseAlignment.js +72 -0
  106. package/dist/ProteinView/launchRemotePairwiseAlignment.js.map +1 -0
  107. package/dist/ProteinView/loadStructureFromData.d.ts +17 -0
  108. package/dist/ProteinView/loadStructureFromData.js +20 -0
  109. package/dist/ProteinView/loadStructureFromData.js.map +1 -0
  110. package/dist/ProteinView/loadStructureFromURL.d.ts +17 -0
  111. package/dist/ProteinView/loadStructureFromURL.js +17 -0
  112. package/dist/ProteinView/loadStructureFromURL.js.map +1 -0
  113. package/dist/ProteinView/model.d.ts +226 -0
  114. package/dist/ProteinView/model.js +324 -0
  115. package/dist/ProteinView/model.js.map +1 -0
  116. package/dist/ProteinView/proteinAbbreviationMapping.d.ts +7 -0
  117. package/dist/ProteinView/proteinAbbreviationMapping.js +23 -0
  118. package/dist/ProteinView/proteinAbbreviationMapping.js.map +1 -0
  119. package/dist/ProteinView/proteinToGenomeMapping.d.ts +13 -0
  120. package/dist/ProteinView/proteinToGenomeMapping.js +69 -0
  121. package/dist/ProteinView/proteinToGenomeMapping.js.map +1 -0
  122. package/dist/ProteinView/selectResidue.d.ts +7 -0
  123. package/dist/ProteinView/selectResidue.js +10 -0
  124. package/dist/ProteinView/selectResidue.js.map +1 -0
  125. package/dist/ProteinView/useProteinView.d.ts +11 -0
  126. package/dist/ProteinView/useProteinView.js +57 -0
  127. package/dist/ProteinView/useProteinView.js.map +1 -0
  128. package/dist/ProteinView/useProteinViewClickBehavior.d.ts +8 -0
  129. package/dist/ProteinView/useProteinViewClickBehavior.js +34 -0
  130. package/dist/ProteinView/useProteinViewClickBehavior.js.map +1 -0
  131. package/dist/ProteinView/useProteinViewHoverBehavior.d.ts +6 -0
  132. package/dist/ProteinView/useProteinViewHoverBehavior.js +31 -0
  133. package/dist/ProteinView/useProteinViewHoverBehavior.js.map +1 -0
  134. package/dist/ProteinView/util.d.ts +19 -0
  135. package/dist/ProteinView/util.js +32 -0
  136. package/dist/ProteinView/util.js.map +1 -0
  137. package/dist/fetchUtils.d.ts +5 -0
  138. package/dist/fetchUtils.js +23 -0
  139. package/dist/fetchUtils.js.map +1 -0
  140. package/dist/genomeToTranscriptMapping.d.ts +7 -0
  141. package/dist/genomeToTranscriptMapping.js +36 -0
  142. package/dist/genomeToTranscriptMapping.js.map +1 -0
  143. package/dist/index.d.ts +8 -0
  144. package/dist/index.js +26 -0
  145. package/dist/index.js.map +1 -0
  146. package/dist/jbrowse-plugin-protein3d.umd.production.min.js +9298 -0
  147. package/dist/jbrowse-plugin-protein3d.umd.production.min.js.map +7 -0
  148. package/dist/mappings.d.ts +19 -0
  149. package/dist/mappings.js +67 -0
  150. package/dist/mappings.js.map +1 -0
  151. package/dist/mappings.test.d.ts +1 -0
  152. package/dist/mappings.test.js +27 -0
  153. package/dist/mappings.test.js.map +1 -0
  154. package/dist/test_data/gene.d.ts +67 -0
  155. package/dist/test_data/gene.js +603 -0
  156. package/dist/test_data/gene.js.map +1 -0
  157. package/package.json +70 -0
  158. package/src/AddHighlightModel/GenomeMouseoverHighlight.tsx +45 -0
  159. package/src/AddHighlightModel/Highlight.tsx +46 -0
  160. package/src/AddHighlightModel/HighlightComponents.tsx +26 -0
  161. package/src/AddHighlightModel/ProteinToGenomeClickHighlight.tsx +39 -0
  162. package/src/AddHighlightModel/ProteinToGenomeHoverHighlight.tsx +39 -0
  163. package/src/AddHighlightModel/index.tsx +25 -0
  164. package/src/AddHighlightModel/util.ts +17 -0
  165. package/src/LaunchProteinView/calculateProteinSequence.ts +127 -0
  166. package/src/LaunchProteinView/components/AlphaFoldDBSearch.tsx +141 -0
  167. package/src/LaunchProteinView/components/AlphaFoldDBSearchStatus.tsx +44 -0
  168. package/src/LaunchProteinView/components/HelpButton.tsx +23 -0
  169. package/src/LaunchProteinView/components/HelpDialog.tsx +43 -0
  170. package/src/LaunchProteinView/components/LaunchProteinViewDialog.tsx +57 -0
  171. package/src/LaunchProteinView/components/PreLoadedStructureMapping.tsx +153 -0
  172. package/src/LaunchProteinView/components/TabPanel.tsx +19 -0
  173. package/src/LaunchProteinView/components/TranscriptSelector.tsx +54 -0
  174. package/src/LaunchProteinView/components/UserProvidedStructure.tsx +226 -0
  175. package/src/LaunchProteinView/components/useCheckAlphaFoldDBExistence.ts +31 -0
  176. package/src/LaunchProteinView/index.ts +56 -0
  177. package/src/LaunchProteinView/useMyGeneInfo.ts +37 -0
  178. package/src/LaunchProteinView/useProteinSequences.ts +36 -0
  179. package/src/LaunchProteinView/util.ts +74 -0
  180. package/src/ProteinModelSessionExtension.ts +71 -0
  181. package/src/ProteinView/clearSelection.ts +5 -0
  182. package/src/ProteinView/components/Header.tsx +84 -0
  183. package/src/ProteinView/components/ProteinAlignment.tsx +119 -0
  184. package/src/ProteinView/components/ProteinAlignmentHelpButton.tsx +33 -0
  185. package/src/ProteinView/components/ProteinAlignmentHelpDialog.tsx +59 -0
  186. package/src/ProteinView/components/ProteinView.tsx +131 -0
  187. package/src/ProteinView/components/SplitString.tsx +35 -0
  188. package/src/ProteinView/css/molstar.ts +3136 -0
  189. package/src/ProteinView/genomeToProtein.ts +21 -0
  190. package/src/ProteinView/highlightResidue.ts +23 -0
  191. package/src/ProteinView/index.ts +18 -0
  192. package/src/ProteinView/launchRemotePairwiseAlignment.ts +113 -0
  193. package/src/ProteinView/loadStructureFromData.ts +48 -0
  194. package/src/ProteinView/loadStructureFromURL.ts +50 -0
  195. package/src/ProteinView/model.ts +384 -0
  196. package/src/ProteinView/proteinAbbreviationMapping.ts +24 -0
  197. package/src/ProteinView/proteinToGenomeMapping.ts +99 -0
  198. package/src/ProteinView/selectResidue.ts +19 -0
  199. package/src/ProteinView/useProteinView.ts +70 -0
  200. package/src/ProteinView/useProteinViewClickBehavior.ts +48 -0
  201. package/src/ProteinView/useProteinViewHoverBehavior.ts +44 -0
  202. package/src/ProteinView/util.ts +56 -0
  203. package/src/__snapshots__/mappings.test.ts.snap +1351 -0
  204. package/src/declare.d.ts +1 -0
  205. package/src/fetchUtils.ts +30 -0
  206. package/src/genomeToTranscriptMapping.ts +46 -0
  207. package/src/index.ts +32 -0
  208. package/src/mappings.test.ts +32 -0
  209. package/src/mappings.ts +89 -0
  210. package/src/test_data/gene.ts +604 -0
@@ -0,0 +1,324 @@
1
+ import { autorun } from 'mobx';
2
+ import { BaseViewModel } from '@jbrowse/core/pluggableElementTypes';
3
+ import { ElementId, Region } from '@jbrowse/core/util/types/mst';
4
+ import { addDisposer, cast, types } from 'mobx-state-tree';
5
+ import { SimpleFeature, getSession, } from '@jbrowse/core/util';
6
+ // locals
7
+ import { checkHovered, invertMap, toStr } from './util';
8
+ import { launchPairwiseAlignment } from './launchRemotePairwiseAlignment';
9
+ import { structureSeqVsTranscriptSeqMap, genomeToTranscriptSeqMapping, structurePositionToAlignmentMap, transcriptPositionToAlignmentMap, } from '../mappings';
10
+ /**
11
+ * #stateModel Protein3dViewPlugin
12
+ * extends
13
+ * - BaseViewModel
14
+ */
15
+ function stateModelFactory() {
16
+ return types
17
+ .compose(BaseViewModel, types.model({
18
+ /**
19
+ * #property
20
+ */
21
+ id: ElementId,
22
+ /**
23
+ * #property
24
+ */
25
+ type: types.literal('ProteinView'),
26
+ /**
27
+ * #property
28
+ * url to structure file
29
+ */
30
+ url: types.maybe(types.string),
31
+ /**
32
+ * #property
33
+ * full string for structure data
34
+ */
35
+ data: types.maybe(types.string),
36
+ /**
37
+ * #property
38
+ */
39
+ clickGenomeHighlights: types.array(Region),
40
+ /**
41
+ * #property
42
+ */
43
+ hoverGenomeHighlights: types.array(Region),
44
+ /**
45
+ * #property
46
+ */
47
+ showControls: true,
48
+ /**
49
+ * #property
50
+ */
51
+ height: types.optional(types.number, 650),
52
+ /**
53
+ * #property
54
+ */
55
+ feature: types.frozen(),
56
+ /**
57
+ * #property
58
+ */
59
+ seq1: types.maybe(types.string),
60
+ /**
61
+ * #property
62
+ */
63
+ seq2: types.maybe(types.string),
64
+ /**
65
+ * #property
66
+ */
67
+ alignment: types.frozen(),
68
+ /**
69
+ * #property
70
+ */
71
+ connectedViewId: types.maybe(types.string),
72
+ /**
73
+ * #property
74
+ */
75
+ showHighlight: true,
76
+ /**
77
+ * #property
78
+ */
79
+ zoomToBaseLevel: false,
80
+ /**
81
+ * #property
82
+ */
83
+ showAlignment: true,
84
+ }))
85
+ .volatile(() => ({
86
+ /**
87
+ * #volatile
88
+ */
89
+ error: undefined,
90
+ /**
91
+ * #volatile
92
+ */
93
+ clickPosition: undefined,
94
+ /**
95
+ * #volatile
96
+ */
97
+ hoverPosition: undefined,
98
+ /**
99
+ * #volatile
100
+ */
101
+ progress: '',
102
+ }))
103
+ .views(self => ({
104
+ /**
105
+ * #getter
106
+ */
107
+ get connectedView() {
108
+ const { views } = getSession(self);
109
+ return views.find(f => f.id === self.connectedViewId);
110
+ },
111
+ }))
112
+ .actions(self => ({
113
+ /**
114
+ * #action
115
+ */
116
+ setShowAlignment(f) {
117
+ self.showAlignment = f;
118
+ },
119
+ /**
120
+ * #action
121
+ */
122
+ setHoveredPosition(arg) {
123
+ self.hoverPosition = arg;
124
+ },
125
+ /**
126
+ * #action
127
+ */
128
+ setSeqs(str1, str2) {
129
+ self.seq1 = str1;
130
+ self.seq2 = str2;
131
+ },
132
+ /**
133
+ * #action
134
+ */
135
+ setShowControls(arg) {
136
+ self.showControls = arg;
137
+ },
138
+ /**
139
+ * #action
140
+ */
141
+ setProgress(str) {
142
+ self.progress = str;
143
+ },
144
+ /**
145
+ * #action
146
+ */
147
+ setClickedPosition(arg) {
148
+ self.clickPosition = arg;
149
+ },
150
+ /**
151
+ * #action
152
+ */
153
+ setClickGenomeHighlights(r) {
154
+ self.clickGenomeHighlights = cast(r);
155
+ },
156
+ /**
157
+ * #action
158
+ */
159
+ clearClickGenomeHighlights() {
160
+ self.clickGenomeHighlights = cast([]);
161
+ },
162
+ /**
163
+ * #action
164
+ */
165
+ setHoverGenomeHighlights(r) {
166
+ self.hoverGenomeHighlights = cast(r);
167
+ },
168
+ /**
169
+ * #action
170
+ */
171
+ clearHoverGenomeHighlights() {
172
+ self.hoverGenomeHighlights = cast([]);
173
+ },
174
+ /**
175
+ * #action
176
+ */
177
+ setError(e) {
178
+ self.error = e;
179
+ },
180
+ /**
181
+ * #action
182
+ */
183
+ setAlignment(r) {
184
+ self.alignment = r;
185
+ },
186
+ /**
187
+ * #action
188
+ */
189
+ setShowHighlight(arg) {
190
+ self.showHighlight = arg;
191
+ },
192
+ /**
193
+ * #action
194
+ */
195
+ setZoomToBaseLevel(arg) {
196
+ self.zoomToBaseLevel = arg;
197
+ },
198
+ }))
199
+ .views(self => ({
200
+ /**
201
+ * #getter
202
+ */
203
+ get structureSeqToTranscriptSeqPosition() {
204
+ return self.alignment
205
+ ? structureSeqVsTranscriptSeqMap(self.alignment)
206
+ .structureSeqToTranscriptSeqPosition
207
+ : undefined;
208
+ },
209
+ /**
210
+ * #getter
211
+ */
212
+ get transcriptSeqToStructureSeqPosition() {
213
+ return self.alignment
214
+ ? structureSeqVsTranscriptSeqMap(self.alignment)
215
+ .transcriptSeqToStructureSeqPosition
216
+ : undefined;
217
+ },
218
+ /**
219
+ * #getter
220
+ */
221
+ get structurePositionToAlignmentMap() {
222
+ return self.alignment
223
+ ? structurePositionToAlignmentMap(self.alignment)
224
+ : undefined;
225
+ },
226
+ /**
227
+ * #getter
228
+ */
229
+ get transcriptPositionToAlignmentMap() {
230
+ return self.alignment
231
+ ? transcriptPositionToAlignmentMap(self.alignment)
232
+ : undefined;
233
+ },
234
+ /**
235
+ * #getter
236
+ */
237
+ get alignmentToTranscriptPosition() {
238
+ return this.transcriptPositionToAlignmentMap
239
+ ? invertMap(this.transcriptPositionToAlignmentMap)
240
+ : undefined;
241
+ },
242
+ /**
243
+ * #getter
244
+ */
245
+ get alignmentToStructurePosition() {
246
+ return this.structurePositionToAlignmentMap
247
+ ? invertMap(this.structurePositionToAlignmentMap)
248
+ : undefined;
249
+ },
250
+ /**
251
+ * #getter
252
+ */
253
+ get clickString() {
254
+ const r = self.clickPosition;
255
+ return r ? toStr(r) : '';
256
+ },
257
+ /**
258
+ * #getter
259
+ */
260
+ get hoverString() {
261
+ const r = self.hoverPosition;
262
+ return r ? toStr(r) : '';
263
+ },
264
+ /**
265
+ * #getter
266
+ */
267
+ get genomeToTranscriptSeqMapping() {
268
+ return self.feature
269
+ ? genomeToTranscriptSeqMapping(new SimpleFeature(self.feature))
270
+ : undefined;
271
+ },
272
+ /**
273
+ * #getter
274
+ */
275
+ get structureSeqHoverPos() {
276
+ return self.hoverPosition?.structureSeqPos;
277
+ },
278
+ }))
279
+ .actions(self => ({
280
+ afterAttach() {
281
+ // pairwise align transcript sequence to structure sequence
282
+ addDisposer(self, autorun(async () => {
283
+ try {
284
+ const { seq1, seq2 } = self;
285
+ if (!!self.alignment || !seq1 || !seq2) {
286
+ return;
287
+ }
288
+ const alignment = await launchPairwiseAlignment({
289
+ seq1,
290
+ seq2,
291
+ algorithm: 'emboss_needle',
292
+ onProgress: arg => self.setProgress(arg),
293
+ });
294
+ self.setAlignment(alignment.alignment);
295
+ }
296
+ catch (e) {
297
+ console.error(e);
298
+ self.setError(e);
299
+ }
300
+ }));
301
+ // convert hover over the genome to structure position
302
+ addDisposer(self, autorun(() => {
303
+ const { hovered } = getSession(self);
304
+ const { transcriptSeqToStructureSeqPosition, genomeToTranscriptSeqMapping, connectedView, } = self;
305
+ if (!connectedView?.initialized ||
306
+ !genomeToTranscriptSeqMapping ||
307
+ !checkHovered(hovered)) {
308
+ return undefined;
309
+ }
310
+ const pos = genomeToTranscriptSeqMapping.g2p[hovered.hoverPosition.coord];
311
+ const c0 = pos
312
+ ? transcriptSeqToStructureSeqPosition?.[pos]
313
+ : undefined;
314
+ if (c0 !== undefined) {
315
+ self.setHoveredPosition({
316
+ structureSeqPos: c0,
317
+ });
318
+ }
319
+ }));
320
+ },
321
+ }));
322
+ }
323
+ export default stateModelFactory;
324
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/ProteinView/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare const proteinAbbreviationMapping: {
2
+ [k: string]: {
3
+ name: string;
4
+ abbreviation: string;
5
+ singleLetterCode: string;
6
+ };
7
+ };
@@ -0,0 +1,23 @@
1
+ export const proteinAbbreviationMapping = Object.fromEntries([
2
+ { name: 'alanine', abbreviation: 'Ala', singleLetterCode: 'A' },
3
+ { name: 'arginine', abbreviation: 'Arg', singleLetterCode: 'R' },
4
+ { name: 'asparagine', abbreviation: 'Asn', singleLetterCode: 'N' },
5
+ { name: 'aspartic acid', abbreviation: 'Asp', singleLetterCode: 'D' },
6
+ { name: 'cysteine', abbreviation: 'Cys', singleLetterCode: 'C' },
7
+ { name: 'glutamic acid', abbreviation: 'Glu', singleLetterCode: 'E' },
8
+ { name: 'glutamine', abbreviation: 'Gln', singleLetterCode: 'Q' },
9
+ { name: 'glycine', abbreviation: 'Gly', singleLetterCode: 'G' },
10
+ { name: 'histidine', abbreviation: 'His', singleLetterCode: 'H' },
11
+ { name: 'isoleucine', abbreviation: 'Ile', singleLetterCode: 'I' },
12
+ { name: 'leucine', abbreviation: 'Leu', singleLetterCode: 'L' },
13
+ { name: 'lysine', abbreviation: 'Lys', singleLetterCode: 'K' },
14
+ { name: 'methionine', abbreviation: 'Met', singleLetterCode: 'M' },
15
+ { name: 'phenylalanine', abbreviation: 'Phe', singleLetterCode: 'F' },
16
+ { name: 'proline', abbreviation: 'Pro', singleLetterCode: 'P' },
17
+ { name: 'serine', abbreviation: 'Ser', singleLetterCode: 'S' },
18
+ { name: 'threonine', abbreviation: 'Thr', singleLetterCode: 'T' },
19
+ { name: 'tryptophan', abbreviation: 'Trp', singleLetterCode: 'W' },
20
+ { name: 'tyrosine', abbreviation: 'Tyr', singleLetterCode: 'Y' },
21
+ { name: 'valine', abbreviation: 'Val', singleLetterCode: 'V' },
22
+ ].map(r => [r.abbreviation.toUpperCase(), r]));
23
+ //# sourceMappingURL=proteinAbbreviationMapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proteinAbbreviationMapping.js","sourceRoot":"","sources":["../../src/ProteinView/proteinAbbreviationMapping.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,WAAW,CAC1D;IACE,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAC/D,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAChE,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAClE,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IACrE,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAChE,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IACrE,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IACjE,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IACjE,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAClE,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAC/D,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAC9D,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAClE,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IACrE,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAC/D,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAC9D,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IACjE,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAClE,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;IAChE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE;CAC/D,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAC9C,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { JBrowsePluginProteinViewModel } from './model';
2
+ export declare function proteinToGenomeMapping({ model, structureSeqPos, }: {
3
+ structureSeqPos: number;
4
+ model: JBrowsePluginProteinViewModel;
5
+ }): number[] | undefined;
6
+ export declare function clickProteinToGenome({ model, structureSeqPos, }: {
7
+ structureSeqPos: number;
8
+ model: JBrowsePluginProteinViewModel;
9
+ }): Promise<undefined>;
10
+ export declare function hoverProteinToGenome({ model, structureSeqPos, }: {
11
+ structureSeqPos: number;
12
+ model: JBrowsePluginProteinViewModel;
13
+ }): void;
@@ -0,0 +1,69 @@
1
+ import { getSession } from '@jbrowse/core/util';
2
+ export function proteinToGenomeMapping({ model, structureSeqPos, }) {
3
+ const { genomeToTranscriptSeqMapping, alignment, structureSeqToTranscriptSeqPosition, } = model;
4
+ if (!genomeToTranscriptSeqMapping || !alignment) {
5
+ return undefined;
6
+ }
7
+ const { p2g, strand } = genomeToTranscriptSeqMapping;
8
+ const r1 = structureSeqToTranscriptSeqPosition?.[structureSeqPos];
9
+ if (r1 === undefined) {
10
+ return undefined;
11
+ }
12
+ const s0 = p2g[r1];
13
+ if (s0 === undefined) {
14
+ return undefined;
15
+ }
16
+ const start = s0;
17
+ const end = start + 3 * strand;
18
+ return [Math.min(start, end), Math.max(start, end)];
19
+ }
20
+ export async function clickProteinToGenome({ model, structureSeqPos, }) {
21
+ const session = getSession(model);
22
+ const result = proteinToGenomeMapping({ structureSeqPos, model });
23
+ const { genomeToTranscriptSeqMapping, zoomToBaseLevel } = model;
24
+ const { assemblyManager } = session;
25
+ if (!genomeToTranscriptSeqMapping || result === undefined) {
26
+ return undefined;
27
+ }
28
+ const [s1, s2] = result;
29
+ const lgv = session.views[0];
30
+ const { strand, refName } = genomeToTranscriptSeqMapping;
31
+ model.setClickGenomeHighlights([
32
+ {
33
+ assemblyName: 'hg38',
34
+ refName,
35
+ start: s1,
36
+ end: s2,
37
+ },
38
+ ]);
39
+ if (!zoomToBaseLevel) {
40
+ const assembly = assemblyManager.get(lgv.assemblyNames[0]);
41
+ const r = assembly?.getCanonicalRefName(refName) ?? refName;
42
+ lgv.centerAt(s1, r);
43
+ }
44
+ else {
45
+ await lgv.navToLocString(`${refName}:${s1}-${s2}${strand === -1 ? '[rev]' : ''}`);
46
+ }
47
+ }
48
+ export function hoverProteinToGenome({ model, structureSeqPos, }) {
49
+ const session = getSession(model);
50
+ const result = proteinToGenomeMapping({ structureSeqPos, model });
51
+ const { genomeToTranscriptSeqMapping } = model;
52
+ if (!genomeToTranscriptSeqMapping || !result) {
53
+ return;
54
+ }
55
+ if (!result) {
56
+ session.notify('Genome position not found');
57
+ }
58
+ const [s1, s2] = result;
59
+ const { refName } = genomeToTranscriptSeqMapping;
60
+ model.setHoverGenomeHighlights([
61
+ {
62
+ assemblyName: 'hg38',
63
+ refName,
64
+ start: s1,
65
+ end: s2,
66
+ },
67
+ ]);
68
+ }
69
+ //# sourceMappingURL=proteinToGenomeMapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proteinToGenomeMapping.js","sourceRoot":"","sources":["../../src/ProteinView/proteinToGenomeMapping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { PluginContext } from 'molstar/lib/mol-plugin/context';
2
+ import { Structure } from 'molstar/lib/mol-model/structure';
3
+ export default function selectResidue({ structure, selectedResidue, plugin, }: {
4
+ structure: Structure;
5
+ selectedResidue: number;
6
+ plugin: PluginContext;
7
+ }): void;
@@ -0,0 +1,10 @@
1
+ import { StructureSelection } from 'molstar/lib/mol-model/structure';
2
+ import { getMolstarStructureSelection } from './util';
3
+ export default function selectResidue({ structure, selectedResidue, plugin, }) {
4
+ const sel = getMolstarStructureSelection({ structure, selectedResidue });
5
+ const loci = StructureSelection.toLociWithSourceUnits(sel);
6
+ plugin?.managers.interactivity.lociSelects.select({
7
+ loci,
8
+ });
9
+ }
10
+ //# sourceMappingURL=selectResidue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectResidue.js","sourceRoot":"","sources":["../../src/ProteinView/selectResidue.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,QAAQ,CAAA;AAErD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,SAAS,EACT,eAAe,EACf,MAAM,GAKP;IACC,MAAM,GAAG,GAAG,4BAA4B,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAA;IACxE,MAAM,IAAI,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;IAC1D,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC;QAChD,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { PluginContext } from 'molstar/lib/mol-plugin/context';
2
+ export default function useProteinView({ url, data, showControls, }: {
3
+ url?: string;
4
+ data?: string;
5
+ showControls: boolean;
6
+ }): {
7
+ parentRef: import("react").RefObject<HTMLDivElement>;
8
+ error: unknown;
9
+ plugin: PluginContext | undefined;
10
+ seq: string;
11
+ };
@@ -0,0 +1,57 @@
1
+ import { useState, useEffect, useRef } from 'react';
2
+ import { createPluginUI } from 'molstar/lib/mol-plugin-ui';
3
+ import { renderReact18 } from 'molstar/lib/mol-plugin-ui/react18';
4
+ import { DefaultPluginUISpec } from 'molstar/lib/mol-plugin-ui/spec';
5
+ // locals
6
+ import { loadStructureFromURL } from './loadStructureFromURL';
7
+ import { loadStructureFromData } from './loadStructureFromData';
8
+ export default function useProteinView({ url, data, showControls, }) {
9
+ const parentRef = useRef(null);
10
+ const [plugin, setPlugin] = useState();
11
+ const [error, setError] = useState();
12
+ const [seq, setSeq] = useState('');
13
+ useEffect(() => {
14
+ let p;
15
+ (async () => {
16
+ try {
17
+ if (!parentRef.current) {
18
+ return;
19
+ }
20
+ const d = document.createElement('div');
21
+ parentRef.current.append(d);
22
+ p = await createPluginUI({
23
+ target: d,
24
+ render: renderReact18,
25
+ spec: {
26
+ ...DefaultPluginUISpec(),
27
+ layout: {
28
+ initial: {
29
+ controlsDisplay: 'reactive',
30
+ showControls,
31
+ },
32
+ },
33
+ },
34
+ });
35
+ await p.initialized;
36
+ setPlugin(p);
37
+ if (url) {
38
+ const { seq } = await loadStructureFromURL({ url, plugin: p });
39
+ setSeq(seq);
40
+ }
41
+ else if (data) {
42
+ const { seq } = await loadStructureFromData({ data, plugin: p });
43
+ setSeq(seq);
44
+ }
45
+ }
46
+ catch (e) {
47
+ console.error(e);
48
+ setError(e);
49
+ }
50
+ })();
51
+ return () => {
52
+ p?.unmount();
53
+ };
54
+ }, [url, data, showControls]);
55
+ return { parentRef, error, plugin, seq };
56
+ }
57
+ //# sourceMappingURL=useProteinView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProteinView.js","sourceRoot":"","sources":["../../src/ProteinView/useProteinView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAGnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AAEpE,SAAS;AACT,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAE/D,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,GAAG,EACH,IAAI,EACJ,YAAY,GAKb;IACC,MAAM,SAAS,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAC9C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAAiB,CAAA;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAW,CAAA;IAC7C,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAA4B,CAE/B;QAAA,CAAC,KAAK,IAAI,EAAE;YACX,IAAI,CAAC;gBACH,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;oBACvB,OAAM;gBACR,CAAC;gBACD,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;gBACvC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;gBAC3B,CAAC,GAAG,MAAM,cAAc,CAAC;oBACvB,MAAM,EAAE,CAAC;oBACT,MAAM,EAAE,aAAa;oBACrB,IAAI,EAAE;wBACJ,GAAG,mBAAmB,EAAE;wBACxB,MAAM,EAAE;4BACN,OAAO,EAAE;gCACP,eAAe,EAAE,UAAU;gCAC3B,YAAY;6BACb;yBACF;qBACF;iBACF,CAAC,CAAA;gBACF,MAAM,CAAC,CAAC,WAAW,CAAA;gBACnB,SAAS,CAAC,CAAC,CAAC,CAAA;gBAEZ,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,oBAAoB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;oBAC9D,MAAM,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC;qBAAM,IAAI,IAAI,EAAE,CAAC;oBAChB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,qBAAqB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;oBAChE,MAAM,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAChB,QAAQ,CAAC,CAAC,CAAC,CAAA;YACb,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;QACJ,OAAO,GAAG,EAAE;YACV,CAAC,EAAE,OAAO,EAAE,CAAA;QACd,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAA;IAE7B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;AAC1C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { PluginContext } from 'molstar/lib/mol-plugin/context';
2
+ import { JBrowsePluginProteinViewModel } from './model';
3
+ export default function useProteinViewClickActionBehavior({ plugin, model, }: {
4
+ plugin?: PluginContext;
5
+ model: JBrowsePluginProteinViewModel;
6
+ }): {
7
+ error: unknown;
8
+ };
@@ -0,0 +1,34 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { getSession } from '@jbrowse/core/util';
3
+ import { clickProteinToGenome } from './proteinToGenomeMapping';
4
+ import { StructureElement, StructureProperties as Props, } from 'molstar/lib/mol-model/structure';
5
+ export default function useProteinViewClickActionBehavior({ plugin, model, }) {
6
+ const [error, setError] = useState();
7
+ const session = getSession(model);
8
+ useEffect(() => {
9
+ if (!plugin) {
10
+ return;
11
+ }
12
+ plugin.behaviors.interaction.click.subscribe(event => {
13
+ if (StructureElement.Loci.is(event.current.loci)) {
14
+ const loc = StructureElement.Loci.getFirstLocation(event.current.loci);
15
+ if (loc) {
16
+ const pos = Props.residue.auth_seq_id(loc);
17
+ const code = Props.atom.label_comp_id(loc);
18
+ const chain = Props.chain.auth_asym_id(loc);
19
+ model.setHoveredPosition({
20
+ structureSeqPos: pos - 1,
21
+ code,
22
+ chain,
23
+ });
24
+ clickProteinToGenome({ model, structureSeqPos: pos - 1 }).catch(e => {
25
+ console.error(e);
26
+ setError(e);
27
+ });
28
+ }
29
+ }
30
+ });
31
+ }, [plugin, session, model]);
32
+ return { error };
33
+ }
34
+ //# sourceMappingURL=useProteinViewClickBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProteinViewClickBehavior.js","sourceRoot":"","sources":["../../src/ProteinView/useProteinViewClickBehavior.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAK/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EACL,gBAAgB,EAChB,mBAAmB,IAAI,KAAK,GAC7B,MAAM,iCAAiC,CAAA;AAExC,MAAM,CAAC,OAAO,UAAU,iCAAiC,CAAC,EACxD,MAAM,EACN,KAAK,GAIN;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAW,CAAA;IAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IACjC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAM;QACR,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACnD,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACtE,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;oBAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;oBAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;oBAC3C,KAAK,CAAC,kBAAkB,CAAC;wBACvB,eAAe,EAAE,GAAG,GAAG,CAAC;wBACxB,IAAI;wBACJ,KAAK;qBACN,CAAC,CAAA;oBAEF,oBAAoB,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;wBAClE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;wBAChB,QAAQ,CAAC,CAAC,CAAC,CAAA;oBACb,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAC5B,OAAO,EAAE,KAAK,EAAE,CAAA;AAClB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { PluginContext } from 'molstar/lib/mol-plugin/context';
2
+ import { JBrowsePluginProteinViewModel } from './model';
3
+ export default function useProteinViewClickActionBehavior({ plugin, model, }: {
4
+ plugin?: PluginContext;
5
+ model: JBrowsePluginProteinViewModel;
6
+ }): void;
@@ -0,0 +1,31 @@
1
+ import { useEffect } from 'react';
2
+ import { getSession } from '@jbrowse/core/util';
3
+ import { StructureElement, StructureProperties as Props, } from 'molstar/lib/mol-model/structure';
4
+ import { hoverProteinToGenome } from './proteinToGenomeMapping';
5
+ export default function useProteinViewClickActionBehavior({ plugin, model, }) {
6
+ const session = getSession(model);
7
+ useEffect(() => {
8
+ if (!plugin) {
9
+ return;
10
+ }
11
+ plugin.behaviors.interaction.hover.subscribe(event => {
12
+ if (StructureElement.Loci.is(event.current.loci)) {
13
+ const loc = StructureElement.Loci.getFirstLocation(event.current.loci);
14
+ if (loc) {
15
+ // example code for this label
16
+ // https://github.com/molstar/molstar/blob/60550cfea1f62a50a764d5714307d6d1049be71d/src/mol-theme/label.ts#L255-L264
17
+ const structureSeqPos = Props.residue.auth_seq_id(loc);
18
+ const code = Props.atom.label_comp_id(loc);
19
+ const chain = Props.chain.auth_asym_id(loc);
20
+ model.setHoveredPosition({
21
+ structureSeqPos: structureSeqPos - 1,
22
+ code,
23
+ chain,
24
+ });
25
+ hoverProteinToGenome({ model, structureSeqPos: structureSeqPos - 1 });
26
+ }
27
+ }
28
+ });
29
+ }, [plugin, session, model]);
30
+ }
31
+ //# sourceMappingURL=useProteinViewHoverBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProteinViewHoverBehavior.js","sourceRoot":"","sources":["../../src/ProteinView/useProteinViewHoverBehavior.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAK/C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,IAAI,KAAK,GAC7B,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAE/D,MAAM,CAAC,OAAO,UAAU,iCAAiC,CAAC,EACxD,MAAM,EACN,KAAK,GAIN;IACC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IACjC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAM;QACR,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACnD,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACtE,IAAI,GAAG,EAAE,CAAC;oBACR,8BAA8B;oBAC9B,oHAAoH;oBACpH,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;oBACtD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;oBAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;oBAC3C,KAAK,CAAC,kBAAkB,CAAC;wBACvB,eAAe,EAAE,eAAe,GAAG,CAAC;wBACpC,IAAI;wBACJ,KAAK;qBACN,CAAC,CAAA;oBACF,oBAAoB,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,eAAe,GAAG,CAAC,EAAE,CAAC,CAAA;gBACvE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;AAC9B,CAAC"}