react-msaview 6.0.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/bundle/index.js +98 -98
  2. package/bundle/index.js.map +4 -4
  3. package/dist/columnCounts.d.ts +7 -0
  4. package/dist/columnCounts.js +18 -0
  5. package/dist/columnCounts.js.map +1 -1
  6. package/dist/components/DragHandle.d.ts +25 -0
  7. package/dist/components/DragHandle.js +49 -0
  8. package/dist/components/DragHandle.js.map +1 -0
  9. package/dist/components/ResizeHandles.d.ts +4 -2
  10. package/dist/components/ResizeHandles.js +29 -32
  11. package/dist/components/ResizeHandles.js.map +1 -1
  12. package/dist/components/VerticalScrollbar.js +2 -2
  13. package/dist/components/VerticalScrollbar.js.map +1 -1
  14. package/dist/components/dialogs/InterProScanDialog.js +52 -129
  15. package/dist/components/dialogs/InterProScanDialog.js.map +1 -1
  16. package/dist/components/header/settingsMenuItems.js +15 -0
  17. package/dist/components/header/settingsMenuItems.js.map +1 -1
  18. package/dist/components/minimap/Minimap.js +32 -4
  19. package/dist/components/minimap/Minimap.js.map +1 -1
  20. package/dist/components/msa/MSACanvas.js +8 -2
  21. package/dist/components/msa/MSACanvas.js.map +1 -1
  22. package/dist/components/msa/MSACanvasBlock.js +12 -3
  23. package/dist/components/msa/MSACanvasBlock.js.map +1 -1
  24. package/dist/components/msa/msaRaster.d.ts +63 -0
  25. package/dist/components/msa/msaRaster.js +252 -0
  26. package/dist/components/msa/msaRaster.js.map +1 -0
  27. package/dist/components/msa/renderMSABlock.d.ts +2 -1
  28. package/dist/components/msa/renderMSABlock.js +13 -21
  29. package/dist/components/msa/renderMSABlock.js.map +1 -1
  30. package/dist/components/msa/tileColor.d.ts +6 -0
  31. package/dist/components/msa/tileColor.js +35 -0
  32. package/dist/components/msa/tileColor.js.map +1 -0
  33. package/dist/components/renderCtx.d.ts +1 -1
  34. package/dist/components/tracks/TrackBlocks.d.ts +14 -0
  35. package/dist/components/tracks/TrackBlocks.js +65 -0
  36. package/dist/components/tracks/TrackBlocks.js.map +1 -0
  37. package/dist/components/tracks/{renderTracksSvg.d.ts → drawTracks.d.ts} +22 -10
  38. package/dist/components/tracks/drawTracks.js +193 -0
  39. package/dist/components/tracks/drawTracks.js.map +1 -0
  40. package/dist/components/tree/TreeCanvas.js +8 -2
  41. package/dist/components/tree/TreeCanvas.js.map +1 -1
  42. package/dist/components/tree/TreeCanvasBlock.js +7 -4
  43. package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
  44. package/dist/components/tree/renderTreeCanvas.js +5 -2
  45. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  46. package/dist/constants.d.ts +3 -0
  47. package/dist/constants.js +8 -0
  48. package/dist/constants.js.map +1 -1
  49. package/dist/model/DataModel.d.ts +1 -4
  50. package/dist/model/DataModel.js +8 -10
  51. package/dist/model/DataModel.js.map +1 -1
  52. package/dist/model.d.ts +36 -7
  53. package/dist/model.js +113 -58
  54. package/dist/model.js.map +1 -1
  55. package/dist/neighborJoining.js +34 -18
  56. package/dist/neighborJoining.js.map +1 -1
  57. package/dist/renderTestEnv.d.ts +43 -0
  58. package/dist/renderTestEnv.js +88 -0
  59. package/dist/renderTestEnv.js.map +1 -0
  60. package/dist/renderToSvg.js +1 -1
  61. package/dist/renderToSvg.js.map +1 -1
  62. package/dist/sequenceLogo.d.ts +28 -0
  63. package/dist/sequenceLogo.js +47 -0
  64. package/dist/sequenceLogo.js.map +1 -0
  65. package/dist/types.d.ts +2 -0
  66. package/dist/version.d.ts +1 -1
  67. package/dist/version.js +1 -1
  68. package/package.json +3 -3
  69. package/src/columnCounts.test.ts +15 -0
  70. package/src/columnCounts.ts +19 -0
  71. package/src/components/DragHandle.tsx +81 -0
  72. package/src/components/ResizeHandles.tsx +46 -54
  73. package/src/components/VerticalScrollbar.tsx +3 -2
  74. package/src/components/dialogs/InterProScanDialog.tsx +54 -131
  75. package/src/components/header/settingsMenuItems.ts +18 -0
  76. package/src/components/minimap/Minimap.tsx +47 -4
  77. package/src/components/msa/MSACanvas.tsx +30 -10
  78. package/src/components/msa/MSACanvasBlock.tsx +13 -3
  79. package/src/components/msa/msaRaster.test.ts +145 -0
  80. package/src/components/msa/msaRaster.ts +350 -0
  81. package/src/components/msa/renderMSABlock.ts +15 -20
  82. package/src/components/msa/tileColor.ts +37 -0
  83. package/src/components/renderCtx.ts +2 -0
  84. package/src/components/tracks/TrackBlocks.tsx +111 -0
  85. package/src/components/tracks/drawTracks.ts +323 -0
  86. package/src/components/tree/TreeCanvas.tsx +16 -4
  87. package/src/components/tree/TreeCanvasBlock.tsx +18 -11
  88. package/src/components/tree/renderTreeCanvas.ts +5 -1
  89. package/src/constants.ts +10 -0
  90. package/src/impgRender.test.tsx +2 -57
  91. package/src/largeTree.test.ts +16 -2
  92. package/src/model/DataModel.ts +11 -11
  93. package/src/model.ts +128 -60
  94. package/src/neighborJoining.ts +36 -18
  95. package/src/renderDomainsSvg.test.tsx +2 -57
  96. package/src/renderMinimapSvg.test.tsx +2 -56
  97. package/src/renderSequenceLogoSvg.test.tsx +176 -0
  98. package/src/renderTestEnv.ts +96 -0
  99. package/src/renderToSvg.tsx +1 -1
  100. package/src/sequenceLogo.test.ts +88 -0
  101. package/src/sequenceLogo.ts +63 -0
  102. package/src/types.ts +7 -1
  103. package/src/version.ts +1 -1
  104. package/dist/components/ConservationTrack.d.ts +0 -8
  105. package/dist/components/ConservationTrack.js +0 -49
  106. package/dist/components/ConservationTrack.js.map +0 -1
  107. package/dist/components/ScrollbarThumb.d.ts +0 -14
  108. package/dist/components/ScrollbarThumb.js +0 -28
  109. package/dist/components/ScrollbarThumb.js.map +0 -1
  110. package/dist/components/TextTrack.d.ts +0 -8
  111. package/dist/components/TextTrack.js +0 -58
  112. package/dist/components/TextTrack.js.map +0 -1
  113. package/dist/components/tracks/renderTracksSvg.js +0 -126
  114. package/dist/components/tracks/renderTracksSvg.js.map +0 -1
  115. package/src/components/ConservationTrack.tsx +0 -99
  116. package/src/components/ScrollbarThumb.tsx +0 -48
  117. package/src/components/TextTrack.tsx +0 -103
  118. package/src/components/tracks/renderTracksSvg.ts +0 -247
@@ -4,7 +4,7 @@ import { useWheelScroll } from '../../useWheelScroll.js';
4
4
  import Loading from './Loading.js';
5
5
  import MSACanvasBlock from './MSACanvasBlock.js';
6
6
  const MSACanvas = observer(function ({ model }) {
7
- const { MSA, msaFilehandle, height, msaCanvasWidth, blocks2d, scrollZoom } = model;
7
+ const { MSA, msaFilehandle, height, msaCanvasWidth, blocks2d, scrollZoom, scrollX, scrollY, } = model;
8
8
  const ref = useRef(null);
9
9
  const onScrollX = useCallback((d) => {
10
10
  model.doScrollX(d);
@@ -29,7 +29,13 @@ const MSACanvas = observer(function ({ model }) {
29
29
  height,
30
30
  width: msaCanvasWidth,
31
31
  overflow: 'hidden',
32
- } }, !MSA && !msaFilehandle ? null : MSA ? (blocks2d.map(([bx, by]) => (React.createElement(MSACanvasBlock, { key: `${bx}_${by}`, model: model, offsetX: bx, offsetY: by })))) : (React.createElement(Loading, null))));
32
+ } }, !MSA && !msaFilehandle ? null : MSA ? (React.createElement("div", { style: {
33
+ position: 'absolute',
34
+ top: 0,
35
+ left: 0,
36
+ transform: `translate(${scrollX}px, ${scrollY}px)`,
37
+ willChange: 'transform',
38
+ } }, blocks2d.map(([bx, by]) => (React.createElement(MSACanvasBlock, { key: `${bx}_${by}`, model: model, offsetX: bx, offsetY: by }))))) : (React.createElement(Loading, null))));
33
39
  });
34
40
  export default MSACanvas;
35
41
  //# sourceMappingURL=MSACanvas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSACanvas.js","sourceRoot":"","sources":["../../../src/components/msa/MSACanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,OAAO,MAAM,cAAe,CAAA;AACnC,OAAO,cAAc,MAAM,qBAAsB,CAAA;AAIjD,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACrE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,GACxE,KAAK,CAAA;IACP,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxC,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,CAAS,EAAE,EAAE;QACZ,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,CAAS,EAAE,EAAE;QACZ,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,WAAmB,EAAE,OAAe,EAAE,OAAe,EAAE,EAAE;QACxD,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC;QAChD,GAAG;QACH,SAAS;QACT,SAAS;QACT,MAAM;QACN,UAAU;KACX,CAAC,CAAA;IAEF,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,iBAKI,YAAY,EACxB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,KAAK,CAAC,EAAE;YACpB,KAAK,CAAC,cAAc,EAAE,CAAA;QACxB,CAAC,EACD,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,MAAM;YACN,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,QAAQ;SACnB,IAEA,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CACrC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CACzB,oBAAC,cAAc,IACb,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,EAAE,EACX,OAAO,EAAE,EAAE,GACX,CACH,CAAC,CACH,CAAC,CAAC,CAAC,CACF,oBAAC,OAAO,OAAG,CACZ,CACG,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"MSACanvas.js","sourceRoot":"","sources":["../../../src/components/msa/MSACanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,OAAO,MAAM,cAAe,CAAA;AACnC,OAAO,cAAc,MAAM,qBAAsB,CAAA;AAIjD,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACrE,MAAM,EACJ,GAAG,EACH,aAAa,EACb,MAAM,EACN,cAAc,EACd,QAAQ,EACR,UAAU,EACV,OAAO,EACP,OAAO,GACR,GAAG,KAAK,CAAA;IACT,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxC,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,CAAS,EAAE,EAAE;QACZ,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,CAAS,EAAE,EAAE;QACZ,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,WAAmB,EAAE,OAAe,EAAE,OAAe,EAAE,EAAE;QACxD,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC;QAChD,GAAG;QACH,SAAS;QACT,SAAS;QACT,MAAM;QACN,UAAU;KACX,CAAC,CAAA;IAEF,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,iBAKI,YAAY,EACxB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,KAAK,CAAC,EAAE;YACpB,KAAK,CAAC,cAAc,EAAE,CAAA;QACxB,CAAC,EACD,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,MAAM;YACN,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,QAAQ;SACnB,IAEA,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAGrC,6BACE,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,SAAS,EAAE,aAAa,OAAO,OAAO,OAAO,KAAK;YAClD,UAAU,EAAE,WAAW;SACxB,IAEA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1B,oBAAC,cAAc,IACb,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,EAAE,EACX,OAAO,EAAE,EAAE,GACX,CACH,CAAC,CACE,CACP,CAAC,CAAC,CAAC,CACF,oBAAC,OAAO,OAAG,CACZ,CACG,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
@@ -4,11 +4,12 @@ import { observer } from 'mobx-react';
4
4
  import { useCanvasAutorun } from '../../useCanvasAutorun.js';
5
5
  import { useColorContrast } from '../../useColorContrast.js';
6
6
  import ColumnStats from './ColumnStats.js';
7
+ import { drawMsaRaster, rasterSupported } from './msaRaster.js';
7
8
  import { renderBoxFeatureCanvasBlock } from './renderBoxFeatureCanvasBlock.js';
8
9
  import { renderMSABlock } from './renderMSABlock.js';
9
10
  import { useMsaBlockMouse } from './useMsaBlockMouse.js';
10
11
  const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
11
- const { scrollY, scrollX, colorScheme, blockSize, highResScaleFactor } = model;
12
+ const { colorScheme, blockSize, highResScaleFactor } = model;
12
13
  const { theme, contrastScheme } = useColorContrast(colorScheme);
13
14
  const { tooltipPoint, onMouseMove, onClick, onMouseLeave } = useMsaBlockMouse({
14
15
  model,
@@ -26,6 +27,13 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
26
27
  offsetY,
27
28
  model,
28
29
  });
30
+ // the alignment background comes from zoom-independent raster tiles; the
31
+ // domain overlay paints its own boxes instead, and letter-color mode has
32
+ // no background to paint
33
+ const rasterTiles = !model.actuallyShowDomains && model.bgColor && rasterSupported();
34
+ if (rasterTiles) {
35
+ drawMsaRaster({ ctx, model, theme, offsetX, offsetY });
36
+ }
29
37
  renderMSABlock({
30
38
  ctx,
31
39
  theme,
@@ -33,6 +41,7 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
33
41
  offsetY,
34
42
  contrastScheme,
35
43
  model,
44
+ rasterTiles,
36
45
  });
37
46
  },
38
47
  width: canvasSize,
@@ -53,8 +62,8 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
53
62
  onMouseLeave();
54
63
  }, width: canvasSize, height: canvasSize, style: {
55
64
  position: 'absolute',
56
- top: scrollY + offsetY,
57
- left: scrollX + offsetX,
65
+ top: offsetY,
66
+ left: offsetX,
58
67
  width: blockSize,
59
68
  height: blockSize,
60
69
  } }),
@@ -1 +1 @@
1
- {"version":3,"file":"MSACanvasBlock.js","sourceRoot":"","sources":["../../../src/components/msa/MSACanvasBlock.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MSACanvasBlock.js","sourceRoot":"","sources":["../../../src/components/msa/MSACanvasBlock.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { MsaViewModel } from '../../model.ts';
2
+ import type { Theme } from '@mui/material';
3
+ export declare const rasterTileSize = 512;
4
+ type RasterCanvas = HTMLCanvasElement | OffscreenCanvas;
5
+ export interface RasterSpec {
6
+ rowNames: string[];
7
+ columns: Map<string, string>;
8
+ relativeTo: string | undefined;
9
+ colorAt: (col: number, letter: string) => string | undefined;
10
+ bg: string;
11
+ hover: string;
12
+ }
13
+ /**
14
+ * CSS color string -> the packed pixel an ImageData holds for it. Painting a 1x1
15
+ * canvas and reading it back handles every form a color scheme can produce --
16
+ * hex, rgb(), hsl(), named -- without a parser of our own, and the cache means
17
+ * each distinct color is resolved once per session rather than once per cell.
18
+ */
19
+ export declare function cssColorToPixel(css: string): number;
20
+ /**
21
+ * Packs a rectangle of the alignment into one pixel per cell, in `rowNames`
22
+ * order, ready to hand to putImageData. Cells past the end of a row, and rows
23
+ * with no sequence at all, stay transparent -- what the per-cell tile painter
24
+ * also leaves behind.
25
+ *
26
+ * `colStep`/`rowStep` sample instead of covering, which is how the minimap fits
27
+ * a whole alignment into a 12px bar.
28
+ */
29
+ export declare function rasterPixels({ spec, col0, row0, width, height, colStep, rowStep, toPixel, }: {
30
+ spec: RasterSpec;
31
+ col0: number;
32
+ row0: number;
33
+ width: number;
34
+ height: number;
35
+ colStep?: number;
36
+ rowStep?: number;
37
+ toPixel?: (css: string) => number;
38
+ }): Uint32Array<ArrayBuffer>;
39
+ export declare function rasterSupported(): boolean;
40
+ /**
41
+ * Paints the alignment background of one MSA block from cached
42
+ * one-pixel-per-cell tiles. The tiles do not depend on the zoom level, so a zoom
43
+ * frame costs a handful of drawImage calls instead of a fillRect per visible
44
+ * cell -- which ran to 885ms per block at the minimum column width.
45
+ */
46
+ export declare function drawMsaRaster({ ctx, model, theme, offsetX, offsetY, }: {
47
+ ctx: CanvasRenderingContext2D;
48
+ model: MsaViewModel;
49
+ theme: Theme;
50
+ offsetX: number;
51
+ offsetY: number;
52
+ }): void;
53
+ /**
54
+ * The whole alignment sampled down to a strip small enough to sit behind the
55
+ * minimap thumb, cached alongside the block tiles because it goes stale under
56
+ * exactly the same conditions.
57
+ */
58
+ export declare function msaThumbnail({ model, theme, height, }: {
59
+ model: MsaViewModel;
60
+ theme: Theme;
61
+ height: number;
62
+ }): RasterCanvas | undefined;
63
+ export {};
@@ -0,0 +1,252 @@
1
+ import { tileColorFn, tileColorTable } from './tileColor.js';
2
+ // One raster tile holds this many cells on a side. A tile costs ~10ms to build
3
+ // and ~1MB to hold, and is then drawn at any zoom for ~1ms, so the cache only
4
+ // has to be large enough to cover a screen without thrashing.
5
+ export const rasterTileSize = 512;
6
+ const maxCachedTiles = 64;
7
+ const maxThumbnailColumns = 2000;
8
+ const maxColorCacheEntries = 4096;
9
+ const littleEndian = new Uint8Array(new Uint32Array([1]).buffer)[0] === 1;
10
+ function packRgba(r, g, b, a) {
11
+ return littleEndian
12
+ ? ((a << 24) | (b << 16) | (g << 8) | r) >>> 0
13
+ : ((r << 24) | (g << 16) | (b << 8) | a) >>> 0;
14
+ }
15
+ let scratch;
16
+ const colorCache = new Map();
17
+ /**
18
+ * CSS color string -> the packed pixel an ImageData holds for it. Painting a 1x1
19
+ * canvas and reading it back handles every form a color scheme can produce --
20
+ * hex, rgb(), hsl(), named -- without a parser of our own, and the cache means
21
+ * each distinct color is resolved once per session rather than once per cell.
22
+ */
23
+ export function cssColorToPixel(css) {
24
+ const hit = colorCache.get(css);
25
+ if (hit !== undefined) {
26
+ return hit;
27
+ }
28
+ if (scratch === undefined) {
29
+ scratch = makeRasterCanvas(1, 1)?.ctx ?? null;
30
+ }
31
+ let packed = 0;
32
+ if (scratch) {
33
+ scratch.clearRect(0, 0, 1, 1);
34
+ scratch.fillStyle = css;
35
+ scratch.fillRect(0, 0, 1, 1);
36
+ const [r = 0, g = 0, b = 0, a = 0] = scratch.getImageData(0, 0, 1, 1).data;
37
+ packed = packRgba(r, g, b, a);
38
+ }
39
+ if (colorCache.size >= maxColorCacheEntries) {
40
+ colorCache.clear();
41
+ }
42
+ colorCache.set(css, packed);
43
+ return packed;
44
+ }
45
+ /**
46
+ * Packs a rectangle of the alignment into one pixel per cell, in `rowNames`
47
+ * order, ready to hand to putImageData. Cells past the end of a row, and rows
48
+ * with no sequence at all, stay transparent -- what the per-cell tile painter
49
+ * also leaves behind.
50
+ *
51
+ * `colStep`/`rowStep` sample instead of covering, which is how the minimap fits
52
+ * a whole alignment into a 12px bar.
53
+ */
54
+ export function rasterPixels({ spec, col0, row0, width, height, colStep = 1, rowStep = 1, toPixel = cssColorToPixel, }) {
55
+ const { rowNames, columns, relativeTo, colorAt, bg, hover } = spec;
56
+ const out = new Uint32Array(width * height);
57
+ const bgPixel = toPixel(bg);
58
+ const hoverPixel = toPixel(hover);
59
+ const reference = relativeTo ? columns.get(relativeTo) : undefined;
60
+ for (let r = 0; r < height; r++) {
61
+ const name = rowNames[row0 + r * rowStep];
62
+ if (name === undefined) {
63
+ break;
64
+ }
65
+ const str = columns.get(name);
66
+ if (!str) {
67
+ continue;
68
+ }
69
+ const isReference = name === relativeTo;
70
+ const base = r * width;
71
+ for (let c = 0; c < width; c++) {
72
+ const col = col0 + c * colStep;
73
+ const letter = str[col];
74
+ if (letter === undefined) {
75
+ break;
76
+ }
77
+ if (reference && !isReference && letter === reference[col]) {
78
+ out[base + c] = hoverPixel;
79
+ }
80
+ else {
81
+ const color = colorAt(col, letter);
82
+ out[base + c] = color === undefined ? bgPixel : toPixel(color);
83
+ }
84
+ }
85
+ }
86
+ return out;
87
+ }
88
+ 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 }
94
+ : 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 }
105
+ : undefined;
106
+ }
107
+ function paint(pixels, width, height) {
108
+ const made = makeRasterCanvas(width, height);
109
+ if (!made) {
110
+ return undefined;
111
+ }
112
+ const image = made.ctx.createImageData(width, height);
113
+ new Uint32Array(image.data.buffer).set(pixels);
114
+ made.ctx.putImageData(image, 0, 0);
115
+ return made.canvas;
116
+ }
117
+ let supported;
118
+ // jsdom, and any browser without a 2d context, has no raster to draw; the
119
+ // per-cell painter in renderMSABlock stays the fallback
120
+ export function rasterSupported() {
121
+ supported ??= !!makeRasterCanvas(1, 1);
122
+ return supported;
123
+ }
124
+ const caches = new WeakMap();
125
+ // Everything a cell's color depends on. A change to any of them makes every
126
+ // cached tile stale, which a fresh cache expresses without tracking which.
127
+ function rasterKeys(model, theme) {
128
+ return [
129
+ model.columns,
130
+ model.leaves,
131
+ model.colorSchemeName,
132
+ tileColorTable(model),
133
+ model.relativeTo,
134
+ theme.palette.action.hover,
135
+ theme.palette.background.default,
136
+ ];
137
+ }
138
+ function getCache(model, theme) {
139
+ const keys = rasterKeys(model, theme);
140
+ const prev = caches.get(model);
141
+ if (prev && keys.every((key, i) => key === prev.keys[i])) {
142
+ return prev;
143
+ }
144
+ const next = {
145
+ keys,
146
+ spec: {
147
+ rowNames: model.leaves.map(node => node.data.name),
148
+ columns: model.columns,
149
+ relativeTo: model.relativeTo,
150
+ colorAt: tileColorFn(model),
151
+ bg: theme.palette.background.default,
152
+ hover: theme.palette.action.hover,
153
+ },
154
+ numColumns: model.numColumns,
155
+ numRows: model.numRows,
156
+ tiles: new Map(),
157
+ };
158
+ caches.set(model, next);
159
+ return next;
160
+ }
161
+ function getTile(cache, tileRow, tileCol) {
162
+ const key = `${tileRow}_${tileCol}`;
163
+ const hit = cache.tiles.get(key);
164
+ if (hit) {
165
+ // re-inserting makes this the newest entry: a Map iterates in insertion
166
+ // order, so its first key is the least recently used one
167
+ cache.tiles.delete(key);
168
+ cache.tiles.set(key, hit);
169
+ return hit;
170
+ }
171
+ const col0 = tileCol * rasterTileSize;
172
+ const row0 = tileRow * rasterTileSize;
173
+ const width = Math.min(rasterTileSize, cache.numColumns - col0);
174
+ const height = Math.min(rasterTileSize, cache.numRows - row0);
175
+ if (width <= 0 || height <= 0) {
176
+ return undefined;
177
+ }
178
+ const canvas = paint(rasterPixels({ spec: cache.spec, col0, row0, width, height }), width, height);
179
+ if (!canvas) {
180
+ return undefined;
181
+ }
182
+ cache.tiles.set(key, canvas);
183
+ for (const stale of cache.tiles.keys()) {
184
+ if (cache.tiles.size <= maxCachedTiles) {
185
+ break;
186
+ }
187
+ cache.tiles.delete(stale);
188
+ }
189
+ return canvas;
190
+ }
191
+ /**
192
+ * Paints the alignment background of one MSA block from cached
193
+ * one-pixel-per-cell tiles. The tiles do not depend on the zoom level, so a zoom
194
+ * frame costs a handful of drawImage calls instead of a fillRect per visible
195
+ * cell -- which ran to 885ms per block at the minimum column width.
196
+ */
197
+ export function drawMsaRaster({ ctx, model, theme, offsetX, offsetY, }) {
198
+ const { colWidth, rowHeight, blockSize, highResScaleFactor } = model;
199
+ const cache = getCache(model, theme);
200
+ ctx.resetTransform();
201
+ ctx.scale(highResScaleFactor, highResScaleFactor);
202
+ ctx.translate(-offsetX, -offsetY);
203
+ // below a pixel per cell a tile carries more cells than the block has room
204
+ // for, so let the browser downsample it rather than letting whichever cell
205
+ // landed last win
206
+ ctx.imageSmoothingEnabled = colWidth < 1 || rowHeight < 1;
207
+ const tileWidth = rasterTileSize * colWidth;
208
+ const tileHeight = rasterTileSize * rowHeight;
209
+ const firstCol = Math.max(0, Math.floor(offsetX / tileWidth));
210
+ const lastCol = Math.floor((offsetX + blockSize) / tileWidth);
211
+ const firstRow = Math.max(0, Math.floor(offsetY / tileHeight));
212
+ const lastRow = Math.floor((offsetY + blockSize) / tileHeight);
213
+ for (let tileRow = firstRow; tileRow <= lastRow; tileRow++) {
214
+ for (let tileCol = firstCol; tileCol <= lastCol; tileCol++) {
215
+ const tile = getTile(cache, tileRow, tileCol);
216
+ if (tile) {
217
+ ctx.drawImage(tile, 0, 0, tile.width, tile.height, tileCol * tileWidth, tileRow * tileHeight, tile.width * colWidth, tile.height * rowHeight);
218
+ }
219
+ }
220
+ }
221
+ ctx.resetTransform();
222
+ ctx.imageSmoothingEnabled = true;
223
+ }
224
+ /**
225
+ * The whole alignment sampled down to a strip small enough to sit behind the
226
+ * minimap thumb, cached alongside the block tiles because it goes stale under
227
+ * exactly the same conditions.
228
+ */
229
+ export function msaThumbnail({ model, theme, height, }) {
230
+ const cache = getCache(model, theme);
231
+ const { numColumns, numRows } = cache;
232
+ if (numColumns <= 0 || numRows <= 0) {
233
+ return undefined;
234
+ }
235
+ if (!cache.thumbnail) {
236
+ const colStep = Math.max(1, Math.ceil(numColumns / maxThumbnailColumns));
237
+ const rowStep = Math.max(1, Math.ceil(numRows / height));
238
+ const w = Math.ceil(numColumns / colStep);
239
+ const h = Math.ceil(numRows / rowStep);
240
+ cache.thumbnail = paint(rasterPixels({
241
+ spec: cache.spec,
242
+ col0: 0,
243
+ row0: 0,
244
+ width: w,
245
+ height: h,
246
+ colStep,
247
+ rowStep,
248
+ }), w, h);
249
+ }
250
+ return cache.thumbnail;
251
+ }
252
+ //# sourceMappingURL=msaRaster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msaRaster.js","sourceRoot":"","sources":["../../../src/components/msa/msaRaster.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { MsaViewModel } from '../../model.ts';
2
2
  import type { RenderCtx } from '../renderCtx.ts';
3
3
  import type { Theme } from '@mui/material';
4
- export declare function renderMSABlock({ model, offsetX, offsetY, contrastScheme, ctx, theme, highResScaleFactorOverride, blockSizeXOverride, blockSizeYOverride, }: {
4
+ export declare function renderMSABlock({ model, offsetX, offsetY, contrastScheme, ctx, theme, highResScaleFactorOverride, blockSizeXOverride, blockSizeYOverride, rasterTiles, }: {
5
5
  offsetX: number;
6
6
  offsetY: number;
7
7
  theme: Theme;
@@ -11,4 +11,5 @@ export declare function renderMSABlock({ model, offsetX, offsetY, contrastScheme
11
11
  highResScaleFactorOverride?: number;
12
12
  blockSizeXOverride?: number;
13
13
  blockSizeYOverride?: number;
14
+ rasterTiles?: boolean;
14
15
  }): void;
@@ -2,8 +2,9 @@ import { setFontSize } from '../../setFontSize.js';
2
2
  import { adjustColorForContrast } from '../../util.js';
3
3
  import { getVisibleLeaves } from '../getVisibleLeaves.js';
4
4
  import { domainBandCursor } from './domainBandCursor.js';
5
+ import { tileColorFn } from './tileColor.js';
5
6
  import { visibleColRange } from './visibleColRange.js';
6
- export function renderMSABlock({ model, offsetX, offsetY, contrastScheme, ctx, theme, highResScaleFactorOverride, blockSizeXOverride, blockSizeYOverride, }) {
7
+ export function renderMSABlock({ model, offsetX, offsetY, contrastScheme, ctx, theme, highResScaleFactorOverride, blockSizeXOverride, blockSizeYOverride, rasterTiles, }) {
7
8
  const { colWidth, blockSize, rowHeight, fontSize, highResScaleFactor, actuallyShowDomains, bgColor, } = model;
8
9
  const k = highResScaleFactorOverride ?? highResScaleFactor;
9
10
  const bx = blockSizeXOverride ?? blockSize;
@@ -36,6 +37,9 @@ export function renderMSABlock({ model, offsetX, offsetY, contrastScheme, ctx, t
36
37
  // when domains are shown the background tiles come from
37
38
  // renderBoxFeatureCanvasBlock, so only the letters are drawn here
38
39
  drawTiles: !actuallyShowDomains,
40
+ // ...and when the caller has already laid the raster down, the tiles are
41
+ // there but nothing here has to paint them
42
+ rasterTiles,
39
43
  });
40
44
  drawInsertionIndicators({
41
45
  model,
@@ -46,22 +50,6 @@ export function renderMSABlock({ model, offsetX, offsetY, contrastScheme, ctx, t
46
50
  });
47
51
  ctx.resetTransform();
48
52
  }
49
- // Per-cell tile color for the active scheme. The scheme is fixed for the whole
50
- // block, so resolve which rule applies once rather than re-testing the scheme
51
- // name inside the innermost loop.
52
- function tileColorFn(model) {
53
- const { colorSchemeName, colorScheme, colClustalX, colConsensus } = model;
54
- if (colorSchemeName === 'clustalx_protein_dynamic') {
55
- return (col, letter) => colClustalX[col][letter];
56
- }
57
- if (colorSchemeName === 'percent_identity_dynamic') {
58
- return (col, letter) => {
59
- const consensus = colConsensus[col];
60
- return letter === consensus.letter ? consensus.color : undefined;
61
- };
62
- }
63
- return (_col, letter) => colorScheme[letter];
64
- }
65
53
  // Letter color to use over a domain box, keyed by accession. Domain fills come
66
54
  // from a categorical palette that has no fixed lightness, so ask the theme for a
67
55
  // readable text color per fill instead of assuming dark-on-light.
@@ -71,10 +59,14 @@ function domainLetterColors(model, theme) {
71
59
  theme.palette.getContrastText(fill),
72
60
  ]));
73
61
  }
74
- function drawTilesAndText({ model, ctx, theme, contrastScheme, visibleLeaves, xStart, xEnd, referenceSeq, drawTiles, }) {
62
+ function drawTilesAndText({ model, ctx, theme, contrastScheme, visibleLeaves, xStart, xEnd, referenceSeq, drawTiles, rasterTiles, }) {
75
63
  const { bgColor, columns, colWidth, rowHeight, relativeTo, showMsaLetters, subFeatureRows, domainBandsByStart, } = model;
76
64
  const tiles = drawTiles && bgColor;
77
- if (tiles || showMsaLetters) {
65
+ const paintTiles = tiles && !rasterTiles;
66
+ if (paintTiles || showMsaLetters) {
67
+ // over raster tiles the letters take their color from contrastScheme, so
68
+ // the scheme lookup per cell is pure waste
69
+ const needsColor = paintTiles || !tiles;
78
70
  const tileColor = tileColorFn(model);
79
71
  const offsetXAligned = xStart * colWidth;
80
72
  const halfColWidth = colWidth / 2;
@@ -101,8 +93,8 @@ function drawTilesAndText({ model, ctx, theme, contrastScheme, visibleLeaves, xS
101
93
  const letter = str[j];
102
94
  const x = j * colWidth + offsetXAligned;
103
95
  const isMatchingReference = referenceSeq && name !== relativeTo && letter === referenceSeq[j];
104
- const color = tileColor(col, letter);
105
- if (tiles) {
96
+ const color = needsColor ? tileColor(col, letter) : undefined;
97
+ if (paintTiles) {
106
98
  ctx.fillStyle = isMatchingReference
107
99
  ? theme.palette.action.hover
108
100
  : color || theme.palette.background.default;
@@ -1 +1 @@
1
- {"version":3,"file":"renderMSABlock.js","sourceRoot":"","sources":["../../../src/components/msa/renderMSABlock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderMSABlock.js","sourceRoot":"","sources":["../../../src/components/msa/renderMSABlock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { MsaViewModel } from '../../model.ts';
2
+ export declare function tileColorFn(model: MsaViewModel): (col: number, letter: string) => string | undefined;
3
+ export declare function tileColorTable(model: MsaViewModel): Record<string, string>[] | {
4
+ letter: string;
5
+ color: string | undefined;
6
+ }[] | Record<string, string>;
@@ -0,0 +1,35 @@
1
+ // Per-cell tile color for the active scheme. The scheme is fixed for the whole
2
+ // block, so resolve which rule applies once rather than re-testing the scheme
3
+ // name inside the innermost loop. Reading only the column table the active
4
+ // scheme needs also keeps the other one -- a per-column map for every column of
5
+ // the alignment -- from being computed at all.
6
+ export function tileColorFn(model) {
7
+ const { colorSchemeName } = model;
8
+ if (colorSchemeName === 'clustalx_protein_dynamic') {
9
+ const { colClustalX } = model;
10
+ return (col, letter) => colClustalX[col][letter];
11
+ }
12
+ if (colorSchemeName === 'percent_identity_dynamic') {
13
+ const { colConsensus } = model;
14
+ return (col, letter) => {
15
+ const consensus = colConsensus[col];
16
+ return letter === consensus.letter ? consensus.color : undefined;
17
+ };
18
+ }
19
+ const { colorScheme } = model;
20
+ return (_col, letter) => colorScheme[letter];
21
+ }
22
+ // The column table the active scheme colors from, or undefined for the static
23
+ // schemes. Identity of this plus the scheme name is what a cache of rendered
24
+ // colors has to key on.
25
+ export function tileColorTable(model) {
26
+ const { colorSchemeName } = model;
27
+ if (colorSchemeName === 'clustalx_protein_dynamic') {
28
+ return model.colClustalX;
29
+ }
30
+ if (colorSchemeName === 'percent_identity_dynamic') {
31
+ return model.colConsensus;
32
+ }
33
+ return model.colorScheme;
34
+ }
35
+ //# sourceMappingURL=tileColor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tileColor.js","sourceRoot":"","sources":["../../../src/components/msa/tileColor.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,8EAA8E;AAC9E,2EAA2E;AAC3E,gFAAgF;AAChF,+CAA+C;AAC/C,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IACjC,IAAI,eAAe,KAAK,0BAA0B,EAAE,CAAC;QACnD,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;QAC7B,OAAO,CAAC,GAAW,EAAE,MAAc,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAE,CAAC,MAAM,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,eAAe,KAAK,0BAA0B,EAAE,CAAC;QACnD,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAA;QAC9B,OAAO,CAAC,GAAW,EAAE,MAAc,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAE,CAAA;YACpC,OAAO,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QAClE,CAAC,CAAA;IACH,CAAC;IACD,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAC7B,OAAO,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;AAC9D,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,wBAAwB;AACxB,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IACjC,IAAI,eAAe,KAAK,0BAA0B,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC,WAAW,CAAA;IAC1B,CAAC;IACD,IAAI,eAAe,KAAK,0BAA0B,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC,YAAY,CAAA;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,CAAA;AAC1B,CAAC"}
@@ -4,4 +4,4 @@
4
4
  * SVG export) satisfy this, so renderers can be typed against it without an
5
5
  * `as any` cast at the SVG-export boundary.
6
6
  */
7
- export type RenderCtx = Pick<CanvasRenderingContext2D, 'arc' | 'beginPath' | 'clearRect' | 'closePath' | 'fill' | 'fillRect' | 'fillStyle' | 'fillText' | 'font' | 'lineTo' | 'lineWidth' | 'measureText' | 'moveTo' | 'resetTransform' | 'scale' | 'setLineDash' | 'stroke' | 'strokeRect' | 'strokeStyle' | 'textAlign' | 'textBaseline' | 'translate'>;
7
+ export type RenderCtx = Pick<CanvasRenderingContext2D, 'arc' | 'beginPath' | 'clearRect' | 'closePath' | 'fill' | 'fillRect' | 'fillStyle' | 'fillText' | 'font' | 'lineTo' | 'lineWidth' | 'measureText' | 'moveTo' | 'resetTransform' | 'restore' | 'save' | 'scale' | 'setLineDash' | 'stroke' | 'strokeRect' | 'strokeStyle' | 'textAlign' | 'textBaseline' | 'translate'>;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import type { MsaViewModel } from '../../model.ts';
3
+ import type { BasicTrack } from '../../types.ts';
4
+ /**
5
+ * The canvas blocks covering one track's row of the alignment. Every track kind
6
+ * shares this host: what differs between conservation, sequence logo and the
7
+ * Stockholm text tracks is which draw function `drawTrackBlock` dispatches to,
8
+ * not how the blocks are laid out or kept in sync with the horizontal scroll.
9
+ */
10
+ declare const TrackBlocks: ({ model, track, }: {
11
+ model: MsaViewModel;
12
+ track: BasicTrack;
13
+ }) => React.JSX.Element | null;
14
+ export default TrackBlocks;