@jbrowse/core 3.2.0 → 3.4.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 (56) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +2 -1
  2. package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +4 -4
  3. package/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +2 -1
  4. package/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +10 -9
  5. package/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +3 -13
  6. package/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +2 -1
  7. package/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +2 -1
  8. package/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +2 -2
  9. package/BaseFeatureWidget/BaseFeatureDetail/index.js +2 -2
  10. package/BaseFeatureWidget/stateModelFactory.d.ts +15 -10
  11. package/BaseFeatureWidget/stateModelFactory.js +7 -12
  12. package/BaseFeatureWidget/types.d.ts +9 -1
  13. package/BaseFeatureWidget/util.d.ts +4 -1
  14. package/BaseFeatureWidget/util.js +11 -0
  15. package/PluginManager.d.ts +1 -143
  16. package/PluginManager.js +3 -2
  17. package/ReExports/BaseFeatureDetails.d.ts +1 -0
  18. package/ReExports/BaseFeatureDetails.js +45 -0
  19. package/ReExports/MuiDataGridReExports.d.ts +2 -0
  20. package/ReExports/MuiDataGridReExports.js +167 -0
  21. package/ReExports/MuiReExports.d.ts +133 -0
  22. package/ReExports/MuiReExports.js +150 -0
  23. package/ReExports/lazify.d.ts +2 -0
  24. package/ReExports/lazify.js +14 -0
  25. package/ReExports/list.js +1 -0
  26. package/ReExports/modules.d.ts +1 -173
  27. package/ReExports/modules.js +36 -329
  28. package/TextSearch/TextSearchManager.d.ts +17 -2
  29. package/TextSearch/TextSearchManager.js +23 -3
  30. package/assemblyManager/assemblyManager.js +1 -1
  31. package/data_adapters/BaseAdapter/BaseAdapter.d.ts +2 -2
  32. package/data_adapters/BaseAdapter/BaseAdapter.js +1 -0
  33. package/data_adapters/CytobandAdapter/CytobandAdapter.d.ts +0 -1
  34. package/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  35. package/package.json +10 -9
  36. package/pluggableElementTypes/models/baseTrackConfig.js +25 -8
  37. package/pluggableElementTypes/renderers/CircularChordRendererType.js +8 -9
  38. package/pluggableElementTypes/renderers/FeatureRendererType.js +8 -2
  39. package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.d.ts +2 -4
  40. package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.js +2 -30
  41. package/pluggableElementTypes/renderers/ServerSideRenderedContent.d.ts +1 -1
  42. package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +2 -30
  43. package/pluggableElementTypes/renderers/ServerSideRendererType.js +6 -7
  44. package/tsconfig.build.tsbuildinfo +1 -1
  45. package/ui/DataGridFlexContainer.d.ts +3 -0
  46. package/ui/DataGridFlexContainer.js +15 -0
  47. package/ui/index.d.ts +1 -0
  48. package/ui/index.js +3 -1
  49. package/ui/theme.d.ts +2 -2
  50. package/ui/theme.js +18 -10
  51. package/util/cluster.d.ts +17 -0
  52. package/util/cluster.js +96 -0
  53. package/util/index.d.ts +3 -1
  54. package/util/index.js +13 -4
  55. package/util/offscreenCanvasUtils.d.ts +13 -12
  56. package/util/offscreenCanvasUtils.js +9 -6
@@ -0,0 +1,3 @@
1
+ export default function DataGridFlexContainer({ children, }: {
2
+ children: React.ReactNode;
3
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = DataGridFlexContainer;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const mui_1 = require("tss-react/mui");
6
+ const useStyles = (0, mui_1.makeStyles)()({
7
+ flexContainer: {
8
+ display: 'flex',
9
+ flexDirection: 'column',
10
+ },
11
+ });
12
+ function DataGridFlexContainer({ children, }) {
13
+ const { classes } = useStyles();
14
+ return (0, jsx_runtime_1.jsx)("div", { className: classes.flexContainer, children: children });
15
+ }
package/ui/index.d.ts CHANGED
@@ -13,5 +13,6 @@ export { default as Menu } from './Menu';
13
13
  export { default as PrerenderedCanvas } from './PrerenderedCanvas';
14
14
  export { default as ResizeHandle } from './ResizeHandle';
15
15
  export { default as SanitizedHTML } from './SanitizedHTML';
16
+ export { default as BaseTooltip } from './BaseTooltip';
16
17
  export * from './Menu';
17
18
  export declare const VIEW_HEADER_HEIGHT = 28;
package/ui/index.js CHANGED
@@ -17,7 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.VIEW_HEADER_HEIGHT = exports.SanitizedHTML = exports.ResizeHandle = exports.PrerenderedCanvas = exports.Menu = exports.LoadingEllipses = exports.FileSelector = exports.FatalErrorDialog = exports.ErrorMessage = exports.EditableTypography = exports.Dialog = exports.CascadingMenuButton = exports.CascadingMenu = exports.AssemblySelector = exports.Logomark = exports.LogoFull = void 0;
20
+ exports.VIEW_HEADER_HEIGHT = exports.BaseTooltip = exports.SanitizedHTML = exports.ResizeHandle = exports.PrerenderedCanvas = exports.Menu = exports.LoadingEllipses = exports.FileSelector = exports.FatalErrorDialog = exports.ErrorMessage = exports.EditableTypography = exports.Dialog = exports.CascadingMenuButton = exports.CascadingMenu = exports.AssemblySelector = exports.Logomark = exports.LogoFull = void 0;
21
21
  __exportStar(require("./theme"), exports);
22
22
  var Logo_1 = require("./Logo");
23
23
  Object.defineProperty(exports, "LogoFull", { enumerable: true, get: function () { return Logo_1.LogoFull; } });
@@ -48,5 +48,7 @@ var ResizeHandle_1 = require("./ResizeHandle");
48
48
  Object.defineProperty(exports, "ResizeHandle", { enumerable: true, get: function () { return __importDefault(ResizeHandle_1).default; } });
49
49
  var SanitizedHTML_1 = require("./SanitizedHTML");
50
50
  Object.defineProperty(exports, "SanitizedHTML", { enumerable: true, get: function () { return __importDefault(SanitizedHTML_1).default; } });
51
+ var BaseTooltip_1 = require("./BaseTooltip");
52
+ Object.defineProperty(exports, "BaseTooltip", { enumerable: true, get: function () { return __importDefault(BaseTooltip_1).default; } });
51
53
  __exportStar(require("./Menu"), exports);
52
54
  exports.VIEW_HEADER_HEIGHT = 28;
package/ui/theme.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ThemeOptions } from '@mui/material/styles';
1
+ import type { ThemeOptions } from '@mui/material';
2
2
  import type { PaletteColor } from '@mui/material/styles/createPalette';
3
3
  type MaybePaletteColor = PaletteColor | undefined;
4
4
  type Frames = [
@@ -55,5 +55,5 @@ declare module '@mui/material/styles/createPalette' {
55
55
  export declare const defaultThemes: ThemeMap;
56
56
  export declare function createJBrowseBaseTheme(theme?: ThemeOptions): ThemeOptions;
57
57
  type ThemeMap = Record<string, ThemeOptions>;
58
- export declare function createJBrowseTheme(configTheme?: ThemeOptions, themes?: ThemeMap, themeName?: string): import("@mui/material/styles").Theme;
58
+ export declare function createJBrowseTheme(configTheme?: ThemeOptions, themes?: ThemeMap, themeName?: string): import("@mui/material").Theme;
59
59
  export {};
package/ui/theme.js CHANGED
@@ -6,12 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.defaultThemes = void 0;
7
7
  exports.createJBrowseBaseTheme = createJBrowseBaseTheme;
8
8
  exports.createJBrowseTheme = createJBrowseTheme;
9
+ const material_1 = require("@mui/material");
9
10
  const colors_1 = require("@mui/material/colors");
10
- const styles_1 = require("@mui/material/styles");
11
11
  const deepmerge_1 = __importDefault(require("deepmerge"));
12
- const refTheme = (0, styles_1.createTheme)();
13
- const midnight = '#0D233F';
14
- const grape = '#721E63';
12
+ const refTheme = (0, material_1.createTheme)();
13
+ const midnight = refTheme.palette.augmentColor({ color: { main: '#0D233F' } });
14
+ const grape = refTheme.palette.augmentColor({ color: { main: '#721E63' } });
15
15
  const forest = refTheme.palette.augmentColor({ color: { main: '#135560' } });
16
16
  const mandarin = refTheme.palette.augmentColor({ color: { main: '#FFB11D' } });
17
17
  const lightgrey = refTheme.palette.augmentColor({ color: { main: '#aaa' } });
@@ -47,6 +47,9 @@ const hardclip = '#f00';
47
47
  const softclip = '#00f';
48
48
  const skip = '#97b8c9';
49
49
  const defaults = {
50
+ primary: midnight,
51
+ secondary: grape,
52
+ tertiary: forest,
50
53
  quaternary: mandarin,
51
54
  highlight: mandarin,
52
55
  stopCodon,
@@ -65,9 +68,6 @@ function stockTheme() {
65
68
  palette: {
66
69
  ...defaults,
67
70
  mode: undefined,
68
- primary: { main: midnight },
69
- secondary: { main: grape },
70
- tertiary: forest,
71
71
  },
72
72
  components: {
73
73
  MuiLink: {
@@ -333,7 +333,7 @@ function createJBrowseBaseTheme(theme) {
333
333
  return (0, deepmerge_1.default)(themeP, theme || {}, { arrayMerge: overwriteArrayMerge });
334
334
  }
335
335
  function createJBrowseTheme(configTheme = {}, themes = exports.defaultThemes, themeName = 'default') {
336
- return (0, styles_1.createTheme)(createJBrowseBaseTheme(themeName === 'default'
336
+ return (0, material_1.createTheme)(createJBrowseBaseTheme(themeName === 'default'
337
337
  ? (0, deepmerge_1.default)(themes.default, augmentThemeColors(configTheme), {
338
338
  arrayMerge: overwriteArrayMerge,
339
339
  })
@@ -341,13 +341,21 @@ function createJBrowseTheme(configTheme = {}, themes = exports.defaultThemes, th
341
341
  }
342
342
  function augmentThemeColors(theme = {}) {
343
343
  var _a;
344
- for (const entry of ['tertiary', 'quaternary', 'highlight']) {
344
+ for (const entry of [
345
+ 'primary',
346
+ 'secondary',
347
+ 'tertiary',
348
+ 'quaternary',
349
+ 'highlight',
350
+ ]) {
345
351
  if ((_a = theme.palette) === null || _a === void 0 ? void 0 : _a[entry]) {
346
352
  theme = (0, deepmerge_1.default)(theme, {
347
353
  palette: {
348
354
  [entry]: refTheme.palette.augmentColor('color' in theme.palette[entry]
349
355
  ? theme.palette[entry]
350
- : { color: theme.palette[entry] }),
356
+ : {
357
+ color: theme.palette[entry],
358
+ }),
351
359
  },
352
360
  });
353
361
  }
@@ -0,0 +1,17 @@
1
+ export declare function euclideanDistance(a: number[], b: number[]): number;
2
+ export declare function averageDistance(setA: number[], setB: number[], distances: number[][]): number;
3
+ export declare function clusterData({ data, distance, linkage, onProgress, stopToken, }: {
4
+ data: number[][];
5
+ distance?: (a: number[], b: number[]) => number;
6
+ linkage?: (a: number[], b: number[], distances: number[][]) => number;
7
+ onProgress?: (a: string) => void;
8
+ stopToken?: string;
9
+ }): {
10
+ clusters: {
11
+ height: number;
12
+ indexes: number[];
13
+ } | undefined;
14
+ distances: number[][];
15
+ order: number[];
16
+ clustersGivenK: number[][][];
17
+ };
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.euclideanDistance = euclideanDistance;
4
+ exports.averageDistance = averageDistance;
5
+ exports.clusterData = clusterData;
6
+ const stopToken_1 = require("@jbrowse/core/util/stopToken");
7
+ function toP(n) {
8
+ return Number.parseFloat((n * 100).toFixed(1));
9
+ }
10
+ function euclideanDistance(a, b) {
11
+ const size = Math.min(a.length, b.length);
12
+ let sum = 0;
13
+ for (let index = 0; index < size; index++) {
14
+ sum += (a[index] - b[index]) * (a[index] - b[index]);
15
+ }
16
+ return Math.sqrt(sum);
17
+ }
18
+ function averageDistance(setA, setB, distances) {
19
+ let distance = 0;
20
+ const lenA = setA.length;
21
+ const lenB = setB.length;
22
+ for (let i = 0; i < lenA; i++) {
23
+ for (let j = 0; j < lenB; j++) {
24
+ distance += distances[setA[i]][setB[j]];
25
+ }
26
+ }
27
+ return distance / setA.length / setB.length;
28
+ }
29
+ function clusterData({ data, distance = euclideanDistance, linkage = averageDistance, onProgress, stopToken, }) {
30
+ let start = performance.now();
31
+ const distances = [];
32
+ for (let i = 0; i < data.length; i++) {
33
+ if (performance.now() - start > 400) {
34
+ (0, stopToken_1.checkStopToken)(stopToken);
35
+ start = performance.now();
36
+ }
37
+ if (onProgress) {
38
+ onProgress(`Making distance matrix: ${toP(i / (data.length - 1))}%`);
39
+ }
40
+ const row = [];
41
+ for (let j = 0; j < data.length; j++) {
42
+ row.push(distance(data[i], data[j]));
43
+ }
44
+ distances.push(row);
45
+ }
46
+ const clusters = data.map((_datum, index) => ({
47
+ height: 0,
48
+ indexes: [Number(index)],
49
+ }));
50
+ let clustersGivenK = [];
51
+ start = performance.now();
52
+ for (let iteration = 0; iteration < data.length; iteration++) {
53
+ if (performance.now() - start > 400) {
54
+ (0, stopToken_1.checkStopToken)(stopToken);
55
+ start = performance.now();
56
+ }
57
+ if (onProgress) {
58
+ onProgress(`Clustering: ${toP((iteration + 1) / data.length)}%`);
59
+ }
60
+ clustersGivenK.push(clusters.map(cluster => cluster.indexes));
61
+ if (iteration >= data.length - 1) {
62
+ break;
63
+ }
64
+ let nearestDistance = Infinity;
65
+ let nearestRow = 0;
66
+ let nearestCol = 0;
67
+ for (let row = 0; row < clusters.length; row++) {
68
+ for (let col = row + 1; col < clusters.length; col++) {
69
+ const distance = linkage(clusters[row].indexes, clusters[col].indexes, distances);
70
+ if (distance < nearestDistance) {
71
+ nearestDistance = distance;
72
+ nearestRow = row;
73
+ nearestCol = col;
74
+ }
75
+ }
76
+ }
77
+ const newCluster = {
78
+ indexes: [
79
+ ...clusters[nearestRow].indexes,
80
+ ...clusters[nearestCol].indexes,
81
+ ],
82
+ height: nearestDistance,
83
+ children: [clusters[nearestRow], clusters[nearestCol]],
84
+ };
85
+ clusters.splice(Math.max(nearestRow, nearestCol), 1);
86
+ clusters.splice(Math.min(nearestRow, nearestCol), 1);
87
+ clusters.push(newCluster);
88
+ }
89
+ clustersGivenK = [[], ...clustersGivenK.reverse()];
90
+ return {
91
+ clusters: clusters[0],
92
+ distances: distances,
93
+ order: clusters[0].indexes,
94
+ clustersGivenK: clustersGivenK,
95
+ };
96
+ }
package/util/index.d.ts CHANGED
@@ -75,6 +75,7 @@ export declare function renameRegionsIfNeeded<ARGTYPE extends {
75
75
  }>;
76
76
  export declare function minmax(a: number, b: number): readonly [number, number];
77
77
  export declare function shorten(name: string, max?: number, short?: number): string;
78
+ export declare function shorten2(name: string, max?: number): string;
78
79
  export declare function stringify({ refName, coord, assemblyName, oob, }: {
79
80
  assemblyName?: string;
80
81
  coord: number;
@@ -258,7 +259,8 @@ export declare function fetchAndMaybeUnzipText(loc: GenericFilehandle, opts?: Ba
258
259
  export declare function isObject(x: unknown): x is Record<string | symbol | number, unknown>;
259
260
  export declare function localStorageGetNumber(key: string, defaultVal: number): number;
260
261
  export declare function localStorageGetBoolean(key: string, defaultVal: boolean): boolean;
261
- export declare function forEachWithStopTokenCheck<T>(iter: Iterable<T>, stopToken: string | undefined, arg: (arg: T) => void, durationMs?: number): void;
262
+ export declare function localStorageSetBoolean(key: string, value: boolean): void;
263
+ export declare function forEachWithStopTokenCheck<T>(iter: Iterable<T>, stopToken: string | undefined, arg: (arg: T, idx: number) => void, durationMs?: number): void;
262
264
  export declare function testAdapter(fileName: string, regex: RegExp, adapterHint: string | undefined, expected: string): boolean;
263
265
  export { type Feature, type SimpleFeatureSerialized, type SimpleFeatureSerializedNoId, default as SimpleFeature, isFeature, } from './simpleFeature';
264
266
  export { blobToDataURL } from './blobToDataURL';
package/util/index.js CHANGED
@@ -49,6 +49,7 @@ exports.renameRegionIfNeeded = renameRegionIfNeeded;
49
49
  exports.renameRegionsIfNeeded = renameRegionsIfNeeded;
50
50
  exports.minmax = minmax;
51
51
  exports.shorten = shorten;
52
+ exports.shorten2 = shorten2;
52
53
  exports.stringify = stringify;
53
54
  exports.revcom = revcom;
54
55
  exports.reverse = reverse;
@@ -95,6 +96,7 @@ exports.fetchAndMaybeUnzipText = fetchAndMaybeUnzipText;
95
96
  exports.isObject = isObject;
96
97
  exports.localStorageGetNumber = localStorageGetNumber;
97
98
  exports.localStorageGetBoolean = localStorageGetBoolean;
99
+ exports.localStorageSetBoolean = localStorageSetBoolean;
98
100
  exports.forEachWithStopTokenCheck = forEachWithStopTokenCheck;
99
101
  exports.testAdapter = testAdapter;
100
102
  const react_1 = require("react");
@@ -530,6 +532,9 @@ function shorten(name, max = 70, short = 30) {
530
532
  ? `${name.slice(0, short)}...${name.slice(-short)}`
531
533
  : name;
532
534
  }
535
+ function shorten2(name, max = 70) {
536
+ return name.length > max ? `${name.slice(0, max)}...` : name;
537
+ }
533
538
  function stringify({ refName, coord, assemblyName, oob, }, useAssemblyName) {
534
539
  return [
535
540
  assemblyName && useAssemblyName ? `{${assemblyName}}` : '',
@@ -980,9 +985,9 @@ function renderToStaticMarkup(node) {
980
985
  function isGzip(buf) {
981
986
  return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;
982
987
  }
983
- async function fetchAndMaybeUnzip(loc, opts) {
984
- const { statusCallback = () => { } } = opts || {};
985
- const buf = (await updateStatus('Downloading file', statusCallback, () => loc.readFile(opts)));
988
+ async function fetchAndMaybeUnzip(loc, opts = {}) {
989
+ const { statusCallback = () => { } } = opts;
990
+ const buf = await updateStatus('Downloading file', statusCallback, () => loc.readFile(opts));
986
991
  return isGzip(buf)
987
992
  ? await updateStatus('Unzipping', statusCallback, () => (0, bgzf_filehandle_1.unzip)(buf))
988
993
  : buf;
@@ -1004,14 +1009,18 @@ function localStorageGetNumber(key, defaultVal) {
1004
1009
  function localStorageGetBoolean(key, defaultVal) {
1005
1010
  return Boolean(JSON.parse(localStorageGetItem(key) || JSON.stringify(defaultVal)));
1006
1011
  }
1012
+ function localStorageSetBoolean(key, value) {
1013
+ localStorageSetItem(key, JSON.stringify(value));
1014
+ }
1007
1015
  function forEachWithStopTokenCheck(iter, stopToken, arg, durationMs = 400) {
1008
1016
  let start = performance.now();
1017
+ let i = 0;
1009
1018
  for (const t of iter) {
1010
1019
  if (performance.now() - start > durationMs) {
1011
1020
  (0, stopToken_1.checkStopToken)(stopToken);
1012
1021
  start = performance.now();
1013
1022
  }
1014
- arg(t);
1023
+ arg(t, i++);
1015
1024
  }
1016
1025
  }
1017
1026
  function testAdapter(fileName, regex, adapterHint, expected) {
@@ -1,18 +1,19 @@
1
- export type RenderReturn = Record<string, unknown> | undefined;
2
- type RendererRet = Promise<RenderReturn> | RenderReturn;
3
- export declare function renderToAbstractCanvas(width: number, height: number, opts: {
4
- exportSVG?: {
5
- rasterizeLayers?: boolean;
6
- scale?: number;
7
- };
1
+ interface ExportSVGOptions {
2
+ rasterizeLayers?: boolean;
3
+ scale?: number;
4
+ }
5
+ interface RenderToAbstractCanvasOptions {
6
+ exportSVG?: ExportSVGOptions;
8
7
  highResolutionScaling?: number;
9
- }, cb: (ctx: CanvasRenderingContext2D) => RendererRet): Promise<{
10
- canvasRecordedData: any;
11
- } | {
12
- reactElement: import("react/jsx-runtime").JSX.Element;
8
+ }
9
+ type R<T extends Record<string, unknown> | undefined> = Omit<T, never> & ({
10
+ canvasRecordedData: Record<string, unknown>;
13
11
  } | {
14
12
  imageData: any;
15
- }>;
13
+ } | {
14
+ reactElement: React.ReactElement;
15
+ });
16
+ export declare function renderToAbstractCanvas<T extends Record<string, unknown> | undefined>(width: number, height: number, opts: RenderToAbstractCanvasOptions, cb: (ctx: CanvasRenderingContext2D) => Promise<T> | T): Promise<R<T>>;
16
17
  export declare function getSerializedSvg(results: {
17
18
  width: number;
18
19
  height: number;
@@ -46,9 +46,9 @@ async function renderToAbstractCanvas(width, height, opts, cb) {
46
46
  if (exportSVG) {
47
47
  if (!exportSVG.rasterizeLayers) {
48
48
  const fakeCtx = new canvas_sequencer_1.CanvasSequence();
49
- const result = await cb(fakeCtx);
49
+ const callbackResult = await cb(fakeCtx);
50
50
  return {
51
- ...result,
51
+ ...callbackResult,
52
52
  canvasRecordedData: fakeCtx.toJSON(),
53
53
  };
54
54
  }
@@ -60,9 +60,9 @@ async function renderToAbstractCanvas(width, height, opts, cb) {
60
60
  throw new Error('2d canvas rendering not supported on this platform');
61
61
  }
62
62
  ctx.scale(s, s);
63
- const result = await cb(ctx);
63
+ const callbackResult = await cb(ctx);
64
64
  return {
65
- ...result,
65
+ ...callbackResult,
66
66
  reactElement: ((0, jsx_runtime_1.jsx)("image", { width: width, height: height, xlinkHref: 'convertToBlob' in canvas
67
67
  ? await (0, blobToDataURL_1.blobToDataURL)(await canvas.convertToBlob({
68
68
  type: 'image/png',
@@ -79,8 +79,11 @@ async function renderToAbstractCanvas(width, height, opts, cb) {
79
79
  throw new Error('2d canvas rendering not supported on this platform');
80
80
  }
81
81
  ctx.scale(s, s);
82
- const result = await cb(ctx);
83
- return { ...result, imageData: await (0, offscreenCanvasPonyfill_1.createImageBitmap)(canvas) };
82
+ const callbackResult = await cb(ctx);
83
+ return {
84
+ ...callbackResult,
85
+ imageData: await (0, offscreenCanvasPonyfill_1.createImageBitmap)(canvas),
86
+ };
84
87
  }
85
88
  }
86
89
  async function getSerializedSvg(results) {