jbrowse-plugin-msaview 1.0.17 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/CHANGELOG.md +10 -4
  2. package/README.md +6 -4
  3. package/dist/AddHighlightModel/GenomeMouseoverHighlight.d.ts +6 -0
  4. package/dist/AddHighlightModel/GenomeMouseoverHighlight.js +30 -0
  5. package/dist/AddHighlightModel/GenomeMouseoverHighlight.js.map +1 -0
  6. package/dist/AddHighlightModel/HighlightComponents.d.ts +7 -0
  7. package/dist/AddHighlightModel/HighlightComponents.js +12 -0
  8. package/dist/AddHighlightModel/HighlightComponents.js.map +1 -0
  9. package/dist/AddHighlightModel/MsaToGenomeHighlight.d.ts +7 -0
  10. package/dist/AddHighlightModel/MsaToGenomeHighlight.js +26 -0
  11. package/dist/AddHighlightModel/MsaToGenomeHighlight.js.map +1 -0
  12. package/dist/AddHighlightModel/index.d.ts +2 -0
  13. package/dist/AddHighlightModel/index.js +14 -0
  14. package/dist/AddHighlightModel/index.js.map +1 -0
  15. package/dist/AddHighlightModel/util.d.ts +9 -0
  16. package/dist/AddHighlightModel/util.js +14 -0
  17. package/dist/AddHighlightModel/util.js.map +1 -0
  18. package/dist/LaunchMsaView/components/LaunchMsaViewDialog.d.ts +7 -0
  19. package/dist/LaunchMsaView/components/LaunchMsaViewDialog.js +20 -0
  20. package/dist/LaunchMsaView/components/LaunchMsaViewDialog.js.map +1 -0
  21. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/NcbiBlastPanel.d.ts +8 -0
  22. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/NcbiBlastPanel.js +76 -0
  23. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/NcbiBlastPanel.js.map +1 -0
  24. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/calculateProteinSequence.d.ts +26 -0
  25. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/calculateProteinSequence.js +48 -0
  26. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/calculateProteinSequence.js.map +1 -0
  27. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/index.d.ts +2 -0
  28. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/index.js +3 -0
  29. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/index.js.map +1 -0
  30. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/ncbiBlastLaunchView.d.ts +8 -0
  31. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/ncbiBlastLaunchView.js +17 -0
  32. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/ncbiBlastLaunchView.js.map +1 -0
  33. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/useFeatureSequence.d.ts +20 -0
  34. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/useFeatureSequence.js +64 -0
  35. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/useFeatureSequence.js.map +1 -0
  36. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/util.d.ts +5 -0
  37. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/util.js +7 -0
  38. package/dist/LaunchMsaView/components/NewNCBIBlastQuery/util.js.map +1 -0
  39. package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.d.ts +8 -0
  40. package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.js +90 -0
  41. package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.js.map +1 -0
  42. package/dist/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.d.ts +1 -0
  43. package/dist/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.js +12 -0
  44. package/dist/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.js.map +1 -0
  45. package/dist/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.d.ts +9 -0
  46. package/dist/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.js +36 -0
  47. package/dist/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.js.map +1 -0
  48. package/dist/LaunchMsaView/components/TabUtils.d.ts +12 -0
  49. package/dist/LaunchMsaView/components/TabUtils.js +13 -0
  50. package/dist/LaunchMsaView/components/TabUtils.js.map +1 -0
  51. package/dist/LaunchMsaView/index.d.ts +2 -0
  52. package/dist/LaunchMsaView/index.js +50 -0
  53. package/dist/LaunchMsaView/index.js.map +1 -0
  54. package/dist/LaunchMsaView/util.d.ts +5 -0
  55. package/dist/LaunchMsaView/util.js +25 -0
  56. package/dist/LaunchMsaView/util.js.map +1 -0
  57. package/dist/MsaViewPanel/components/LoadingBLAST.d.ts +6 -0
  58. package/dist/MsaViewPanel/components/LoadingBLAST.js +36 -0
  59. package/dist/MsaViewPanel/components/LoadingBLAST.js.map +1 -0
  60. package/dist/MsaViewPanel/components/MsaViewPanel.d.ts +6 -0
  61. package/dist/MsaViewPanel/components/MsaViewPanel.js +10 -0
  62. package/dist/MsaViewPanel/components/MsaViewPanel.js.map +1 -0
  63. package/dist/MsaViewPanel/components/RIDLink.d.ts +5 -0
  64. package/dist/MsaViewPanel/components/RIDLink.js +17 -0
  65. package/dist/MsaViewPanel/components/RIDLink.js.map +1 -0
  66. package/dist/MsaViewPanel/doLaunchBlast.d.ts +7 -0
  67. package/dist/MsaViewPanel/doLaunchBlast.js +27 -0
  68. package/dist/MsaViewPanel/doLaunchBlast.js.map +1 -0
  69. package/dist/MsaViewPanel/genomeToMSA.d.ts +4 -0
  70. package/dist/MsaViewPanel/genomeToMSA.js +18 -0
  71. package/dist/MsaViewPanel/genomeToMSA.js.map +1 -0
  72. package/dist/MsaViewPanel/index.d.ts +2 -0
  73. package/dist/MsaViewPanel/index.js +16 -0
  74. package/dist/MsaViewPanel/index.js.map +1 -0
  75. package/dist/MsaViewPanel/model.d.ts +596 -0
  76. package/dist/MsaViewPanel/model.js +235 -0
  77. package/dist/MsaViewPanel/model.js.map +1 -0
  78. package/dist/MsaViewPanel/msaCoordToGenomeCoord.d.ts +9 -0
  79. package/dist/MsaViewPanel/msaCoordToGenomeCoord.js +20 -0
  80. package/dist/MsaViewPanel/msaCoordToGenomeCoord.js.map +1 -0
  81. package/dist/MsaViewPanel/util.d.ts +8 -0
  82. package/dist/MsaViewPanel/util.js +7 -0
  83. package/dist/MsaViewPanel/util.js.map +1 -0
  84. package/dist/OpenInNewIcon.d.ts +3 -0
  85. package/dist/OpenInNewIcon.js +8 -0
  86. package/dist/OpenInNewIcon.js.map +1 -0
  87. package/dist/TextField2.d.ts +4 -0
  88. package/dist/TextField2.js +8 -0
  89. package/dist/TextField2.js.map +1 -0
  90. package/dist/index.d.ts +8 -8
  91. package/dist/index.js +32 -7
  92. package/dist/index.js.map +1 -0
  93. package/dist/jbrowse-plugin-msaview.umd.production.min.js +109 -1
  94. package/dist/jbrowse-plugin-msaview.umd.production.min.js.map +7 -1
  95. package/dist/utils/fetch.d.ts +4 -0
  96. package/dist/utils/fetch.js +19 -0
  97. package/dist/utils/fetch.js.map +1 -0
  98. package/dist/utils/msa.d.ts +8 -0
  99. package/dist/utils/msa.js +75 -0
  100. package/dist/utils/msa.js.map +1 -0
  101. package/dist/utils/ncbiBlast.d.ts +20 -0
  102. package/dist/utils/ncbiBlast.js +66 -0
  103. package/dist/utils/ncbiBlast.js.map +1 -0
  104. package/package.json +51 -40
  105. package/src/AddHighlightModel/GenomeMouseoverHighlight.tsx +44 -0
  106. package/src/AddHighlightModel/HighlightComponents.tsx +24 -0
  107. package/src/AddHighlightModel/MsaToGenomeHighlight.tsx +50 -0
  108. package/src/AddHighlightModel/index.tsx +27 -0
  109. package/src/AddHighlightModel/util.ts +14 -0
  110. package/src/LaunchMsaView/components/LaunchMsaViewDialog.tsx +52 -0
  111. package/src/LaunchMsaView/components/NewNCBIBlastQuery/NcbiBlastPanel.tsx +160 -0
  112. package/src/LaunchMsaView/components/NewNCBIBlastQuery/calculateProteinSequence.ts +92 -0
  113. package/src/LaunchMsaView/components/NewNCBIBlastQuery/index.tsx +2 -0
  114. package/src/LaunchMsaView/components/NewNCBIBlastQuery/ncbiBlastLaunchView.ts +28 -0
  115. package/src/LaunchMsaView/components/NewNCBIBlastQuery/useFeatureSequence.ts +85 -0
  116. package/src/LaunchMsaView/components/NewNCBIBlastQuery/util.ts +7 -0
  117. package/src/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.tsx +149 -0
  118. package/src/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.ts +13 -0
  119. package/src/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.ts +54 -0
  120. package/src/LaunchMsaView/components/TabUtils.tsx +30 -0
  121. package/src/LaunchMsaView/index.ts +61 -0
  122. package/src/LaunchMsaView/util.ts +30 -0
  123. package/src/MsaViewPanel/components/LoadingBLAST.tsx +59 -0
  124. package/src/MsaViewPanel/components/MsaViewPanel.tsx +22 -0
  125. package/src/MsaViewPanel/components/RIDLink.tsx +18 -0
  126. package/src/MsaViewPanel/doLaunchBlast.ts +38 -0
  127. package/src/MsaViewPanel/genomeToMSA.ts +21 -0
  128. package/src/MsaViewPanel/index.ts +19 -0
  129. package/src/MsaViewPanel/model.ts +290 -0
  130. package/src/MsaViewPanel/msaCoordToGenomeCoord.ts +29 -0
  131. package/src/MsaViewPanel/util.ts +13 -0
  132. package/src/OpenInNewIcon.tsx +11 -0
  133. package/src/TextField2.tsx +12 -0
  134. package/src/index.ts +12 -14
  135. package/src/utils/fetch.ts +25 -0
  136. package/src/utils/msa.ts +111 -0
  137. package/src/utils/ncbiBlast.ts +105 -0
  138. package/dist/config.json +0 -8
  139. package/dist/jbrowse-plugin-msaview.cjs.development.js +0 -168
  140. package/dist/jbrowse-plugin-msaview.cjs.development.js.map +0 -1
  141. package/dist/jbrowse-plugin-msaview.cjs.production.min.js +0 -2
  142. package/dist/jbrowse-plugin-msaview.cjs.production.min.js.map +0 -1
  143. package/dist/jbrowse-plugin-msaview.esm.js +0 -163
  144. package/dist/jbrowse-plugin-msaview.esm.js.map +0 -1
  145. package/dist/jbrowse-plugin-msaview.umd.development.js +0 -8641
  146. package/dist/jbrowse-plugin-msaview.umd.development.js.map +0 -1
  147. package/src/index.test.ts +0 -3
package/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # v1.0.18
2
+
3
+ - Fix clicking on node labels
4
+
1
5
  # v1.0.17
2
6
 
3
7
  - Avoid Link redirection at react-msaview importform
@@ -16,7 +20,8 @@
16
20
 
17
21
  # v1.0.13
18
22
 
19
- - Factor out code into the react-msaview package on NPM, and make the plugin more of a wrapper around this module
23
+ - Factor out code into the react-msaview package on NPM, and make the plugin
24
+ more of a wrapper around this module
20
25
 
21
26
  # v1.0.12
22
27
 
@@ -45,7 +50,8 @@
45
50
 
46
51
  # v1.0.6
47
52
 
48
- - Use postversion to run build so that the accurate version is encoded into the release binary
53
+ - Use postversion to run build so that the accurate version is encoded into the
54
+ release binary
49
55
 
50
56
  # v1.0.5
51
57
 
@@ -76,8 +82,8 @@
76
82
  as a newick tree embedded in stockholm metadata
77
83
  - View metadata about alignment from MSA headers (e.g. stockholm)
78
84
  - Collapse subtrees with click action on branches
79
- - The collapse subtree action hides gaps that were introduced by that subtree
80
- in the rest of the alignment
85
+ - The collapse subtree action hides gaps that were introduced by that subtree in
86
+ the rest of the alignment
81
87
  - Allows "zooming out" by setting tiny rowHeight/colWidth settings
82
88
  - Allows changing color schemes, with jalview, clustal, and other color schemes
83
89
  - Allows toggling the branch length rendering for the phylogenetic tree
package/README.md CHANGED
@@ -1,18 +1,20 @@
1
1
  # jbrowse-plugin-msaview
2
2
 
3
- This plugin packages https://github.com/gmod/react-msaview for usage inside of JBrowse 2
3
+ This plugin packages https://github.com/gmod/react-msaview for usage inside of
4
+ JBrowse 2
4
5
 
5
- See the docs for the react-msaview for more info https://github.com/GMOD/react-msaview/blob/main/docs/user_guide.md
6
+ See the docs for the react-msaview for more info
7
+ https://github.com/GMOD/react-msaview/blob/main/docs/user_guide.md
6
8
 
7
9
  ## Gallery
8
10
 
9
11
  ![](img/1.png)
10
12
 
11
- MSAView plugin running in v1.5.0 of JBrowse web
13
+ MSAView plugin running in JBrowse 2
12
14
 
13
15
  ## Demo
14
16
 
15
- https://s3.amazonaws.com/jbrowse.org/code/jb2/main/index.html?config=https://unpkg.com/jbrowse-plugin-msaview/dist/config.json&session=share-BVmmEYAoAv&password=SuQaN
17
+ https://jbrowse.org/code/jb2/main/index.html?config=https://unpkg.com/jbrowse-plugin-msaview/dist/config.json&session=share-BVmmEYAoAv&password=SuQaN
16
18
 
17
19
  ## Features
18
20
 
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
3
+ declare const GenomeMouseoverHighlight: ({ model, }: {
4
+ model: LinearGenomeViewModel;
5
+ }) => React.JSX.Element | null;
6
+ export default GenomeMouseoverHighlight;
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import { observer } from 'mobx-react';
3
+ import { getSession } from '@jbrowse/core/util';
4
+ import { useStyles } from './util';
5
+ const GenomeMouseoverHighlight = observer(function GenomeMouseoverHighlight2({ model, }) {
6
+ const { hovered } = getSession(model);
7
+ return hovered &&
8
+ typeof hovered === 'object' &&
9
+ 'hoverPosition' in hovered ? (React.createElement(HoverHighlight, { model: model })) : null;
10
+ });
11
+ const HoverHighlight = observer(function HoverHighlight2({ model, }) {
12
+ const { classes } = useStyles();
13
+ const session = getSession(model);
14
+ if (session.views.some(s => s.type === 'MsaView')) {
15
+ const { hovered } = session;
16
+ const { offsetPx } = model;
17
+ // @ts-expect-error
18
+ const { coord, refName } = hovered.hoverPosition;
19
+ const s = model.bpToPx({ refName, coord: coord - 1 });
20
+ const e = model.bpToPx({ refName, coord: coord });
21
+ if (s && e) {
22
+ const width = Math.max(Math.abs(e.offsetPx - s.offsetPx), 4);
23
+ const left = Math.min(s.offsetPx, e.offsetPx) - offsetPx;
24
+ return React.createElement("div", { className: classes.highlight, style: { left, width } });
25
+ }
26
+ }
27
+ return null;
28
+ });
29
+ export default GenomeMouseoverHighlight;
30
+ //# sourceMappingURL=GenomeMouseoverHighlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenomeMouseoverHighlight.js","sourceRoot":"","sources":["../../src/AddHighlightModel/GenomeMouseoverHighlight.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,wBAAwB,GAAG,QAAQ,CAAC,SAAS,yBAAyB,CAAC,EAC3E,KAAK,GAGN;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IACrC,OAAO,OAAO;QACZ,OAAO,OAAO,KAAK,QAAQ;QAC3B,eAAe,IAAI,OAAO,CAAC,CAAC,CAAC,CAC7B,oBAAC,cAAc,IAAC,KAAK,EAAE,KAAK,GAAI,CACjC,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,QAAQ,CAAC,SAAS,eAAe,CAAC,EACvD,KAAK,GAGN;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IACjC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;QAClD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;QAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;QAC1B,mBAAmB;QACnB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,CAAA;QAEhD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAA;QACrD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QACjD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;YAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAA;YACxD,OAAO,6BAAK,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAI,CAAA;QACtE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA;AAEF,eAAe,wBAAwB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
3
+ type LGV = LinearGenomeViewModel;
4
+ declare const HighlightComponents: ({ model, }: {
5
+ model: LGV;
6
+ }) => React.JSX.Element;
7
+ export default HighlightComponents;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { observer } from 'mobx-react';
3
+ // locals
4
+ import MsaToGenomeHighlight from './MsaToGenomeHighlight';
5
+ import GenomeMouseoverHighlight from './GenomeMouseoverHighlight';
6
+ const HighlightComponents = observer(function HighlightComponents2({ model, }) {
7
+ return (React.createElement(React.Fragment, null,
8
+ React.createElement(MsaToGenomeHighlight, { model: model }),
9
+ React.createElement(GenomeMouseoverHighlight, { model: model })));
10
+ });
11
+ export default HighlightComponents;
12
+ //# sourceMappingURL=HighlightComponents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HighlightComponents.js","sourceRoot":"","sources":["../../src/AddHighlightModel/HighlightComponents.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAGrC,SAAS;AACT,OAAO,oBAAoB,MAAM,wBAAwB,CAAA;AACzD,OAAO,wBAAwB,MAAM,4BAA4B,CAAA;AAIjE,MAAM,mBAAmB,GAAG,QAAQ,CAAC,SAAS,oBAAoB,CAAC,EACjE,KAAK,GAGN;IACC,OAAO,CACL;QACE,oBAAC,oBAAoB,IAAC,KAAK,EAAE,KAAK,GAAI;QACtC,oBAAC,wBAAwB,IAAC,KAAK,EAAE,KAAK,GAAI,CACzC,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,mBAAmB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
3
+ type LGV = LinearGenomeViewModel;
4
+ declare const MsaToGenomeHighlight: ({ model, }: {
5
+ model: LGV;
6
+ }) => React.JSX.Element | null;
7
+ export default MsaToGenomeHighlight;
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { observer } from 'mobx-react';
3
+ import { getSession } from '@jbrowse/core/util';
4
+ import { useStyles } from './util';
5
+ function getCanonicalName(assembly, s) {
6
+ return assembly.getCanonicalRefName(s) ?? s;
7
+ }
8
+ const MsaToGenomeHighlight = observer(function MsaToGenomeHighlight2({ model, }) {
9
+ const { classes } = useStyles();
10
+ const { assemblyManager, views } = getSession(model);
11
+ const p = views.find(f => f.type === 'MsaView');
12
+ const assembly = assemblyManager.get(model.assemblyNames[0]);
13
+ return assembly ? (React.createElement(React.Fragment, null, p?.connectedHighlights.map((r, idx) => {
14
+ const refName = getCanonicalName(assembly, r.refName);
15
+ const s = model.bpToPx({ refName, coord: r.start });
16
+ const e = model.bpToPx({ refName, coord: r.end });
17
+ if (s && e) {
18
+ const width = Math.max(Math.abs(e.offsetPx - s.offsetPx), 4);
19
+ const left = Math.min(s.offsetPx, e.offsetPx) - model.offsetPx;
20
+ return (React.createElement("div", { key: `${JSON.stringify(r)}-${idx}`, className: classes.highlight, style: { left, width } }));
21
+ }
22
+ return null;
23
+ }))) : null;
24
+ });
25
+ export default MsaToGenomeHighlight;
26
+ //# sourceMappingURL=MsaToGenomeHighlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MsaToGenomeHighlight.js","sourceRoot":"","sources":["../../src/AddHighlightModel/MsaToGenomeHighlight.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAO/C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAIlC,SAAS,gBAAgB,CAAC,QAAkB,EAAE,CAAS;IACrD,OAAO,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,oBAAoB,GAAG,QAAQ,CAAC,SAAS,qBAAqB,CAAC,EACnE,KAAK,GAGN;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IACpD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAA8B,CAAA;IAC5E,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5D,OAAO,QAAQ,CAAC,CAAC,CAAC,CAChB,0CACG,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;QACrD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QACnD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;QACjD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;YAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAA;YAC9D,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAClC,SAAS,EAAE,OAAO,CAAC,SAAS,EAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GACtB,CACH,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CACD,CACJ,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAC,CAAA;AAEF,eAAe,oBAAoB,CAAA"}
@@ -0,0 +1,2 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ export default function AddHighlightComponentsModelF(pluginManager: PluginManager): void;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ // locals
3
+ import HighlightComponents from './HighlightComponents';
4
+ export default function AddHighlightComponentsModelF(pluginManager) {
5
+ pluginManager.addToExtensionPoint('LinearGenomeView-TracksContainerComponent',
6
+ // @ts-expect-error
7
+ (rest = [], { model }) => {
8
+ return [
9
+ ...rest,
10
+ React.createElement(HighlightComponents, { key: "highlight_protein_viewer_msaview", model: model }),
11
+ ];
12
+ });
13
+ }
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/AddHighlightModel/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,SAAS;AACT,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AAEvD,MAAM,CAAC,OAAO,UAAU,4BAA4B,CAClD,aAA4B;IAE5B,aAAa,CAAC,mBAAmB,CAC/B,2CAA2C;IAC3C,mBAAmB;IACnB,CACE,OAA0B,EAAE,EAC5B,EAAE,KAAK,EAAoC,EAC3C,EAAE;QACF,OAAO;YACL,GAAG,IAAI;YACP,oBAAC,mBAAmB,IAClB,GAAG,EAAC,kCAAkC,EACtC,KAAK,EAAE,KAAK,GACZ;SACH,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const useStyles: (params: void, muiStyleOverridesParams?: {
2
+ props: Record<string, unknown>;
3
+ ownerState?: Record<string, unknown> | undefined;
4
+ } | undefined) => {
5
+ classes: Record<"highlight", string>;
6
+ theme: import("@mui/material").Theme;
7
+ css: import("tss-react").Css;
8
+ cx: import("tss-react").Cx;
9
+ };
@@ -0,0 +1,14 @@
1
+ import { makeStyles } from 'tss-react/mui';
2
+ export const useStyles = makeStyles()({
3
+ highlight: {
4
+ height: '100%',
5
+ background: 'rgba(255,255,0,0.2)',
6
+ border: '1px solid rgba(50,50,0,0.2)',
7
+ position: 'absolute',
8
+ zIndex: 1000,
9
+ textAlign: 'center',
10
+ pointerEvents: 'none',
11
+ overflow: 'hidden',
12
+ },
13
+ });
14
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/AddHighlightModel/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IACpC,SAAS,EAAE;QACT,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,qBAAqB;QACjC,MAAM,EAAE,6BAA6B;QACrC,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,QAAQ;QACnB,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,QAAQ;KACnB;CACF,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { AbstractTrackModel, Feature } from '@jbrowse/core/util';
3
+ export default function LaunchProteinViewDialog({ handleClose, feature, model, }: {
4
+ handleClose: () => void;
5
+ feature: Feature;
6
+ model: AbstractTrackModel;
7
+ }): React.JSX.Element;
@@ -0,0 +1,20 @@
1
+ import React, { useState } from 'react';
2
+ import { Dialog } from '@jbrowse/core/ui';
3
+ import { Box, Tab, Tabs } from '@mui/material';
4
+ // locals
5
+ import { CustomTabPanel, a11yProps } from './TabUtils';
6
+ import NewNcbiBlastQueryPanel from './NewNCBIBlastQuery';
7
+ import PreLoadedMSA from './PreLoadedMSA/PreLoadedMSADataPanel';
8
+ export default function LaunchProteinViewDialog({ handleClose, feature, model, }) {
9
+ const [value, setValue] = useState(0);
10
+ return (React.createElement(Dialog, { maxWidth: "xl", title: "Launch MSA view", onClose: () => handleClose(), open: true },
11
+ React.createElement(Box, { sx: { borderBottom: 1, borderColor: 'divider' } },
12
+ React.createElement(Tabs, { value: value, onChange: (_, val) => setValue(val) },
13
+ React.createElement(Tab, { label: "NCBI BLAST query", ...a11yProps(0) }),
14
+ React.createElement(Tab, { label: "UCSC 100-way dataset", ...a11yProps(1) }))),
15
+ React.createElement(CustomTabPanel, { value: value, index: 0 },
16
+ React.createElement(NewNcbiBlastQueryPanel, { handleClose: handleClose, feature: feature, model: model })),
17
+ React.createElement(CustomTabPanel, { value: value, index: 1 },
18
+ React.createElement(PreLoadedMSA, { model: model, feature: feature, handleClose: handleClose }))));
19
+ }
20
+ //# sourceMappingURL=LaunchMsaViewDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LaunchMsaViewDialog.js","sourceRoot":"","sources":["../../../src/LaunchMsaView/components/LaunchMsaViewDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAG9C,SAAS;AAET,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,sBAAsB,MAAM,qBAAqB,CAAA;AACxD,OAAO,YAAY,MAAM,sCAAsC,CAAA;AAE/D,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAC9C,WAAW,EACX,OAAO,EACP,KAAK,GAKN;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAErC,OAAO,CACL,oBAAC,MAAM,IACL,QAAQ,EAAC,IAAI,EACb,KAAK,EAAC,iBAAiB,EACvB,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,EAC5B,IAAI;QAEJ,oBAAC,GAAG,IAAC,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE;YAClD,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACrD,oBAAC,GAAG,IAAC,KAAK,EAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,GAAI;gBAClD,oBAAC,GAAG,IAAC,KAAK,EAAC,sBAAsB,KAAK,SAAS,CAAC,CAAC,CAAC,GAAI,CACjD,CACH;QACN,oBAAC,cAAc,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACpC,oBAAC,sBAAsB,IACrB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACZ,CACa;QACjB,oBAAC,cAAc,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACpC,oBAAC,YAAY,IACX,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,GACxB,CACa,CACV,CACV,CAAA;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { AbstractTrackModel, Feature } from '@jbrowse/core/util';
3
+ declare const NcbiBlastPanel: ({ handleClose, feature, model, }: {
4
+ model: AbstractTrackModel;
5
+ feature: Feature;
6
+ handleClose: () => void;
7
+ }) => React.JSX.Element;
8
+ export default NcbiBlastPanel;
@@ -0,0 +1,76 @@
1
+ import React, { useState } from 'react';
2
+ import { observer } from 'mobx-react';
3
+ import { Button, DialogActions, DialogContent, MenuItem } from '@mui/material';
4
+ import { makeStyles } from 'tss-react/mui';
5
+ import { getContainingView, } from '@jbrowse/core/util';
6
+ import { ErrorMessage } from '@jbrowse/core/ui';
7
+ // locals
8
+ import { getId, getTranscriptDisplayName, getTranscriptFeatures, getGeneDisplayName, } from '../../util';
9
+ import { getProteinSequence } from './calculateProteinSequence';
10
+ import { useFeatureSequence } from './useFeatureSequence';
11
+ import TextField2 from '../../../TextField2';
12
+ import { ncbiBlastLaunchView } from './ncbiBlastLaunchView';
13
+ const useStyles = makeStyles()({
14
+ dialogContent: {
15
+ width: '80em',
16
+ },
17
+ textAreaFont: {
18
+ fontFamily: 'Courier New',
19
+ },
20
+ });
21
+ const NcbiBlastPanel = observer(function NcbiBlastPanel2({ handleClose, feature, model, }) {
22
+ const { classes } = useStyles();
23
+ const view = getContainingView(model);
24
+ const [blastDatabase, setBlastDatabase] = useState('nr');
25
+ const [msaAlgorithm, setMsaAlgorithm] = useState('clustalo');
26
+ const options = getTranscriptFeatures(feature);
27
+ const [userSelection, setUserSelection] = useState(getId(options[0]));
28
+ const selectedTranscript = options.find(val => getId(val) === userSelection);
29
+ const { sequence, error } = useFeatureSequence({
30
+ view,
31
+ feature: selectedTranscript,
32
+ });
33
+ const proteinSequence = sequence && !('error' in sequence)
34
+ ? getProteinSequence({
35
+ seq: sequence.seq,
36
+ selectedTranscript,
37
+ })
38
+ : '';
39
+ const blastDatabaseOptions = ['nr', 'nr_cluster_seq'];
40
+ const msaAlgorithms = ['clustalo', 'muscle', 'kalign', 'mafft'];
41
+ return (React.createElement(DialogContent, { className: classes.dialogContent },
42
+ error ? React.createElement(ErrorMessage, { error: error }) : null,
43
+ React.createElement(TextField2, { value: blastDatabase, onChange: event => setBlastDatabase(event.target.value), label: "BLAST blastDatabase", select: true }, blastDatabaseOptions.map(val => (React.createElement(MenuItem, { value: val, key: val }, val)))),
44
+ React.createElement(TextField2, { value: msaAlgorithm, onChange: event => setMsaAlgorithm(event.target.value), label: "MSA Algorithm", select: true }, msaAlgorithms.map(val => (React.createElement(MenuItem, { value: val, key: val }, val)))),
45
+ React.createElement(TextField2, { value: userSelection, onChange: event => setUserSelection(event.target.value), label: "Choose isoform to BLAST", select: true }, options.map(val => (React.createElement(MenuItem, { value: getId(val), key: val.id() },
46
+ getGeneDisplayName(feature),
47
+ " - ",
48
+ getTranscriptDisplayName(val))))),
49
+ React.createElement(TextField2, { variant: "outlined", multiline: true, minRows: 5, maxRows: 10, fullWidth: true, value: !proteinSequence
50
+ ? 'Loading...'
51
+ : `>${getTranscriptDisplayName(selectedTranscript)}\n${proteinSequence}`, InputProps: {
52
+ readOnly: true,
53
+ classes: {
54
+ input: classes.textAreaFont,
55
+ },
56
+ } }),
57
+ React.createElement(DialogActions, null,
58
+ React.createElement(Button, { color: "primary", variant: "contained", onClick: () => {
59
+ const newView = ncbiBlastLaunchView({
60
+ feature: selectedTranscript,
61
+ view,
62
+ newViewTitle: `NCBI BLAST - ${getGeneDisplayName(feature)} - ${getTranscriptDisplayName(selectedTranscript)} - ${msaAlgorithm}`,
63
+ });
64
+ newView.setBlastParams({
65
+ blastProgram: 'blastp',
66
+ blastDatabase,
67
+ msaAlgorithm,
68
+ selectedTranscript,
69
+ proteinSequence,
70
+ });
71
+ handleClose();
72
+ }, disabled: !proteinSequence }, "Submit"),
73
+ React.createElement(Button, { color: "secondary", variant: "contained", onClick: () => handleClose() }, "Cancel"))));
74
+ });
75
+ export default NcbiBlastPanel;
76
+ //# sourceMappingURL=NcbiBlastPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NcbiBlastPanel.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NewNCBIBlastQuery/NcbiBlastPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Feature } from '@jbrowse/core/util';
2
+ export interface Feat {
3
+ start: number;
4
+ end: number;
5
+ type: string;
6
+ }
7
+ export declare function stitch(subfeats: Feat[], sequence: string): string;
8
+ export declare function calculateProteinSequence({ cds, sequence, codonTable, }: {
9
+ cds: Feat[];
10
+ sequence: string;
11
+ codonTable: Record<string, string>;
12
+ }): string;
13
+ export declare function revlist(list: {
14
+ start: number;
15
+ end: number;
16
+ type: string;
17
+ }[], seqlen: number): {
18
+ start: number;
19
+ end: number;
20
+ type: string;
21
+ }[];
22
+ export declare function dedupe(list: Feat[]): Feat[];
23
+ export declare function getProteinSequence({ selectedTranscript, seq, }: {
24
+ seq: string;
25
+ selectedTranscript: Feature;
26
+ }): string;
@@ -0,0 +1,48 @@
1
+ import { defaultCodonTable, generateCodonTable, revcom, } from '@jbrowse/core/util';
2
+ export function stitch(subfeats, sequence) {
3
+ return subfeats.map(sub => sequence.slice(sub.start, sub.end)).join('');
4
+ }
5
+ export function calculateProteinSequence({ cds, sequence, codonTable, }) {
6
+ const str = stitch(cds, sequence);
7
+ let protein = '';
8
+ for (let i = 0; i < str.length; i += 3) {
9
+ // use & symbol for undefined codon, or partial slice
10
+ protein += codonTable[str.slice(i, i + 3)] || '&';
11
+ }
12
+ return protein;
13
+ }
14
+ export function revlist(list, seqlen) {
15
+ return list
16
+ .map(sub => ({
17
+ ...sub,
18
+ start: seqlen - sub.end,
19
+ end: seqlen - sub.start,
20
+ }))
21
+ .sort((a, b) => a.start - b.start);
22
+ }
23
+ // filter items if they have the same "ID" or location
24
+ function getItemId(feat) {
25
+ return `${feat.start}-${feat.end}`;
26
+ }
27
+ // filters if successive elements share same start/end
28
+ export function dedupe(list) {
29
+ return list.filter((item, pos, ary) => !pos || getItemId(item) !== getItemId(ary[pos - 1]));
30
+ }
31
+ export function getProteinSequence({ selectedTranscript, seq, }) {
32
+ // @ts-expect-error
33
+ const f = selectedTranscript.toJSON();
34
+ const cds = dedupe(f.subfeatures
35
+ .sort((a, b) => a.start - b.start)
36
+ .map(sub => ({
37
+ ...sub,
38
+ start: sub.start - f.start,
39
+ end: sub.end - f.start,
40
+ }))
41
+ .filter(f => f.type === 'CDS'));
42
+ return calculateProteinSequence({
43
+ cds: f.strand === -1 ? revlist(cds, seq.length) : cds,
44
+ sequence: f.strand === -1 ? revcom(seq) : seq,
45
+ codonTable: generateCodonTable(defaultCodonTable),
46
+ });
47
+ }
48
+ //# sourceMappingURL=calculateProteinSequence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculateProteinSequence.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NewNCBIBlastQuery/calculateProteinSequence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import NcbiBlastPanel from './NcbiBlastPanel';
2
+ export default NcbiBlastPanel;
@@ -0,0 +1,3 @@
1
+ import NcbiBlastPanel from './NcbiBlastPanel';
2
+ export default NcbiBlastPanel;
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NewNCBIBlastQuery/index.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,eAAe,cAAc,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { Feature } from '@jbrowse/core/util';
2
+ import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
3
+ import { JBrowsePluginMsaViewModel } from '../../../MsaViewPanel/model';
4
+ export declare function ncbiBlastLaunchView({ newViewTitle, view, feature, }: {
5
+ newViewTitle: string;
6
+ view: LinearGenomeViewModel;
7
+ feature: Feature;
8
+ }): JBrowsePluginMsaViewModel;
@@ -0,0 +1,17 @@
1
+ import { getSession } from '@jbrowse/core/util';
2
+ export function ncbiBlastLaunchView({ newViewTitle, view, feature, }) {
3
+ return getSession(view).addView('MsaView', {
4
+ type: 'MsaView',
5
+ displayName: newViewTitle,
6
+ connectedViewId: view.id,
7
+ connectedFeature: feature.toJSON(),
8
+ treeAreaWidth: 250,
9
+ treeWidth: 100,
10
+ drawNodeBubbles: true,
11
+ labelsAlignRight: true,
12
+ colWidth: 10,
13
+ rowHeight: 12,
14
+ colorSchemeName: 'percent_identity_dynamic',
15
+ });
16
+ }
17
+ //# sourceMappingURL=ncbiBlastLaunchView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ncbiBlastLaunchView.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NewNCBIBlastQuery/ncbiBlastLaunchView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAKxD,MAAM,UAAU,mBAAmB,CAAC,EAClC,YAAY,EACZ,IAAI,EACJ,OAAO,GAKR;IACC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE;QACzC,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,YAAY;QACzB,eAAe,EAAE,IAAI,CAAC,EAAE;QACxB,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE;QAClC,aAAa,EAAE,GAAG;QAClB,SAAS,EAAE,GAAG;QACd,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,IAAI;QACtB,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,eAAe,EAAE,0BAA0B;KAC5C,CAA8B,CAAA;AACjC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Feature } from '@jbrowse/core/util';
2
+ export interface SeqState {
3
+ seq: string;
4
+ upstream?: string;
5
+ downstream?: string;
6
+ }
7
+ export interface ErrorState {
8
+ error: string;
9
+ }
10
+ export declare function useFeatureSequence({ view, feature, upDownBp, forceLoad, }: {
11
+ view: {
12
+ assemblyNames?: string[];
13
+ } | undefined;
14
+ feature: Feature;
15
+ upDownBp?: number;
16
+ forceLoad?: boolean;
17
+ }): {
18
+ sequence: SeqState | ErrorState | undefined;
19
+ error: unknown;
20
+ };
@@ -0,0 +1,64 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { getSession } from '@jbrowse/core/util';
3
+ import { getConf } from '@jbrowse/core/configuration';
4
+ const BPLIMIT = 500_000;
5
+ export function useFeatureSequence({ view, feature, upDownBp = 0, forceLoad = true, }) {
6
+ const [sequence, setSequence] = useState();
7
+ const [error, setError] = useState();
8
+ useEffect(() => {
9
+ if (view) {
10
+ const { assemblyManager, rpcManager } = getSession(view);
11
+ const [assemblyName] = view?.assemblyNames || [];
12
+ async function fetchSeq(start, end, refName) {
13
+ const assembly = await assemblyManager.waitForAssembly(assemblyName);
14
+ if (!assembly) {
15
+ throw new Error('assembly not found');
16
+ }
17
+ const sessionId = 'getSequence';
18
+ const feats = await rpcManager.call(sessionId, 'CoreGetFeatures', {
19
+ adapterConfig: getConf(assembly, ['sequence', 'adapter']),
20
+ sessionId,
21
+ regions: [
22
+ {
23
+ start,
24
+ end,
25
+ refName: assembly.getCanonicalRefName(refName),
26
+ assemblyName,
27
+ },
28
+ ],
29
+ });
30
+ const [feat] = feats;
31
+ return feat?.get('seq') || '';
32
+ }
33
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
34
+ ;
35
+ (async () => {
36
+ try {
37
+ setError(undefined);
38
+ setSequence(undefined);
39
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
+ const { start, end, refName } = feature.toJSON();
41
+ if (!forceLoad && end - start > BPLIMIT) {
42
+ setSequence({
43
+ error: `Genomic sequence larger than ${BPLIMIT}bp, use "force load" button to display`,
44
+ });
45
+ }
46
+ else {
47
+ const b = start - upDownBp;
48
+ const e = end + upDownBp;
49
+ const seq = await fetchSeq(start, end, refName);
50
+ const up = await fetchSeq(Math.max(0, b), start, refName);
51
+ const down = await fetchSeq(end, e, refName);
52
+ setSequence({ seq, upstream: up, downstream: down });
53
+ }
54
+ }
55
+ catch (e) {
56
+ console.error(e);
57
+ setError(e);
58
+ }
59
+ })();
60
+ }
61
+ }, [feature, view, upDownBp, forceLoad]);
62
+ return { sequence, error };
63
+ }
64
+ //# sourceMappingURL=useFeatureSequence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFeatureSequence.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NewNCBIBlastQuery/useFeatureSequence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function makeId(h: {
2
+ accession: string;
3
+ sciname: string;
4
+ }): string;
5
+ export declare function strip(s: string): string;
@@ -0,0 +1,7 @@
1
+ export function makeId(h) {
2
+ return `${h.accession}-${h.sciname.replaceAll(' ', '_')}`;
3
+ }
4
+ export function strip(s) {
5
+ return s.replace('-', '');
6
+ }
7
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NewNCBIBlastQuery/util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,MAAM,CAAC,CAAyC;IAC9D,OAAO,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAA;AAC3D,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { AbstractTrackModel, Feature } from '@jbrowse/core/util';
3
+ declare const PreLoadedMSA: ({ model, feature, handleClose, }: {
4
+ model: AbstractTrackModel;
5
+ feature: Feature;
6
+ handleClose: () => void;
7
+ }) => React.JSX.Element;
8
+ export default PreLoadedMSA;