@jbrowse/plugin-wiggle 2.16.0 → 2.17.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.
- package/dist/BigWigAdapter/BigWigAdapter.js +2 -1
- package/dist/BigWigAdapter/configSchema.d.ts +8 -0
- package/dist/BigWigAdapter/configSchema.js +8 -0
- package/dist/LinearWiggleDisplay/components/Tooltip.js +1 -1
- package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +1 -1
- package/dist/LinearWiggleDisplay/{models/configSchema.js → configSchema.js} +2 -2
- package/dist/LinearWiggleDisplay/index.d.ts +1 -1
- package/dist/LinearWiggleDisplay/index.js +3 -3
- package/{esm/LinearWiggleDisplay/models → dist/LinearWiggleDisplay}/model.d.ts +22 -6
- package/dist/LinearWiggleDisplay/{models/model.js → model.js} +82 -47
- package/dist/LinearWiggleDisplay/{models/renderSvg.js → renderSvg.js} +2 -1
- package/dist/MultiLinearWiggleDisplay/components/ColorLegend.d.ts +1 -1
- package/dist/MultiLinearWiggleDisplay/components/ScoreLegend.d.ts +1 -1
- package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +1 -1
- package/dist/MultiLinearWiggleDisplay/components/YScaleBars.d.ts +1 -1
- package/dist/MultiLinearWiggleDisplay/components/util.d.ts +1 -1
- package/dist/MultiLinearWiggleDisplay/{models/configSchema.js → configSchema.js} +2 -2
- package/dist/MultiLinearWiggleDisplay/index.js +2 -2
- package/dist/MultiLinearWiggleDisplay/{models/model.d.ts → model.d.ts} +30 -12
- package/dist/MultiLinearWiggleDisplay/{models/model.js → model.js} +118 -87
- package/dist/MultiLinearWiggleDisplay/{models/renderSvg.js → renderSvg.js} +1 -1
- package/dist/MultiRowXYPlotRenderer/configSchema.js +1 -1
- package/dist/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +1 -1
- package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js +4 -2
- package/dist/MultiWiggleAddTrackWorkflow/AddTrackWorkflow.js +52 -44
- package/dist/MultiXYPlotRenderer/configSchema.js +1 -1
- package/dist/WiggleBaseRenderer.d.ts +1 -1
- package/dist/XYPlotRenderer/configSchema.js +1 -1
- package/dist/getMultiWiggleSourcesAutorun.d.ts +17 -0
- package/dist/getMultiWiggleSourcesAutorun.js +35 -0
- package/dist/getQuantitativeStats.d.ts +13 -0
- package/dist/getQuantitativeStats.js +78 -0
- package/dist/getQuantitativeStatsAutorun.d.ts +13 -0
- package/dist/getQuantitativeStatsAutorun.js +37 -0
- package/dist/index.d.ts +2 -2
- package/{esm/shared/modelShared.d.ts → dist/shared/SharedWiggleMixin.d.ts} +17 -3
- package/dist/shared/{modelShared.js → SharedWiggleMixin.js} +21 -10
- package/dist/util.d.ts +5 -29
- package/dist/util.js +4 -100
- package/esm/BigWigAdapter/BigWigAdapter.js +2 -1
- package/esm/BigWigAdapter/configSchema.d.ts +8 -0
- package/esm/BigWigAdapter/configSchema.js +8 -0
- package/esm/LinearWiggleDisplay/components/Tooltip.js +1 -1
- package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +1 -1
- package/esm/LinearWiggleDisplay/{models/configSchema.js → configSchema.js} +1 -1
- package/esm/LinearWiggleDisplay/index.d.ts +1 -1
- package/esm/LinearWiggleDisplay/index.js +3 -3
- package/{dist/LinearWiggleDisplay/models → esm/LinearWiggleDisplay}/model.d.ts +22 -6
- package/esm/LinearWiggleDisplay/{models/model.js → model.js} +82 -47
- package/esm/LinearWiggleDisplay/{models/renderSvg.js → renderSvg.js} +2 -1
- package/esm/MultiLinearWiggleDisplay/components/ColorLegend.d.ts +1 -1
- package/esm/MultiLinearWiggleDisplay/components/ScoreLegend.d.ts +1 -1
- package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +1 -1
- package/esm/MultiLinearWiggleDisplay/components/YScaleBars.d.ts +1 -1
- package/esm/MultiLinearWiggleDisplay/components/util.d.ts +1 -1
- package/esm/MultiLinearWiggleDisplay/{models/configSchema.js → configSchema.js} +1 -1
- package/esm/MultiLinearWiggleDisplay/index.js +2 -2
- package/esm/MultiLinearWiggleDisplay/{models/model.d.ts → model.d.ts} +30 -12
- package/esm/MultiLinearWiggleDisplay/{models/model.js → model.js} +119 -88
- package/esm/MultiLinearWiggleDisplay/{models/renderSvg.js → renderSvg.js} +1 -1
- package/esm/MultiRowXYPlotRenderer/configSchema.js +1 -1
- package/esm/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +1 -1
- package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js +4 -2
- package/esm/MultiWiggleAddTrackWorkflow/AddTrackWorkflow.js +52 -44
- package/esm/MultiXYPlotRenderer/configSchema.js +1 -1
- package/esm/WiggleBaseRenderer.d.ts +1 -1
- package/esm/XYPlotRenderer/configSchema.js +1 -1
- package/esm/getMultiWiggleSourcesAutorun.d.ts +17 -0
- package/esm/getMultiWiggleSourcesAutorun.js +32 -0
- package/esm/getQuantitativeStats.d.ts +13 -0
- package/esm/getQuantitativeStats.js +75 -0
- package/esm/getQuantitativeStatsAutorun.d.ts +13 -0
- package/esm/getQuantitativeStatsAutorun.js +34 -0
- package/esm/index.d.ts +2 -2
- package/{dist/shared/modelShared.d.ts → esm/shared/SharedWiggleMixin.d.ts} +17 -3
- package/esm/shared/{modelShared.js → SharedWiggleMixin.js} +21 -10
- package/esm/util.d.ts +5 -29
- package/esm/util.js +4 -98
- package/package.json +2 -2
- /package/dist/LinearWiggleDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -0
- /package/dist/LinearWiggleDisplay/{models/renderSvg.d.ts → renderSvg.d.ts} +0 -0
- /package/dist/MultiLinearWiggleDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -0
- /package/dist/MultiLinearWiggleDisplay/{models/renderSvg.d.ts → renderSvg.d.ts} +0 -0
- /package/dist/shared/{configShared.d.ts → SharedWiggleConfigSchema.d.ts} +0 -0
- /package/dist/shared/{configShared.js → SharedWiggleConfigSchema.js} +0 -0
- /package/esm/LinearWiggleDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -0
- /package/esm/LinearWiggleDisplay/{models/renderSvg.d.ts → renderSvg.d.ts} +0 -0
- /package/esm/MultiLinearWiggleDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -0
- /package/esm/MultiLinearWiggleDisplay/{models/renderSvg.d.ts → renderSvg.d.ts} +0 -0
- /package/esm/shared/{configShared.d.ts → SharedWiggleConfigSchema.d.ts} +0 -0
- /package/esm/shared/{configShared.js → SharedWiggleConfigSchema.js} +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { lazy } from 'react';
|
|
2
2
|
import { getConf, } from '@jbrowse/core/configuration';
|
|
3
|
-
import { getSession } from '@jbrowse/core/util';
|
|
3
|
+
import { getContainingView, getSession, } from '@jbrowse/core/util';
|
|
4
4
|
import { types } from 'mobx-state-tree';
|
|
5
5
|
import { axisPropsFromTickScale } from 'react-d3-axis-mod';
|
|
6
6
|
// locals
|
|
7
|
-
import { getScale, YSCALEBAR_LABEL_OFFSET } from '
|
|
8
|
-
import SharedWiggleMixin from '
|
|
7
|
+
import { getScale, YSCALEBAR_LABEL_OFFSET } from '../util';
|
|
8
|
+
import SharedWiggleMixin from '../shared/SharedWiggleMixin';
|
|
9
9
|
// lazies
|
|
10
|
-
const Tooltip = lazy(() => import('
|
|
11
|
-
const SetColorDialog = lazy(() => import('
|
|
10
|
+
const Tooltip = lazy(() => import('./components/Tooltip'));
|
|
11
|
+
const SetColorDialog = lazy(() => import('./components/SetColorDialog'));
|
|
12
12
|
// using a map because it preserves order
|
|
13
13
|
const rendererTypes = new Map([
|
|
14
14
|
['xyplot', 'XYPlotRenderer'],
|
|
@@ -46,29 +46,14 @@ function stateModelFactory(pluginManager, configSchema) {
|
|
|
46
46
|
}
|
|
47
47
|
return rendererType;
|
|
48
48
|
},
|
|
49
|
-
}))
|
|
50
|
-
.views(self => ({
|
|
51
49
|
/**
|
|
52
50
|
* #getter
|
|
51
|
+
* unused currently
|
|
53
52
|
*/
|
|
54
|
-
get
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
const range = [height - YSCALEBAR_LABEL_OFFSET, YSCALEBAR_LABEL_OFFSET];
|
|
59
|
-
if (!domain) {
|
|
60
|
-
return undefined;
|
|
61
|
-
}
|
|
62
|
-
const scale = getScale({
|
|
63
|
-
scaleType,
|
|
64
|
-
domain,
|
|
65
|
-
range,
|
|
66
|
-
inverted,
|
|
67
|
-
});
|
|
68
|
-
const ticks = axisPropsFromTickScale(scale, 4);
|
|
69
|
-
return height < 100 || minimalTicks
|
|
70
|
-
? { ...ticks, values: domain }
|
|
71
|
-
: ticks;
|
|
53
|
+
get quantitativeStatsRelevantToCurrentZoom() {
|
|
54
|
+
var _a;
|
|
55
|
+
const view = getContainingView(self);
|
|
56
|
+
return ((_a = self.stats) === null || _a === void 0 ? void 0 : _a.currStatsBpPerPx) === view.bpPerPx;
|
|
72
57
|
},
|
|
73
58
|
}))
|
|
74
59
|
.views(self => {
|
|
@@ -77,46 +62,93 @@ function stateModelFactory(pluginManager, configSchema) {
|
|
|
77
62
|
/**
|
|
78
63
|
* #method
|
|
79
64
|
*/
|
|
80
|
-
|
|
65
|
+
adapterProps() {
|
|
81
66
|
const superProps = superRenderProps();
|
|
82
|
-
const { filters,
|
|
67
|
+
const { filters, resolution, scaleOpts } = self;
|
|
83
68
|
return {
|
|
84
69
|
...superProps,
|
|
85
|
-
notReady: superProps.notReady || !self.stats,
|
|
86
70
|
rpcDriverName: self.rpcDriverName,
|
|
87
71
|
displayModel: self,
|
|
88
72
|
config: self.rendererConfig,
|
|
89
73
|
displayCrossHatches: self.displayCrossHatchesSetting,
|
|
90
74
|
scaleOpts,
|
|
91
75
|
resolution,
|
|
92
|
-
height,
|
|
93
|
-
ticks,
|
|
94
76
|
filters,
|
|
95
77
|
};
|
|
96
78
|
},
|
|
97
79
|
/**
|
|
98
80
|
* #getter
|
|
99
81
|
*/
|
|
100
|
-
get
|
|
101
|
-
const {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
82
|
+
get ticks() {
|
|
83
|
+
const { scaleType, domain, height } = self;
|
|
84
|
+
const minimalTicks = getConf(self, 'minimalTicks');
|
|
85
|
+
const inverted = getConf(self, 'inverted');
|
|
86
|
+
if (domain) {
|
|
87
|
+
const ticks = axisPropsFromTickScale(getScale({
|
|
88
|
+
scaleType,
|
|
89
|
+
domain,
|
|
90
|
+
range: [
|
|
91
|
+
height - YSCALEBAR_LABEL_OFFSET,
|
|
92
|
+
YSCALEBAR_LABEL_OFFSET,
|
|
93
|
+
],
|
|
94
|
+
inverted,
|
|
95
|
+
}), 4);
|
|
96
|
+
return height < 100 || minimalTicks
|
|
97
|
+
? { ...ticks, values: domain }
|
|
98
|
+
: ticks;
|
|
113
99
|
}
|
|
114
100
|
else {
|
|
115
|
-
return
|
|
101
|
+
return undefined;
|
|
116
102
|
}
|
|
117
103
|
},
|
|
118
104
|
};
|
|
119
105
|
})
|
|
106
|
+
.views(self => ({
|
|
107
|
+
/**
|
|
108
|
+
* #method
|
|
109
|
+
*/
|
|
110
|
+
renderProps() {
|
|
111
|
+
const { ticks, height } = self;
|
|
112
|
+
const superProps = self.adapterProps();
|
|
113
|
+
return {
|
|
114
|
+
...self.adapterProps(),
|
|
115
|
+
notReady: superProps.notReady || !self.stats,
|
|
116
|
+
height,
|
|
117
|
+
ticks,
|
|
118
|
+
};
|
|
119
|
+
},
|
|
120
|
+
/**
|
|
121
|
+
* #getter
|
|
122
|
+
*/
|
|
123
|
+
get needsScalebar() {
|
|
124
|
+
return (self.rendererTypeName === 'XYPlotRenderer' ||
|
|
125
|
+
self.rendererTypeName === 'LinePlotRenderer');
|
|
126
|
+
},
|
|
127
|
+
/**
|
|
128
|
+
* #getter
|
|
129
|
+
*/
|
|
130
|
+
get fillSetting() {
|
|
131
|
+
if (self.filled) {
|
|
132
|
+
return 0;
|
|
133
|
+
}
|
|
134
|
+
else if (self.minSize === 1) {
|
|
135
|
+
return 1;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
return 2;
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
/**
|
|
142
|
+
* #getter
|
|
143
|
+
*/
|
|
144
|
+
get quantitativeStatsReady() {
|
|
145
|
+
const view = getContainingView(self);
|
|
146
|
+
return (view.initialized &&
|
|
147
|
+
self.featureDensityStatsReady &&
|
|
148
|
+
!self.regionTooLarge &&
|
|
149
|
+
!self.error);
|
|
150
|
+
},
|
|
151
|
+
}))
|
|
120
152
|
.views(self => {
|
|
121
153
|
const { trackMenuItems: superTrackMenuItems } = self;
|
|
122
154
|
const hasRenderings = getConf(self, 'defaultRendering');
|
|
@@ -178,7 +210,10 @@ function stateModelFactory(pluginManager, configSchema) {
|
|
|
178
210
|
onClick: () => {
|
|
179
211
|
getSession(self).queueDialog(handleClose => [
|
|
180
212
|
SetColorDialog,
|
|
181
|
-
{
|
|
213
|
+
{
|
|
214
|
+
model: self,
|
|
215
|
+
handleClose,
|
|
216
|
+
},
|
|
182
217
|
]);
|
|
183
218
|
},
|
|
184
219
|
},
|
|
@@ -193,8 +228,8 @@ function stateModelFactory(pluginManager, configSchema) {
|
|
|
193
228
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
194
229
|
;
|
|
195
230
|
(async () => {
|
|
196
|
-
const {
|
|
197
|
-
|
|
231
|
+
const { getQuantitativeStatsAutorun } = await import('../getQuantitativeStatsAutorun');
|
|
232
|
+
getQuantitativeStatsAutorun(self);
|
|
198
233
|
})();
|
|
199
234
|
},
|
|
200
235
|
/**
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { getContainingView } from '@jbrowse/core/util';
|
|
3
3
|
import { when } from 'mobx';
|
|
4
|
-
|
|
4
|
+
// locals
|
|
5
|
+
import YScaleBar from '../shared/YScaleBar';
|
|
5
6
|
export async function renderSvg(self, opts, superRenderSvg) {
|
|
6
7
|
await when(() => !!self.stats && !!self.regionCannotBeRenderedText);
|
|
7
8
|
const { needsScalebar, stats } = self;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ConfigurationSchema } from '@jbrowse/core/configuration';
|
|
2
2
|
import { types } from 'mobx-state-tree';
|
|
3
3
|
// locals
|
|
4
|
-
import sharedWiggleConfigFactory from '
|
|
4
|
+
import sharedWiggleConfigFactory from '../shared/SharedWiggleConfigSchema';
|
|
5
5
|
/**
|
|
6
6
|
* #config MultiLinearWiggleDisplay
|
|
7
7
|
* extends
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import DisplayType from '@jbrowse/core/pluggableElementTypes/DisplayType';
|
|
2
|
-
import configSchemaFactory from './
|
|
3
|
-
import modelFactory from './
|
|
2
|
+
import configSchemaFactory from './configSchema';
|
|
3
|
+
import modelFactory from './model';
|
|
4
4
|
import { lazy } from 'react';
|
|
5
5
|
export default function MultiLinearWiggleDisplayF(pluginManager) {
|
|
6
6
|
pluginManager.addDisplayType(() => {
|
|
@@ -3,11 +3,7 @@ import { AnyConfigurationSchemaType } from '@jbrowse/core/configuration';
|
|
|
3
3
|
import { Feature, AnyReactComponentType } from '@jbrowse/core/util';
|
|
4
4
|
import PluginManager from '@jbrowse/core/PluginManager';
|
|
5
5
|
import { ExportSvgDisplayOptions } from '@jbrowse/plugin-linear-genome-view';
|
|
6
|
-
|
|
7
|
-
name: string;
|
|
8
|
-
color?: string;
|
|
9
|
-
group?: string;
|
|
10
|
-
}
|
|
6
|
+
import { Source } from '../util';
|
|
11
7
|
/**
|
|
12
8
|
* #stateModel MultiLinearWiggleDisplay
|
|
13
9
|
* extends
|
|
@@ -166,12 +162,12 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
|
|
|
166
162
|
rendererTypeName: string;
|
|
167
163
|
error: unknown;
|
|
168
164
|
message: string | undefined;
|
|
169
|
-
} & import("mobx-state-tree"
|
|
170
|
-
* #action
|
|
171
|
-
*/).IStateTreeNode<import("mobx-state-tree").IModelType<{
|
|
165
|
+
} & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
|
|
172
166
|
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
173
167
|
type: import("mobx-state-tree").ISimpleType<string>;
|
|
174
|
-
rpcDriverName: import("mobx-state-tree"
|
|
168
|
+
rpcDriverName: import("mobx-state-tree" /**
|
|
169
|
+
* #getter
|
|
170
|
+
*/).IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
175
171
|
}, {
|
|
176
172
|
rendererTypeName: string;
|
|
177
173
|
error: unknown;
|
|
@@ -261,19 +257,21 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
|
|
|
261
257
|
} & {
|
|
262
258
|
message: undefined | string;
|
|
263
259
|
stats: {
|
|
260
|
+
currStatsBpPerPx: number;
|
|
264
261
|
scoreMin: number;
|
|
265
262
|
scoreMax: number;
|
|
266
263
|
} | undefined;
|
|
267
264
|
statsFetchInProgress: undefined | AbortController;
|
|
268
265
|
} & {
|
|
269
266
|
updateQuantitativeStats(stats: {
|
|
267
|
+
currStatsBpPerPx: number;
|
|
270
268
|
scoreMin: number;
|
|
271
269
|
scoreMax: number;
|
|
272
270
|
}): void;
|
|
273
271
|
setColor(color?: string): void;
|
|
274
272
|
setPosColor(color?: string): void;
|
|
275
273
|
setNegColor(color?: string): void;
|
|
276
|
-
|
|
274
|
+
setStatsLoading(aborter: AbortController): void;
|
|
277
275
|
selectFeature(feature: Feature): void;
|
|
278
276
|
setResolution(res: number): void;
|
|
279
277
|
setFill(fill: number): void;
|
|
@@ -303,7 +301,9 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
|
|
|
303
301
|
} & import("mobx-state-tree/dist/internal").NonEmptyObject & {
|
|
304
302
|
setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
|
|
305
303
|
[x: string]: any;
|
|
306
|
-
} & import("mobx-state-tree/dist/internal"
|
|
304
|
+
} & import("mobx-state-tree/dist/internal" /**
|
|
305
|
+
* #property
|
|
306
|
+
*/).NonEmptyObject & any & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
|
|
307
307
|
} & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
|
|
308
308
|
} & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>;
|
|
309
309
|
readonly autoscaleType: any;
|
|
@@ -315,6 +315,7 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
|
|
|
315
315
|
readonly scaleOpts: {
|
|
316
316
|
domain: number[] | undefined;
|
|
317
317
|
stats: {
|
|
318
|
+
currStatsBpPerPx: number;
|
|
318
319
|
scoreMin: number;
|
|
319
320
|
scoreMax: number;
|
|
320
321
|
} | undefined;
|
|
@@ -402,6 +403,9 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
|
|
|
402
403
|
* implemented like this yet but flag can be used for this
|
|
403
404
|
*/
|
|
404
405
|
readonly needsCustomLegend: boolean;
|
|
406
|
+
/**
|
|
407
|
+
* #getter
|
|
408
|
+
*/
|
|
405
409
|
readonly canHaveFill: boolean;
|
|
406
410
|
/**
|
|
407
411
|
* #getter
|
|
@@ -421,9 +425,14 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
|
|
|
421
425
|
*/
|
|
422
426
|
readonly sources: {
|
|
423
427
|
color: string;
|
|
428
|
+
baseUri?: string;
|
|
424
429
|
name: string;
|
|
425
430
|
group?: string;
|
|
426
431
|
}[] | undefined;
|
|
432
|
+
/**
|
|
433
|
+
* #getter
|
|
434
|
+
*/
|
|
435
|
+
readonly quantitativeStatsReady: boolean;
|
|
427
436
|
} & {
|
|
428
437
|
/**
|
|
429
438
|
* #getter
|
|
@@ -438,6 +447,10 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
|
|
|
438
447
|
*/
|
|
439
448
|
readonly useMinimalTicks: any;
|
|
440
449
|
} & {
|
|
450
|
+
/**
|
|
451
|
+
* #method
|
|
452
|
+
*/
|
|
453
|
+
adapterProps(): any;
|
|
441
454
|
/**
|
|
442
455
|
* #getter
|
|
443
456
|
*/
|
|
@@ -451,6 +464,11 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
|
|
|
451
464
|
* #getter
|
|
452
465
|
*/
|
|
453
466
|
readonly colors: string[];
|
|
467
|
+
/**
|
|
468
|
+
* #getter
|
|
469
|
+
* unused currently
|
|
470
|
+
*/
|
|
471
|
+
readonly quantitativeStatsRelevantToCurrentZoom: boolean;
|
|
454
472
|
} & {
|
|
455
473
|
/**
|
|
456
474
|
* #method
|
|
@@ -467,7 +485,7 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
|
|
|
467
485
|
/**
|
|
468
486
|
* #getter
|
|
469
487
|
*/
|
|
470
|
-
readonly fillSetting: 2 |
|
|
488
|
+
readonly fillSetting: 2 | 1 | 0;
|
|
471
489
|
} & {
|
|
472
490
|
/**
|
|
473
491
|
* #method
|
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
import { lazy } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import { autorun } from 'mobx';
|
|
2
|
+
import { isAlive, types } from 'mobx-state-tree';
|
|
4
3
|
import { axisPropsFromTickScale } from 'react-d3-axis-mod';
|
|
5
4
|
import deepEqual from 'fast-deep-equal';
|
|
6
5
|
// jbrowse imports
|
|
7
6
|
import { getConf, } from '@jbrowse/core/configuration';
|
|
8
|
-
import { getSession } from '@jbrowse/core/util';
|
|
9
|
-
import { getRpcSessionId } from '@jbrowse/core/util/tracks';
|
|
7
|
+
import { getSession, getContainingView, } from '@jbrowse/core/util';
|
|
10
8
|
import { set1 as colors } from '@jbrowse/core/ui/colors';
|
|
11
9
|
// locals
|
|
12
|
-
import { getScale, YSCALEBAR_LABEL_OFFSET } from '
|
|
13
|
-
import SharedWiggleMixin from '
|
|
10
|
+
import { getScale, YSCALEBAR_LABEL_OFFSET } from '../util';
|
|
11
|
+
import SharedWiggleMixin from '../shared/SharedWiggleMixin';
|
|
14
12
|
const randomColor = () => '#000000'.replaceAll('0', () => (~~(Math.random() * 16)).toString(16));
|
|
15
13
|
// lazies
|
|
16
|
-
const Tooltip = lazy(() => import('
|
|
17
|
-
const SetColorDialog = lazy(() => import('
|
|
14
|
+
const Tooltip = lazy(() => import('./components/Tooltip'));
|
|
15
|
+
const SetColorDialog = lazy(() => import('./components/SetColorDialog'));
|
|
18
16
|
// using a map because it preserves order
|
|
19
17
|
const rendererTypes = new Map([
|
|
20
18
|
['xyplot', 'MultiXYPlotRenderer'],
|
|
@@ -130,6 +128,9 @@ export function stateModelFactory(pluginManager, configSchema) {
|
|
|
130
128
|
get needsCustomLegend() {
|
|
131
129
|
return self.rendererTypeName === 'MultiDensityRenderer';
|
|
132
130
|
},
|
|
131
|
+
/**
|
|
132
|
+
* #getter
|
|
133
|
+
*/
|
|
133
134
|
get canHaveFill() {
|
|
134
135
|
return (self.rendererTypeName === 'MultiXYPlotRenderer' ||
|
|
135
136
|
self.rendererTypeName === 'MultiRowXYPlotRenderer');
|
|
@@ -168,6 +169,16 @@ export function stateModelFactory(pluginManager, configSchema) {
|
|
|
168
169
|
(!this.isMultiRow ? colors[i] || randomColor() : 'blue'),
|
|
169
170
|
}));
|
|
170
171
|
},
|
|
172
|
+
/**
|
|
173
|
+
* #getter
|
|
174
|
+
*/
|
|
175
|
+
get quantitativeStatsReady() {
|
|
176
|
+
const view = getContainingView(self);
|
|
177
|
+
return (view.initialized &&
|
|
178
|
+
self.featureDensityStatsReady &&
|
|
179
|
+
!self.regionTooLarge &&
|
|
180
|
+
!self.error);
|
|
181
|
+
},
|
|
171
182
|
}))
|
|
172
183
|
.views(self => ({
|
|
173
184
|
/**
|
|
@@ -189,42 +200,6 @@ export function stateModelFactory(pluginManager, configSchema) {
|
|
|
189
200
|
get useMinimalTicks() {
|
|
190
201
|
return (getConf(self, 'minimalTicks') || this.rowHeightTooSmallForScalebar);
|
|
191
202
|
},
|
|
192
|
-
}))
|
|
193
|
-
.views(self => ({
|
|
194
|
-
/**
|
|
195
|
-
* #getter
|
|
196
|
-
*/
|
|
197
|
-
get ticks() {
|
|
198
|
-
const { scaleType, domain, isMultiRow, rowHeight, useMinimalTicks } = self;
|
|
199
|
-
if (!domain) {
|
|
200
|
-
return undefined;
|
|
201
|
-
}
|
|
202
|
-
const offset = isMultiRow ? 0 : YSCALEBAR_LABEL_OFFSET;
|
|
203
|
-
const ticks = axisPropsFromTickScale(getScale({
|
|
204
|
-
scaleType,
|
|
205
|
-
domain,
|
|
206
|
-
range: [rowHeight - offset, offset],
|
|
207
|
-
inverted: getConf(self, 'inverted'),
|
|
208
|
-
}), 4);
|
|
209
|
-
return useMinimalTicks ? { ...ticks, values: domain } : ticks;
|
|
210
|
-
},
|
|
211
|
-
/**
|
|
212
|
-
* #getter
|
|
213
|
-
*/
|
|
214
|
-
get colors() {
|
|
215
|
-
return [
|
|
216
|
-
'red',
|
|
217
|
-
'blue',
|
|
218
|
-
'green',
|
|
219
|
-
'orange',
|
|
220
|
-
'purple',
|
|
221
|
-
'cyan',
|
|
222
|
-
'pink',
|
|
223
|
-
'darkblue',
|
|
224
|
-
'darkred',
|
|
225
|
-
'pink',
|
|
226
|
-
];
|
|
227
|
-
},
|
|
228
203
|
}))
|
|
229
204
|
.views(self => {
|
|
230
205
|
const { renderProps: superRenderProps } = self;
|
|
@@ -232,58 +207,114 @@ export function stateModelFactory(pluginManager, configSchema) {
|
|
|
232
207
|
/**
|
|
233
208
|
* #method
|
|
234
209
|
*/
|
|
235
|
-
|
|
210
|
+
adapterProps() {
|
|
236
211
|
const superProps = superRenderProps();
|
|
237
|
-
const { displayCrossHatches, filters, height, resolution, rpcDriverName, scaleOpts, stats, sources, ticks, rendererConfig: config, } = self;
|
|
238
212
|
return {
|
|
239
213
|
...superProps,
|
|
240
|
-
notReady: superProps.notReady || !sources || !stats,
|
|
241
214
|
displayModel: self,
|
|
242
|
-
config,
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
rpcDriverName,
|
|
248
|
-
scaleOpts,
|
|
249
|
-
sources,
|
|
250
|
-
ticks,
|
|
251
|
-
onMouseMove: (_, f) => {
|
|
252
|
-
self.setFeatureUnderMouse(f);
|
|
253
|
-
},
|
|
254
|
-
onMouseLeave: () => {
|
|
255
|
-
self.setFeatureUnderMouse(undefined);
|
|
256
|
-
},
|
|
215
|
+
config: self.rendererConfig,
|
|
216
|
+
filters: self.filters,
|
|
217
|
+
resolution: self.resolution,
|
|
218
|
+
rpcDriverName: self.rpcDriverName,
|
|
219
|
+
sources: self.sources,
|
|
257
220
|
};
|
|
258
221
|
},
|
|
259
222
|
/**
|
|
260
223
|
* #getter
|
|
261
224
|
*/
|
|
262
|
-
get
|
|
263
|
-
|
|
225
|
+
get ticks() {
|
|
226
|
+
const { scaleType, domain, isMultiRow, rowHeight, useMinimalTicks } = self;
|
|
227
|
+
if (!domain) {
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
230
|
+
const offset = isMultiRow ? 0 : YSCALEBAR_LABEL_OFFSET;
|
|
231
|
+
const ticks = axisPropsFromTickScale(getScale({
|
|
232
|
+
scaleType,
|
|
233
|
+
domain,
|
|
234
|
+
range: [rowHeight - offset, offset],
|
|
235
|
+
inverted: getConf(self, 'inverted'),
|
|
236
|
+
}), 4);
|
|
237
|
+
return useMinimalTicks ? { ...ticks, values: domain } : ticks;
|
|
264
238
|
},
|
|
265
239
|
/**
|
|
266
240
|
* #getter
|
|
267
241
|
*/
|
|
268
|
-
get
|
|
269
|
-
return
|
|
242
|
+
get colors() {
|
|
243
|
+
return [
|
|
244
|
+
'red',
|
|
245
|
+
'blue',
|
|
246
|
+
'green',
|
|
247
|
+
'orange',
|
|
248
|
+
'purple',
|
|
249
|
+
'cyan',
|
|
250
|
+
'pink',
|
|
251
|
+
'darkblue',
|
|
252
|
+
'darkred',
|
|
253
|
+
'pink',
|
|
254
|
+
];
|
|
270
255
|
},
|
|
271
256
|
/**
|
|
272
257
|
* #getter
|
|
258
|
+
* unused currently
|
|
273
259
|
*/
|
|
274
|
-
get
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
else if (self.minSize === 1) {
|
|
279
|
-
return 1;
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
return 2;
|
|
283
|
-
}
|
|
260
|
+
get quantitativeStatsRelevantToCurrentZoom() {
|
|
261
|
+
var _a;
|
|
262
|
+
const view = getContainingView(self);
|
|
263
|
+
return ((_a = self.stats) === null || _a === void 0 ? void 0 : _a.currStatsBpPerPx) === view.bpPerPx;
|
|
284
264
|
},
|
|
285
265
|
};
|
|
286
266
|
})
|
|
267
|
+
.views(self => ({
|
|
268
|
+
/**
|
|
269
|
+
* #method
|
|
270
|
+
*/
|
|
271
|
+
renderProps() {
|
|
272
|
+
const superProps = self.adapterProps();
|
|
273
|
+
return {
|
|
274
|
+
...superProps,
|
|
275
|
+
notReady: superProps.notReady || !self.sources || !self.stats,
|
|
276
|
+
displayModel: self,
|
|
277
|
+
rpcDriverName: self.rpcDriverName,
|
|
278
|
+
displayCrossHatches: self.displayCrossHatches,
|
|
279
|
+
height: self.height,
|
|
280
|
+
ticks: self.ticks,
|
|
281
|
+
stats: self.stats,
|
|
282
|
+
scaleOpts: self.scaleOpts,
|
|
283
|
+
onMouseMove: (_, f) => {
|
|
284
|
+
self.setFeatureUnderMouse(f);
|
|
285
|
+
},
|
|
286
|
+
onMouseLeave: () => {
|
|
287
|
+
self.setFeatureUnderMouse(undefined);
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
},
|
|
291
|
+
/**
|
|
292
|
+
* #getter
|
|
293
|
+
*/
|
|
294
|
+
get hasResolution() {
|
|
295
|
+
return self.adapterCapabilities.includes('hasResolution');
|
|
296
|
+
},
|
|
297
|
+
/**
|
|
298
|
+
* #getter
|
|
299
|
+
*/
|
|
300
|
+
get hasGlobalStats() {
|
|
301
|
+
return self.adapterCapabilities.includes('hasGlobalStats');
|
|
302
|
+
},
|
|
303
|
+
/**
|
|
304
|
+
* #getter
|
|
305
|
+
*/
|
|
306
|
+
get fillSetting() {
|
|
307
|
+
if (self.filled) {
|
|
308
|
+
return 0;
|
|
309
|
+
}
|
|
310
|
+
else if (self.minSize === 1) {
|
|
311
|
+
return 1;
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
return 2;
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
}))
|
|
287
318
|
.views(self => {
|
|
288
319
|
const { trackMenuItems: superTrackMenuItems } = self;
|
|
289
320
|
const hasRenderings = getConf(self, 'defaultRendering');
|
|
@@ -366,20 +397,20 @@ export function stateModelFactory(pluginManager, configSchema) {
|
|
|
366
397
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
367
398
|
;
|
|
368
399
|
(async () => {
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
}));
|
|
400
|
+
try {
|
|
401
|
+
const [{ getMultiWiggleSourcesAutorun }, { getQuantitativeStatsAutorun },] = await Promise.all([
|
|
402
|
+
import('../getMultiWiggleSourcesAutorun'),
|
|
403
|
+
import('../getQuantitativeStatsAutorun'),
|
|
404
|
+
]);
|
|
405
|
+
getQuantitativeStatsAutorun(self);
|
|
406
|
+
getMultiWiggleSourcesAutorun(self);
|
|
407
|
+
}
|
|
408
|
+
catch (e) {
|
|
379
409
|
if (isAlive(self)) {
|
|
380
|
-
|
|
410
|
+
console.error(e);
|
|
411
|
+
getSession(self).notifyError(`${e}`, e);
|
|
381
412
|
}
|
|
382
|
-
}
|
|
413
|
+
}
|
|
383
414
|
})();
|
|
384
415
|
},
|
|
385
416
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { getContainingView } from '@jbrowse/core/util';
|
|
3
3
|
import { when } from 'mobx';
|
|
4
|
-
import YScaleBars from '
|
|
4
|
+
import YScaleBars from './components/YScaleBars';
|
|
5
5
|
export async function renderSvg(self, opts, superRenderSvg) {
|
|
6
6
|
await when(() => !!self.stats && !!self.regionCannotBeRenderedText);
|
|
7
7
|
const { offsetPx } = getContainingView(self);
|