react-msaview 3.1.0 → 3.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/bundle/index.js +23 -23
- package/dist/calculateBlocks.d.ts +12 -0
- package/dist/calculateBlocks.js +23 -0
- package/dist/calculateBlocks.js.map +1 -0
- package/dist/components/ExportSVGDialog.d.ts +6 -0
- package/dist/components/ExportSVGDialog.js +26 -0
- package/dist/components/ExportSVGDialog.js.map +1 -0
- package/dist/components/MSAPanel/MSABlock.js +2 -3
- package/dist/components/MSAPanel/MSABlock.js.map +1 -1
- package/dist/components/MSAPanel/renderMSABlock.d.ts +1 -1
- package/dist/components/MSAPanel/renderMSABlock.js +1 -1
- package/dist/components/MSAPanel/renderMSABlock.js.map +1 -1
- package/dist/components/MinimapSVG.d.ts +6 -0
- package/dist/components/MinimapSVG.js +25 -0
- package/dist/components/MinimapSVG.js.map +1 -0
- package/dist/components/ZoomControls.js +9 -7
- package/dist/components/ZoomControls.js.map +1 -1
- package/dist/model.d.ts +53 -42
- package/dist/model.js +71 -71
- package/dist/model.js.map +1 -1
- package/dist/renderToSvg.d.ts +1 -0
- package/dist/renderToSvg.js +25 -12
- package/dist/renderToSvg.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/src/calculateBlocks.ts +58 -0
- package/src/components/ExportSVGDialog.tsx +61 -0
- package/src/components/MSAPanel/MSABlock.tsx +2 -3
- package/src/components/MSAPanel/renderMSABlock.ts +1 -1
- package/src/components/MinimapSVG.tsx +57 -0
- package/src/components/ZoomControls.tsx +15 -6
- package/src/model.ts +76 -90
- package/src/renderToSvg.tsx +50 -19
- package/src/version.ts +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function blocksY({ mapHeight, blockSize, viewportY, viewportHeight, }: {
|
|
2
|
+
mapHeight: number;
|
|
3
|
+
blockSize: number;
|
|
4
|
+
viewportY: number;
|
|
5
|
+
viewportHeight: number;
|
|
6
|
+
}): number[];
|
|
7
|
+
export declare function blocksX({ mapWidth, blockSize, viewportX, viewportWidth, }: {
|
|
8
|
+
mapWidth: number;
|
|
9
|
+
blockSize: number;
|
|
10
|
+
viewportX: number;
|
|
11
|
+
viewportWidth: number;
|
|
12
|
+
}): number[];
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function blocksY({ mapHeight, blockSize, viewportY, viewportHeight, }) {
|
|
2
|
+
const clampedViewportY = Math.max(0, Math.min(viewportY, mapHeight * blockSize - viewportHeight));
|
|
3
|
+
// Calculate visible tile ranges
|
|
4
|
+
const minTileY = Math.floor(clampedViewportY / blockSize);
|
|
5
|
+
const maxTileY = Math.floor((clampedViewportY + viewportHeight - 1) / blockSize);
|
|
6
|
+
// Generate list of visible tiles
|
|
7
|
+
const blocksY = [];
|
|
8
|
+
for (let tileY = minTileY; tileY <= maxTileY; tileY++) {
|
|
9
|
+
blocksY.push(tileY * blockSize);
|
|
10
|
+
}
|
|
11
|
+
return blocksY;
|
|
12
|
+
}
|
|
13
|
+
export function blocksX({ mapWidth, blockSize, viewportX, viewportWidth, }) {
|
|
14
|
+
const clampedViewportX = Math.max(0, Math.min(viewportX, mapWidth - viewportWidth));
|
|
15
|
+
const minTileX = Math.floor(clampedViewportX / blockSize);
|
|
16
|
+
const maxTileX = Math.floor((clampedViewportX + viewportWidth - 1) / blockSize);
|
|
17
|
+
const blocksX = [];
|
|
18
|
+
for (let tileX = minTileX; tileX <= maxTileX; tileX++) {
|
|
19
|
+
blocksX.push(tileX * blockSize);
|
|
20
|
+
}
|
|
21
|
+
return blocksX;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=calculateBlocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculateBlocks.js","sourceRoot":"","sources":["../src/calculateBlocks.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,EACtB,SAAS,EACT,SAAS,EACT,SAAS,EACT,cAAc,GAMf;IACC,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC/B,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC,CAC5D,CAAA;IAED,gCAAgC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,CAAC,gBAAgB,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,SAAS,CACpD,CAAA;IAED,iCAAiC;IACjC,MAAM,OAAO,GAAG,EAAE,CAAA;IAClB,KAAK,IAAI,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,SAAS,EACT,aAAa,GAMd;IACC,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC/B,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,GAAG,aAAa,CAAC,CAC9C,CAAA;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,CAAC,gBAAgB,GAAG,aAAa,GAAG,CAAC,CAAC,GAAG,SAAS,CACnD,CAAA;IACD,MAAM,OAAO,GAAG,EAAE,CAAA;IAClB,KAAK,IAAI,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Dialog, ErrorMessage } from '@jbrowse/core/ui';
|
|
3
|
+
import { DialogContent, DialogActions, Button, Checkbox, FormControlLabel, useTheme, Typography, } from '@mui/material';
|
|
4
|
+
export default function ExportSVGDialog({ model, onClose, }) {
|
|
5
|
+
const [includeMinimap, setIncludeMinimap] = useState(true);
|
|
6
|
+
const [error, setError] = useState();
|
|
7
|
+
const theme = useTheme();
|
|
8
|
+
return (React.createElement(Dialog, { onClose: () => onClose(), open: true, title: "Export SVG" },
|
|
9
|
+
React.createElement(DialogContent, null,
|
|
10
|
+
React.createElement(Typography, null, "Export SVG of current view"),
|
|
11
|
+
error ? React.createElement(ErrorMessage, { error: error }) : null,
|
|
12
|
+
React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: includeMinimap, onChange: event => setIncludeMinimap(event.target.checked) }), label: "Include minimap?" })),
|
|
13
|
+
React.createElement(DialogActions, null,
|
|
14
|
+
React.createElement(Button, { variant: "contained", color: "primary", onClick: async () => {
|
|
15
|
+
try {
|
|
16
|
+
await model.exportSVG({ theme, includeMinimap });
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
console.error(e);
|
|
20
|
+
setError(e);
|
|
21
|
+
}
|
|
22
|
+
onClose();
|
|
23
|
+
} }, "Submit"),
|
|
24
|
+
React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => onClose() }, "Cancel"))));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=ExportSVGDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportSVGDialog.js","sourceRoot":"","sources":["../../src/components/ExportSVGDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EACL,aAAa,EACb,aAAa,EACb,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,UAAU,GACX,MAAM,eAAe,CAAA;AAGtB,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,KAAK,EACL,OAAO,GAIR;IACC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC1D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAW,CAAA;IAC7C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,OAAO,CACL,oBAAC,MAAM,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,QAAC,KAAK,EAAC,YAAY;QACvD,oBAAC,aAAa;YACZ,oBAAC,UAAU,qCAAwC;YAClD,KAAK,CAAC,CAAC,CAAC,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC,CAAC,CAAC,IAAI;YAC9C,oBAAC,gBAAgB,IACf,OAAO,EACL,oBAAC,QAAQ,IACP,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAC1D,EAEJ,KAAK,EAAC,kBAAkB,GACxB,CACY;QAChB,oBAAC,aAAa;YACZ,oBAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,KAAK,IAAI,EAAE;oBAClB,IAAI,CAAC;wBACH,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAA;oBAClD,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;wBAChB,QAAQ,CAAC,CAAC,CAAC,CAAA;oBACb,CAAC;oBACD,OAAO,EAAE,CAAA;gBACX,CAAC,aAGM;YACT,oBAAC,MAAM,IAAC,OAAO,EAAC,WAAW,EAAC,KAAK,EAAC,WAAW,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,aAE7D,CACK,CACT,CACV,CAAA;AACH,CAAC"}
|
|
@@ -3,13 +3,12 @@ import { autorun } from 'mobx';
|
|
|
3
3
|
import { useTheme } from '@mui/material';
|
|
4
4
|
import { observer } from 'mobx-react';
|
|
5
5
|
// locals
|
|
6
|
-
import {
|
|
6
|
+
import { renderMSABlock } from './renderMSABlock';
|
|
7
7
|
import { colorContrast } from '../../util';
|
|
8
8
|
const MSABlock = observer(function ({ model, offsetX, offsetY, }) {
|
|
9
9
|
const { colWidth, rowHeight, scrollY, scrollX, colorScheme, blockSize, highResScaleFactor, } = model;
|
|
10
10
|
const theme = useTheme();
|
|
11
11
|
const contrastScheme = useMemo(() => colorContrast(colorScheme, theme), [colorScheme, theme]);
|
|
12
|
-
console.log({ offsetX, offsetY, scrollX, scrollY });
|
|
13
12
|
const ref = useRef(null);
|
|
14
13
|
useEffect(() => {
|
|
15
14
|
var _a;
|
|
@@ -18,7 +17,7 @@ const MSABlock = observer(function ({ model, offsetX, offsetY, }) {
|
|
|
18
17
|
return;
|
|
19
18
|
}
|
|
20
19
|
return autorun(() => {
|
|
21
|
-
|
|
20
|
+
renderMSABlock({
|
|
22
21
|
ctx,
|
|
23
22
|
offsetX,
|
|
24
23
|
offsetY,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSABlock.js","sourceRoot":"","sources":["../../../src/components/MSAPanel/MSABlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,SAAS;AACT,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"MSABlock.js","sourceRoot":"","sources":["../../../src/components/MSAPanel/MSABlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,EAClC,KAAK,EACL,OAAO,EACP,OAAO,GAKR;IACC,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,OAAO,EACP,OAAO,EACP,WAAW,EACX,SAAS,EACT,kBAAkB,GACnB,GAAG,KAAK,CAAA;IACT,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IAExB,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,EACvC,CAAC,WAAW,EAAE,KAAK,CAAC,CACrB,CAAA;IAED,MAAM,GAAG,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAA;IAC3C,SAAS,CAAC,GAAG,EAAE;;QACb,MAAM,GAAG,GAAG,MAAA,GAAG,CAAC,OAAO,0CAAE,UAAU,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAM;QACR,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,EAAE;YAClB,cAAc,CAAC;gBACb,GAAG;gBACH,OAAO;gBACP,OAAO;gBACP,cAAc;gBACd,KAAK;aACN,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAA;IAC7C,OAAO,CACL,gCACE,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,KAAK,CAAC,EAAE;YACnB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAM;YACR,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAA;YACzD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,OAAO,CAAA;YAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,GAAG,GAAG,OAAO,CAAA;YAC5C,KAAK,CAAC,WAAW,CACf,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,EACjC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAC/B,CAAA;QACH,CAAC,EACD,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EACvC,KAAK,EAAE,SAAS,GAAG,kBAAkB,EACrC,MAAM,EAAE,SAAS,GAAG,kBAAkB,EACtC,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,OAAO,GAAG,OAAO;YACtB,IAAI,EAAE,OAAO,GAAG,OAAO;YACvB,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,SAAS;SAClB,GACD,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,QAAQ,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MsaViewModel } from '../../model';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function renderMSABlock({ model, offsetX, offsetY, contrastScheme, ctx, highResScaleFactorOverride, blockSizeXOverride, blockSizeYOverride, }: {
|
|
3
3
|
offsetX: number;
|
|
4
4
|
offsetY: number;
|
|
5
5
|
model: MsaViewModel;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getClustalXColor, getPercentIdentityColor } from '../../colorSchemes';
|
|
2
|
-
export function
|
|
2
|
+
export function renderMSABlock({ model, offsetX, offsetY, contrastScheme, ctx, highResScaleFactorOverride, blockSizeXOverride, blockSizeYOverride, }) {
|
|
3
3
|
const { hierarchy, colWidth, blockSize, rowHeight, fontSize, highResScaleFactor, } = model;
|
|
4
4
|
const k = highResScaleFactorOverride || highResScaleFactor;
|
|
5
5
|
const bx = blockSizeXOverride || blockSize;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderMSABlock.js","sourceRoot":"","sources":["../../../src/components/MSAPanel/renderMSABlock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAI9E,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"renderMSABlock.js","sourceRoot":"","sources":["../../../src/components/MSAPanel/renderMSABlock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
const MinimapSVG = observer(function ({ model }) {
|
|
4
|
+
const { scrollX, msaAreaWidth: W, minimapHeight: H, colWidth, numColumns, } = model;
|
|
5
|
+
const BAR_HEIGHT = 12;
|
|
6
|
+
const H2 = H - 12;
|
|
7
|
+
const unit = W / numColumns / colWidth;
|
|
8
|
+
const left = -scrollX;
|
|
9
|
+
const right = left + W;
|
|
10
|
+
const s = left * unit;
|
|
11
|
+
const e = right * unit;
|
|
12
|
+
const fill = 'rgba(66, 119, 127, 0.3)';
|
|
13
|
+
return (React.createElement(React.Fragment, null,
|
|
14
|
+
React.createElement("rect", { x: 0, y: 0, width: W, height: BAR_HEIGHT, stroke: "#555", fill: "none" }),
|
|
15
|
+
React.createElement("rect", { x: Math.max(0, s), y: 0, width: e - s, height: BAR_HEIGHT, fill: fill, stroke: "#555" }),
|
|
16
|
+
React.createElement("g", { transform: `translate(0 ${BAR_HEIGHT})` },
|
|
17
|
+
React.createElement("polygon", { fill: fill, points: [
|
|
18
|
+
[e, 0],
|
|
19
|
+
[s, 0],
|
|
20
|
+
[0, H2],
|
|
21
|
+
[W, H2],
|
|
22
|
+
].toString() }))));
|
|
23
|
+
});
|
|
24
|
+
export default MinimapSVG;
|
|
25
|
+
//# sourceMappingURL=MinimapSVG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MinimapSVG.js","sourceRoot":"","sources":["../../src/components/MinimapSVG.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAGrC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACtE,MAAM,EACJ,OAAO,EACP,YAAY,EAAE,CAAC,EACf,aAAa,EAAE,CAAC,EAChB,QAAQ,EACR,UAAU,GACX,GAAG,KAAK,CAAA;IAET,MAAM,UAAU,GAAG,EAAE,CAAA;IACrB,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAA;IAEjB,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,GAAG,QAAQ,CAAA;IACtC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAA;IACrB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAA;IACtB,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;IACrB,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAA;IACtB,MAAM,IAAI,GAAG,yBAAyB,CAAA;IAEtC,OAAO,CACL;QACE,8BACE,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,UAAU,EAClB,MAAM,EAAC,MAAM,EACb,IAAI,EAAC,MAAM,GACX;QACF,8BACE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACjB,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,CAAC,GAAG,CAAC,EACZ,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,IAAI,EACV,MAAM,EAAC,MAAM,GACb;QACF,2BAAG,SAAS,EAAE,eAAe,UAAU,GAAG;YACxC,iCACE,IAAI,EAAE,IAAI,EACV,MAAM,EAAE;oBACN,CAAC,CAAC,EAAE,CAAC,CAAC;oBACN,CAAC,CAAC,EAAE,CAAC,CAAC;oBACN,CAAC,CAAC,EAAE,EAAE,CAAC;oBACP,CAAC,CAAC,EAAE,EAAE,CAAC;iBACR,CAAC,QAAQ,EAAE,GACZ,CACA,CACH,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,UAAU,CAAA"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { IconButton
|
|
1
|
+
import React, { Suspense, lazy, useState } from 'react';
|
|
2
|
+
import { IconButton } from '@mui/material';
|
|
3
3
|
import { observer } from 'mobx-react';
|
|
4
4
|
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton';
|
|
5
5
|
// icons
|
|
6
6
|
import MoreVert from '@mui/icons-material/MoreVert';
|
|
7
7
|
import ZoomIn from '@mui/icons-material/ZoomIn';
|
|
8
8
|
import ZoomOut from '@mui/icons-material/ZoomOut';
|
|
9
|
+
// lazies
|
|
10
|
+
const ExportSVGDialog = lazy(() => import('./ExportSVGDialog'));
|
|
9
11
|
const ZoomControls = observer(function ZoomControls({ model, }) {
|
|
10
12
|
const { colWidth, rowHeight } = model;
|
|
11
|
-
const
|
|
13
|
+
const [exportSvgDialogOpen, setExportSvgDialogOpen] = useState(false);
|
|
12
14
|
return (React.createElement(React.Fragment, null,
|
|
13
15
|
React.createElement(IconButton, { onClick: () => {
|
|
14
16
|
model.setColWidth(Math.ceil(colWidth * 1.5));
|
|
@@ -46,12 +48,12 @@ const ZoomControls = observer(function ZoomControls({ model, }) {
|
|
|
46
48
|
},
|
|
47
49
|
{
|
|
48
50
|
label: 'Export SVG',
|
|
49
|
-
onClick: () =>
|
|
50
|
-
model.exportSVG({ theme });
|
|
51
|
-
},
|
|
51
|
+
onClick: () => setExportSvgDialogOpen(true),
|
|
52
52
|
},
|
|
53
53
|
] },
|
|
54
|
-
React.createElement(MoreVert, null))
|
|
54
|
+
React.createElement(MoreVert, null)),
|
|
55
|
+
exportSvgDialogOpen ? (React.createElement(Suspense, { fallback: null },
|
|
56
|
+
React.createElement(ExportSVGDialog, { model: model, onClose: () => setExportSvgDialogOpen(false) }))) : null));
|
|
55
57
|
});
|
|
56
58
|
export default ZoomControls;
|
|
57
59
|
//# sourceMappingURL=ZoomControls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZoomControls.js","sourceRoot":"","sources":["../../src/components/ZoomControls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ZoomControls.js","sourceRoot":"","sources":["../../src/components/ZoomControls.tsx"],"names":[],"mappings":"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"}
|
package/dist/model.d.ts
CHANGED
|
@@ -80,24 +80,24 @@ declare const model: import("mobx-state-tree").IModelType<{
|
|
|
80
80
|
highResScaleFactor: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
81
81
|
colorSchemeName: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
82
82
|
treeFilehandle: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISnapshotProcessor<import("mobx-state-tree").ITypeUnion<import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
|
|
83
|
-
/**
|
|
84
|
-
* #property
|
|
85
|
-
* draw clickable node bubbles on the tree
|
|
86
|
-
*/
|
|
87
83
|
locationType: import("mobx-state-tree").ISimpleType<"UriLocation">;
|
|
88
84
|
uri: import("mobx-state-tree").ISimpleType<string>;
|
|
89
85
|
baseUri: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
90
86
|
internetAccountId: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
91
87
|
internetAccountPreAuthorization: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
92
88
|
internetAccountType: import("mobx-state-tree").ISimpleType<string>;
|
|
93
|
-
authInfo: import("mobx-state-tree").IType<any, any, any>;
|
|
89
|
+
authInfo: import("mobx-state-tree").IType<any, any, any>; /**
|
|
90
|
+
* #property
|
|
91
|
+
* filehandle object for the MSA (which could contain a tree e.g. with
|
|
92
|
+
* stockholm files)
|
|
93
|
+
*/
|
|
94
94
|
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
95
95
|
}>> | import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
|
|
96
|
-
locationType: import("mobx-state-tree").ISimpleType<"BlobLocation">;
|
|
96
|
+
locationType: import("mobx-state-tree").ISimpleType<"BlobLocation">;
|
|
97
|
+
name: import("mobx-state-tree").ISimpleType<string>; /**
|
|
97
98
|
* #property
|
|
98
99
|
*
|
|
99
100
|
*/
|
|
100
|
-
name: import("mobx-state-tree").ISimpleType<string>;
|
|
101
101
|
blobId: import("mobx-state-tree").ISimpleType<string>;
|
|
102
102
|
}>> | import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
|
|
103
103
|
locationType: import("mobx-state-tree").ISimpleType<"LocalPathLocation">;
|
|
@@ -138,24 +138,24 @@ declare const model: import("mobx-state-tree").IModelType<{
|
|
|
138
138
|
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
139
139
|
}>> & import("mobx-state-tree/dist/internal").NonEmptyObject)>, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
140
140
|
msaFilehandle: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISnapshotProcessor<import("mobx-state-tree").ITypeUnion<import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
|
|
141
|
-
/**
|
|
142
|
-
* #property
|
|
143
|
-
* draw clickable node bubbles on the tree
|
|
144
|
-
*/
|
|
145
141
|
locationType: import("mobx-state-tree").ISimpleType<"UriLocation">;
|
|
146
142
|
uri: import("mobx-state-tree").ISimpleType<string>;
|
|
147
143
|
baseUri: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
148
144
|
internetAccountId: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
149
145
|
internetAccountPreAuthorization: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
150
146
|
internetAccountType: import("mobx-state-tree").ISimpleType<string>;
|
|
151
|
-
authInfo: import("mobx-state-tree").IType<any, any, any>;
|
|
147
|
+
authInfo: import("mobx-state-tree").IType<any, any, any>; /**
|
|
148
|
+
* #property
|
|
149
|
+
* filehandle object for the MSA (which could contain a tree e.g. with
|
|
150
|
+
* stockholm files)
|
|
151
|
+
*/
|
|
152
152
|
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
153
153
|
}>> | import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
|
|
154
|
-
locationType: import("mobx-state-tree").ISimpleType<"BlobLocation">;
|
|
154
|
+
locationType: import("mobx-state-tree").ISimpleType<"BlobLocation">;
|
|
155
|
+
name: import("mobx-state-tree").ISimpleType<string>; /**
|
|
155
156
|
* #property
|
|
156
157
|
*
|
|
157
158
|
*/
|
|
158
|
-
name: import("mobx-state-tree").ISimpleType<string>;
|
|
159
159
|
blobId: import("mobx-state-tree").ISimpleType<string>;
|
|
160
160
|
}>> | import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
|
|
161
161
|
locationType: import("mobx-state-tree").ISimpleType<"LocalPathLocation">;
|
|
@@ -196,24 +196,24 @@ declare const model: import("mobx-state-tree").IModelType<{
|
|
|
196
196
|
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
197
197
|
}>> & import("mobx-state-tree/dist/internal").NonEmptyObject)>, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
198
198
|
treeMetadataFilehandle: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISnapshotProcessor<import("mobx-state-tree").ITypeUnion<import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
|
|
199
|
-
/**
|
|
200
|
-
* #property
|
|
201
|
-
* draw clickable node bubbles on the tree
|
|
202
|
-
*/
|
|
203
199
|
locationType: import("mobx-state-tree").ISimpleType<"UriLocation">;
|
|
204
200
|
uri: import("mobx-state-tree").ISimpleType<string>;
|
|
205
201
|
baseUri: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
206
202
|
internetAccountId: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
207
203
|
internetAccountPreAuthorization: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
208
204
|
internetAccountType: import("mobx-state-tree").ISimpleType<string>;
|
|
209
|
-
authInfo: import("mobx-state-tree").IType<any, any, any>;
|
|
205
|
+
authInfo: import("mobx-state-tree").IType<any, any, any>; /**
|
|
206
|
+
* #property
|
|
207
|
+
* filehandle object for the MSA (which could contain a tree e.g. with
|
|
208
|
+
* stockholm files)
|
|
209
|
+
*/
|
|
210
210
|
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
211
211
|
}>> | import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
|
|
212
|
-
locationType: import("mobx-state-tree").ISimpleType<"BlobLocation">;
|
|
212
|
+
locationType: import("mobx-state-tree").ISimpleType<"BlobLocation">;
|
|
213
|
+
name: import("mobx-state-tree").ISimpleType<string>; /**
|
|
213
214
|
* #property
|
|
214
215
|
*
|
|
215
216
|
*/
|
|
216
|
-
name: import("mobx-state-tree").ISimpleType<string>;
|
|
217
217
|
blobId: import("mobx-state-tree").ISimpleType<string>;
|
|
218
218
|
}>> | import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
|
|
219
219
|
locationType: import("mobx-state-tree").ISimpleType<"LocalPathLocation">;
|
|
@@ -506,27 +506,6 @@ declare const model: import("mobx-state-tree").IModelType<{
|
|
|
506
506
|
*/
|
|
507
507
|
setTreeMetadata(result: string): void;
|
|
508
508
|
} & {
|
|
509
|
-
/**
|
|
510
|
-
* #getter
|
|
511
|
-
*/
|
|
512
|
-
readonly initialized: boolean | "" | undefined;
|
|
513
|
-
/**
|
|
514
|
-
* #getter
|
|
515
|
-
*/
|
|
516
|
-
readonly blocksX: number[];
|
|
517
|
-
/**
|
|
518
|
-
* #getter
|
|
519
|
-
*/
|
|
520
|
-
readonly blocksY: number[];
|
|
521
|
-
} & {
|
|
522
|
-
/**
|
|
523
|
-
* #getter
|
|
524
|
-
*/
|
|
525
|
-
readonly blocks2d: number[][];
|
|
526
|
-
/**
|
|
527
|
-
* #getter
|
|
528
|
-
*/
|
|
529
|
-
readonly done: string | false | undefined;
|
|
530
509
|
/**
|
|
531
510
|
* #getter
|
|
532
511
|
*/
|
|
@@ -649,6 +628,37 @@ declare const model: import("mobx-state-tree").IModelType<{
|
|
|
649
628
|
* #getter
|
|
650
629
|
*/
|
|
651
630
|
readonly totalHeight: number;
|
|
631
|
+
} & {
|
|
632
|
+
/**
|
|
633
|
+
* #getter
|
|
634
|
+
*/
|
|
635
|
+
readonly totalWidth: number;
|
|
636
|
+
} & {
|
|
637
|
+
/**
|
|
638
|
+
* #getter
|
|
639
|
+
*/
|
|
640
|
+
readonly initialized: boolean | "" | undefined;
|
|
641
|
+
/**
|
|
642
|
+
* #getter
|
|
643
|
+
*/
|
|
644
|
+
readonly blocksX: number[];
|
|
645
|
+
/**
|
|
646
|
+
* #getter
|
|
647
|
+
*/
|
|
648
|
+
readonly blocksY: number[];
|
|
649
|
+
} & {
|
|
650
|
+
/**
|
|
651
|
+
* #getter
|
|
652
|
+
*/
|
|
653
|
+
readonly blocks2d: number[][];
|
|
654
|
+
/**
|
|
655
|
+
* #getter
|
|
656
|
+
*/
|
|
657
|
+
readonly done: string | false | undefined;
|
|
658
|
+
/**
|
|
659
|
+
* #getter
|
|
660
|
+
*/
|
|
661
|
+
readonly maxScrollX: number;
|
|
652
662
|
} & {
|
|
653
663
|
/**
|
|
654
664
|
* #action
|
|
@@ -747,6 +757,7 @@ declare const model: import("mobx-state-tree").IModelType<{
|
|
|
747
757
|
*/
|
|
748
758
|
exportSVG(opts: {
|
|
749
759
|
theme: Theme;
|
|
760
|
+
includeMinimap?: boolean;
|
|
750
761
|
}): Promise<void>;
|
|
751
762
|
/**
|
|
752
763
|
* #action
|
package/dist/model.js
CHANGED
|
@@ -22,6 +22,7 @@ import { UniprotTrack } from './UniprotTrack';
|
|
|
22
22
|
import { StructureModel } from './StructureModel';
|
|
23
23
|
import { DialogQueueSessionMixin } from './DialogQueue';
|
|
24
24
|
import { renderToSvg } from './renderToSvg';
|
|
25
|
+
import { blocksX, blocksY } from './calculateBlocks';
|
|
25
26
|
/**
|
|
26
27
|
* #stateModel MsaView
|
|
27
28
|
* extends
|
|
@@ -459,75 +460,7 @@ const model = types
|
|
|
459
460
|
self.data.setTreeMetadata(result);
|
|
460
461
|
},
|
|
461
462
|
}))
|
|
462
|
-
.views(self => {
|
|
463
|
-
let oldBlocksX = [];
|
|
464
|
-
let oldBlocksY = [];
|
|
465
|
-
let oldValX = 0;
|
|
466
|
-
let oldValY = 0;
|
|
467
|
-
return {
|
|
468
|
-
/**
|
|
469
|
-
* #getter
|
|
470
|
-
*/
|
|
471
|
-
get initialized() {
|
|
472
|
-
return ((self.data.msa ||
|
|
473
|
-
self.data.tree ||
|
|
474
|
-
self.msaFilehandle ||
|
|
475
|
-
self.treeFilehandle) &&
|
|
476
|
-
!self.error);
|
|
477
|
-
},
|
|
478
|
-
/**
|
|
479
|
-
* #getter
|
|
480
|
-
*/
|
|
481
|
-
get blocksX() {
|
|
482
|
-
const { scrollX, blockSize: size, colWidth } = self;
|
|
483
|
-
const ret = -(size * Math.floor(scrollX / size)) - size;
|
|
484
|
-
const b = [];
|
|
485
|
-
for (let i = ret; i < ret + size * 3; i += size) {
|
|
486
|
-
if (i + size > 0) {
|
|
487
|
-
b.push(i);
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
if (JSON.stringify(b) !== JSON.stringify(oldBlocksX) ||
|
|
491
|
-
colWidth !== oldValX) {
|
|
492
|
-
oldBlocksX = b;
|
|
493
|
-
oldValX = colWidth;
|
|
494
|
-
}
|
|
495
|
-
return oldBlocksX;
|
|
496
|
-
},
|
|
497
|
-
/**
|
|
498
|
-
* #getter
|
|
499
|
-
*/
|
|
500
|
-
get blocksY() {
|
|
501
|
-
const { scrollY, blockSize: size, rowHeight } = self;
|
|
502
|
-
const ret = -(size * Math.floor(scrollY / size)) - 2 * size;
|
|
503
|
-
const b = [];
|
|
504
|
-
for (let i = ret; i < ret + size * 3; i += size) {
|
|
505
|
-
if (i + size > 0) {
|
|
506
|
-
b.push(i);
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
|
-
if (JSON.stringify(b) !== JSON.stringify(oldBlocksY) ||
|
|
510
|
-
rowHeight !== oldValY) {
|
|
511
|
-
oldBlocksY = b;
|
|
512
|
-
oldValY = rowHeight;
|
|
513
|
-
}
|
|
514
|
-
return oldBlocksY;
|
|
515
|
-
},
|
|
516
|
-
};
|
|
517
|
-
})
|
|
518
463
|
.views(self => ({
|
|
519
|
-
/**
|
|
520
|
-
* #getter
|
|
521
|
-
*/
|
|
522
|
-
get blocks2d() {
|
|
523
|
-
return self.blocksY.flatMap(by => self.blocksX.map(bx => [bx, by]));
|
|
524
|
-
},
|
|
525
|
-
/**
|
|
526
|
-
* #getter
|
|
527
|
-
*/
|
|
528
|
-
get done() {
|
|
529
|
-
return self.initialized && (self.data.msa || self.data.tree);
|
|
530
|
-
},
|
|
531
464
|
/**
|
|
532
465
|
* #getter
|
|
533
466
|
*/
|
|
@@ -782,6 +715,74 @@ const model = types
|
|
|
782
715
|
get totalHeight() {
|
|
783
716
|
return this.root.leaves().length * self.rowHeight;
|
|
784
717
|
},
|
|
718
|
+
}))
|
|
719
|
+
.views(self => ({
|
|
720
|
+
/**
|
|
721
|
+
* #getter
|
|
722
|
+
*/
|
|
723
|
+
get totalWidth() {
|
|
724
|
+
return self.numColumns * self.colWidth;
|
|
725
|
+
},
|
|
726
|
+
}))
|
|
727
|
+
.views(self => ({
|
|
728
|
+
/**
|
|
729
|
+
* #getter
|
|
730
|
+
*/
|
|
731
|
+
get initialized() {
|
|
732
|
+
return ((self.data.msa ||
|
|
733
|
+
self.data.tree ||
|
|
734
|
+
self.msaFilehandle ||
|
|
735
|
+
self.treeFilehandle) &&
|
|
736
|
+
!self.error);
|
|
737
|
+
},
|
|
738
|
+
/**
|
|
739
|
+
* #getter
|
|
740
|
+
*/
|
|
741
|
+
get blocksX() {
|
|
742
|
+
return blocksX({
|
|
743
|
+
viewportWidth: self.msaAreaWidth,
|
|
744
|
+
viewportX: -self.scrollX,
|
|
745
|
+
blockSize: self.blockSize,
|
|
746
|
+
mapWidth: self.totalWidth,
|
|
747
|
+
});
|
|
748
|
+
},
|
|
749
|
+
/**
|
|
750
|
+
* #getter
|
|
751
|
+
*/
|
|
752
|
+
get blocksY() {
|
|
753
|
+
return blocksY({
|
|
754
|
+
viewportHeight: self.height,
|
|
755
|
+
viewportY: -self.scrollY,
|
|
756
|
+
blockSize: self.blockSize,
|
|
757
|
+
mapHeight: self.totalHeight,
|
|
758
|
+
});
|
|
759
|
+
},
|
|
760
|
+
}))
|
|
761
|
+
.views(self => ({
|
|
762
|
+
/**
|
|
763
|
+
* #getter
|
|
764
|
+
*/
|
|
765
|
+
get blocks2d() {
|
|
766
|
+
const ret = [];
|
|
767
|
+
for (const by of self.blocksY) {
|
|
768
|
+
for (const bx of self.blocksX) {
|
|
769
|
+
ret.push([bx, by]);
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
return ret;
|
|
773
|
+
},
|
|
774
|
+
/**
|
|
775
|
+
* #getter
|
|
776
|
+
*/
|
|
777
|
+
get done() {
|
|
778
|
+
return self.initialized && (self.data.msa || self.data.tree);
|
|
779
|
+
},
|
|
780
|
+
/**
|
|
781
|
+
* #getter
|
|
782
|
+
*/
|
|
783
|
+
get maxScrollX() {
|
|
784
|
+
return -self.totalWidth + (self.msaAreaWidth - 100);
|
|
785
|
+
},
|
|
785
786
|
}))
|
|
786
787
|
.actions(self => ({
|
|
787
788
|
/**
|
|
@@ -811,14 +812,13 @@ const model = types
|
|
|
811
812
|
* #action
|
|
812
813
|
*/
|
|
813
814
|
doScrollX(deltaX) {
|
|
814
|
-
self.scrollX = clamp(
|
|
815
|
+
self.scrollX = clamp(self.maxScrollX, self.scrollX + deltaX, 0);
|
|
815
816
|
},
|
|
816
817
|
/**
|
|
817
818
|
* #action
|
|
818
819
|
*/
|
|
819
820
|
setScrollX(n) {
|
|
820
|
-
|
|
821
|
-
self.scrollX = clamp(-(self.numColumns * self.colWidth) + (self.msaAreaWidth - 100), n, 0);
|
|
821
|
+
self.scrollX = clamp(self.maxScrollX, n, 0);
|
|
822
822
|
},
|
|
823
823
|
/**
|
|
824
824
|
* #action
|