@jbrowse/core 1.7.11 → 2.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 (204) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail.d.ts +20 -4
  2. package/BaseFeatureWidget/BaseFeatureDetail.js +313 -558
  3. package/BaseFeatureWidget/SequenceFeatureDetails.js +213 -473
  4. package/BaseFeatureWidget/index.d.ts +2 -2
  5. package/BaseFeatureWidget/index.js +88 -124
  6. package/BaseFeatureWidget/types.d.ts +1 -0
  7. package/BaseFeatureWidget/types.js +1 -4
  8. package/BaseFeatureWidget/util.js +40 -75
  9. package/CorePlugin.js +55 -94
  10. package/Plugin.js +9 -34
  11. package/PluginLoader.js +153 -422
  12. package/PluginManager.d.ts +84 -117
  13. package/PluginManager.js +377 -666
  14. package/ReExports/Attributes.d.ts +2 -0
  15. package/ReExports/Attributes.js +5 -0
  16. package/ReExports/BaseCard.d.ts +2 -0
  17. package/ReExports/BaseCard.js +5 -0
  18. package/ReExports/DataGrid.d.ts +2 -0
  19. package/ReExports/DataGrid.js +6 -0
  20. package/ReExports/FeatureDetails.d.ts +2 -0
  21. package/ReExports/FeatureDetails.js +5 -0
  22. package/ReExports/index.js +6 -12
  23. package/ReExports/list.d.ts +5 -0
  24. package/ReExports/list.js +271 -7
  25. package/ReExports/material-ui-colors.d.ts +1 -19
  26. package/ReExports/material-ui-colors.js +16 -158
  27. package/ReExports/modules.d.ts +68 -109
  28. package/ReExports/modules.js +455 -244
  29. package/TextSearch/BaseResults.js +51 -123
  30. package/TextSearch/TextSearchManager.d.ts +3 -1
  31. package/TextSearch/TextSearchManager.js +66 -144
  32. package/assemblyManager/assembly.js +280 -554
  33. package/assemblyManager/assemblyConfigSchema.js +47 -64
  34. package/assemblyManager/assemblyManager.d.ts +12 -10
  35. package/assemblyManager/assemblyManager.js +126 -270
  36. package/assemblyManager/index.js +9 -22
  37. package/configuration/configurationSchema.js +167 -203
  38. package/configuration/configurationSlot.js +248 -326
  39. package/configuration/index.js +19 -35
  40. package/configuration/util.d.ts +1 -1
  41. package/configuration/util.js +131 -173
  42. package/data_adapters/BaseAdapter.d.ts +2 -2
  43. package/data_adapters/BaseAdapter.js +132 -521
  44. package/data_adapters/CytobandAdapter.js +40 -126
  45. package/data_adapters/dataAdapterCache.js +77 -158
  46. package/package.json +16 -18
  47. package/pluggableElementTypes/AdapterType.js +24 -79
  48. package/pluggableElementTypes/AddTrackWorkflowType.d.ts +17 -0
  49. package/pluggableElementTypes/AddTrackWorkflowType.js +20 -0
  50. package/pluggableElementTypes/ConnectionType.js +22 -65
  51. package/pluggableElementTypes/DisplayType.js +35 -82
  52. package/pluggableElementTypes/InternetAccountType.js +23 -64
  53. package/pluggableElementTypes/PluggableElementBase.js +8 -20
  54. package/pluggableElementTypes/RpcMethodType.js +85 -427
  55. package/pluggableElementTypes/TextSearchAdapterType.js +16 -55
  56. package/pluggableElementTypes/TrackType.js +26 -70
  57. package/pluggableElementTypes/ViewType.js +21 -63
  58. package/pluggableElementTypes/WidgetType.js +21 -64
  59. package/pluggableElementTypes/index.d.ts +4 -3
  60. package/pluggableElementTypes/index.js +42 -125
  61. package/pluggableElementTypes/models/BaseConnectionModelFactory.js +28 -43
  62. package/pluggableElementTypes/models/BaseDisplayModel.d.ts +10 -10
  63. package/pluggableElementTypes/models/BaseDisplayModel.js +58 -95
  64. package/pluggableElementTypes/models/BaseTrackModel.d.ts +1 -1
  65. package/pluggableElementTypes/models/BaseTrackModel.js +139 -200
  66. package/pluggableElementTypes/models/BaseViewModel.js +24 -40
  67. package/pluggableElementTypes/models/InternetAccountModel.js +116 -263
  68. package/pluggableElementTypes/models/baseConnectionConfig.js +14 -25
  69. package/pluggableElementTypes/models/baseInternetAccountConfig.js +29 -38
  70. package/pluggableElementTypes/models/baseTrackConfig.js +106 -133
  71. package/pluggableElementTypes/models/index.js +21 -70
  72. package/pluggableElementTypes/renderers/BoxRendererType.js +132 -291
  73. package/pluggableElementTypes/renderers/CircularChordRendererType.js +8 -38
  74. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +60 -192
  75. package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +0 -2
  76. package/pluggableElementTypes/renderers/FeatureRendererType.js +89 -255
  77. package/pluggableElementTypes/renderers/RendererType.js +31 -105
  78. package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +61 -72
  79. package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +2 -2
  80. package/pluggableElementTypes/renderers/ServerSideRendererType.js +112 -265
  81. package/pluggableElementTypes/renderers/index.js +19 -62
  82. package/pluggableElementTypes/renderers/util/serializableFilterChain.js +27 -65
  83. package/rpc/BaseRpcDriver.js +169 -405
  84. package/rpc/MainThreadRpcDriver.js +27 -150
  85. package/rpc/RpcManager.js +58 -159
  86. package/rpc/WebWorkerRpcDriver.js +54 -171
  87. package/rpc/configSchema.js +25 -49
  88. package/rpc/coreRpcMethods.d.ts +1 -3
  89. package/rpc/coreRpcMethods.js +221 -959
  90. package/rpc/remoteAbortSignals.js +46 -70
  91. package/tsconfig.build.tsbuildinfo +1 -1
  92. package/ui/AboutDialog.js +107 -158
  93. package/ui/App.js +157 -261
  94. package/ui/AssemblySelector.d.ts +1 -1
  95. package/ui/AssemblySelector.js +59 -115
  96. package/ui/CascadingMenu.js +100 -199
  97. package/ui/ColorPicker.d.ts +16 -0
  98. package/ui/ColorPicker.js +97 -0
  99. package/ui/Drawer.js +28 -58
  100. package/ui/DrawerWidget.js +109 -209
  101. package/ui/DropDownMenu.d.ts +0 -8
  102. package/ui/DropDownMenu.js +60 -97
  103. package/ui/EditableTypography.d.ts +1 -1
  104. package/ui/EditableTypography.js +87 -155
  105. package/ui/ErrorMessage.js +41 -66
  106. package/ui/FactoryResetDialog.js +24 -57
  107. package/ui/FatalErrorDialog.js +59 -91
  108. package/ui/FileSelector/FileSelector.js +123 -189
  109. package/ui/FileSelector/LocalFileChooser.js +44 -71
  110. package/ui/FileSelector/UrlChooser.js +17 -38
  111. package/ui/FileSelector/index.js +6 -12
  112. package/ui/Icons.d.ts +1 -1
  113. package/ui/Icons.js +45 -69
  114. package/ui/Logo.js +57 -110
  115. package/ui/Menu.d.ts +1 -1
  116. package/ui/Menu.js +232 -355
  117. package/ui/PrerenderedCanvas.js +63 -78
  118. package/ui/ResizeHandle.js +87 -114
  119. package/ui/ReturnToImportFormDialog.js +32 -59
  120. package/ui/SanitizedHTML.js +63 -52
  121. package/ui/Snackbar.js +74 -99
  122. package/ui/SnackbarModel.js +37 -51
  123. package/ui/Tooltip.d.ts +3 -1
  124. package/ui/Tooltip.js +49 -74
  125. package/ui/ViewContainer.js +113 -183
  126. package/ui/colors.d.ts +10 -0
  127. package/ui/colors.js +78 -0
  128. package/ui/index.js +51 -181
  129. package/ui/react-colorful.d.ts +17 -0
  130. package/ui/react-colorful.js +455 -0
  131. package/ui/theme.d.ts +279 -131
  132. package/ui/theme.js +197 -225
  133. package/util/Base1DUtils.d.ts +32 -0
  134. package/util/Base1DUtils.js +174 -0
  135. package/util/Base1DViewModel.d.ts +16 -37
  136. package/util/Base1DViewModel.js +116 -295
  137. package/util/QuickLRU.js +84 -332
  138. package/util/TimeTraveller.d.ts +19 -0
  139. package/util/TimeTraveller.js +86 -0
  140. package/util/aborting.js +49 -127
  141. package/util/analytics.js +91 -154
  142. package/util/blockTypes.js +106 -240
  143. package/util/calculateDynamicBlocks.js +98 -128
  144. package/util/calculateStaticBlocks.js +105 -125
  145. package/util/color/cssColorsLevel4.js +156 -160
  146. package/util/color/index.js +33 -55
  147. package/util/compositeMap.js +49 -333
  148. package/util/formatFastaStrings.js +9 -14
  149. package/util/idMaker.js +18 -31
  150. package/util/index.d.ts +18 -39
  151. package/util/index.js +743 -1236
  152. package/util/io/RemoteFileWithRangeCache.js +88 -257
  153. package/util/io/index.js +95 -169
  154. package/util/jexl.js +60 -115
  155. package/util/jexlStrings.js +24 -29
  156. package/util/layouts/BaseLayout.js +1 -4
  157. package/util/layouts/GranularRectLayout.js +388 -557
  158. package/util/layouts/MultiLayout.js +41 -109
  159. package/util/layouts/PrecomputedLayout.js +56 -114
  160. package/util/layouts/PrecomputedMultiLayout.js +22 -59
  161. package/util/layouts/SceneGraph.js +127 -197
  162. package/util/layouts/index.js +29 -66
  163. package/util/mst-reflection.js +55 -71
  164. package/util/offscreenCanvasPonyfill.js +66 -134
  165. package/util/offscreenCanvasUtils.d.ts +2 -7
  166. package/util/offscreenCanvasUtils.js +49 -146
  167. package/util/range.js +29 -40
  168. package/util/rxjs.js +20 -27
  169. package/util/simpleFeature.js +88 -152
  170. package/util/stats.js +91 -151
  171. package/util/tracks.js +130 -171
  172. package/util/types/index.d.ts +3 -3
  173. package/util/types/index.js +110 -179
  174. package/util/types/mst.d.ts +3 -3
  175. package/util/types/mst.js +91 -142
  176. package/util/types/util.js +1 -4
  177. package/util/when.js +54 -101
  178. package/BaseFeatureWidget/SequenceFeatureDetails.test.js +0 -122
  179. package/BaseFeatureWidget/index.test.js +0 -51
  180. package/TextSearch/BaseResults.test.js +0 -42
  181. package/configuration/configurationSchema.test.js +0 -266
  182. package/configuration/configurationSlot.test.js +0 -69
  183. package/configuration/util.test.js +0 -39
  184. package/data_adapters/BaseAdapter.test.js +0 -200
  185. package/declare.d.js +0 -1
  186. package/pluggableElementTypes/RpcMethodType.test.js +0 -118
  187. package/pluggableElementTypes/renderers/declare.d.js +0 -1
  188. package/pluggableElementTypes/renderers/util/serializableFilterChain.test.js +0 -20
  189. package/rpc/BaseRpcDriver.test.js +0 -540
  190. package/rpc/declaration.d.js +0 -1
  191. package/ui/FatalErrorDialog.test.js +0 -82
  192. package/ui/SanitizedHTML.test.js +0 -36
  193. package/ui/theme.test.js +0 -111
  194. package/util/Base1DViewModel.test.js +0 -130
  195. package/util/calculateDynamicBlocks.test.js +0 -74
  196. package/util/calculateStaticBlocks.test.js +0 -297
  197. package/util/declare.d.js +0 -1
  198. package/util/formatFastaStrings.test.js +0 -40
  199. package/util/index.test.js +0 -213
  200. package/util/jexlStrings.test.js +0 -48
  201. package/util/layouts/GranularRectLayout.test.js +0 -99
  202. package/util/range.test.js +0 -64
  203. package/util/simpleFeature.test.js +0 -34
  204. package/util/stats.test.js +0 -172
@@ -1,144 +1,76 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.createImageBitmap = exports.createCanvas = exports.ImageBitmapType = void 0;
9
- exports.drawImageOntoCanvasContext = drawImageOntoCanvasContext;
10
-
11
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
12
-
13
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
14
-
15
- var _detectNode = _interopRequireDefault(require("detect-node"));
16
-
17
- var _canvasSequencer = require("canvas-sequencer");
18
-
19
2
  // This file is a ponyfill for the HTML5 OffscreenCanvas API.
20
- var createCanvas;
21
- exports.createCanvas = createCanvas;
22
- var createImageBitmap;
23
- /** the JS class (constructor) for offscreen-generated image bitmap data */
24
-
25
- exports.createImageBitmap = createImageBitmap;
26
- var ImageBitmapType;
27
- exports.ImageBitmapType = ImageBitmapType;
28
-
29
- function drawImageOntoCanvasContext( // eslint-disable-next-line @typescript-eslint/no-explicit-any
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.drawImageOntoCanvasContext = exports.ImageBitmapType = exports.createImageBitmap = exports.createCanvas = void 0;
8
+ const detect_node_1 = __importDefault(require("detect-node"));
9
+ const canvas_sequencer_1 = require("canvas-sequencer");
10
+ function drawImageOntoCanvasContext(
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
12
  imageData, context) {
31
- if (imageData.serializedCommands) {
32
- var seq = new _canvasSequencer.CanvasSequence(imageData.serializedCommands);
33
- seq.execute(context);
34
- } else {
35
- context.drawImage(imageData, 0, 0);
36
- }
13
+ if (imageData.serializedCommands) {
14
+ const seq = new canvas_sequencer_1.CanvasSequence(imageData.serializedCommands);
15
+ seq.execute(context);
16
+ }
17
+ else {
18
+ context.drawImage(imageData, 0, 0);
19
+ }
37
20
  }
38
-
39
- var weHave = {
40
- realOffscreenCanvas: typeof OffscreenCanvas === 'function',
41
- node: _detectNode.default
21
+ exports.drawImageOntoCanvasContext = drawImageOntoCanvasContext;
22
+ const weHave = {
23
+ realOffscreenCanvas: typeof OffscreenCanvas === 'function',
24
+ node: detect_node_1.default,
42
25
  };
43
-
44
26
  if (weHave.realOffscreenCanvas) {
45
- exports.createCanvas = createCanvas = function createCanvas(width, height) {
46
- return new OffscreenCanvas(width, height);
47
- }; // eslint-disable-next-line no-restricted-globals
48
-
49
-
50
- exports.createImageBitmap = createImageBitmap = window.createImageBitmap || self.createImageBitmap; // eslint-disable-next-line no-restricted-globals
51
-
52
- exports.ImageBitmapType = ImageBitmapType = window.ImageBitmap || self.ImageBitmap;
53
- } else if (weHave.node) {
54
- // use node-canvas if we are running in node (i.e. automated tests)
55
- exports.createCanvas = createCanvas = function createCanvas() {
56
- // @ts-ignore
57
- // eslint-disable-next-line no-undef
58
- return nodeCreateCanvas.apply(void 0, arguments);
59
- };
60
-
61
- exports.createImageBitmap = createImageBitmap = /*#__PURE__*/function () {
62
- var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(canvas) {
63
- var dataUri,
64
- img,
65
- _args = arguments;
66
- return _regenerator.default.wrap(function _callee$(_context) {
67
- while (1) {
68
- switch (_context.prev = _context.next) {
69
- case 0:
70
- if (!(_args.length <= 1 ? 0 : _args.length - 1)) {
71
- _context.next = 2;
72
- break;
73
- }
74
-
75
- throw new Error('only one-argument uses of createImageBitmap are supported by the node offscreencanvas ponyfill');
76
-
77
- case 2:
78
- dataUri = canvas.toDataURL(); // @ts-ignore
79
- // eslint-disable-next-line no-undef
80
-
81
- img = new nodeImage();
82
- return _context.abrupt("return", new Promise(function (resolve, reject) {
83
- img.onload = function () {
84
- return resolve(img);
85
- };
86
-
87
- img.onerror = reject;
88
- img.src = dataUri;
89
- }));
90
-
91
- case 5:
92
- case "end":
93
- return _context.stop();
94
- }
27
+ exports.createCanvas = (width, height) => new OffscreenCanvas(width, height);
28
+ // eslint-disable-next-line no-restricted-globals
29
+ exports.createImageBitmap = window.createImageBitmap || self.createImageBitmap;
30
+ // eslint-disable-next-line no-restricted-globals
31
+ exports.ImageBitmapType = window.ImageBitmap || self.ImageBitmap;
32
+ }
33
+ else if (weHave.node) {
34
+ // use node-canvas if we are running in node (i.e. automated tests)
35
+ exports.createCanvas = (...args) => {
36
+ // @ts-ignore
37
+ // eslint-disable-next-line no-undef
38
+ return nodeCreateCanvas(...args);
39
+ };
40
+ exports.createImageBitmap = async (canvas, ...otherargs) => {
41
+ if (otherargs.length) {
42
+ throw new Error('only one-argument uses of createImageBitmap are supported by the node offscreencanvas ponyfill');
95
43
  }
96
- }, _callee);
97
- }));
98
-
99
- return function createImageBitmap(_x) {
100
- return _ref.apply(this, arguments);
44
+ const dataUri = canvas.toDataURL();
45
+ // @ts-ignore
46
+ // eslint-disable-next-line no-undef
47
+ const img = new nodeImage();
48
+ return new Promise((resolve, reject) => {
49
+ img.onload = () => resolve(img);
50
+ img.onerror = reject;
51
+ img.src = dataUri;
52
+ });
101
53
  };
102
- }();
103
- } else {
104
- exports.createCanvas = createCanvas = function createCanvas(width, height) {
105
- var context = new _canvasSequencer.CanvasSequence();
106
- return {
107
- width: width,
108
- height: height,
109
- getContext: function getContext() {
110
- return context;
111
- }
54
+ }
55
+ else {
56
+ exports.createCanvas = (width, height) => {
57
+ const context = new canvas_sequencer_1.CanvasSequence();
58
+ return {
59
+ width,
60
+ height,
61
+ getContext() {
62
+ return context;
63
+ },
64
+ };
112
65
  };
113
- };
114
-
115
- exports.createImageBitmap = createImageBitmap = /*#__PURE__*/function () {
116
- var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(canvas) {
117
- var ctx;
118
- return _regenerator.default.wrap(function _callee2$(_context2) {
119
- while (1) {
120
- switch (_context2.prev = _context2.next) {
121
- case 0:
122
- ctx = canvas.getContext('2d');
123
- return _context2.abrupt("return", {
124
- height: canvas.height,
125
- width: canvas.width,
126
- serializedCommands: ctx.toJSON(),
127
- containsNoTransferables: true
128
- });
129
-
130
- case 2:
131
- case "end":
132
- return _context2.stop();
133
- }
134
- }
135
- }, _callee2);
136
- }));
137
-
138
- return function createImageBitmap(_x2) {
139
- return _ref2.apply(this, arguments);
66
+ exports.createImageBitmap = async (canvas) => {
67
+ const ctx = canvas.getContext('2d');
68
+ return {
69
+ height: canvas.height,
70
+ width: canvas.width,
71
+ serializedCommands: ctx.toJSON(),
72
+ containsNoTransferables: true,
73
+ };
140
74
  };
141
- }();
142
-
143
- exports.ImageBitmapType = ImageBitmapType = String;
144
- }
75
+ exports.ImageBitmapType = String;
76
+ }
@@ -1,19 +1,14 @@
1
1
  /// <reference types="react" />
2
+ export declare type RenderReturn = Record<string, unknown>;
2
3
  export declare function renderToAbstractCanvas(width: number, height: number, opts: {
3
4
  exportSVG?: {
4
5
  rasterizeLayers?: boolean;
5
6
  };
6
7
  highResolutionScaling: number;
7
- }, cb: Function): Promise<{
8
+ }, cb: (ctx: CanvasRenderingContext2D) => Promise<RenderReturn | void> | RenderReturn | void): Promise<{
8
9
  canvasRecordedData: any;
9
- reactElement?: undefined;
10
- imageData?: undefined;
11
10
  } | {
12
11
  reactElement: JSX.Element;
13
- canvasRecordedData?: undefined;
14
- imageData?: undefined;
15
12
  } | {
16
13
  imageData: any;
17
- canvasRecordedData?: undefined;
18
- reactElement?: undefined;
19
14
  }>;
@@ -1,152 +1,55 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.renderToAbstractCanvas = renderToAbstractCanvas;
9
-
10
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
-
14
- var _react = _interopRequireDefault(require("react"));
15
-
16
- var _offscreenCanvasPonyfill = require("./offscreenCanvasPonyfill");
17
-
18
- var _canvasSequencer = require("canvas-sequencer");
19
-
20
- var _index = require("./index");
21
-
22
- function renderToAbstractCanvas(_x, _x2, _x3, _x4) {
23
- return _renderToAbstractCanvas.apply(this, arguments);
24
- }
25
-
26
- function _renderToAbstractCanvas() {
27
- _renderToAbstractCanvas = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(width, height, opts, cb) {
28
- var exportSVG, _opts$highResolutionS, highResolutionScaling, fakeCtx, scale, canvas, ctx, _canvas, _ctx;
29
-
30
- return _regenerator.default.wrap(function _callee$(_context) {
31
- while (1) {
32
- switch (_context.prev = _context.next) {
33
- case 0:
34
- exportSVG = opts.exportSVG, _opts$highResolutionS = opts.highResolutionScaling, highResolutionScaling = _opts$highResolutionS === void 0 ? 1 : _opts$highResolutionS;
35
-
36
- if (!exportSVG) {
37
- _context.next = 37;
38
- break;
39
- }
40
-
41
- if (exportSVG.rasterizeLayers) {
42
- _context.next = 9;
43
- break;
44
- }
45
-
46
- fakeCtx = new _canvasSequencer.CanvasSequence();
47
- _context.next = 6;
48
- return cb(fakeCtx);
49
-
50
- case 6:
51
- return _context.abrupt("return", {
52
- canvasRecordedData: fakeCtx.toJSON()
53
- });
54
-
55
- case 9:
56
- scale = 4;
57
- canvas = (0, _offscreenCanvasPonyfill.createCanvas)(Math.ceil(width * scale), height * scale);
58
- ctx = canvas.getContext('2d');
59
-
60
- if (ctx) {
61
- _context.next = 14;
62
- break;
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.renderToAbstractCanvas = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const canvas_sequencer_1 = require("canvas-sequencer");
9
+ // locals
10
+ const offscreenCanvasPonyfill_1 = require("./offscreenCanvasPonyfill");
11
+ const index_1 = require("./index");
12
+ async function renderToAbstractCanvas(width, height, opts, cb) {
13
+ const { exportSVG, highResolutionScaling: scaling = 1 } = opts;
14
+ if (exportSVG) {
15
+ if (!exportSVG.rasterizeLayers) {
16
+ const fakeCtx = new canvas_sequencer_1.CanvasSequence();
17
+ const result = await cb(fakeCtx);
18
+ return {
19
+ ...result,
20
+ canvasRecordedData: fakeCtx.toJSON(),
21
+ };
22
+ }
23
+ else {
24
+ const scale = 4;
25
+ const canvas = (0, offscreenCanvasPonyfill_1.createCanvas)(Math.ceil(width * scale), height * scale);
26
+ const ctx = canvas.getContext('2d');
27
+ if (!ctx) {
28
+ throw new Error('2d canvas rendering not supported on this platform');
63
29
  }
64
-
65
- throw new Error('2d canvas rendering not supported on this platform');
66
-
67
- case 14:
68
30
  ctx.scale(scale, scale);
69
- _context.next = 17;
70
- return cb(ctx);
71
-
72
- case 17:
73
- _context.t0 = _react.default;
74
- _context.t1 = width;
75
- _context.t2 = height;
76
-
77
- if (!('convertToBlob' in canvas)) {
78
- _context.next = 30;
79
- break;
80
- }
81
-
82
- _context.t4 = _index.blobToDataURL;
83
- _context.next = 24;
84
- return canvas.convertToBlob({
85
- type: 'image/png'
86
- });
87
-
88
- case 24:
89
- _context.t5 = _context.sent;
90
- _context.next = 27;
91
- return (0, _context.t4)(_context.t5);
92
-
93
- case 27:
94
- _context.t3 = _context.sent;
95
- _context.next = 31;
96
- break;
97
-
98
- case 30:
99
- _context.t3 = canvas.toDataURL();
100
-
101
- case 31:
102
- _context.t6 = _context.t3;
103
- _context.t7 = {
104
- width: _context.t1,
105
- height: _context.t2,
106
- xlinkHref: _context.t6
31
+ const result = await cb(ctx);
32
+ // two methods needed for converting canvas to PNG, one for webworker
33
+ // offscreen canvas, one for main thread
34
+ return {
35
+ ...result,
36
+ reactElement: (react_1.default.createElement("image", { width: width, height: height, xlinkHref: 'convertToBlob' in canvas
37
+ ? await (0, index_1.blobToDataURL)(await canvas.convertToBlob({
38
+ type: 'image/png',
39
+ }))
40
+ : canvas.toDataURL() })),
107
41
  };
108
- _context.t8 = _context.t0.createElement.call(_context.t0, "image", _context.t7);
109
- return _context.abrupt("return", {
110
- reactElement: _context.t8
111
- });
112
-
113
- case 35:
114
- _context.next = 48;
115
- break;
116
-
117
- case 37:
118
- _canvas = (0, _offscreenCanvasPonyfill.createCanvas)(Math.ceil(width * highResolutionScaling), height * highResolutionScaling);
119
- _ctx = _canvas.getContext('2d');
120
-
121
- if (_ctx) {
122
- _context.next = 41;
123
- break;
124
- }
125
-
42
+ }
43
+ }
44
+ else {
45
+ const canvas = (0, offscreenCanvasPonyfill_1.createCanvas)(Math.ceil(width * scaling), height * scaling);
46
+ const ctx = canvas.getContext('2d');
47
+ if (!ctx) {
126
48
  throw new Error('2d canvas rendering not supported on this platform');
127
-
128
- case 41:
129
- _ctx.scale(highResolutionScaling, highResolutionScaling);
130
-
131
- _context.next = 44;
132
- return cb(_ctx);
133
-
134
- case 44:
135
- _context.next = 46;
136
- return (0, _offscreenCanvasPonyfill.createImageBitmap)(_canvas);
137
-
138
- case 46:
139
- _context.t9 = _context.sent;
140
- return _context.abrupt("return", {
141
- imageData: _context.t9
142
- });
143
-
144
- case 48:
145
- case "end":
146
- return _context.stop();
147
49
  }
148
- }
149
- }, _callee);
150
- }));
151
- return _renderToAbstractCanvas.apply(this, arguments);
152
- }
50
+ ctx.scale(scaling, scaling);
51
+ const result = await cb(ctx);
52
+ return { ...result, imageData: await (0, offscreenCanvasPonyfill_1.createImageBitmap)(canvas) };
53
+ }
54
+ }
55
+ exports.renderToAbstractCanvas = renderToAbstractCanvas;
package/util/range.js CHANGED
@@ -1,12 +1,6 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.doesIntersect2 = doesIntersect2;
7
- exports.intersection2 = intersection2;
8
- exports.isContainedWithin = isContainedWithin;
9
-
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isContainedWithin = exports.doesIntersect2 = exports.intersection2 = void 0;
10
4
  /**
11
5
  * fast low-level intersection of 2 coordinate ranges. assumes interbase coordinates.
12
6
  *
@@ -15,33 +9,30 @@ exports.isContainedWithin = isContainedWithin;
15
9
  * @returns array of [left, right], or [] if the ranges do not intersect. the choice of [] is because it allows destructuring array assignment without check for undefined return
16
10
  */
17
11
  function intersection2(left1, right1, left2, right2) {
18
- // this code is verbose because "if" statements are faster than Math.min and Math.max
19
- if (right1 > left2 && left1 < right2 && right2 - left2 && right1 - left1) {
20
- if (left1 > left2) {
21
- if (right1 < right2) {
22
- // 1 |-------|
23
- // |------------|
24
- return [left1, right1];
25
- } // 2 |----|
26
- // |------|
27
-
28
-
29
- return [left1, right2];
12
+ // this code is verbose because "if" statements are faster than Math.min and Math.max
13
+ if (right1 > left2 && left1 < right2 && right2 - left2 && right1 - left1) {
14
+ if (left1 > left2) {
15
+ if (right1 < right2) {
16
+ // 1 |-------|
17
+ // |------------|
18
+ return [left1, right1];
19
+ }
20
+ // 2 |----|
21
+ // |------|
22
+ return [left1, right2];
23
+ }
24
+ if (right1 < right2) {
25
+ // 3 |-----|
26
+ // |------|
27
+ return [left2, right1];
28
+ }
29
+ // 4 |------------|
30
+ // |-------|
31
+ return [left2, right2];
30
32
  }
31
-
32
- if (right1 < right2) {
33
- // 3 |-----|
34
- // |------|
35
- return [left2, right1];
36
- } // 4 |------------|
37
- // |-------|
38
-
39
-
40
- return [left2, right2];
41
- }
42
-
43
- return [];
33
+ return [];
44
34
  }
35
+ exports.intersection2 = intersection2;
45
36
  /**
46
37
  * Return whether 2 interbase coordinate ranges intersect.
47
38
  *
@@ -52,11 +43,10 @@ function intersection2(left1, right1, left2, right2) {
52
43
  *
53
44
  * @returns true if the two ranges intersect
54
45
  */
55
-
56
-
57
46
  function doesIntersect2(left1, right1, left2, right2) {
58
- return right1 > left2 && left1 < right2;
47
+ return right1 > left2 && left1 < right2;
59
48
  }
49
+ exports.doesIntersect2 = doesIntersect2;
60
50
  /**
61
51
  * Return whether the first region is completely contained within the second region
62
52
  *
@@ -65,8 +55,7 @@ function doesIntersect2(left1, right1, left2, right2) {
65
55
  * @param left2 - candidate outer region left
66
56
  * @param right2 - candidate outer region right
67
57
  */
68
-
69
-
70
58
  function isContainedWithin(left1, right1, left2, right2) {
71
- return left2 <= left1 && right2 >= right1;
72
- }
59
+ return left2 <= left1 && right2 >= right1;
60
+ }
61
+ exports.isContainedWithin = isContainedWithin;
package/util/rxjs.js CHANGED
@@ -1,34 +1,27 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ObservableCreate = ObservableCreate;
7
-
8
- var _rxjs = require("rxjs");
9
-
10
- var _operators = require("rxjs/operators");
11
-
12
- var _ = require(".");
13
-
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObservableCreate = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const _1 = require(".");
14
7
  /**
15
8
  * Wrapper for rxjs Observable.create with improved error handling and
16
9
  * aborting support
17
10
  * @param func - observer function, could be async
18
11
  */
19
12
  function ObservableCreate(func, signal) {
20
- return _rxjs.Observable.create(function (observer) {
21
- try {
22
- var ret = func(observer); // catch async errors
23
-
24
- if (ret && ret.catch) {
25
- ret.catch(function (error) {
26
- return observer.error(error);
27
- });
28
- }
29
- } catch (error) {
30
- // catch sync errors
31
- observer.error(error);
32
- }
33
- }).pipe((0, _operators.takeUntil)((0, _.observeAbortSignal)(signal)));
34
- }
13
+ return rxjs_1.Observable.create((observer) => {
14
+ try {
15
+ const ret = func(observer);
16
+ // catch async errors
17
+ if (ret && ret.catch) {
18
+ ret.catch(error => observer.error(error));
19
+ }
20
+ }
21
+ catch (error) {
22
+ // catch sync errors
23
+ observer.error(error);
24
+ }
25
+ }).pipe((0, operators_1.takeUntil)((0, _1.observeAbortSignal)(signal)));
26
+ }
27
+ exports.ObservableCreate = ObservableCreate;