react-msaview 6.1.1 → 6.2.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 (52) hide show
  1. package/bundle/index.js +92 -92
  2. package/bundle/index.js.map +4 -4
  3. package/dist/components/dialogs/ExportSVGDialog.js +48 -20
  4. package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
  5. package/dist/components/getVisibleLeaves.d.ts +8 -0
  6. package/dist/components/getVisibleLeaves.js +13 -6
  7. package/dist/components/getVisibleLeaves.js.map +1 -1
  8. package/dist/components/minimap/Minimap.js +1 -1
  9. package/dist/components/minimap/Minimap.js.map +1 -1
  10. package/dist/components/minimap/MinimapSVG.d.ts +4 -4
  11. package/dist/components/minimap/MinimapSVG.js +16 -10
  12. package/dist/components/minimap/MinimapSVG.js.map +1 -1
  13. package/dist/components/minimap/minimapLayout.d.ts +5 -8
  14. package/dist/components/minimap/minimapLayout.js +10 -11
  15. package/dist/components/minimap/minimapLayout.js.map +1 -1
  16. package/dist/components/msa/msaRaster.d.ts +32 -2
  17. package/dist/components/msa/msaRaster.js +93 -15
  18. package/dist/components/msa/msaRaster.js.map +1 -1
  19. package/dist/{renderTestEnv.d.ts → headlessRenderEnv.d.ts} +15 -13
  20. package/dist/{renderTestEnv.js → headlessRenderEnv.js} +22 -18
  21. package/dist/headlessRenderEnv.js.map +1 -0
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.js +3 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/model.d.ts +25 -0
  26. package/dist/model.js +62 -13
  27. package/dist/model.js.map +1 -1
  28. package/dist/renderToSvg.js +115 -36
  29. package/dist/renderToSvg.js.map +1 -1
  30. package/dist/version.d.ts +1 -1
  31. package/dist/version.js +1 -1
  32. package/package.json +3 -3
  33. package/src/components/dialogs/ExportSVGDialog.tsx +55 -20
  34. package/src/components/getVisibleLeaves.ts +25 -9
  35. package/src/components/minimap/Minimap.tsx +1 -4
  36. package/src/components/minimap/MinimapSVG.tsx +50 -35
  37. package/src/components/minimap/minimapLayout.test.ts +16 -5
  38. package/src/components/minimap/minimapLayout.ts +10 -11
  39. package/src/components/msa/msaRaster.ts +124 -17
  40. package/src/{renderTestEnv.ts → headlessRenderEnv.ts} +23 -19
  41. package/src/impgRender.test.tsx +2 -2
  42. package/src/index.ts +6 -0
  43. package/src/model.ts +77 -13
  44. package/src/modelReset.test.ts +120 -0
  45. package/src/renderDomainsSvg.test.tsx +2 -2
  46. package/src/renderMinimapSvg.test.tsx +29 -15
  47. package/src/renderRasterSvg.test.tsx +216 -0
  48. package/src/renderSequenceLogoSvg.test.tsx +6 -4
  49. package/src/renderToSvg.test.tsx +79 -0
  50. package/src/renderToSvg.tsx +201 -65
  51. package/src/version.ts +1 -1
  52. package/dist/renderTestEnv.js.map +0 -1
@@ -1,18 +1,33 @@
1
1
  import React, { useState } from 'react';
2
2
  import { Dialog, ErrorMessage } from '@jbrowse/core/ui';
3
- import { Alert, Button, DialogActions, DialogContent, FormControl, FormControlLabel, FormLabel, Radio, RadioGroup, Typography, useTheme, } from '@mui/material';
3
+ import { Alert, Button, CircularProgress, DialogActions, DialogContent, FormControl, FormControlLabel, FormLabel, Radio, RadioGroup, Typography, useTheme, } from '@mui/material';
4
4
  import Checkbox2 from '../Checkbox2.js';
5
+ // Run after the browser has painted. A requestAnimationFrame callback still
6
+ // runs *before* the frame it was queued for, so one alone hands the main thread
7
+ // to the render with the spinner not yet on screen; the second fires once that
8
+ // frame is out.
9
+ function afterPaint(fn) {
10
+ requestAnimationFrame(() => {
11
+ requestAnimationFrame(fn);
12
+ });
13
+ }
5
14
  export default function ExportSVGDialog({ model, onClose, }) {
6
15
  const [includeMinimap, setIncludeMinimap] = useState(true);
7
16
  const [includeTracks, setIncludeTracks] = useState(true);
8
17
  const [exportType, setExportType] = useState('viewport');
9
18
  const [error, setError] = useState();
19
+ const [exporting, setExporting] = useState(false);
10
20
  const theme = useTheme();
11
- const { totalWidth, totalHeight, treeAreaWidth, turnedOnTracks, totalTrackAreaHeight, } = model;
21
+ const { totalWidth, totalHeight, treeAreaWidth, turnedOnTracks, totalTrackAreaHeight, numColumns, leaves, showMsaLetters, } = model;
12
22
  const hasTracks = turnedOnTracks.length > 0;
13
23
  const entireWidth = totalWidth + treeAreaWidth;
14
24
  const entireHeight = totalHeight + (includeTracks ? totalTrackAreaHeight : 0);
15
- const isLargeExport = exportType === 'entire' && (entireWidth > 10000 || entireHeight > 10000);
25
+ // the background is one raster image whatever its size, so what the figure
26
+ // actually costs is its residue letters: each is an svg element of its own.
27
+ // Past roughly this many the export runs to tens of seconds and can exhaust
28
+ // the tab's memory outright
29
+ const glyphs = showMsaLetters && exportType === 'entire' ? numColumns * leaves.length : 0;
30
+ const isLargeExport = glyphs > 100_000;
16
31
  return (React.createElement(Dialog, { onClose: () => {
17
32
  onClose();
18
33
  }, open: true, title: "Export SVG" },
@@ -37,28 +52,41 @@ export default function ExportSVGDialog({ model, onClose, }) {
37
52
  React.createElement(FormControlLabel, { value: "entire", control: React.createElement(Radio, null), label: "Entire MSA" }),
38
53
  React.createElement(FormControlLabel, { value: "viewport", control: React.createElement(Radio, null), label: "Current viewport only" })))),
39
54
  isLargeExport ? (React.createElement(Alert, { severity: "warning", style: { marginTop: 8 } },
40
- "The entire MSA is very large (",
55
+ "The entire MSA is ",
41
56
  Math.round(entireWidth),
42
57
  "x",
43
58
  Math.round(entireHeight),
44
- " pixels). Export may be slow or fail.")) : null),
59
+ " pixels and draws",
60
+ ' ',
61
+ Math.round(glyphs / 1000),
62
+ "k residue letters, each its own SVG element. Export may be slow or fail \u2014 zooming out far enough to hide the letters exports the same alignment as an image instead.")) : null),
45
63
  React.createElement(DialogActions, null,
46
- React.createElement(Button, { variant: "contained", color: "primary", onClick: () => {
47
- void model
48
- .exportSVG({
49
- theme,
50
- includeMinimap: exportType === 'entire' ? false : includeMinimap,
51
- includeTracks: hasTracks && includeTracks,
52
- exportType,
53
- })
54
- .then(() => {
55
- onClose();
56
- })
57
- .catch((e) => {
58
- console.error(e);
59
- setError(e);
64
+ React.createElement(Button, { variant: "contained", color: "primary",
65
+ // rendering runs on the main thread and a large figure holds it for
66
+ // seconds; without this the button stays live through the freeze and
67
+ // a second click starts a second export
68
+ disabled: exporting, startIcon: exporting ? React.createElement(CircularProgress, { size: 16, color: "inherit" }) : null, onClick: () => {
69
+ setExporting(true);
70
+ afterPaint(() => {
71
+ void model
72
+ .exportSVG({
73
+ theme,
74
+ includeMinimap,
75
+ includeTracks: hasTracks && includeTracks,
76
+ exportType,
77
+ })
78
+ .then(() => {
79
+ onClose();
80
+ })
81
+ .catch((e) => {
82
+ console.error(e);
83
+ setError(e);
84
+ })
85
+ .finally(() => {
86
+ setExporting(false);
87
+ });
60
88
  });
61
- } }, "Submit"),
89
+ } }, exporting ? 'Exporting…' : 'Submit'),
62
90
  React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => {
63
91
  onClose();
64
92
  } }, "Cancel"))));
@@ -1 +1 @@
1
- {"version":3,"file":"ExportSVGDialog.js","sourceRoot":"","sources":["../../../src/components/dialogs/ExportSVGDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExportSVGDialog.js","sourceRoot":"","sources":["../../../src/components/dialogs/ExportSVGDialog.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,12 @@
1
1
  import type { MsaViewModel } from '../model.ts';
2
+ export declare function visibleRowRange({ model, offsetY, blockSizeY, }: {
3
+ model: MsaViewModel;
4
+ offsetY: number;
5
+ blockSizeY: number;
6
+ }): {
7
+ yStart: number;
8
+ yEnd: number;
9
+ };
2
10
  export declare function getVisibleLeaves({ model, offsetY, blockSizeY, }: {
3
11
  model: MsaViewModel;
4
12
  offsetY: number;
@@ -1,9 +1,16 @@
1
- // The slice of leaves whose rows intersect a block of height blockSizeY at
2
- // vertical offset offsetY, padded by one row on each side.
1
+ // The half-open range of rows [yStart, yEnd) whose leaves intersect a block of
2
+ // height blockSizeY at vertical offset offsetY, padded by one row on each side.
3
+ // Y-axis counterpart to visibleColRange.
4
+ export function visibleRowRange({ model, offsetY, blockSizeY, }) {
5
+ const { rowHeight } = model;
6
+ return {
7
+ yStart: Math.max(0, Math.floor((offsetY - rowHeight) / rowHeight)),
8
+ yEnd: Math.max(0, Math.ceil((offsetY + blockSizeY + rowHeight) / rowHeight)),
9
+ };
10
+ }
11
+ // The leaves in that range.
3
12
  export function getVisibleLeaves({ model, offsetY, blockSizeY, }) {
4
- const { leaves, rowHeight } = model;
5
- const yStart = Math.max(0, Math.floor((offsetY - rowHeight) / rowHeight));
6
- const yEnd = Math.max(0, Math.ceil((offsetY + blockSizeY + rowHeight) / rowHeight));
7
- return leaves.slice(yStart, yEnd);
13
+ const { yStart, yEnd } = visibleRowRange({ model, offsetY, blockSizeY });
14
+ return model.leaves.slice(yStart, yEnd);
8
15
  }
9
16
  //# sourceMappingURL=getVisibleLeaves.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getVisibleLeaves.js","sourceRoot":"","sources":["../../src/components/getVisibleLeaves.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,2DAA2D;AAC3D,MAAM,UAAU,gBAAgB,CAAC,EAC/B,KAAK,EACL,OAAO,EACP,UAAU,GAKX;IACC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,CAAA;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,CAAC,EACD,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAC1D,CAAA;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"getVisibleLeaves.js","sourceRoot":"","sources":["../../src/components/getVisibleLeaves.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,gFAAgF;AAChF,yCAAyC;AACzC,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,OAAO,EACP,UAAU,GAKX;IACC,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAC3B,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC;QAClE,IAAI,EAAE,IAAI,CAAC,GAAG,CACZ,CAAC,EACD,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAC1D;KACF,CAAA;AACH,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,gBAAgB,CAAC,EAC/B,KAAK,EACL,OAAO,EACP,UAAU,GAKX;IACC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAA;IACxE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AACzC,CAAC"}
@@ -8,7 +8,7 @@ import { MINIMAP_BAR_HEIGHT, getMinimapLayout } from './minimapLayout.js';
8
8
  const Minimap = observer(function ({ model }) {
9
9
  const { minimapHeight, msaCanvasWidth, highResScaleFactor } = model;
10
10
  const theme = useTheme();
11
- const { unit, s, w, polygonHeight, polygonPoints } = getMinimapLayout(model, msaCanvasWidth);
11
+ const { unit, s, w, polygonHeight, polygonPoints } = getMinimapLayout(model);
12
12
  // the whole alignment, sampled down to the bar: it says where the conserved
13
13
  // blocks and the gappy stretches are, which is what a scroll aims at
14
14
  const barWidth = Math.round(msaCanvasWidth * highResScaleFactor);
@@ -1 +1 @@
1
- {"version":3,"file":"Minimap.js","sourceRoot":"","sources":["../../../src/components/minimap/Minimap.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Minimap.js","sourceRoot":"","sources":["../../../src/components/minimap/Minimap.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import type { MsaViewModel } from '../../model.ts';
3
- declare const MinimapSVG: ({ model, width }: {
3
+ import type { Theme } from '@mui/material';
4
+ export default function MinimapSVG({ model, theme, }: {
4
5
  model: MsaViewModel;
5
- width: number;
6
- }) => React.JSX.Element;
7
- export default MinimapSVG;
6
+ theme: Theme;
7
+ }): React.JSX.Element;
@@ -1,15 +1,21 @@
1
1
  import React from 'react';
2
- import { observer } from 'mobx-react';
2
+ import { scrollbarThumbFill } from '../DragHandle.js';
3
+ import { canvasHref, msaThumbnail } from '../msa/msaRaster.js';
3
4
  import { MINIMAP_BAR_HEIGHT, getMinimapLayout } from './minimapLayout.js';
4
- const MinimapSVG = observer(({ model, width }) => {
5
- const { s, w, polygonPoints } = getMinimapLayout(model, width);
6
- const fillColor = 'rgb(66, 119, 127)';
7
- const fillOpacity = 0.3;
5
+ // The static counterpart to Minimap, for the SVG export. renderToSvg drives it
6
+ // through renderToStaticMarkup, so it reads the model once and never re-renders
7
+ // -- no observer wrapper.
8
+ export default function MinimapSVG({ model, theme, }) {
9
+ const { msaCanvasWidth } = model;
10
+ const { s, w, polygonPoints } = getMinimapLayout(model);
11
+ // the same downsampled alignment the live minimap draws behind its thumb;
12
+ // undefined wherever a canvas cannot be read back, leaving a bare outline
13
+ const href = canvasHref(msaThumbnail({ model, theme, height: MINIMAP_BAR_HEIGHT }));
8
14
  return (React.createElement(React.Fragment, null,
9
- React.createElement("rect", { x: 0, y: 0, width: width, height: MINIMAP_BAR_HEIGHT, stroke: "#555", fill: "none" }),
10
- React.createElement("rect", { x: Math.max(0, s), y: 0, width: w, height: MINIMAP_BAR_HEIGHT, fill: fillColor, fillOpacity: fillOpacity, stroke: "#555" }),
15
+ href ? (React.createElement("image", { href: href, x: 0, y: 0, width: msaCanvasWidth, height: MINIMAP_BAR_HEIGHT, preserveAspectRatio: "none" })) : null,
16
+ React.createElement("rect", { x: 0, y: 0, width: msaCanvasWidth, height: MINIMAP_BAR_HEIGHT, stroke: "#555", fill: "none" }),
17
+ React.createElement("rect", { x: Math.max(0, s), y: 0, width: w, height: MINIMAP_BAR_HEIGHT, fill: scrollbarThumbFill, stroke: "#555" }),
11
18
  React.createElement("g", { transform: `translate(0 ${MINIMAP_BAR_HEIGHT})` },
12
- React.createElement("polygon", { fill: fillColor, fillOpacity: fillOpacity, points: polygonPoints }))));
13
- });
14
- export default MinimapSVG;
19
+ React.createElement("polygon", { fill: scrollbarThumbFill, points: polygonPoints }))));
20
+ }
15
21
  //# sourceMappingURL=MinimapSVG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MinimapSVG.js","sourceRoot":"","sources":["../../../src/components/minimap/MinimapSVG.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAIzE,MAAM,UAAU,GAAG,QAAQ,CACzB,CAAC,EAAE,KAAK,EAAE,KAAK,EAA0C,EAAE,EAAE;IAC3D,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC9D,MAAM,SAAS,GAAG,mBAAmB,CAAA;IACrC,MAAM,WAAW,GAAG,GAAG,CAAA;IAEvB,OAAO,CACL;QACE,8BACE,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,kBAAkB,EAC1B,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,EACR,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,WAAW,EACxB,MAAM,EAAC,MAAM,GACb;QACF,2BAAG,SAAS,EAAE,eAAe,kBAAkB,GAAG;YAChD,iCACE,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,aAAa,GACrB,CACA,CACH,CACJ,CAAA;AACH,CAAC,CACF,CAAA;AAED,eAAe,UAAU,CAAA"}
1
+ {"version":3,"file":"MinimapSVG.js","sourceRoot":"","sources":["../../../src/components/minimap/MinimapSVG.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAmB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAKzE,+EAA+E;AAC/E,gFAAgF;AAChF,0BAA0B;AAC1B,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,KAAK,EACL,KAAK,GAIN;IACC,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAA;IAChC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACvD,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,IAAI,GAAG,UAAU,CACrB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAC3D,CAAA;IAED,OAAO,CACL;QACG,IAAI,CAAC,CAAC,CAAC,CACN,+BACE,IAAI,EAAE,IAAI,EACV,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,kBAAkB,EAC1B,mBAAmB,EAAC,MAAM,GAC1B,CACH,CAAC,CAAC,CAAC,IAAI;QACR,8BACE,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,kBAAkB,EAC1B,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,EACR,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAC,MAAM,GACb;QACF,2BAAG,SAAS,EAAE,eAAe,kBAAkB,GAAG;YAChD,iCAAS,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,GAAI,CAC1D,CACH,CACJ,CAAA;AACH,CAAC"}
@@ -1,15 +1,12 @@
1
1
  import type { MsaViewModel } from '../../model.ts';
2
2
  export declare const MINIMAP_BAR_HEIGHT = 12;
3
3
  /**
4
- * Viewport-rectangle and trapezoid geometry for a minimap drawn `minimapWidth`
5
- * pixels wide, shared by the interactive Minimap and the static MinimapSVG.
6
- *
7
- * The width is a parameter rather than read off the model because the two
8
- * differ: on screen the minimap sits over the alignment canvas, while the SVG
9
- * export lays the whole figure out on its own grid. What the rectangle *marks*
10
- * is always the on-screen viewport, so that part comes from the model.
4
+ * Viewport-rectangle and trapezoid geometry for the minimap, shared by the
5
+ * interactive Minimap and the static MinimapSVG. Both span the alignment canvas
6
+ * exactly -- a minimap drawn a different width than the columns it maps puts
7
+ * its viewport rectangle over the wrong ones.
11
8
  */
12
- export declare function getMinimapLayout(model: MsaViewModel, minimapWidth: number): {
9
+ export declare function getMinimapLayout(model: MsaViewModel): {
13
10
  unit: number;
14
11
  s: number;
15
12
  w: number;
@@ -1,20 +1,19 @@
1
1
  export const MINIMAP_BAR_HEIGHT = 12;
2
2
  /**
3
- * Viewport-rectangle and trapezoid geometry for a minimap drawn `minimapWidth`
4
- * pixels wide, shared by the interactive Minimap and the static MinimapSVG.
5
- *
6
- * The width is a parameter rather than read off the model because the two
7
- * differ: on screen the minimap sits over the alignment canvas, while the SVG
8
- * export lays the whole figure out on its own grid. What the rectangle *marks*
9
- * is always the on-screen viewport, so that part comes from the model.
3
+ * Viewport-rectangle and trapezoid geometry for the minimap, shared by the
4
+ * interactive Minimap and the static MinimapSVG. Both span the alignment canvas
5
+ * exactly -- a minimap drawn a different width than the columns it maps puts
6
+ * its viewport rectangle over the wrong ones.
10
7
  */
11
- export function getMinimapLayout(model, minimapWidth) {
8
+ export function getMinimapLayout(model) {
12
9
  const { scrollX, minimapHeight, totalWidth, msaCanvasWidth } = model;
13
- const unit = totalWidth > 0 ? minimapWidth / totalWidth : 0;
10
+ const unit = totalWidth > 0 ? msaCanvasWidth / totalWidth : 0;
14
11
  const s = -scrollX * unit;
15
- const w = Math.max(msaCanvasWidth * unit, 20);
12
+ // the rectangle marks the visible slice of the alignment, so it can never be
13
+ // wider than the bar itself
14
+ const w = Math.min(msaCanvasWidth, Math.max(msaCanvasWidth * unit, 20));
16
15
  const polygonHeight = minimapHeight - MINIMAP_BAR_HEIGHT;
17
- const polygonPoints = `${s + w},0 ${s},0 0,${polygonHeight} ${minimapWidth},${polygonHeight}`;
16
+ const polygonPoints = `${s + w},0 ${s},0 0,${polygonHeight} ${msaCanvasWidth},${polygonHeight}`;
18
17
  return { unit, s, w, polygonHeight, polygonPoints };
19
18
  }
20
19
  //# sourceMappingURL=minimapLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"minimapLayout.js","sourceRoot":"","sources":["../../../src/components/minimap/minimapLayout.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAA;AAEpC;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAmB,EAAE,YAAoB;IACxE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,KAAK,CAAA;IACpE,MAAM,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3D,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,EAAE,EAAE,CAAC,CAAA;IAC7C,MAAM,aAAa,GAAG,aAAa,GAAG,kBAAkB,CAAA;IACxD,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,aAAa,IAAI,YAAY,IAAI,aAAa,EAAE,CAAA;IAC7F,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,CAAA;AACrD,CAAC"}
1
+ {"version":3,"file":"minimapLayout.js","sourceRoot":"","sources":["../../../src/components/minimap/minimapLayout.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAmB;IAClD,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,KAAK,CAAA;IACpE,MAAM,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7D,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;IACzB,6EAA6E;IAC7E,4BAA4B;IAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;IACvE,MAAM,aAAa,GAAG,aAAa,GAAG,kBAAkB,CAAA;IACxD,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,aAAa,IAAI,cAAc,IAAI,aAAa,EAAE,CAAA;IAC/F,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,CAAA;AACrD,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { MsaViewModel } from '../../model.ts';
2
2
  import type { Theme } from '@mui/material';
3
3
  export declare const rasterTileSize = 512;
4
- type RasterCanvas = HTMLCanvasElement | OffscreenCanvas;
4
+ export type RasterCanvas = HTMLCanvasElement | OffscreenCanvas;
5
5
  export interface RasterSpec {
6
6
  rowNames: string[];
7
7
  columns: Map<string, string>;
@@ -50,6 +50,37 @@ export declare function drawMsaRaster({ ctx, model, theme, offsetX, offsetY, }:
50
50
  offsetX: number;
51
51
  offsetY: number;
52
52
  }): void;
53
+ /**
54
+ * A raster canvas as a PNG data URI, for embedding in the SVG export.
55
+ *
56
+ * toDataURL is the synchronous read-back and only the DOM canvas has it, so an
57
+ * OffscreenCanvas -- which is what the tile and thumbnail caches hold wherever
58
+ * it exists -- gets copied onto one first. Returns undefined wherever the
59
+ * read-back is unavailable (jsdom) rather than throwing, which is the signal to
60
+ * fall back to drawing the thing in vector.
61
+ */
62
+ export declare function canvasHref(canvas: RasterCanvas | undefined): string | undefined;
63
+ /**
64
+ * The alignment rectangle [col0, col0+numCols) x [row0, row0+numRows) as a PNG
65
+ * data URI, for the SVG export.
66
+ *
67
+ * SVG has no blit, so the export cannot reuse the tile cache the live canvas
68
+ * draws from: one <image> is the whole background instead. That is the
69
+ * difference between an export that scales and one that does not -- the vector
70
+ * path emits a <rect> per cell, and a 200x500 alignment exhausts the heap
71
+ * building them.
72
+ *
73
+ * Returns undefined wherever a canvas cannot be read back (jsdom, notably),
74
+ * which is the signal to keep the per-cell path.
75
+ */
76
+ export declare function rasterImageHref({ model, theme, col0, row0, numCols, numRows, }: {
77
+ model: MsaViewModel;
78
+ theme: Theme;
79
+ col0: number;
80
+ row0: number;
81
+ numCols: number;
82
+ numRows: number;
83
+ }): string | undefined;
53
84
  /**
54
85
  * The whole alignment sampled down to a strip small enough to sit behind the
55
86
  * minimap thumb, cached alongside the block tiles because it goes stale under
@@ -60,4 +91,3 @@ export declare function msaThumbnail({ model, theme, height, }: {
60
91
  theme: Theme;
61
92
  height: number;
62
93
  }): RasterCanvas | undefined;
63
- export {};
@@ -85,23 +85,28 @@ export function rasterPixels({ spec, col0, row0, width, height, colStep = 1, row
85
85
  }
86
86
  return out;
87
87
  }
88
+ // Getting a context object back is not the same as getting one that can do
89
+ // this: the headless render shim hands back a context carrying only measureText,
90
+ // which a truthiness test accepts and putImageData then does not survive. Name
91
+ // the methods the raster actually calls, so every caller degrades together.
92
+ function usableRasterCtx(ctx) {
93
+ const c = ctx;
94
+ return (!!c &&
95
+ typeof c.createImageData === 'function' &&
96
+ typeof c.putImageData === 'function' &&
97
+ typeof c.getImageData === 'function' &&
98
+ typeof c.clearRect === 'function' &&
99
+ typeof c.fillRect === 'function');
100
+ }
88
101
  function makeRasterCanvas(width, height) {
89
- if (typeof OffscreenCanvas !== 'undefined') {
90
- const canvas = new OffscreenCanvas(width, height);
91
- const ctx = canvas.getContext('2d', { willReadFrequently: true });
92
- return ctx
93
- ? { canvas: canvas, ctx: ctx }
102
+ const canvas = typeof OffscreenCanvas !== 'undefined'
103
+ ? new OffscreenCanvas(width, height)
104
+ : typeof document !== 'undefined'
105
+ ? Object.assign(document.createElement('canvas'), { width, height })
94
106
  : undefined;
95
- }
96
- if (typeof document === 'undefined') {
97
- return undefined;
98
- }
99
- const canvas = document.createElement('canvas');
100
- canvas.width = width;
101
- canvas.height = height;
102
- const ctx = canvas.getContext('2d', { willReadFrequently: true });
103
- return ctx
104
- ? { canvas: canvas, ctx: ctx }
107
+ const ctx = canvas?.getContext('2d', { willReadFrequently: true });
108
+ return usableRasterCtx(ctx)
109
+ ? { canvas: canvas, ctx }
105
110
  : undefined;
106
111
  }
107
112
  function paint(pixels, width, height) {
@@ -221,6 +226,79 @@ export function drawMsaRaster({ ctx, model, theme, offsetX, offsetY, }) {
221
226
  ctx.resetTransform();
222
227
  ctx.imageSmoothingEnabled = true;
223
228
  }
229
+ /**
230
+ * A raster canvas as a PNG data URI, for embedding in the SVG export.
231
+ *
232
+ * toDataURL is the synchronous read-back and only the DOM canvas has it, so an
233
+ * OffscreenCanvas -- which is what the tile and thumbnail caches hold wherever
234
+ * it exists -- gets copied onto one first. Returns undefined wherever the
235
+ * read-back is unavailable (jsdom) rather than throwing, which is the signal to
236
+ * fall back to drawing the thing in vector.
237
+ */
238
+ export function canvasHref(canvas) {
239
+ if (!canvas || typeof document === 'undefined') {
240
+ return undefined;
241
+ }
242
+ try {
243
+ if (canvas instanceof HTMLCanvasElement) {
244
+ return canvas.toDataURL('image/png');
245
+ }
246
+ const out = document.createElement('canvas');
247
+ out.width = canvas.width;
248
+ out.height = canvas.height;
249
+ const ctx = out.getContext('2d');
250
+ if (typeof ctx?.drawImage !== 'function') {
251
+ return undefined;
252
+ }
253
+ ctx.drawImage(canvas, 0, 0);
254
+ return out.toDataURL('image/png');
255
+ }
256
+ catch {
257
+ return undefined;
258
+ }
259
+ }
260
+ // A canvas much past this many pixels fails to allocate, and the browser's own
261
+ // per-side limit is lower still, so a raster bigger than either samples down.
262
+ // The result is still drawn across the same rectangle -- it loses cell-exact
263
+ // detail at a size where no figure could show it anyway.
264
+ const maxImagePixels = 64e6;
265
+ const maxImageSide = 16384;
266
+ /**
267
+ * The alignment rectangle [col0, col0+numCols) x [row0, row0+numRows) as a PNG
268
+ * data URI, for the SVG export.
269
+ *
270
+ * SVG has no blit, so the export cannot reuse the tile cache the live canvas
271
+ * draws from: one <image> is the whole background instead. That is the
272
+ * difference between an export that scales and one that does not -- the vector
273
+ * path emits a <rect> per cell, and a 200x500 alignment exhausts the heap
274
+ * building them.
275
+ *
276
+ * Returns undefined wherever a canvas cannot be read back (jsdom, notably),
277
+ * which is the signal to keep the per-cell path.
278
+ */
279
+ export function rasterImageHref({ model, theme, col0, row0, numCols, numRows, }) {
280
+ if (numCols <= 0 || numRows <= 0 || typeof document === 'undefined') {
281
+ return undefined;
282
+ }
283
+ const cache = getCache(model, theme);
284
+ let step = 1;
285
+ while (Math.ceil(numCols / step) * Math.ceil(numRows / step) > maxImagePixels ||
286
+ Math.ceil(numCols / step) > maxImageSide ||
287
+ Math.ceil(numRows / step) > maxImageSide) {
288
+ step *= 2;
289
+ }
290
+ const width = Math.ceil(numCols / step);
291
+ const height = Math.ceil(numRows / step);
292
+ return canvasHref(paint(rasterPixels({
293
+ spec: cache.spec,
294
+ col0,
295
+ row0,
296
+ width,
297
+ height,
298
+ colStep: step,
299
+ rowStep: step,
300
+ }), width, height));
301
+ }
224
302
  /**
225
303
  * The whole alignment sampled down to a strip small enough to sit behind the
226
304
  * minimap thumb, cached alongside the block tiles because it goes stale under
@@ -1 +1 @@
1
- {"version":3,"file":"msaRaster.js","sourceRoot":"","sources":["../../../src/components/msa/msaRaster.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"msaRaster.js","sourceRoot":"","sources":["../../../src/components/msa/msaRaster.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * jsdom shims for the SVG-export tests. Test-only -- nothing in the viewer
3
- * imports this.
2
+ * DOM shims for driving `renderToSvg` outside a browser -- the SVG-export
3
+ * tests, the README figure generator, and react-msaview-cli all need them.
4
4
  *
5
5
  * jsdom implements neither DOMMatrix nor a canvas 2D context, and
6
6
  * `@jbrowse/svgcanvas` needs both: it tracks the current transform as a real
@@ -12,7 +12,7 @@
12
12
  * leaves the rest undefined -- every emitted transform then carries `NaN` in its
13
13
  * x components, which no assertion on a drawn x-position can survive.
14
14
  */
15
- export declare class TestDOMMatrix {
15
+ export declare class HeadlessDOMMatrix {
16
16
  a: number;
17
17
  b: number;
18
18
  c: number;
@@ -20,24 +20,26 @@ export declare class TestDOMMatrix {
20
20
  e: number;
21
21
  f: number;
22
22
  constructor(init?: number[]);
23
- multiply(o: TestDOMMatrix): TestDOMMatrix;
24
- translate(x: number, y?: number): TestDOMMatrix;
25
- scale(x: number, y?: number): TestDOMMatrix;
23
+ multiply(o: HeadlessDOMMatrix): HeadlessDOMMatrix;
24
+ translate(x: number, y?: number): HeadlessDOMMatrix;
25
+ scale(x: number, y?: number): HeadlessDOMMatrix;
26
26
  }
27
- export declare class TestDOMPoint {
27
+ export declare class HeadlessDOMPoint {
28
28
  x: number;
29
29
  y: number;
30
30
  constructor(x?: number, y?: number);
31
- matrixTransform(m: TestDOMMatrix): TestDOMPoint;
31
+ matrixTransform(m: HeadlessDOMMatrix): HeadlessDOMPoint;
32
32
  }
33
33
  /**
34
- * Install the shims. Call from `beforeAll` in any test that exports SVG.
34
+ * Install the shims, into `globalThis` by default. A Node caller that builds
35
+ * its own jsdom passes that window instead, because Node has no global
36
+ * HTMLCanvasElement to patch.
35
37
  *
36
38
  * `measureText` reports 0.6em per character, close enough to a real sans-serif
37
- * average for layout assertions and, more usefully, exactly predictable: a test
38
- * can compute the width a renderer will see rather than hardcoding a number
39
+ * average for layout and, more usefully, exactly predictable: a caller can
40
+ * compute the width a renderer will see rather than hardcoding a number
39
41
  * measured from one machine's fonts.
40
42
  */
41
- export declare function installRenderTestEnv(): void;
43
+ export declare function installHeadlessRenderEnv(win?: unknown): void;
42
44
  /** the per-character width factor `measureText` above reports */
43
- export declare const TEST_CHAR_WIDTH_RATIO = 0.6;
45
+ export declare const CHAR_WIDTH_RATIO = 0.6;