@jbrowse/plugin-wiggle 1.6.8 → 1.7.1

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 (67) hide show
  1. package/dist/BigWigAdapter/BigWigAdapter.d.ts +24 -24
  2. package/dist/BigWigAdapter/BigWigAdapter.js +288 -0
  3. package/dist/BigWigAdapter/BigWigAdapter.test.js +157 -0
  4. package/dist/BigWigAdapter/configSchema.d.ts +2 -2
  5. package/dist/BigWigAdapter/configSchema.js +22 -0
  6. package/dist/BigWigAdapter/index.d.ts +1 -1
  7. package/dist/BigWigAdapter/index.js +15 -0
  8. package/dist/DensityRenderer/DensityRenderer.test.js +84 -0
  9. package/dist/DensityRenderer/index.d.ts +6 -6
  10. package/dist/DensityRenderer/index.js +137 -0
  11. package/dist/LinePlotRenderer/LinePlotRenderer.d.ts +4 -9
  12. package/dist/LinePlotRenderer/LinePlotRenderer.js +171 -0
  13. package/dist/LinePlotRenderer/configSchema.d.ts +2 -2
  14. package/dist/LinePlotRenderer/configSchema.js +70 -0
  15. package/dist/LinePlotRenderer/index.d.ts +3 -3
  16. package/dist/LinePlotRenderer/index.js +34 -0
  17. package/dist/LinearWiggleDisplay/components/SetColorDialog.d.ts +10 -10
  18. package/dist/LinearWiggleDisplay/components/SetColorDialog.js +111 -0
  19. package/dist/LinearWiggleDisplay/components/SetMinMaxDialog.d.ts +11 -11
  20. package/dist/LinearWiggleDisplay/components/SetMinMaxDialog.js +112 -0
  21. package/dist/LinearWiggleDisplay/components/Tooltip.d.ts +24 -24
  22. package/dist/LinearWiggleDisplay/components/Tooltip.js +167 -0
  23. package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +8 -8
  24. package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.js +52 -0
  25. package/dist/LinearWiggleDisplay/components/YScaleBar.d.ts +7 -7
  26. package/dist/LinearWiggleDisplay/components/YScaleBar.js +33 -0
  27. package/dist/LinearWiggleDisplay/index.d.ts +3 -3
  28. package/dist/LinearWiggleDisplay/index.js +43 -0
  29. package/dist/LinearWiggleDisplay/models/configSchema.d.ts +2 -2
  30. package/dist/LinearWiggleDisplay/models/configSchema.js +71 -0
  31. package/dist/LinearWiggleDisplay/models/model.d.ts +288 -288
  32. package/dist/LinearWiggleDisplay/models/model.js +706 -0
  33. package/dist/WiggleBaseRenderer.d.ts +44 -42
  34. package/dist/WiggleBaseRenderer.js +131 -0
  35. package/dist/WiggleRPC/rpcMethods.d.ts +31 -31
  36. package/dist/WiggleRPC/rpcMethods.js +295 -0
  37. package/dist/WiggleRendering.d.ts +16 -16
  38. package/dist/WiggleRendering.js +109 -0
  39. package/dist/WiggleRendering.test.js +52 -0
  40. package/dist/XYPlotRenderer/XYPlotRenderer.d.ts +4 -4
  41. package/dist/XYPlotRenderer/XYPlotRenderer.js +199 -0
  42. package/dist/XYPlotRenderer/XYPlotRenderer.test.js +83 -0
  43. package/dist/XYPlotRenderer/index.d.ts +3 -3
  44. package/dist/XYPlotRenderer/index.js +34 -0
  45. package/dist/configSchema.d.ts +2 -2
  46. package/dist/configSchema.js +75 -0
  47. package/dist/declare.d.js +1 -0
  48. package/dist/index.d.ts +866 -866
  49. package/dist/index.js +251 -6
  50. package/dist/index.test.js +24 -0
  51. package/dist/util.d.ts +41 -41
  52. package/dist/util.js +178 -0
  53. package/dist/util.test.js +66 -0
  54. package/package.json +4 -6
  55. package/src/LinearWiggleDisplay/models/model.tsx +2 -2
  56. package/src/WiggleBaseRenderer.tsx +1 -0
  57. package/dist/DensityRenderer/DensityRenderer.test.d.ts +0 -1
  58. package/dist/WiggleRendering.test.d.ts +0 -1
  59. package/dist/XYPlotRenderer/XYPlotRenderer.test.d.ts +0 -1
  60. package/dist/index.test.d.ts +0 -1
  61. package/dist/plugin-wiggle.cjs.development.js +0 -3556
  62. package/dist/plugin-wiggle.cjs.development.js.map +0 -1
  63. package/dist/plugin-wiggle.cjs.production.min.js +0 -2
  64. package/dist/plugin-wiggle.cjs.production.min.js.map +0 -1
  65. package/dist/plugin-wiggle.esm.js +0 -3541
  66. package/dist/plugin-wiggle.esm.js.map +0 -1
  67. package/dist/util.test.d.ts +0 -1
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports["default"] = void 0;
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _mobxReact = require("mobx-react");
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _ui = require("@jbrowse/core/ui");
19
+
20
+ 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); }
21
+
22
+ 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; }
23
+
24
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
25
+
26
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
27
+
28
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
29
+
30
+ function WiggleRendering(props) {
31
+ var regions = props.regions,
32
+ features = props.features,
33
+ bpPerPx = props.bpPerPx,
34
+ width = props.width,
35
+ height = props.height,
36
+ _props$onMouseLeave = props.onMouseLeave,
37
+ _onMouseLeave = _props$onMouseLeave === void 0 ? function () {} : _props$onMouseLeave,
38
+ _props$onMouseMove = props.onMouseMove,
39
+ _onMouseMove = _props$onMouseMove === void 0 ? function () {} : _props$onMouseMove,
40
+ _props$onFeatureClick = props.onFeatureClick,
41
+ onFeatureClick = _props$onFeatureClick === void 0 ? function () {} : _props$onFeatureClick;
42
+
43
+ var _regions = (0, _slicedToArray2["default"])(regions, 1),
44
+ region = _regions[0];
45
+
46
+ var ref = (0, _react.useRef)(null);
47
+
48
+ function getFeatureUnderMouse(eventClientX) {
49
+ // calculates feature under mouse
50
+ var offset = 0;
51
+
52
+ if (ref.current) {
53
+ offset = ref.current.getBoundingClientRect().left;
54
+ }
55
+
56
+ var offsetX = eventClientX - offset;
57
+ var px = region.reversed ? width - offsetX : offsetX;
58
+ var clientBp = region.start + bpPerPx * px;
59
+ var featureUnderMouse;
60
+
61
+ var _iterator = _createForOfIteratorHelper(features.values()),
62
+ _step;
63
+
64
+ try {
65
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
66
+ var feature = _step.value;
67
+
68
+ if (clientBp <= feature.get('end') && clientBp >= feature.get('start')) {
69
+ featureUnderMouse = feature;
70
+ break;
71
+ }
72
+ }
73
+ } catch (err) {
74
+ _iterator.e(err);
75
+ } finally {
76
+ _iterator.f();
77
+ }
78
+
79
+ return featureUnderMouse;
80
+ }
81
+
82
+ return /*#__PURE__*/_react["default"].createElement("div", {
83
+ ref: ref,
84
+ "data-testid": "wiggle-rendering-test",
85
+ onMouseMove: function onMouseMove(event) {
86
+ var featureUnderMouse = getFeatureUnderMouse(event.clientX);
87
+
88
+ _onMouseMove(event, featureUnderMouse ? featureUnderMouse.id() : undefined);
89
+ },
90
+ onClick: function onClick(event) {
91
+ var featureUnderMouse = getFeatureUnderMouse(event.clientX);
92
+ onFeatureClick(event, featureUnderMouse ? featureUnderMouse.id() : undefined);
93
+ },
94
+ onMouseLeave: function onMouseLeave(event) {
95
+ return _onMouseLeave(event);
96
+ },
97
+ role: "presentation",
98
+ className: "WiggleRendering",
99
+ style: {
100
+ overflow: 'visible',
101
+ position: 'relative',
102
+ height: height
103
+ }
104
+ }, /*#__PURE__*/_react["default"].createElement(_ui.PrerenderedCanvas, props));
105
+ }
106
+
107
+ var _default = (0, _mobxReact.observer)(WiggleRendering);
108
+
109
+ exports["default"] = _default;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
+
7
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
8
+
9
+ var _react = _interopRequireDefault(require("react"));
10
+
11
+ var _react2 = require("@testing-library/react");
12
+
13
+ var _WiggleRendering = _interopRequireDefault(require("./WiggleRendering"));
14
+
15
+ // these tests do very little, let's try to expand them at some point
16
+ test('one', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
17
+ var _render, container, getByTestId, test;
18
+
19
+ return _regenerator["default"].wrap(function _callee$(_context) {
20
+ while (1) {
21
+ switch (_context.prev = _context.next) {
22
+ case 0:
23
+ _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_WiggleRendering["default"], {
24
+ width: 500,
25
+ height: 500,
26
+ features: new Map(),
27
+ highResolutionScaling: 1,
28
+ regions: [{
29
+ refName: 'chr1',
30
+ start: 1,
31
+ end: 3
32
+ }],
33
+ bpPerPx: 3,
34
+ config: {
35
+ type: 'DummyRenderer'
36
+ }
37
+ })), container = _render.container, getByTestId = _render.getByTestId;
38
+ _context.next = 3;
39
+ return getByTestId('wiggle-rendering-test');
40
+
41
+ case 3:
42
+ test = _context.sent;
43
+ expect(_react2.fireEvent.click(test)).toBeTruthy();
44
+ expect(container.firstChild).toMatchSnapshot();
45
+
46
+ case 6:
47
+ case "end":
48
+ return _context.stop();
49
+ }
50
+ }
51
+ }, _callee);
52
+ })));
@@ -1,4 +1,4 @@
1
- import WiggleBaseRenderer, { RenderArgsDeserializedWithFeatures } from '../WiggleBaseRenderer';
2
- export default class XYPlotRenderer extends WiggleBaseRenderer {
3
- draw(ctx: CanvasRenderingContext2D, props: RenderArgsDeserializedWithFeatures): void;
4
- }
1
+ import WiggleBaseRenderer, { RenderArgsDeserializedWithFeatures } from '../WiggleBaseRenderer';
2
+ export default class XYPlotRenderer extends WiggleBaseRenderer {
3
+ draw(ctx: CanvasRenderingContext2D, props: RenderArgsDeserializedWithFeatures): void;
4
+ }
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
+
16
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
+
18
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
+
20
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
+
22
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
+
24
+ var _configuration = require("@jbrowse/core/configuration");
25
+
26
+ var _util = require("@jbrowse/core/util");
27
+
28
+ var _color = _interopRequireDefault(require("color"));
29
+
30
+ var _util2 = require("../util");
31
+
32
+ var _WiggleBaseRenderer2 = _interopRequireDefault(require("../WiggleBaseRenderer"));
33
+
34
+ var _model = require("../LinearWiggleDisplay/models/model");
35
+
36
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
37
+
38
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
39
+
40
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
41
+
42
+ 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; }
43
+
44
+ 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; }
45
+
46
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
47
+
48
+ 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; } }
49
+
50
+ var XYPlotRenderer = /*#__PURE__*/function (_WiggleBaseRenderer) {
51
+ (0, _inherits2["default"])(XYPlotRenderer, _WiggleBaseRenderer);
52
+
53
+ var _super = _createSuper(XYPlotRenderer);
54
+
55
+ function XYPlotRenderer() {
56
+ (0, _classCallCheck2["default"])(this, XYPlotRenderer);
57
+ return _super.apply(this, arguments);
58
+ }
59
+
60
+ (0, _createClass2["default"])(XYPlotRenderer, [{
61
+ key: "draw",
62
+ value: function draw(ctx, props) {
63
+ var features = props.features,
64
+ bpPerPx = props.bpPerPx,
65
+ regions = props.regions,
66
+ scaleOpts = props.scaleOpts,
67
+ unadjustedHeight = props.height,
68
+ config = props.config,
69
+ ticks = props.ticks,
70
+ displayCrossHatches = props.displayCrossHatches;
71
+
72
+ var _regions = (0, _slicedToArray2["default"])(regions, 1),
73
+ region = _regions[0];
74
+
75
+ var width = (region.end - region.start) / bpPerPx; // the adjusted height takes into account YSCALEBAR_LABEL_OFFSET from the
76
+ // wiggle display, and makes the height of the actual drawn area add
77
+ // "padding" to the top and bottom of the display
78
+
79
+ var offset = _model.YSCALEBAR_LABEL_OFFSET;
80
+ var height = unadjustedHeight - offset * 2;
81
+ var pivotValue = (0, _configuration.readConfObject)(config, 'bicolorPivotValue');
82
+ var negColor = (0, _configuration.readConfObject)(config, 'negColor');
83
+ var posColor = (0, _configuration.readConfObject)(config, 'posColor');
84
+ var filled = (0, _configuration.readConfObject)(config, 'filled');
85
+ var clipColor = (0, _configuration.readConfObject)(config, 'clipColor');
86
+ var highlightColor = (0, _configuration.readConfObject)(config, 'highlightColor');
87
+ var summaryScoreMode = (0, _configuration.readConfObject)(config, 'summaryScoreMode');
88
+ var scale = (0, _util2.getScale)(_objectSpread(_objectSpread({}, scaleOpts), {}, {
89
+ range: [0, height]
90
+ }));
91
+ var originY = (0, _util2.getOrigin)(scaleOpts.scaleType);
92
+
93
+ var _scale$domain = scale.domain(),
94
+ _scale$domain2 = (0, _slicedToArray2["default"])(_scale$domain, 2),
95
+ niceMin = _scale$domain2[0],
96
+ niceMax = _scale$domain2[1];
97
+
98
+ var toY = function toY(n) {
99
+ return height - (scale(n) || 0) + offset;
100
+ };
101
+
102
+ var toHeight = function toHeight(n) {
103
+ return toY(originY) - toY(n);
104
+ };
105
+
106
+ var colorCallback = (0, _configuration.readConfObject)(config, 'color') === '#f0f' ? function (_, score) {
107
+ return score < pivotValue ? negColor : posColor;
108
+ } : function (feature, _score) {
109
+ return (0, _configuration.readConfObject)(config, 'color', {
110
+ feature: feature
111
+ });
112
+ };
113
+ var crossingOrigin = niceMin < pivotValue && niceMax > pivotValue;
114
+
115
+ var _iterator = _createForOfIteratorHelper(features.values()),
116
+ _step;
117
+
118
+ try {
119
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
120
+ var feature = _step.value;
121
+
122
+ var _featureSpanPx = (0, _util.featureSpanPx)(feature, region, bpPerPx),
123
+ _featureSpanPx2 = (0, _slicedToArray2["default"])(_featureSpanPx, 2),
124
+ leftPx = _featureSpanPx2[0],
125
+ rightPx = _featureSpanPx2[1];
126
+
127
+ var score = feature.get('score');
128
+ var maxr = feature.get('maxScore');
129
+ var minr = feature.get('minScore');
130
+ var lowClipping = score < niceMin;
131
+ var highClipping = score > niceMax;
132
+ var w = rightPx - leftPx + 0.4; // fudge factor for subpixel rendering
133
+
134
+ var summary = feature.get('summary');
135
+
136
+ if (summaryScoreMode === 'max') {
137
+ score = summary ? maxr : score;
138
+ ctx.fillStyle = colorCallback(feature, score);
139
+ ctx.fillRect(leftPx, toY(score), w, filled ? toHeight(score) : 1);
140
+ } else if (summaryScoreMode === 'min') {
141
+ score = summary ? minr : score;
142
+ ctx.fillStyle = colorCallback(feature, score);
143
+ ctx.fillRect(leftPx, toY(score), w, filled ? toHeight(score) : 1);
144
+ } else if (summaryScoreMode === 'whiskers') {
145
+ var c = colorCallback(feature, score);
146
+
147
+ if (summary) {
148
+ ctx.fillStyle = crossingOrigin ? colorCallback(feature, maxr) : (0, _color["default"])(c).lighten(0.6).toString();
149
+ ctx.fillRect(leftPx, toY(maxr), w, filled ? toHeight(maxr) - toHeight(score) : 1);
150
+ } // normal
151
+
152
+
153
+ ctx.fillStyle = crossingOrigin && summary ? (0, _color["default"])(colorCallback(feature, maxr)).mix((0, _color["default"])(colorCallback(feature, minr))) : c;
154
+ ctx.fillRect(leftPx, toY(score), w, filled ? toHeight(score) - (summary ? toHeight(minr) : 0) : 1); // min
155
+
156
+ if (summary) {
157
+ ctx.fillStyle = crossingOrigin ? colorCallback(feature, minr) : (0, _color["default"])(c).darken(0.6).toString();
158
+ ctx.fillRect(leftPx, toY(minr), w, filled ? toHeight(minr) : 1);
159
+ }
160
+ } else {
161
+ ctx.fillStyle = colorCallback(feature, score);
162
+ ctx.fillRect(leftPx, toY(score), w, filled ? toHeight(score) : 1);
163
+ }
164
+
165
+ if (highClipping) {
166
+ ctx.fillStyle = clipColor;
167
+ ctx.fillRect(leftPx, 0, w, 4);
168
+ } else if (lowClipping && scaleOpts.scaleType !== 'log') {
169
+ ctx.fillStyle = clipColor;
170
+ ctx.fillRect(leftPx, unadjustedHeight - 4, w, 4);
171
+ }
172
+
173
+ if (feature.get('highlighted')) {
174
+ ctx.fillStyle = highlightColor;
175
+ ctx.fillRect(leftPx, 0, w, height);
176
+ }
177
+ }
178
+ } catch (err) {
179
+ _iterator.e(err);
180
+ } finally {
181
+ _iterator.f();
182
+ }
183
+
184
+ if (displayCrossHatches) {
185
+ ctx.lineWidth = 1;
186
+ ctx.strokeStyle = 'rgba(200,200,200,0.8)';
187
+ ticks.values.forEach(function (tick) {
188
+ ctx.beginPath();
189
+ ctx.moveTo(0, Math.round(toY(tick)));
190
+ ctx.lineTo(width, Math.round(toY(tick)));
191
+ ctx.stroke();
192
+ });
193
+ }
194
+ }
195
+ }]);
196
+ return XYPlotRenderer;
197
+ }(_WiggleBaseRenderer2["default"]);
198
+
199
+ exports["default"] = XYPlotRenderer;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
8
+
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+
11
+ var _simpleFeature = _interopRequireDefault(require("@jbrowse/core/util/simpleFeature"));
12
+
13
+ var _offscreenCanvasUtils = require("@jbrowse/core/util/offscreenCanvasUtils");
14
+
15
+ var _ = _interopRequireWildcard(require("."));
16
+
17
+ 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); }
18
+
19
+ 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; }
20
+
21
+ test('several features', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
22
+ var pluginManager, renderer, renderProps, res;
23
+ return _regenerator["default"].wrap(function _callee$(_context) {
24
+ while (1) {
25
+ switch (_context.prev = _context.next) {
26
+ case 0:
27
+ pluginManager = {};
28
+ renderer = new _["default"]({
29
+ name: 'XYPlotRenderer',
30
+ ReactComponent: _.ReactComponent,
31
+ configSchema: _.configSchema,
32
+ pluginManager: pluginManager
33
+ });
34
+ renderProps = {
35
+ features: [new _simpleFeature["default"]({
36
+ id: 't1',
37
+ data: {
38
+ start: 1,
39
+ end: 100,
40
+ score: 1
41
+ }
42
+ }), new _simpleFeature["default"]({
43
+ id: 't2',
44
+ data: {
45
+ start: 101,
46
+ end: 200,
47
+ score: 2
48
+ }
49
+ })],
50
+ regions: [{
51
+ end: 100,
52
+ start: 1
53
+ }],
54
+ scaleOpts: {
55
+ domain: [0, 100],
56
+ scaleType: 'linear'
57
+ },
58
+ config: {},
59
+ bpPerPx: 3,
60
+ highResolutionScaling: 1,
61
+ height: 100,
62
+ ticks: {
63
+ values: [0, 100]
64
+ }
65
+ };
66
+ _context.next = 5;
67
+ return (0, _offscreenCanvasUtils.renderToAbstractCanvas)(1000, 200, renderProps, function (ctx) {
68
+ return renderer.draw(ctx, renderProps);
69
+ });
70
+
71
+ case 5:
72
+ res = _context.sent;
73
+ expect(res).toMatchSnapshot({
74
+ imageData: expect.any(Object)
75
+ });
76
+
77
+ case 7:
78
+ case "end":
79
+ return _context.stop();
80
+ }
81
+ }
82
+ }, _callee);
83
+ })));
@@ -1,3 +1,3 @@
1
- export { default as ReactComponent } from '../WiggleRendering';
2
- export { default } from './XYPlotRenderer';
3
- export declare const configSchema: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
1
+ export { default as ReactComponent } from '../WiggleRendering';
2
+ export { default } from './XYPlotRenderer';
3
+ export declare const configSchema: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ Object.defineProperty(exports, "ReactComponent", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _WiggleRendering["default"];
12
+ }
13
+ });
14
+ exports.configSchema = void 0;
15
+ Object.defineProperty(exports, "default", {
16
+ enumerable: true,
17
+ get: function get() {
18
+ return _XYPlotRenderer["default"];
19
+ }
20
+ });
21
+
22
+ var _configuration = require("@jbrowse/core/configuration");
23
+
24
+ var _configSchema = _interopRequireDefault(require("../configSchema"));
25
+
26
+ var _WiggleRendering = _interopRequireDefault(require("../WiggleRendering"));
27
+
28
+ var _XYPlotRenderer = _interopRequireDefault(require("./XYPlotRenderer"));
29
+
30
+ var configSchema = (0, _configuration.ConfigurationSchema)('XYPlotRenderer', {}, {
31
+ baseConfiguration: _configSchema["default"],
32
+ explicitlyTyped: true
33
+ });
34
+ exports.configSchema = configSchema;
@@ -1,2 +1,2 @@
1
- declare const _default: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
2
- export default _default;
1
+ declare const _default: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
2
+ export default _default;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _configuration = require("@jbrowse/core/configuration");
9
+
10
+ var _mobxStateTree = require("mobx-state-tree");
11
+
12
+ var _default = (0, _configuration.ConfigurationSchema)('WiggleRenderer', {
13
+ color: {
14
+ type: 'color',
15
+ description: 'the color of track, overrides posColor and negColor',
16
+ defaultValue: '#f0f'
17
+ },
18
+ posColor: {
19
+ type: 'color',
20
+ description: 'the color to use when the score is positive',
21
+ defaultValue: 'blue'
22
+ },
23
+ negColor: {
24
+ type: 'color',
25
+ description: 'the color to use when the score is negative',
26
+ defaultValue: 'red'
27
+ },
28
+ highlightColor: {
29
+ type: 'color',
30
+ description: 'the color of highlights over the wiggle track',
31
+ defaultValue: 'rgba(255,255,0,0.5)'
32
+ },
33
+ clipColor: {
34
+ type: 'color',
35
+ description: 'the color of the clipping marker',
36
+ defaultValue: 'red'
37
+ },
38
+ renderType: {
39
+ type: 'stringEnum',
40
+ model: _mobxStateTree.types.enumeration('Rendering type', ['xyplot', 'density', 'line']),
41
+ description: 'The type of rendering for wiggle data to use',
42
+ defaultValue: 'xyplot'
43
+ },
44
+ filled: {
45
+ type: 'boolean',
46
+ description: 'fill in histogram',
47
+ defaultValue: true
48
+ },
49
+ bicolorPivot: {
50
+ type: 'stringEnum',
51
+ model: _mobxStateTree.types.enumeration('Scale type', ['numeric', 'mean', 'z_score', 'none']),
52
+ description: 'type of bicolor pivot',
53
+ defaultValue: 'numeric'
54
+ },
55
+ bicolorPivotValue: {
56
+ type: 'number',
57
+ defaultValue: 0,
58
+ description: 'value to use for bicolor pivot'
59
+ },
60
+ summaryScoreMode: {
61
+ type: 'stringEnum',
62
+ model: _mobxStateTree.types.enumeration('Score type', ['max', 'min', 'avg', 'whiskers']),
63
+ description: 'choose whether to use max/min/average or whiskers which combines all three into the same rendering',
64
+ defaultValue: 'whiskers'
65
+ },
66
+ displayCrossHatches: {
67
+ type: 'boolean',
68
+ description: 'choose to draw cross hatches (sideways lines)',
69
+ defaultValue: false
70
+ }
71
+ }, {
72
+ explicitlyTyped: true
73
+ });
74
+
75
+ exports["default"] = _default;
@@ -0,0 +1 @@
1
+ "use strict";