jbrowse-plugin-msaview 5.14.0 → 5.15.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 (259) hide show
  1. package/dist/AddHighlightModel/index.js +1 -0
  2. package/dist/BgzipFastaMsaAdapter/configSchema.d.ts +1 -1
  3. package/dist/LaunchMsaView/components/BlastQuery/BlastMethodSelector.d.ts +3 -2
  4. package/dist/LaunchMsaView/components/BlastQuery/BlastMethodSelector.js +4 -2
  5. package/dist/LaunchMsaView/components/BlastQuery/BlastPanel.d.ts +3 -3
  6. package/dist/LaunchMsaView/components/BlastQuery/BlastPanel.js +4 -2
  7. package/dist/LaunchMsaView/components/BlastQuery/BlastSettingsDialog.d.ts +3 -2
  8. package/dist/LaunchMsaView/components/BlastQuery/BlastSettingsDialog.js +4 -2
  9. package/dist/LaunchMsaView/components/BlastQuery/MsaAlgorithmSelect.d.ts +3 -2
  10. package/dist/LaunchMsaView/components/BlastQuery/MsaAlgorithmSelect.js +4 -2
  11. package/dist/LaunchMsaView/components/HelpButton.d.ts +2 -1
  12. package/dist/LaunchMsaView/components/HelpButton.js +4 -2
  13. package/dist/LaunchMsaView/components/HelpDialog.d.ts +3 -2
  14. package/dist/LaunchMsaView/components/HelpDialog.js +4 -2
  15. package/dist/LaunchMsaView/components/LaunchMsaViewDialog.d.ts +3 -2
  16. package/dist/LaunchMsaView/components/LaunchMsaViewDialog.js +4 -2
  17. package/dist/LaunchMsaView/components/LaunchPanelContent.d.ts +3 -2
  18. package/dist/LaunchMsaView/components/LaunchPanelContent.js +4 -2
  19. package/dist/LaunchMsaView/components/OrthologQuery/OrthologSourceSelect.d.ts +3 -2
  20. package/dist/LaunchMsaView/components/OrthologQuery/OrthologSourceSelect.js +4 -2
  21. package/dist/LaunchMsaView/components/OrthologQuery/QuerySpeciesSelect.d.ts +3 -2
  22. package/dist/LaunchMsaView/components/OrthologQuery/QuerySpeciesSelect.js +4 -2
  23. package/dist/LaunchMsaView/components/PreLoadedMSA/types.d.ts +4 -1
  24. package/dist/LaunchMsaView/components/PreLoadedMSA/types.js +5 -1
  25. package/dist/LaunchMsaView/components/QueryRowSelector.d.ts +3 -2
  26. package/dist/LaunchMsaView/components/QueryRowSelector.js +4 -2
  27. package/dist/LaunchMsaView/components/SequenceStatus.d.ts +3 -2
  28. package/dist/LaunchMsaView/components/SequenceStatus.js +4 -2
  29. package/dist/LaunchMsaView/components/SubmitCancelActions.d.ts +3 -2
  30. package/dist/LaunchMsaView/components/SubmitCancelActions.js +6 -4
  31. package/dist/LaunchMsaView/components/TabPanel.d.ts +3 -2
  32. package/dist/LaunchMsaView/components/TabPanel.js +4 -2
  33. package/dist/LaunchMsaView/components/TabPanel.test.js +5 -4
  34. package/dist/LaunchMsaView/components/TranscriptSelector.d.ts +3 -2
  35. package/dist/LaunchMsaView/components/TranscriptSelector.js +4 -2
  36. package/dist/LaunchMsaView/components/fetchSeq.d.ts +2 -1
  37. package/dist/LaunchMsaView/components/fetchSeq.js +9 -3
  38. package/dist/LaunchMsaView/components/launchPlacement.d.ts +2 -2
  39. package/dist/LaunchMsaView/components/launchPlacement.js +3 -2
  40. package/dist/LaunchMsaView/components/useFeatureSequence.js +2 -1
  41. package/dist/MsaViewPanel/components/JobLink.d.ts +2 -2
  42. package/dist/MsaViewPanel/components/JobLink.js +3 -2
  43. package/dist/MsaViewPanel/components/MsaViewPanel.js +3 -14
  44. package/dist/MsaViewPanel/connectedDomains.js +1 -1
  45. package/dist/MsaViewPanel/isLaunching.d.ts +22 -0
  46. package/dist/MsaViewPanel/isLaunching.js +15 -0
  47. package/dist/MsaViewPanel/launchAutoruns.test.js +1 -0
  48. package/dist/MsaViewPanel/model.d.ts +7 -0
  49. package/dist/MsaViewPanel/model.js +13 -0
  50. package/dist/MsaViewPanel/model.test.js +25 -0
  51. package/dist/MsaViewPanel/resolveConnectedTranscript.d.ts +3 -1
  52. package/dist/MsaViewPanel/resolveConnectedTranscript.js +27 -13
  53. package/dist/chunks/AboutDialog-UIDZTTTE.js +2 -0
  54. package/dist/chunks/{AboutDialog-HJKHE6X5.js.map → AboutDialog-UIDZTTTE.js.map} +3 -3
  55. package/dist/chunks/AnnotationFileDialog-TFIHQACD.js +2 -0
  56. package/dist/chunks/{AnnotationFileDialog-MGUAGUEN.js.map → AnnotationFileDialog-TFIHQACD.js.map} +3 -3
  57. package/dist/chunks/BgzipFastaMsaAdapter-LXM6BNRP.js +4 -0
  58. package/dist/chunks/BgzipFastaMsaAdapter-LXM6BNRP.js.map +7 -0
  59. package/dist/chunks/ExportSVGDialog-AYE4AXS3.js +2 -0
  60. package/dist/chunks/{ExportSVGDialog-JNEIAPDD.js.map → ExportSVGDialog-AYE4AXS3.js.map} +3 -3
  61. package/dist/chunks/FeatureDialog-XHNPLPWX.js +2 -0
  62. package/dist/chunks/{FeatureDialog-36U3KHHS.js.map → FeatureDialog-XHNPLPWX.js.map} +3 -3
  63. package/dist/chunks/GapThresholdDialog-MNNNXRMM.js +2 -0
  64. package/dist/chunks/GapThresholdDialog-MNNNXRMM.js.map +7 -0
  65. package/dist/chunks/GoToDialog-U3TQYXIE.js +2 -0
  66. package/dist/chunks/{GoToDialog-HYG2ADFF.js.map → GoToDialog-U3TQYXIE.js.map} +3 -3
  67. package/dist/chunks/HelpDialog-3IR65NL3.js +2 -0
  68. package/dist/chunks/HelpDialog-3IR65NL3.js.map +7 -0
  69. package/dist/chunks/HelpDialog-QS4T2P3K.js +2 -0
  70. package/dist/chunks/{HelpDialog-5WXA5QYK.js.map → HelpDialog-QS4T2P3K.js.map} +3 -3
  71. package/dist/chunks/LaunchMsaViewDialog-CVUQSMRL.js +5 -0
  72. package/dist/chunks/LaunchMsaViewDialog-CVUQSMRL.js.map +7 -0
  73. package/dist/chunks/MetadataDialog-BC6EUBOJ.js +2 -0
  74. package/dist/chunks/MetadataDialog-BC6EUBOJ.js.map +7 -0
  75. package/dist/chunks/MsaViewPanel-UWT4FWLE.js +2 -0
  76. package/dist/chunks/MsaViewPanel-UWT4FWLE.js.map +7 -0
  77. package/dist/chunks/TrackInfoDialog-UCAJUIKI.js +2 -0
  78. package/dist/chunks/{TrackInfoDialog-WJAJNV5S.js.map → TrackInfoDialog-UCAJUIKI.js.map} +3 -3
  79. package/dist/chunks/TreeNodeInfoDialog-W6L2FDRH.js +2 -0
  80. package/dist/chunks/{TreeNodeInfoDialog-JATVC2AB.js.map → TreeNodeInfoDialog-W6L2FDRH.js.map} +3 -3
  81. package/dist/chunks/{chunk-4IRL4OLU.js → chunk-27DJABXI.js} +1 -1
  82. package/dist/chunks/{chunk-4IRL4OLU.js.map → chunk-27DJABXI.js.map} +1 -1
  83. package/dist/chunks/chunk-33ER5TMH.js +2 -0
  84. package/dist/chunks/chunk-33ER5TMH.js.map +7 -0
  85. package/dist/chunks/chunk-3KTCIF2L.js +2 -0
  86. package/dist/chunks/chunk-3KTCIF2L.js.map +7 -0
  87. package/dist/chunks/chunk-7JFWQZNK.js +2 -0
  88. package/dist/chunks/{chunk-GFANDTQR.js.map → chunk-7JFWQZNK.js.map} +3 -3
  89. package/dist/chunks/chunk-7WGSBPHS.js +6 -0
  90. package/dist/chunks/{chunk-6GRHBYHB.js.map → chunk-7WGSBPHS.js.map} +2 -2
  91. package/dist/chunks/chunk-AO3YMCKS.js +164 -0
  92. package/dist/chunks/chunk-AO3YMCKS.js.map +7 -0
  93. package/dist/chunks/chunk-AOTVWTUV.js +2 -0
  94. package/dist/chunks/chunk-AOTVWTUV.js.map +7 -0
  95. package/dist/chunks/chunk-BKGWP5O6.js +2 -0
  96. package/dist/chunks/chunk-BKGWP5O6.js.map +7 -0
  97. package/dist/chunks/chunk-ECXGXFKO.js +2 -0
  98. package/dist/chunks/chunk-ECXGXFKO.js.map +7 -0
  99. package/dist/chunks/chunk-EXFKF6XR.js +2 -0
  100. package/dist/chunks/chunk-EXFKF6XR.js.map +7 -0
  101. package/dist/chunks/{chunk-YTIKINP5.js → chunk-FYL5SHOE.js} +1 -1
  102. package/dist/chunks/{chunk-YTIKINP5.js.map → chunk-FYL5SHOE.js.map} +1 -1
  103. package/dist/chunks/chunk-KKFBYJZN.js +2 -0
  104. package/dist/chunks/{chunk-NRAUA3EX.js.map → chunk-KKFBYJZN.js.map} +3 -3
  105. package/dist/chunks/chunk-KVMUXFPB.js +2 -0
  106. package/dist/chunks/chunk-L75R2CI3.js +6 -0
  107. package/dist/chunks/{chunk-5YOLE75H.js.map → chunk-L75R2CI3.js.map} +3 -3
  108. package/dist/chunks/chunk-LXN7NIHB.js +2 -0
  109. package/dist/chunks/chunk-LXN7NIHB.js.map +7 -0
  110. package/dist/chunks/chunk-MLATYHL2.js +2 -0
  111. package/dist/chunks/chunk-MLATYHL2.js.map +7 -0
  112. package/dist/chunks/chunk-MXZ7GONI.js +2 -0
  113. package/dist/chunks/chunk-MXZ7GONI.js.map +7 -0
  114. package/dist/chunks/chunk-NDUZUXDJ.js +2 -0
  115. package/dist/chunks/chunk-NDUZUXDJ.js.map +7 -0
  116. package/dist/chunks/chunk-PFO3G4CM.js +2 -0
  117. package/dist/chunks/chunk-PFO3G4CM.js.map +7 -0
  118. package/dist/chunks/chunk-QBRNXRNU.js +2 -0
  119. package/dist/chunks/chunk-QBRNXRNU.js.map +7 -0
  120. package/dist/chunks/chunk-TEYYBCMF.js +2 -0
  121. package/dist/chunks/chunk-TEYYBCMF.js.map +7 -0
  122. package/dist/chunks/chunk-TVAJGJXO.js +2 -0
  123. package/dist/chunks/chunk-TVAJGJXO.js.map +7 -0
  124. package/dist/chunks/chunk-TVOPZHTJ.js +2 -0
  125. package/dist/chunks/{chunk-JYQQZRPF.js.map → chunk-TVOPZHTJ.js.map} +1 -1
  126. package/dist/chunks/{chunk-IBVOKJV3.js → chunk-UUDUJ6ZF.js} +1 -1
  127. package/dist/chunks/{chunk-IBVOKJV3.js.map → chunk-UUDUJ6ZF.js.map} +1 -1
  128. package/dist/chunks/chunk-YOLY6H5C.js +2 -0
  129. package/dist/chunks/chunk-YOLY6H5C.js.map +7 -0
  130. package/dist/chunks/chunk-YRZUKVPZ.js +3 -0
  131. package/dist/chunks/chunk-YRZUKVPZ.js.map +7 -0
  132. package/dist/chunks/dist-2VELCAWU.js +2 -0
  133. package/dist/chunks/{dist-J332RCWL.js → dist-34WACJJR.js} +2 -2
  134. package/dist/chunks/model-JKWKYCBL.js +12 -0
  135. package/dist/chunks/model-JKWKYCBL.js.map +7 -0
  136. package/dist/chunks/renderToSvg-VO23YN7B.js +2 -0
  137. package/dist/components/ExternalLink.d.ts +2 -1
  138. package/dist/components/ExternalLink.js +4 -2
  139. package/dist/components/ReadOnlyTextField2.d.ts +3 -2
  140. package/dist/components/ReadOnlyTextField2.js +4 -2
  141. package/dist/components/TextField2.d.ts +1 -1
  142. package/dist/components/TextField2.js +3 -2
  143. package/dist/index.d.ts +3 -3
  144. package/dist/jbrowse-plugin-msaview.esm.js +2 -2
  145. package/dist/jbrowse-plugin-msaview.esm.js.map +4 -4
  146. package/dist/readinessConformance.test.d.ts +1 -0
  147. package/dist/readinessConformance.test.js +51 -0
  148. package/dist/utils/ncbiOrthologs.test.js +2 -2
  149. package/dist/utils/taxonomyNamesAbort.test.js +2 -2
  150. package/dist/utils/unirefHomologs.d.ts +1 -2
  151. package/dist/utils/unirefHomologs.js +1 -2
  152. package/dist/version.d.ts +1 -1
  153. package/dist/version.js +1 -1
  154. package/package.json +10 -9
  155. package/src/AddHighlightModel/index.tsx +1 -0
  156. package/src/LaunchMsaView/components/BlastQuery/BlastMethodSelector.tsx +5 -2
  157. package/src/LaunchMsaView/components/BlastQuery/BlastPanel.tsx +5 -2
  158. package/src/LaunchMsaView/components/BlastQuery/BlastSettingsDialog.tsx +5 -2
  159. package/src/LaunchMsaView/components/BlastQuery/MsaAlgorithmSelect.tsx +5 -2
  160. package/src/LaunchMsaView/components/HelpButton.tsx +5 -2
  161. package/src/LaunchMsaView/components/HelpDialog.tsx +5 -2
  162. package/src/LaunchMsaView/components/LaunchMsaViewDialog.tsx +5 -2
  163. package/src/LaunchMsaView/components/LaunchPanelContent.tsx +5 -2
  164. package/src/LaunchMsaView/components/OrthologQuery/OrthologSourceSelect.tsx +5 -2
  165. package/src/LaunchMsaView/components/OrthologQuery/QuerySpeciesSelect.tsx +6 -2
  166. package/src/LaunchMsaView/components/PreLoadedMSA/types.ts +9 -2
  167. package/src/LaunchMsaView/components/QueryRowSelector.tsx +5 -2
  168. package/src/LaunchMsaView/components/SequenceStatus.tsx +5 -2
  169. package/src/LaunchMsaView/components/SubmitCancelActions.tsx +7 -4
  170. package/src/LaunchMsaView/components/TabPanel.test.tsx +5 -4
  171. package/src/LaunchMsaView/components/TabPanel.tsx +6 -2
  172. package/src/LaunchMsaView/components/TranscriptSelector.tsx +5 -2
  173. package/src/LaunchMsaView/components/fetchSeq.ts +10 -2
  174. package/src/LaunchMsaView/components/launchPlacement.tsx +16 -12
  175. package/src/LaunchMsaView/components/useFeatureSequence.ts +2 -1
  176. package/src/MsaViewPanel/components/JobLink.tsx +3 -2
  177. package/src/MsaViewPanel/components/MsaViewPanel.tsx +3 -14
  178. package/src/MsaViewPanel/connectedDomains.ts +1 -1
  179. package/src/MsaViewPanel/isLaunching.ts +27 -0
  180. package/src/MsaViewPanel/launchAutoruns.test.ts +1 -0
  181. package/src/MsaViewPanel/model.test.ts +28 -0
  182. package/src/MsaViewPanel/model.ts +15 -0
  183. package/src/MsaViewPanel/resolveConnectedTranscript.ts +44 -16
  184. package/src/components/ExternalLink.tsx +5 -2
  185. package/src/components/ReadOnlyTextField2.tsx +9 -2
  186. package/src/components/TextField2.tsx +6 -2
  187. package/src/readinessConformance.test.ts +59 -0
  188. package/src/utils/ncbiOrthologs.test.ts +2 -2
  189. package/src/utils/taxonomyNamesAbort.test.ts +2 -2
  190. package/src/utils/unirefHomologs.ts +5 -4
  191. package/src/version.ts +1 -1
  192. package/dist/chunks/AboutDialog-HJKHE6X5.js +0 -2
  193. package/dist/chunks/AnnotationFileDialog-MGUAGUEN.js +0 -2
  194. package/dist/chunks/BgzipFastaMsaAdapter-WWIGI57O.js +0 -4
  195. package/dist/chunks/BgzipFastaMsaAdapter-WWIGI57O.js.map +0 -7
  196. package/dist/chunks/ExportSVGDialog-JNEIAPDD.js +0 -2
  197. package/dist/chunks/FeatureDialog-36U3KHHS.js +0 -2
  198. package/dist/chunks/GapThresholdDialog-MMQTM2ZY.js +0 -2
  199. package/dist/chunks/GapThresholdDialog-MMQTM2ZY.js.map +0 -7
  200. package/dist/chunks/GoToDialog-HYG2ADFF.js +0 -2
  201. package/dist/chunks/HelpDialog-5WXA5QYK.js +0 -2
  202. package/dist/chunks/HelpDialog-DF4Y536X.js +0 -2
  203. package/dist/chunks/HelpDialog-DF4Y536X.js.map +0 -7
  204. package/dist/chunks/LaunchMsaViewDialog-GR4BB3W2.js +0 -5
  205. package/dist/chunks/LaunchMsaViewDialog-GR4BB3W2.js.map +0 -7
  206. package/dist/chunks/MetadataDialog-QQNNQELM.js +0 -2
  207. package/dist/chunks/MetadataDialog-QQNNQELM.js.map +0 -7
  208. package/dist/chunks/MsaViewPanel-4PHVMXIL.js +0 -2
  209. package/dist/chunks/MsaViewPanel-4PHVMXIL.js.map +0 -7
  210. package/dist/chunks/TrackInfoDialog-WJAJNV5S.js +0 -2
  211. package/dist/chunks/TreeNodeInfoDialog-JATVC2AB.js +0 -2
  212. package/dist/chunks/chunk-2IWD4OO4.js +0 -2
  213. package/dist/chunks/chunk-2IWD4OO4.js.map +0 -7
  214. package/dist/chunks/chunk-5YOLE75H.js +0 -6
  215. package/dist/chunks/chunk-6GRHBYHB.js +0 -6
  216. package/dist/chunks/chunk-BX4Z274Q.js +0 -2
  217. package/dist/chunks/chunk-BX4Z274Q.js.map +0 -7
  218. package/dist/chunks/chunk-CVLB4VFP.js +0 -2
  219. package/dist/chunks/chunk-CVLB4VFP.js.map +0 -7
  220. package/dist/chunks/chunk-DNFD5II2.js +0 -2
  221. package/dist/chunks/chunk-DNFD5II2.js.map +0 -7
  222. package/dist/chunks/chunk-DYDEKAIN.js +0 -3
  223. package/dist/chunks/chunk-DYDEKAIN.js.map +0 -7
  224. package/dist/chunks/chunk-EKTRLQV7.js +0 -2
  225. package/dist/chunks/chunk-EKTRLQV7.js.map +0 -7
  226. package/dist/chunks/chunk-FCWXYIFC.js +0 -2
  227. package/dist/chunks/chunk-FCWXYIFC.js.map +0 -7
  228. package/dist/chunks/chunk-FY3BTKY4.js +0 -2
  229. package/dist/chunks/chunk-GFANDTQR.js +0 -2
  230. package/dist/chunks/chunk-J6KYLXRD.js +0 -2
  231. package/dist/chunks/chunk-J6KYLXRD.js.map +0 -7
  232. package/dist/chunks/chunk-JFL3LJPO.js +0 -2
  233. package/dist/chunks/chunk-JFL3LJPO.js.map +0 -7
  234. package/dist/chunks/chunk-JYQQZRPF.js +0 -2
  235. package/dist/chunks/chunk-KYQ2SO7B.js +0 -2
  236. package/dist/chunks/chunk-KYQ2SO7B.js.map +0 -7
  237. package/dist/chunks/chunk-M2AAIXY5.js +0 -2
  238. package/dist/chunks/chunk-M2AAIXY5.js.map +0 -7
  239. package/dist/chunks/chunk-MDZDMDUF.js +0 -2
  240. package/dist/chunks/chunk-MDZDMDUF.js.map +0 -7
  241. package/dist/chunks/chunk-NRAUA3EX.js +0 -2
  242. package/dist/chunks/chunk-NSASZ5FM.js +0 -2
  243. package/dist/chunks/chunk-NSASZ5FM.js.map +0 -7
  244. package/dist/chunks/chunk-QWXSEUZI.js +0 -2
  245. package/dist/chunks/chunk-QWXSEUZI.js.map +0 -7
  246. package/dist/chunks/chunk-RTIGCYCA.js +0 -164
  247. package/dist/chunks/chunk-RTIGCYCA.js.map +0 -7
  248. package/dist/chunks/chunk-W5VCM3IV.js +0 -2
  249. package/dist/chunks/chunk-W5VCM3IV.js.map +0 -7
  250. package/dist/chunks/chunk-Y7M36762.js +0 -2
  251. package/dist/chunks/chunk-Y7M36762.js.map +0 -7
  252. package/dist/chunks/dist-KSNV45ZL.js +0 -2
  253. package/dist/chunks/model-ZXS5732V.js +0 -12
  254. package/dist/chunks/model-ZXS5732V.js.map +0 -7
  255. package/dist/chunks/renderToSvg-EBTD7XU6.js +0 -2
  256. /package/dist/chunks/{chunk-FY3BTKY4.js.map → chunk-KVMUXFPB.js.map} +0 -0
  257. /package/dist/chunks/{dist-KSNV45ZL.js.map → dist-2VELCAWU.js.map} +0 -0
  258. /package/dist/chunks/{dist-J332RCWL.js.map → dist-34WACJJR.js.map} +0 -0
  259. /package/dist/chunks/{renderToSvg-EBTD7XU6.js.map → renderToSvg-VO23YN7B.js.map} +0 -0
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { getSession } from '@jbrowse/core/util';
3
3
  import { isMsaView } from '../MsaViewPanel/isMsaView';
4
4
  import HighlightComponents from './HighlightComponents';
5
+ // eslint-disable-next-line no-restricted-syntax -- a plugin install step, not a component; the element it returns renders inside the genome view's observer
5
6
  export default function AddHighlightComponentsModelF(pluginManager) {
6
7
  pluginManager.contributeToExtensionPoint('LinearGenomeView-TracksContainerComponent', ({ model }) => {
7
8
  const { views } = getSession(model);
@@ -11,4 +11,4 @@ export default function configSchemaF(pluginManager: PluginManager): import("@jb
11
11
  } & {
12
12
  defaultValue: string;
13
13
  };
14
- }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<any, undefined, undefined, import("@jbrowse/core/configuration").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>;
14
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<any, undefined, undefined, import("@jbrowse/core/configuration").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>, any>>;
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import type { BlastLookupMethod } from './BlastPanel';
3
- export default function BlastMethodSelector({ lookupMethod, setLookupMethod, }: {
3
+ declare const BlastMethodSelector: ({ lookupMethod, setLookupMethod, }: {
4
4
  lookupMethod: BlastLookupMethod;
5
5
  setLookupMethod: (method: BlastLookupMethod) => void;
6
- }): React.JSX.Element;
6
+ }) => React.JSX.Element;
7
+ export default BlastMethodSelector;
@@ -1,10 +1,12 @@
1
1
  import React from 'react';
2
2
  import { FormControl, FormControlLabel, Radio, RadioGroup } from '@mui/material';
3
- export default function BlastMethodSelector({ lookupMethod, setLookupMethod, }) {
3
+ import { observer } from 'mobx-react';
4
+ const BlastMethodSelector = observer(function BlastMethodSelector({ lookupMethod, setLookupMethod, }) {
4
5
  return (React.createElement(FormControl, { component: "fieldset" },
5
6
  React.createElement(RadioGroup, { row: true, value: lookupMethod, onChange: event => {
6
7
  setLookupMethod(event.target.value);
7
8
  } },
8
9
  React.createElement(FormControlLabel, { value: "automatic", control: React.createElement(Radio, null), label: "Automatic" }),
9
10
  React.createElement(FormControlLabel, { value: "manual", control: React.createElement(Radio, null), label: "Manual" }))));
10
- }
11
+ });
12
+ export default BlastMethodSelector;
@@ -17,11 +17,11 @@ declare const panelMap: {
17
17
  }) => React.JSX.Element;
18
18
  };
19
19
  export type BlastLookupMethod = keyof typeof panelMap;
20
- export default function BlastPanel({ handleClose, model, feature, preferredTranscriptId, }: {
20
+ declare const BlastPanel: ({ handleClose, model, feature, preferredTranscriptId, }: {
21
21
  handleClose: () => void;
22
22
  model: AbstractTrackModel;
23
23
  feature: Feature;
24
24
  /** the isoform the user right-clicked, preselected in the picker */
25
25
  preferredTranscriptId?: string;
26
- }): React.JSX.Element;
27
- export {};
26
+ }) => React.JSX.Element;
27
+ export default BlastPanel;
@@ -1,6 +1,7 @@
1
1
  import React, { useState } from 'react';
2
2
  import SettingsIcon from '@mui/icons-material/Settings';
3
3
  import { IconButton, Tooltip } from '@mui/material';
4
+ import { observer } from 'mobx-react';
4
5
  import { makeStyles } from 'tss-react/mui';
5
6
  import { DEFAULT_EBI_EMAIL, EBI_EMAIL_STORAGE_KEY, } from '../../../utils/ebiJobDispatcher';
6
7
  import { useLocalStorage } from '../../../utils/useLocalStorage';
@@ -17,7 +18,7 @@ const panelMap = {
17
18
  automatic: BlastAutomaticPanel,
18
19
  manual: BlastManualPanel,
19
20
  };
20
- export default function BlastPanel({ handleClose, model, feature, preferredTranscriptId, }) {
21
+ const BlastPanel = observer(function BlastPanel({ handleClose, model, feature, preferredTranscriptId, }) {
21
22
  const [lookupMethod, setLookupMethod] = useState('automatic');
22
23
  const [ebiEmail, setEbiEmail] = useLocalStorage(EBI_EMAIL_STORAGE_KEY, DEFAULT_EBI_EMAIL);
23
24
  const [settingsOpen, setSettingsOpen] = useState(false);
@@ -37,4 +38,5 @@ export default function BlastPanel({ handleClose, model, feature, preferredTrans
37
38
  }
38
39
  setSettingsOpen(false);
39
40
  } })) : null));
40
- }
41
+ });
42
+ export default BlastPanel;
@@ -2,7 +2,8 @@ import React from 'react';
2
2
  export interface BlastSettings {
3
3
  ebiEmail: string;
4
4
  }
5
- export default function BlastSettingsDialog({ handleClose, ebiEmail, }: {
5
+ declare const BlastSettingsDialog: ({ handleClose, ebiEmail, }: {
6
6
  handleClose: (arg?: BlastSettings) => void;
7
7
  ebiEmail: string;
8
- }): React.JSX.Element;
8
+ }) => React.JSX.Element;
9
+ export default BlastSettingsDialog;
@@ -1,5 +1,6 @@
1
1
  import React, { useState } from 'react';
2
2
  import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography, } from '@mui/material';
3
+ import { observer } from 'mobx-react';
3
4
  import { makeStyles } from 'tss-react/mui';
4
5
  import TextField2 from '../../../components/TextField2';
5
6
  import { DEFAULT_EBI_EMAIL } from '../../../utils/ebiJobDispatcher';
@@ -11,7 +12,7 @@ const useStyles = makeStyles()({
11
12
  marginBottom: 8,
12
13
  },
13
14
  });
14
- export default function BlastSettingsDialog({ handleClose, ebiEmail, }) {
15
+ const BlastSettingsDialog = observer(function BlastSettingsDialog({ handleClose, ebiEmail, }) {
15
16
  const { classes } = useStyles();
16
17
  const [tempEbiEmail, setTempEbiEmail] = useState(ebiEmail);
17
18
  return (React.createElement(Dialog, { open: true, maxWidth: "lg", onClose: () => {
@@ -33,4 +34,5 @@ export default function BlastSettingsDialog({ handleClose, ebiEmail, }) {
33
34
  React.createElement(Button, { color: "primary", variant: "contained", onClick: () => {
34
35
  handleClose({ ebiEmail: tempEbiEmail });
35
36
  } }, "Save"))));
36
- }
37
+ });
38
+ export default BlastSettingsDialog;
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
2
  import type { MsaAlgorithm } from './consts';
3
- export default function MsaAlgorithmSelect({ value, onChange, className, }: {
3
+ declare const MsaAlgorithmSelect: ({ value, onChange, className, }: {
4
4
  value: MsaAlgorithm;
5
5
  onChange: (val: MsaAlgorithm) => void;
6
6
  className?: string;
7
- }): React.JSX.Element;
7
+ }) => React.JSX.Element;
8
+ export default MsaAlgorithmSelect;
@@ -1,11 +1,13 @@
1
1
  import React from 'react';
2
2
  import { MenuItem } from '@mui/material';
3
+ import { observer } from 'mobx-react';
3
4
  import TextField2 from '../../../components/TextField2';
4
5
  import { msaAlgorithmLabels, msaAlgorithms } from './consts';
5
- export default function MsaAlgorithmSelect({ value, onChange, className, }) {
6
+ const MsaAlgorithmSelect = observer(function MsaAlgorithmSelect({ value, onChange, className, }) {
6
7
  return (React.createElement(TextField2, { variant: "outlined", label: "MSA Algorithm", className: className, select: true, value: value, helperText: value === 'browser'
7
8
  ? 'no EBI job; rows aligned to the query'
8
9
  : undefined, onChange: event => {
9
10
  onChange(event.target.value);
10
11
  } }, msaAlgorithms.map(val => (React.createElement(MenuItem, { value: val, key: val }, msaAlgorithmLabels[val])))));
11
- }
12
+ });
13
+ export default MsaAlgorithmSelect;
@@ -1,2 +1,3 @@
1
1
  import React from 'react';
2
- export default function HelpButton(): React.JSX.Element;
2
+ declare const HelpButton: () => React.JSX.Element;
3
+ export default HelpButton;
@@ -1,8 +1,9 @@
1
1
  import React, { Suspense, lazy, useState } from 'react';
2
2
  import Help from '@mui/icons-material/Help';
3
3
  import { IconButton, Tooltip } from '@mui/material';
4
+ import { observer } from 'mobx-react';
4
5
  const HelpDialog = lazy(() => import('./HelpDialog'));
5
- export default function HelpButton() {
6
+ const HelpButton = observer(function HelpButton() {
6
7
  const [show, setShow] = useState(false);
7
8
  return (React.createElement(React.Fragment, null,
8
9
  React.createElement(Tooltip, { title: "What each tab does" },
@@ -14,4 +15,5 @@ export default function HelpButton() {
14
15
  React.createElement(HelpDialog, { handleClose: () => {
15
16
  setShow(false);
16
17
  } }))) : null));
17
- }
18
+ });
19
+ export default HelpButton;
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
- export default function HelpDialog({ handleClose, }: {
2
+ declare const HelpDialog: ({ handleClose, }: {
3
3
  handleClose: () => void;
4
- }): React.JSX.Element;
4
+ }) => React.JSX.Element;
5
+ export default HelpDialog;
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
2
  import { Dialog } from '@jbrowse/core/ui';
3
3
  import { Button, DialogActions, DialogContent, Divider, Typography, } from '@mui/material';
4
- export default function HelpDialog({ handleClose, }) {
4
+ import { observer } from 'mobx-react';
5
+ const HelpDialog = observer(function HelpDialog({ handleClose, }) {
5
6
  return (React.createElement(Dialog, { open: true, maxWidth: "md", onClose: handleClose, title: "Launching an MSA" },
6
7
  React.createElement(DialogContent, null,
7
8
  React.createElement(Typography, { gutterBottom: true }, "Every tab aligns the same thing: the protein the selected transcript translates to. That transcript is the query row, which is what ties alignment columns back to codons in the genome view \u2014 hovering one highlights the other, and clicking navigates."),
@@ -15,4 +16,5 @@ export default function HelpDialog({ handleClose, }) {
15
16
  React.createElement(Divider, null),
16
17
  React.createElement(DialogActions, null,
17
18
  React.createElement(Button, { onClick: handleClose, color: "primary" }, "Close"))));
18
- }
19
+ });
20
+ export default HelpDialog;
@@ -1,9 +1,10 @@
1
1
  import React from 'react';
2
2
  import type { AbstractTrackModel, Feature } from '@jbrowse/core/util';
3
- export default function LaunchMsaViewDialog({ handleClose, feature, model, preferredTranscriptId, }: {
3
+ declare const LaunchMsaViewDialog: ({ handleClose, feature, model, preferredTranscriptId, }: {
4
4
  handleClose: () => void;
5
5
  feature: Feature;
6
6
  model: AbstractTrackModel;
7
7
  /** the isoform the right-click landed on, when this opened on its gene */
8
8
  preferredTranscriptId?: string;
9
- }): React.JSX.Element;
9
+ }) => React.JSX.Element;
10
+ export default LaunchMsaViewDialog;
@@ -2,6 +2,7 @@ import React, { useState } from 'react';
2
2
  import { Dialog } from '@jbrowse/core/ui';
3
3
  import { getSession } from '@jbrowse/core/util';
4
4
  import { Tab, Tabs } from '@mui/material';
5
+ import { observer } from 'mobx-react';
5
6
  import BlastPanel from './BlastQuery/BlastPanel';
6
7
  import HelpButton from './HelpButton';
7
8
  import ManualMSALoader from './ManualMSALoader/ManualMSALoader';
@@ -10,7 +11,7 @@ import PreLoadedMSA from './PreLoadedMSA/PreLoadedMSADataPanel';
10
11
  import { readMsaDatasets } from './PreLoadedMSA/types';
11
12
  import TabPanel from './TabPanel';
12
13
  import { LaunchPlacementProvider } from './launchPlacement';
13
- export default function LaunchMsaViewDialog({ handleClose, feature, model, preferredTranscriptId, }) {
14
+ const LaunchMsaViewDialog = observer(function LaunchMsaViewDialog({ handleClose, feature, model, preferredTranscriptId, }) {
14
15
  const session = getSession(model);
15
16
  const datasets = readMsaDatasets(session.jbrowse);
16
17
  const hasPreloadedDatasets = !!datasets?.length;
@@ -36,4 +37,5 @@ export default function LaunchMsaViewDialog({ handleClose, feature, model, prefe
36
37
  React.createElement(PreLoadedMSA, { model: model, feature: feature, handleClose: handleClose, preferredTranscriptId: preferredTranscriptId }))) : null,
37
38
  React.createElement(TabPanel, { value: value, index: "manual_msa" },
38
39
  React.createElement(ManualMSALoader, { model: model, feature: feature, handleClose: handleClose, preferredTranscriptId: preferredTranscriptId })))));
39
- }
40
+ });
41
+ export default LaunchMsaViewDialog;
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
- export default function LaunchPanelContent({ error, children, }: {
2
+ declare const LaunchPanelContent: ({ error, children, }: {
3
3
  error?: unknown;
4
4
  children: React.ReactNode;
5
- }): React.JSX.Element;
5
+ }) => React.JSX.Element;
6
+ export default LaunchPanelContent;
@@ -1,15 +1,17 @@
1
1
  import React from 'react';
2
2
  import { ErrorMessage } from '@jbrowse/core/ui';
3
3
  import { DialogContent } from '@mui/material';
4
+ import { observer } from 'mobx-react';
4
5
  import { makeStyles } from 'tss-react/mui';
5
6
  const useStyles = makeStyles()({
6
7
  dialogContent: {
7
8
  width: '80em',
8
9
  },
9
10
  });
10
- export default function LaunchPanelContent({ error, children, }) {
11
+ const LaunchPanelContent = observer(function LaunchPanelContent({ error, children, }) {
11
12
  const { classes } = useStyles();
12
13
  return (React.createElement(DialogContent, { className: classes.dialogContent },
13
14
  error ? React.createElement(ErrorMessage, { error: error }) : null,
14
15
  children));
15
- }
16
+ });
17
+ export default LaunchPanelContent;
@@ -2,8 +2,9 @@ import React from 'react';
2
2
  import type { OrthologSource } from '../../../MsaViewPanel/model';
3
3
  export declare function validOrthologSource(stored: unknown): OrthologSource;
4
4
  export declare function useStoredOrthologSource(): readonly ["ncbi" | "panther" | "uniref", (source: OrthologSource) => void];
5
- export default function OrthologSourceSelect({ value, onChange, className, }: {
5
+ declare const OrthologSourceSelect: ({ value, onChange, className, }: {
6
6
  value: OrthologSource;
7
7
  onChange: (val: OrthologSource) => void;
8
8
  className?: string;
9
- }): React.JSX.Element;
9
+ }) => React.JSX.Element;
10
+ export default OrthologSourceSelect;
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { MenuItem } from '@mui/material';
3
+ import { observer } from 'mobx-react';
3
4
  import TextField2 from '../../../components/TextField2';
4
5
  import { useLocalStorage } from '../../../utils/useLocalStorage';
5
6
  const ORTHOLOG_SOURCE_STORAGE_KEY = 'msaview-ortholog-source';
@@ -32,8 +33,9 @@ const hints = {
32
33
  panther: 'also yeast, worm, fly and plants',
33
34
  uniref: 'all of UniProtKB within 50% identity',
34
35
  };
35
- export default function OrthologSourceSelect({ value, onChange, className, }) {
36
+ const OrthologSourceSelect = observer(function OrthologSourceSelect({ value, onChange, className, }) {
36
37
  return (React.createElement(TextField2, { variant: "outlined", label: "Source", className: className, select: true, value: value, helperText: hints[value], onChange: event => {
37
38
  onChange(event.target.value);
38
39
  } }, orthologSources.map(val => (React.createElement(MenuItem, { value: val, key: val }, orthologSourceLabels[val])))));
39
- }
40
+ });
41
+ export default OrthologSourceSelect;
@@ -8,9 +8,10 @@ import React from 'react';
8
8
  * organism rather than to nothing, and the only place that surfaces is the gene
9
9
  * lookup, as "could not resolve NLRP1 in taxon 9986".
10
10
  */
11
- export default function QuerySpeciesSelect({ value, assemblyName, onChange, className, }: {
11
+ declare const QuerySpeciesSelect: ({ value, assemblyName, onChange, className, }: {
12
12
  value: number;
13
13
  assemblyName?: string;
14
14
  onChange: (taxId: number) => void;
15
15
  className?: string;
16
- }): React.JSX.Element;
16
+ }) => React.JSX.Element;
17
+ export default QuerySpeciesSelect;
@@ -1,4 +1,5 @@
1
1
  import React, { useState } from 'react';
2
+ import { observer } from 'mobx-react';
2
3
  import TextField2 from '../../../components/TextField2';
3
4
  import { resolveAssemblySpecies, resolveTaxId, } from '../../../utils/ncbiTaxonomy';
4
5
  import { fetchTaxonomyInfo } from '../../../utils/taxonomyNames';
@@ -32,7 +33,7 @@ async function describeTaxon(query, signal) {
32
33
  * organism rather than to nothing, and the only place that surfaces is the gene
33
34
  * lookup, as "could not resolve NLRP1 in taxon 9986".
34
35
  */
35
- export default function QuerySpeciesSelect({ value, assemblyName, onChange, className, }) {
36
+ const QuerySpeciesSelect = observer(function QuerySpeciesSelect({ value, assemblyName, onChange, className, }) {
36
37
  // undefined until the user types, which is what makes the two lookups
37
38
  // exclusive rather than both firing on open
38
39
  const [typed, setTyped] = useState();
@@ -71,4 +72,5 @@ export default function QuerySpeciesSelect({ value, assemblyName, onChange, clas
71
72
  }, error: !!error, helperText: error
72
73
  ? `${error}`
73
74
  : (resolved ?? `the species this gene is from (taxon ${value})`) }));
74
- }
75
+ });
76
+ export default QuerySpeciesSelect;
@@ -1,8 +1,11 @@
1
1
  import type { AnyConfigurationModel } from '@jbrowse/core/configuration';
2
+ import type { JBrowseConfigModel } from '@jbrowse/core/util';
2
3
  export interface Dataset {
3
4
  datasetId: string;
4
5
  name: string;
5
6
  description?: string;
6
7
  adapter: AnyConfigurationModel;
7
8
  }
8
- export declare function readMsaDatasets(jbrowse: AnyConfigurationModel): Dataset[] | undefined;
9
+ export declare function readMsaDatasets(jbrowse: JBrowseConfigModel & {
10
+ msa?: AnyConfigurationModel;
11
+ }): Dataset[] | undefined;
@@ -1,4 +1,8 @@
1
1
  import { readConfObject } from '@jbrowse/core/configuration';
2
+ // `msa` is this plugin's rootConfigurationSchema, which the host mounts beside
3
+ // JBrowseConfigModel's declared members, so the core type does not name it
2
4
  export function readMsaDatasets(jbrowse) {
3
- return readConfObject(jbrowse, ['msa', 'datasets']);
5
+ return jbrowse.msa
6
+ ? readConfObject(jbrowse.msa, 'datasets')
7
+ : undefined;
4
8
  }
@@ -7,10 +7,11 @@ import type { QueryRowMatch } from '../detectQueryRow';
7
7
  * itself in from the pasted alignment and offers that alignment's own row names
8
8
  * rather than a free text box the user can typo.
9
9
  */
10
- export default function QueryRowSelector({ names, detected, querySeqName, setQuerySeqName, isAutoDetected, }: {
10
+ declare const QueryRowSelector: ({ names, detected, querySeqName, setQuerySeqName, isAutoDetected, }: {
11
11
  names: string[];
12
12
  detected?: QueryRowMatch;
13
13
  querySeqName: string;
14
14
  setQuerySeqName: (arg: string) => void;
15
15
  isAutoDetected: boolean;
16
- }): React.JSX.Element;
16
+ }) => React.JSX.Element;
17
+ export default QueryRowSelector;
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Alert, MenuItem } from '@mui/material';
3
+ import { observer } from 'mobx-react';
3
4
  import { makeStyles } from 'tss-react/mui';
4
5
  import TextField2 from '../../components/TextField2';
5
6
  const useStyles = makeStyles()({
@@ -30,7 +31,7 @@ function partialCoverage({ identity, offset, }) {
30
31
  * itself in from the pasted alignment and offers that alignment's own row names
31
32
  * rather than a free text box the user can typo.
32
33
  */
33
- export default function QueryRowSelector({ names, detected, querySeqName, setQuerySeqName, isAutoDetected, }) {
34
+ const QueryRowSelector = observer(function QueryRowSelector({ names, detected, querySeqName, setQuerySeqName, isAutoDetected, }) {
34
35
  const { classes } = useStyles();
35
36
  return (React.createElement(React.Fragment, null,
36
37
  names.length > 0 ? (React.createElement(TextField2, { variant: "outlined", label: "MSA row matching the selected transcript", select: true, fullWidth: true, className: classes.field, value: names.includes(querySeqName) ? querySeqName : '', onChange: event => {
@@ -51,4 +52,5 @@ export default function QueryRowSelector({ names, detected, querySeqName, setQue
51
52
  " to your protein sequence",
52
53
  detected.quality === 'exact' ? '' : partialCoverage(detected),
53
54
  ". Clicking the alignment will navigate the genome view."))) : names.length > 0 && !querySeqName ? (React.createElement(Alert, { severity: "warning", className: classes.alert }, "No row matched your protein sequence \u2014 pick the one for your gene above. Without it the alignment still renders, but clicking it will not navigate the genome view.")) : null));
54
- }
55
+ });
56
+ export default QueryRowSelector;
@@ -9,6 +9,7 @@ export type SequenceStatus = 'loading' | 'ready' | 'missing' | 'error';
9
9
  * An error says so through the panel's own ErrorMessage, so this stays quiet
10
10
  * for that one rather than saying it twice.
11
11
  */
12
- export default function SequenceStatusMessage({ status, }: {
12
+ declare const SequenceStatusMessage: ({ status, }: {
13
13
  status: SequenceStatus;
14
- }): React.JSX.Element | null;
14
+ }) => React.JSX.Element | null;
15
+ export default SequenceStatusMessage;
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { LoadingEllipses } from '@jbrowse/core/ui';
3
3
  import { Typography } from '@mui/material';
4
+ import { observer } from 'mobx-react';
4
5
  /**
5
6
  * Why Submit is grey. The query row is the selected transcript's translation,
6
7
  * and fetching and translating it takes a round trip to the sequence adapter,
@@ -10,6 +11,7 @@ import { Typography } from '@mui/material';
10
11
  * An error says so through the panel's own ErrorMessage, so this stays quiet
11
12
  * for that one rather than saying it twice.
12
13
  */
13
- export default function SequenceStatusMessage({ status, }) {
14
+ const SequenceStatusMessage = observer(function SequenceStatusMessage({ status, }) {
14
15
  return status === 'loading' ? (React.createElement(LoadingEllipses, { message: "Translating transcript" })) : status === 'missing' ? (React.createElement(Typography, { color: "textSecondary", variant: "body2" }, "no coding sequence to align")) : null;
15
- }
16
+ });
17
+ export default SequenceStatusMessage;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import type { MsaViewPlacement } from '../../utils/workspaces';
3
3
  import type { AbstractTrackModel } from '@jbrowse/core/util';
4
- export default function SubmitCancelActions({ onSubmit, onCancel, submitDisabled, hint, submitLabel, model, }: {
4
+ declare const SubmitCancelActions: ({ onSubmit, onCancel, submitDisabled, hint, submitLabel, model, }: {
5
5
  /** handed the placement the box states, so no launch re-reads storage */
6
6
  onSubmit: (placement: MsaViewPlacement) => void;
7
7
  onCancel: () => void;
@@ -11,4 +11,5 @@ export default function SubmitCancelActions({ onSubmit, onCancel, submitDisabled
11
11
  submitLabel?: string;
12
12
  /** omitted by a panel that submits something other than a view launch */
13
13
  model?: AbstractTrackModel;
14
- }): React.JSX.Element;
14
+ }) => React.JSX.Element;
15
+ export default SubmitCancelActions;
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { getSession } from '@jbrowse/core/util';
3
3
  import { Button, Checkbox, DialogActions, FormControlLabel, } from '@mui/material';
4
+ import { observer } from 'mobx-react';
4
5
  import { readLaunchPlacement, sessionSupportsPlacement, writeLaunchPlacement, } from '../../utils/workspaces';
5
6
  import { useLaunchPlacement } from './launchPlacement';
6
7
  /**
@@ -14,12 +15,12 @@ import { useLaunchPlacement } from './launchPlacement';
14
15
  * release that places views its own way — because the box would do nothing
15
16
  * there and every launch would quietly ignore it.
16
17
  */
17
- function PlacementToggle({ checked, onChange, }) {
18
+ const PlacementToggle = observer(function PlacementToggle({ checked, onChange, }) {
18
19
  return (React.createElement(FormControlLabel, { label: "Open beside the genome view", control: React.createElement(Checkbox, { checked: checked, onChange: event => {
19
20
  onChange(event.target.checked);
20
21
  } }) }));
21
- }
22
- export default function SubmitCancelActions({ onSubmit, onCancel, submitDisabled, hint, submitLabel = 'Submit', model, }) {
22
+ });
23
+ const SubmitCancelActions = observer(function SubmitCancelActions({ onSubmit, onCancel, submitDisabled, hint, submitLabel = 'Submit', model, }) {
23
24
  const [sideBySide, setSideBySide] = useLaunchPlacement();
24
25
  // The stored value is what the next dialog opens on, so it is written on
25
26
  // submit rather than on the click: a dialog the user backed out of must not
@@ -47,4 +48,5 @@ export default function SubmitCancelActions({ onSubmit, onCancel, submitDisabled
47
48
  React.createElement(Button, { sx: { flexShrink: 0 }, color: "secondary", variant: "contained", onClick: () => {
48
49
  onCancel();
49
50
  } }, "Cancel"))));
50
- }
51
+ });
52
+ export default SubmitCancelActions;
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
- export default function TabPanel({ children, value, index, }: {
2
+ declare const TabPanel: ({ children, value, index, }: {
3
3
  children?: React.ReactNode;
4
4
  index: number | string;
5
5
  value: number | string;
6
- }): React.JSX.Element;
6
+ }) => React.JSX.Element;
7
+ export default TabPanel;
@@ -1,4 +1,5 @@
1
1
  import React, { useState } from 'react';
2
+ import { observer } from 'mobx-react';
2
3
  // Once visited, a panel stays mounted and is hidden with the `hidden` attribute.
3
4
  // Unmounting it discarded whatever the user had typed and re-ran every fetch the
4
5
  // panel makes on the way back, so switching tabs to compare two of them cost an
@@ -7,11 +8,12 @@ import React, { useState } from 'react';
7
8
  // Lazy on first visit rather than mounted up front, because a panel mounts
8
9
  // fetches of its own: rendering all four on open would query the MSA dataset
9
10
  // adapter and the BLAST cache for tabs nobody looked at.
10
- export default function TabPanel({ children, value, index, }) {
11
+ const TabPanel = observer(function TabPanel({ children, value, index, }) {
11
12
  const active = value === index;
12
13
  const [visited, setVisited] = useState(active);
13
14
  if (active && !visited) {
14
15
  setVisited(true);
15
16
  }
16
17
  return (React.createElement("div", { role: "tabpanel", hidden: !active }, visited || active ? children : null));
17
- }
18
+ });
19
+ export default TabPanel;
@@ -1,25 +1,26 @@
1
1
  // @vitest-environment jsdom
2
2
  import React from 'react';
3
3
  import { cleanup, render, screen } from '@testing-library/react';
4
+ import { observer } from 'mobx-react';
4
5
  import { afterEach, expect, test, vi } from 'vitest';
5
6
  import TabPanel from './TabPanel';
6
7
  afterEach(() => {
7
8
  cleanup();
8
9
  });
9
- function Panels({ value }) {
10
+ const Panels = observer(function Panels({ value }) {
10
11
  return (React.createElement(React.Fragment, null,
11
12
  React.createElement(TabPanel, { value: value, index: "a" },
12
13
  React.createElement(Probe, { name: "a" })),
13
14
  React.createElement(TabPanel, { value: value, index: "b" },
14
15
  React.createElement(Probe, { name: "b" }))));
15
- }
16
+ });
16
17
  const mounted = vi.fn();
17
- function Probe({ name }) {
18
+ const Probe = observer(function Probe({ name }) {
18
19
  React.useEffect(() => {
19
20
  mounted(name);
20
21
  }, [name]);
21
22
  return React.createElement("input", { defaultValue: name });
22
- }
23
+ });
23
24
  test('a visited panel keeps its state while another tab is shown', () => {
24
25
  const { rerender } = render(React.createElement(Panels, { value: "a" }));
25
26
  const typed = screen.getByDisplayValue('a');
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import type { SequenceStatus } from './SequenceStatus';
3
3
  import type { Feature } from '@jbrowse/core/util';
4
- export default function TranscriptSelector({ feature, options, selectedId, selectedTranscript, setSelectedId, proteinSequence, sequenceStatus, validIds, }: {
4
+ declare const TranscriptSelector: ({ feature, options, selectedId, selectedTranscript, setSelectedId, proteinSequence, sequenceStatus, validIds, }: {
5
5
  feature: Feature;
6
6
  options: Feature[];
7
7
  selectedId: string;
@@ -10,4 +10,5 @@ export default function TranscriptSelector({ feature, options, selectedId, selec
10
10
  proteinSequence: string | undefined;
11
11
  sequenceStatus?: SequenceStatus;
12
12
  validIds?: string[];
13
- }): React.JSX.Element;
13
+ }) => React.JSX.Element;
14
+ export default TranscriptSelector;
@@ -1,5 +1,6 @@
1
1
  import React, { useState } from 'react';
2
2
  import { Button, MenuItem, TextField } from '@mui/material';
3
+ import { observer } from 'mobx-react';
3
4
  import { makeStyles } from 'tss-react/mui';
4
5
  import ReadOnlyTextField2 from '../../components/ReadOnlyTextField2';
5
6
  import { featureMatchesId, getGeneDisplayName, getId, getTranscriptDisplayName, getTranscriptLength, } from '../util';
@@ -15,7 +16,7 @@ const useStyles = makeStyles()({
15
16
  marginLeft: 20,
16
17
  },
17
18
  });
18
- export default function TranscriptSelector({ feature, options, selectedId, selectedTranscript, setSelectedId, proteinSequence, sequenceStatus = 'ready', validIds, }) {
19
+ const TranscriptSelector = observer(function TranscriptSelector({ feature, options, selectedId, selectedTranscript, setSelectedId, proteinSequence, sequenceStatus = 'ready', validIds, }) {
19
20
  const { classes } = useStyles();
20
21
  const [showSequence, setShowSequence] = useState(false);
21
22
  return (React.createElement(React.Fragment, null,
@@ -53,4 +54,5 @@ export default function TranscriptSelector({ feature, options, selectedId, selec
53
54
  : sequenceStatus === 'error'
54
55
  ? 'The sequence could not be fetched.'
55
56
  : 'Loading...' })) : null));
56
- }
57
+ });
58
+ export default TranscriptSelector;
@@ -1,10 +1,11 @@
1
1
  import type { AbstractSessionModel } from '@jbrowse/core/util';
2
- export declare function fetchSeq({ start, end, refName, session, assemblyName, }: {
2
+ export declare function fetchSeq({ start, end, refName, session, assemblyName, signal, }: {
3
3
  start: number;
4
4
  end: number;
5
5
  refName: string;
6
6
  assemblyName: string;
7
7
  session: AbstractSessionModel;
8
+ signal: AbortSignal;
8
9
  }): Promise<{
9
10
  seq: string;
10
11
  assemblyGeneticCodeId: number;
@@ -1,12 +1,18 @@
1
- import { getConf } from '@jbrowse/core/configuration';
2
- export async function fetchSeq({ start, end, refName, session, assemblyName, }) {
1
+ import { getSequenceAdapterConfig } from '@jbrowse/core/assemblyManager/assembly';
2
+ export async function fetchSeq({ start, end, refName, session, assemblyName, signal, }) {
3
3
  const { assemblyManager, rpcManager } = session;
4
4
  const assembly = await assemblyManager.waitForAssembly(assemblyName);
5
5
  if (!assembly) {
6
6
  throw new Error('assembly not found');
7
7
  }
8
+ const adapterConfig = getSequenceAdapterConfig(assembly);
9
+ if (!adapterConfig) {
10
+ throw new Error(`assembly ${assemblyName} has no sequence adapter`);
11
+ }
12
+ // eslint-disable-next-line no-restricted-syntax -- one transcript's span of reference sequence, and both callers already label the wait ("Translating transcript", "Looking up …")
8
13
  const feats = await rpcManager.call('getSequence', 'CoreGetFeatures', {
9
- adapterConfig: getConf(assembly, ['sequence', 'adapter']),
14
+ adapterConfig,
15
+ signal,
10
16
  regions: [
11
17
  {
12
18
  start,