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.
Files changed (35) hide show
  1. package/bundle/index.js +23 -23
  2. package/dist/calculateBlocks.d.ts +12 -0
  3. package/dist/calculateBlocks.js +23 -0
  4. package/dist/calculateBlocks.js.map +1 -0
  5. package/dist/components/ExportSVGDialog.d.ts +6 -0
  6. package/dist/components/ExportSVGDialog.js +26 -0
  7. package/dist/components/ExportSVGDialog.js.map +1 -0
  8. package/dist/components/MSAPanel/MSABlock.js +2 -3
  9. package/dist/components/MSAPanel/MSABlock.js.map +1 -1
  10. package/dist/components/MSAPanel/renderMSABlock.d.ts +1 -1
  11. package/dist/components/MSAPanel/renderMSABlock.js +1 -1
  12. package/dist/components/MSAPanel/renderMSABlock.js.map +1 -1
  13. package/dist/components/MinimapSVG.d.ts +6 -0
  14. package/dist/components/MinimapSVG.js +25 -0
  15. package/dist/components/MinimapSVG.js.map +1 -0
  16. package/dist/components/ZoomControls.js +9 -7
  17. package/dist/components/ZoomControls.js.map +1 -1
  18. package/dist/model.d.ts +53 -42
  19. package/dist/model.js +71 -71
  20. package/dist/model.js.map +1 -1
  21. package/dist/renderToSvg.d.ts +1 -0
  22. package/dist/renderToSvg.js +25 -12
  23. package/dist/renderToSvg.js.map +1 -1
  24. package/dist/version.d.ts +1 -1
  25. package/dist/version.js +1 -1
  26. package/package.json +1 -1
  27. package/src/calculateBlocks.ts +58 -0
  28. package/src/components/ExportSVGDialog.tsx +61 -0
  29. package/src/components/MSAPanel/MSABlock.tsx +2 -3
  30. package/src/components/MSAPanel/renderMSABlock.ts +1 -1
  31. package/src/components/MinimapSVG.tsx +57 -0
  32. package/src/components/ZoomControls.tsx +15 -6
  33. package/src/model.ts +76 -90
  34. package/src/renderToSvg.tsx +50 -19
  35. 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,6 @@
1
+ import React from 'react';
2
+ import { MsaViewModel } from '../model';
3
+ export default function ExportSVGDialog({ model, onClose, }: {
4
+ model: MsaViewModel;
5
+ onClose: () => void;
6
+ }): React.JSX.Element;
@@ -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 { renderBlock } from './renderMSABlock';
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
- renderBlock({
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,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,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;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IAEnD,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,WAAW,CAAC;gBACV,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
+ {"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 renderBlock({ model, offsetX, offsetY, contrastScheme, ctx, highResScaleFactorOverride, blockSizeXOverride, blockSizeYOverride, }: {
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 renderBlock({ model, offsetX, offsetY, contrastScheme, ctx, highResScaleFactorOverride, blockSizeXOverride, blockSizeYOverride, }) {
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":"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"}
1
+ {"version":3,"file":"renderMSABlock.js","sourceRoot":"","sources":["../../../src/components/MSAPanel/renderMSABlock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { MsaViewModel } from '../model';
3
+ declare const MinimapSVG: ({ model }: {
4
+ model: MsaViewModel;
5
+ }) => React.JSX.Element;
6
+ export default MinimapSVG;
@@ -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, useTheme } from '@mui/material';
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 theme = useTheme();
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;AACzB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AAKtE,QAAQ;AACR,OAAO,QAAQ,MAAM,8BAA8B,CAAA;AACnD,OAAO,MAAM,MAAM,4BAA4B,CAAA;AAC/C,OAAO,OAAO,MAAM,6BAA6B,CAAA;AAEjD,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,YAAY,CAAC,EAClD,KAAK,GAGN;IACC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IACrC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,OAAO,CACL;QACE,oBAAC,UAAU,IACT,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAA;gBAC5C,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAA;YAChD,CAAC;YAED,oBAAC,MAAM,OAAG,CACC;QACb,oBAAC,UAAU,IACT,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;gBAC3D,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACjE,CAAC;YAED,oBAAC,OAAO,OAAG,CACA;QACb,oBAAC,mBAAmB,IAClB,SAAS,EAAE;gBACT;oBACE,KAAK,EAAE,qBAAqB;oBAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC,CAAC;iBACnE;gBACD;oBACE,KAAK,EAAE,qBAAqB;oBAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,GAAG,GAAG,CAAC;iBACnD;gBACD;oBACE,KAAK,EAAE,oBAAoB;oBAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC;iBAC/D;gBACD;oBACE,KAAK,EAAE,oBAAoB;oBAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,GAAG,CAAC;iBACjD;gBACD;oBACE,KAAK,EAAE,uBAAuB;oBAC9B,OAAO,EAAE,GAAG,EAAE;wBACZ,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;wBACrB,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;oBACxB,CAAC;iBACF;gBACD;oBACE,KAAK,EAAE,YAAY;oBACnB,OAAO,EAAE,GAAG,EAAE;wBACZ,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC5B,CAAC;iBACF;aACF;YAED,oBAAC,QAAQ,OAAG,CACQ,CACrB,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AACF,eAAe,YAAY,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(-(self.numColumns * self.colWidth) + (self.msaAreaWidth - 100), self.scrollX + deltaX, 0);
815
+ self.scrollX = clamp(self.maxScrollX, self.scrollX + deltaX, 0);
815
816
  },
816
817
  /**
817
818
  * #action
818
819
  */
819
820
  setScrollX(n) {
820
- console.log({ n });
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