react-msaview 6.5.0 → 8.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.
- package/README.md +13 -11
- package/bundle/index.js +122 -112
- package/bundle/index.js.map +4 -4
- package/dist/colorSchemes.js +1 -2
- package/dist/colorSchemes.js.map +1 -1
- package/dist/columnStats.d.ts +28 -0
- package/dist/columnStats.js +34 -0
- package/dist/columnStats.js.map +1 -0
- package/dist/components/DragHandle.d.ts +3 -2
- package/dist/components/DragHandle.js +11 -5
- package/dist/components/DragHandle.js.map +1 -1
- package/dist/components/Loading.js +2 -2
- package/dist/components/Loading.js.map +1 -1
- package/dist/components/MSAView.js +17 -6
- package/dist/components/MSAView.js.map +1 -1
- package/dist/components/MSAViewer.d.ts +69 -4
- package/dist/components/MSAViewer.js +201 -8
- package/dist/components/MSAViewer.js.map +1 -1
- package/dist/components/PortalTooltip.d.ts +11 -0
- package/dist/components/PortalTooltip.js +29 -0
- package/dist/components/PortalTooltip.js.map +1 -0
- package/dist/components/ResizeHandles.d.ts +3 -3
- package/dist/components/ResizeHandles.js +13 -24
- package/dist/components/ResizeHandles.js.map +1 -1
- package/dist/components/SequenceTextArea.js +3 -3
- package/dist/components/SequenceTextArea.js.map +1 -1
- package/dist/components/Track.js +41 -22
- package/dist/components/Track.js.map +1 -1
- package/dist/components/dialogs/{InterProScanDialog.d.ts → AnnotationFileDialog.d.ts} +2 -2
- package/dist/components/dialogs/AnnotationFileDialog.js +92 -0
- package/dist/components/dialogs/AnnotationFileDialog.js.map +1 -0
- package/dist/components/dialogs/ExportSVGDialog.js +5 -3
- package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
- package/dist/components/dialogs/FeatureDialog.js +13 -9
- package/dist/components/dialogs/FeatureDialog.js.map +1 -1
- package/dist/components/dialogs/TrackInfoDialog.js +1 -1
- package/dist/components/dialogs/TrackInfoDialog.js.map +1 -1
- package/dist/components/header/GappynessSlider.js +6 -11
- package/dist/components/header/GappynessSlider.js.map +1 -1
- package/dist/components/header/Header.js +7 -0
- package/dist/components/header/Header.js.map +1 -1
- package/dist/components/header/HeaderStatusArea.js +0 -2
- package/dist/components/header/HeaderStatusArea.js.map +1 -1
- package/dist/components/header/LoadWarnings.d.ts +6 -0
- package/dist/components/header/LoadWarnings.js +35 -0
- package/dist/components/header/LoadWarnings.js.map +1 -0
- package/dist/components/header/MultiAlignmentSelector.js +0 -0
- package/dist/components/header/MultiAlignmentSelector.js.map +1 -1
- package/dist/components/header/ScrollZoomIcons.d.ts +6 -0
- package/dist/components/header/ScrollZoomIcons.js +35 -0
- package/dist/components/header/ScrollZoomIcons.js.map +1 -0
- package/dist/components/header/TreeSettingsMenu.js +7 -1
- package/dist/components/header/TreeSettingsMenu.js.map +1 -1
- package/dist/components/header/UnshareableDataWarning.d.ts +6 -0
- package/dist/components/header/UnshareableDataWarning.js +40 -0
- package/dist/components/header/UnshareableDataWarning.js.map +1 -0
- package/dist/components/header/ZoomControls.js +49 -6
- package/dist/components/header/ZoomControls.js.map +1 -1
- package/dist/components/header/getAnnotationsMenu.js +11 -14
- package/dist/components/header/getAnnotationsMenu.js.map +1 -1
- package/dist/components/header/settingsMenuItems.js +10 -7
- package/dist/components/header/settingsMenuItems.js.map +1 -1
- package/dist/components/import/ImportForm.js +1 -1
- package/dist/components/import/ImportForm.js.map +1 -1
- package/dist/components/import/ImportFormExamples.js +2 -6
- package/dist/components/import/ImportFormExamples.js.map +1 -1
- package/dist/components/import/util.js +2 -0
- package/dist/components/import/util.js.map +1 -1
- package/dist/components/minimap/Minimap.js +1 -2
- package/dist/components/minimap/Minimap.js.map +1 -1
- package/dist/components/msa/AnnotationLegend.js +27 -19
- package/dist/components/msa/AnnotationLegend.js.map +1 -1
- package/dist/components/msa/MSACanvas.js +1 -1
- package/dist/components/msa/MSACanvas.js.map +1 -1
- package/dist/components/msa/MSACanvasBlock.js +17 -20
- package/dist/components/msa/MSACanvasBlock.js.map +1 -1
- package/dist/components/msa/MSAMouseoverCanvas.js +2 -1
- package/dist/components/msa/MSAMouseoverCanvas.js.map +1 -1
- package/dist/components/msa/domainBandCursor.d.ts +7 -11
- package/dist/components/msa/domainBandCursor.js +7 -11
- package/dist/components/msa/domainBandCursor.js.map +1 -1
- package/dist/components/msa/drawFeatureSpans.d.ts +53 -0
- package/dist/components/msa/drawFeatureSpans.js +78 -0
- package/dist/components/msa/drawFeatureSpans.js.map +1 -0
- package/dist/components/msa/legendRows.d.ts +8 -0
- package/dist/components/msa/legendRows.js +16 -0
- package/dist/components/msa/legendRows.js.map +1 -0
- package/dist/components/msa/msaRaster.d.ts +30 -27
- package/dist/components/msa/msaRaster.js +193 -90
- package/dist/components/msa/msaRaster.js.map +1 -1
- package/dist/components/msa/packDomainLanes.d.ts +20 -0
- package/dist/components/msa/packDomainLanes.js +33 -0
- package/dist/components/msa/packDomainLanes.js.map +1 -0
- package/dist/components/msa/renderBoxFeatureCanvasBlock.d.ts +3 -1
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js +51 -87
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
- package/dist/components/msa/renderHighlights.d.ts +44 -4
- package/dist/components/msa/renderHighlights.js +99 -11
- package/dist/components/msa/renderHighlights.js.map +1 -1
- package/dist/components/msa/renderMSABlock.d.ts +1 -2
- package/dist/components/msa/renderMSABlock.js +28 -31
- package/dist/components/msa/renderMSABlock.js.map +1 -1
- package/dist/components/msa/renderMSAMouseover.js +9 -30
- package/dist/components/msa/renderMSAMouseover.js.map +1 -1
- package/dist/components/msa/tileColor.js +4 -7
- package/dist/components/msa/tileColor.js.map +1 -1
- package/dist/components/msa/useMsaBlockMouse.d.ts +5 -3
- package/dist/components/msa/useMsaBlockMouse.js +6 -6
- package/dist/components/msa/useMsaBlockMouse.js.map +1 -1
- package/dist/components/renderCtx.d.ts +1 -1
- package/dist/components/rowpanels/RowPanelBlock.d.ts +9 -0
- package/dist/components/rowpanels/RowPanelBlock.js +86 -0
- package/dist/components/rowpanels/RowPanelBlock.js.map +1 -0
- package/dist/components/rowpanels/RowPanelHeaders.d.ts +12 -0
- package/dist/components/rowpanels/RowPanelHeaders.js +38 -0
- package/dist/components/rowpanels/RowPanelHeaders.js.map +1 -0
- package/dist/components/{msa/ColumnStats.d.ts → rowpanels/RowPanels.d.ts} +2 -2
- package/dist/components/rowpanels/RowPanels.js +32 -0
- package/dist/components/rowpanels/RowPanels.js.map +1 -0
- package/dist/components/rowpanels/headerLayout.d.ts +1 -0
- package/dist/components/rowpanels/headerLayout.js +5 -0
- package/dist/components/rowpanels/headerLayout.js.map +1 -0
- package/dist/components/rowpanels/renderFeaturePanel.d.ts +21 -0
- package/dist/components/rowpanels/renderFeaturePanel.js +37 -0
- package/dist/components/rowpanels/renderFeaturePanel.js.map +1 -0
- package/dist/components/rowpanels/renderRowPanel.d.ts +23 -0
- package/dist/components/rowpanels/renderRowPanel.js +22 -0
- package/dist/components/rowpanels/renderRowPanel.js.map +1 -0
- package/dist/components/rowpanels/renderStrip.d.ts +20 -0
- package/dist/components/rowpanels/renderStrip.js +26 -0
- package/dist/components/rowpanels/renderStrip.js.map +1 -0
- package/dist/components/tracks/TrackBlocks.js +13 -16
- package/dist/components/tracks/TrackBlocks.js.map +1 -1
- package/dist/components/tracks/TrackTooltipContent.d.ts +15 -0
- package/dist/components/tracks/TrackTooltipContent.js +109 -0
- package/dist/components/tracks/TrackTooltipContent.js.map +1 -0
- package/dist/components/tracks/drawTracks.d.ts +30 -12
- package/dist/components/tracks/drawTracks.js +127 -34
- package/dist/components/tracks/drawTracks.js.map +1 -1
- package/dist/components/tracks/useTrackHover.d.ts +22 -0
- package/dist/components/tracks/useTrackHover.js +30 -0
- package/dist/components/tracks/useTrackHover.js.map +1 -0
- package/dist/components/tree/CladeLabels.d.ts +12 -0
- package/dist/components/tree/CladeLabels.js +48 -0
- package/dist/components/tree/CladeLabels.js.map +1 -0
- package/dist/components/tree/TreeCanvas.js +6 -4
- package/dist/components/tree/TreeCanvas.js.map +1 -1
- package/dist/components/tree/TreeCanvasBlock.js +6 -21
- package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
- package/dist/components/tree/TreeOverview.d.ts +14 -0
- package/dist/components/tree/TreeOverview.js +75 -0
- package/dist/components/tree/TreeOverview.js.map +1 -0
- package/dist/components/tree/TreeRuler.js +11 -5
- package/dist/components/tree/TreeRuler.js.map +1 -1
- package/dist/components/tree/cladeBrackets.d.ts +25 -0
- package/dist/components/tree/cladeBrackets.js +51 -0
- package/dist/components/tree/cladeBrackets.js.map +1 -0
- package/dist/components/tree/dialogs/TreeNodeInfoDialog.js +2 -2
- package/dist/components/tree/dialogs/TreeNodeInfoDialog.js.map +1 -1
- package/dist/components/tree/renderTreeCanvas.d.ts +0 -1
- package/dist/components/tree/renderTreeCanvas.js +221 -47
- package/dist/components/tree/renderTreeCanvas.js.map +1 -1
- package/dist/components/tree/renderTreeOverview.d.ts +52 -0
- package/dist/components/tree/renderTreeOverview.js +138 -0
- package/dist/components/tree/renderTreeOverview.js.map +1 -0
- package/dist/components/tree/scaleBar.d.ts +10 -0
- package/dist/components/tree/scaleBar.js +24 -0
- package/dist/components/tree/scaleBar.js.map +1 -0
- package/dist/components/tree/useTreeHover.js +2 -4
- package/dist/components/tree/useTreeHover.js.map +1 -1
- package/dist/constants.d.ts +18 -1
- package/dist/constants.js +51 -8
- package/dist/constants.js.map +1 -1
- package/dist/createPaletteMap.d.ts +7 -6
- package/dist/createPaletteMap.js +10 -9
- package/dist/createPaletteMap.js.map +1 -1
- package/dist/element.d.ts +13 -0
- package/dist/element.js +269 -0
- package/dist/element.js.map +1 -0
- package/dist/featureFields.d.ts +11 -0
- package/dist/featureFields.js +17 -0
- package/dist/featureFields.js.map +1 -0
- package/dist/fetchUtils.d.ts +7 -7
- package/dist/fetchUtils.js +4 -32
- package/dist/fetchUtils.js.map +1 -1
- package/dist/flatToTree.js +1 -2
- package/dist/flatToTree.js.map +1 -1
- package/dist/ggplotPalettes.d.ts +10 -0
- package/dist/ggplotPalettes.js +58 -0
- package/dist/ggplotPalettes.js.map +1 -1
- package/dist/hierarchy.d.ts +29 -1
- package/dist/hierarchy.js +82 -19
- package/dist/hierarchy.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/model/DataModel.js +4 -4
- package/dist/model/DataModel.js.map +1 -1
- package/dist/model/msaModel.d.ts +3 -2
- package/dist/model/msaModel.js +3 -2
- package/dist/model/msaModel.js.map +1 -1
- package/dist/model/treeModel.d.ts +30 -0
- package/dist/model/treeModel.js +37 -1
- package/dist/model/treeModel.js.map +1 -1
- package/dist/model.d.ts +792 -259
- package/dist/model.js +2092 -675
- package/dist/model.js.map +1 -1
- package/dist/mount.d.ts +11 -0
- package/dist/mount.js +22 -0
- package/dist/mount.js.map +1 -0
- package/dist/neighborJoining.js +8 -32
- package/dist/neighborJoining.js.map +1 -1
- package/dist/renderToStaticMarkup.d.ts +15 -13
- package/dist/renderToStaticMarkup.js +37 -25
- package/dist/renderToStaticMarkup.js.map +1 -1
- package/dist/renderToSvg.js +198 -68
- package/dist/renderToSvg.js.map +1 -1
- package/dist/rowCoordinateCalculations.d.ts +26 -28
- package/dist/rowCoordinateCalculations.js +13 -39
- package/dist/rowCoordinateCalculations.js.map +1 -1
- package/dist/scales.d.ts +22 -0
- package/dist/scales.js +30 -0
- package/dist/scales.js.map +1 -0
- package/dist/seqPosToGlobalCol.d.ts +2 -3
- package/dist/seqPosToGlobalCol.js +5 -4
- package/dist/seqPosToGlobalCol.js.map +1 -1
- package/dist/sequenceLogo.d.ts +6 -11
- package/dist/sequenceLogo.js +6 -11
- package/dist/sequenceLogo.js.map +1 -1
- package/dist/stripDefault.d.ts +7 -14
- package/dist/stripDefault.js +7 -14
- package/dist/stripDefault.js.map +1 -1
- package/dist/svgTestUtil.d.ts +306 -124
- package/dist/types.d.ts +295 -3
- package/dist/umd.d.ts +2 -0
- package/dist/umd.js +4 -2
- package/dist/umd.js.map +1 -1
- package/dist/useCanvasAutorun.d.ts +5 -10
- package/dist/useCanvasAutorun.js +5 -10
- package/dist/useCanvasAutorun.js.map +1 -1
- package/dist/useMsaSvgFigure.d.ts +20 -0
- package/dist/useMsaSvgFigure.js +46 -0
- package/dist/useMsaSvgFigure.js.map +1 -0
- package/dist/util.d.ts +10 -4
- package/dist/util.js +37 -10
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/wuss.d.ts +14 -0
- package/dist/wuss.js +55 -0
- package/dist/wuss.js.map +1 -0
- package/package.json +23 -14
- package/src/colorSchemes.ts +1 -2
- package/src/columnStats.ts +58 -0
- package/src/components/DragHandle.tsx +18 -7
- package/src/components/Loading.tsx +14 -8
- package/src/components/MSAView.tsx +19 -5
- package/src/components/MSAViewer.tsx +326 -10
- package/src/components/PortalTooltip.tsx +47 -0
- package/src/components/ResizeHandles.tsx +21 -36
- package/src/components/SequenceTextArea.tsx +3 -3
- package/src/components/Track.tsx +55 -18
- package/src/components/dialogs/AnnotationFileDialog.tsx +162 -0
- package/src/components/dialogs/ExportSVGDialog.tsx +7 -2
- package/src/components/dialogs/FeatureDialog.tsx +13 -9
- package/src/components/dialogs/TrackInfoDialog.tsx +1 -1
- package/src/components/header/GappynessSlider.tsx +6 -11
- package/src/components/header/Header.tsx +10 -0
- package/src/components/header/HeaderStatusArea.tsx +0 -5
- package/src/components/header/LoadWarnings.tsx +48 -0
- package/src/components/header/MultiAlignmentSelector.tsx +0 -0
- package/src/components/header/ScrollZoomIcons.tsx +52 -0
- package/src/components/header/TreeSettingsMenu.tsx +7 -1
- package/src/components/header/UnshareableDataWarning.tsx +56 -0
- package/src/components/header/ZoomControls.tsx +74 -14
- package/src/components/header/getAnnotationsMenu.ts +13 -17
- package/src/components/header/settingsMenuItems.ts +11 -6
- package/src/components/import/ImportForm.tsx +2 -2
- package/src/components/import/ImportFormExamples.tsx +4 -8
- package/src/components/import/util.ts +2 -0
- package/src/components/minimap/Minimap.tsx +1 -2
- package/src/components/msa/AnnotationLegend.tsx +48 -38
- package/src/components/msa/MSACanvas.tsx +3 -5
- package/src/components/msa/MSACanvasBlock.tsx +17 -21
- package/src/components/msa/MSAMouseoverCanvas.tsx +2 -1
- package/src/components/msa/domainBandCursor.ts +7 -11
- package/src/components/msa/drawFeatureSpans.ts +150 -0
- package/src/components/msa/legendRows.ts +24 -0
- package/src/components/msa/msaRaster.ts +236 -88
- package/src/components/msa/packDomainLanes.ts +36 -0
- package/src/components/msa/renderBoxFeatureCanvasBlock.ts +69 -123
- package/src/components/msa/renderHighlights.ts +141 -10
- package/src/components/msa/renderMSABlock.ts +29 -38
- package/src/components/msa/renderMSAMouseover.ts +9 -39
- package/src/components/msa/tileColor.ts +4 -7
- package/src/components/msa/useMsaBlockMouse.ts +6 -6
- package/src/components/renderCtx.ts +1 -0
- package/src/components/rowpanels/RowPanelBlock.tsx +139 -0
- package/src/components/rowpanels/RowPanelHeaders.tsx +57 -0
- package/src/components/rowpanels/RowPanels.tsx +77 -0
- package/src/components/rowpanels/headerLayout.ts +5 -0
- package/src/components/rowpanels/renderFeaturePanel.ts +66 -0
- package/src/components/rowpanels/renderRowPanel.ts +41 -0
- package/src/components/rowpanels/renderStrip.ts +46 -0
- package/src/components/tracks/TrackBlocks.tsx +13 -18
- package/src/components/tracks/TrackTooltipContent.tsx +156 -0
- package/src/components/tracks/drawTracks.ts +169 -38
- package/src/components/tracks/useTrackHover.ts +42 -0
- package/src/components/tree/CladeLabels.tsx +77 -0
- package/src/components/tree/TreeCanvas.tsx +4 -3
- package/src/components/tree/TreeCanvasBlock.tsx +10 -32
- package/src/components/tree/TreeOverview.tsx +106 -0
- package/src/components/tree/TreeRuler.tsx +29 -5
- package/src/components/tree/cladeBrackets.ts +73 -0
- package/src/components/tree/dialogs/TreeNodeInfoDialog.tsx +2 -2
- package/src/components/tree/renderTreeCanvas.ts +312 -48
- package/src/components/tree/renderTreeOverview.ts +212 -0
- package/src/components/tree/scaleBar.ts +23 -0
- package/src/components/tree/useTreeHover.ts +2 -4
- package/src/constants.ts +61 -8
- package/src/createPaletteMap.ts +10 -9
- package/src/element.ts +321 -0
- package/src/featureFields.ts +19 -0
- package/src/fetchUtils.ts +7 -40
- package/src/flatToTree.ts +1 -2
- package/src/ggplotPalettes.ts +60 -0
- package/src/hierarchy.ts +97 -20
- package/src/index.ts +46 -6
- package/src/model/DataModel.ts +5 -4
- package/src/model/msaModel.ts +3 -2
- package/src/model/treeModel.ts +42 -0
- package/src/model.ts +2492 -793
- package/src/mount.tsx +32 -0
- package/src/neighborJoining.ts +8 -32
- package/src/rawImports.d.ts +9 -0
- package/src/renderToStaticMarkup.ts +41 -25
- package/src/renderToSvg.tsx +365 -92
- package/src/rowCoordinateCalculations.ts +16 -62
- package/src/scales.ts +47 -0
- package/src/seqPosToGlobalCol.ts +5 -4
- package/src/sequenceLogo.ts +6 -11
- package/src/stripDefault.ts +7 -14
- package/src/types.ts +352 -12
- package/src/umd.ts +4 -2
- package/src/useCanvasAutorun.ts +5 -10
- package/src/useMsaSvgFigure.ts +72 -0
- package/src/util.ts +40 -14
- package/src/version.ts +1 -1
- package/src/wuss.ts +62 -0
- package/dist/components/dialogs/InterProScanDialog.js +0 -137
- package/dist/components/dialogs/InterProScanDialog.js.map +0 -1
- package/dist/components/dialogs/InterProScanFileDialog.d.ts +0 -7
- package/dist/components/dialogs/InterProScanFileDialog.js +0 -64
- package/dist/components/dialogs/InterProScanFileDialog.js.map +0 -1
- package/dist/components/msa/ColumnStats.js +0 -42
- package/dist/components/msa/ColumnStats.js.map +0 -1
- package/dist/launchInterProScan.d.ts +0 -13
- package/dist/launchInterProScan.js +0 -110
- package/dist/launchInterProScan.js.map +0 -1
- package/dist/useColorContrast.d.ts +0 -10
- package/dist/useColorContrast.js +0 -13
- package/dist/useColorContrast.js.map +0 -1
- package/src/clustalX.test.ts +0 -74
- package/src/colSpace.test.ts +0 -67
- package/src/collapseLogic.test.ts +0 -115
- package/src/colorSchemes.docs.test.ts +0 -57
- package/src/columnCounts.test.ts +0 -73
- package/src/columnStats.test.ts +0 -94
- package/src/columnTracks.test.ts +0 -97
- package/src/components/dialogs/InterProScanDialog.tsx +0 -214
- package/src/components/dialogs/InterProScanFileDialog.tsx +0 -138
- package/src/components/minimap/minimapLayout.test.ts +0 -71
- package/src/components/msa/ColumnStats.tsx +0 -54
- package/src/components/msa/msaRaster.test.ts +0 -145
- package/src/components/msa/renderBoxFeatureCanvasBlock.test.ts +0 -51
- package/src/components/tree/renderTreeCanvas.test.ts +0 -296
- package/src/dataInitialized.test.ts +0 -42
- package/src/domainBands.test.ts +0 -122
- package/src/domainLetterColor.test.ts +0 -80
- package/src/exportFileName.test.ts +0 -40
- package/src/fetchUtils.test.ts +0 -83
- package/src/flatToTree.test.ts +0 -51
- package/src/hierarchy.test.ts +0 -228
- package/src/highlights.test.ts +0 -70
- package/src/impgRender.test.tsx +0 -68
- package/src/largeTree.test.ts +0 -67
- package/src/launchInterProScan.ts +0 -167
- package/src/loadErrorDisplay.test.tsx +0 -102
- package/src/modelFilehandleLoaders.test.ts +0 -137
- package/src/modelReset.test.ts +0 -120
- package/src/neighborJoining.test.ts +0 -164
- package/src/parseAsn1.test.ts +0 -36
- package/src/propertyConservation.test.ts +0 -36
- package/src/renderColumnTracksSvg.test.tsx +0 -108
- package/src/renderDomainsSvg.test.tsx +0 -118
- package/src/renderHighlightsSvg.test.tsx +0 -85
- package/src/renderMinimapSvg.test.tsx +0 -62
- package/src/renderRasterSvg.test.tsx +0 -144
- package/src/renderSequenceLogoSvg.test.tsx +0 -165
- package/src/renderToSvg.test.tsx +0 -65
- package/src/reset.test.ts +0 -61
- package/src/rowCoordinateCalculations.test.ts +0 -211
- package/src/rowSpace.test.ts +0 -46
- package/src/segmentOverlay.test.ts +0 -70
- package/src/seqPosToGlobalCol.test.ts +0 -59
- package/src/sequenceLogo.test.ts +0 -88
- package/src/setFontSize.test.ts +0 -33
- package/src/stripDefault.test.ts +0 -48
- package/src/stripDefaultSnapshot.test.ts +0 -87
- package/src/treeMetadata.test.ts +0 -39
- package/src/useCanvasAutorun.test.tsx +0 -98
- package/src/useColorContrast.ts +0 -18
- package/src/viewChrome.test.tsx +0 -134
- package/src/wheelZoom.test.ts +0 -46
package/src/useCanvasAutorun.ts
CHANGED
|
@@ -6,17 +6,12 @@ import type React from 'react'
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Wires a canvas ref to a mobx autorun: grabs the 2d context once the canvas
|
|
9
|
-
* mounts and re-runs `draw` whenever any observable it reads changes.
|
|
10
|
-
* the getContext/null-guard/autorun-dispose boilerplate repeated by every canvas
|
|
11
|
-
* block host.
|
|
9
|
+
* mounts and re-runs `draw` whenever any observable it reads changes.
|
|
12
10
|
*
|
|
13
|
-
* `width`/`height` are the canvas
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* *after* the mobx reaction that already redrew at the old size. Without a redraw
|
|
18
|
-
* on the far side of that commit the canvas is left blank: it is what blanked the
|
|
19
|
-
* tree on a tree-area resize and the consensus tracks on a vertical zoom.
|
|
11
|
+
* `width`/`height` are the canvas backing store size (logical size times the
|
|
12
|
+
* high-res scale factor). Assigning either clears the bitmap, and React assigns
|
|
13
|
+
* them after the mobx reaction has drawn at the old size, so the effect redraws
|
|
14
|
+
* when they change.
|
|
20
15
|
*
|
|
21
16
|
* `deps` covers everything else the effect should re-subscribe on, matching a
|
|
22
17
|
* normal useEffect dep array.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react'
|
|
2
|
+
|
|
3
|
+
import { createJBrowseTheme } from '@jbrowse/core/ui/theme'
|
|
4
|
+
import { getSnapshot } from '@jbrowse/mobx-state-tree'
|
|
5
|
+
import { compareStructural, reaction } from 'mobx'
|
|
6
|
+
|
|
7
|
+
import { renderToSvg } from './renderToSvg.tsx'
|
|
8
|
+
|
|
9
|
+
import type { MsaViewModel } from './model.ts'
|
|
10
|
+
import type { Theme } from '@mui/material'
|
|
11
|
+
|
|
12
|
+
export interface MsaSvgFigure {
|
|
13
|
+
/** the SVG document for what is on screen, once the first draw finishes */
|
|
14
|
+
svg?: string
|
|
15
|
+
error?: unknown
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The viewer's SVG export of its viewport, as markup for the page to insert.
|
|
20
|
+
* It redraws after the view settles: `delay` ms after the last scroll, zoom,
|
|
21
|
+
* resize or change to the snapshot. A draw a later one overtakes is dropped.
|
|
22
|
+
*
|
|
23
|
+
* The figure's row names and letters are SVG text, so the browser's find
|
|
24
|
+
* locates them, a reader can select them, and print stylesheets apply.
|
|
25
|
+
*/
|
|
26
|
+
export function useMsaSvgFigure(
|
|
27
|
+
model: MsaViewModel,
|
|
28
|
+
{
|
|
29
|
+
theme,
|
|
30
|
+
includeTracks = false,
|
|
31
|
+
delay = 300,
|
|
32
|
+
}: { theme?: Theme; includeTracks?: boolean; delay?: number } = {},
|
|
33
|
+
) {
|
|
34
|
+
const [figure, setFigure] = useState<MsaSvgFigure>({})
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
let latest = 0
|
|
37
|
+
const dispose = reaction(
|
|
38
|
+
() =>
|
|
39
|
+
model.viewInitialized && model.dataInitialized
|
|
40
|
+
? [getSnapshot(model), model.width, model.height]
|
|
41
|
+
: undefined,
|
|
42
|
+
key => {
|
|
43
|
+
if (!key) {
|
|
44
|
+
return
|
|
45
|
+
}
|
|
46
|
+
const draw = ++latest
|
|
47
|
+
renderToSvg(model, {
|
|
48
|
+
theme: theme ?? createJBrowseTheme(),
|
|
49
|
+
exportType: 'viewport',
|
|
50
|
+
includeTracks,
|
|
51
|
+
}).then(
|
|
52
|
+
svg => {
|
|
53
|
+
if (draw === latest) {
|
|
54
|
+
setFigure({ svg })
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
(error: unknown) => {
|
|
58
|
+
if (draw === latest) {
|
|
59
|
+
setFigure({ error })
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
)
|
|
63
|
+
},
|
|
64
|
+
{ delay, fireImmediately: true, equals: compareStructural },
|
|
65
|
+
)
|
|
66
|
+
return () => {
|
|
67
|
+
latest = -1
|
|
68
|
+
dispose()
|
|
69
|
+
}
|
|
70
|
+
}, [model, theme, includeTracks, delay])
|
|
71
|
+
return figure
|
|
72
|
+
}
|
package/src/util.ts
CHANGED
|
@@ -29,6 +29,18 @@ export function adjustColorForContrast(color: string, bg: string): string {
|
|
|
29
29
|
return result
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
// a wash over the alignment or the tree: a color carrying its own alpha draws
|
|
33
|
+
// at that alpha, and one with none takes `alpha` so the marks under it stay
|
|
34
|
+
// readable
|
|
35
|
+
export function withAlpha(color: string, alpha: number) {
|
|
36
|
+
const parsed = colord(color)
|
|
37
|
+
return parsed.alpha() === 1 ? parsed.alpha(alpha).toRgbString() : color
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function outlineColor(fill: string) {
|
|
41
|
+
return colord(fill).darken(0.1).toHex()
|
|
42
|
+
}
|
|
43
|
+
|
|
32
44
|
export function transform<T>(
|
|
33
45
|
obj: Record<string, T>,
|
|
34
46
|
cb: (arg0: [string, T]) => [string, T],
|
|
@@ -36,14 +48,34 @@ export function transform<T>(
|
|
|
36
48
|
return Object.fromEntries(Object.entries(obj).map(cb))
|
|
37
49
|
}
|
|
38
50
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
51
|
+
const contrastTextCaches = new WeakMap<Theme, Map<string, string>>()
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Readable letter color over a given cell color, memoized per theme.
|
|
55
|
+
*
|
|
56
|
+
* Keyed by cell color, since a dynamic scheme has no letter->color table; this
|
|
57
|
+
* covers static schemes and a track's own `colors` too. An uncolored cell gets
|
|
58
|
+
* the theme's text color, which stays readable in the dark theme.
|
|
59
|
+
*/
|
|
60
|
+
export function contrastTextFn(theme: Theme) {
|
|
61
|
+
let cache = contrastTextCaches.get(theme)
|
|
62
|
+
if (!cache) {
|
|
63
|
+
cache = new Map()
|
|
64
|
+
contrastTextCaches.set(theme, cache)
|
|
65
|
+
}
|
|
66
|
+
const fallback = theme.palette.text.primary
|
|
67
|
+
return (color: string | undefined) => {
|
|
68
|
+
if (!color) {
|
|
69
|
+
return fallback
|
|
70
|
+
}
|
|
71
|
+
const hit = cache.get(color)
|
|
72
|
+
if (hit !== undefined) {
|
|
73
|
+
return hit
|
|
74
|
+
}
|
|
75
|
+
const out = theme.palette.getContrastText(colord(color).toHex())
|
|
76
|
+
cache.set(color, out)
|
|
77
|
+
return out
|
|
78
|
+
}
|
|
47
79
|
}
|
|
48
80
|
|
|
49
81
|
export function dropBlanks<T>(blanks: number[], arr: T[]) {
|
|
@@ -110,9 +142,3 @@ export function computeRowInsertions(blanks: number[], seq: string) {
|
|
|
110
142
|
export function len(a: { end: number; start: number }) {
|
|
111
143
|
return a.end - a.start
|
|
112
144
|
}
|
|
113
|
-
|
|
114
|
-
// https://sonnhammer.sbc.su.se/Stockholm.html
|
|
115
|
-
// gaps can be a . or - in stockholm
|
|
116
|
-
export function isBlank(s?: string) {
|
|
117
|
-
return s === '-' || s === '.'
|
|
118
|
-
}
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '
|
|
1
|
+
export const version = '8.0.0'
|
package/src/wuss.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// WUSS notation (Rfam's `#=GC SS_cons`) names a consensus secondary structure
|
|
2
|
+
// by pairing columns. Nested helices use bracket pairs -- <>, (), [], {} --
|
|
3
|
+
// each type kept on its own stack, and a pseudoknot, which by definition
|
|
4
|
+
// crosses a helix it cannot nest inside, uses a letter pair instead: `A` opens
|
|
5
|
+
// and `a` closes, `B`/`b` for a second one. Everything else (. , _ - : ~) is
|
|
6
|
+
// unpaired.
|
|
7
|
+
|
|
8
|
+
const closeToOpen: Record<string, string> = {
|
|
9
|
+
'>': '<',
|
|
10
|
+
')': '(',
|
|
11
|
+
']': '[',
|
|
12
|
+
'}': '{',
|
|
13
|
+
}
|
|
14
|
+
const opens = new Set(Object.values(closeToOpen))
|
|
15
|
+
|
|
16
|
+
export interface BasePair {
|
|
17
|
+
/** 0-based column */
|
|
18
|
+
start: number
|
|
19
|
+
/** 0-based column */
|
|
20
|
+
end: number
|
|
21
|
+
/** the pair crosses a helix rather than nesting inside one */
|
|
22
|
+
pseudoknot: boolean
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The base pairs a WUSS string encodes, as 0-based column indexes. Unmatched
|
|
27
|
+
* brackets are dropped rather than throwing: a hand-edited or truncated
|
|
28
|
+
* alignment should still draw the helices it does close.
|
|
29
|
+
*/
|
|
30
|
+
export function parseWuss(ss: string): BasePair[] {
|
|
31
|
+
const stacks = new Map<string, number[]>()
|
|
32
|
+
const pairs: BasePair[] = []
|
|
33
|
+
const push = (key: string, col: number) => {
|
|
34
|
+
const stack = stacks.get(key)
|
|
35
|
+
if (stack) {
|
|
36
|
+
stack.push(col)
|
|
37
|
+
} else {
|
|
38
|
+
stacks.set(key, [col])
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const pop = (key: string, col: number, pseudoknot: boolean) => {
|
|
42
|
+
const start = stacks.get(key)?.pop()
|
|
43
|
+
if (start !== undefined) {
|
|
44
|
+
pairs.push({ start, end: col, pseudoknot })
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
for (let col = 0; col < ss.length; col++) {
|
|
49
|
+
const ch = ss[col]!
|
|
50
|
+
const opener = closeToOpen[ch]
|
|
51
|
+
if (opens.has(ch)) {
|
|
52
|
+
push(ch, col)
|
|
53
|
+
} else if (opener) {
|
|
54
|
+
pop(opener, col, false)
|
|
55
|
+
} else if (ch >= 'A' && ch <= 'Z') {
|
|
56
|
+
push(ch, col)
|
|
57
|
+
} else if (ch >= 'a' && ch <= 'z') {
|
|
58
|
+
pop(ch.toUpperCase(), col, true)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return pairs.sort((a, b) => a.start - b.start)
|
|
62
|
+
}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
2
|
-
import { Dialog } from '@jbrowse/core/ui';
|
|
3
|
-
import { getSession } from '@jbrowse/core/util';
|
|
4
|
-
import { Button, DialogActions, DialogContent, Typography } from '@mui/material';
|
|
5
|
-
import { observer } from 'mobx-react';
|
|
6
|
-
import { getUngappedSequence } from 'msa-parsers';
|
|
7
|
-
import { launchInterProScan } from '../../launchInterProScan.js';
|
|
8
|
-
const FAMILIES = 'Families, domains, sites & repeats';
|
|
9
|
-
const FEATURES = 'Other sequence features';
|
|
10
|
-
const STRUCTURAL = 'Structural domains';
|
|
11
|
-
const OTHER = 'Other category';
|
|
12
|
-
// The analyses the EBI iprscan5 endpoint accepts, all on by default. Static, so
|
|
13
|
-
// it lives out here rather than being rebuilt on every render of the dialog.
|
|
14
|
-
const interProScanPrograms = [
|
|
15
|
-
{
|
|
16
|
-
name: 'NCBIfam',
|
|
17
|
-
category: FAMILIES,
|
|
18
|
-
description: 'NCBI RefSeq FAMs including TIGRFAMs',
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
name: 'SFLD',
|
|
22
|
-
category: FAMILIES,
|
|
23
|
-
description: 'Structure function linkage database',
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
name: 'Phobius',
|
|
27
|
-
category: FEATURES,
|
|
28
|
-
description: 'A combined transmembrane topology and signal peptide predictor',
|
|
29
|
-
},
|
|
30
|
-
{ name: 'SignalP', category: FEATURES },
|
|
31
|
-
{ name: 'SignalP_EUK', category: OTHER },
|
|
32
|
-
{ name: 'SignalP_GRAM_POSITIVE', category: OTHER },
|
|
33
|
-
{ name: 'SignalP_GRAM_NEGATIVE', category: OTHER },
|
|
34
|
-
{ name: 'SuperFamily', category: STRUCTURAL },
|
|
35
|
-
{ name: 'Panther', category: FAMILIES },
|
|
36
|
-
{ name: 'Gene3d', category: STRUCTURAL },
|
|
37
|
-
{ name: 'HAMAP', category: FAMILIES },
|
|
38
|
-
{ name: 'PrositeProfiles', category: FAMILIES },
|
|
39
|
-
{ name: 'PrositePatterns', category: FAMILIES },
|
|
40
|
-
{ name: 'Coils', category: FEATURES },
|
|
41
|
-
{ name: 'SMART', category: FAMILIES },
|
|
42
|
-
{
|
|
43
|
-
name: 'CDD',
|
|
44
|
-
category: FAMILIES,
|
|
45
|
-
description: 'Conserved Domains Database',
|
|
46
|
-
},
|
|
47
|
-
{ name: 'PRINTS', category: FAMILIES },
|
|
48
|
-
{ name: 'PfamA', category: FAMILIES },
|
|
49
|
-
{ name: 'MobiDBLite', category: FEATURES },
|
|
50
|
-
{ name: 'PIRSF', category: OTHER },
|
|
51
|
-
{ name: 'TMHMM', category: FEATURES },
|
|
52
|
-
{ name: 'AntiFam', category: OTHER },
|
|
53
|
-
{ name: 'FunFam', category: OTHER },
|
|
54
|
-
{ name: 'PIRSR', category: FAMILIES },
|
|
55
|
-
].map(program => ({ ...program, checked: true }));
|
|
56
|
-
const InterProScanDialog = observer(function ({ handleClose, model, }) {
|
|
57
|
-
const [vals, setVals] = useState(interProScanPrograms);
|
|
58
|
-
const programs = vals.filter(e => e.checked).map(e => e.name);
|
|
59
|
-
const [show, setShow] = useState(false);
|
|
60
|
-
return (React.createElement(Dialog, { maxWidth: "xl", title: "Query InterProScan API for domains", onClose: () => {
|
|
61
|
-
handleClose();
|
|
62
|
-
}, open: true },
|
|
63
|
-
React.createElement(DialogContent, null,
|
|
64
|
-
React.createElement(Typography, null, "This will run InterProScan via the InterProScan API on all rows of the current MSA"),
|
|
65
|
-
React.createElement(Button, { onClick: () => {
|
|
66
|
-
setShow(!show);
|
|
67
|
-
} },
|
|
68
|
-
show ? 'Hide' : 'Show',
|
|
69
|
-
" advanced options"),
|
|
70
|
-
show ? (React.createElement("div", null,
|
|
71
|
-
React.createElement(Typography, null, "Select algorithms for InterProScan to run"),
|
|
72
|
-
React.createElement("div", null,
|
|
73
|
-
React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => {
|
|
74
|
-
setVals(vals.map(v => ({ ...v, checked: false })));
|
|
75
|
-
} }, "Select none"),
|
|
76
|
-
React.createElement(Button, { variant: "contained", color: "primary", onClick: () => {
|
|
77
|
-
setVals(vals.map(v => ({ ...v, checked: true })));
|
|
78
|
-
} }, "Select all")),
|
|
79
|
-
React.createElement("table", null,
|
|
80
|
-
React.createElement("tbody", null, vals
|
|
81
|
-
.toSorted((a, b) => a.category.localeCompare(b.category))
|
|
82
|
-
.map(({ name, checked, category, description }) => (React.createElement("tr", { key: name },
|
|
83
|
-
React.createElement("td", null,
|
|
84
|
-
React.createElement("input", { type: "checkbox", checked: checked, onChange: () => {
|
|
85
|
-
setVals(vals.map(e => e.name === name
|
|
86
|
-
? { ...e, checked: !e.checked }
|
|
87
|
-
: e));
|
|
88
|
-
} })),
|
|
89
|
-
React.createElement("td", { title: description }, name),
|
|
90
|
-
React.createElement("td", null, category)))))))) : null),
|
|
91
|
-
React.createElement(DialogActions, null,
|
|
92
|
-
React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => {
|
|
93
|
-
handleClose();
|
|
94
|
-
} }, "Cancel"),
|
|
95
|
-
React.createElement(Button, { variant: "contained", color: "primary", onClick: () => {
|
|
96
|
-
const controller = new AbortController();
|
|
97
|
-
(async () => {
|
|
98
|
-
try {
|
|
99
|
-
const { rows } = model;
|
|
100
|
-
if (rows.length > 140) {
|
|
101
|
-
throw new Error('Too many sequences, please run InterProScan offline');
|
|
102
|
-
}
|
|
103
|
-
await launchInterProScan({
|
|
104
|
-
algorithm: 'interproscan',
|
|
105
|
-
programs: programs,
|
|
106
|
-
seq: rows
|
|
107
|
-
.map(row => [row[0], getUngappedSequence(row[1])])
|
|
108
|
-
.filter(f => !!f[1])
|
|
109
|
-
.map(row => `>${row[0]}\n${row[1]}`)
|
|
110
|
-
.join('\n'),
|
|
111
|
-
onProgress: arg => {
|
|
112
|
-
model.setStatus(arg
|
|
113
|
-
? {
|
|
114
|
-
...arg,
|
|
115
|
-
onCancel: () => {
|
|
116
|
-
controller.abort();
|
|
117
|
-
},
|
|
118
|
-
}
|
|
119
|
-
: undefined);
|
|
120
|
-
},
|
|
121
|
-
model,
|
|
122
|
-
signal: controller.signal,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
catch (e) {
|
|
126
|
-
console.error(e);
|
|
127
|
-
getSession(model).notifyError(`${e}`, e);
|
|
128
|
-
}
|
|
129
|
-
finally {
|
|
130
|
-
model.setStatus();
|
|
131
|
-
}
|
|
132
|
-
})();
|
|
133
|
-
handleClose();
|
|
134
|
-
} }, "Send sequences to InterProScan"))));
|
|
135
|
-
});
|
|
136
|
-
export default InterProScanDialog;
|
|
137
|
-
//# sourceMappingURL=InterProScanDialog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InterProScanDialog.js","sourceRoot":"","sources":["../../../src/components/dialogs/InterProScanDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAIhE,MAAM,QAAQ,GAAG,oCAAoC,CAAA;AACrD,MAAM,QAAQ,GAAG,yBAAyB,CAAA;AAC1C,MAAM,UAAU,GAAG,oBAAoB,CAAA;AACvC,MAAM,KAAK,GAAG,gBAAgB,CAAA;AAE9B,gFAAgF;AAChF,6EAA6E;AAC7E,MAAM,oBAAoB,GAAG;IAC3B;QACE,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,qCAAqC;KACnD;IACD;QACE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,qCAAqC;KACnD;IACD;QACE,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,QAAQ;QAClB,WAAW,EACT,gEAAgE;KACnE;IACD,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACvC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE;IACxC,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,KAAK,EAAE;IAClD,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,KAAK,EAAE;IAClD,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE;IAC7C,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACvC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE;IACxC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACrC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC/C,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC/C,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACrC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACrC;QACE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,4BAA4B;KAC1C;IACD,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACtC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACrC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC1C,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;IAClC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACrC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;IACpC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;IACnC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;CACtC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AAEjD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,EAC5C,WAAW,EACX,KAAK,GAIN;IACC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAA;IAEtD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC7D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEvC,OAAO,CACL,oBAAC,MAAM,IACL,QAAQ,EAAC,IAAI,EACb,KAAK,EAAC,oCAAoC,EAC1C,OAAO,EAAE,GAAG,EAAE;YACZ,WAAW,EAAE,CAAA;QACf,CAAC,EACD,IAAI;QAEJ,oBAAC,aAAa;YACZ,oBAAC,UAAU,6FAGE;YACb,oBAAC,MAAM,IACL,OAAO,EAAE,GAAG,EAAE;oBACZ,OAAO,CAAC,CAAC,IAAI,CAAC,CAAA;gBAChB,CAAC;gBAEA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;oCAChB;YACR,IAAI,CAAC,CAAC,CAAC,CACN;gBACE,oBAAC,UAAU,oDAAuD;gBAClE;oBACE,oBAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,WAAW,EACjB,OAAO,EAAE,GAAG,EAAE;4BACZ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;wBACpD,CAAC,kBAGM;oBACT,oBAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,GAAG,EAAE;4BACZ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;wBACnD,CAAC,iBAGM,CACL;gBACN;oBACE,mCACG,IAAI;yBACF,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;yBACxD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CACjD,4BAAI,GAAG,EAAE,IAAI;wBACX;4BACE,+BACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,GAAG,EAAE;oCACb,OAAO,CACL,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACX,CAAC,CAAC,IAAI,KAAK,IAAI;wCACb,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;wCAC/B,CAAC,CAAC,CAAC,CACN,CACF,CAAA;gCACH,CAAC,GACD,CACC;wBACL,4BAAI,KAAK,EAAE,WAAW,IAAG,IAAI,CAAM;wBACnC,gCAAK,QAAQ,CAAM,CAChB,CACN,CAAC,CACE,CACF,CACJ,CACP,CAAC,CAAC,CAAC,IAAI,CACM;QAChB,oBAAC,aAAa;YACZ,oBAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,WAAW,EACjB,OAAO,EAAE,GAAG,EAAE;oBACZ,WAAW,EAAE,CAAA;gBACf,CAAC,aAGM;YACT,oBAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,GAAG,EAAE;oBACZ,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAEvC;oBAAA,CAAC,KAAK,IAAI,EAAE;wBACX,IAAI,CAAC;4BACH,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;4BACtB,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gCACtB,MAAM,IAAI,KAAK,CACb,qDAAqD,CACtD,CAAA;4BACH,CAAC;4BACD,MAAM,kBAAkB,CAAC;gCACvB,SAAS,EAAE,cAAc;gCACzB,QAAQ,EAAE,QAAQ;gCAClB,GAAG,EAAE,IAAI;qCACN,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qCACjD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qCACnB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;qCACnC,IAAI,CAAC,IAAI,CAAC;gCACb,UAAU,EAAE,GAAG,CAAC,EAAE;oCAChB,KAAK,CAAC,SAAS,CACb,GAAG;wCACD,CAAC,CAAC;4CACE,GAAG,GAAG;4CACN,QAAQ,EAAE,GAAG,EAAE;gDACb,UAAU,CAAC,KAAK,EAAE,CAAA;4CACpB,CAAC;yCACF;wCACH,CAAC,CAAC,SAAS,CACd,CAAA;gCACH,CAAC;gCACD,KAAK;gCACL,MAAM,EAAE,UAAU,CAAC,MAAM;6BAC1B,CAAC,CAAA;wBACJ,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;4BAChB,UAAU,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;wBAC1C,CAAC;gCAAS,CAAC;4BACT,KAAK,CAAC,SAAS,EAAE,CAAA;wBACnB,CAAC;oBACH,CAAC,CAAC,EAAE,CAAA;oBACJ,WAAW,EAAE,CAAA;gBACf,CAAC,qCAGM,CACK,CACT,CACV,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,kBAAkB,CAAA"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
2
|
-
import { Dialog } from '@jbrowse/core/ui';
|
|
3
|
-
import { getSession } from '@jbrowse/core/util';
|
|
4
|
-
import { Button, DialogActions, DialogContent, FormControl, FormControlLabel, Radio, RadioGroup, TextField, Typography, } from '@mui/material';
|
|
5
|
-
import { observer } from 'mobx-react';
|
|
6
|
-
import { interProScanResponseToAnnotations } from 'msa-parsers';
|
|
7
|
-
import { jsonfetch } from '../../fetchUtils.js';
|
|
8
|
-
const InterProScanFileDialog = observer(function ({ handleClose, model, }) {
|
|
9
|
-
const [file, setFile] = useState();
|
|
10
|
-
const [choice, setChoice] = useState('file');
|
|
11
|
-
const [interProURL, setInterProURL] = useState('');
|
|
12
|
-
return (React.createElement(Dialog, { maxWidth: "xl", title: "Open InterProScan results", onClose: () => {
|
|
13
|
-
handleClose();
|
|
14
|
-
}, open: true },
|
|
15
|
-
React.createElement(DialogContent, null,
|
|
16
|
-
React.createElement("div", null,
|
|
17
|
-
React.createElement(Typography, null, "Open a JSON file of InterProScan results that you run remotely on EBI servers or locally"),
|
|
18
|
-
React.createElement("div", { style: { display: 'flex', margin: 30 } },
|
|
19
|
-
React.createElement(FormControl, { component: "fieldset" },
|
|
20
|
-
React.createElement(RadioGroup, { value: choice, onChange: event => {
|
|
21
|
-
setChoice(event.target.value);
|
|
22
|
-
} },
|
|
23
|
-
React.createElement(FormControlLabel, { value: "url", control: React.createElement(Radio, null), label: "URL" }),
|
|
24
|
-
React.createElement(FormControlLabel, { value: "file", control: React.createElement(Radio, null), label: "File" }))),
|
|
25
|
-
choice === 'url' ? (React.createElement("div", null,
|
|
26
|
-
React.createElement(Typography, null, "Open a InterProScan JSON file remote URL"),
|
|
27
|
-
React.createElement(TextField, { label: "URL", value: interProURL, onChange: event => {
|
|
28
|
-
setInterProURL(event.target.value);
|
|
29
|
-
} }))) : null,
|
|
30
|
-
choice === 'file' ? (React.createElement("div", { style: { paddingTop: 20 } },
|
|
31
|
-
React.createElement(Typography, null, "Open a InterProScan JSON file file from your local drive"),
|
|
32
|
-
React.createElement(Button, { variant: "outlined", component: "label" },
|
|
33
|
-
"Choose File",
|
|
34
|
-
React.createElement("input", { type: "file", hidden: true, onChange: ({ target }) => {
|
|
35
|
-
const file = target.files?.[0];
|
|
36
|
-
if (file) {
|
|
37
|
-
setFile(file);
|
|
38
|
-
}
|
|
39
|
-
} })))) : null))),
|
|
40
|
-
React.createElement(DialogActions, null,
|
|
41
|
-
React.createElement(Button, { variant: "contained", color: "primary", onClick: () => {
|
|
42
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
43
|
-
;
|
|
44
|
-
(async () => {
|
|
45
|
-
try {
|
|
46
|
-
const ret = file
|
|
47
|
-
? JSON.parse(await file.text())
|
|
48
|
-
: await jsonfetch(interProURL);
|
|
49
|
-
model.setAnnotations(interProScanResponseToAnnotations(ret));
|
|
50
|
-
getSession(model).notify('Loaded interproscan results', 'success');
|
|
51
|
-
}
|
|
52
|
-
catch (e) {
|
|
53
|
-
console.error(e);
|
|
54
|
-
getSession(model).notifyError(`${e}`, e);
|
|
55
|
-
}
|
|
56
|
-
finally {
|
|
57
|
-
model.setStatus();
|
|
58
|
-
}
|
|
59
|
-
})();
|
|
60
|
-
handleClose();
|
|
61
|
-
} }, "Open results"))));
|
|
62
|
-
});
|
|
63
|
-
export default InterProScanFileDialog;
|
|
64
|
-
//# sourceMappingURL=InterProScanFileDialog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InterProScanFileDialog.js","sourceRoot":"","sources":["../../../src/components/dialogs/InterProScanFileDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { observer } from 'mobx-react';
|
|
3
|
-
const pct = (n) => `${Math.round(n * 100)}%`;
|
|
4
|
-
const ColumnStats = observer(function ({ model }) {
|
|
5
|
-
const stats = model.mouseOverColumnStats;
|
|
6
|
-
if (!stats) {
|
|
7
|
-
return null;
|
|
8
|
-
}
|
|
9
|
-
const { col, total, conservation, propertyConservation, consensusLetter, consensusFraction, gapFraction, distribution, } = stats;
|
|
10
|
-
const top = distribution.slice(0, 6);
|
|
11
|
-
return (React.createElement("div", null,
|
|
12
|
-
React.createElement("b", null,
|
|
13
|
-
"Column ",
|
|
14
|
-
col + 1),
|
|
15
|
-
" (",
|
|
16
|
-
total,
|
|
17
|
-
" seqs)",
|
|
18
|
-
React.createElement("br", null),
|
|
19
|
-
"Consensus: ",
|
|
20
|
-
consensusLetter || '-',
|
|
21
|
-
" (",
|
|
22
|
-
pct(consensusFraction),
|
|
23
|
-
")",
|
|
24
|
-
React.createElement("br", null),
|
|
25
|
-
"Conservation: ",
|
|
26
|
-
conservation.toFixed(2),
|
|
27
|
-
propertyConservation === undefined ? null : (React.createElement(React.Fragment, null,
|
|
28
|
-
React.createElement("br", null),
|
|
29
|
-
"Property conservation: ",
|
|
30
|
-
propertyConservation.toFixed(2))),
|
|
31
|
-
React.createElement("br", null),
|
|
32
|
-
"Gaps: ",
|
|
33
|
-
pct(gapFraction),
|
|
34
|
-
top.length > 0 ? (React.createElement(React.Fragment, null,
|
|
35
|
-
React.createElement("br", null),
|
|
36
|
-
top.map(([letter, count]) => (React.createElement("span", { key: letter, style: { marginRight: 8 } },
|
|
37
|
-
letter,
|
|
38
|
-
" ",
|
|
39
|
-
pct(count / total)))))) : null));
|
|
40
|
-
});
|
|
41
|
-
export default ColumnStats;
|
|
42
|
-
//# sourceMappingURL=ColumnStats.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnStats.js","sourceRoot":"","sources":["../../../src/components/msa/ColumnStats.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAA;AAEpD,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACvE,MAAM,KAAK,GAAG,KAAK,CAAC,oBAAoB,CAAA;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,EACJ,GAAG,EACH,KAAK,EACL,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,YAAY,GACb,GAAG,KAAK,CAAA;IACT,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACpC,OAAO,CACL;QACE;;YAAW,GAAG,GAAG,CAAC,CAAK;;QAAG,KAAK;;QAC/B,+BAAM;;QACM,eAAe,IAAI,GAAG;;QAAI,GAAG,CAAC,iBAAiB,CAAC;;QAC5D,+BAAM;;QACS,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QACrC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC3C;YACE,+BAAM;;YACkB,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CACtD,CACJ;QACD,+BAAM;;QACC,GAAG,CAAC,WAAW,CAAC;QACtB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAChB;YACE,+BAAM;YACL,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAC5B,8BAAM,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;gBACzC,MAAM;;gBAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CACvB,CACR,CAAC,CACD,CACJ,CAAC,CAAC,CAAC,IAAI,CACJ,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,WAAW,CAAA"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { MsaViewModel } from './model.ts';
|
|
2
|
-
export declare function launchInterProScan({ algorithm, seq, programs, onJobId, onProgress, model, signal, }: {
|
|
3
|
-
algorithm: string;
|
|
4
|
-
seq: string;
|
|
5
|
-
programs: string[];
|
|
6
|
-
onProgress: (arg?: {
|
|
7
|
-
msg: string;
|
|
8
|
-
url?: string;
|
|
9
|
-
}) => void;
|
|
10
|
-
onJobId?: (arg: string) => void;
|
|
11
|
-
model: MsaViewModel;
|
|
12
|
-
signal?: AbortSignal;
|
|
13
|
-
}): Promise<void>;
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { getSession } from '@jbrowse/core/util';
|
|
2
|
-
import { interProScanResponseToAnnotations } from 'msa-parsers';
|
|
3
|
-
import { isAbortError, jsonfetch, textfetch, timeout } from './fetchUtils.js';
|
|
4
|
-
const base = 'https://www.ebi.ac.uk/Tools/services/rest';
|
|
5
|
-
async function runInterProScan({ seq, onProgress, onJobId, programs, model, signal, }) {
|
|
6
|
-
const jobId = await textfetch(`${base}/iprscan5/run`, {
|
|
7
|
-
method: 'POST',
|
|
8
|
-
body: new URLSearchParams({
|
|
9
|
-
email: 'colin.diesh@gmail.com',
|
|
10
|
-
sequence: seq,
|
|
11
|
-
programs: programs.join(','),
|
|
12
|
-
}),
|
|
13
|
-
signal,
|
|
14
|
-
});
|
|
15
|
-
onJobId?.(jobId);
|
|
16
|
-
await wait({
|
|
17
|
-
jobId,
|
|
18
|
-
onProgress,
|
|
19
|
-
signal,
|
|
20
|
-
});
|
|
21
|
-
await loadInterProScanResultsWithStatus({ jobId, model, onProgress, signal });
|
|
22
|
-
}
|
|
23
|
-
function loadInterProScanResults(jobId, signal) {
|
|
24
|
-
return jsonfetch(`${base}/iprscan5/result/${jobId}/json`, { signal });
|
|
25
|
-
}
|
|
26
|
-
async function wait({ onProgress, jobId, signal, }) {
|
|
27
|
-
const url = `${base}/iprscan5/status/${jobId}`;
|
|
28
|
-
// EBI jobs run for minutes; cap polling so an unexpected/stuck status can't
|
|
29
|
-
// spin forever (the abort signal is the normal early exit). ~10s per check.
|
|
30
|
-
const maxChecks = 360;
|
|
31
|
-
try {
|
|
32
|
-
let finished = false;
|
|
33
|
-
for (let check = 0; check < maxChecks && !finished; check++) {
|
|
34
|
-
for (let i = 0; i < 10; i++) {
|
|
35
|
-
await timeout(1000, signal);
|
|
36
|
-
onProgress({ msg: `Checking status ${10 - i}`, url });
|
|
37
|
-
}
|
|
38
|
-
// status endpoint returns a bare status token; match exactly rather than
|
|
39
|
-
// substring so an error page mentioning "FINISHED" can't be a false hit
|
|
40
|
-
const status = (await textfetch(url, { signal })).trim();
|
|
41
|
-
if (status === 'FINISHED') {
|
|
42
|
-
finished = true;
|
|
43
|
-
}
|
|
44
|
-
else if (status === 'FAILURE' ||
|
|
45
|
-
status === 'ERROR' ||
|
|
46
|
-
status === 'NOT_FOUND') {
|
|
47
|
-
throw new Error(`InterProScan job ${jobId} ended with status: ${status}`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
if (!finished) {
|
|
51
|
-
throw new Error(`InterProScan job ${jobId} did not finish after ${maxChecks} status checks`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
finally {
|
|
55
|
-
onProgress();
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
export async function launchInterProScan({ algorithm, seq, programs, onJobId, onProgress, model, signal, }) {
|
|
59
|
-
try {
|
|
60
|
-
onProgress({ msg: `Launching ${algorithm} MSA` });
|
|
61
|
-
if (algorithm === 'interproscan') {
|
|
62
|
-
await runInterProScan({
|
|
63
|
-
seq,
|
|
64
|
-
onJobId,
|
|
65
|
-
onProgress,
|
|
66
|
-
programs,
|
|
67
|
-
model,
|
|
68
|
-
signal,
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
throw new Error('unknown algorithm');
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch (e) {
|
|
76
|
-
if (isAbortError(e)) {
|
|
77
|
-
getSession(model).notify('Cancelled InterProScan query', 'info');
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
throw e;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
finally {
|
|
84
|
-
onProgress();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
async function loadInterProScanResultsWithStatus({ jobId, model, onProgress, signal, }) {
|
|
88
|
-
try {
|
|
89
|
-
onProgress({
|
|
90
|
-
msg: `Downloading results of ${jobId} (for larger sequences this can be slow, click status to download and upload in the manual tab)`,
|
|
91
|
-
url: `https://www.ebi.ac.uk/Tools/services/rest/iprscan5/result/${jobId}/json`,
|
|
92
|
-
});
|
|
93
|
-
const ret = await loadInterProScanResults(jobId, signal);
|
|
94
|
-
model.setAnnotations(interProScanResponseToAnnotations(ret));
|
|
95
|
-
getSession(model).notify(`Loaded interproscan ${jobId} results`, 'success');
|
|
96
|
-
}
|
|
97
|
-
catch (e) {
|
|
98
|
-
if (isAbortError(e)) {
|
|
99
|
-
getSession(model).notify('Cancelled InterProScan query', 'info');
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
console.error(e);
|
|
103
|
-
getSession(model).notifyError(`${e}`, e);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
finally {
|
|
107
|
-
onProgress();
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=launchInterProScan.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"launchInterProScan.js","sourceRoot":"","sources":["../src/launchInterProScan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Resolves the current theme and a memoized contrast-color scheme for a given
|
|
3
|
-
* color scheme. Shared by the MSA and text-track canvas blocks.
|
|
4
|
-
*/
|
|
5
|
-
export declare function useColorContrast(colorScheme: Record<string, string>): {
|
|
6
|
-
theme: import("@mui/material").Theme;
|
|
7
|
-
contrastScheme: {
|
|
8
|
-
[k: string]: string;
|
|
9
|
-
};
|
|
10
|
-
};
|