@jbrowse/core 1.6.9 → 1.7.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 (48) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail.d.ts +2 -2
  2. package/PluginLoader.d.ts +11 -3
  3. package/PluginLoader.js +37 -89
  4. package/PluginManager.js +4 -6
  5. package/package.json +5 -8
  6. package/pluggableElementTypes/WidgetType.d.ts +1 -2
  7. package/pluggableElementTypes/models/BaseViewModel.js +1 -1
  8. package/pluggableElementTypes/models/InternetAccountModel.js +51 -69
  9. package/rpc/WebWorkerRpcDriver.d.ts +2 -6
  10. package/rpc/WebWorkerRpcDriver.js +6 -5
  11. package/ui/App.js +13 -17
  12. package/ui/AssemblySelector.d.ts +4 -1
  13. package/ui/AssemblySelector.js +69 -8
  14. package/ui/PrerenderedCanvas.js +1 -26
  15. package/ui/ViewContainer.d.ts +5 -5
  16. package/ui/ViewContainer.js +12 -7
  17. package/util/index.d.ts +7 -1
  18. package/util/index.js +20 -0
  19. package/util/io/index.js +3 -1
  20. package/util/layouts/BaseLayout.d.ts +1 -0
  21. package/util/layouts/GranularRectLayout.js +2 -0
  22. package/util/layouts/PrecomputedLayout.js +2 -1
  23. package/util/offscreenCanvas/Canvas2DContextShim/Canvas2DContextShim.test.d.ts +1 -0
  24. package/util/offscreenCanvas/Canvas2DContextShim/Canvas2DContextShim.test.js +15 -0
  25. package/util/offscreenCanvas/Canvas2DContextShim/context.d.ts +56 -0
  26. package/util/offscreenCanvas/Canvas2DContextShim/context.js +356 -0
  27. package/util/offscreenCanvas/Canvas2DContextShim/index.d.ts +2 -0
  28. package/util/offscreenCanvas/Canvas2DContextShim/index.js +13 -0
  29. package/util/offscreenCanvas/Canvas2DContextShim/svg.d.ts +3 -0
  30. package/util/offscreenCanvas/Canvas2DContextShim/svg.js +210 -0
  31. package/util/offscreenCanvas/Canvas2DContextShim/types.d.ts +50 -0
  32. package/util/offscreenCanvas/Canvas2DContextShim/types.js +59 -0
  33. package/util/offscreenCanvas/Canvas2DContextShim/util.d.ts +12 -0
  34. package/util/offscreenCanvas/Canvas2DContextShim/util.js +91 -0
  35. package/util/offscreenCanvas/CanvasShim.d.ts +11 -0
  36. package/util/offscreenCanvas/CanvasShim.js +54 -0
  37. package/util/offscreenCanvas/index.d.ts +14 -0
  38. package/util/offscreenCanvas/index.js +170 -0
  39. package/util/offscreenCanvas/ponyfill.d.ts +6 -0
  40. package/util/offscreenCanvas/ponyfill.js +145 -0
  41. package/util/offscreenCanvas/types.d.ts +16 -0
  42. package/util/offscreenCanvas/types.js +14 -0
  43. package/util/offscreenCanvasPonyfill.d.ts +1 -58
  44. package/util/offscreenCanvasPonyfill.js +10 -815
  45. package/util/offscreenCanvasUtils.d.ts +1 -13
  46. package/util/offscreenCanvasUtils.js +12 -124
  47. package/ui/NewSessionCards.d.ts +0 -14
  48. package/ui/NewSessionCards.js +0 -136
package/ui/App.js CHANGED
@@ -238,23 +238,19 @@ var App = (0, _mobxReact.observer)(function (_ref2) {
238
238
  }
239
239
 
240
240
  var ReactComponent = viewType.ReactComponent;
241
- return (
242
- /*#__PURE__*/
243
- // @ts-ignore
244
- _react.default.createElement(_ViewContainer.default, {
245
- key: "view-".concat(view.id),
246
- view: view,
247
- onClose: function onClose() {
248
- return session.removeView(view);
249
- }
250
- }, /*#__PURE__*/_react.default.createElement(_react.Suspense, {
251
- fallback: /*#__PURE__*/_react.default.createElement("div", null, "Loading...")
252
- }, /*#__PURE__*/_react.default.createElement(ReactComponent, {
253
- model: view,
254
- session: session,
255
- getTrackType: pluginManager.getTrackType
256
- })))
257
- );
241
+ return /*#__PURE__*/_react.default.createElement(_ViewContainer.default, {
242
+ key: "view-".concat(view.id),
243
+ view: view,
244
+ onClose: function onClose() {
245
+ return session.removeView(view);
246
+ }
247
+ }, /*#__PURE__*/_react.default.createElement(_react.Suspense, {
248
+ fallback: /*#__PURE__*/_react.default.createElement("div", null, "Loading...")
249
+ }, /*#__PURE__*/_react.default.createElement(ReactComponent, {
250
+ model: view,
251
+ session: session,
252
+ getTrackType: pluginManager.getTrackType
253
+ })));
258
254
  }) : /*#__PURE__*/_react.default.createElement(_core.Paper, {
259
255
  className: classes.selectPaper
260
256
  }, /*#__PURE__*/_react.default.createElement(_core.Typography, null, "Select a view to launch"), /*#__PURE__*/_react.default.createElement(_core.Select, {
@@ -1,8 +1,11 @@
1
1
  /// <reference types="react" />
2
+ import { InputProps as IIP } from '@material-ui/core';
2
3
  import { AbstractSessionModel } from '../util';
3
- declare const AssemblySelector: ({ session, onChange, selected, }: {
4
+ declare const AssemblySelector: ({ session, onChange, selected, InputProps, extra, }: {
4
5
  session: AbstractSessionModel;
5
6
  onChange: (arg: string) => void;
6
7
  selected: string | undefined;
8
+ InputProps?: IIP | undefined;
9
+ extra?: unknown;
7
10
  }) => JSX.Element;
8
11
  export default AssemblySelector;
@@ -2,12 +2,16 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
7
9
  });
8
10
  exports.default = void 0;
9
11
 
10
- var _react = _interopRequireDefault(require("react"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
11
15
 
12
16
  var _mobxReact = require("mobx-react");
13
17
 
@@ -15,35 +19,92 @@ var _configuration = require("../configuration");
15
19
 
16
20
  var _core = require("@material-ui/core");
17
21
 
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
18
26
  var useStyles = (0, _core.makeStyles)(function () {
19
27
  return {
20
28
  importFormEntry: {
21
29
  minWidth: 180
22
30
  }
23
31
  };
24
- });
32
+ }); // Hook from https://usehooks.com/useLocalStorage/
33
+
34
+ function useLocalStorage(key, initialValue) {
35
+ var _useState = (0, _react.useState)(function () {
36
+ if (typeof window === 'undefined') {
37
+ return initialValue;
38
+ }
39
+
40
+ try {
41
+ var item = window.localStorage.getItem(key);
42
+ return item ? JSON.parse(item) : initialValue;
43
+ } catch (error) {
44
+ console.error(error);
45
+ return initialValue;
46
+ }
47
+ }),
48
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
49
+ storedValue = _useState2[0],
50
+ setStoredValue = _useState2[1];
51
+
52
+ var setValue = function setValue(value) {
53
+ try {
54
+ var valueToStore = value instanceof Function ? value(storedValue) : value;
55
+ setStoredValue(valueToStore);
56
+
57
+ if (typeof window !== 'undefined') {
58
+ window.localStorage.setItem(key, JSON.stringify(valueToStore));
59
+ }
60
+ } catch (error) {
61
+ console.error(error);
62
+ }
63
+ };
64
+
65
+ return [storedValue, setValue];
66
+ }
67
+
25
68
  var AssemblySelector = (0, _mobxReact.observer)(function (_ref) {
26
69
  var session = _ref.session,
27
- _onChange = _ref.onChange,
28
- selected = _ref.selected;
70
+ onChange = _ref.onChange,
71
+ selected = _ref.selected,
72
+ InputProps = _ref.InputProps,
73
+ _ref$extra = _ref.extra,
74
+ extra = _ref$extra === void 0 ? 0 : _ref$extra;
29
75
  var classes = useStyles();
30
76
  var assemblyNames = session.assemblyNames,
31
- assemblyManager = session.assemblyManager;
77
+ assemblyManager = session.assemblyManager; // constructs a localstorage key based on host/path/config to help
78
+ // remember. non-config assists usage with e.g. embedded apps
79
+
80
+ var config = new URLSearchParams(window.location.search).get('config');
81
+
82
+ var _useLocalStorage = useLocalStorage("lastAssembly-".concat([window.location.host + window.location.pathname, config, extra].join('-')), selected),
83
+ _useLocalStorage2 = (0, _slicedToArray2.default)(_useLocalStorage, 2),
84
+ lastSelected = _useLocalStorage2[0],
85
+ setLastSelected = _useLocalStorage2[1];
86
+
87
+ var selection = assemblyNames.includes(lastSelected || '') ? lastSelected : selected;
88
+ (0, _react.useEffect)(function () {
89
+ if (selection && selection !== selected) {
90
+ onChange(selection);
91
+ }
92
+ }, [selection, onChange, selected]);
32
93
  var error = assemblyNames.length ? '' : 'No configured assemblies';
33
94
  return /*#__PURE__*/_react.default.createElement(_core.TextField, {
34
95
  select: true,
35
96
  label: "Assembly",
36
97
  variant: "outlined",
37
- margin: "normal",
38
98
  helperText: error || 'Select assembly to view',
39
- value: error ? '' : selected,
99
+ value: error ? '' : selection,
40
100
  inputProps: {
41
101
  'data-testid': 'assembly-selector'
42
102
  },
43
103
  onChange: function onChange(event) {
44
- return _onChange(event.target.value);
104
+ return setLastSelected(event.target.value);
45
105
  },
46
106
  error: !!error,
107
+ InputProps: InputProps,
47
108
  disabled: !!error,
48
109
  className: classes.importFormEntry
49
110
  }, assemblyNames.map(function (name) {
@@ -11,8 +11,6 @@ exports.default = void 0;
11
11
 
12
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
13
 
14
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
-
16
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
15
 
18
16
  var _react = _interopRequireWildcard(require("react"));
@@ -53,30 +51,7 @@ function PrerenderedCanvas(props) {
53
51
  return;
54
52
  }
55
53
 
56
- if (imageData.commands) {
57
- imageData.commands.forEach(function (command) {
58
- if (command.type === 'strokeStyle') {
59
- context.strokeStyle = command.style;
60
- } else if (command.type === 'fillStyle') {
61
- context.fillStyle = command.style;
62
- } else if (command.type === 'font') {
63
- context.font = command.style;
64
- } else {
65
- // @ts-ignore
66
- context[command.type].apply(context, (0, _toConsumableArray2.default)(command.args));
67
- }
68
- });
69
- } else if (imageData instanceof _offscreenCanvasPonyfill.ImageBitmapType) {
70
- context.drawImage(imageData, 0, 0);
71
- } else if (imageData.dataURL) {
72
- var img = new Image();
73
-
74
- img.onload = function () {
75
- return context.drawImage(img, 0, 0);
76
- };
77
-
78
- img.src = imageData.dataURL;
79
- }
54
+ (0, _offscreenCanvasPonyfill.drawImageOntoCanvasContext)(imageData, context);
80
55
  }, [imageData]);
81
56
  var softClipString = showSoftClip ? '_softclipped' : '';
82
57
  var blockKeyStr = blockKey ? '_' + blockKey : '';
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import { IBaseViewModel } from '../pluggableElementTypes/models';
3
- declare const _default: React.ComponentType<{
3
+ declare const ViewContainer: ({ view, onClose, style, children, }: {
4
4
  view: IBaseViewModel;
5
- style: React.CSSProperties;
6
- children: React.ReactNode;
7
5
  onClose: () => void;
8
- } & import("react-sizeme").WithSizeProps>;
9
- export default _default;
6
+ style?: React.CSSProperties | undefined;
7
+ children: React.ReactNode;
8
+ }) => JSX.Element;
9
+ export default ViewContainer;
@@ -23,7 +23,7 @@ var _mobxReact = require("mobx-react");
23
23
 
24
24
  var _mobxStateTree = require("mobx-state-tree");
25
25
 
26
- var _reactSizeme = require("react-sizeme");
26
+ var _reactUseMeasure = _interopRequireDefault(require("react-use-measure"));
27
27
 
28
28
  var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
29
29
 
@@ -114,16 +114,20 @@ var ViewMenu = (0, _mobxReact.observer)(function (_ref) {
114
114
  menuItems: model.menuItems()
115
115
  })) : null;
116
116
  });
117
-
118
- var _default = (0, _reactSizeme.withSize)()((0, _mobxReact.observer)(function (_ref2) {
117
+ var ViewContainer = (0, _mobxReact.observer)(function (_ref2) {
119
118
  var view = _ref2.view,
120
119
  onClose = _ref2.onClose,
121
120
  style = _ref2.style,
122
- children = _ref2.children,
123
- width = _ref2.size.width;
121
+ children = _ref2.children;
124
122
  var classes = useStyles();
125
123
  var theme = (0, _core.useTheme)();
126
124
  var padWidth = theme.spacing(1);
125
+
126
+ var _useMeasure = (0, _reactUseMeasure.default)(),
127
+ _useMeasure2 = (0, _slicedToArray2.default)(_useMeasure, 2),
128
+ ref = _useMeasure2[0],
129
+ width = _useMeasure2[1].width;
130
+
127
131
  (0, _react.useEffect)(function () {
128
132
  if (width && (0, _mobxStateTree.isAlive)(view)) {
129
133
  view.setWidth(width - padWidth * 2);
@@ -141,6 +145,7 @@ var _default = (0, _reactSizeme.withSize)()((0, _mobxReact.observer)(function (_
141
145
  });
142
146
  }, []);
143
147
  return /*#__PURE__*/_react.default.createElement(_core.Paper, {
148
+ ref: ref,
144
149
  elevation: 12,
145
150
  className: classes.viewContainer,
146
151
  style: _objectSpread(_objectSpread({}, style), {}, {
@@ -193,6 +198,6 @@ var _default = (0, _reactSizeme.withSize)()((0, _mobxReact.observer)(function (_
193
198
  }, /*#__PURE__*/_react.default.createElement(_Close.default, {
194
199
  className: classes.icon
195
200
  }))), /*#__PURE__*/_react.default.createElement(_core.Paper, null, children));
196
- }));
197
-
201
+ });
202
+ var _default = ViewContainer;
198
203
  exports.default = _default;
package/util/index.d.ts CHANGED
@@ -228,7 +228,7 @@ export declare function stringify({ refName, coord, oob, }: {
228
228
  export declare const isElectron: boolean;
229
229
  export declare function revcom(seqString: string): string;
230
230
  export declare const complement: (seqString: string) => string;
231
- export declare function blobToDataURL(blob: Blob): Promise<unknown>;
231
+ export declare function blobToDataURL(blob: Blob): Promise<string>;
232
232
  export declare const rIC: (((callback: IdleRequestCallback, options?: IdleRequestOptions | undefined) => number) & typeof requestIdleCallback) | ((cb: Function) => any);
233
233
  export declare function measureText(str: unknown, fontSize?: number): number;
234
234
  export declare const defaultStarts: string[];
@@ -341,3 +341,9 @@ export declare function viewBpToPx({ refName, coord, regionNumber, self, }: {
341
341
  offsetPx: number;
342
342
  } | undefined;
343
343
  export declare function getBpDisplayStr(totalBp: number): string;
344
+ export declare function getViewParams(model: IAnyStateTreeNode, exportSVG?: boolean): {
345
+ offsetPx: number;
346
+ offsetPx1: number;
347
+ start: any;
348
+ end: any;
349
+ };
package/util/index.js CHANGED
@@ -57,6 +57,7 @@ var _exportNames = {
57
57
  bytesForRegions: true,
58
58
  viewBpToPx: true,
59
59
  getBpDisplayStr: true,
60
+ getViewParams: true,
60
61
  SimpleFeature: true,
61
62
  isFeature: true
62
63
  };
@@ -87,6 +88,7 @@ exports.getContainingDisplay = getContainingDisplay;
87
88
  exports.getContainingTrack = getContainingTrack;
88
89
  exports.getContainingView = getContainingView;
89
90
  exports.getSession = getSession;
91
+ exports.getViewParams = getViewParams;
90
92
  exports.hashCode = hashCode;
91
93
  exports.isElectron = exports.inProduction = exports.inDevelopment = void 0;
92
94
  Object.defineProperty(exports, "isFeature", {
@@ -1409,4 +1411,22 @@ function getBpDisplayStr(totalBp) {
1409
1411
  }
1410
1412
 
1411
1413
  return str;
1414
+ }
1415
+
1416
+ function getViewParams(model, exportSVG) {
1417
+ // @ts-ignore
1418
+ var _getContainingView = getContainingView(model),
1419
+ dynamicBlocks = _getContainingView.dynamicBlocks,
1420
+ staticBlocks = _getContainingView.staticBlocks,
1421
+ offsetPx = _getContainingView.offsetPx;
1422
+
1423
+ var block = (dynamicBlocks === null || dynamicBlocks === void 0 ? void 0 : dynamicBlocks.contentBlocks[0]) || {};
1424
+ var staticblock = (staticBlocks === null || staticBlocks === void 0 ? void 0 : staticBlocks.contentBlocks[0]) || {};
1425
+ var staticblock1 = (staticBlocks === null || staticBlocks === void 0 ? void 0 : staticBlocks.contentBlocks[1]) || {};
1426
+ return {
1427
+ offsetPx: exportSVG ? 0 : offsetPx - staticblock.offsetPx,
1428
+ offsetPx1: exportSVG ? 0 : offsetPx - staticblock1.offsetPx,
1429
+ start: block.start,
1430
+ end: block.end
1431
+ };
1412
1432
  }
package/util/io/index.js CHANGED
@@ -30,6 +30,8 @@ var _tracks = require("../tracks");
30
30
 
31
31
  var _detectNode = _interopRequireDefault(require("detect-node"));
32
32
 
33
+ var _util = require("@jbrowse/core/util");
34
+
33
35
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
34
36
 
35
37
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -52,7 +54,7 @@ function openLocation(location, pluginManager) {
52
54
  throw new Error('No local path provided');
53
55
  }
54
56
 
55
- if (_detectNode.default) {
57
+ if (_detectNode.default || _util.isElectron) {
56
58
  return new _genericFilehandle.LocalFile(location.localPath);
57
59
  } else {
58
60
  throw new Error("can't use local files in the browser");
@@ -2,6 +2,7 @@ export declare type RectTuple = [number, number, number, number];
2
2
  export interface SerializedLayout {
3
3
  rectangles: Record<string, RectTuple>;
4
4
  totalHeight: number;
5
+ containsNoTransferables: true;
5
6
  maxHeightReached: boolean;
6
7
  }
7
8
  export interface Rectangle<T> {
@@ -580,6 +580,7 @@ var GranularRectLayout = /*#__PURE__*/function () {
580
580
 
581
581
  return {
582
582
  rectangles: regionRectangles,
583
+ containsNoTransferables: true,
583
584
  totalHeight: this.getTotalHeight(),
584
585
  maxHeightReached: maxHeightReached
585
586
  };
@@ -590,6 +591,7 @@ var GranularRectLayout = /*#__PURE__*/function () {
590
591
  var rectangles = (0, _index.objectFromEntries)(this.getRectangles());
591
592
  return {
592
593
  rectangles: rectangles,
594
+ containsNoTransferables: true,
593
595
  totalHeight: this.getTotalHeight(),
594
596
  maxHeightReached: this.maxHeightReached
595
597
  };
@@ -118,7 +118,8 @@ var PrecomputedLayout = /*#__PURE__*/function () {
118
118
  return {
119
119
  rectangles: (0, _.objectFromEntries)(this.rectangles),
120
120
  totalHeight: this.totalHeight,
121
- maxHeightReached: false
121
+ maxHeightReached: false,
122
+ containsNoTransferables: true
122
123
  };
123
124
  }
124
125
  }]);
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _ = _interopRequireDefault(require("."));
6
+
7
+ test('serialize a single command and read back out', function () {
8
+ var ctx = new _.default(100, 100);
9
+ ctx.arc(20, 21, 22, 23, 24);
10
+ var cmds = Array.from(ctx.getCommands());
11
+ expect(cmds).toEqual([{
12
+ name: 'arc',
13
+ args: [20, 21, 22, 23, 24]
14
+ }]);
15
+ });
@@ -0,0 +1,56 @@
1
+ /// <reference types="react" />
2
+ /// <reference types="offscreencanvas" />
3
+ import { Command } from './types';
4
+ /** get the params type of real method in OffscreenCanvasRenderingContext2D */
5
+ declare type RealP<METHODNAME extends keyof OffscreenCanvasRenderingContext2D> = OffscreenCanvasRenderingContext2D[METHODNAME] extends (...arg0: any[]) => any ? Parameters<OffscreenCanvasRenderingContext2D[METHODNAME]> : never;
6
+ /** get the return type of real method in OffscreenCanvasRenderingContext2D */
7
+ declare type RealRet<METHODNAME extends keyof OffscreenCanvasRenderingContext2D> = OffscreenCanvasRenderingContext2D[METHODNAME] extends (...arg0: any[]) => any ? ReturnType<OffscreenCanvasRenderingContext2D[METHODNAME]> : never;
8
+ /** get the type of the params of a method of the canvas shim */
9
+ export declare type ShimP<METHODNAME extends keyof OffscreenCanvasRenderingContext2DShim> = OffscreenCanvasRenderingContext2DShim[METHODNAME] extends (...arg0: any[]) => any ? Parameters<OffscreenCanvasRenderingContext2DShim[METHODNAME]> : never;
10
+ /** decode all the commands in the given buffer and replay them onto the given context */
11
+ export declare function replayCommandsOntoContext(targetContext: CanvasRenderingContext2D, encodedCommands: Iterable<Command>): void;
12
+ export default class OffscreenCanvasRenderingContext2DShim {
13
+ width: number;
14
+ height: number;
15
+ currentFont: string;
16
+ currentStrokeStyle: string;
17
+ currentFillStyle: string;
18
+ recordedCommands: Command[];
19
+ constructor(width: number, height: number);
20
+ private pushMethodCall;
21
+ private pushSetterCall;
22
+ getSerializedCommands(): Command[];
23
+ getSerializedSvg(): JSX.Element;
24
+ getCommands(): Command[];
25
+ set strokeStyle(style: string);
26
+ set fillStyle(style: string);
27
+ set font(style: string);
28
+ arc(...args: RealP<'arc'>): RealRet<'arc'>;
29
+ arcTo(...args: RealP<'arcTo'>): RealRet<'arcTo'>;
30
+ beginPath(...args: RealP<'beginPath'>): RealRet<'beginPath'>;
31
+ clearRect(...args: RealP<'clearRect'>): RealRet<'clearRect'>;
32
+ closePath(...args: RealP<'closePath'>): RealRet<'closePath'>;
33
+ ellipse(...args: RealP<'ellipse'>): RealRet<'ellipse'>;
34
+ fill(...args: RealP<'fill'>): RealRet<'fill'>;
35
+ fillRect(...args: RealP<'fillRect'>): RealRet<'fillRect'>;
36
+ fillText(...args: RealP<'fillText'>): RealRet<'fillText'>;
37
+ lineTo(...args: RealP<'lineTo'>): RealRet<'lineTo'>;
38
+ measureText(...args: RealP<'measureText'>): {
39
+ width: number;
40
+ height: number;
41
+ };
42
+ moveTo(...args: RealP<'moveTo'>): RealRet<'moveTo'>;
43
+ quadraticCurveTo(...args: RealP<'quadraticCurveTo'>): RealRet<'quadraticCurveTo'>;
44
+ rect(...args: RealP<'rect'>): RealRet<'rect'>;
45
+ restore(...args: RealP<'restore'>): RealRet<'restore'>;
46
+ rotate(...args: RealP<'rotate'>): RealRet<'rotate'>;
47
+ save(...args: RealP<'save'>): RealRet<'save'>;
48
+ setTransform(...args: RealP<'setTransform'>): RealRet<'setTransform'>;
49
+ scale(...args: RealP<'scale'>): RealRet<'scale'>;
50
+ stroke(): RealRet<'stroke'>;
51
+ strokeRect(...args: RealP<'strokeRect'>): RealRet<'strokeRect'>;
52
+ strokeText(...args: RealP<'strokeText'>): RealRet<'strokeText'>;
53
+ transform(...args: RealP<'transform'>): RealRet<'transform'>;
54
+ translate(...args: RealP<'translate'>): RealRet<'translate'>;
55
+ }
56
+ export {};