@jbrowse/plugin-wiggle 2.1.0 → 2.1.3
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.
- package/dist/BigWigAdapter/BigWigAdapter.js +74 -200
- package/dist/BigWigAdapter/BigWigAdapter.js.map +1 -1
- package/dist/BigWigAdapter/configSchema.js +1 -1
- package/dist/BigWigAdapter/configSchema.js.map +1 -1
- package/dist/BigWigAdapter/index.js +14 -16
- package/dist/BigWigAdapter/index.js.map +1 -1
- package/dist/CreateMultiWiggleExtension/ConfirmDialog.js +12 -29
- package/dist/CreateMultiWiggleExtension/ConfirmDialog.js.map +1 -1
- package/dist/CreateMultiWiggleExtension/index.js +23 -57
- package/dist/CreateMultiWiggleExtension/index.js.map +1 -1
- package/dist/DensityRenderer/DensityRenderer.js +6 -66
- package/dist/DensityRenderer/DensityRenderer.js.map +1 -1
- package/dist/DensityRenderer/configSchema.js +3 -3
- package/dist/DensityRenderer/configSchema.js.map +1 -1
- package/dist/DensityRenderer/index.js +11 -13
- package/dist/DensityRenderer/index.js.map +1 -1
- package/dist/LinePlotRenderer/LinePlotRenderer.js +11 -78
- package/dist/LinePlotRenderer/LinePlotRenderer.js.map +1 -1
- package/dist/LinePlotRenderer/configSchema.js +3 -3
- package/dist/LinePlotRenderer/configSchema.js.map +1 -1
- package/dist/LinePlotRenderer/index.js +11 -13
- package/dist/LinePlotRenderer/index.js.map +1 -1
- package/dist/LinearWiggleDisplay/components/SetColorDialog.js +18 -35
- package/dist/LinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
- package/dist/LinearWiggleDisplay/components/SetMinMaxDialog.js +16 -32
- package/dist/LinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -1
- package/dist/LinearWiggleDisplay/components/Tooltip.js +15 -26
- package/dist/LinearWiggleDisplay/components/Tooltip.js.map +1 -1
- package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.js +15 -26
- package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -1
- package/dist/LinearWiggleDisplay/components/YScaleBar.js +6 -18
- package/dist/LinearWiggleDisplay/components/YScaleBar.js.map +1 -1
- package/dist/LinearWiggleDisplay/index.js +12 -12
- package/dist/LinearWiggleDisplay/index.js.map +1 -1
- package/dist/LinearWiggleDisplay/models/configSchema.js +6 -6
- package/dist/LinearWiggleDisplay/models/configSchema.js.map +1 -1
- package/dist/LinearWiggleDisplay/models/model.js +378 -451
- package/dist/LinearWiggleDisplay/models/model.js.map +1 -1
- package/dist/MultiDensityRenderer/MultiDensityRenderer.js +32 -125
- package/dist/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -1
- package/dist/MultiDensityRenderer/configSchema.js +3 -3
- package/dist/MultiDensityRenderer/configSchema.js.map +1 -1
- package/dist/MultiDensityRenderer/index.js +11 -13
- package/dist/MultiDensityRenderer/index.js.map +1 -1
- package/dist/MultiLineRenderer/MultiLineRenderer.js +21 -114
- package/dist/MultiLineRenderer/MultiLineRenderer.js.map +1 -1
- package/dist/MultiLineRenderer/configSchema.js +4 -4
- package/dist/MultiLineRenderer/configSchema.js.map +1 -1
- package/dist/MultiLineRenderer/index.js +11 -13
- package/dist/MultiLineRenderer/index.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js +72 -120
- package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/components/SetMinMaxDialog.js +16 -32
- package/dist/MultiLinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/components/Tooltip.js +21 -50
- package/dist/MultiLinearWiggleDisplay/components/Tooltip.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +2 -2
- package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.js +53 -92
- package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/components/YScaleBar.js +6 -18
- package/dist/MultiLinearWiggleDisplay/components/YScaleBar.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/components/util.js +16 -18
- package/dist/MultiLinearWiggleDisplay/components/util.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/index.js +9 -9
- package/dist/MultiLinearWiggleDisplay/index.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/models/configSchema.js +8 -8
- package/dist/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/models/model.js +489 -566
- package/dist/MultiLinearWiggleDisplay/models/model.js.map +1 -1
- package/dist/MultiQuantitativeTrack/index.js +8 -8
- package/dist/MultiQuantitativeTrack/index.js.map +1 -1
- package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js +29 -121
- package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -1
- package/dist/MultiRowLineRenderer/configSchema.js +4 -4
- package/dist/MultiRowLineRenderer/configSchema.js.map +1 -1
- package/dist/MultiRowLineRenderer/index.js +11 -13
- package/dist/MultiRowLineRenderer/index.js.map +1 -1
- package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +35 -131
- package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -1
- package/dist/MultiRowXYPlotRenderer/configSchema.js +4 -4
- package/dist/MultiRowXYPlotRenderer/configSchema.js.map +1 -1
- package/dist/MultiRowXYPlotRenderer/index.js +11 -13
- package/dist/MultiRowXYPlotRenderer/index.js.map +1 -1
- package/dist/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +1 -0
- package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js +80 -232
- package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js.map +1 -1
- package/dist/MultiWiggleAdapter/configSchema.js +1 -1
- package/dist/MultiWiggleAdapter/configSchema.js.map +1 -1
- package/dist/MultiWiggleAdapter/index.js +14 -18
- package/dist/MultiWiggleAdapter/index.js.map +1 -1
- package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +30 -56
- package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -1
- package/dist/MultiWiggleAddTrackWidget/index.js +10 -12
- package/dist/MultiWiggleAddTrackWidget/index.js.map +1 -1
- package/dist/MultiWiggleRendering.js +45 -109
- package/dist/MultiWiggleRendering.js.map +1 -1
- package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js +24 -120
- package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -1
- package/dist/MultiXYPlotRenderer/configSchema.js +4 -4
- package/dist/MultiXYPlotRenderer/configSchema.js.map +1 -1
- package/dist/MultiXYPlotRenderer/index.js +11 -13
- package/dist/MultiXYPlotRenderer/index.js.map +1 -1
- package/dist/QuantitativeTrack/index.js +8 -8
- package/dist/QuantitativeTrack/index.js.map +1 -1
- package/dist/Tooltip.js +26 -54
- package/dist/Tooltip.js.map +1 -1
- package/dist/WiggleBaseRenderer.d.ts +6 -6
- package/dist/WiggleBaseRenderer.js +34 -125
- package/dist/WiggleBaseRenderer.js.map +1 -1
- package/dist/WiggleRPC/rpcMethods.d.ts +2 -2
- package/dist/WiggleRPC/rpcMethods.js +101 -244
- package/dist/WiggleRPC/rpcMethods.js.map +1 -1
- package/dist/WiggleRendering.js +20 -69
- package/dist/WiggleRendering.js.map +1 -1
- package/dist/XYPlotRenderer/XYPlotRenderer.js +24 -121
- package/dist/XYPlotRenderer/XYPlotRenderer.js.map +1 -1
- package/dist/XYPlotRenderer/configSchema.js +4 -4
- package/dist/XYPlotRenderer/configSchema.js.map +1 -1
- package/dist/XYPlotRenderer/index.js +11 -13
- package/dist/XYPlotRenderer/index.js.map +1 -1
- package/dist/configSchema.js +2 -2
- package/dist/configSchema.js.map +1 -1
- package/dist/drawxy.js +192 -311
- package/dist/drawxy.js.map +1 -1
- package/dist/index.js +44 -62
- package/dist/index.js.map +1 -1
- package/dist/util.js +105 -168
- package/dist/util.js.map +1 -1
- package/esm/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +1 -0
- package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js +5 -3
- package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js.map +1 -1
- package/esm/WiggleBaseRenderer.d.ts +6 -6
- package/esm/WiggleBaseRenderer.js +4 -3
- package/esm/WiggleBaseRenderer.js.map +1 -1
- package/esm/WiggleRPC/rpcMethods.d.ts +2 -2
- package/esm/WiggleRPC/rpcMethods.js.map +1 -1
- package/package.json +2 -3
- package/src/MultiWiggleAdapter/MultiWiggleAdapter.ts +7 -3
- package/src/WiggleBaseRenderer.tsx +4 -3
- package/src/WiggleRPC/rpcMethods.ts +8 -2
- package/src/declare.d.ts +0 -2
|
@@ -1,15 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
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];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
3
|
if (k2 === undefined) k2 = k;
|
|
15
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -33,501 +22,469 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
33
22
|
__setModuleDefault(result, mod);
|
|
34
23
|
return result;
|
|
35
24
|
};
|
|
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);
|
|
83
|
-
}
|
|
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];
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
96
|
-
};
|
|
97
25
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
98
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
99
27
|
};
|
|
100
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
29
|
+
const react_1 = __importStar(require("react"));
|
|
30
|
+
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
31
|
+
const mobx_1 = require("mobx");
|
|
32
|
+
const react_d3_axis_mod_1 = require("react-d3-axis-mod");
|
|
33
|
+
const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
|
|
106
34
|
// jbrowse imports
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
35
|
+
const configuration_1 = require("@jbrowse/core/configuration");
|
|
36
|
+
const util_1 = require("@jbrowse/core/util");
|
|
37
|
+
const tracks_1 = require("@jbrowse/core/util/tracks");
|
|
38
|
+
const colors_1 = require("@jbrowse/core/ui/colors");
|
|
39
|
+
const plugin_linear_genome_view_1 = require("@jbrowse/plugin-linear-genome-view");
|
|
112
40
|
// locals
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return '#000000'.replace(/0/g, function () { return (~~(Math.random() * 16)).toString(16); });
|
|
118
|
-
};
|
|
41
|
+
const util_2 = require("../../util");
|
|
42
|
+
const Tooltip_1 = __importDefault(require("../components/Tooltip"));
|
|
43
|
+
const WiggleDisplayComponent_1 = require("../components/WiggleDisplayComponent");
|
|
44
|
+
const randomColor = () => '#000000'.replace(/0/g, () => (~~(Math.random() * 16)).toString(16));
|
|
119
45
|
// lazt components
|
|
120
|
-
|
|
121
|
-
|
|
46
|
+
const SetMinMaxDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../components/SetMinMaxDialog'))));
|
|
47
|
+
const SetColorDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../components/SetColorDialog'))));
|
|
122
48
|
// using a map because it preserves order
|
|
123
|
-
|
|
49
|
+
const rendererTypes = new Map([
|
|
124
50
|
['xyplot', 'MultiXYPlotRenderer'],
|
|
125
51
|
['multirowxy', 'MultiRowXYPlotRenderer'],
|
|
126
52
|
['multirowdensity', 'MultiDensityRenderer'],
|
|
127
53
|
['multiline', 'MultiLineRenderer'],
|
|
128
54
|
['multirowline', 'MultiRowLineRenderer'],
|
|
129
55
|
]);
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
56
|
+
const stateModelFactory = (pluginManager, configSchema) => mobx_state_tree_1.types
|
|
57
|
+
.compose('MultiLinearWiggleDisplay', plugin_linear_genome_view_1.BaseLinearDisplay, mobx_state_tree_1.types.model({
|
|
58
|
+
type: mobx_state_tree_1.types.literal('MultiLinearWiggleDisplay'),
|
|
59
|
+
configuration: (0, configuration_1.ConfigurationReference)(configSchema),
|
|
60
|
+
selectedRendering: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.string, ''),
|
|
61
|
+
resolution: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.number, 1),
|
|
62
|
+
fill: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
|
|
63
|
+
minSize: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
|
|
64
|
+
height: 200,
|
|
65
|
+
color: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
|
|
66
|
+
posColor: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
|
|
67
|
+
negColor: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
|
|
68
|
+
summaryScoreMode: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
|
|
69
|
+
rendererTypeNameState: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
|
|
70
|
+
scale: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
|
|
71
|
+
autoscale: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
|
|
72
|
+
displayCrossHatches: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
|
|
73
|
+
layout: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), []),
|
|
74
|
+
constraints: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.model({
|
|
75
|
+
max: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
|
|
76
|
+
min: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
|
|
77
|
+
}), {}),
|
|
78
|
+
}))
|
|
79
|
+
.volatile(() => ({
|
|
80
|
+
statsReady: false,
|
|
81
|
+
message: undefined,
|
|
82
|
+
stats: { scoreMin: 0, scoreMax: 50 },
|
|
83
|
+
statsRegion: undefined,
|
|
84
|
+
statsFetchInProgress: undefined,
|
|
85
|
+
featureUnderMouseVolatile: undefined,
|
|
86
|
+
sourcesVolatile: undefined,
|
|
87
|
+
}))
|
|
88
|
+
.actions(self => ({
|
|
89
|
+
setLayout(layout) {
|
|
90
|
+
self.layout = layout;
|
|
91
|
+
},
|
|
92
|
+
clearLayout() {
|
|
93
|
+
self.layout = [];
|
|
94
|
+
},
|
|
95
|
+
updateStats(stats) {
|
|
96
|
+
const { scoreMin, scoreMax } = stats;
|
|
97
|
+
const EPSILON = 0.000001;
|
|
98
|
+
if (Math.abs(self.stats.scoreMax - scoreMax) > EPSILON ||
|
|
99
|
+
Math.abs(self.stats.scoreMin - scoreMin) > EPSILON) {
|
|
100
|
+
self.stats = { scoreMin, scoreMax };
|
|
101
|
+
self.statsReady = true;
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
setSources(sources) {
|
|
105
|
+
if (!(0, fast_deep_equal_1.default)(sources, self.sourcesVolatile)) {
|
|
106
|
+
self.sourcesVolatile = sources;
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
setColor(color) {
|
|
110
|
+
self.color = color;
|
|
111
|
+
},
|
|
112
|
+
setPosColor(color) {
|
|
113
|
+
self.posColor = color;
|
|
114
|
+
},
|
|
115
|
+
setNegColor(color) {
|
|
116
|
+
self.negColor = color;
|
|
117
|
+
},
|
|
118
|
+
setLoading(aborter) {
|
|
119
|
+
const { statsFetchInProgress: statsFetch } = self;
|
|
120
|
+
if (statsFetch !== undefined && !statsFetch.signal.aborted) {
|
|
121
|
+
statsFetch.abort();
|
|
122
|
+
}
|
|
123
|
+
self.statsFetchInProgress = aborter;
|
|
124
|
+
},
|
|
125
|
+
// this overrides the BaseLinearDisplayModel to avoid popping up a
|
|
126
|
+
// feature detail display, but still sets the feature selection on the
|
|
127
|
+
// model so listeners can detect a click
|
|
128
|
+
selectFeature(feature) {
|
|
129
|
+
const session = (0, util_1.getSession)(self);
|
|
130
|
+
if ((0, util_1.isSelectionContainer)(session)) {
|
|
131
|
+
session.setSelection(feature);
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
setFeatureUnderMouse(f) {
|
|
135
|
+
self.featureUnderMouseVolatile = f;
|
|
136
|
+
},
|
|
137
|
+
setResolution(res) {
|
|
138
|
+
self.resolution = res;
|
|
139
|
+
},
|
|
140
|
+
setFill(fill) {
|
|
141
|
+
if (fill === 0) {
|
|
142
|
+
self.fill = true;
|
|
143
|
+
self.minSize = 0;
|
|
144
|
+
}
|
|
145
|
+
else if (fill === 1) {
|
|
146
|
+
self.fill = false;
|
|
147
|
+
self.minSize = 1;
|
|
148
|
+
}
|
|
149
|
+
else if (fill === 2) {
|
|
150
|
+
self.fill = false;
|
|
151
|
+
self.minSize = 2;
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
toggleLogScale() {
|
|
155
|
+
if (self.scale !== 'log') {
|
|
156
|
+
self.scale = 'log';
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
self.scale = 'linear';
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
setScaleType(scale) {
|
|
163
|
+
self.scale = scale;
|
|
164
|
+
},
|
|
165
|
+
setSummaryScoreMode(val) {
|
|
166
|
+
self.summaryScoreMode = val;
|
|
167
|
+
},
|
|
168
|
+
setAutoscale(val) {
|
|
169
|
+
self.autoscale = val;
|
|
170
|
+
},
|
|
171
|
+
setMaxScore(val) {
|
|
172
|
+
self.constraints.max = val;
|
|
173
|
+
},
|
|
174
|
+
setRendererType(val) {
|
|
175
|
+
self.rendererTypeNameState = val;
|
|
176
|
+
},
|
|
177
|
+
setMinScore(val) {
|
|
178
|
+
self.constraints.min = val;
|
|
179
|
+
},
|
|
180
|
+
toggleCrossHatches() {
|
|
181
|
+
self.displayCrossHatches = !self.displayCrossHatches;
|
|
182
|
+
},
|
|
183
|
+
setCrossHatches(cross) {
|
|
184
|
+
self.displayCrossHatches = cross;
|
|
185
|
+
},
|
|
186
|
+
}))
|
|
187
|
+
.views(self => ({
|
|
188
|
+
get featureUnderMouse() {
|
|
189
|
+
return self.featureUnderMouseVolatile;
|
|
190
|
+
},
|
|
191
|
+
get TooltipComponent() {
|
|
192
|
+
return Tooltip_1.default;
|
|
193
|
+
},
|
|
194
|
+
get adapterTypeName() {
|
|
195
|
+
return self.adapterConfig.type;
|
|
196
|
+
},
|
|
197
|
+
get rendererTypeNameSimple() {
|
|
198
|
+
return self.rendererTypeNameState || (0, configuration_1.getConf)(self, 'defaultRendering');
|
|
199
|
+
},
|
|
200
|
+
get rendererTypeName() {
|
|
201
|
+
const name = this.rendererTypeNameSimple;
|
|
202
|
+
const rendererType = rendererTypes.get(name);
|
|
203
|
+
if (!rendererType) {
|
|
204
|
+
throw new Error(`unknown renderer ${name}`);
|
|
205
|
+
}
|
|
206
|
+
return rendererType;
|
|
207
|
+
},
|
|
208
|
+
// subclasses can define these, as snpcoverage track does
|
|
209
|
+
get filters() {
|
|
210
|
+
return undefined;
|
|
211
|
+
},
|
|
212
|
+
get scaleType() {
|
|
213
|
+
var _a;
|
|
214
|
+
return (_a = self.scale) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'scaleType');
|
|
215
|
+
},
|
|
216
|
+
get maxScore() {
|
|
217
|
+
var _a;
|
|
218
|
+
return (_a = self.constraints.max) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'maxScore');
|
|
219
|
+
},
|
|
220
|
+
get minScore() {
|
|
221
|
+
var _a;
|
|
222
|
+
return (_a = self.constraints.min) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'minScore');
|
|
223
|
+
},
|
|
224
|
+
}))
|
|
225
|
+
.views(self => ({
|
|
226
|
+
get rendererConfig() {
|
|
227
|
+
const configBlob = (0, configuration_1.getConf)(self, ['renderers', self.rendererTypeName]) || {};
|
|
228
|
+
const { color, displayCrossHatches, fill, minSize, negColor, posColor, summaryScoreMode, scaleType, } = self;
|
|
229
|
+
return self.rendererType.configSchema.create({
|
|
230
|
+
...configBlob,
|
|
231
|
+
...(scaleType ? { scaleType } : {}),
|
|
232
|
+
...(fill !== undefined ? { filled: fill } : {}),
|
|
233
|
+
...(displayCrossHatches !== undefined
|
|
234
|
+
? { displayCrossHatches }
|
|
235
|
+
: {}),
|
|
236
|
+
...(summaryScoreMode !== undefined ? { summaryScoreMode } : {}),
|
|
237
|
+
...(color !== undefined ? { color } : {}),
|
|
238
|
+
...(negColor !== undefined ? { negColor } : {}),
|
|
239
|
+
...(posColor !== undefined ? { posColor } : {}),
|
|
240
|
+
...(minSize !== undefined ? { minSize } : {}),
|
|
241
|
+
}, (0, mobx_state_tree_1.getEnv)(self));
|
|
242
|
+
},
|
|
243
|
+
}))
|
|
244
|
+
.views(self => ({
|
|
245
|
+
// everything except density gets a numerical scalebar
|
|
246
|
+
get needsScalebar() {
|
|
247
|
+
return (self.rendererTypeName === 'MultiXYPlotRenderer' ||
|
|
248
|
+
self.rendererTypeName === 'MultiRowXYPlotRenderer' ||
|
|
249
|
+
self.rendererTypeName === 'MultiLineRenderer' ||
|
|
250
|
+
self.rendererTypeName === 'MultiRowLineRenderer');
|
|
251
|
+
},
|
|
252
|
+
get needsFullHeightScalebar() {
|
|
253
|
+
return (self.rendererTypeName === 'MultiXYPlotRenderer' ||
|
|
254
|
+
self.rendererTypeName === 'MultiLineRenderer');
|
|
255
|
+
},
|
|
256
|
+
get isMultiRow() {
|
|
257
|
+
return (self.rendererTypeName === 'MultiRowXYPlotRenderer' ||
|
|
258
|
+
self.rendererTypeName === 'MultiRowLineRenderer' ||
|
|
259
|
+
self.rendererTypeName === 'MultiDensityRenderer');
|
|
260
|
+
},
|
|
261
|
+
// can be used to give it a "color scale" like a R heatmap, not
|
|
262
|
+
// implemented like this yet but flag can be used for this
|
|
263
|
+
get needsCustomLegend() {
|
|
264
|
+
return self.rendererTypeName === 'MultiDensityRenderer';
|
|
265
|
+
},
|
|
266
|
+
get canHaveFill() {
|
|
267
|
+
return (self.rendererTypeName === 'MultiXYPlotRenderer' ||
|
|
268
|
+
self.rendererTypeName === 'MultiRowXYPlotRenderer');
|
|
269
|
+
},
|
|
270
|
+
// the multirowxy and multiline don't need to use colors on the legend
|
|
271
|
+
// boxes since their track is drawn with the color. sort of a stylistic choice
|
|
272
|
+
get renderColorBoxes() {
|
|
273
|
+
return !(self.rendererTypeName === 'MultiRowLineRenderer' ||
|
|
274
|
+
self.rendererTypeName === 'MultiRowXYPlotRenderer');
|
|
275
|
+
},
|
|
276
|
+
// positions multi-row below the tracklabel even if using overlap
|
|
277
|
+
// tracklabels for everything else
|
|
278
|
+
get prefersOffset() {
|
|
279
|
+
return this.isMultiRow;
|
|
280
|
+
},
|
|
281
|
+
get sources() {
|
|
282
|
+
var _a;
|
|
283
|
+
const sources = Object.fromEntries(((_a = self.sourcesVolatile) === null || _a === void 0 ? void 0 : _a.map(s => [s.name, s])) || []);
|
|
284
|
+
const iter = self.layout.length ? self.layout : self.sourcesVolatile;
|
|
285
|
+
return iter === null || iter === void 0 ? void 0 : iter.map(s => ({
|
|
286
|
+
...sources[s.name],
|
|
287
|
+
...s,
|
|
288
|
+
})).map((s, i) => ({
|
|
289
|
+
...s,
|
|
290
|
+
color: s.color ||
|
|
291
|
+
(!this.isMultiRow ? colors_1.set1[i] || randomColor() : 'blue'),
|
|
292
|
+
}));
|
|
293
|
+
},
|
|
294
|
+
}))
|
|
295
|
+
.views(self => {
|
|
296
|
+
let oldDomain = [0, 0];
|
|
297
|
+
return {
|
|
298
|
+
get filled() {
|
|
299
|
+
const { fill, rendererConfig } = self;
|
|
300
|
+
return fill !== null && fill !== void 0 ? fill : (0, configuration_1.readConfObject)(rendererConfig, 'filled');
|
|
301
|
+
},
|
|
302
|
+
get summaryScoreModeSetting() {
|
|
303
|
+
const { summaryScoreMode: scoreMode, rendererConfig } = self;
|
|
304
|
+
return scoreMode !== null && scoreMode !== void 0 ? scoreMode : (0, configuration_1.readConfObject)(rendererConfig, 'summaryScoreMode');
|
|
305
|
+
},
|
|
306
|
+
get domain() {
|
|
307
|
+
const { stats, scaleType, minScore, maxScore } = self;
|
|
308
|
+
const { scoreMin, scoreMax } = stats;
|
|
309
|
+
const ret = (0, util_2.getNiceDomain)({
|
|
310
|
+
domain: [scoreMin, scoreMax],
|
|
311
|
+
bounds: [minScore, maxScore],
|
|
312
|
+
scaleType,
|
|
313
|
+
});
|
|
314
|
+
// avoid weird scalebar if log value and empty region displayed
|
|
315
|
+
if (scaleType === 'log' && ret[1] === Number.MIN_VALUE) {
|
|
316
|
+
return [0, Number.MIN_VALUE];
|
|
177
317
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
self.sourcesVolatile = sources;
|
|
318
|
+
// avoid returning a new object if it matches the old value
|
|
319
|
+
if (!(0, fast_deep_equal_1.default)(oldDomain, ret)) {
|
|
320
|
+
oldDomain = ret;
|
|
182
321
|
}
|
|
322
|
+
return oldDomain;
|
|
323
|
+
},
|
|
324
|
+
get scaleOpts() {
|
|
325
|
+
const { scaleType, stats } = self;
|
|
326
|
+
return {
|
|
327
|
+
autoscaleType: this.autoscaleType,
|
|
328
|
+
domain: this.domain,
|
|
329
|
+
stats,
|
|
330
|
+
scaleType,
|
|
331
|
+
inverted: (0, configuration_1.getConf)(self, 'inverted'),
|
|
332
|
+
};
|
|
183
333
|
},
|
|
184
|
-
|
|
185
|
-
|
|
334
|
+
get autoscaleType() {
|
|
335
|
+
var _a;
|
|
336
|
+
return (_a = self.autoscale) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'autoscale');
|
|
186
337
|
},
|
|
187
|
-
|
|
188
|
-
|
|
338
|
+
get displayCrossHatchesSetting() {
|
|
339
|
+
const { displayCrossHatches, rendererConfig } = self;
|
|
340
|
+
return (displayCrossHatches !== null && displayCrossHatches !== void 0 ? displayCrossHatches : (0, configuration_1.readConfObject)(rendererConfig, 'displayCrossHatches'));
|
|
189
341
|
},
|
|
190
|
-
|
|
191
|
-
|
|
342
|
+
get rowHeight() {
|
|
343
|
+
const { sources, height, isMultiRow } = self;
|
|
344
|
+
return isMultiRow ? height / ((sources === null || sources === void 0 ? void 0 : sources.length) || 1) : height;
|
|
192
345
|
},
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
if (statsFetch !== undefined && !statsFetch.signal.aborted) {
|
|
196
|
-
statsFetch.abort();
|
|
197
|
-
}
|
|
198
|
-
self.statsFetchInProgress = aborter;
|
|
346
|
+
get rowHeightTooSmallForScalebar() {
|
|
347
|
+
return this.rowHeight < 70;
|
|
199
348
|
},
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
// model so listeners can detect a click
|
|
203
|
-
selectFeature: function (feature) {
|
|
204
|
-
var session = (0, util_1.getSession)(self);
|
|
205
|
-
if ((0, util_1.isSelectionContainer)(session)) {
|
|
206
|
-
session.setSelection(feature);
|
|
207
|
-
}
|
|
349
|
+
get useMinimalTicks() {
|
|
350
|
+
return ((0, configuration_1.getConf)(self, 'minimalTicks') || this.rowHeightTooSmallForScalebar);
|
|
208
351
|
},
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
352
|
+
};
|
|
353
|
+
})
|
|
354
|
+
.views(self => ({
|
|
355
|
+
get ticks() {
|
|
356
|
+
const { scaleType, domain, isMultiRow, rowHeight, useMinimalTicks } = self;
|
|
357
|
+
const offset = isMultiRow ? 0 : util_2.YSCALEBAR_LABEL_OFFSET;
|
|
358
|
+
const ticks = (0, react_d3_axis_mod_1.axisPropsFromTickScale)((0, util_2.getScale)({
|
|
359
|
+
scaleType,
|
|
360
|
+
domain,
|
|
361
|
+
range: [rowHeight - offset, offset],
|
|
362
|
+
inverted: (0, configuration_1.getConf)(self, 'inverted'),
|
|
363
|
+
}), 4);
|
|
364
|
+
return useMinimalTicks ? { ...ticks, values: domain } : ticks;
|
|
365
|
+
},
|
|
366
|
+
get colors() {
|
|
367
|
+
return [
|
|
368
|
+
'red',
|
|
369
|
+
'blue',
|
|
370
|
+
'green',
|
|
371
|
+
'orange',
|
|
372
|
+
'purple',
|
|
373
|
+
'cyan',
|
|
374
|
+
'pink',
|
|
375
|
+
'darkblue',
|
|
376
|
+
'darkred',
|
|
377
|
+
'pink',
|
|
378
|
+
];
|
|
379
|
+
},
|
|
380
|
+
get adapterCapabilities() {
|
|
381
|
+
const { adapterTypeName } = self;
|
|
382
|
+
return pluginManager.getAdapterType(adapterTypeName).adapterCapabilities;
|
|
383
|
+
},
|
|
384
|
+
}))
|
|
385
|
+
.views(self => {
|
|
386
|
+
const { renderProps: superRenderProps } = self;
|
|
387
|
+
return {
|
|
388
|
+
renderProps() {
|
|
389
|
+
const superProps = superRenderProps();
|
|
390
|
+
const { displayCrossHatches, filters, height, resolution, rpcDriverName, scaleOpts, sources, statsReady, ticks, rendererConfig: config, } = self;
|
|
391
|
+
return {
|
|
392
|
+
...superProps,
|
|
393
|
+
notReady: superProps.notReady || !sources || !statsReady,
|
|
394
|
+
displayModel: self,
|
|
395
|
+
config,
|
|
396
|
+
displayCrossHatches,
|
|
397
|
+
filters,
|
|
398
|
+
height,
|
|
399
|
+
resolution,
|
|
400
|
+
rpcDriverName,
|
|
401
|
+
scaleOpts,
|
|
402
|
+
sources,
|
|
403
|
+
ticks,
|
|
404
|
+
onMouseMove: (_, f) => self.setFeatureUnderMouse(f),
|
|
405
|
+
onMouseLeave: () => self.setFeatureUnderMouse(undefined),
|
|
406
|
+
};
|
|
407
|
+
},
|
|
408
|
+
get hasResolution() {
|
|
409
|
+
return self.adapterCapabilities.includes('hasResolution');
|
|
410
|
+
},
|
|
411
|
+
get hasGlobalStats() {
|
|
412
|
+
return self.adapterCapabilities.includes('hasGlobalStats');
|
|
413
|
+
},
|
|
414
|
+
get fillSetting() {
|
|
415
|
+
if (self.filled) {
|
|
416
|
+
return 0;
|
|
227
417
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
if (self.scale !== 'log') {
|
|
231
|
-
self.scale = 'log';
|
|
418
|
+
else if (!self.filled && self.minSize === 1) {
|
|
419
|
+
return 1;
|
|
232
420
|
}
|
|
233
421
|
else {
|
|
234
|
-
|
|
422
|
+
return 2;
|
|
235
423
|
}
|
|
236
424
|
},
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
self.autoscale = val;
|
|
245
|
-
},
|
|
246
|
-
setMaxScore: function (val) {
|
|
247
|
-
self.constraints.max = val;
|
|
248
|
-
},
|
|
249
|
-
setRendererType: function (val) {
|
|
250
|
-
self.rendererTypeNameState = val;
|
|
251
|
-
},
|
|
252
|
-
setMinScore: function (val) {
|
|
253
|
-
self.constraints.min = val;
|
|
254
|
-
},
|
|
255
|
-
toggleCrossHatches: function () {
|
|
256
|
-
self.displayCrossHatches = !self.displayCrossHatches;
|
|
257
|
-
},
|
|
258
|
-
setCrossHatches: function (cross) {
|
|
259
|
-
self.displayCrossHatches = cross;
|
|
260
|
-
},
|
|
261
|
-
}); })
|
|
262
|
-
.views(function (self) { return ({
|
|
263
|
-
get featureUnderMouse() {
|
|
264
|
-
return self.featureUnderMouseVolatile;
|
|
265
|
-
},
|
|
266
|
-
get TooltipComponent() {
|
|
267
|
-
return Tooltip_1.default;
|
|
268
|
-
},
|
|
269
|
-
get adapterTypeName() {
|
|
270
|
-
return self.adapterConfig.type;
|
|
271
|
-
},
|
|
272
|
-
get rendererTypeNameSimple() {
|
|
273
|
-
return self.rendererTypeNameState || (0, configuration_1.getConf)(self, 'defaultRendering');
|
|
274
|
-
},
|
|
275
|
-
get rendererTypeName() {
|
|
276
|
-
var name = this.rendererTypeNameSimple;
|
|
277
|
-
var rendererType = rendererTypes.get(name);
|
|
278
|
-
if (!rendererType) {
|
|
279
|
-
throw new Error("unknown renderer ".concat(name));
|
|
280
|
-
}
|
|
281
|
-
return rendererType;
|
|
282
|
-
},
|
|
283
|
-
// subclasses can define these, as snpcoverage track does
|
|
284
|
-
get filters() {
|
|
285
|
-
return undefined;
|
|
286
|
-
},
|
|
287
|
-
get scaleType() {
|
|
288
|
-
var _a;
|
|
289
|
-
return (_a = self.scale) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'scaleType');
|
|
290
|
-
},
|
|
291
|
-
get maxScore() {
|
|
292
|
-
var _a;
|
|
293
|
-
return (_a = self.constraints.max) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'maxScore');
|
|
294
|
-
},
|
|
295
|
-
get minScore() {
|
|
296
|
-
var _a;
|
|
297
|
-
return (_a = self.constraints.min) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'minScore');
|
|
298
|
-
},
|
|
299
|
-
}); })
|
|
300
|
-
.views(function (self) { return ({
|
|
301
|
-
get rendererConfig() {
|
|
302
|
-
var configBlob = (0, configuration_1.getConf)(self, ['renderers', self.rendererTypeName]) || {};
|
|
303
|
-
var color = self.color, displayCrossHatches = self.displayCrossHatches, fill = self.fill, minSize = self.minSize, negColor = self.negColor, posColor = self.posColor, summaryScoreMode = self.summaryScoreMode, scaleType = self.scaleType;
|
|
304
|
-
return self.rendererType.configSchema.create(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, configBlob), (scaleType ? { scaleType: scaleType } : {})), (fill !== undefined ? { filled: fill } : {})), (displayCrossHatches !== undefined
|
|
305
|
-
? { displayCrossHatches: displayCrossHatches }
|
|
306
|
-
: {})), (summaryScoreMode !== undefined ? { summaryScoreMode: summaryScoreMode } : {})), (color !== undefined ? { color: color } : {})), (negColor !== undefined ? { negColor: negColor } : {})), (posColor !== undefined ? { posColor: posColor } : {})), (minSize !== undefined ? { minSize: minSize } : {})), (0, mobx_state_tree_1.getEnv)(self));
|
|
307
|
-
},
|
|
308
|
-
}); })
|
|
309
|
-
.views(function (self) { return ({
|
|
310
|
-
// everything except density gets a numerical scalebar
|
|
311
|
-
get needsScalebar() {
|
|
312
|
-
return (self.rendererTypeName === 'MultiXYPlotRenderer' ||
|
|
313
|
-
self.rendererTypeName === 'MultiRowXYPlotRenderer' ||
|
|
314
|
-
self.rendererTypeName === 'MultiLineRenderer' ||
|
|
315
|
-
self.rendererTypeName === 'MultiRowLineRenderer');
|
|
316
|
-
},
|
|
317
|
-
get needsFullHeightScalebar() {
|
|
318
|
-
return (self.rendererTypeName === 'MultiXYPlotRenderer' ||
|
|
319
|
-
self.rendererTypeName === 'MultiLineRenderer');
|
|
320
|
-
},
|
|
321
|
-
get isMultiRow() {
|
|
322
|
-
return (self.rendererTypeName === 'MultiRowXYPlotRenderer' ||
|
|
323
|
-
self.rendererTypeName === 'MultiRowLineRenderer' ||
|
|
324
|
-
self.rendererTypeName === 'MultiDensityRenderer');
|
|
325
|
-
},
|
|
326
|
-
// can be used to give it a "color scale" like a R heatmap, not
|
|
327
|
-
// implemented like this yet but flag can be used for this
|
|
328
|
-
get needsCustomLegend() {
|
|
329
|
-
return self.rendererTypeName === 'MultiDensityRenderer';
|
|
330
|
-
},
|
|
331
|
-
get canHaveFill() {
|
|
332
|
-
return (self.rendererTypeName === 'MultiXYPlotRenderer' ||
|
|
333
|
-
self.rendererTypeName === 'MultiRowXYPlotRenderer');
|
|
334
|
-
},
|
|
335
|
-
// the multirowxy and multiline don't need to use colors on the legend
|
|
336
|
-
// boxes since their track is drawn with the color. sort of a stylistic choice
|
|
337
|
-
get renderColorBoxes() {
|
|
338
|
-
return !(self.rendererTypeName === 'MultiRowLineRenderer' ||
|
|
339
|
-
self.rendererTypeName === 'MultiRowXYPlotRenderer');
|
|
340
|
-
},
|
|
341
|
-
// positions multi-row below the tracklabel even if using overlap
|
|
342
|
-
// tracklabels for everything else
|
|
343
|
-
get prefersOffset() {
|
|
344
|
-
return this.isMultiRow;
|
|
345
|
-
},
|
|
346
|
-
get sources() {
|
|
347
|
-
var _this = this;
|
|
348
|
-
var _a;
|
|
349
|
-
var sources = Object.fromEntries(((_a = self.sourcesVolatile) === null || _a === void 0 ? void 0 : _a.map(function (s) { return [s.name, s]; })) || []);
|
|
350
|
-
var iter = self.layout.length ? self.layout : self.sourcesVolatile;
|
|
351
|
-
return iter === null || iter === void 0 ? void 0 : iter.map(function (s) { return (__assign(__assign({}, sources[s.name]), s)); }).map(function (s, i) { return (__assign(__assign({}, s), { color: s.color ||
|
|
352
|
-
(!_this.isMultiRow ? colors_1.set1[i] || randomColor() : 'blue') })); });
|
|
353
|
-
},
|
|
354
|
-
}); })
|
|
355
|
-
.views(function (self) {
|
|
356
|
-
var oldDomain = [0, 0];
|
|
357
|
-
return {
|
|
358
|
-
get filled() {
|
|
359
|
-
var fill = self.fill, rendererConfig = self.rendererConfig;
|
|
360
|
-
return fill !== null && fill !== void 0 ? fill : (0, configuration_1.readConfObject)(rendererConfig, 'filled');
|
|
361
|
-
},
|
|
362
|
-
get summaryScoreModeSetting() {
|
|
363
|
-
var scoreMode = self.summaryScoreMode, rendererConfig = self.rendererConfig;
|
|
364
|
-
return scoreMode !== null && scoreMode !== void 0 ? scoreMode : (0, configuration_1.readConfObject)(rendererConfig, 'summaryScoreMode');
|
|
365
|
-
},
|
|
366
|
-
get domain() {
|
|
367
|
-
var stats = self.stats, scaleType = self.scaleType, minScore = self.minScore, maxScore = self.maxScore;
|
|
368
|
-
var scoreMin = stats.scoreMin, scoreMax = stats.scoreMax;
|
|
369
|
-
var ret = (0, util_2.getNiceDomain)({
|
|
370
|
-
domain: [scoreMin, scoreMax],
|
|
371
|
-
bounds: [minScore, maxScore],
|
|
372
|
-
scaleType: scaleType,
|
|
373
|
-
});
|
|
374
|
-
// avoid weird scalebar if log value and empty region displayed
|
|
375
|
-
if (scaleType === 'log' && ret[1] === Number.MIN_VALUE) {
|
|
376
|
-
return [0, Number.MIN_VALUE];
|
|
377
|
-
}
|
|
378
|
-
// avoid returning a new object if it matches the old value
|
|
379
|
-
if (!(0, fast_deep_equal_1.default)(oldDomain, ret)) {
|
|
380
|
-
oldDomain = ret;
|
|
381
|
-
}
|
|
382
|
-
return oldDomain;
|
|
383
|
-
},
|
|
384
|
-
get scaleOpts() {
|
|
385
|
-
var scaleType = self.scaleType, stats = self.stats;
|
|
386
|
-
return {
|
|
387
|
-
autoscaleType: this.autoscaleType,
|
|
388
|
-
domain: this.domain,
|
|
389
|
-
stats: stats,
|
|
390
|
-
scaleType: scaleType,
|
|
391
|
-
inverted: (0, configuration_1.getConf)(self, 'inverted'),
|
|
392
|
-
};
|
|
393
|
-
},
|
|
394
|
-
get autoscaleType() {
|
|
395
|
-
var _a;
|
|
396
|
-
return (_a = self.autoscale) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'autoscale');
|
|
397
|
-
},
|
|
398
|
-
get displayCrossHatchesSetting() {
|
|
399
|
-
var displayCrossHatches = self.displayCrossHatches, rendererConfig = self.rendererConfig;
|
|
400
|
-
return (displayCrossHatches !== null && displayCrossHatches !== void 0 ? displayCrossHatches : (0, configuration_1.readConfObject)(rendererConfig, 'displayCrossHatches'));
|
|
401
|
-
},
|
|
402
|
-
get rowHeight() {
|
|
403
|
-
var sources = self.sources, height = self.height, isMultiRow = self.isMultiRow;
|
|
404
|
-
return isMultiRow ? height / ((sources === null || sources === void 0 ? void 0 : sources.length) || 1) : height;
|
|
405
|
-
},
|
|
406
|
-
get rowHeightTooSmallForScalebar() {
|
|
407
|
-
return this.rowHeight < 70;
|
|
408
|
-
},
|
|
409
|
-
get useMinimalTicks() {
|
|
410
|
-
return ((0, configuration_1.getConf)(self, 'minimalTicks') || this.rowHeightTooSmallForScalebar);
|
|
411
|
-
},
|
|
412
|
-
};
|
|
413
|
-
})
|
|
414
|
-
.views(function (self) { return ({
|
|
415
|
-
get ticks() {
|
|
416
|
-
var scaleType = self.scaleType, domain = self.domain, isMultiRow = self.isMultiRow, rowHeight = self.rowHeight, useMinimalTicks = self.useMinimalTicks;
|
|
417
|
-
var offset = isMultiRow ? 0 : util_2.YSCALEBAR_LABEL_OFFSET;
|
|
418
|
-
var ticks = (0, react_d3_axis_mod_1.axisPropsFromTickScale)((0, util_2.getScale)({
|
|
419
|
-
scaleType: scaleType,
|
|
420
|
-
domain: domain,
|
|
421
|
-
range: [rowHeight - offset, offset],
|
|
422
|
-
inverted: (0, configuration_1.getConf)(self, 'inverted'),
|
|
423
|
-
}), 4);
|
|
424
|
-
return useMinimalTicks ? __assign(__assign({}, ticks), { values: domain }) : ticks;
|
|
425
|
-
},
|
|
426
|
-
get colors() {
|
|
425
|
+
};
|
|
426
|
+
})
|
|
427
|
+
.views(self => {
|
|
428
|
+
const { trackMenuItems: superTrackMenuItems } = self;
|
|
429
|
+
const hasRenderings = (0, configuration_1.getConf)(self, 'defaultRendering');
|
|
430
|
+
return {
|
|
431
|
+
trackMenuItems() {
|
|
427
432
|
return [
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
'green',
|
|
431
|
-
'orange',
|
|
432
|
-
'purple',
|
|
433
|
-
'cyan',
|
|
434
|
-
'pink',
|
|
435
|
-
'darkblue',
|
|
436
|
-
'darkred',
|
|
437
|
-
'pink',
|
|
438
|
-
];
|
|
439
|
-
},
|
|
440
|
-
get adapterCapabilities() {
|
|
441
|
-
var adapterTypeName = self.adapterTypeName;
|
|
442
|
-
return pluginManager.getAdapterType(adapterTypeName).adapterCapabilities;
|
|
443
|
-
},
|
|
444
|
-
}); })
|
|
445
|
-
.views(function (self) {
|
|
446
|
-
var superRenderProps = self.renderProps;
|
|
447
|
-
return {
|
|
448
|
-
renderProps: function () {
|
|
449
|
-
var superProps = superRenderProps();
|
|
450
|
-
var displayCrossHatches = self.displayCrossHatches, filters = self.filters, height = self.height, resolution = self.resolution, rpcDriverName = self.rpcDriverName, scaleOpts = self.scaleOpts, sources = self.sources, statsReady = self.statsReady, ticks = self.ticks, config = self.rendererConfig;
|
|
451
|
-
return __assign(__assign({}, superProps), { notReady: superProps.notReady || !sources || !statsReady, displayModel: self, config: config, displayCrossHatches: displayCrossHatches, filters: filters, height: height, resolution: resolution, rpcDriverName: rpcDriverName, scaleOpts: scaleOpts, sources: sources, ticks: ticks, onMouseMove: function (_, f) {
|
|
452
|
-
return self.setFeatureUnderMouse(f);
|
|
453
|
-
}, onMouseLeave: function () { return self.setFeatureUnderMouse(undefined); } });
|
|
454
|
-
},
|
|
455
|
-
get hasResolution() {
|
|
456
|
-
return self.adapterCapabilities.includes('hasResolution');
|
|
457
|
-
},
|
|
458
|
-
get hasGlobalStats() {
|
|
459
|
-
return self.adapterCapabilities.includes('hasGlobalStats');
|
|
460
|
-
},
|
|
461
|
-
get fillSetting() {
|
|
462
|
-
if (self.filled) {
|
|
463
|
-
return 0;
|
|
464
|
-
}
|
|
465
|
-
else if (!self.filled && self.minSize === 1) {
|
|
466
|
-
return 1;
|
|
467
|
-
}
|
|
468
|
-
else {
|
|
469
|
-
return 2;
|
|
470
|
-
}
|
|
471
|
-
},
|
|
472
|
-
};
|
|
473
|
-
})
|
|
474
|
-
.views(function (self) {
|
|
475
|
-
var superTrackMenuItems = self.trackMenuItems;
|
|
476
|
-
var hasRenderings = (0, configuration_1.getConf)(self, 'defaultRendering');
|
|
477
|
-
return {
|
|
478
|
-
trackMenuItems: function () {
|
|
479
|
-
return __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(superTrackMenuItems()), false), __read((self.hasResolution
|
|
433
|
+
...superTrackMenuItems(),
|
|
434
|
+
...(self.hasResolution
|
|
480
435
|
? [
|
|
481
436
|
{
|
|
482
437
|
label: 'Resolution',
|
|
483
438
|
subMenu: [
|
|
484
439
|
{
|
|
485
440
|
label: 'Finer resolution',
|
|
486
|
-
onClick:
|
|
441
|
+
onClick: () => self.setResolution(self.resolution * 5),
|
|
487
442
|
},
|
|
488
443
|
{
|
|
489
444
|
label: 'Coarser resolution',
|
|
490
|
-
onClick:
|
|
445
|
+
onClick: () => self.setResolution(self.resolution / 5),
|
|
491
446
|
},
|
|
492
447
|
],
|
|
493
448
|
},
|
|
494
449
|
{
|
|
495
450
|
label: 'Summary score mode',
|
|
496
|
-
subMenu: ['min', 'max', 'avg', 'whiskers'].map(
|
|
451
|
+
subMenu: ['min', 'max', 'avg', 'whiskers'].map(elt => ({
|
|
497
452
|
label: elt,
|
|
498
453
|
type: 'radio',
|
|
499
454
|
checked: self.summaryScoreModeSetting === elt,
|
|
500
|
-
onClick:
|
|
501
|
-
})
|
|
455
|
+
onClick: () => self.setSummaryScoreMode(elt),
|
|
456
|
+
})),
|
|
502
457
|
},
|
|
503
458
|
]
|
|
504
|
-
: [])
|
|
459
|
+
: []),
|
|
460
|
+
...(self.canHaveFill
|
|
505
461
|
? [
|
|
506
462
|
{
|
|
507
463
|
label: 'Fill mode',
|
|
508
|
-
subMenu: ['filled', 'no fill', 'no fill w/ emphasis'].map(
|
|
464
|
+
subMenu: ['filled', 'no fill', 'no fill w/ emphasis'].map((elt, idx) => ({
|
|
509
465
|
label: elt,
|
|
510
466
|
type: 'radio',
|
|
511
467
|
checked: self.fillSetting === idx,
|
|
512
|
-
onClick:
|
|
513
|
-
})
|
|
468
|
+
onClick: () => self.setFill(idx),
|
|
469
|
+
})),
|
|
514
470
|
},
|
|
515
471
|
]
|
|
516
|
-
: [])
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
472
|
+
: []),
|
|
473
|
+
{
|
|
474
|
+
label: self.scaleType === 'log' ? 'Set linear scale' : 'Set log scale',
|
|
475
|
+
onClick: () => self.toggleLogScale(),
|
|
476
|
+
},
|
|
477
|
+
...(self.needsScalebar
|
|
522
478
|
? [
|
|
523
479
|
{
|
|
524
480
|
type: 'checkbox',
|
|
525
481
|
label: 'Draw cross hatches',
|
|
526
482
|
checked: self.displayCrossHatchesSetting,
|
|
527
|
-
onClick:
|
|
483
|
+
onClick: () => self.toggleCrossHatches(),
|
|
528
484
|
},
|
|
529
485
|
]
|
|
530
|
-
: [])
|
|
486
|
+
: []),
|
|
487
|
+
...(hasRenderings
|
|
531
488
|
? [
|
|
532
489
|
{
|
|
533
490
|
label: 'Renderer type',
|
|
@@ -537,139 +494,105 @@ var stateModelFactory = function (pluginManager, configSchema) {
|
|
|
537
494
|
'multirowdensity',
|
|
538
495
|
'multiline',
|
|
539
496
|
'multirowline',
|
|
540
|
-
].map(
|
|
497
|
+
].map(key => ({
|
|
541
498
|
label: key,
|
|
542
499
|
type: 'radio',
|
|
543
500
|
checked: self.rendererTypeNameSimple === key,
|
|
544
|
-
onClick:
|
|
545
|
-
})
|
|
501
|
+
onClick: () => self.setRendererType(key),
|
|
502
|
+
})),
|
|
546
503
|
},
|
|
547
504
|
]
|
|
548
|
-
: [])
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
505
|
+
: []),
|
|
506
|
+
{
|
|
507
|
+
label: 'Autoscale type',
|
|
508
|
+
subMenu: [
|
|
509
|
+
['local', 'Local'],
|
|
510
|
+
...(self.hasGlobalStats
|
|
554
511
|
? [
|
|
555
512
|
['global', 'Global'],
|
|
556
513
|
['globalsd', 'Global ± 3σ'],
|
|
557
514
|
]
|
|
558
|
-
: [])
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
]; });
|
|
578
|
-
},
|
|
515
|
+
: []),
|
|
516
|
+
['localsd', 'Local ± 3σ'],
|
|
517
|
+
].map(([val, label]) => {
|
|
518
|
+
return {
|
|
519
|
+
label,
|
|
520
|
+
type: 'radio',
|
|
521
|
+
checked: self.autoscaleType === val,
|
|
522
|
+
onClick: () => self.setAutoscale(val),
|
|
523
|
+
};
|
|
524
|
+
}),
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
label: 'Set min/max score...',
|
|
528
|
+
onClick: () => {
|
|
529
|
+
const session = (0, util_1.getSession)(self);
|
|
530
|
+
session.queueDialog(handleClose => [
|
|
531
|
+
SetMinMaxDlg,
|
|
532
|
+
{ model: self, handleClose },
|
|
533
|
+
]);
|
|
579
534
|
},
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
label: 'Edit colors/arrangement...',
|
|
538
|
+
onClick: () => {
|
|
539
|
+
(0, util_1.getSession)(self).queueDialog(handleClose => [
|
|
540
|
+
SetColorDlg,
|
|
541
|
+
{ model: self, handleClose },
|
|
542
|
+
]);
|
|
588
543
|
},
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
_a.trys.push([1, 3, , 4]);
|
|
608
|
-
self.setLoading(aborter);
|
|
609
|
-
return [4 /*yield*/, (0, util_2.getStats)(self, __assign({ signal: aborter.signal }, self.renderProps()))];
|
|
610
|
-
case 2:
|
|
611
|
-
stats = _a.sent();
|
|
612
|
-
if ((0, mobx_state_tree_1.isAlive)(self)) {
|
|
613
|
-
self.updateStats(stats);
|
|
614
|
-
superReload();
|
|
615
|
-
}
|
|
616
|
-
return [3 /*break*/, 4];
|
|
617
|
-
case 3:
|
|
618
|
-
e_1 = _a.sent();
|
|
619
|
-
self.setError(e_1);
|
|
620
|
-
return [3 /*break*/, 4];
|
|
621
|
-
case 4: return [2 /*return*/];
|
|
622
|
-
}
|
|
623
|
-
});
|
|
624
|
-
});
|
|
625
|
-
},
|
|
626
|
-
afterAttach: function () {
|
|
627
|
-
var _this = this;
|
|
628
|
-
(0, util_2.statsAutorun)(self);
|
|
629
|
-
(0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
630
|
-
var rpcManager, adapterConfig, sessionId, sources;
|
|
631
|
-
return __generator(this, function (_a) {
|
|
632
|
-
switch (_a.label) {
|
|
633
|
-
case 0:
|
|
634
|
-
rpcManager = (0, util_1.getSession)(self).rpcManager;
|
|
635
|
-
adapterConfig = self.adapterConfig;
|
|
636
|
-
sessionId = (0, tracks_1.getRpcSessionId)(self);
|
|
637
|
-
return [4 /*yield*/, rpcManager.call(sessionId, 'MultiWiggleGetSources', {
|
|
638
|
-
sessionId: sessionId,
|
|
639
|
-
adapterConfig: adapterConfig,
|
|
640
|
-
})];
|
|
641
|
-
case 1:
|
|
642
|
-
sources = (_a.sent());
|
|
643
|
-
if ((0, mobx_state_tree_1.isAlive)(self)) {
|
|
644
|
-
self.setSources(sources);
|
|
645
|
-
}
|
|
646
|
-
return [2 /*return*/];
|
|
647
|
-
}
|
|
648
|
-
});
|
|
649
|
-
}); }));
|
|
650
|
-
},
|
|
651
|
-
renderSvg: function (opts) {
|
|
652
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
653
|
-
var offsetPx, _a, _b, _c, _d, _e, _f;
|
|
654
|
-
return __generator(this, function (_g) {
|
|
655
|
-
switch (_g.label) {
|
|
656
|
-
case 0: return [4 /*yield*/, (0, mobx_1.when)(function () { return self.statsReady && !!self.regionCannotBeRenderedText; })];
|
|
657
|
-
case 1:
|
|
658
|
-
_g.sent();
|
|
659
|
-
offsetPx = (0, util_1.getContainingView)(self).offsetPx;
|
|
660
|
-
_b = (_a = react_1.default).createElement;
|
|
661
|
-
_c = [react_1.default.Fragment, null];
|
|
662
|
-
_e = (_d = react_1.default).createElement;
|
|
663
|
-
_f = ["g", { id: "snpcov" }];
|
|
664
|
-
return [4 /*yield*/, superRenderSvg(opts)];
|
|
665
|
-
case 2: return [2 /*return*/, (_b.apply(_a, _c.concat([_e.apply(_d, _f.concat([_g.sent()])), react_1.default.createElement("g", { transform: "translate(".concat(Math.max(-offsetPx, 0), ")") },
|
|
666
|
-
react_1.default.createElement(WiggleDisplayComponent_1.StatBars, { model: self, orientation: "left", exportSVG: true }))])))];
|
|
667
|
-
}
|
|
668
|
-
});
|
|
544
|
+
},
|
|
545
|
+
];
|
|
546
|
+
},
|
|
547
|
+
};
|
|
548
|
+
})
|
|
549
|
+
.actions(self => {
|
|
550
|
+
const { reload: superReload, renderSvg: superRenderSvg } = self;
|
|
551
|
+
return {
|
|
552
|
+
// re-runs stats and refresh whole display on reload
|
|
553
|
+
async reload() {
|
|
554
|
+
self.setError();
|
|
555
|
+
const aborter = new AbortController();
|
|
556
|
+
let stats;
|
|
557
|
+
try {
|
|
558
|
+
self.setLoading(aborter);
|
|
559
|
+
stats = await (0, util_2.getStats)(self, {
|
|
560
|
+
signal: aborter.signal,
|
|
561
|
+
...self.renderProps(),
|
|
669
562
|
});
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
}
|
|
563
|
+
if ((0, mobx_state_tree_1.isAlive)(self)) {
|
|
564
|
+
self.updateStats(stats);
|
|
565
|
+
superReload();
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
catch (e) {
|
|
569
|
+
self.setError(e);
|
|
570
|
+
}
|
|
571
|
+
},
|
|
572
|
+
afterAttach() {
|
|
573
|
+
(0, util_2.statsAutorun)(self);
|
|
574
|
+
(0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(async () => {
|
|
575
|
+
const { rpcManager } = (0, util_1.getSession)(self);
|
|
576
|
+
const { adapterConfig } = self;
|
|
577
|
+
const sessionId = (0, tracks_1.getRpcSessionId)(self);
|
|
578
|
+
const sources = (await rpcManager.call(sessionId, 'MultiWiggleGetSources', {
|
|
579
|
+
sessionId,
|
|
580
|
+
adapterConfig,
|
|
581
|
+
}));
|
|
582
|
+
if ((0, mobx_state_tree_1.isAlive)(self)) {
|
|
583
|
+
self.setSources(sources);
|
|
584
|
+
}
|
|
585
|
+
}));
|
|
586
|
+
},
|
|
587
|
+
async renderSvg(opts) {
|
|
588
|
+
await (0, mobx_1.when)(() => self.statsReady && !!self.regionCannotBeRenderedText);
|
|
589
|
+
const { offsetPx } = (0, util_1.getContainingView)(self);
|
|
590
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
591
|
+
react_1.default.createElement("g", { id: "snpcov" }, await superRenderSvg(opts)),
|
|
592
|
+
react_1.default.createElement("g", { transform: `translate(${Math.max(-offsetPx, 0)})` },
|
|
593
|
+
react_1.default.createElement(WiggleDisplayComponent_1.StatBars, { model: self, orientation: "left", exportSVG: true }))));
|
|
594
|
+
},
|
|
595
|
+
};
|
|
596
|
+
});
|
|
674
597
|
exports.default = stateModelFactory;
|
|
675
598
|
//# sourceMappingURL=model.js.map
|