@jbrowse/core 1.7.7 → 1.7.10

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 (53) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail.d.ts +3 -6
  2. package/BaseFeatureWidget/BaseFeatureDetail.js +158 -103
  3. package/BaseFeatureWidget/index.d.ts +23 -2
  4. package/BaseFeatureWidget/index.js +98 -3
  5. package/assemblyManager/assemblyManager.d.ts +1 -1
  6. package/assemblyManager/assemblyManager.js +21 -27
  7. package/package.json +6 -2
  8. package/pluggableElementTypes/models/InternetAccountModel.d.ts +2 -2
  9. package/pluggableElementTypes/models/baseTrackConfig.js +20 -13
  10. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +6 -14
  11. package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +6 -0
  12. package/pluggableElementTypes/renderers/ServerSideRendererType.js +44 -2
  13. package/pluggableElementTypes/renderers/declare.d.js +1 -0
  14. package/tsconfig.build.tsbuildinfo +1 -1
  15. package/ui/AboutDialog.d.ts +1 -1
  16. package/ui/AboutDialog.js +24 -7
  17. package/ui/CascadingMenu.d.ts +9 -0
  18. package/ui/CascadingMenu.js +211 -0
  19. package/ui/Menu.d.ts +10 -0
  20. package/ui/Menu.js +9 -14
  21. package/ui/SanitizedHTML.js +26 -4
  22. package/ui/SnackbarModel.d.ts +2 -2
  23. package/ui/index.d.ts +1 -0
  24. package/ui/index.js +9 -0
  25. package/util/declare.d.js +1 -0
  26. package/util/index.d.ts +3 -0
  27. package/util/index.js +35 -1
  28. package/util/jexl.js +42 -43
  29. package/util/offscreenCanvasPonyfill.d.ts +8 -1
  30. package/util/offscreenCanvasPonyfill.js +140 -12
  31. package/util/offscreenCanvasUtils.d.ts +19 -1
  32. package/util/offscreenCanvasUtils.js +146 -12
  33. package/util/types/index.d.ts +1 -1
  34. package/util/types/mst.d.ts +9 -9
  35. package/util/offscreenCanvas/Canvas2DContextShim/Canvas2DContextShim.test.js +0 -15
  36. package/util/offscreenCanvas/Canvas2DContextShim/context.d.ts +0 -56
  37. package/util/offscreenCanvas/Canvas2DContextShim/context.js +0 -356
  38. package/util/offscreenCanvas/Canvas2DContextShim/index.d.ts +0 -2
  39. package/util/offscreenCanvas/Canvas2DContextShim/index.js +0 -13
  40. package/util/offscreenCanvas/Canvas2DContextShim/svg.d.ts +0 -3
  41. package/util/offscreenCanvas/Canvas2DContextShim/svg.js +0 -210
  42. package/util/offscreenCanvas/Canvas2DContextShim/types.d.ts +0 -50
  43. package/util/offscreenCanvas/Canvas2DContextShim/types.js +0 -59
  44. package/util/offscreenCanvas/Canvas2DContextShim/util.d.ts +0 -12
  45. package/util/offscreenCanvas/Canvas2DContextShim/util.js +0 -91
  46. package/util/offscreenCanvas/CanvasShim.d.ts +0 -11
  47. package/util/offscreenCanvas/CanvasShim.js +0 -54
  48. package/util/offscreenCanvas/index.d.ts +0 -14
  49. package/util/offscreenCanvas/index.js +0 -170
  50. package/util/offscreenCanvas/ponyfill.d.ts +0 -6
  51. package/util/offscreenCanvas/ponyfill.js +0 -145
  52. package/util/offscreenCanvas/types.d.ts +0 -16
  53. package/util/offscreenCanvas/types.js +0 -14
@@ -148,33 +148,30 @@ function assemblyManagerFactory(assemblyConfigType, pluginManager) {
148
148
  }))();
149
149
  },
150
150
  getRefNameMapForAdapter: function getRefNameMapForAdapter(adapterConf, assemblyName, opts) {
151
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
152
- var _self$get;
151
+ var _this = this;
153
152
 
153
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
154
+ var asm;
154
155
  return _regenerator.default.wrap(function _callee2$(_context2) {
155
156
  while (1) {
156
157
  switch (_context2.prev = _context2.next) {
157
158
  case 0:
158
159
  if (!assemblyName) {
159
- _context2.next = 4;
160
+ _context2.next = 5;
160
161
  break;
161
162
  }
162
163
 
163
164
  _context2.next = 3;
164
- return (0, _util.when)(function () {
165
- return Boolean(self.get(assemblyName));
166
- }, {
167
- signal: opts.signal,
168
- name: 'when assembly ready'
169
- });
165
+ return _this.waitForAssembly(assemblyName);
170
166
 
171
167
  case 3:
172
- return _context2.abrupt("return", (_self$get = self.get(assemblyName)) === null || _self$get === void 0 ? void 0 : _self$get.getRefNameMapForAdapter(adapterConf, opts));
168
+ asm = _context2.sent;
169
+ return _context2.abrupt("return", asm === null || asm === void 0 ? void 0 : asm.getRefNameMapForAdapter(adapterConf, opts));
173
170
 
174
- case 4:
171
+ case 5:
175
172
  return _context2.abrupt("return", {});
176
173
 
177
- case 5:
174
+ case 6:
178
175
  case "end":
179
176
  return _context2.stop();
180
177
  }
@@ -183,33 +180,30 @@ function assemblyManagerFactory(assemblyConfigType, pluginManager) {
183
180
  }))();
184
181
  },
185
182
  getReverseRefNameMapForAdapter: function getReverseRefNameMapForAdapter(adapterConf, assemblyName, opts) {
186
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
187
- var _self$get2;
183
+ var _this2 = this;
188
184
 
185
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
186
+ var asm;
189
187
  return _regenerator.default.wrap(function _callee3$(_context3) {
190
188
  while (1) {
191
189
  switch (_context3.prev = _context3.next) {
192
190
  case 0:
193
191
  if (!assemblyName) {
194
- _context3.next = 4;
192
+ _context3.next = 5;
195
193
  break;
196
194
  }
197
195
 
198
196
  _context3.next = 3;
199
- return (0, _util.when)(function () {
200
- return Boolean(self.get(assemblyName));
201
- }, {
202
- signal: opts.signal,
203
- name: 'when assembly ready'
204
- });
197
+ return _this2.waitForAssembly(assemblyName);
205
198
 
206
199
  case 3:
207
- return _context3.abrupt("return", (_self$get2 = self.get(assemblyName)) === null || _self$get2 === void 0 ? void 0 : _self$get2.getReverseRefNameMapForAdapter(adapterConf, opts));
200
+ asm = _context3.sent;
201
+ return _context3.abrupt("return", asm === null || asm === void 0 ? void 0 : asm.getReverseRefNameMapForAdapter(adapterConf, opts));
208
202
 
209
- case 4:
203
+ case 5:
210
204
  return _context3.abrupt("return", {});
211
205
 
212
- case 5:
206
+ case 6:
213
207
  case "end":
214
208
  return _context3.stop();
215
209
  }
@@ -241,7 +235,7 @@ function assemblyManagerFactory(assemblyConfigType, pluginManager) {
241
235
  self.assemblies.remove(asm);
242
236
  },
243
237
  afterAttach: function afterAttach() {
244
- var _this = this;
238
+ var _this3 = this;
245
239
 
246
240
  (0, _mobxStateTree.addDisposer)(self, (0, _mobx.reaction)( // have to slice it to be properly reacted to
247
241
  function () {
@@ -249,7 +243,7 @@ function assemblyManagerFactory(assemblyConfigType, pluginManager) {
249
243
  }, function (assemblyConfigs) {
250
244
  self.assemblies.forEach(function (asm) {
251
245
  if (!asm.configuration) {
252
- _this.removeAssembly(asm);
246
+ _this3.removeAssembly(asm);
253
247
  }
254
248
  });
255
249
  assemblyConfigs.forEach(function (assemblyConfig) {
@@ -258,7 +252,7 @@ function assemblyManagerFactory(assemblyConfigType, pluginManager) {
258
252
  });
259
253
 
260
254
  if (existingAssemblyIdx === -1) {
261
- _this.addAssembly(assemblyConfig);
255
+ _this3.addAssembly(assemblyConfig);
262
256
  }
263
257
  });
264
258
  }, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/core",
3
- "version": "1.7.7",
3
+ "version": "1.7.10",
4
4
  "description": "JBrowse 2 core libraries used by plugins",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -33,6 +33,9 @@
33
33
  "@material-ui/icons": "^4.0.1",
34
34
  "abortable-promise-cache": "^1.5.0",
35
35
  "canvas": "^2.8.0",
36
+ "canvas-sequencer": "^3.1.0",
37
+ "canvas2svg": "^1.0.16",
38
+ "clone": "^2.1.2",
36
39
  "clsx": "^1.0.4",
37
40
  "color": "^3.1.3",
38
41
  "copy-to-clipboard": "^3.3.1",
@@ -48,6 +51,7 @@
48
51
  "json-stable-stringify": "^1.0.1",
49
52
  "librpc-web-mod": "^1.1.5",
50
53
  "load-script2": "^2.0.5",
54
+ "material-ui-popup-state": "^1.9.3",
51
55
  "object.fromentries": "^2.0.0",
52
56
  "rbush": "^3.0.1",
53
57
  "react-error-boundary": "^3.0.0",
@@ -72,5 +76,5 @@
72
76
  "access": "public",
73
77
  "directory": "dist"
74
78
  },
75
- "gitHead": "2c26e04ae942c380bf2f5b79ef7a49cc32b7bfed"
79
+ "gitHead": "02d8c1e88e5603ea5855faed4ccb814e28071b32"
76
80
  }
@@ -69,7 +69,7 @@ export declare const InternetAccount: import("mobx-state-tree").IModelType<{
69
69
  * @param location - UriLocation of the resource
70
70
  * @returns A promise for the token
71
71
  */
72
- getToken(location?: UriLocation | undefined): Promise<string>;
72
+ getToken(location?: UriLocation): Promise<string>;
73
73
  } & {
74
74
  addAuthHeaderToInit(init: RequestInit | undefined, token: string): {
75
75
  headers: Headers;
@@ -107,7 +107,7 @@ export declare const InternetAccount: import("mobx-state-tree").IModelType<{
107
107
  * @param location - UriLocation of the resource
108
108
  * @returns A function that can be used to fetch
109
109
  */
110
- getFetcher(location?: UriLocation | undefined): (input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>;
110
+ getFetcher(location?: UriLocation): (input: RequestInfo, init?: RequestInit) => Promise<Response>;
111
111
  } & {
112
112
  /**
113
113
  * Gets a filehandle that uses a fetch that adds auth headers
@@ -58,19 +58,26 @@ function createBaseTrackConfig(pluginManager) {
58
58
  },
59
59
  textSearchAdapter: pluginManager.pluggableConfigSchemaType('text search adapter')
60
60
  }),
61
- displays: _mobxStateTree.types.array(pluginManager.pluggableConfigSchemaType('display')) // see corresponding entry in circular-view ChordTrack
62
- // no config slot editor exists for this at the time being
63
- // configRelationships: {
64
- // type: 'configRelationships',
65
- // model: types.array(
66
- // types.model('Relationship', {
67
- // type: types.string,
68
- // target: types.maybe(types.reference(base)),
69
- // }),
70
- // ),
71
- // defaultValue: [],
72
- // },
73
-
61
+ displays: _mobxStateTree.types.array(pluginManager.pluggableConfigSchemaType('display')),
62
+ formatDetails: (0, _configuration.ConfigurationSchema)('FormatDetails', {
63
+ feature: {
64
+ type: 'frozen',
65
+ description: 'adds extra fields to the feature details',
66
+ defaultValue: {},
67
+ contextVariable: ['feature']
68
+ },
69
+ subfeatures: {
70
+ type: 'frozen',
71
+ description: 'adds extra fields to the subfeatures of a feature',
72
+ defaultValue: {},
73
+ contextVariable: ['feature']
74
+ },
75
+ depth: {
76
+ type: 'number',
77
+ defaultValue: 2,
78
+ description: 'depth to iterate on subfeatures'
79
+ }
80
+ })
74
81
  }, {
75
82
  preProcessSnapshot: function preProcessSnapshot(s) {
76
83
  var snap = JSON.parse(JSON.stringify(s));
@@ -143,11 +143,7 @@ var ComparativeServerSideRenderer = /*#__PURE__*/function (_ServerSideRenderer)
143
143
  }, {
144
144
  key: "featurePassesFilters",
145
145
  value: function featurePassesFilters(renderArgs, feature) {
146
- if (!renderArgs.filters) {
147
- return true;
148
- }
149
-
150
- return renderArgs.filters.passes(feature, renderArgs);
146
+ return renderArgs.filters ? renderArgs.filters.passes(feature, renderArgs) : true;
151
147
  }
152
148
  }, {
153
149
  key: "getFeatures",
@@ -155,13 +151,13 @@ var ComparativeServerSideRenderer = /*#__PURE__*/function (_ServerSideRenderer)
155
151
  var _getFeatures = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(renderArgs) {
156
152
  var _this = this;
157
153
 
158
- var signal, sessionId, adapterConfig, _yield$getAdapter, dataAdapter, regions, requestRegions, featureObservable;
154
+ var sessionId, adapterConfig, _yield$getAdapter, dataAdapter, regions, requestRegions;
159
155
 
160
156
  return _regenerator.default.wrap(function _callee3$(_context3) {
161
157
  while (1) {
162
158
  switch (_context3.prev = _context3.next) {
163
159
  case 0:
164
- signal = renderArgs.signal, sessionId = renderArgs.sessionId, adapterConfig = renderArgs.adapterConfig;
160
+ sessionId = renderArgs.sessionId, adapterConfig = renderArgs.adapterConfig;
165
161
  _context3.next = 3;
166
162
  return (0, _dataAdapterCache.getAdapter)(this.pluginManager, sessionId, adapterConfig);
167
163
 
@@ -197,15 +193,11 @@ var ComparativeServerSideRenderer = /*#__PURE__*/function (_ServerSideRenderer)
197
193
  return requestRegion;
198
194
  }); // note that getFeaturesInMultipleRegions does not do glyph expansion
199
195
 
200
- featureObservable = dataAdapter.getFeaturesInMultipleRegions(requestRegions, {
201
- signal: signal
202
- });
203
- return _context3.abrupt("return", featureObservable.pipe( // @ts-ignore
204
- (0, _operators.filter)(function (feature) {
205
- return _this.featurePassesFilters(renderArgs, feature);
196
+ return _context3.abrupt("return", dataAdapter.getFeaturesInMultipleRegions(requestRegions, renderArgs).pipe((0, _operators.filter)(function (f) {
197
+ return _this.featurePassesFilters(renderArgs, f);
206
198
  }), (0, _operators.toArray)()).toPromise());
207
199
 
208
- case 13:
200
+ case 12:
209
201
  case "end":
210
202
  return _context3.stop();
211
203
  }
@@ -29,6 +29,12 @@ export type { RenderResults };
29
29
  export interface ResultsSerialized extends Omit<RenderResults, 'reactElement'> {
30
30
  html: string;
31
31
  }
32
+ export interface ResultsSerializedSvgExport extends ResultsSerialized {
33
+ canvasRecordedData: unknown;
34
+ width: number;
35
+ height: number;
36
+ reactElement: unknown;
37
+ }
32
38
  export declare type ResultsDeserialized = RenderResults;
33
39
  export default class ServerSideRenderer extends RendererType {
34
40
  /**
@@ -2,6 +2,8 @@
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
  });
@@ -31,6 +33,8 @@ var _react = _interopRequireDefault(require("react"));
31
33
 
32
34
  var _styles = require("@material-ui/core/styles");
33
35
 
36
+ var _canvasSequencer = require("canvas-sequencer");
37
+
34
38
  var _server = require("react-dom/server");
35
39
 
36
40
  var _mobxStateTree = require("mobx-state-tree");
@@ -47,6 +51,10 @@ var _ServerSideRenderedContent = _interopRequireDefault(require("./ServerSideRen
47
51
 
48
52
  var _excluded = ["html"];
49
53
 
54
+ 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); }
55
+
56
+ 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; }
57
+
50
58
  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; }
51
59
 
52
60
  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; }
@@ -55,6 +63,10 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
55
63
 
56
64
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
57
65
 
66
+ function isSvgExport(elt) {
67
+ return 'canvasRecordedData' in elt;
68
+ }
69
+
58
70
  var ServerSideRenderer = /*#__PURE__*/function (_RendererType) {
59
71
  (0, _inherits2.default)(ServerSideRenderer, _RendererType);
60
72
 
@@ -164,13 +176,43 @@ var ServerSideRenderer = /*#__PURE__*/function (_RendererType) {
164
176
  key: "renderInClient",
165
177
  value: function () {
166
178
  var _renderInClient = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(rpcManager, args) {
179
+ var results, width, height, canvasRecordedData, C2S, ctx, seq, str;
167
180
  return _regenerator.default.wrap(function _callee$(_context) {
168
181
  while (1) {
169
182
  switch (_context.prev = _context.next) {
170
183
  case 0:
171
- return _context.abrupt("return", rpcManager.call(args.sessionId, 'CoreRender', args));
184
+ _context.next = 2;
185
+ return rpcManager.call(args.sessionId, 'CoreRender', args);
186
+
187
+ case 2:
188
+ results = _context.sent;
189
+
190
+ if (!isSvgExport(results)) {
191
+ _context.next = 14;
192
+ break;
193
+ }
194
+
195
+ width = results.width, height = results.height, canvasRecordedData = results.canvasRecordedData;
196
+ _context.next = 7;
197
+ return Promise.resolve().then(function () {
198
+ return _interopRequireWildcard(require('canvas2svg'));
199
+ });
200
+
201
+ case 7:
202
+ C2S = _context.sent;
203
+ ctx = new C2S.default(width, height);
204
+ seq = new _canvasSequencer.CanvasSequence(canvasRecordedData);
205
+ seq.execute(ctx);
206
+ str = ctx.getSvg(); // innerHTML strips the outer <svg> element from returned data, we add
207
+ // our own <svg> element in the view's SVG export
208
+
209
+ results.html = str.innerHTML;
210
+ delete results.reactElement;
211
+
212
+ case 14:
213
+ return _context.abrupt("return", results);
172
214
 
173
- case 1:
215
+ case 15:
174
216
  case "end":
175
217
  return _context.stop();
176
218
  }
@@ -0,0 +1 @@
1
+ "use strict";