react-msaview 9.0.0 → 9.1.1
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 +19 -10
- package/bundle/index.js +111 -115
- package/bundle/index.js.map +4 -4
- package/dist/blosum62.d.ts +3 -0
- package/dist/blosum62.js +43 -0
- package/dist/blosum62.js.map +1 -0
- package/dist/colorSchemes.js +2 -3
- package/dist/colorSchemes.js.map +1 -1
- package/dist/columnCounts.d.ts +0 -1
- package/dist/columnCounts.js +1 -1
- package/dist/columnCounts.js.map +1 -1
- package/dist/components/Loading.d.ts +3 -2
- package/dist/components/Loading.js +7 -7
- package/dist/components/Loading.js.map +1 -1
- package/dist/components/MSAView.d.ts +3 -2
- package/dist/components/MSAView.js +7 -4
- package/dist/components/MSAView.js.map +1 -1
- package/dist/components/MSAViewer.d.ts +1941 -4
- package/dist/components/MSAViewer.js +144 -201
- package/dist/components/MSAViewer.js.map +1 -1
- package/dist/components/MetadataTable.d.ts +4 -1
- package/dist/components/MetadataTable.js +55 -16
- package/dist/components/MetadataTable.js.map +1 -1
- package/dist/components/ResizeHandles.js +3 -2
- package/dist/components/ResizeHandles.js.map +1 -1
- package/dist/components/Track.js +8 -1
- package/dist/components/Track.js.map +1 -1
- package/dist/components/controls.d.ts +11 -0
- package/dist/components/controls.js +49 -0
- package/dist/components/controls.js.map +1 -0
- package/dist/components/dialogs/AnnotationFileDialog.js +12 -18
- package/dist/components/dialogs/AnnotationFileDialog.js.map +1 -1
- package/dist/components/dialogs/ExportSVGDialog.js +5 -7
- package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
- package/dist/components/dialogs/FeatureDialog.js +2 -2
- package/dist/components/dialogs/FeatureDialog.js.map +1 -1
- package/dist/components/{header/TreeSettingsMenu.d.ts → dialogs/GapThresholdDialog.d.ts} +3 -2
- package/dist/components/dialogs/GapThresholdDialog.js +15 -0
- package/dist/components/dialogs/GapThresholdDialog.js.map +1 -0
- package/dist/components/{header → dialogs}/GappynessSlider.d.ts +1 -1
- package/dist/components/{header → dialogs}/GappynessSlider.js +3 -10
- package/dist/components/dialogs/GappynessSlider.js.map +1 -0
- package/dist/components/{header → dialogs}/GoToBox.d.ts +4 -2
- package/dist/components/dialogs/GoToBox.js +48 -0
- package/dist/components/dialogs/GoToBox.js.map +1 -0
- package/dist/components/dialogs/GoToDialog.d.ts +6 -0
- package/dist/components/dialogs/GoToDialog.js +10 -0
- package/dist/components/dialogs/GoToDialog.js.map +1 -0
- package/dist/components/dialogs/HelpDialog.d.ts +6 -0
- package/dist/components/dialogs/HelpDialog.js +30 -0
- package/dist/components/dialogs/HelpDialog.js.map +1 -0
- package/dist/components/dialogs/MetadataDialog.js +11 -3
- package/dist/components/dialogs/MetadataDialog.js.map +1 -1
- package/dist/components/dialogs/goTo.d.ts +5 -0
- package/dist/components/{header → dialogs}/goTo.js +1 -1
- package/dist/components/dialogs/goTo.js.map +1 -0
- package/dist/components/dialogs/metadataLabels.d.ts +4 -0
- package/dist/components/dialogs/metadataLabels.js +52 -0
- package/dist/components/dialogs/metadataLabels.js.map +1 -0
- package/dist/components/dialogs/metadataRecord.d.ts +1 -0
- package/dist/components/dialogs/metadataRecord.js +38 -0
- package/dist/components/dialogs/metadataRecord.js.map +1 -0
- package/dist/components/header/Header.d.ts +6 -2
- package/dist/components/header/Header.js +30 -34
- package/dist/components/header/Header.js.map +1 -1
- package/dist/components/header/HiddenColumnsChip.d.ts +6 -0
- package/dist/components/header/HiddenColumnsChip.js +15 -0
- package/dist/components/header/HiddenColumnsChip.js.map +1 -0
- package/dist/components/header/{FileMenu.d.ts → MenuBar.d.ts} +3 -3
- package/dist/components/header/MenuBar.js +33 -0
- package/dist/components/header/MenuBar.js.map +1 -0
- package/dist/components/header/ScrollZoomCheckbox.d.ts +7 -0
- package/dist/components/header/ScrollZoomCheckbox.js +19 -0
- package/dist/components/header/ScrollZoomCheckbox.js.map +1 -0
- package/dist/components/header/ZoomControls.js +12 -48
- package/dist/components/header/ZoomControls.js.map +1 -1
- package/dist/components/header/colorSchemeMenuItems.d.ts +4 -0
- package/dist/components/header/colorSchemeMenuItems.js +106 -0
- package/dist/components/header/colorSchemeMenuItems.js.map +1 -0
- package/dist/components/header/getAnnotationsMenu.d.ts +3 -30
- package/dist/components/header/getAnnotationsMenu.js +48 -54
- package/dist/components/header/getAnnotationsMenu.js.map +1 -1
- package/dist/components/header/menuBarItems.d.ts +11 -0
- package/dist/components/header/menuBarItems.js +277 -0
- package/dist/components/header/menuBarItems.js.map +1 -0
- package/dist/components/import/ImportForm.js +12 -6
- package/dist/components/import/ImportForm.js.map +1 -1
- package/dist/components/import/data/seq2.d.ts +0 -1
- package/dist/components/import/data/seq2.js +0 -17
- package/dist/components/import/data/seq2.js.map +1 -1
- package/dist/components/minimap/Minimap.js +7 -3
- package/dist/components/minimap/Minimap.js.map +1 -1
- package/dist/components/minimap/MinimapSVG.js +2 -1
- package/dist/components/minimap/MinimapSVG.js.map +1 -1
- package/dist/components/minimap/minimapLayout.d.ts +12 -0
- package/dist/components/minimap/minimapLayout.js +20 -0
- package/dist/components/minimap/minimapLayout.js.map +1 -1
- package/dist/components/msa/MSACanvas.js +28 -10
- package/dist/components/msa/MSACanvas.js.map +1 -1
- package/dist/components/msa/MSACanvasBlock.js +17 -16
- package/dist/components/msa/MSACanvasBlock.js.map +1 -1
- package/dist/components/msa/MSAMouseoverCanvas.js +2 -2
- package/dist/components/msa/MSAMouseoverCanvas.js.map +1 -1
- package/dist/components/msa/WheelZoomHint.d.ts +7 -0
- package/dist/components/msa/WheelZoomHint.js +38 -0
- package/dist/components/msa/WheelZoomHint.js.map +1 -0
- package/dist/components/msa/drawFeatureSpans.d.ts +50 -11
- package/dist/components/msa/drawFeatureSpans.js +99 -56
- package/dist/components/msa/drawFeatureSpans.js.map +1 -1
- package/dist/components/msa/msaKeys.js +3 -0
- package/dist/components/msa/msaKeys.js.map +1 -1
- package/dist/components/msa/msaRaster.d.ts +14 -2
- package/dist/components/msa/msaRaster.js +20 -10
- package/dist/components/msa/msaRaster.js.map +1 -1
- package/dist/components/msa/renderBoxFeatureCanvasBlock.d.ts +9 -0
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js +39 -8
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
- package/dist/components/msa/renderHighlights.d.ts +2 -5
- package/dist/components/msa/renderHighlights.js +5 -6
- package/dist/components/msa/renderHighlights.js.map +1 -1
- package/dist/components/msa/renderMSABlock.d.ts +6 -1
- package/dist/components/msa/renderMSABlock.js +44 -17
- package/dist/components/msa/renderMSABlock.js.map +1 -1
- package/dist/components/msa/renderMSAMouseover.js +2 -1
- package/dist/components/msa/renderMSAMouseover.js.map +1 -1
- package/dist/components/msa/tileColor.js +7 -0
- package/dist/components/msa/tileColor.js.map +1 -1
- package/dist/components/renderCtx.d.ts +1 -1
- package/dist/components/rowpanels/RowPanelBlock.js +2 -2
- package/dist/components/rowpanels/RowPanelBlock.js.map +1 -1
- package/dist/components/rowpanels/renderFeaturePanel.d.ts +5 -1
- package/dist/components/rowpanels/renderFeaturePanel.js +12 -5
- package/dist/components/rowpanels/renderFeaturePanel.js.map +1 -1
- package/dist/components/settings/MenuItemsForm.d.ts +10 -0
- package/dist/components/settings/MenuItemsForm.js +80 -0
- package/dist/components/settings/MenuItemsForm.js.map +1 -0
- package/dist/components/settings/SettingsPanel.d.ts +12 -0
- package/dist/components/settings/SettingsPanel.js +92 -0
- package/dist/components/settings/SettingsPanel.js.map +1 -0
- package/dist/components/{header/ZoomMenu.d.ts → settings/TrackList.d.ts} +2 -2
- package/dist/components/settings/TrackList.js +55 -0
- package/dist/components/settings/TrackList.js.map +1 -0
- package/dist/components/tracks/TrackBlocks.js +2 -2
- package/dist/components/tracks/TrackBlocks.js.map +1 -1
- package/dist/components/tracks/drawTracks.d.ts +1 -53
- package/dist/components/tracks/drawTracks.js +5 -5
- package/dist/components/tracks/drawTracks.js.map +1 -1
- package/dist/components/tree/CladeLabels.d.ts +1 -1
- package/dist/components/tree/CladeLabels.js +22 -34
- package/dist/components/tree/CladeLabels.js.map +1 -1
- package/dist/components/tree/TreeCanvasBlock.js +2 -2
- package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
- package/dist/components/tree/TreeMenu.js +4 -6
- package/dist/components/tree/TreeMenu.js.map +1 -1
- package/dist/components/tree/TreeOverview.js +2 -2
- package/dist/components/tree/TreeOverview.js.map +1 -1
- package/dist/components/tree/cladeBrackets.d.ts +17 -10
- package/dist/components/tree/cladeBrackets.js +33 -3
- package/dist/components/tree/cladeBrackets.js.map +1 -1
- package/dist/components/tree/renderTreeCanvas.js +2 -8
- package/dist/components/tree/renderTreeCanvas.js.map +1 -1
- package/dist/components/tree/renderTreeOverview.js +4 -11
- package/dist/components/tree/renderTreeOverview.js.map +1 -1
- package/dist/constants.d.ts +4 -1
- package/dist/constants.js +7 -1
- package/dist/constants.js.map +1 -1
- package/dist/darkReader.d.ts +7 -0
- package/dist/darkReader.js +42 -0
- package/dist/darkReader.js.map +1 -0
- package/dist/element.js +25 -53
- package/dist/element.js.map +1 -1
- package/dist/exportLayout.d.ts +39 -0
- package/dist/exportLayout.js +78 -0
- package/dist/exportLayout.js.map +1 -0
- package/dist/featurePanels.d.ts +37 -0
- package/dist/featurePanels.js +187 -0
- package/dist/featurePanels.js.map +1 -0
- package/dist/filehandleLoader.d.ts +41 -0
- package/dist/filehandleLoader.js +99 -0
- package/dist/filehandleLoader.js.map +1 -0
- package/dist/headlessRenderEnv.d.ts +12 -39
- package/dist/headlessRenderEnv.js +18 -12
- package/dist/headlessRenderEnv.js.map +1 -1
- package/dist/hierarchy.d.ts +5 -8
- package/dist/hierarchy.js +5 -79
- package/dist/hierarchy.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/measureTextCanvas.d.ts +7 -0
- package/dist/measureTextCanvas.js +8 -6
- package/dist/measureTextCanvas.js.map +1 -1
- package/dist/model/treeModel.d.ts +6 -2
- package/dist/model/treeModel.js +8 -4
- package/dist/model/treeModel.js.map +1 -1
- package/dist/model.d.ts +180 -76
- package/dist/model.js +358 -618
- package/dist/model.js.map +1 -1
- package/dist/neighborJoining.js +1 -40
- package/dist/neighborJoining.js.map +1 -1
- package/dist/renderToSvg.d.ts +2 -7
- package/dist/renderToSvg.js +33 -133
- package/dist/renderToSvg.js.map +1 -1
- package/dist/rerootTree.d.ts +1 -0
- package/dist/rerootTree.js +7 -6
- package/dist/rerootTree.js.map +1 -1
- package/dist/schemeResidueColor.d.ts +12 -0
- package/dist/schemeResidueColor.js +33 -0
- package/dist/schemeResidueColor.js.map +1 -0
- package/dist/similarityColors.d.ts +11 -0
- package/dist/similarityColors.js +90 -0
- package/dist/similarityColors.js.map +1 -0
- package/dist/svgTestUtil.d.ts +74 -32
- package/dist/treeDisplay.d.ts +37 -0
- package/dist/treeDisplay.js +209 -0
- package/dist/treeDisplay.js.map +1 -0
- package/dist/types.d.ts +6 -3
- package/dist/useWheelScroll.d.ts +3 -1
- package/dist/useWheelScroll.js +36 -17
- package/dist/useWheelScroll.js.map +1 -1
- package/dist/util.d.ts +2 -0
- package/dist/util.js +2 -0
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/viewerSnapshot.d.ts +169 -0
- package/dist/viewerSnapshot.js +100 -0
- package/dist/viewerSnapshot.js.map +1 -0
- package/dist/wheelZoom.d.ts +8 -3
- package/dist/wheelZoom.js +44 -32
- package/dist/wheelZoom.js.map +1 -1
- package/dist/zoomSnapshot.d.ts +29 -0
- package/dist/zoomSnapshot.js +47 -0
- package/dist/zoomSnapshot.js.map +1 -0
- package/package.json +11 -11
- package/src/blosum62.ts +45 -0
- package/src/colorSchemes.ts +2 -4
- package/src/columnCounts.ts +1 -1
- package/src/components/Loading.tsx +25 -14
- package/src/components/MSAView.tsx +22 -5
- package/src/components/MSAViewer.tsx +275 -251
- package/src/components/MetadataTable.tsx +83 -26
- package/src/components/ResizeHandles.tsx +9 -2
- package/src/components/Track.tsx +15 -1
- package/src/components/controls.ts +62 -0
- package/src/components/dialogs/AnnotationFileDialog.tsx +16 -21
- package/src/components/dialogs/ExportSVGDialog.tsx +8 -19
- package/src/components/dialogs/FeatureDialog.tsx +2 -5
- package/src/components/dialogs/GapThresholdDialog.tsx +36 -0
- package/src/components/{header → dialogs}/GappynessSlider.tsx +3 -10
- package/src/components/{header → dialogs}/GoToBox.tsx +36 -10
- package/src/components/dialogs/GoToDialog.tsx +30 -0
- package/src/components/dialogs/HelpDialog.tsx +79 -0
- package/src/components/dialogs/MetadataDialog.tsx +32 -4
- package/src/components/{header → dialogs}/goTo.ts +1 -1
- package/src/components/dialogs/metadataLabels.ts +54 -0
- package/src/components/dialogs/metadataRecord.tsx +61 -0
- package/src/components/header/Header.tsx +75 -44
- package/src/components/header/HiddenColumnsChip.tsx +39 -0
- package/src/components/header/MenuBar.tsx +64 -0
- package/src/components/header/ScrollZoomCheckbox.tsx +46 -0
- package/src/components/header/ZoomControls.tsx +23 -74
- package/src/components/header/colorSchemeMenuItems.ts +121 -0
- package/src/components/header/getAnnotationsMenu.ts +52 -56
- package/src/components/header/menuBarItems.ts +357 -0
- package/src/components/import/ImportForm.tsx +19 -7
- package/src/components/import/data/seq2.ts +0 -18
- package/src/components/minimap/Minimap.tsx +11 -3
- package/src/components/minimap/MinimapSVG.tsx +17 -1
- package/src/components/minimap/minimapLayout.ts +27 -0
- package/src/components/msa/MSACanvas.tsx +24 -4
- package/src/components/msa/MSACanvasBlock.tsx +20 -17
- package/src/components/msa/MSAMouseoverCanvas.tsx +2 -2
- package/src/components/msa/WheelZoomHint.tsx +56 -0
- package/src/components/msa/drawFeatureSpans.ts +160 -79
- package/src/components/msa/msaKeys.ts +3 -0
- package/src/components/msa/msaRaster.ts +26 -10
- package/src/components/msa/renderBoxFeatureCanvasBlock.ts +62 -24
- package/src/components/msa/renderHighlights.ts +5 -6
- package/src/components/msa/renderMSABlock.ts +51 -15
- package/src/components/msa/renderMSAMouseover.ts +5 -1
- package/src/components/msa/tileColor.ts +7 -0
- package/src/components/renderCtx.ts +0 -1
- package/src/components/rowpanels/RowPanelBlock.tsx +2 -2
- package/src/components/rowpanels/renderFeaturePanel.ts +26 -7
- package/src/components/settings/MenuItemsForm.tsx +225 -0
- package/src/components/settings/SettingsPanel.tsx +156 -0
- package/src/components/settings/TrackList.tsx +119 -0
- package/src/components/tracks/TrackBlocks.tsx +2 -2
- package/src/components/tracks/drawTracks.ts +5 -5
- package/src/components/tree/CladeLabels.tsx +30 -54
- package/src/components/tree/TreeCanvasBlock.tsx +2 -2
- package/src/components/tree/TreeMenu.tsx +4 -6
- package/src/components/tree/TreeOverview.tsx +2 -2
- package/src/components/tree/cladeBrackets.ts +50 -3
- package/src/components/tree/renderTreeCanvas.ts +2 -13
- package/src/components/tree/renderTreeOverview.ts +7 -14
- package/src/constants.ts +9 -1
- package/src/darkReader.ts +57 -0
- package/src/element.ts +37 -64
- package/src/exportLayout.ts +134 -0
- package/src/featurePanels.ts +269 -0
- package/src/filehandleLoader.ts +136 -0
- package/src/headlessRenderEnv.ts +24 -11
- package/src/hierarchy.ts +5 -88
- package/src/index.ts +9 -5
- package/src/measureTextCanvas.ts +8 -6
- package/src/model/treeModel.ts +9 -3
- package/src/model.ts +452 -807
- package/src/neighborJoining.ts +1 -42
- package/src/renderToSvg.tsx +56 -207
- package/src/rerootTree.ts +7 -6
- package/src/schemeResidueColor.ts +37 -0
- package/src/similarityColors.ts +112 -0
- package/src/treeDisplay.ts +278 -0
- package/src/types.ts +6 -4
- package/src/useWheelScroll.ts +43 -22
- package/src/util.ts +3 -0
- package/src/version.ts +1 -1
- package/src/viewerSnapshot.ts +147 -0
- package/src/wheelZoom.ts +55 -33
- package/src/zoomSnapshot.ts +80 -0
- package/dist/components/header/ColorSchemeMenu.d.ts +0 -12
- package/dist/components/header/ColorSchemeMenu.js +0 -37
- package/dist/components/header/ColorSchemeMenu.js.map +0 -1
- package/dist/components/header/FileMenu.js +0 -66
- package/dist/components/header/FileMenu.js.map +0 -1
- package/dist/components/header/GappynessSlider.js.map +0 -1
- package/dist/components/header/GoToBox.js +0 -31
- package/dist/components/header/GoToBox.js.map +0 -1
- package/dist/components/header/MSASettingsMenu.d.ts +0 -6
- package/dist/components/header/MSASettingsMenu.js +0 -11
- package/dist/components/header/MSASettingsMenu.js.map +0 -1
- package/dist/components/header/ScrollZoomIcons.d.ts +0 -6
- package/dist/components/header/ScrollZoomIcons.js +0 -35
- package/dist/components/header/ScrollZoomIcons.js.map +0 -1
- package/dist/components/header/TreeSettingsMenu.js +0 -42
- package/dist/components/header/TreeSettingsMenu.js.map +0 -1
- package/dist/components/header/ZoomMenu.js +0 -37
- package/dist/components/header/ZoomMenu.js.map +0 -1
- package/dist/components/header/goTo.d.ts +0 -20
- package/dist/components/header/goTo.js.map +0 -1
- package/dist/components/header/settingsMenuItems.d.ts +0 -4
- package/dist/components/header/settingsMenuItems.js +0 -127
- package/dist/components/header/settingsMenuItems.js.map +0 -1
- package/src/components/header/ColorSchemeMenu.tsx +0 -56
- package/src/components/header/FileMenu.tsx +0 -81
- package/src/components/header/MSASettingsMenu.tsx +0 -26
- package/src/components/header/ScrollZoomIcons.tsx +0 -52
- package/src/components/header/TreeSettingsMenu.tsx +0 -60
- package/src/components/header/ZoomMenu.tsx +0 -48
- package/src/components/header/settingsMenuItems.ts +0 -157
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { calculateBlocks } from './calculateBlocks.ts'
|
|
2
|
+
|
|
3
|
+
export interface ZoomSnapshot {
|
|
4
|
+
colWidth: number
|
|
5
|
+
rowHeight: number
|
|
6
|
+
blocksX: number[]
|
|
7
|
+
blocksY: number[]
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface Viewport {
|
|
11
|
+
colWidth: number
|
|
12
|
+
rowHeight: number
|
|
13
|
+
scrollX: number
|
|
14
|
+
scrollY: number
|
|
15
|
+
msaAreaWidth: number
|
|
16
|
+
msaAreaHeight: number
|
|
17
|
+
totalWidth: number
|
|
18
|
+
totalHeight: number
|
|
19
|
+
blockSize: number
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// past this stretch the scaled letters blur enough to redraw
|
|
23
|
+
const maxStretch = 2
|
|
24
|
+
|
|
25
|
+
// a redraw covers this fraction of the viewport again on each side, so a zoom
|
|
26
|
+
// out shrinks it for a few frames before it runs out of picture
|
|
27
|
+
const margin = 0.2
|
|
28
|
+
|
|
29
|
+
function blocksAt(
|
|
30
|
+
view: Viewport,
|
|
31
|
+
axis: 'x' | 'y',
|
|
32
|
+
scale: number,
|
|
33
|
+
marginFraction: number,
|
|
34
|
+
) {
|
|
35
|
+
const size = axis === 'x' ? view.msaAreaWidth : view.msaAreaHeight
|
|
36
|
+
const pos = -(axis === 'x' ? view.scrollX : view.scrollY)
|
|
37
|
+
const map = axis === 'x' ? view.totalWidth : view.totalHeight
|
|
38
|
+
const pad = size * marginFraction
|
|
39
|
+
return calculateBlocks({
|
|
40
|
+
viewportSize: (size + 2 * pad) / scale,
|
|
41
|
+
viewportPos: (pos - pad) / scale,
|
|
42
|
+
mapSize: map / scale,
|
|
43
|
+
blockSize: view.blockSize,
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const within = (need: number[], have: number[]) =>
|
|
48
|
+
need.length === 0 ||
|
|
49
|
+
(have.length > 0 && need[0]! >= have[0]! && need.at(-1)! <= have.at(-1)!)
|
|
50
|
+
|
|
51
|
+
// a gesture starts from the blocks already drawn, and each redraw during it
|
|
52
|
+
// adds the margin
|
|
53
|
+
export function takeZoomSnapshot(view: Viewport, withMargin: boolean) {
|
|
54
|
+
const m = withMargin ? margin : 0
|
|
55
|
+
return {
|
|
56
|
+
colWidth: view.colWidth,
|
|
57
|
+
rowHeight: view.rowHeight,
|
|
58
|
+
blocksX: blocksAt(view, 'x', 1, m),
|
|
59
|
+
blocksY: blocksAt(view, 'y', 1, m),
|
|
60
|
+
} satisfies ZoomSnapshot
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function zoomSnapshotScale(view: Viewport, snap: ZoomSnapshot) {
|
|
64
|
+
return {
|
|
65
|
+
sx: view.colWidth / snap.colWidth,
|
|
66
|
+
sy: view.rowHeight / snap.rowHeight,
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// whether the blocks drawn at the snapshot, stretched to the current cell
|
|
71
|
+
// size, still fill the viewport sharply enough
|
|
72
|
+
export function zoomSnapshotCovers(view: Viewport, snap: ZoomSnapshot) {
|
|
73
|
+
const { sx, sy } = zoomSnapshotScale(view, snap)
|
|
74
|
+
return (
|
|
75
|
+
sx <= maxStretch &&
|
|
76
|
+
sy <= maxStretch &&
|
|
77
|
+
within(blocksAt(view, 'x', sx, 0), snap.blocksX) &&
|
|
78
|
+
within(blocksAt(view, 'y', sy, 0), snap.blocksY)
|
|
79
|
+
)
|
|
80
|
+
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { MsaViewModel } from '../../model.ts';
|
|
3
|
-
export declare function colorSchemeMenuItems(model: MsaViewModel): {
|
|
4
|
-
readonly label: string;
|
|
5
|
-
readonly type: 'radio';
|
|
6
|
-
readonly checked: boolean;
|
|
7
|
-
readonly onClick: () => void;
|
|
8
|
-
}[];
|
|
9
|
-
declare const ColorSchemeMenu: ({ model }: {
|
|
10
|
-
model: MsaViewModel;
|
|
11
|
-
}) => React.JSX.Element;
|
|
12
|
-
export default ColorSchemeMenu;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton';
|
|
3
|
-
import Palette from '@mui/icons-material/Palette';
|
|
4
|
-
import { observer } from 'mobx-react';
|
|
5
|
-
import colorSchemes from '../../colorSchemes.js';
|
|
6
|
-
// While a `customColorScheme` map is set, a checked Custom entry stands for it
|
|
7
|
-
// and no named scheme is checked. Picking a named scheme clears the map.
|
|
8
|
-
export function colorSchemeMenuItems(model) {
|
|
9
|
-
const { colorSchemeName, customColorScheme } = model;
|
|
10
|
-
const custom = customColorScheme
|
|
11
|
-
? [
|
|
12
|
-
{
|
|
13
|
-
label: 'Custom',
|
|
14
|
-
type: 'radio',
|
|
15
|
-
checked: true,
|
|
16
|
-
onClick: () => { },
|
|
17
|
-
},
|
|
18
|
-
]
|
|
19
|
-
: [];
|
|
20
|
-
return [
|
|
21
|
-
...custom,
|
|
22
|
-
...Object.keys(colorSchemes).map(option => ({
|
|
23
|
-
label: option,
|
|
24
|
-
type: 'radio',
|
|
25
|
-
checked: !customColorScheme && colorSchemeName === option,
|
|
26
|
-
onClick: () => {
|
|
27
|
-
model.setColorSchemeName(option);
|
|
28
|
-
},
|
|
29
|
-
})),
|
|
30
|
-
];
|
|
31
|
-
}
|
|
32
|
-
const ColorSchemeMenu = observer(function ({ model }) {
|
|
33
|
-
return (React.createElement(CascadingMenuButton, { "data-testid": "color_scheme_menu", tooltip: "Color scheme", closeAfterItemClick: true, anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, menuItems: colorSchemeMenuItems(model) },
|
|
34
|
-
React.createElement(Palette, null)));
|
|
35
|
-
});
|
|
36
|
-
export default ColorSchemeMenu;
|
|
37
|
-
//# sourceMappingURL=ColorSchemeMenu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ColorSchemeMenu.js","sourceRoot":"","sources":["../../../src/components/header/ColorSchemeMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,OAAO,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,YAAY,MAAM,uBAAuB,CAAA;AAIhD,+EAA+E;AAC/E,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,KAAmB;IACtD,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAA;IACpD,MAAM,MAAM,GAAG,iBAAiB;QAC9B,CAAC,CAAC;YACE;gBACE,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;aACT;SACX;QACH,CAAC,CAAC,EAAE,CAAA;IACN,OAAO;QACL,GAAG,MAAM;QACT,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAC9B,MAAM,CAAC,EAAE,CACP,CAAC;YACC,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,CAAC,iBAAiB,IAAI,eAAe,KAAK,MAAM;YACzD,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;YAClC,CAAC;SACF,CAAU,CACd;KACF,CAAA;AACH,CAAC;AAED,MAAM,eAAe,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IAC3E,OAAO,CACL,oBAAC,mBAAmB,mBACN,mBAAmB,EAC/B,OAAO,EAAC,cAAc,EACtB,mBAAmB,QACnB,YAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;QAEtC,oBAAC,OAAO,OAAG,CACS,CACvB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,eAAe,CAAA"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import React, { lazy } from 'react';
|
|
2
|
-
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton';
|
|
3
|
-
import AccountTree from '@mui/icons-material/AccountTree';
|
|
4
|
-
import Assignment from '@mui/icons-material/Assignment';
|
|
5
|
-
import FolderOpen from '@mui/icons-material/FolderOpen';
|
|
6
|
-
import Menu from '@mui/icons-material/Menu';
|
|
7
|
-
import PhotoCamera from '@mui/icons-material/PhotoCamera';
|
|
8
|
-
import { observer } from 'mobx-react';
|
|
9
|
-
import { getAnnotationsMenu } from './getAnnotationsMenu.js';
|
|
10
|
-
const MetadataDialog = lazy(() => import('../dialogs/MetadataDialog.js'));
|
|
11
|
-
const ExportSVGDialog = lazy(() => import('../dialogs/ExportSVGDialog.js'));
|
|
12
|
-
const FileMenu = observer(({ model }) => {
|
|
13
|
-
return (React.createElement(CascadingMenuButton, { "data-testid": "file_menu", tooltip: "File", menuItems: [
|
|
14
|
-
{
|
|
15
|
-
label: 'Return to import form',
|
|
16
|
-
icon: FolderOpen,
|
|
17
|
-
onClick: () => {
|
|
18
|
-
model.reset();
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
label: 'Metadata',
|
|
23
|
-
icon: Assignment,
|
|
24
|
-
onClick: () => {
|
|
25
|
-
model.queueDialog(onClose => [
|
|
26
|
-
MetadataDialog,
|
|
27
|
-
{
|
|
28
|
-
model,
|
|
29
|
-
onClose,
|
|
30
|
-
},
|
|
31
|
-
]);
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
label: 'Annotations',
|
|
36
|
-
type: 'subMenu',
|
|
37
|
-
subMenu: getAnnotationsMenu({
|
|
38
|
-
model,
|
|
39
|
-
}),
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
label: 'Export tree (Newick)',
|
|
43
|
-
icon: AccountTree,
|
|
44
|
-
disabled: !!model.tree.noTree,
|
|
45
|
-
onClick: () => {
|
|
46
|
-
model.exportNewick();
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
label: 'Export SVG',
|
|
51
|
-
icon: PhotoCamera,
|
|
52
|
-
onClick: () => {
|
|
53
|
-
model.queueDialog(onClose => [
|
|
54
|
-
ExportSVGDialog,
|
|
55
|
-
{
|
|
56
|
-
onClose,
|
|
57
|
-
model,
|
|
58
|
-
},
|
|
59
|
-
]);
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
], anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, transformOrigin: { vertical: 'top', horizontal: 'left' } },
|
|
63
|
-
React.createElement(Menu, null)));
|
|
64
|
-
});
|
|
65
|
-
export default FileMenu;
|
|
66
|
-
//# sourceMappingURL=FileMenu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FileMenu.js","sourceRoot":"","sources":["../../../src/components/header/FileMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAEnC,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,WAAW,MAAM,iCAAiC,CAAA;AACzD,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAC3C,OAAO,WAAW,MAAM,iCAAiC,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAI5D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,8BAA+B,CAAC,CAAC,CAAA;AAC1E,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,+BAAgC,CAAC,CAAC,CAAA;AAE5E,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,EAA2B,EAAE,EAAE;IAC/D,OAAO,CACL,oBAAC,mBAAmB,mBACN,WAAW,EACvB,OAAO,EAAC,MAAM,EACd,SAAS,EAAE;YACT;gBACE,KAAK,EAAE,uBAAuB;gBAC9B,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,KAAK,EAAE,CAAA;gBACf,CAAC;aACF;YACD;gBACE,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC3B,cAAc;wBACd;4BACE,KAAK;4BACL,OAAO;yBACR;qBACF,CAAC,CAAA;gBACJ,CAAC;aACF;YACD;gBACE,KAAK,EAAE,aAAa;gBACpB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,kBAAkB,CAAC;oBAC1B,KAAK;iBACN,CAAC;aACH;YACD;gBACE,KAAK,EAAE,sBAAsB;gBAC7B,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;gBAC7B,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,YAAY,EAAE,CAAA;gBACtB,CAAC;aACF;YACD;gBACE,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC3B,eAAe;wBACf;4BACE,OAAO;4BACP,KAAK;yBACN;qBACF,CAAC,CAAA;gBACJ,CAAC;aACF;SACF,EACD,YAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE;QAExD,oBAAC,IAAI,OAAG,CACY,CACvB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,QAAQ,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GappynessSlider.js","sourceRoot":"","sources":["../../../src/components/header/GappynessSlider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,eAAe,GAAG,QAAQ,CAAC,SAAS,eAAe,CAAC,EACxD,KAAK,GAGN;IACC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAA;IAC5C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,EAAU,CAAA;IACpD,MAAM,KAAK,GAAG,SAAS,IAAI,gBAAgB,CAAA;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE;QAI3D,oBAAC,UAAU,IAAC,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;;YACpB,KAAK;qBACf;QACb,oBAAC,MAAM;QACL,qEAAqE;QACrE,6DAA6D;QAC7D,wEAAwE;QACxE,yCAAyC;QACzC,EAAE;QACF,sEAAsE;QACtE,0DAA0D;QAC1D,EAAE;QACF,uEAAuE;QACvE,qEAAqE;QACrE,uBAAuB;QACvB,EAAE;QACF,iEAAiE;QACjE,uDAAuD;2BAC3C,kBAAkB,EAC9B,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,EACvC,GAAG,EAAE,CAAC,EACN,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;gBACnB,YAAY,CAAC,GAAG,CAAC,CAAA;YACnB,CAAC,EACD,iBAAiB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;gBAC5B,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAA;gBAC9B,YAAY,CAAC,SAAS,CAAC,CAAA;YACzB,CAAC,GACD,CACE,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,eAAe,CAAA"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
2
|
-
import { Autocomplete, TextField } from '@mui/material';
|
|
3
|
-
import { observer } from 'mobx-react';
|
|
4
|
-
import { findableRowNames, goTo, rowNameSuggestions } from './goTo.js';
|
|
5
|
-
const label = 'Go to row or column';
|
|
6
|
-
// MUI 9 hands renderInput `slotProps`; MUI 7, which every released JBrowse host
|
|
7
|
-
// serves, hands it `inputProps` and no `slotProps` at all
|
|
8
|
-
export function labelledInput(params) {
|
|
9
|
-
const { slotProps, inputProps } = params;
|
|
10
|
-
return slotProps
|
|
11
|
-
? {
|
|
12
|
-
slotProps: {
|
|
13
|
-
...slotProps,
|
|
14
|
-
htmlInput: { ...slotProps.htmlInput, 'aria-label': label },
|
|
15
|
-
},
|
|
16
|
-
}
|
|
17
|
-
: { inputProps: { ...inputProps, 'aria-label': label } };
|
|
18
|
-
}
|
|
19
|
-
const GoToBox = observer(function ({ model }) {
|
|
20
|
-
const [missed, setMissed] = useState(false);
|
|
21
|
-
const names = findableRowNames(model);
|
|
22
|
-
return names.length > 1 || model.numColumns > 0 ? (React.createElement(Autocomplete, { freeSolo: true, size: "small", options: names, filterOptions: (options, { inputValue }) => rowNameSuggestions(options, inputValue), value: null, blurOnSelect: true, onInputChange: () => {
|
|
23
|
-
setMissed(false);
|
|
24
|
-
}, onChange: (_, text) => {
|
|
25
|
-
if (text) {
|
|
26
|
-
setMissed(!goTo(model, text));
|
|
27
|
-
}
|
|
28
|
-
}, style: { width: 180, margin: 'auto 8px' }, renderInput: params => (React.createElement(TextField, { ...params, error: missed, placeholder: label, title: "A row name, a column number, or name:residue", ...labelledInput(params) })) })) : null;
|
|
29
|
-
});
|
|
30
|
-
export default GoToBox;
|
|
31
|
-
//# sourceMappingURL=GoToBox.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GoToBox.js","sourceRoot":"","sources":["../../../src/components/header/GoToBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAKtE,MAAM,KAAK,GAAG,qBAAqB,CAAA;AAEnC,gFAAgF;AAChF,0DAA0D;AAC1D,MAAM,UAAU,aAAa,CAAC,MAAqC;IACjE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAEjC,CAAA;IACD,OAAO,SAAS;QACd,CAAC,CAAC;YACE,SAAS,EAAE;gBACT,GAAG,SAAS;gBACZ,SAAS,EAAE,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE;aAC3D;SACF;QACH,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAA;AAC5D,CAAC;AAED,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACnE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACrC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAChD,oBAAC,YAAY,IACX,QAAQ,QACR,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,KAAK,EACd,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CACzC,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,EAEzC,KAAK,EAAE,IAAI,EACX,YAAY,QACZ,aAAa,EAAE,GAAG,EAAE;YAClB,SAAS,CAAC,KAAK,CAAC,CAAA;QAClB,CAAC,EACD,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;YACpB,IAAI,IAAI,EAAE,CAAC;gBACT,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,EACzC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CACrB,oBAAC,SAAS,OACJ,MAAM,EACV,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,KAAK,EAClB,KAAK,EAAC,8CAA8C,KAChD,aAAa,CAAC,MAAM,CAAC,GACzB,CACH,GACD,CACH,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAC,CAAA;AAEF,eAAe,OAAO,CAAA"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton';
|
|
3
|
-
import Tune from '@mui/icons-material/Tune';
|
|
4
|
-
import { observer } from 'mobx-react';
|
|
5
|
-
import { msaSettingsMenuItems } from './settingsMenuItems.js';
|
|
6
|
-
const MSASettingsMenu = observer(function ({ model }) {
|
|
7
|
-
return (React.createElement(CascadingMenuButton, { "data-testid": "msa_settings_menu", tooltip: "Alignment settings", closeAfterItemClick: false, anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, menuItems: msaSettingsMenuItems(model) },
|
|
8
|
-
React.createElement(Tune, null)));
|
|
9
|
-
});
|
|
10
|
-
export default MSASettingsMenu;
|
|
11
|
-
//# sourceMappingURL=MSASettingsMenu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MSASettingsMenu.js","sourceRoot":"","sources":["../../../src/components/header/MSASettingsMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAI7D,MAAM,eAAe,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IAC3E,OAAO,CACL,oBAAC,mBAAmB,mBACN,mBAAmB,EAC/B,OAAO,EAAC,oBAAoB,EAC5B,mBAAmB,EAAE,KAAK,EAC1B,YAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;QAEtC,oBAAC,IAAI,OAAG,CACY,CACvB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,eAAe,CAAA"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { SvgIconProps } from '@mui/material/SvgIcon';
|
|
3
|
-
export declare function MouseScroll(props: SvgIconProps): React.JSX.Element;
|
|
4
|
-
export declare function MouseZoomBoth(props: SvgIconProps): React.JSX.Element;
|
|
5
|
-
export declare function MouseZoomHorizontal(props: SvgIconProps): React.JSX.Element;
|
|
6
|
-
export declare function MouseZoomVertical(props: SvgIconProps): React.JSX.Element;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import SvgIcon from '@mui/material/SvgIcon';
|
|
3
|
-
// Mouse glyphs with outward arrows on the axes a wheel zoom scales.
|
|
4
|
-
// @mui/icons-material ships only the plain `Mouse`, and three variants that
|
|
5
|
-
// differ only in their arrows have to share one body to stay apart at 24px.
|
|
6
|
-
// The body's inner subpath runs the opposite sweep, which punches the hole the
|
|
7
|
-
// wheel bar sits in.
|
|
8
|
-
const BODY = 'M12 5a4 4 0 0 0-4 4v6a4 4 0 0 0 8 0V9a4 4 0 0 0-4-4zm0 2a2 2 0 0 1 2 2v6a2 2 0 0 1-4 0V9a2 2 0 0 1 2-2z';
|
|
9
|
-
const WHEEL = 'M11.2 8.6h1.6v3.2h-1.6z';
|
|
10
|
-
const LEFT = 'M.4 12 5 15V9z';
|
|
11
|
-
const RIGHT = 'M23.6 12 19 9v6z';
|
|
12
|
-
const UP = 'M12 .4 15 4H9z';
|
|
13
|
-
const DOWN = 'M12 23.6 9 20h6z';
|
|
14
|
-
function MouseZoom({ arrows, ...rest }) {
|
|
15
|
-
return (React.createElement(SvgIcon, { ...rest },
|
|
16
|
-
React.createElement("path", { d: BODY }),
|
|
17
|
-
React.createElement("path", { d: WHEEL }),
|
|
18
|
-
arrows.map(d => (React.createElement("path", { key: d, d: d })))));
|
|
19
|
-
}
|
|
20
|
-
// the bare body, for a wheel that scrolls. @mui/icons-material's own `Mouse` is
|
|
21
|
-
// a solid silhouette, which would jump to a different drawing when the menu
|
|
22
|
-
// changes the mode.
|
|
23
|
-
export function MouseScroll(props) {
|
|
24
|
-
return React.createElement(MouseZoom, { ...props, arrows: [] });
|
|
25
|
-
}
|
|
26
|
-
export function MouseZoomBoth(props) {
|
|
27
|
-
return React.createElement(MouseZoom, { ...props, arrows: [LEFT, RIGHT, UP, DOWN] });
|
|
28
|
-
}
|
|
29
|
-
export function MouseZoomHorizontal(props) {
|
|
30
|
-
return React.createElement(MouseZoom, { ...props, arrows: [LEFT, RIGHT] });
|
|
31
|
-
}
|
|
32
|
-
export function MouseZoomVertical(props) {
|
|
33
|
-
return React.createElement(MouseZoom, { ...props, arrows: [UP, DOWN] });
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=ScrollZoomIcons.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollZoomIcons.js","sourceRoot":"","sources":["../../../src/components/header/ScrollZoomIcons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,OAAO,MAAM,uBAAuB,CAAA;AAI3C,oEAAoE;AACpE,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAC/E,qBAAqB;AACrB,MAAM,IAAI,GACR,yGAAyG,CAAA;AAC3G,MAAM,KAAK,GAAG,yBAAyB,CAAA;AACvC,MAAM,IAAI,GAAG,gBAAgB,CAAA;AAC7B,MAAM,KAAK,GAAG,kBAAkB,CAAA;AAChC,MAAM,EAAE,GAAG,gBAAgB,CAAA;AAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAA;AAE/B,SAAS,SAAS,CAAC,EACjB,MAAM,EACN,GAAG,IAAI,EACsC;IAC7C,OAAO,CACL,oBAAC,OAAO,OAAK,IAAI;QACf,8BAAM,CAAC,EAAE,IAAI,GAAI;QACjB,8BAAM,CAAC,EAAE,KAAK,GAAI;QACjB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACf,8BAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAI,CACvB,CAAC,CACM,CACX,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,4EAA4E;AAC5E,oBAAoB;AACpB,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,OAAO,oBAAC,SAAS,OAAK,KAAK,EAAE,MAAM,EAAE,EAAE,GAAI,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAmB;IAC/C,OAAO,oBAAC,SAAS,OAAK,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAI,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAmB;IACrD,OAAO,oBAAC,SAAS,OAAK,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,GAAI,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAmB;IACnD,OAAO,oBAAC,SAAS,OAAK,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,GAAI,CAAA;AACrD,CAAC"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton';
|
|
3
|
-
import AccountTree from '@mui/icons-material/AccountTree';
|
|
4
|
-
import { observer } from 'mobx-react';
|
|
5
|
-
import { maxNeighborJoiningRows } from '../../constants.js';
|
|
6
|
-
import { treeSettingsMenuItems } from './settingsMenuItems.js';
|
|
7
|
-
const TreeSettingsMenu = observer(function ({ model, }) {
|
|
8
|
-
const { rows } = model;
|
|
9
|
-
const tooManyRows = rows.length > maxNeighborJoiningRows;
|
|
10
|
-
return (React.createElement(CascadingMenuButton, { "data-testid": "tree_settings_menu", tooltip: "Tree settings", closeAfterItemClick: false, anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, menuItems: [
|
|
11
|
-
...treeSettingsMenuItems(model),
|
|
12
|
-
...(rows.length >= 2
|
|
13
|
-
? [
|
|
14
|
-
{
|
|
15
|
-
label: 'Advanced',
|
|
16
|
-
type: 'subMenu',
|
|
17
|
-
subMenu: [
|
|
18
|
-
{
|
|
19
|
-
// the label shows the cap before a click would freeze the tab
|
|
20
|
-
label: tooManyRows
|
|
21
|
-
? `Calculate neighbor joining tree (over ${maxNeighborJoiningRows} rows, use FastTree)`
|
|
22
|
-
: 'Calculate neighbor joining tree (BLOSUM62)',
|
|
23
|
-
disabled: tooManyRows,
|
|
24
|
-
onClick: () => {
|
|
25
|
-
try {
|
|
26
|
-
model.calculateNeighborJoiningTreeFromMSA();
|
|
27
|
-
}
|
|
28
|
-
catch (e) {
|
|
29
|
-
console.error('Failed to calculate NJ tree:', e);
|
|
30
|
-
model.setError(e);
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
],
|
|
35
|
-
},
|
|
36
|
-
]
|
|
37
|
-
: []),
|
|
38
|
-
] },
|
|
39
|
-
React.createElement(AccountTree, null)));
|
|
40
|
-
});
|
|
41
|
-
export default TreeSettingsMenu;
|
|
42
|
-
//# sourceMappingURL=TreeSettingsMenu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSettingsMenu.js","sourceRoot":"","sources":["../../../src/components/header/TreeSettingsMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,WAAW,MAAM,iCAAiC,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAI9D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,EAC1C,KAAK,GAGN;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IACtB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,sBAAsB,CAAA;IACxD,OAAO,CACL,oBAAC,mBAAmB,mBACN,oBAAoB,EAChC,OAAO,EAAC,eAAe,EACvB,mBAAmB,EAAE,KAAK,EAC1B,YAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,SAAS,EAAE;YACT,GAAG,qBAAqB,CAAC,KAAK,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC;gBAClB,CAAC,CAAC;oBACE;wBACE,KAAK,EAAE,UAAU;wBACjB,IAAI,EAAE,SAAkB;wBACxB,OAAO,EAAE;4BACP;gCACE,8DAA8D;gCAC9D,KAAK,EAAE,WAAW;oCAChB,CAAC,CAAC,yCAAyC,sBAAsB,sBAAsB;oCACvF,CAAC,CAAC,4CAA4C;gCAChD,QAAQ,EAAE,WAAW;gCACrB,OAAO,EAAE,GAAG,EAAE;oCACZ,IAAI,CAAC;wCACH,KAAK,CAAC,mCAAmC,EAAE,CAAA;oCAC7C,CAAC;oCAAC,OAAO,CAAC,EAAE,CAAC;wCACX,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAA;wCAChD,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;oCACnB,CAAC;gCACH,CAAC;6BACF;yBACF;qBACF;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;QAED,oBAAC,WAAW,OAAG,CACK,CACvB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,gBAAgB,CAAA"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton';
|
|
3
|
-
import MoreVert from '@mui/icons-material/MoreVert';
|
|
4
|
-
import RestartAlt from '@mui/icons-material/RestartAlt';
|
|
5
|
-
import { observer } from 'mobx-react';
|
|
6
|
-
const ZoomMenu = observer(function ({ model }) {
|
|
7
|
-
return (React.createElement(CascadingMenuButton, { tooltip: "Fit / zoom options", menuItems: [
|
|
8
|
-
{
|
|
9
|
-
label: 'Fit both vertically/horizontally',
|
|
10
|
-
onClick: () => {
|
|
11
|
-
model.fit();
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
label: 'Fit vertically',
|
|
16
|
-
onClick: () => {
|
|
17
|
-
model.fitVertically();
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
label: 'Fit horizontally',
|
|
22
|
-
onClick: () => {
|
|
23
|
-
model.fitHorizontally();
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
label: 'Reset zoom to default',
|
|
28
|
-
icon: RestartAlt,
|
|
29
|
-
onClick: () => {
|
|
30
|
-
model.resetZoom();
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
] },
|
|
34
|
-
React.createElement(MoreVert, null)));
|
|
35
|
-
});
|
|
36
|
-
export default ZoomMenu;
|
|
37
|
-
//# sourceMappingURL=ZoomMenu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ZoomMenu.js","sourceRoot":"","sources":["../../../src/components/header/ZoomMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,QAAQ,MAAM,8BAA8B,CAAA;AACnD,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACpE,OAAO,CACL,oBAAC,mBAAmB,IAClB,OAAO,EAAC,oBAAoB,EAC5B,SAAS,EAAE;YACT;gBACE,KAAK,EAAE,kCAAkC;gBACzC,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,GAAG,EAAE,CAAA;gBACb,CAAC;aACF;YACD;gBACE,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,aAAa,EAAE,CAAA;gBACvB,CAAC;aACF;YACD;gBACE,KAAK,EAAE,kBAAkB;gBACzB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,eAAe,EAAE,CAAA;gBACzB,CAAC;aACF;YAED;gBACE,KAAK,EAAE,uBAAuB;gBAC9B,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,SAAS,EAAE,CAAA;gBACnB,CAAC;aACF;SACF;QAED,oBAAC,QAAQ,OAAG,CACQ,CACvB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,QAAQ,CAAA"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { MsaViewModel } from '../../model.ts';
|
|
2
|
-
export declare function findableRowNames(model: MsaViewModel): string[];
|
|
3
|
-
export declare function rowNameSuggestions(names: string[], input: string, limit?: number): string[];
|
|
4
|
-
/**
|
|
5
|
-
* The visible row and column a "Go to" entry names: a row by its name, the
|
|
6
|
-
* column the ruler numbers N, or residue N of a row written `name:N`. A name
|
|
7
|
-
* is tried whole first, so a row called `chr1:100` stays reachable.
|
|
8
|
-
*/
|
|
9
|
-
export declare function resolveGoTo(model: MsaViewModel, text: string): {
|
|
10
|
-
row: number;
|
|
11
|
-
col?: undefined;
|
|
12
|
-
} | {
|
|
13
|
-
row: number | undefined;
|
|
14
|
-
col: number;
|
|
15
|
-
} | {
|
|
16
|
-
row?: undefined;
|
|
17
|
-
col: number;
|
|
18
|
-
} | undefined;
|
|
19
|
-
/** centers the view on the entry's target and lights it; false if none */
|
|
20
|
-
export declare function goTo(model: MsaViewModel, text: string): boolean;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"goTo.js","sourceRoot":"","sources":["../../../src/components/header/goTo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { treeOrders } from '../../constants.js';
|
|
2
|
-
function radio(label, checked, onClick) {
|
|
3
|
-
return { label, type: 'radio', checked, onClick };
|
|
4
|
-
}
|
|
5
|
-
const treeOrderLabels = {
|
|
6
|
-
branchLength: 'By branch length',
|
|
7
|
-
input: 'As written',
|
|
8
|
-
ladderize: 'Ladderize, small clades first',
|
|
9
|
-
ladderizeReverse: 'Ladderize, large clades first',
|
|
10
|
-
};
|
|
11
|
-
function outgroupLabel(outgroup) {
|
|
12
|
-
const [first, ...rest] = outgroup;
|
|
13
|
-
return rest.length === 0
|
|
14
|
-
? `Outgroup ${first}`
|
|
15
|
-
: `Outgroup ${first} … ${rest.at(-1)}`;
|
|
16
|
-
}
|
|
17
|
-
function toggle(label, checked, set) {
|
|
18
|
-
return {
|
|
19
|
-
label,
|
|
20
|
-
type: 'checkbox',
|
|
21
|
-
checked,
|
|
22
|
-
onClick: () => {
|
|
23
|
-
set(!checked);
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
// the only place in the UI to turn a hidden track back on
|
|
28
|
-
function tracksSubMenu(model) {
|
|
29
|
-
const shown = new Set(model.turnedOnTracks.map(t => t.model.id));
|
|
30
|
-
return model.tracks.map(({ model: { id, name } }) => toggle(name, shown.has(id), () => {
|
|
31
|
-
model.toggleTrack(id);
|
|
32
|
-
}));
|
|
33
|
-
}
|
|
34
|
-
export function msaSettingsMenuItems(model) {
|
|
35
|
-
const { drawMsaLetters, hideGaps, bgColor, showColumnStats } = model;
|
|
36
|
-
return [
|
|
37
|
-
{
|
|
38
|
-
label: 'Tracks',
|
|
39
|
-
type: 'subMenu',
|
|
40
|
-
subMenu: tracksSubMenu(model),
|
|
41
|
-
},
|
|
42
|
-
{ type: 'divider' },
|
|
43
|
-
toggle('Show track values on hover', showColumnStats, arg => {
|
|
44
|
-
model.setShowColumnStats(arg);
|
|
45
|
-
}),
|
|
46
|
-
toggle('Draw letters', drawMsaLetters, arg => {
|
|
47
|
-
model.setDrawMsaLetters(arg);
|
|
48
|
-
}),
|
|
49
|
-
// inverted: bgColor colors the tile, and off colors the letter
|
|
50
|
-
toggle('Color letters, not cells', !bgColor, arg => {
|
|
51
|
-
model.setBgColor(!arg);
|
|
52
|
-
}),
|
|
53
|
-
toggle('Hide gappy columns', hideGaps, arg => {
|
|
54
|
-
model.setHideGaps(arg);
|
|
55
|
-
}),
|
|
56
|
-
];
|
|
57
|
-
}
|
|
58
|
-
export function treeSettingsMenuItems(model) {
|
|
59
|
-
const { drawTree, showBranchLen, labelsAlignRight, drawNodeBubbles, drawNodeLabels, drawLabels, treeAreaWidth, showTreeOverview, treeOrder, treeRoot, rotated, } = model;
|
|
60
|
-
return [
|
|
61
|
-
{
|
|
62
|
-
label: 'Order',
|
|
63
|
-
type: 'subMenu',
|
|
64
|
-
subMenu: [
|
|
65
|
-
...treeOrders.map(order => radio(treeOrderLabels[order], treeOrder === order, () => {
|
|
66
|
-
model.setTreeOrder(order);
|
|
67
|
-
})),
|
|
68
|
-
{ type: 'divider' },
|
|
69
|
-
{
|
|
70
|
-
label: 'Undo rotations',
|
|
71
|
-
disabled: rotated.length === 0,
|
|
72
|
-
onClick: () => {
|
|
73
|
-
model.clearRotated();
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
],
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
label: 'Root',
|
|
80
|
-
type: 'subMenu',
|
|
81
|
-
subMenu: [
|
|
82
|
-
radio('As written', treeRoot === undefined, () => {
|
|
83
|
-
model.setTreeRoot(undefined);
|
|
84
|
-
}),
|
|
85
|
-
radio('Midpoint', treeRoot === 'midpoint', () => {
|
|
86
|
-
model.setTreeRoot('midpoint');
|
|
87
|
-
}),
|
|
88
|
-
// "Reroot here" in a node's menu sets the outgroup, so this only
|
|
89
|
-
// reports it
|
|
90
|
-
...(typeof treeRoot === 'object'
|
|
91
|
-
? [
|
|
92
|
-
{
|
|
93
|
-
...radio(outgroupLabel(treeRoot.outgroup), true, () => { }),
|
|
94
|
-
disabled: true,
|
|
95
|
-
},
|
|
96
|
-
]
|
|
97
|
-
: []),
|
|
98
|
-
],
|
|
99
|
-
},
|
|
100
|
-
{ type: 'divider' },
|
|
101
|
-
toggle('Show branch length', showBranchLen, arg => {
|
|
102
|
-
model.setShowBranchLen(arg);
|
|
103
|
-
}),
|
|
104
|
-
toggle('Show tree', drawTree, arg => {
|
|
105
|
-
model.setDrawTree(arg);
|
|
106
|
-
}),
|
|
107
|
-
toggle('Draw bubbles on tree branches', drawNodeBubbles, arg => {
|
|
108
|
-
model.setDrawNodeBubbles(arg);
|
|
109
|
-
}),
|
|
110
|
-
toggle('Draw internal node labels', drawNodeLabels, arg => {
|
|
111
|
-
model.setDrawNodeLabels(arg);
|
|
112
|
-
}),
|
|
113
|
-
toggle('Show tree overview', showTreeOverview, arg => {
|
|
114
|
-
model.setShowTreeOverview(arg);
|
|
115
|
-
}),
|
|
116
|
-
toggle('Tree labels align right', labelsAlignRight, arg => {
|
|
117
|
-
model.setLabelsAlignRight(arg);
|
|
118
|
-
}),
|
|
119
|
-
toggle('Draw labels', drawLabels, arg => {
|
|
120
|
-
model.setDrawLabels(arg);
|
|
121
|
-
}),
|
|
122
|
-
toggle('Fit tree area to labels and tree', treeAreaWidth === undefined, arg => {
|
|
123
|
-
model.setTreeAreaWidth(arg ? undefined : model.effectiveTreeAreaWidth);
|
|
124
|
-
}),
|
|
125
|
-
];
|
|
126
|
-
}
|
|
127
|
-
//# sourceMappingURL=settingsMenuItems.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settingsMenuItems.js","sourceRoot":"","sources":["../../../src/components/header/settingsMenuItems.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
|
|
3
|
-
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'
|
|
4
|
-
import Palette from '@mui/icons-material/Palette'
|
|
5
|
-
import { observer } from 'mobx-react'
|
|
6
|
-
|
|
7
|
-
import colorSchemes from '../../colorSchemes.ts'
|
|
8
|
-
|
|
9
|
-
import type { MsaViewModel } from '../../model.ts'
|
|
10
|
-
|
|
11
|
-
// While a `customColorScheme` map is set, a checked Custom entry stands for it
|
|
12
|
-
// and no named scheme is checked. Picking a named scheme clears the map.
|
|
13
|
-
export function colorSchemeMenuItems(model: MsaViewModel) {
|
|
14
|
-
const { colorSchemeName, customColorScheme } = model
|
|
15
|
-
const custom = customColorScheme
|
|
16
|
-
? [
|
|
17
|
-
{
|
|
18
|
-
label: 'Custom',
|
|
19
|
-
type: 'radio',
|
|
20
|
-
checked: true,
|
|
21
|
-
onClick: () => {},
|
|
22
|
-
} as const,
|
|
23
|
-
]
|
|
24
|
-
: []
|
|
25
|
-
return [
|
|
26
|
-
...custom,
|
|
27
|
-
...Object.keys(colorSchemes).map(
|
|
28
|
-
option =>
|
|
29
|
-
({
|
|
30
|
-
label: option,
|
|
31
|
-
type: 'radio',
|
|
32
|
-
checked: !customColorScheme && colorSchemeName === option,
|
|
33
|
-
onClick: () => {
|
|
34
|
-
model.setColorSchemeName(option)
|
|
35
|
-
},
|
|
36
|
-
}) as const,
|
|
37
|
-
),
|
|
38
|
-
]
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const ColorSchemeMenu = observer(function ({ model }: { model: MsaViewModel }) {
|
|
42
|
-
return (
|
|
43
|
-
<CascadingMenuButton
|
|
44
|
-
data-testid="color_scheme_menu"
|
|
45
|
-
tooltip="Color scheme"
|
|
46
|
-
closeAfterItemClick
|
|
47
|
-
anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}
|
|
48
|
-
transformOrigin={{ vertical: 'top', horizontal: 'left' }}
|
|
49
|
-
menuItems={colorSchemeMenuItems(model)}
|
|
50
|
-
>
|
|
51
|
-
<Palette />
|
|
52
|
-
</CascadingMenuButton>
|
|
53
|
-
)
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
export default ColorSchemeMenu
|