@jbrowse/plugin-wiggle 1.7.11 → 2.0.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 (138) hide show
  1. package/dist/BigWigAdapter/BigWigAdapter.js +176 -284
  2. package/dist/BigWigAdapter/BigWigAdapter.js.map +1 -0
  3. package/dist/BigWigAdapter/configSchema.js +12 -21
  4. package/dist/BigWigAdapter/configSchema.js.map +1 -0
  5. package/dist/BigWigAdapter/index.js +8 -14
  6. package/dist/BigWigAdapter/index.js.map +1 -0
  7. package/dist/DensityRenderer/index.d.ts +1 -1
  8. package/dist/DensityRenderer/index.js +152 -133
  9. package/dist/DensityRenderer/index.js.map +1 -0
  10. package/dist/LinePlotRenderer/LinePlotRenderer.d.ts +1 -1
  11. package/dist/LinePlotRenderer/LinePlotRenderer.js +182 -168
  12. package/dist/LinePlotRenderer/LinePlotRenderer.js.map +1 -0
  13. package/dist/LinePlotRenderer/index.js +19 -33
  14. package/dist/LinePlotRenderer/index.js.map +1 -0
  15. package/dist/LinearWiggleDisplay/components/SetColorDialog.js +95 -105
  16. package/dist/LinearWiggleDisplay/components/SetColorDialog.js.map +1 -0
  17. package/dist/LinearWiggleDisplay/components/SetMinMaxDialog.js +86 -107
  18. package/dist/LinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -0
  19. package/dist/LinearWiggleDisplay/components/Tooltip.js +147 -152
  20. package/dist/LinearWiggleDisplay/components/Tooltip.js.map +1 -0
  21. package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.js +44 -50
  22. package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -0
  23. package/dist/LinearWiggleDisplay/components/YScaleBar.js +24 -31
  24. package/dist/LinearWiggleDisplay/components/YScaleBar.js.map +1 -0
  25. package/dist/LinearWiggleDisplay/index.js +13 -42
  26. package/dist/LinearWiggleDisplay/index.js.map +1 -0
  27. package/dist/LinearWiggleDisplay/models/configSchema.js +65 -69
  28. package/dist/LinearWiggleDisplay/models/configSchema.js.map +1 -0
  29. package/dist/LinearWiggleDisplay/models/model.d.ts +15 -13
  30. package/dist/LinearWiggleDisplay/models/model.js +585 -696
  31. package/dist/LinearWiggleDisplay/models/model.js.map +1 -0
  32. package/dist/WiggleBaseRenderer.d.ts +3 -3
  33. package/dist/WiggleBaseRenderer.js +119 -129
  34. package/dist/WiggleBaseRenderer.js.map +1 -0
  35. package/dist/WiggleRPC/rpcMethods.js +182 -288
  36. package/dist/WiggleRPC/rpcMethods.js.map +1 -0
  37. package/dist/WiggleRendering.js +107 -102
  38. package/dist/WiggleRendering.js.map +1 -0
  39. package/dist/XYPlotRenderer/XYPlotRenderer.d.ts +1 -1
  40. package/dist/XYPlotRenderer/XYPlotRenderer.js +250 -194
  41. package/dist/XYPlotRenderer/XYPlotRenderer.js.map +1 -0
  42. package/dist/XYPlotRenderer/index.js +30 -33
  43. package/dist/XYPlotRenderer/index.js.map +1 -0
  44. package/dist/configSchema.js +47 -74
  45. package/dist/configSchema.js.map +1 -0
  46. package/dist/index.d.ts +115 -64
  47. package/dist/index.js +167 -242
  48. package/dist/index.js.map +1 -0
  49. package/dist/util.js +112 -143
  50. package/dist/util.js.map +1 -0
  51. package/esm/BigWigAdapter/BigWigAdapter.d.ts +24 -0
  52. package/esm/BigWigAdapter/BigWigAdapter.js +62 -0
  53. package/esm/BigWigAdapter/BigWigAdapter.js.map +1 -0
  54. package/{dist/LinePlotRenderer → esm/BigWigAdapter}/configSchema.d.ts +0 -0
  55. package/esm/BigWigAdapter/configSchema.js +11 -0
  56. package/esm/BigWigAdapter/configSchema.js.map +1 -0
  57. package/esm/BigWigAdapter/index.d.ts +1 -0
  58. package/esm/BigWigAdapter/index.js +2 -0
  59. package/esm/BigWigAdapter/index.js.map +1 -0
  60. package/esm/DensityRenderer/index.d.ts +6 -0
  61. package/esm/DensityRenderer/index.js +39 -0
  62. package/esm/DensityRenderer/index.js.map +1 -0
  63. package/esm/LinePlotRenderer/LinePlotRenderer.d.ts +4 -0
  64. package/esm/LinePlotRenderer/LinePlotRenderer.js +71 -0
  65. package/esm/LinePlotRenderer/LinePlotRenderer.js.map +1 -0
  66. package/esm/LinePlotRenderer/index.d.ts +3 -0
  67. package/esm/LinePlotRenderer/index.js +12 -0
  68. package/esm/LinePlotRenderer/index.js.map +1 -0
  69. package/esm/LinearWiggleDisplay/components/SetColorDialog.d.ts +10 -0
  70. package/esm/LinearWiggleDisplay/components/SetColorDialog.js +55 -0
  71. package/esm/LinearWiggleDisplay/components/SetColorDialog.js.map +1 -0
  72. package/esm/LinearWiggleDisplay/components/SetMinMaxDialog.d.ts +11 -0
  73. package/esm/LinearWiggleDisplay/components/SetMinMaxDialog.js +46 -0
  74. package/esm/LinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -0
  75. package/esm/LinearWiggleDisplay/components/Tooltip.d.ts +24 -0
  76. package/esm/LinearWiggleDisplay/components/Tooltip.js +107 -0
  77. package/esm/LinearWiggleDisplay/components/Tooltip.js.map +1 -0
  78. package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +8 -0
  79. package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.js +29 -0
  80. package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -0
  81. package/esm/LinearWiggleDisplay/components/YScaleBar.d.ts +7 -0
  82. package/esm/LinearWiggleDisplay/components/YScaleBar.js +9 -0
  83. package/esm/LinearWiggleDisplay/components/YScaleBar.js.map +1 -0
  84. package/esm/LinearWiggleDisplay/index.d.ts +3 -0
  85. package/esm/LinearWiggleDisplay/index.js +4 -0
  86. package/esm/LinearWiggleDisplay/index.js.map +1 -0
  87. package/esm/LinearWiggleDisplay/models/configSchema.d.ts +2 -0
  88. package/esm/LinearWiggleDisplay/models/configSchema.js +64 -0
  89. package/esm/LinearWiggleDisplay/models/configSchema.js.map +1 -0
  90. package/esm/LinearWiggleDisplay/models/model.d.ts +290 -0
  91. package/esm/LinearWiggleDisplay/models/model.js +495 -0
  92. package/esm/LinearWiggleDisplay/models/model.js.map +1 -0
  93. package/esm/WiggleBaseRenderer.d.ts +55 -0
  94. package/esm/WiggleBaseRenderer.js +34 -0
  95. package/esm/WiggleBaseRenderer.js.map +1 -0
  96. package/esm/WiggleRPC/rpcMethods.d.ts +31 -0
  97. package/esm/WiggleRPC/rpcMethods.js +70 -0
  98. package/esm/WiggleRPC/rpcMethods.js.map +1 -0
  99. package/esm/WiggleRendering.d.ts +16 -0
  100. package/esm/WiggleRendering.js +40 -0
  101. package/esm/WiggleRendering.js.map +1 -0
  102. package/esm/XYPlotRenderer/XYPlotRenderer.d.ts +4 -0
  103. package/esm/XYPlotRenderer/XYPlotRenderer.js +109 -0
  104. package/esm/XYPlotRenderer/XYPlotRenderer.js.map +1 -0
  105. package/esm/XYPlotRenderer/index.d.ts +3 -0
  106. package/esm/XYPlotRenderer/index.js +23 -0
  107. package/esm/XYPlotRenderer/index.js.map +1 -0
  108. package/esm/configSchema.d.ts +2 -0
  109. package/esm/configSchema.js +46 -0
  110. package/esm/configSchema.js.map +1 -0
  111. package/esm/index.d.ts +917 -0
  112. package/esm/index.js +115 -0
  113. package/esm/index.js.map +1 -0
  114. package/esm/util.d.ts +41 -0
  115. package/esm/util.js +123 -0
  116. package/esm/util.js.map +1 -0
  117. package/package.json +21 -13
  118. package/src/DensityRenderer/index.ts +1 -1
  119. package/src/LinePlotRenderer/LinePlotRenderer.js +1 -1
  120. package/src/LinePlotRenderer/index.js +7 -1
  121. package/src/LinearWiggleDisplay/components/SetColorDialog.tsx +10 -13
  122. package/src/LinearWiggleDisplay/components/SetMinMaxDialog.tsx +13 -11
  123. package/src/LinearWiggleDisplay/components/Tooltip.tsx +4 -3
  124. package/src/LinearWiggleDisplay/components/WiggleDisplayComponent.tsx +9 -4
  125. package/src/LinearWiggleDisplay/models/model.tsx +56 -65
  126. package/src/WiggleBaseRenderer.tsx +3 -3
  127. package/src/XYPlotRenderer/XYPlotRenderer.ts +87 -40
  128. package/src/XYPlotRenderer/index.ts +19 -2
  129. package/src/configSchema.ts +0 -23
  130. package/dist/BigWigAdapter/BigWigAdapter.test.js +0 -157
  131. package/dist/DensityRenderer/DensityRenderer.test.js +0 -88
  132. package/dist/LinePlotRenderer/configSchema.js +0 -70
  133. package/dist/WiggleRendering.test.js +0 -52
  134. package/dist/XYPlotRenderer/XYPlotRenderer.test.js +0 -87
  135. package/dist/declare.d.js +0 -1
  136. package/dist/index.test.js +0 -24
  137. package/dist/util.test.js +0 -66
  138. package/src/LinePlotRenderer/configSchema.js +0 -68
@@ -1,708 +1,597 @@
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.default = exports.YSCALEBAR_LABEL_OFFSET = void 0;
9
-
10
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
13
-
14
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
-
16
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
-
18
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
19
-
20
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
21
-
22
- var _react = _interopRequireWildcard(require("react"));
23
-
24
- var _configuration = require("@jbrowse/core/configuration");
25
-
26
- var _util = require("@jbrowse/core/util");
27
-
28
- var _tracks = require("@jbrowse/core/util/tracks");
29
-
30
- var _pluginLinearGenomeView = require("@jbrowse/plugin-linear-genome-view");
31
-
32
- var _mobx = require("mobx");
33
-
34
- var _mobxStateTree = require("mobx-state-tree");
35
-
36
- var _reactD3AxisMod = require("react-d3-axis-mod");
37
-
38
- var _util2 = require("../../util");
39
-
40
- var _Tooltip = _interopRequireDefault(require("../components/Tooltip"));
41
-
42
- var _WiggleDisplayComponent = require("../components/WiggleDisplayComponent");
43
-
44
- 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; }
45
-
46
- 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; }
47
-
48
- 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); }
49
-
50
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || (0, _typeof2.default)(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; }
51
-
52
- var SetMinMaxDlg = /*#__PURE__*/(0, _react.lazy)(function () {
53
- return Promise.resolve().then(function () {
54
- return _interopRequireWildcard(require('../components/SetMinMaxDialog'));
55
- });
56
- });
57
- var SetColorDlg = /*#__PURE__*/(0, _react.lazy)(function () {
58
- return Promise.resolve().then(function () {
59
- return _interopRequireWildcard(require('../components/SetColorDialog'));
60
- });
61
- }); // fudge factor for making all labels on the YScalebar visible
62
-
63
- var YSCALEBAR_LABEL_OFFSET = 5; // using a map because it preserves order
64
-
65
- exports.YSCALEBAR_LABEL_OFFSET = YSCALEBAR_LABEL_OFFSET;
66
- var rendererTypes = new Map([['xyplot', 'XYPlotRenderer'], ['density', 'DensityRenderer'], ['line', 'LinePlotRenderer']]);
67
-
68
- var stateModelFactory = function stateModelFactory(pluginManager, configSchema) {
69
- return _mobxStateTree.types.compose('LinearWiggleDisplay', _pluginLinearGenomeView.BaseLinearDisplay, _mobxStateTree.types.model({
70
- type: _mobxStateTree.types.literal('LinearWiggleDisplay'),
71
- configuration: (0, _configuration.ConfigurationReference)(configSchema),
72
- selectedRendering: _mobxStateTree.types.optional(_mobxStateTree.types.string, ''),
73
- resolution: _mobxStateTree.types.optional(_mobxStateTree.types.number, 1),
74
- fill: _mobxStateTree.types.maybe(_mobxStateTree.types.boolean),
75
- color: _mobxStateTree.types.maybe(_mobxStateTree.types.string),
76
- posColor: _mobxStateTree.types.maybe(_mobxStateTree.types.string),
77
- negColor: _mobxStateTree.types.maybe(_mobxStateTree.types.string),
78
- summaryScoreMode: _mobxStateTree.types.maybe(_mobxStateTree.types.string),
79
- rendererTypeNameState: _mobxStateTree.types.maybe(_mobxStateTree.types.string),
80
- scale: _mobxStateTree.types.maybe(_mobxStateTree.types.string),
81
- autoscale: _mobxStateTree.types.maybe(_mobxStateTree.types.string),
82
- displayCrossHatches: _mobxStateTree.types.maybe(_mobxStateTree.types.boolean),
83
- constraints: _mobxStateTree.types.optional(_mobxStateTree.types.model({
84
- max: _mobxStateTree.types.maybe(_mobxStateTree.types.number),
85
- min: _mobxStateTree.types.maybe(_mobxStateTree.types.number)
86
- }), {})
87
- })).volatile(function () {
88
- return {
89
- statsReady: false,
90
- message: undefined,
91
- stats: {
92
- scoreMin: 0,
93
- scoreMax: 50
94
- },
95
- statsFetchInProgress: undefined
96
- };
97
- }).actions(function (self) {
98
- return {
99
- updateStats: function updateStats(_ref) {
100
- var scoreMin = _ref.scoreMin,
101
- scoreMax = _ref.scoreMax;
102
-
103
- if (self.stats.scoreMin !== scoreMin || self.stats.scoreMax !== scoreMax) {
104
- self.stats = {
105
- scoreMin: scoreMin,
106
- scoreMax: scoreMax
107
- };
108
- }
109
-
110
- self.statsReady = true;
111
- },
112
- setColor: function setColor(color) {
113
- self.color = color;
114
- },
115
- setPosColor: function setPosColor(color) {
116
- self.posColor = color;
117
- },
118
- setNegColor: function setNegColor(color) {
119
- self.negColor = color;
120
- },
121
- setLoading: function setLoading(aborter) {
122
- var statsFetch = self.statsFetchInProgress;
123
-
124
- if (statsFetch !== undefined && !statsFetch.signal.aborted) {
125
- statsFetch.abort();
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
126
8
  }
127
-
128
- self.statsFetchInProgress = aborter;
129
- },
130
- // this overrides the BaseLinearDisplayModel to avoid popping up a
131
- // feature detail display, but still sets the feature selection on the
132
- // model so listeners can detect a click
133
- selectFeature: function selectFeature(feature) {
134
- var session = (0, _util.getSession)(self);
135
-
136
- if ((0, _util.isSelectionContainer)(session)) {
137
- session.setSelection(feature);
138
- }
139
- },
140
- setResolution: function setResolution(res) {
141
- self.resolution = res;
142
- },
143
- setFill: function setFill(fill) {
144
- self.fill = fill;
145
- },
146
- toggleLogScale: function toggleLogScale() {
147
- if (self.scale !== 'log') {
148
- self.scale = 'log';
149
- } else {
150
- self.scale = 'linear';
151
- }
152
- },
153
- setScaleType: function setScaleType(scale) {
154
- self.scale = scale;
155
- },
156
- setSummaryScoreMode: function setSummaryScoreMode(val) {
157
- self.summaryScoreMode = val;
158
- },
159
- setAutoscale: function setAutoscale(val) {
160
- self.autoscale = val;
161
- },
162
- setMaxScore: function setMaxScore(val) {
163
- self.constraints.max = val;
164
- },
165
- setRendererType: function setRendererType(val) {
166
- self.rendererTypeNameState = val;
167
- },
168
- setMinScore: function setMinScore(val) {
169
- self.constraints.min = val;
170
- },
171
- toggleCrossHatches: function toggleCrossHatches() {
172
- self.displayCrossHatches = !self.displayCrossHatches;
173
- },
174
- setCrossHatches: function setCrossHatches(cross) {
175
- self.displayCrossHatches = cross;
176
- }
9
+ return t;
177
10
  };
178
- }).views(function (self) {
179
- return {
180
- get TooltipComponent() {
181
- return _Tooltip.default;
182
- },
183
-
184
- get adapterTypeName() {
185
- return self.adapterConfig.type;
186
- },
187
-
188
- get rendererTypeName() {
189
- var viewName = self.rendererTypeNameState || (0, _configuration.getConf)(self, 'defaultRendering');
190
- var rendererType = rendererTypes.get(viewName);
191
-
192
- if (!rendererType) {
193
- throw new Error("unknown alignments view name ".concat(viewName));
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (_) try {
52
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
66
+ }
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
72
+ var __read = (this && this.__read) || function (o, n) {
73
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
74
+ if (!m) return o;
75
+ var i = m.call(o), r, ar = [], e;
76
+ try {
77
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
78
+ }
79
+ catch (error) { e = { error: error }; }
80
+ finally {
81
+ try {
82
+ if (r && !r.done && (m = i["return"])) m.call(i);
194
83
  }
195
-
196
- return rendererType;
197
- },
198
-
199
- // subclasses can define these, as snpcoverage track does
200
- get filters() {
201
- return undefined;
202
- },
203
-
204
- get scaleType() {
205
- return self.scale || (0, _configuration.getConf)(self, 'scaleType');
206
- },
207
-
208
- get maxScore() {
209
- var max = self.constraints.max;
210
- return max !== null && max !== void 0 ? max : (0, _configuration.getConf)(self, 'maxScore');
211
- },
212
-
213
- get minScore() {
214
- var min = self.constraints.min;
215
- return min !== null && min !== void 0 ? min : (0, _configuration.getConf)(self, 'minScore');
216
- }
217
-
218
- };
219
- }).views(function (self) {
220
- return {
221
- get rendererConfig() {
222
- var configBlob = (0, _configuration.getConf)(self, ['renderers', self.rendererTypeName]) || {};
223
- return self.rendererType.configSchema.create(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, configBlob), {}, {
224
- filled: self.fill,
225
- scaleType: self.scaleType,
226
- displayCrossHatches: self.displayCrossHatches,
227
- summaryScoreMode: self.summaryScoreMode
228
- }, self.color ? {
229
- color: self.color
230
- } : {}), self.negColor ? {
231
- negColor: self.negColor
232
- } : {}), self.posColor ? {
233
- posColor: self.posColor
234
- } : {}), (0, _mobxStateTree.getEnv)(self));
235
- }
236
-
237
- };
238
- }).views(function (self) {
239
- var oldDomain = [0, 0];
240
- return {
241
- get filled() {
242
- var _self$fill;
243
-
244
- return (_self$fill = self.fill) !== null && _self$fill !== void 0 ? _self$fill : (0, _configuration.readConfObject)(self.rendererConfig, 'filled');
245
- },
246
-
247
- get summaryScoreModeSetting() {
248
- return self.summaryScoreMode || (0, _configuration.readConfObject)(self.rendererConfig, 'summaryScoreMode');
249
- },
250
-
251
- get domain() {
252
- var stats = self.stats,
253
- scaleType = self.scaleType,
254
- minScore = self.minScore,
255
- maxScore = self.maxScore;
256
- var scoreMin = stats.scoreMin,
257
- scoreMax = stats.scoreMax;
258
- var ret = (0, _util2.getNiceDomain)({
259
- domain: [scoreMin, scoreMax],
260
- bounds: [minScore, maxScore],
261
- scaleType: scaleType
262
- }); // avoid weird scalebar if log value and empty region displayed
263
-
264
- if (scaleType === 'log' && ret[1] === Number.MIN_VALUE) {
265
- return [0, Number.MIN_VALUE];
266
- } // avoid returning a new object if it matches the old value
267
-
268
-
269
- if (JSON.stringify(oldDomain) !== JSON.stringify(ret)) {
270
- oldDomain = ret;
84
+ finally { if (e) throw e.error; }
85
+ }
86
+ return ar;
87
+ };
88
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
89
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
90
+ if (ar || !(i in from)) {
91
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
92
+ ar[i] = from[i];
271
93
  }
272
-
273
- return oldDomain;
274
- },
275
-
276
- get needsScalebar() {
277
- return self.rendererTypeName === 'XYPlotRenderer' || self.rendererTypeName === 'LinePlotRenderer';
278
- },
279
-
280
- get scaleOpts() {
281
- return {
282
- domain: this.domain,
283
- stats: self.stats,
284
- autoscaleType: this.autoscaleType,
285
- scaleType: self.scaleType,
286
- inverted: (0, _configuration.getConf)(self, 'inverted')
287
- };
288
- },
289
-
290
- get canHaveFill() {
291
- return self.rendererTypeName === 'XYPlotRenderer';
292
- },
293
-
294
- get autoscaleType() {
295
- return self.autoscale || (0, _configuration.getConf)(self, 'autoscale');
296
- },
297
-
298
- get displayCrossHatchesSetting() {
299
- return self.displayCrossHatches || (0, _configuration.readConfObject)(self.rendererConfig, 'displayCrossHatches');
300
- }
301
-
302
- };
303
- }).views(function (self) {
304
- return {
305
- get ticks() {
306
- var scaleType = self.scaleType,
307
- domain = self.domain,
308
- height = self.height;
309
- var minimalTicks = (0, _configuration.getConf)(self, 'minimalTicks');
310
- var range = [height - YSCALEBAR_LABEL_OFFSET, YSCALEBAR_LABEL_OFFSET];
311
- var scale = (0, _util2.getScale)({
312
- scaleType: scaleType,
313
- domain: domain,
314
- range: range,
315
- inverted: (0, _configuration.getConf)(self, 'inverted')
316
- });
317
- var ticks = (0, _reactD3AxisMod.axisPropsFromTickScale)(scale, 4);
318
- return height < 100 || minimalTicks ? _objectSpread(_objectSpread({}, ticks), {}, {
319
- values: domain
320
- }) : ticks;
321
- }
322
-
323
- };
324
- }).views(function (self) {
325
- var superRenderProps = self.renderProps;
326
- return {
327
- renderProps: function renderProps() {
328
- var superProps = superRenderProps();
329
- return _objectSpread(_objectSpread({}, superProps), {}, {
330
- notReady: superProps.notReady || !self.statsReady,
331
- rpcDriverName: self.rpcDriverName,
332
- displayModel: self,
333
- config: self.rendererConfig,
334
- scaleOpts: self.scaleOpts,
335
- resolution: self.resolution,
336
- height: self.height,
337
- ticks: self.ticks,
338
- displayCrossHatches: self.displayCrossHatches,
339
- filters: self.filters
340
- });
341
- },
342
-
343
- get adapterCapabilities() {
344
- return pluginManager.getAdapterType(self.adapterTypeName).adapterCapabilities;
345
- },
346
-
347
- get hasResolution() {
348
- return this.adapterCapabilities.includes('hasResolution');
349
- },
350
-
351
- get hasGlobalStats() {
352
- return this.adapterCapabilities.includes('hasGlobalStats');
353
- }
354
-
355
- };
356
- }).views(function (self) {
357
- var superTrackMenuItems = self.trackMenuItems;
358
- return {
359
- trackMenuItems: function trackMenuItems() {
360
- return [].concat((0, _toConsumableArray2.default)(superTrackMenuItems()), (0, _toConsumableArray2.default)(self.hasResolution ? [{
361
- label: 'Resolution',
362
- subMenu: [{
363
- label: 'Finer resolution',
364
- onClick: function onClick() {
365
- self.setResolution(self.resolution * 5);
94
+ }
95
+ return to.concat(ar || Array.prototype.slice.call(from));
96
+ };
97
+ var __importDefault = (this && this.__importDefault) || function (mod) {
98
+ return (mod && mod.__esModule) ? mod : { "default": mod };
99
+ };
100
+ Object.defineProperty(exports, "__esModule", { value: true });
101
+ exports.YSCALEBAR_LABEL_OFFSET = void 0;
102
+ var react_1 = __importStar(require("react"));
103
+ var configuration_1 = require("@jbrowse/core/configuration");
104
+ var util_1 = require("@jbrowse/core/util");
105
+ var tracks_1 = require("@jbrowse/core/util/tracks");
106
+ var plugin_linear_genome_view_1 = require("@jbrowse/plugin-linear-genome-view");
107
+ var mobx_1 = require("mobx");
108
+ var mobx_state_tree_1 = require("mobx-state-tree");
109
+ var react_d3_axis_mod_1 = require("react-d3-axis-mod");
110
+ var util_2 = require("../../util");
111
+ var Tooltip_1 = __importDefault(require("../components/Tooltip"));
112
+ var WiggleDisplayComponent_1 = require("../components/WiggleDisplayComponent");
113
+ var SetMinMaxDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('../components/SetMinMaxDialog')); }); });
114
+ var SetColorDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('../components/SetColorDialog')); }); });
115
+ // fudge factor for making all labels on the YScalebar visible
116
+ exports.YSCALEBAR_LABEL_OFFSET = 5;
117
+ // using a map because it preserves order
118
+ var rendererTypes = new Map([
119
+ ['xyplot', 'XYPlotRenderer'],
120
+ ['density', 'DensityRenderer'],
121
+ ['line', 'LinePlotRenderer'],
122
+ ]);
123
+ var stateModelFactory = function (pluginManager, configSchema) {
124
+ return mobx_state_tree_1.types
125
+ .compose('LinearWiggleDisplay', plugin_linear_genome_view_1.BaseLinearDisplay, mobx_state_tree_1.types.model({
126
+ type: mobx_state_tree_1.types.literal('LinearWiggleDisplay'),
127
+ configuration: (0, configuration_1.ConfigurationReference)(configSchema),
128
+ selectedRendering: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.string, ''),
129
+ resolution: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.number, 1),
130
+ fill: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
131
+ color: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
132
+ posColor: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
133
+ negColor: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
134
+ summaryScoreMode: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
135
+ rendererTypeNameState: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
136
+ scale: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
137
+ autoscale: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
138
+ displayCrossHatches: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
139
+ constraints: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.model({
140
+ max: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
141
+ min: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
142
+ }), {}),
143
+ }))
144
+ .volatile(function () { return ({
145
+ statsReady: false,
146
+ message: undefined,
147
+ stats: { scoreMin: 0, scoreMax: 50 },
148
+ statsFetchInProgress: undefined,
149
+ }); })
150
+ .actions(function (self) { return ({
151
+ updateStats: function (_a) {
152
+ var scoreMin = _a.scoreMin, scoreMax = _a.scoreMax;
153
+ if (self.stats.scoreMin !== scoreMin ||
154
+ self.stats.scoreMax !== scoreMax) {
155
+ self.stats = { scoreMin: scoreMin, scoreMax: scoreMax };
366
156
  }
367
- }, {
368
- label: 'Coarser resolution',
369
- onClick: function onClick() {
370
- self.setResolution(self.resolution / 5);
157
+ self.statsReady = true;
158
+ },
159
+ setColor: function (color) {
160
+ self.color = color;
161
+ },
162
+ setPosColor: function (color) {
163
+ self.posColor = color;
164
+ },
165
+ setNegColor: function (color) {
166
+ self.negColor = color;
167
+ },
168
+ setLoading: function (aborter) {
169
+ var statsFetch = self.statsFetchInProgress;
170
+ if (statsFetch !== undefined && !statsFetch.signal.aborted) {
171
+ statsFetch.abort();
371
172
  }
372
- }]
373
- }, {
374
- label: 'Summary score mode',
375
- subMenu: ['min', 'max', 'avg', 'whiskers'].map(function (elt) {
376
- return {
377
- label: elt,
378
- onClick: function onClick() {
379
- return self.setSummaryScoreMode(elt);
380
- }
381
- };
382
- })
383
- }] : []), (0, _toConsumableArray2.default)(self.canHaveFill ? [{
384
- label: self.filled ? 'Turn off histogram fill' : 'Turn on histogram fill',
385
- onClick: function onClick() {
386
- self.setFill(!self.filled);
387
- }
388
- }] : []), [{
389
- label: self.scaleType === 'log' ? 'Set linear scale' : 'Set log scale',
390
- onClick: function onClick() {
391
- self.toggleLogScale();
392
- }
393
- }, {
394
- type: 'checkbox',
395
- label: 'Draw cross hatches',
396
- checked: self.displayCrossHatchesSetting,
397
- onClick: function onClick() {
398
- self.toggleCrossHatches();
399
- }
400
- }], (0, _toConsumableArray2.default)(Object.keys((0, _configuration.getConf)(self, 'renderers') || {}).length > 1 ? [{
401
- label: 'Renderer type',
402
- subMenu: (0, _toConsumableArray2.default)(rendererTypes.keys()).map(function (key) {
403
- return {
404
- label: key,
405
- onClick: function onClick() {
406
- return self.setRendererType(key);
407
- }
408
- };
409
- })
410
- }] : []), [{
411
- label: 'Autoscale type',
412
- subMenu: [['local', 'Local']].concat((0, _toConsumableArray2.default)(self.hasGlobalStats ? [['global', 'Global'], ['globalsd', 'Global ± 3σ']] : []), [['localsd', 'Local ± 3σ']]).map(function (_ref2) {
413
- var _ref3 = (0, _slicedToArray2.default)(_ref2, 2),
414
- val = _ref3[0],
415
- label = _ref3[1];
416
-
417
- return {
418
- label: label,
419
- onClick: function onClick() {
420
- self.setAutoscale(val);
421
- }
422
- };
423
- })
424
- }, {
425
- label: 'Set min/max score',
426
- onClick: function onClick() {
427
- (0, _util.getSession)(self).queueDialog(function (doneCallback) {
428
- return [SetMinMaxDlg, {
429
- model: self,
430
- handleClose: doneCallback
431
- }];
432
- });
433
- }
434
- }, {
435
- label: 'Set color',
436
- onClick: function onClick() {
437
- (0, _util.getSession)(self).queueDialog(function (doneCallback) {
438
- return [SetColorDlg, {
439
- model: self,
440
- handleClose: doneCallback
441
- }];
442
- });
443
- }
444
- }]);
445
- }
446
- };
447
- }).actions(function (self) {
448
- var superReload = self.reload,
449
- superRenderSvg = self.renderSvg;
450
-
451
- function getStats(_x) {
452
- return _getStats.apply(this, arguments);
453
- }
454
-
455
- function _getStats() {
456
- _getStats = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(opts) {
457
- var _getSession, rpcManager, nd, adapterConfig, autoscaleType, sessionId, params, results, scoreMin, scoreMean, scoreStdDev, _ref6, dynamicBlocks, bpPerPx, _results, _scoreMin, _scoreMean, _scoreStdDev;
458
-
459
- return _regenerator.default.wrap(function _callee4$(_context4) {
460
- while (1) {
461
- switch (_context4.prev = _context4.next) {
462
- case 0:
463
- _getSession = (0, _util.getSession)(self), rpcManager = _getSession.rpcManager;
464
- nd = (0, _configuration.getConf)(self, 'numStdDev') || 3;
465
- adapterConfig = self.adapterConfig, autoscaleType = self.autoscaleType;
466
- sessionId = (0, _tracks.getRpcSessionId)(self);
467
- params = _objectSpread({
468
- sessionId: sessionId,
469
- adapterConfig: adapterConfig,
470
- statusCallback: function statusCallback(message) {
471
- if ((0, _mobxStateTree.isAlive)(self)) {
472
- self.setMessage(message);
473
- }
474
- }
475
- }, opts);
476
-
477
- if (!(autoscaleType === 'global' || autoscaleType === 'globalsd')) {
478
- _context4.next = 11;
479
- break;
480
- }
481
-
482
- _context4.next = 8;
483
- return rpcManager.call(sessionId, 'WiggleGetGlobalStats', params);
484
-
485
- case 8:
486
- results = _context4.sent;
487
- scoreMin = results.scoreMin, scoreMean = results.scoreMean, scoreStdDev = results.scoreStdDev; // globalsd uses heuristic to avoid unnecessary scoreMin<0
488
- // if the scoreMin is never less than 0
489
- // helps with most coverage bigwigs just being >0
490
-
491
- return _context4.abrupt("return", autoscaleType === 'globalsd' ? _objectSpread(_objectSpread({}, results), {}, {
492
- scoreMin: scoreMin >= 0 ? 0 : scoreMean - nd * scoreStdDev,
493
- scoreMax: scoreMean + nd * scoreStdDev
494
- }) : results);
495
-
496
- case 11:
497
- if (!(autoscaleType === 'local' || autoscaleType === 'localsd')) {
498
- _context4.next = 18;
499
- break;
500
- }
501
-
502
- _ref6 = (0, _util.getContainingView)(self), dynamicBlocks = _ref6.dynamicBlocks, bpPerPx = _ref6.bpPerPx;
503
- _context4.next = 15;
504
- return rpcManager.call(sessionId, 'WiggleGetMultiRegionStats', _objectSpread(_objectSpread({}, params), {}, {
505
- regions: dynamicBlocks.contentBlocks.map(function (region) {
506
- var start = region.start,
507
- end = region.end;
508
- return _objectSpread(_objectSpread({}, JSON.parse(JSON.stringify(region))), {}, {
509
- start: Math.floor(start),
510
- end: Math.ceil(end)
511
- });
512
- }),
513
- bpPerPx: bpPerPx
514
- }));
515
-
516
- case 15:
517
- _results = _context4.sent;
518
- _scoreMin = _results.scoreMin, _scoreMean = _results.scoreMean, _scoreStdDev = _results.scoreStdDev; // localsd uses heuristic to avoid unnecessary scoreMin<0 if the
519
- // scoreMin is never less than 0 helps with most coverage bigwigs
520
- // just being >0
521
-
522
- return _context4.abrupt("return", autoscaleType === 'localsd' ? _objectSpread(_objectSpread({}, _results), {}, {
523
- scoreMin: _scoreMin >= 0 ? 0 : _scoreMean - nd * _scoreStdDev,
524
- scoreMax: _scoreMean + nd * _scoreStdDev
525
- }) : _results);
526
-
527
- case 18:
528
- if (!(autoscaleType === 'zscale')) {
529
- _context4.next = 20;
530
- break;
531
- }
532
-
533
- return _context4.abrupt("return", rpcManager.call(sessionId, 'WiggleGetGlobalStats', params));
534
-
535
- case 20:
536
- throw new Error("invalid autoscaleType '".concat(autoscaleType, "'"));
537
-
538
- case 21:
539
- case "end":
540
- return _context4.stop();
173
+ self.statsFetchInProgress = aborter;
174
+ },
175
+ // this overrides the BaseLinearDisplayModel to avoid popping up a
176
+ // feature detail display, but still sets the feature selection on the
177
+ // model so listeners can detect a click
178
+ selectFeature: function (feature) {
179
+ var session = (0, util_1.getSession)(self);
180
+ if ((0, util_1.isSelectionContainer)(session)) {
181
+ session.setSelection(feature);
541
182
  }
542
- }
543
- }, _callee4);
544
- }));
545
- return _getStats.apply(this, arguments);
546
- }
547
-
548
- return {
549
- // re-runs stats and refresh whole display on reload
550
- reload: function reload() {
551
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
552
- var aborter, stats;
553
- return _regenerator.default.wrap(function _callee$(_context) {
554
- while (1) {
555
- switch (_context.prev = _context.next) {
556
- case 0:
557
- self.setError();
558
- aborter = new AbortController();
559
- _context.prev = 2;
560
- _context.next = 5;
561
- return getStats(_objectSpread({
562
- signal: aborter.signal
563
- }, self.renderProps()));
564
-
565
- case 5:
566
- stats = _context.sent;
567
-
568
- if ((0, _mobxStateTree.isAlive)(self)) {
569
- self.updateStats(stats);
570
- superReload();
571
- }
572
-
573
- _context.next = 12;
574
- break;
575
-
576
- case 9:
577
- _context.prev = 9;
578
- _context.t0 = _context["catch"](2);
579
- self.setError(_context.t0);
580
-
581
- case 12:
582
- case "end":
583
- return _context.stop();
584
- }
183
+ },
184
+ setResolution: function (res) {
185
+ self.resolution = res;
186
+ },
187
+ setFill: function (fill) {
188
+ self.fill = fill;
189
+ },
190
+ toggleLogScale: function () {
191
+ if (self.scale !== 'log') {
192
+ self.scale = 'log';
585
193
  }
586
- }, _callee, null, [[2, 9]]);
587
- }))();
588
- },
589
- afterAttach: function afterAttach() {
590
- (0, _mobxStateTree.addDisposer)(self, (0, _mobx.autorun)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
591
- var aborter, view, wiggleStats;
592
- return _regenerator.default.wrap(function _callee2$(_context2) {
593
- while (1) {
594
- switch (_context2.prev = _context2.next) {
595
- case 0:
596
- _context2.prev = 0;
597
- aborter = new AbortController();
598
- view = (0, _util.getContainingView)(self);
599
- self.setLoading(aborter);
600
-
601
- if (view.initialized) {
602
- _context2.next = 6;
603
- break;
604
- }
605
-
606
- return _context2.abrupt("return");
607
-
608
- case 6:
609
- if (self.estimatedStatsReady) {
610
- _context2.next = 8;
611
- break;
612
- }
613
-
614
- return _context2.abrupt("return");
615
-
616
- case 8:
617
- if (!self.regionTooLarge) {
618
- _context2.next = 10;
619
- break;
620
- }
621
-
622
- return _context2.abrupt("return");
623
-
624
- case 10:
625
- _context2.next = 12;
626
- return getStats(_objectSpread({
627
- signal: aborter.signal
628
- }, self.renderProps()));
629
-
630
- case 12:
631
- wiggleStats = _context2.sent;
632
-
633
- if ((0, _mobxStateTree.isAlive)(self)) {
634
- self.updateStats(wiggleStats);
635
- }
636
-
637
- _context2.next = 19;
638
- break;
639
-
640
- case 16:
641
- _context2.prev = 16;
642
- _context2.t0 = _context2["catch"](0);
643
-
644
- if (!(0, _util.isAbortException)(_context2.t0) && (0, _mobxStateTree.isAlive)(self)) {
645
- console.error(_context2.t0);
646
- self.setError(_context2.t0);
647
- }
648
-
649
- case 19:
650
- case "end":
651
- return _context2.stop();
652
- }
194
+ else {
195
+ self.scale = 'linear';
653
196
  }
654
- }, _callee2, null, [[0, 16]]);
655
- })), {
656
- delay: 1000
657
- }));
658
- },
659
- renderSvg: function renderSvg(opts) {
660
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
661
- var needsScalebar, stats, _ref5, offsetPx;
662
-
663
- return _regenerator.default.wrap(function _callee3$(_context3) {
664
- while (1) {
665
- switch (_context3.prev = _context3.next) {
666
- case 0:
667
- _context3.next = 2;
668
- return (0, _mobx.when)(function () {
669
- return self.statsReady && !!self.regionCannotBeRenderedText;
670
- });
671
-
672
- case 2:
673
- needsScalebar = self.needsScalebar, stats = self.stats;
674
- _ref5 = (0, _util.getContainingView)(self), offsetPx = _ref5.offsetPx;
675
- _context3.t0 = _react.default;
676
- _context3.t1 = _react.default.Fragment;
677
- _context3.t2 = _react.default;
678
- _context3.t3 = {
679
- id: "snpcov"
680
- };
681
- _context3.next = 10;
682
- return superRenderSvg(opts);
683
-
684
- case 10:
685
- _context3.t4 = _context3.sent;
686
- _context3.t5 = _context3.t2.createElement.call(_context3.t2, "g", _context3.t3, _context3.t4);
687
- _context3.t6 = needsScalebar && stats ? /*#__PURE__*/_react.default.createElement("g", {
688
- transform: "translate(".concat(Math.max(-offsetPx, 0), ")")
689
- }, /*#__PURE__*/_react.default.createElement(_WiggleDisplayComponent.YScaleBar, {
690
- model: self,
691
- orientation: "left"
692
- })) : null;
693
- return _context3.abrupt("return", _context3.t0.createElement.call(_context3.t0, _context3.t1, null, _context3.t5, _context3.t6));
694
-
695
- case 14:
696
- case "end":
697
- return _context3.stop();
698
- }
197
+ },
198
+ setScaleType: function (scale) {
199
+ self.scale = scale;
200
+ },
201
+ setSummaryScoreMode: function (val) {
202
+ self.summaryScoreMode = val;
203
+ },
204
+ setAutoscale: function (val) {
205
+ self.autoscale = val;
206
+ },
207
+ setMaxScore: function (val) {
208
+ self.constraints.max = val;
209
+ },
210
+ setRendererType: function (val) {
211
+ self.rendererTypeNameState = val;
212
+ },
213
+ setMinScore: function (val) {
214
+ self.constraints.min = val;
215
+ },
216
+ toggleCrossHatches: function () {
217
+ self.displayCrossHatches = !self.displayCrossHatches;
218
+ },
219
+ setCrossHatches: function (cross) {
220
+ self.displayCrossHatches = cross;
221
+ },
222
+ }); })
223
+ .views(function (self) { return ({
224
+ get TooltipComponent() {
225
+ return Tooltip_1.default;
226
+ },
227
+ get adapterTypeName() {
228
+ return self.adapterConfig.type;
229
+ },
230
+ get rendererTypeName() {
231
+ var viewName = self.rendererTypeNameState || (0, configuration_1.getConf)(self, 'defaultRendering');
232
+ var rendererType = rendererTypes.get(viewName);
233
+ if (!rendererType) {
234
+ throw new Error("unknown alignments view name ".concat(viewName));
699
235
  }
700
- }, _callee3);
701
- }))();
702
- }
703
- };
704
- });
236
+ return rendererType;
237
+ },
238
+ // subclasses can define these, as snpcoverage track does
239
+ get filters() {
240
+ return undefined;
241
+ },
242
+ get scaleType() {
243
+ return self.scale || (0, configuration_1.getConf)(self, 'scaleType');
244
+ },
245
+ get maxScore() {
246
+ var max = self.constraints.max;
247
+ return max !== null && max !== void 0 ? max : (0, configuration_1.getConf)(self, 'maxScore');
248
+ },
249
+ get minScore() {
250
+ var min = self.constraints.min;
251
+ return min !== null && min !== void 0 ? min : (0, configuration_1.getConf)(self, 'minScore');
252
+ },
253
+ }); })
254
+ .views(function (self) { return ({
255
+ get rendererConfig() {
256
+ var configBlob = (0, configuration_1.getConf)(self, ['renderers', self.rendererTypeName]) || {};
257
+ var color = self.color, posColor = self.posColor, negColor = self.negColor, summaryScoreMode = self.summaryScoreMode, scaleType = self.scaleType, displayCrossHatches = self.displayCrossHatches, fill = self.fill;
258
+ return self.rendererType.configSchema.create(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, configBlob), (scaleType ? { scaleType: scaleType } : {})), (fill ? { filled: fill } : {})), (displayCrossHatches ? { displayCrossHatches: displayCrossHatches } : {})), (summaryScoreMode ? { summaryScoreMode: summaryScoreMode } : {})), (color ? { color: color } : {})), (negColor ? { negColor: negColor } : {})), (posColor ? { posColor: posColor } : {})), (0, mobx_state_tree_1.getEnv)(self));
259
+ },
260
+ }); })
261
+ .views(function (self) {
262
+ var oldDomain = [0, 0];
263
+ return {
264
+ get filled() {
265
+ var fill = self.fill, conf = self.rendererConfig;
266
+ return fill !== null && fill !== void 0 ? fill : (0, configuration_1.readConfObject)(conf, 'filled');
267
+ },
268
+ get summaryScoreModeSetting() {
269
+ var summaryScoreMode = self.summaryScoreMode, conf = self.rendererConfig;
270
+ return summaryScoreMode !== null && summaryScoreMode !== void 0 ? summaryScoreMode : (0, configuration_1.readConfObject)(conf, 'summaryScoreMode');
271
+ },
272
+ get domain() {
273
+ var stats = self.stats, scaleType = self.scaleType, minScore = self.minScore, maxScore = self.maxScore;
274
+ var ret = (0, util_2.getNiceDomain)({
275
+ domain: [stats.scoreMin, stats.scoreMax],
276
+ bounds: [minScore, maxScore],
277
+ scaleType: scaleType,
278
+ });
279
+ // avoid weird scalebar if log value and empty region displayed
280
+ if (scaleType === 'log' && ret[1] === Number.MIN_VALUE) {
281
+ return [0, Number.MIN_VALUE];
282
+ }
283
+ // avoid returning a new object if it matches the old value
284
+ if (JSON.stringify(oldDomain) !== JSON.stringify(ret)) {
285
+ oldDomain = ret;
286
+ }
287
+ return oldDomain;
288
+ },
289
+ get needsScalebar() {
290
+ return (self.rendererTypeName === 'XYPlotRenderer' ||
291
+ self.rendererTypeName === 'LinePlotRenderer');
292
+ },
293
+ get scaleOpts() {
294
+ return {
295
+ domain: this.domain,
296
+ stats: self.stats,
297
+ autoscaleType: this.autoscaleType,
298
+ scaleType: self.scaleType,
299
+ inverted: (0, configuration_1.getConf)(self, 'inverted'),
300
+ };
301
+ },
302
+ get canHaveFill() {
303
+ return self.rendererTypeName === 'XYPlotRenderer';
304
+ },
305
+ get autoscaleType() {
306
+ var _a;
307
+ return (_a = self.autoscale) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'autoscale');
308
+ },
309
+ get displayCrossHatchesSetting() {
310
+ var hatches = self.displayCrossHatches, conf = self.rendererConfig;
311
+ return hatches !== null && hatches !== void 0 ? hatches : (0, configuration_1.readConfObject)(conf, 'displayCrossHatches');
312
+ },
313
+ };
314
+ })
315
+ .views(function (self) { return ({
316
+ get ticks() {
317
+ var scaleType = self.scaleType, domain = self.domain, height = self.height;
318
+ var minimalTicks = (0, configuration_1.getConf)(self, 'minimalTicks');
319
+ var range = [height - exports.YSCALEBAR_LABEL_OFFSET, exports.YSCALEBAR_LABEL_OFFSET];
320
+ var scale = (0, util_2.getScale)({
321
+ scaleType: scaleType,
322
+ domain: domain,
323
+ range: range,
324
+ inverted: (0, configuration_1.getConf)(self, 'inverted'),
325
+ });
326
+ var ticks = (0, react_d3_axis_mod_1.axisPropsFromTickScale)(scale, 4);
327
+ return height < 100 || minimalTicks
328
+ ? __assign(__assign({}, ticks), { values: domain }) : ticks;
329
+ },
330
+ }); })
331
+ .views(function (self) {
332
+ var superRenderProps = self.renderProps;
333
+ return {
334
+ renderProps: function () {
335
+ var superProps = superRenderProps();
336
+ var filters = self.filters, ticks = self.ticks, height = self.height, resolution = self.resolution, scaleOpts = self.scaleOpts;
337
+ return __assign(__assign({}, superProps), { notReady: superProps.notReady || !self.statsReady, rpcDriverName: self.rpcDriverName, displayModel: self, config: self.rendererConfig, displayCrossHatches: self.displayCrossHatchesSetting, scaleOpts: scaleOpts, resolution: resolution, height: height, ticks: ticks, filters: filters });
338
+ },
339
+ get adapterCapabilities() {
340
+ return pluginManager.getAdapterType(self.adapterTypeName)
341
+ .adapterCapabilities;
342
+ },
343
+ get hasResolution() {
344
+ return this.adapterCapabilities.includes('hasResolution');
345
+ },
346
+ get hasGlobalStats() {
347
+ return this.adapterCapabilities.includes('hasGlobalStats');
348
+ },
349
+ };
350
+ })
351
+ .views(function (self) {
352
+ var superTrackMenuItems = self.trackMenuItems;
353
+ var hasRenderings = (0, configuration_1.getConf)(self, 'defaultRendering');
354
+ return {
355
+ trackMenuItems: function () {
356
+ return __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(superTrackMenuItems()), false), __read((self.hasResolution
357
+ ? [
358
+ {
359
+ label: 'Resolution',
360
+ subMenu: [
361
+ {
362
+ label: 'Finer resolution',
363
+ onClick: function () { return self.setResolution(self.resolution * 5); },
364
+ },
365
+ {
366
+ label: 'Coarser resolution',
367
+ onClick: function () { return self.setResolution(self.resolution / 5); },
368
+ },
369
+ ],
370
+ },
371
+ {
372
+ label: 'Summary score mode',
373
+ subMenu: ['min', 'max', 'avg', 'whiskers'].map(function (elt) { return ({
374
+ label: elt,
375
+ onClick: function () { return self.setSummaryScoreMode(elt); },
376
+ }); }),
377
+ },
378
+ ]
379
+ : [])), false), __read((self.canHaveFill
380
+ ? [
381
+ {
382
+ label: self.filled
383
+ ? 'Turn off histogram fill'
384
+ : 'Turn on histogram fill',
385
+ onClick: function () { return self.setFill(!self.filled); },
386
+ },
387
+ ]
388
+ : [])), false), [
389
+ {
390
+ label: self.scaleType === 'log' ? 'Set linear scale' : 'Set log scale',
391
+ onClick: function () { return self.toggleLogScale(); },
392
+ },
393
+ {
394
+ type: 'checkbox',
395
+ label: 'Draw cross hatches',
396
+ checked: self.displayCrossHatchesSetting,
397
+ onClick: function () { return self.toggleCrossHatches(); },
398
+ }
399
+ ], false), __read((hasRenderings
400
+ ? [
401
+ {
402
+ label: 'Renderer type',
403
+ subMenu: ['xyplot', 'density', 'line'].map(function (key) { return ({
404
+ label: key,
405
+ onClick: function () { return self.setRendererType(key); },
406
+ }); }),
407
+ },
408
+ ]
409
+ : [])), false), [
410
+ {
411
+ label: 'Autoscale type',
412
+ subMenu: __spreadArray(__spreadArray([
413
+ ['local', 'Local']
414
+ ], __read((self.hasGlobalStats
415
+ ? [
416
+ ['global', 'Global'],
417
+ ['globalsd', 'Global ± 3σ'],
418
+ ]
419
+ : [])), false), [
420
+ ['localsd', 'Local ± 3σ'],
421
+ ], false).map(function (_a) {
422
+ var _b = __read(_a, 2), val = _b[0], label = _b[1];
423
+ return ({
424
+ label: label,
425
+ onClick: function () { return self.setAutoscale(val); },
426
+ });
427
+ }),
428
+ },
429
+ {
430
+ label: 'Set min/max score',
431
+ onClick: function () {
432
+ (0, util_1.getSession)(self).queueDialog(function (handleClose) { return [
433
+ SetMinMaxDlg,
434
+ { model: self, handleClose: handleClose },
435
+ ]; });
436
+ },
437
+ },
438
+ {
439
+ label: 'Set color',
440
+ onClick: function () {
441
+ (0, util_1.getSession)(self).queueDialog(function (handleClose) { return [
442
+ SetColorDlg,
443
+ { model: self, handleClose: handleClose },
444
+ ]; });
445
+ },
446
+ },
447
+ ], false);
448
+ },
449
+ };
450
+ })
451
+ .actions(function (self) {
452
+ var superReload = self.reload, superRenderSvg = self.renderSvg;
453
+ function getStats(opts) {
454
+ return __awaiter(this, void 0, void 0, function () {
455
+ var rpcManager, nd, adapterConfig, autoscaleType, sessionId, params, results, scoreMin, scoreMean, scoreStdDev, _a, dynamicBlocks, bpPerPx, results, scoreMin, scoreMean, scoreStdDev;
456
+ return __generator(this, function (_b) {
457
+ switch (_b.label) {
458
+ case 0:
459
+ rpcManager = (0, util_1.getSession)(self).rpcManager;
460
+ nd = (0, configuration_1.getConf)(self, 'numStdDev') || 3;
461
+ adapterConfig = self.adapterConfig, autoscaleType = self.autoscaleType;
462
+ sessionId = (0, tracks_1.getRpcSessionId)(self);
463
+ params = __assign({ sessionId: sessionId, adapterConfig: adapterConfig, statusCallback: function (message) {
464
+ if ((0, mobx_state_tree_1.isAlive)(self)) {
465
+ self.setMessage(message);
466
+ }
467
+ } }, opts);
468
+ if (!(autoscaleType === 'global' || autoscaleType === 'globalsd')) return [3 /*break*/, 2];
469
+ return [4 /*yield*/, rpcManager.call(sessionId, 'WiggleGetGlobalStats', params)];
470
+ case 1:
471
+ results = (_b.sent());
472
+ scoreMin = results.scoreMin, scoreMean = results.scoreMean, scoreStdDev = results.scoreStdDev;
473
+ // globalsd uses heuristic to avoid unnecessary scoreMin<0
474
+ // if the scoreMin is never less than 0
475
+ // helps with most coverage bigwigs just being >0
476
+ return [2 /*return*/, autoscaleType === 'globalsd'
477
+ ? __assign(__assign({}, results), { scoreMin: scoreMin >= 0 ? 0 : scoreMean - nd * scoreStdDev, scoreMax: scoreMean + nd * scoreStdDev }) : results];
478
+ case 2:
479
+ if (!(autoscaleType === 'local' || autoscaleType === 'localsd')) return [3 /*break*/, 4];
480
+ _a = (0, util_1.getContainingView)(self), dynamicBlocks = _a.dynamicBlocks, bpPerPx = _a.bpPerPx;
481
+ return [4 /*yield*/, rpcManager.call(sessionId, 'WiggleGetMultiRegionStats', __assign(__assign({}, params), { regions: dynamicBlocks.contentBlocks.map(function (region) {
482
+ var start = region.start, end = region.end;
483
+ return __assign(__assign({}, JSON.parse(JSON.stringify(region))), { start: Math.floor(start), end: Math.ceil(end) });
484
+ }), bpPerPx: bpPerPx }))];
485
+ case 3:
486
+ results = (_b.sent());
487
+ scoreMin = results.scoreMin, scoreMean = results.scoreMean, scoreStdDev = results.scoreStdDev;
488
+ // localsd uses heuristic to avoid unnecessary scoreMin<0 if the
489
+ // scoreMin is never less than 0 helps with most coverage bigwigs
490
+ // just being >0
491
+ return [2 /*return*/, autoscaleType === 'localsd'
492
+ ? __assign(__assign({}, results), { scoreMin: scoreMin >= 0 ? 0 : scoreMean - nd * scoreStdDev, scoreMax: scoreMean + nd * scoreStdDev }) : results];
493
+ case 4:
494
+ if (autoscaleType === 'zscale') {
495
+ return [2 /*return*/, rpcManager.call(sessionId, 'WiggleGetGlobalStats', params)];
496
+ }
497
+ throw new Error("invalid autoscaleType '".concat(autoscaleType, "'"));
498
+ }
499
+ });
500
+ });
501
+ }
502
+ return {
503
+ // re-runs stats and refresh whole display on reload
504
+ reload: function () {
505
+ return __awaiter(this, void 0, void 0, function () {
506
+ var aborter, stats, e_1;
507
+ return __generator(this, function (_a) {
508
+ switch (_a.label) {
509
+ case 0:
510
+ self.setError();
511
+ aborter = new AbortController();
512
+ self.setLoading(aborter);
513
+ _a.label = 1;
514
+ case 1:
515
+ _a.trys.push([1, 3, , 4]);
516
+ return [4 /*yield*/, getStats(__assign({ signal: aborter.signal }, self.renderProps()))];
517
+ case 2:
518
+ stats = _a.sent();
519
+ if ((0, mobx_state_tree_1.isAlive)(self)) {
520
+ self.updateStats(stats);
521
+ superReload();
522
+ }
523
+ return [3 /*break*/, 4];
524
+ case 3:
525
+ e_1 = _a.sent();
526
+ self.setError(e_1);
527
+ return [3 /*break*/, 4];
528
+ case 4: return [2 /*return*/];
529
+ }
530
+ });
531
+ });
532
+ },
533
+ afterAttach: function () {
534
+ var _this = this;
535
+ (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(function () { return __awaiter(_this, void 0, void 0, function () {
536
+ var view, aborter, wiggleStats, e_2;
537
+ return __generator(this, function (_a) {
538
+ switch (_a.label) {
539
+ case 0:
540
+ _a.trys.push([0, 2, , 3]);
541
+ view = (0, util_1.getContainingView)(self);
542
+ if (!view.initialized) {
543
+ return [2 /*return*/];
544
+ }
545
+ if (!self.estimatedStatsReady) {
546
+ return [2 /*return*/];
547
+ }
548
+ if (self.regionTooLarge) {
549
+ return [2 /*return*/];
550
+ }
551
+ aborter = new AbortController();
552
+ self.setLoading(aborter);
553
+ return [4 /*yield*/, getStats(__assign({ signal: aborter.signal }, self.renderProps()))];
554
+ case 1:
555
+ wiggleStats = _a.sent();
556
+ if ((0, mobx_state_tree_1.isAlive)(self)) {
557
+ self.updateStats(wiggleStats);
558
+ }
559
+ return [3 /*break*/, 3];
560
+ case 2:
561
+ e_2 = _a.sent();
562
+ if (!(0, util_1.isAbortException)(e_2) && (0, mobx_state_tree_1.isAlive)(self)) {
563
+ console.error(e_2);
564
+ self.setError(e_2);
565
+ }
566
+ return [3 /*break*/, 3];
567
+ case 3: return [2 /*return*/];
568
+ }
569
+ });
570
+ }); }, { delay: 1000 }));
571
+ },
572
+ renderSvg: function (opts) {
573
+ return __awaiter(this, void 0, void 0, function () {
574
+ var needsScalebar, stats, offsetPx, _a, _b, _c, _d, _e, _f;
575
+ return __generator(this, function (_g) {
576
+ switch (_g.label) {
577
+ case 0: return [4 /*yield*/, (0, mobx_1.when)(function () { return self.statsReady && !!self.regionCannotBeRenderedText; })];
578
+ case 1:
579
+ _g.sent();
580
+ needsScalebar = self.needsScalebar, stats = self.stats;
581
+ offsetPx = (0, util_1.getContainingView)(self).offsetPx;
582
+ _b = (_a = react_1.default).createElement;
583
+ _c = [react_1.default.Fragment, null];
584
+ _e = (_d = react_1.default).createElement;
585
+ _f = ["g", { id: "snpcov" }];
586
+ return [4 /*yield*/, superRenderSvg(opts)];
587
+ case 2: return [2 /*return*/, (_b.apply(_a, _c.concat([_e.apply(_d, _f.concat([_g.sent()])), needsScalebar && stats ? (react_1.default.createElement("g", { transform: "translate(".concat(Math.max(-offsetPx, 0), ")") },
588
+ react_1.default.createElement(WiggleDisplayComponent_1.YScaleBar, { model: self, orientation: "left" }))) : null])))];
589
+ }
590
+ });
591
+ });
592
+ },
593
+ };
594
+ });
705
595
  };
706
-
707
- var _default = stateModelFactory;
708
- exports.default = _default;
596
+ exports.default = stateModelFactory;
597
+ //# sourceMappingURL=model.js.map