react-msaview 9.1.0 → 9.2.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/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 +1 -0
- package/dist/colorSchemes.js.map +1 -1
- package/dist/components/Loading.d.ts +3 -2
- package/dist/components/Loading.js +2 -2
- 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 +64 -12
- 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/Track.js +6 -0
- package/dist/components/Track.js.map +1 -1
- package/dist/components/controls.js +2 -1
- package/dist/components/controls.js.map +1 -1
- package/dist/components/dialogs/AnnotationFileDialog.js +7 -2
- package/dist/components/dialogs/AnnotationFileDialog.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/MSASettingsMenu.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/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 -32
- package/dist/components/header/Header.js.map +1 -1
- package/dist/components/header/{TreeSettingsMenu.d.ts → HiddenColumnsChip.d.ts} +2 -2
- package/dist/components/header/HiddenColumnsChip.js +15 -0
- package/dist/components/header/HiddenColumnsChip.js.map +1 -0
- package/dist/components/header/MenuBar.d.ts +6 -0
- 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 +10 -30
- 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/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 +26 -9
- package/dist/components/msa/MSACanvas.js.map +1 -1
- package/dist/components/msa/MSACanvasBlock.js +15 -11
- 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/msaKeys.js +3 -0
- package/dist/components/msa/msaKeys.js.map +1 -1
- package/dist/components/msa/msaRaster.d.ts +4 -5
- package/dist/components/msa/msaRaster.js +5 -5
- package/dist/components/msa/msaRaster.js.map +1 -1
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js +22 -2
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
- package/dist/components/msa/renderHighlights.d.ts +0 -3
- package/dist/components/msa/renderHighlights.js +3 -3
- 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/tileColor.js +7 -0
- package/dist/components/msa/tileColor.js.map +1 -1
- package/dist/components/rowpanels/RowPanelBlock.js +2 -2
- package/dist/components/rowpanels/RowPanelBlock.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/FileMenu.d.ts → settings/TrackList.d.ts} +2 -2
- package/dist/components/settings/TrackList.js +58 -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/TrackTooltipContent.js +2 -1
- package/dist/components/tracks/TrackTooltipContent.js.map +1 -1
- package/dist/components/tracks/drawTracks.js +13 -6
- package/dist/components/tracks/drawTracks.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/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 +22 -47
- package/dist/element.js.map +1 -1
- 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/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/model/treeModel.d.ts +9 -0
- package/dist/model/treeModel.js +12 -1
- package/dist/model/treeModel.js.map +1 -1
- package/dist/model.d.ts +148 -32
- package/dist/model.js +291 -569
- package/dist/model.js.map +1 -1
- package/dist/neighborJoining.js +1 -40
- package/dist/neighborJoining.js.map +1 -1
- package/dist/renderToSvg.js +1 -13
- 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 +64 -12
- 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 +7 -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/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 +1 -0
- package/src/components/Loading.tsx +6 -2
- package/src/components/MSAView.tsx +22 -5
- package/src/components/MetadataTable.tsx +83 -26
- package/src/components/Track.tsx +13 -0
- package/src/components/controls.ts +2 -1
- package/src/components/dialogs/AnnotationFileDialog.tsx +12 -1
- 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/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 -42
- 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 +20 -35
- 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/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 +22 -3
- package/src/components/msa/MSACanvasBlock.tsx +18 -11
- package/src/components/msa/MSAMouseoverCanvas.tsx +2 -2
- package/src/components/msa/WheelZoomHint.tsx +56 -0
- package/src/components/msa/msaKeys.ts +3 -0
- package/src/components/msa/msaRaster.ts +6 -8
- package/src/components/msa/renderBoxFeatureCanvasBlock.ts +28 -5
- package/src/components/msa/renderHighlights.ts +3 -3
- package/src/components/msa/renderMSABlock.ts +51 -15
- package/src/components/msa/tileColor.ts +7 -0
- package/src/components/rowpanels/RowPanelBlock.tsx +2 -2
- package/src/components/settings/MenuItemsForm.tsx +225 -0
- package/src/components/settings/SettingsPanel.tsx +156 -0
- package/src/components/settings/TrackList.tsx +124 -0
- package/src/components/tracks/TrackBlocks.tsx +2 -2
- package/src/components/tracks/TrackTooltipContent.tsx +2 -1
- package/src/components/tracks/drawTracks.ts +15 -7
- 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/constants.ts +9 -1
- package/src/darkReader.ts +57 -0
- package/src/element.ts +34 -57
- package/src/featurePanels.ts +269 -0
- package/src/filehandleLoader.ts +136 -0
- package/src/index.ts +4 -0
- package/src/model/treeModel.ts +13 -0
- package/src/model.ts +370 -748
- package/src/neighborJoining.ts +1 -42
- package/src/renderToSvg.tsx +1 -13
- 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 +7 -4
- package/src/useWheelScroll.ts +43 -22
- package/src/util.ts +3 -0
- package/src/version.ts +1 -1
- 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 -92
- 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.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 -11
- package/dist/components/header/TreeSettingsMenu.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 -5
- package/dist/components/header/settingsMenuItems.js +0 -171
- package/dist/components/header/settingsMenuItems.js.map +0 -1
- package/src/components/header/ColorSchemeMenu.tsx +0 -56
- package/src/components/header/FileMenu.tsx +0 -107
- package/src/components/header/MSASettingsMenu.tsx +0 -26
- package/src/components/header/ScrollZoomIcons.tsx +0 -52
- package/src/components/header/TreeSettingsMenu.tsx +0 -30
- package/src/components/header/settingsMenuItems.ts +0 -216
package/dist/types.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export interface Accession {
|
|
|
5
5
|
name: string;
|
|
6
6
|
description: string;
|
|
7
7
|
}
|
|
8
|
-
export type TrackKind = 'text' | 'bar' | 'logo' | 'arc' | 'ruler';
|
|
8
|
+
export type TrackKind = 'text' | 'bar' | 'logo' | 'arc' | 'ruler' | 'reference';
|
|
9
9
|
/**
|
|
10
10
|
* Which channel the color scheme paints. `fill` colors the cell a residue sits
|
|
11
11
|
* in, `color` colors the letter itself, the same distinction a grammar of
|
|
@@ -21,11 +21,9 @@ export type ColorScheme = string | Required<Pick<ScaleSpec, 'map'>>;
|
|
|
21
21
|
export interface BasicTrackModel {
|
|
22
22
|
id: string;
|
|
23
23
|
name: string;
|
|
24
|
-
associatedRowName?: string;
|
|
25
24
|
height: number;
|
|
26
25
|
kind: TrackKind;
|
|
27
26
|
heightKey?: string;
|
|
28
|
-
defaultOff?: boolean;
|
|
29
27
|
}
|
|
30
28
|
export interface TextTrackModel extends BasicTrackModel {
|
|
31
29
|
customColorScheme?: Record<string, string>;
|
|
@@ -170,6 +168,12 @@ export interface MappedStructure {
|
|
|
170
168
|
id: string;
|
|
171
169
|
kind?: 'experimental' | 'predicted';
|
|
172
170
|
asymId?: string;
|
|
171
|
+
/**
|
|
172
|
+
* which id `asymId` is, the file's `label_asym_id` or the author's
|
|
173
|
+
* `auth_asym_id`. Unset reads as either, label first, which is right for the
|
|
174
|
+
* common entry whose two ids agree and wrong where they collide.
|
|
175
|
+
*/
|
|
176
|
+
asymIdKind?: 'label' | 'auth';
|
|
173
177
|
url?: string;
|
|
174
178
|
}
|
|
175
179
|
/**
|
package/dist/useWheelScroll.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
export declare function useWheelScroll({ ref, onScrollX, onScrollY, onZoom, scrollZoom, }: {
|
|
1
|
+
export declare function useWheelScroll({ ref, onScrollX, onScrollY, onZoom, onZoomSettle, onWheelScroll, scrollZoom, }: {
|
|
2
2
|
ref: React.RefObject<HTMLDivElement | null>;
|
|
3
3
|
onScrollX?: (delta: number) => void;
|
|
4
4
|
onScrollY?: (delta: number) => void;
|
|
5
5
|
onZoom?: (scaleFactor: number, offsetX: number, offsetY: number) => void;
|
|
6
|
+
onZoomSettle?: () => void;
|
|
7
|
+
onWheelScroll?: (event: WheelEvent) => void;
|
|
6
8
|
scrollZoom?: boolean;
|
|
7
9
|
}): {
|
|
8
10
|
onMouseDown: (event: React.MouseEvent) => void;
|
package/dist/useWheelScroll.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { useEffect, useRef, useState } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { WheelZoomSmoother } from './wheelZoom.js';
|
|
3
|
+
const zoomSettleMs = 150;
|
|
4
|
+
export function useWheelScroll({ ref, onScrollX, onScrollY, onZoom, onZoomSettle, onWheelScroll, scrollZoom, }) {
|
|
4
5
|
const scheduled = useRef(false);
|
|
5
|
-
const
|
|
6
|
+
const zoomFrame = useRef(undefined);
|
|
7
|
+
const zoomSettle = useRef(undefined);
|
|
6
8
|
const deltaX = useRef(0);
|
|
7
9
|
const deltaY = useRef(0);
|
|
8
|
-
const
|
|
10
|
+
const zoomSmoother = useRef(new WheelZoomSmoother());
|
|
9
11
|
const zoomX = useRef(0);
|
|
10
12
|
const zoomY = useRef(0);
|
|
11
13
|
const lastZoomTime = useRef(null);
|
|
@@ -26,23 +28,26 @@ export function useWheelScroll({ ref, onScrollX, onScrollY, onZoom, scrollZoom,
|
|
|
26
28
|
!event.shiftKey &&
|
|
27
29
|
Math.abs(event.deltaY) >= Math.abs(event.deltaX);
|
|
28
30
|
if (onZoom && (isCtrlZoom || isScrollZoom)) {
|
|
31
|
+
const zoom = onZoom;
|
|
29
32
|
const rect = curr.getBoundingClientRect();
|
|
30
|
-
|
|
31
|
-
// factor so fine pinches and coarse notches feel consistent
|
|
32
|
-
const dY = normalizeWheelDelta(event.deltaY, event.deltaMode);
|
|
33
|
-
const divisor = isCtrlZoom ? getZoomNormalizer(dY) : SCROLL_ZOOM_DIVISOR;
|
|
34
|
-
zoomAccum.current += dY / divisor;
|
|
33
|
+
zoomSmoother.current.add(event.deltaY, event.deltaMode, isCtrlZoom);
|
|
35
34
|
zoomX.current = event.clientX - rect.left;
|
|
36
35
|
zoomY.current = event.clientY - rect.top;
|
|
37
|
-
if (
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
if (zoomFrame.current === undefined) {
|
|
37
|
+
lastZoomTime.current = null;
|
|
38
|
+
const frame = (now) => {
|
|
40
39
|
const elapsed = lastZoomTime.current === null ? 16.67 : now - lastZoomTime.current;
|
|
41
40
|
lastZoomTime.current = now;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
zoom(zoomSmoother.current.step(Math.min(100, elapsed)), zoomX.current, zoomY.current);
|
|
42
|
+
clearTimeout(zoomSettle.current);
|
|
43
|
+
zoomSettle.current = setTimeout(() => {
|
|
44
|
+
onZoomSettle?.();
|
|
45
|
+
}, zoomSettleMs);
|
|
46
|
+
zoomFrame.current = zoomSmoother.current.idle
|
|
47
|
+
? undefined
|
|
48
|
+
: requestAnimationFrame(frame);
|
|
49
|
+
};
|
|
50
|
+
zoomFrame.current = requestAnimationFrame(frame);
|
|
46
51
|
}
|
|
47
52
|
event.preventDefault();
|
|
48
53
|
event.stopPropagation();
|
|
@@ -53,6 +58,7 @@ export function useWheelScroll({ ref, onScrollX, onScrollY, onZoom, scrollZoom,
|
|
|
53
58
|
const consumeX = !!onScrollX && event.deltaX !== 0;
|
|
54
59
|
const consumeY = !!onScrollY && event.deltaY !== 0;
|
|
55
60
|
if (consumeX || consumeY) {
|
|
61
|
+
onWheelScroll?.(event);
|
|
56
62
|
if (onScrollX) {
|
|
57
63
|
deltaX.current += event.deltaX;
|
|
58
64
|
}
|
|
@@ -80,8 +86,21 @@ export function useWheelScroll({ ref, onScrollX, onScrollY, onZoom, scrollZoom,
|
|
|
80
86
|
curr.addEventListener('wheel', onWheel, { passive: false });
|
|
81
87
|
return () => {
|
|
82
88
|
curr.removeEventListener('wheel', onWheel);
|
|
89
|
+
if (zoomFrame.current !== undefined) {
|
|
90
|
+
cancelAnimationFrame(zoomFrame.current);
|
|
91
|
+
zoomFrame.current = undefined;
|
|
92
|
+
}
|
|
93
|
+
clearTimeout(zoomSettle.current);
|
|
83
94
|
};
|
|
84
|
-
}, [
|
|
95
|
+
}, [
|
|
96
|
+
ref,
|
|
97
|
+
onScrollX,
|
|
98
|
+
onScrollY,
|
|
99
|
+
onZoom,
|
|
100
|
+
onZoomSettle,
|
|
101
|
+
onWheelScroll,
|
|
102
|
+
scrollZoom,
|
|
103
|
+
]);
|
|
85
104
|
useEffect(() => {
|
|
86
105
|
if (!mouseDragging) {
|
|
87
106
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWheelScroll.js","sourceRoot":"","sources":["../src/useWheelScroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEnD,OAAO,
|
|
1
|
+
{"version":3,"file":"useWheelScroll.js","sourceRoot":"","sources":["../src/useWheelScroll.ts"],"names":[],"mappings":"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"}
|
package/dist/util.d.ts
CHANGED
package/dist/util.js
CHANGED
|
@@ -127,4 +127,6 @@ export function computeRowInsertions(blanks, seq) {
|
|
|
127
127
|
export function len(a) {
|
|
128
128
|
return a.end - a.start;
|
|
129
129
|
}
|
|
130
|
+
/** reads computeds so a reaction observes them, which keeps them cached */
|
|
131
|
+
export function readComputed(..._values) { }
|
|
130
132
|
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "9.
|
|
1
|
+
export declare const version = "9.2.0";
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '9.
|
|
1
|
+
export const version = '9.2.0';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/dist/wheelZoom.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const NOTCH_ZOOM = 1.25;
|
|
2
2
|
export declare function normalizeWheelDelta(delta: number, mode: number): number;
|
|
3
|
-
export declare
|
|
4
|
-
|
|
3
|
+
export declare class WheelZoomSmoother {
|
|
4
|
+
private continuous;
|
|
5
|
+
private pending;
|
|
6
|
+
add(deltaY: number, deltaMode: number, isPinch: boolean): void;
|
|
7
|
+
get idle(): boolean;
|
|
8
|
+
step(elapsedMs: number): number;
|
|
9
|
+
}
|
package/dist/wheelZoom.js
CHANGED
|
@@ -1,43 +1,55 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
//
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
//
|
|
1
|
+
// Chrome and Firefox encode a trackpad pinch as ctrl+wheel with
|
|
2
|
+
// deltaY = -100 * ln(scale), so dividing by 100 tracks the fingers 1:1
|
|
3
|
+
const PINCH_PX_PER_LOG = 100;
|
|
4
|
+
// a plain scroll covers more pixels than a pinch for the same intent
|
|
5
|
+
const SCROLL_PX_PER_LOG = 400;
|
|
6
|
+
// a pixel delta at least this large counts as a wheel notch
|
|
7
|
+
const NOTCH_MIN_PX = 40;
|
|
8
|
+
export const NOTCH_ZOOM = 1.25;
|
|
9
|
+
// the time constant a notch eases in over
|
|
10
|
+
const NOTCH_TAU_MS = 60;
|
|
11
|
+
// a burst of continuous events coalesced into one frame applies at most 2x
|
|
12
|
+
const MAX_FRAME_LOG = Math.log(2);
|
|
13
|
+
// the queue holds at most four notches, which caps a fast spin
|
|
14
|
+
const MAX_PENDING_LOG = 4 * Math.log(NOTCH_ZOOM);
|
|
12
15
|
export function normalizeWheelDelta(delta, mode) {
|
|
13
16
|
if (mode === 1) {
|
|
14
|
-
return delta * 16;
|
|
17
|
+
return delta * 16;
|
|
15
18
|
}
|
|
16
19
|
if (mode === 2) {
|
|
17
|
-
return delta * 100;
|
|
20
|
+
return delta * 100;
|
|
18
21
|
}
|
|
19
|
-
return delta;
|
|
22
|
+
return delta;
|
|
20
23
|
}
|
|
21
|
-
|
|
22
|
-
// in
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
const clampAbs = (x, max) => Math.max(-max, Math.min(max, x));
|
|
25
|
+
// Positive log zooms in. Feed every wheel event to add() and call step() once
|
|
26
|
+
// per animation frame with the time since the last frame; step() returns the
|
|
27
|
+
// multiplier for colWidth/rowHeight.
|
|
28
|
+
export class WheelZoomSmoother {
|
|
29
|
+
continuous = 0;
|
|
30
|
+
pending = 0;
|
|
31
|
+
add(deltaY, deltaMode, isPinch) {
|
|
32
|
+
const px = normalizeWheelDelta(deltaY, deltaMode);
|
|
33
|
+
if (deltaMode !== 0 || Math.abs(px) >= NOTCH_MIN_PX) {
|
|
34
|
+
const notches = deltaMode !== 0 ? 1 : Math.min(Math.max(Math.abs(px) / 100, 1), 3);
|
|
35
|
+
this.pending = clampAbs(this.pending - Math.sign(px) * notches * Math.log(NOTCH_ZOOM), MAX_PENDING_LOG);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.continuous -= px / (isPinch ? PINCH_PX_PER_LOG : SCROLL_PX_PER_LOG);
|
|
39
|
+
}
|
|
27
40
|
}
|
|
28
|
-
|
|
29
|
-
return
|
|
41
|
+
get idle() {
|
|
42
|
+
return this.continuous === 0 && this.pending === 0;
|
|
30
43
|
}
|
|
31
|
-
|
|
32
|
-
|
|
44
|
+
step(elapsedMs) {
|
|
45
|
+
let eased = this.pending * (1 - Math.exp(-elapsedMs / NOTCH_TAU_MS));
|
|
46
|
+
if (Math.abs(this.pending - eased) < 0.005) {
|
|
47
|
+
eased = this.pending;
|
|
48
|
+
}
|
|
49
|
+
this.pending -= eased;
|
|
50
|
+
const log = clampAbs(this.continuous + eased, MAX_FRAME_LOG);
|
|
51
|
+
this.continuous = 0;
|
|
52
|
+
return Math.exp(log);
|
|
33
53
|
}
|
|
34
|
-
return 75;
|
|
35
|
-
}
|
|
36
|
-
// Turn accumulated, normalized zoom intent into a colWidth/rowHeight multiplier.
|
|
37
|
-
// Positive accum (wheel toward user) zooms out (factor < 1); negative zooms in.
|
|
38
|
-
export function zoomFactorFromAccum(zoomAccum, elapsedMs) {
|
|
39
|
-
const max = MAX_ZOOM_RATE_PER_MS * elapsedMs;
|
|
40
|
-
const d = Math.max(-max, Math.min(max, zoomAccum));
|
|
41
|
-
return d > 0 ? 1 / (1 + d) : 1 - d;
|
|
42
54
|
}
|
|
43
55
|
//# sourceMappingURL=wheelZoom.js.map
|
package/dist/wheelZoom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wheelZoom.js","sourceRoot":"","sources":["../src/wheelZoom.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"wheelZoom.js","sourceRoot":"","sources":["../src/wheelZoom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface ZoomSnapshot {
|
|
2
|
+
colWidth: number;
|
|
3
|
+
rowHeight: number;
|
|
4
|
+
blocksX: number[];
|
|
5
|
+
blocksY: number[];
|
|
6
|
+
}
|
|
7
|
+
interface Viewport {
|
|
8
|
+
colWidth: number;
|
|
9
|
+
rowHeight: number;
|
|
10
|
+
scrollX: number;
|
|
11
|
+
scrollY: number;
|
|
12
|
+
msaAreaWidth: number;
|
|
13
|
+
msaAreaHeight: number;
|
|
14
|
+
totalWidth: number;
|
|
15
|
+
totalHeight: number;
|
|
16
|
+
blockSize: number;
|
|
17
|
+
}
|
|
18
|
+
export declare function takeZoomSnapshot(view: Viewport, withMargin: boolean): {
|
|
19
|
+
colWidth: number;
|
|
20
|
+
rowHeight: number;
|
|
21
|
+
blocksX: number[];
|
|
22
|
+
blocksY: number[];
|
|
23
|
+
};
|
|
24
|
+
export declare function zoomSnapshotScale(view: Viewport, snap: ZoomSnapshot): {
|
|
25
|
+
sx: number;
|
|
26
|
+
sy: number;
|
|
27
|
+
};
|
|
28
|
+
export declare function zoomSnapshotCovers(view: Viewport, snap: ZoomSnapshot): boolean;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { calculateBlocks } from './calculateBlocks.js';
|
|
2
|
+
// past this stretch the scaled letters blur enough to redraw
|
|
3
|
+
const maxStretch = 2;
|
|
4
|
+
// a redraw covers this fraction of the viewport again on each side, so a zoom
|
|
5
|
+
// out shrinks it for a few frames before it runs out of picture
|
|
6
|
+
const margin = 0.2;
|
|
7
|
+
function blocksAt(view, axis, scale, marginFraction) {
|
|
8
|
+
const size = axis === 'x' ? view.msaAreaWidth : view.msaAreaHeight;
|
|
9
|
+
const pos = -(axis === 'x' ? view.scrollX : view.scrollY);
|
|
10
|
+
const map = axis === 'x' ? view.totalWidth : view.totalHeight;
|
|
11
|
+
const pad = size * marginFraction;
|
|
12
|
+
return calculateBlocks({
|
|
13
|
+
viewportSize: (size + 2 * pad) / scale,
|
|
14
|
+
viewportPos: (pos - pad) / scale,
|
|
15
|
+
mapSize: map / scale,
|
|
16
|
+
blockSize: view.blockSize,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
const within = (need, have) => need.length === 0 ||
|
|
20
|
+
(have.length > 0 && need[0] >= have[0] && need.at(-1) <= have.at(-1));
|
|
21
|
+
// a gesture starts from the blocks already drawn, and each redraw during it
|
|
22
|
+
// adds the margin
|
|
23
|
+
export function takeZoomSnapshot(view, withMargin) {
|
|
24
|
+
const m = withMargin ? margin : 0;
|
|
25
|
+
return {
|
|
26
|
+
colWidth: view.colWidth,
|
|
27
|
+
rowHeight: view.rowHeight,
|
|
28
|
+
blocksX: blocksAt(view, 'x', 1, m),
|
|
29
|
+
blocksY: blocksAt(view, 'y', 1, m),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function zoomSnapshotScale(view, snap) {
|
|
33
|
+
return {
|
|
34
|
+
sx: view.colWidth / snap.colWidth,
|
|
35
|
+
sy: view.rowHeight / snap.rowHeight,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// whether the blocks drawn at the snapshot, stretched to the current cell
|
|
39
|
+
// size, still fill the viewport sharply enough
|
|
40
|
+
export function zoomSnapshotCovers(view, snap) {
|
|
41
|
+
const { sx, sy } = zoomSnapshotScale(view, snap);
|
|
42
|
+
return (sx <= maxStretch &&
|
|
43
|
+
sy <= maxStretch &&
|
|
44
|
+
within(blocksAt(view, 'x', sx, 0), snap.blocksX) &&
|
|
45
|
+
within(blocksAt(view, 'y', sy, 0), snap.blocksY));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=zoomSnapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zoomSnapshot.js","sourceRoot":"","sources":["../src/zoomSnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAqBtD,6DAA6D;AAC7D,MAAM,UAAU,GAAG,CAAC,CAAA;AAEpB,8EAA8E;AAC9E,gEAAgE;AAChE,MAAM,MAAM,GAAG,GAAG,CAAA;AAElB,SAAS,QAAQ,CACf,IAAc,EACd,IAAe,EACf,KAAa,EACb,cAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAA;IAClE,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACzD,MAAM,GAAG,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAA;IAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,cAAc,CAAA;IACjC,OAAO,eAAe,CAAC;QACrB,YAAY,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK;QACtC,WAAW,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK;QAChC,OAAO,EAAE,GAAG,GAAG,KAAK;QACpB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,IAAc,EAAE,IAAc,EAAE,EAAE,CAChD,IAAI,CAAC,MAAM,KAAK,CAAC;IACjB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAE,IAAI,IAAI,CAAC,CAAC,CAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAA;AAE3E,4EAA4E;AAC5E,kBAAkB;AAClB,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,UAAmB;IAClE,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAClC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;KACZ,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAc,EAAE,IAAkB;IAClE,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QACjC,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;KACpC,CAAA;AACH,CAAC;AAED,0EAA0E;AAC1E,+CAA+C;AAC/C,MAAM,UAAU,kBAAkB,CAAC,IAAc,EAAE,IAAkB;IACnE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAChD,OAAO,CACL,EAAE,IAAI,UAAU;QAChB,EAAE,IAAI,UAAU;QAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CACjD,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-msaview",
|
|
3
3
|
"author": "Colin",
|
|
4
|
-
"version": "9.
|
|
4
|
+
"version": "9.2.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"repository": {
|
|
@@ -37,23 +37,23 @@
|
|
|
37
37
|
"react-dom": ">=16.8.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@jbrowse/core": "^5.0.0-beta.
|
|
41
|
-
"@jbrowse/mobx-state-tree": "^6.
|
|
42
|
-
"@mui/icons-material": "^9.
|
|
43
|
-
"@mui/material": "^9.
|
|
44
|
-
"@types/node": "^26.6.
|
|
40
|
+
"@jbrowse/core": "^5.0.0-beta.15",
|
|
41
|
+
"@jbrowse/mobx-state-tree": "^6.9.0",
|
|
42
|
+
"@mui/icons-material": "^9.5.0",
|
|
43
|
+
"@mui/material": "^9.5.0",
|
|
44
|
+
"@types/node": "^26.6.5",
|
|
45
45
|
"esbuild": "^0.28.2",
|
|
46
|
-
"mobx": "^7.0.
|
|
46
|
+
"mobx": "^7.0.6",
|
|
47
47
|
"mobx-react": "^10.0.2",
|
|
48
|
-
"react": "^19.3.
|
|
49
|
-
"react-dom": "^19.3.
|
|
48
|
+
"react": "^19.3.1",
|
|
49
|
+
"react-dom": "^19.3.1"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@gmod/newick": "^1.0.3",
|
|
53
|
-
"@jbrowse/svgcanvas": "9.
|
|
53
|
+
"@jbrowse/svgcanvas": "9.2.0",
|
|
54
54
|
"colord": "^2.10.0",
|
|
55
55
|
"flatbush": "^4.6.2",
|
|
56
|
-
"msa-parsers": "9.
|
|
56
|
+
"msa-parsers": "9.2.0"
|
|
57
57
|
},
|
|
58
58
|
"scripts": {
|
|
59
59
|
"clean": "rimraf dist bundle",
|
package/src/blosum62.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// BLOSUM62 (Henikoff & Henikoff 1992), shared by the neighbor-joining tree and
|
|
2
|
+
// the blosum62_dynamic color scheme
|
|
3
|
+
|
|
4
|
+
// prettier-ignore
|
|
5
|
+
const BLOSUM62_KEYS = 'ARNDCQEGHILKMFPSTWYVBZX*'
|
|
6
|
+
// prettier-ignore
|
|
7
|
+
const BLOSUM62_DATA = [
|
|
8
|
+
[ 4,-1,-2,-2, 0,-1,-1, 0,-2,-1,-1,-1,-1,-2,-1, 1, 0,-3,-2, 0,-2,-1, 0,-4],
|
|
9
|
+
[-1, 5, 0,-2,-3, 1, 0,-2, 0,-3,-2, 2,-1,-3,-2,-1,-1,-3,-2,-3,-1, 0,-1,-4],
|
|
10
|
+
[-2, 0, 6, 1,-3, 0, 0, 0, 1,-3,-3, 0,-2,-3,-2, 1, 0,-4,-2,-3, 3, 0,-1,-4],
|
|
11
|
+
[-2,-2, 1, 6,-3, 0, 2,-1,-1,-3,-4,-1,-3,-3,-1, 0,-1,-4,-3,-3, 4, 1,-1,-4],
|
|
12
|
+
[ 0,-3,-3,-3, 9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],
|
|
13
|
+
[-1, 1, 0, 0,-3, 5, 2,-2, 0,-3,-2, 1, 0,-3,-1, 0,-1,-2,-1,-2, 0, 3,-1,-4],
|
|
14
|
+
[-1, 0, 0, 2,-4, 2, 5,-2, 0,-3,-3, 1,-2,-3,-1, 0,-1,-3,-2,-2, 1, 4,-1,-4],
|
|
15
|
+
[ 0,-2, 0,-1,-3,-2,-2, 6,-2,-4,-4,-2,-3,-3,-2, 0,-2,-2,-3,-3,-1,-2,-1,-4],
|
|
16
|
+
[-2, 0, 1,-1,-3, 0, 0,-2, 8,-3,-3,-1,-2,-1,-2,-1,-2,-2, 2,-3, 0, 0,-1,-4],
|
|
17
|
+
[-1,-3,-3,-3,-1,-3,-3,-4,-3, 4, 2,-3, 1, 0,-3,-2,-1,-3,-1, 3,-3,-3,-1,-4],
|
|
18
|
+
[-1,-2,-3,-4,-1,-2,-3,-4,-3, 2, 4,-2, 2, 0,-3,-2,-1,-2,-1, 1,-4,-3,-1,-4],
|
|
19
|
+
[-1, 2, 0,-1,-3, 1, 1,-2,-1,-3,-2, 5,-1,-3,-1, 0,-1,-3,-2,-2, 0, 1,-1,-4],
|
|
20
|
+
[-1,-1,-2,-3,-1, 0,-2,-3,-2, 1, 2,-1, 5, 0,-2,-1,-1,-1,-1, 1,-3,-1,-1,-4],
|
|
21
|
+
[-2,-3,-3,-3,-2,-3,-3,-3,-1, 0, 0,-3, 0, 6,-4,-2,-2, 1, 3,-1,-3,-3,-1,-4],
|
|
22
|
+
[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4, 7,-1,-1,-4,-3,-2,-2,-1,-2,-4],
|
|
23
|
+
[ 1,-1, 1, 0,-1, 0, 0, 0,-1,-2,-2, 0,-1,-2,-1, 4, 1,-3,-2,-2, 0, 0, 0,-4],
|
|
24
|
+
[ 0,-1, 0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1, 1, 5,-2,-2, 0,-1,-1, 0,-4],
|
|
25
|
+
[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1, 1,-4,-3,-2,11, 2,-3,-4,-3,-2,-4],
|
|
26
|
+
[-2,-2,-2,-3,-2,-1,-2,-3, 2,-1,-1,-2,-1, 3,-3,-2,-2, 2, 7,-1,-3,-2,-1,-4],
|
|
27
|
+
[ 0,-3,-3,-3,-1,-2,-2,-3,-3, 3, 1,-2, 1,-1,-2,-2, 0,-3,-1, 4,-3,-2,-1,-4],
|
|
28
|
+
[-2,-1, 3, 4,-3, 0, 1,-1, 0,-3,-4, 0,-3,-3,-2, 0,-1,-4,-3,-3, 4, 1,-1,-4],
|
|
29
|
+
[-1, 0, 0, 1,-3, 3, 4,-2, 0,-3,-3, 1,-1,-3,-1, 0,-1,-3,-2,-2, 1, 4,-1,-4],
|
|
30
|
+
[ 0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2, 0, 0,-2,-1,-1,-1,-1,-1,-4],
|
|
31
|
+
[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4, 1],
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
export const NUM_SYMBOLS = BLOSUM62_KEYS.length
|
|
35
|
+
export const BLOSUM62 = Int8Array.from(BLOSUM62_DATA.flat())
|
|
36
|
+
|
|
37
|
+
// charCode -> row/column in BLOSUM62, -1 for anything the matrix does not name.
|
|
38
|
+
// On a 120x800 alignment a Map keyed by upper-cased character took 2.6s to
|
|
39
|
+
// build a tree, against 0.34s for this table.
|
|
40
|
+
export const symbolOfCode = new Int8Array(128).fill(-1)
|
|
41
|
+
for (let i = 0; i < NUM_SYMBOLS; i++) {
|
|
42
|
+
const key = BLOSUM62_KEYS[i]!
|
|
43
|
+
symbolOfCode[key.charCodeAt(0)] = i
|
|
44
|
+
symbolOfCode[key.toLowerCase().charCodeAt(0)] = i
|
|
45
|
+
}
|
package/src/colorSchemes.ts
CHANGED
|
@@ -79,6 +79,7 @@ const colorSchemes: Record<string, Record<string, string>> = {
|
|
|
79
79
|
},
|
|
80
80
|
|
|
81
81
|
percent_identity_dynamic: {},
|
|
82
|
+
blosum62_dynamic: {},
|
|
82
83
|
// https://github.com/biotite-dev/biotite/blob/8c460972f8ab904312f130dfb80f3efc8c9bd7c5/src/biotite/sequence/graphics/color_schemes/flower.json
|
|
83
84
|
flower: {
|
|
84
85
|
A: '#b18a51',
|
|
@@ -10,6 +10,7 @@ import StatusMessage from './StatusMessage.tsx'
|
|
|
10
10
|
import ImportForm from './import/ImportForm.tsx'
|
|
11
11
|
|
|
12
12
|
import type { MsaViewModel } from '../model.ts'
|
|
13
|
+
import type { ToolbarSlots } from './header/Header.tsx'
|
|
13
14
|
|
|
14
15
|
const Reset = observer(function ({
|
|
15
16
|
model,
|
|
@@ -36,7 +37,10 @@ const Reset = observer(function ({
|
|
|
36
37
|
)
|
|
37
38
|
})
|
|
38
39
|
|
|
39
|
-
const Loading = observer(function ({
|
|
40
|
+
const Loading = observer(function ({
|
|
41
|
+
model,
|
|
42
|
+
...slots
|
|
43
|
+
}: { model: MsaViewModel } & ToolbarSlots) {
|
|
40
44
|
const {
|
|
41
45
|
isLoading,
|
|
42
46
|
dataInitialized,
|
|
@@ -64,7 +68,7 @@ const Loading = observer(function ({ model }: { model: MsaViewModel }) {
|
|
|
64
68
|
isLoading ? (
|
|
65
69
|
<StatusMessage model={model} variant="page" />
|
|
66
70
|
) : (
|
|
67
|
-
<MSAView model={model} />
|
|
71
|
+
<MSAView model={model} {...slots} />
|
|
68
72
|
)
|
|
69
73
|
) : hasData ? (
|
|
70
74
|
<Reset model={model} error={error} />
|
|
@@ -14,11 +14,13 @@ import MSAPanel from './msa/MSAPanel.tsx'
|
|
|
14
14
|
import { clickColor, hoverColor, selectionFill } from './overlayColors.ts'
|
|
15
15
|
import RowPanelHeaders from './rowpanels/RowPanelHeaders.tsx'
|
|
16
16
|
import RowPanels from './rowpanels/RowPanels.tsx'
|
|
17
|
+
import SettingsPanel from './settings/SettingsPanel.tsx'
|
|
17
18
|
import TreeOverview from './tree/TreeOverview.tsx'
|
|
18
19
|
import TreePanel from './tree/TreePanel.tsx'
|
|
19
20
|
import TreeRuler from './tree/TreeRuler.tsx'
|
|
20
21
|
|
|
21
22
|
import type { MsaViewModel } from '../model.ts'
|
|
23
|
+
import type { ToolbarSlots } from './header/Header.tsx'
|
|
22
24
|
|
|
23
25
|
// The band above the panels: the tree overview and scale bar, the strip
|
|
24
26
|
// headers, and the minimap over the alignment. The spacer stands in for the
|
|
@@ -139,17 +141,32 @@ const View = observer(function ({ model }: { model: MsaViewModel }) {
|
|
|
139
141
|
)
|
|
140
142
|
})
|
|
141
143
|
|
|
142
|
-
const MSAView = observer(function ({
|
|
143
|
-
|
|
144
|
-
|
|
144
|
+
const MSAView = observer(function ({
|
|
145
|
+
model,
|
|
146
|
+
...slots
|
|
147
|
+
}: { model: MsaViewModel } & ToolbarSlots) {
|
|
148
|
+
const {
|
|
149
|
+
height,
|
|
150
|
+
headerHeight,
|
|
151
|
+
hideHeader,
|
|
152
|
+
settingsOpen,
|
|
153
|
+
viewInitialized,
|
|
154
|
+
DialogComponent,
|
|
155
|
+
DialogProps,
|
|
156
|
+
} = model
|
|
145
157
|
|
|
146
158
|
return (
|
|
147
159
|
<div>
|
|
148
160
|
{viewInitialized ? (
|
|
149
161
|
<>
|
|
150
162
|
<div style={{ height, overflow: 'clip' }}>
|
|
151
|
-
{hideHeader ? null : <Header model={model} />}
|
|
152
|
-
<
|
|
163
|
+
{hideHeader ? null : <Header model={model} {...slots} />}
|
|
164
|
+
<div style={{ display: 'flex' }}>
|
|
165
|
+
<View model={model} />
|
|
166
|
+
{settingsOpen ? (
|
|
167
|
+
<SettingsPanel model={model} height={height - headerHeight} />
|
|
168
|
+
) : null}
|
|
169
|
+
</div>
|
|
153
170
|
</div>
|
|
154
171
|
<HorizontalResizeHandle model={model} />
|
|
155
172
|
|