@jbrowse/plugin-wiggle 2.4.2 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BigWigAdapter/BigWigAdapter.d.ts +2 -2
- package/dist/BigWigAdapter/BigWigAdapter.js +4 -3
- package/dist/BigWigAdapter/BigWigAdapter.js.map +1 -1
- package/dist/BigWigAdapter/configSchema.d.ts +20 -1
- package/dist/CreateMultiWiggleExtension/ConfirmDialog.d.ts +2 -2
- package/dist/DensityRenderer/configSchema.d.ts +33 -1
- package/dist/LinePlotRenderer/configSchema.d.ts +44 -1
- package/dist/LinearWiggleDisplay/components/SetColorDialog.d.ts +2 -2
- package/dist/LinearWiggleDisplay/components/Tooltip.d.ts +1 -1
- package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +2 -2
- package/dist/LinearWiggleDisplay/index.js +27 -4
- package/dist/LinearWiggleDisplay/index.js.map +1 -1
- package/dist/LinearWiggleDisplay/models/configSchema.d.ts +81 -1
- package/dist/LinearWiggleDisplay/models/configSchema.js +6 -67
- package/dist/LinearWiggleDisplay/models/configSchema.js.map +1 -1
- package/dist/LinearWiggleDisplay/models/model.d.ts +172 -320
- package/dist/LinearWiggleDisplay/models/model.js +18 -450
- package/dist/LinearWiggleDisplay/models/model.js.map +1 -1
- package/dist/LinearWiggleDisplay/models/renderSvg.d.ts +4 -0
- package/dist/LinearWiggleDisplay/models/renderSvg.js +21 -0
- package/dist/LinearWiggleDisplay/models/renderSvg.js.map +1 -0
- package/dist/MultiDensityRenderer/MultiDensityRenderer.js +1 -1
- package/dist/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -1
- package/dist/MultiDensityRenderer/configSchema.d.ts +33 -1
- package/dist/MultiLineRenderer/MultiLineRenderer.js +1 -1
- package/dist/MultiLineRenderer/MultiLineRenderer.js.map +1 -1
- package/dist/MultiLineRenderer/configSchema.d.ts +51 -1
- package/dist/MultiLinearWiggleDisplay/components/DraggableDialog.d.ts +2 -2
- package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +2 -2
- package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js +37 -38
- package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/components/Tooltip.d.ts +1 -1
- package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +3 -3
- package/dist/MultiLinearWiggleDisplay/index.js +25 -2
- package/dist/MultiLinearWiggleDisplay/index.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/models/configSchema.d.ts +87 -1
- package/dist/MultiLinearWiggleDisplay/models/configSchema.js +6 -66
- package/dist/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/models/model.d.ts +288 -153
- package/dist/MultiLinearWiggleDisplay/models/model.js +334 -523
- package/dist/MultiLinearWiggleDisplay/models/model.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/models/renderSvg.d.ts +4 -0
- package/dist/MultiLinearWiggleDisplay/models/renderSvg.js +20 -0
- package/dist/MultiLinearWiggleDisplay/models/renderSvg.js.map +1 -0
- package/dist/MultiQuantitativeTrack/configSchema.d.ts +73 -1
- package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js +1 -1
- package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -1
- package/dist/MultiRowLineRenderer/configSchema.d.ts +51 -1
- package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +1 -1
- package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -1
- package/dist/MultiRowXYPlotRenderer/configSchema.d.ts +68 -1
- package/dist/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +1 -1
- package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js +2 -2
- package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js.map +1 -1
- package/dist/MultiWiggleAdapter/configSchema.d.ts +18 -1
- package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +2 -2
- package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +1 -1
- package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -1
- package/dist/MultiWiggleRendering.d.ts +2 -2
- package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js +3 -2
- package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -1
- package/dist/MultiXYPlotRenderer/configSchema.d.ts +65 -1
- package/dist/QuantitativeTrack/configSchema.d.ts +73 -1
- package/dist/Tooltip.d.ts +1 -1
- package/dist/WiggleBaseRenderer.d.ts +1 -1
- package/dist/WiggleRPC/MultiWiggleGetSources.d.ts +21 -0
- package/dist/WiggleRPC/MultiWiggleGetSources.js +51 -0
- package/dist/WiggleRPC/MultiWiggleGetSources.js.map +1 -0
- package/dist/WiggleRPC/WiggleGetGlobalQuantitativeStats.d.ts +14 -0
- package/dist/WiggleRPC/WiggleGetGlobalQuantitativeStats.js +37 -0
- package/dist/WiggleRPC/WiggleGetGlobalQuantitativeStats.js.map +1 -0
- package/dist/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.d.ts +20 -0
- package/dist/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js +54 -0
- package/dist/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js.map +1 -0
- package/dist/WiggleRPC/rpcMethods.d.ts +3 -47
- package/dist/WiggleRPC/rpcMethods.js +16 -117
- package/dist/WiggleRPC/rpcMethods.js.map +1 -1
- package/dist/WiggleRendering.d.ts +2 -2
- package/dist/XYPlotRenderer/configSchema.d.ts +65 -1
- package/dist/configSchema.d.ts +51 -1
- package/dist/index.d.ts +329 -180
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/shared/SetMinMaxDialog.d.ts +2 -2
- package/dist/shared/YScaleBar.d.ts +4 -3
- package/dist/shared/YScaleBar.js +1 -1
- package/dist/shared/YScaleBar.js.map +1 -1
- package/dist/shared/configShared.d.ts +85 -0
- package/dist/shared/configShared.js +84 -0
- package/dist/shared/configShared.js.map +1 -0
- package/dist/shared/modelShared.d.ts +576 -0
- package/dist/shared/modelShared.js +480 -0
- package/dist/shared/modelShared.js.map +1 -0
- package/dist/util.d.ts +9 -9
- package/dist/util.js +13 -22
- package/dist/util.js.map +1 -1
- package/esm/BigWigAdapter/BigWigAdapter.d.ts +2 -2
- package/esm/BigWigAdapter/BigWigAdapter.js +6 -4
- package/esm/BigWigAdapter/BigWigAdapter.js.map +1 -1
- package/esm/BigWigAdapter/configSchema.d.ts +20 -1
- package/esm/CreateMultiWiggleExtension/ConfirmDialog.d.ts +2 -2
- package/esm/DensityRenderer/configSchema.d.ts +33 -1
- package/esm/LinePlotRenderer/configSchema.d.ts +44 -1
- package/esm/LinearWiggleDisplay/components/SetColorDialog.d.ts +2 -2
- package/esm/LinearWiggleDisplay/components/Tooltip.d.ts +1 -1
- package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +2 -2
- package/esm/LinearWiggleDisplay/index.js +2 -2
- package/esm/LinearWiggleDisplay/index.js.map +1 -1
- package/esm/LinearWiggleDisplay/models/configSchema.d.ts +81 -1
- package/esm/LinearWiggleDisplay/models/configSchema.js +3 -67
- package/esm/LinearWiggleDisplay/models/configSchema.js.map +1 -1
- package/esm/LinearWiggleDisplay/models/model.d.ts +172 -320
- package/esm/LinearWiggleDisplay/models/model.js +22 -454
- package/esm/LinearWiggleDisplay/models/model.js.map +1 -1
- package/esm/LinearWiggleDisplay/models/renderSvg.d.ts +4 -0
- package/esm/LinearWiggleDisplay/models/renderSvg.js +14 -0
- package/esm/LinearWiggleDisplay/models/renderSvg.js.map +1 -0
- package/esm/MultiDensityRenderer/MultiDensityRenderer.js +1 -1
- package/esm/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -1
- package/esm/MultiDensityRenderer/configSchema.d.ts +33 -1
- package/esm/MultiLineRenderer/MultiLineRenderer.js +1 -1
- package/esm/MultiLineRenderer/MultiLineRenderer.js.map +1 -1
- package/esm/MultiLineRenderer/configSchema.d.ts +51 -1
- package/esm/MultiLinearWiggleDisplay/components/DraggableDialog.d.ts +2 -2
- package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +2 -2
- package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js +37 -38
- package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
- package/esm/MultiLinearWiggleDisplay/components/Tooltip.d.ts +1 -1
- package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +3 -3
- package/esm/MultiLinearWiggleDisplay/index.js +2 -2
- package/esm/MultiLinearWiggleDisplay/index.js.map +1 -1
- package/esm/MultiLinearWiggleDisplay/models/configSchema.d.ts +87 -1
- package/esm/MultiLinearWiggleDisplay/models/configSchema.js +3 -66
- package/esm/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -1
- package/esm/MultiLinearWiggleDisplay/models/model.d.ts +288 -153
- package/esm/MultiLinearWiggleDisplay/models/model.js +336 -527
- package/esm/MultiLinearWiggleDisplay/models/model.js.map +1 -1
- package/esm/MultiLinearWiggleDisplay/models/renderSvg.d.ts +4 -0
- package/esm/MultiLinearWiggleDisplay/models/renderSvg.js +13 -0
- package/esm/MultiLinearWiggleDisplay/models/renderSvg.js.map +1 -0
- package/esm/MultiQuantitativeTrack/configSchema.d.ts +73 -1
- package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js +1 -1
- package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -1
- package/esm/MultiRowLineRenderer/configSchema.d.ts +51 -1
- package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +1 -1
- package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -1
- package/esm/MultiRowXYPlotRenderer/configSchema.d.ts +68 -1
- package/esm/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +1 -1
- package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js +3 -2
- package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js.map +1 -1
- package/esm/MultiWiggleAdapter/configSchema.d.ts +18 -1
- package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +2 -2
- package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +1 -1
- package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -1
- package/esm/MultiWiggleRendering.d.ts +2 -2
- package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.js +2 -1
- package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -1
- package/esm/MultiXYPlotRenderer/configSchema.d.ts +65 -1
- package/esm/QuantitativeTrack/configSchema.d.ts +73 -1
- package/esm/Tooltip.d.ts +1 -1
- package/esm/WiggleBaseRenderer.d.ts +1 -1
- package/esm/WiggleRPC/MultiWiggleGetSources.d.ts +21 -0
- package/esm/WiggleRPC/MultiWiggleGetSources.js +44 -0
- package/esm/WiggleRPC/MultiWiggleGetSources.js.map +1 -0
- package/esm/WiggleRPC/WiggleGetGlobalQuantitativeStats.d.ts +14 -0
- package/esm/WiggleRPC/WiggleGetGlobalQuantitativeStats.js +30 -0
- package/esm/WiggleRPC/WiggleGetGlobalQuantitativeStats.js.map +1 -0
- package/esm/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.d.ts +20 -0
- package/esm/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js +47 -0
- package/esm/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js.map +1 -0
- package/esm/WiggleRPC/rpcMethods.d.ts +3 -47
- package/esm/WiggleRPC/rpcMethods.js +3 -111
- package/esm/WiggleRPC/rpcMethods.js.map +1 -1
- package/esm/WiggleRendering.d.ts +2 -2
- package/esm/XYPlotRenderer/configSchema.d.ts +65 -1
- package/esm/configSchema.d.ts +51 -1
- package/esm/index.d.ts +329 -180
- package/esm/index.js +3 -3
- package/esm/index.js.map +1 -1
- package/esm/shared/SetMinMaxDialog.d.ts +2 -2
- package/esm/shared/YScaleBar.d.ts +4 -3
- package/esm/shared/YScaleBar.js +1 -1
- package/esm/shared/YScaleBar.js.map +1 -1
- package/esm/shared/configShared.d.ts +85 -0
- package/esm/shared/configShared.js +81 -0
- package/esm/shared/configShared.js.map +1 -0
- package/esm/shared/modelShared.d.ts +576 -0
- package/esm/shared/modelShared.js +454 -0
- package/esm/shared/modelShared.js.map +1 -0
- package/esm/util.d.ts +9 -9
- package/esm/util.js +10 -18
- package/esm/util.js.map +1 -1
- package/package.json +4 -4
- package/src/BigWigAdapter/BigWigAdapter.test.ts +8 -3
- package/src/BigWigAdapter/BigWigAdapter.ts +8 -7
- package/src/LinearWiggleDisplay/index.ts +2 -2
- package/src/LinearWiggleDisplay/models/configSchema.ts +4 -73
- package/src/LinearWiggleDisplay/models/model.tsx +25 -524
- package/src/LinearWiggleDisplay/models/renderSvg.tsx +29 -0
- package/src/MultiDensityRenderer/MultiDensityRenderer.ts +1 -2
- package/src/MultiLineRenderer/MultiLineRenderer.ts +1 -2
- package/src/MultiLinearWiggleDisplay/components/SetColorDialog.tsx +54 -51
- package/src/MultiLinearWiggleDisplay/index.ts +2 -2
- package/src/MultiLinearWiggleDisplay/models/configSchema.ts +4 -72
- package/src/MultiLinearWiggleDisplay/models/model.tsx +134 -389
- package/src/MultiLinearWiggleDisplay/models/renderSvg.tsx +26 -0
- package/src/MultiRowLineRenderer/MultiRowLineRenderer.ts +1 -2
- package/src/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.ts +1 -2
- package/src/MultiWiggleAdapter/MultiWiggleAdapter.ts +1 -1
- package/src/MultiWiggleAddTrackWidget/AddTrackWorkflow.tsx +1 -1
- package/src/MultiXYPlotRenderer/MultiXYPlotRenderer.ts +2 -2
- package/src/WiggleRPC/MultiWiggleGetSources.ts +68 -0
- package/src/WiggleRPC/WiggleGetGlobalQuantitativeStats.ts +44 -0
- package/src/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.ts +73 -0
- package/src/WiggleRPC/rpcMethods.ts +3 -170
- package/src/index.ts +4 -4
- package/src/shared/YScaleBar.tsx +4 -2
- package/src/shared/configShared.ts +90 -0
- package/src/shared/modelShared.ts +510 -0
- package/src/util.ts +24 -26
|
@@ -1,48 +1,34 @@
|
|
|
1
1
|
import React, { lazy } from 'react'
|
|
2
2
|
import { addDisposer, isAlive, types, Instance } from 'mobx-state-tree'
|
|
3
|
-
import { autorun
|
|
3
|
+
import { autorun } from 'mobx'
|
|
4
4
|
import { axisPropsFromTickScale } from 'react-d3-axis-mod'
|
|
5
5
|
import deepEqual from 'fast-deep-equal'
|
|
6
6
|
|
|
7
7
|
// jbrowse imports
|
|
8
8
|
import {
|
|
9
|
-
ConfigurationReference,
|
|
10
9
|
AnyConfigurationSchemaType,
|
|
11
10
|
getConf,
|
|
12
|
-
readConfObject,
|
|
13
11
|
} from '@jbrowse/core/configuration'
|
|
14
|
-
import {
|
|
15
|
-
getSession,
|
|
16
|
-
getEnv,
|
|
17
|
-
getContainingView,
|
|
18
|
-
isSelectionContainer,
|
|
19
|
-
Feature,
|
|
20
|
-
} from '@jbrowse/core/util'
|
|
12
|
+
import { getSession, Feature } from '@jbrowse/core/util'
|
|
21
13
|
import { getRpcSessionId } from '@jbrowse/core/util/tracks'
|
|
22
14
|
import { set1 as colors } from '@jbrowse/core/ui/colors'
|
|
23
15
|
import PluginManager from '@jbrowse/core/PluginManager'
|
|
24
|
-
import {
|
|
25
|
-
BaseLinearDisplay,
|
|
26
|
-
LinearGenomeViewModel,
|
|
27
|
-
} from '@jbrowse/plugin-linear-genome-view'
|
|
16
|
+
import { ExportSvgDisplayOptions } from '@jbrowse/plugin-linear-genome-view'
|
|
28
17
|
|
|
29
18
|
// locals
|
|
30
19
|
import {
|
|
31
|
-
getNiceDomain,
|
|
32
20
|
getScale,
|
|
33
|
-
|
|
34
|
-
statsAutorun,
|
|
21
|
+
quantitativeStatsAutorun,
|
|
35
22
|
YSCALEBAR_LABEL_OFFSET,
|
|
36
23
|
} from '../../util'
|
|
37
24
|
|
|
38
25
|
import Tooltip from '../components/Tooltip'
|
|
39
|
-
import
|
|
26
|
+
import SharedWiggleMixin from '../../shared/modelShared'
|
|
40
27
|
|
|
41
28
|
const randomColor = () =>
|
|
42
|
-
'#000000'.
|
|
29
|
+
'#000000'.replaceAll('0', () => (~~(Math.random() * 16)).toString(16))
|
|
43
30
|
|
|
44
|
-
//
|
|
45
|
-
const SetMinMaxDlg = lazy(() => import('../../shared/SetMinMaxDialog'))
|
|
31
|
+
// lazies
|
|
46
32
|
const SetColorDlg = lazy(() => import('../components/SetColorDialog'))
|
|
47
33
|
|
|
48
34
|
// using a map because it preserves order
|
|
@@ -54,239 +40,100 @@ const rendererTypes = new Map([
|
|
|
54
40
|
['multirowline', 'MultiRowLineRenderer'],
|
|
55
41
|
])
|
|
56
42
|
|
|
57
|
-
type LGV = LinearGenomeViewModel
|
|
58
|
-
|
|
59
43
|
interface Source {
|
|
60
44
|
name: string
|
|
61
45
|
color?: string
|
|
62
46
|
group?: string
|
|
63
47
|
}
|
|
64
48
|
|
|
65
|
-
|
|
49
|
+
/**
|
|
50
|
+
* #stateModel MultiLinearWiggleDisplay
|
|
51
|
+
* extends `SharedWiggleMixin`
|
|
52
|
+
*/
|
|
53
|
+
export function stateModelFactory(
|
|
66
54
|
pluginManager: PluginManager,
|
|
67
55
|
configSchema: AnyConfigurationSchemaType,
|
|
68
|
-
)
|
|
69
|
-
types
|
|
56
|
+
) {
|
|
57
|
+
return types
|
|
70
58
|
.compose(
|
|
71
59
|
'MultiLinearWiggleDisplay',
|
|
72
|
-
|
|
60
|
+
SharedWiggleMixin(configSchema),
|
|
73
61
|
types.model({
|
|
62
|
+
/**
|
|
63
|
+
* #property
|
|
64
|
+
*/
|
|
74
65
|
type: types.literal('MultiLinearWiggleDisplay'),
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
minSize: types.maybe(types.number),
|
|
80
|
-
color: types.maybe(types.string),
|
|
81
|
-
posColor: types.maybe(types.string),
|
|
82
|
-
negColor: types.maybe(types.string),
|
|
83
|
-
summaryScoreMode: types.maybe(types.string),
|
|
84
|
-
rendererTypeNameState: types.maybe(types.string),
|
|
85
|
-
scale: types.maybe(types.string),
|
|
86
|
-
autoscale: types.maybe(types.string),
|
|
87
|
-
displayCrossHatches: types.maybe(types.boolean),
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* #property
|
|
69
|
+
*/
|
|
88
70
|
layout: types.optional(types.frozen<Source[]>(), []),
|
|
89
|
-
constraints: types.optional(
|
|
90
|
-
types.model({
|
|
91
|
-
max: types.maybe(types.number),
|
|
92
|
-
min: types.maybe(types.number),
|
|
93
|
-
}),
|
|
94
|
-
{},
|
|
95
|
-
),
|
|
96
71
|
}),
|
|
97
72
|
)
|
|
98
73
|
.volatile(() => ({
|
|
99
|
-
message: undefined as undefined | string,
|
|
100
|
-
stats: undefined as { scoreMin: number; scoreMax: number } | undefined,
|
|
101
|
-
statsRegion: undefined as string | undefined,
|
|
102
|
-
statsFetchInProgress: undefined as undefined | AbortController,
|
|
103
74
|
featureUnderMouseVolatile: undefined as Feature | undefined,
|
|
104
75
|
sourcesVolatile: undefined as Source[] | undefined,
|
|
105
76
|
}))
|
|
106
77
|
.actions(self => ({
|
|
78
|
+
/**
|
|
79
|
+
* #action
|
|
80
|
+
*/
|
|
107
81
|
setLayout(layout: Source[]) {
|
|
108
82
|
self.layout = layout
|
|
109
83
|
},
|
|
84
|
+
/**
|
|
85
|
+
* #action
|
|
86
|
+
*/
|
|
110
87
|
clearLayout() {
|
|
111
88
|
self.layout = []
|
|
112
89
|
},
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
self.stats = { scoreMin, scoreMax }
|
|
118
|
-
} else if (
|
|
119
|
-
Math.abs(self.stats.scoreMax - scoreMax) > EPSILON ||
|
|
120
|
-
Math.abs(self.stats.scoreMin - scoreMin) > EPSILON
|
|
121
|
-
) {
|
|
122
|
-
self.stats = { scoreMin, scoreMax }
|
|
123
|
-
}
|
|
124
|
-
},
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* #action
|
|
93
|
+
*/
|
|
125
94
|
setSources(sources: Source[]) {
|
|
126
95
|
if (!deepEqual(sources, self.sourcesVolatile)) {
|
|
127
96
|
self.sourcesVolatile = sources
|
|
128
97
|
}
|
|
129
98
|
},
|
|
130
|
-
setColor(color: string) {
|
|
131
|
-
self.color = color
|
|
132
|
-
},
|
|
133
|
-
setPosColor(color: string) {
|
|
134
|
-
self.posColor = color
|
|
135
|
-
},
|
|
136
|
-
setNegColor(color: string) {
|
|
137
|
-
self.negColor = color
|
|
138
|
-
},
|
|
139
|
-
|
|
140
|
-
setLoading(aborter: AbortController) {
|
|
141
|
-
const { statsFetchInProgress: statsFetch } = self
|
|
142
|
-
if (statsFetch !== undefined && !statsFetch.signal.aborted) {
|
|
143
|
-
statsFetch.abort()
|
|
144
|
-
}
|
|
145
|
-
self.statsFetchInProgress = aborter
|
|
146
|
-
},
|
|
147
|
-
|
|
148
|
-
// this overrides the BaseLinearDisplayModel to avoid popping up a
|
|
149
|
-
// feature detail display, but still sets the feature selection on the
|
|
150
|
-
// model so listeners can detect a click
|
|
151
|
-
selectFeature(feature: Feature) {
|
|
152
|
-
const session = getSession(self)
|
|
153
|
-
if (isSelectionContainer(session)) {
|
|
154
|
-
session.setSelection(feature)
|
|
155
|
-
}
|
|
156
|
-
},
|
|
157
99
|
|
|
100
|
+
/**
|
|
101
|
+
* #action
|
|
102
|
+
*/
|
|
158
103
|
setFeatureUnderMouse(f?: Feature) {
|
|
159
104
|
self.featureUnderMouseVolatile = f
|
|
160
105
|
},
|
|
161
|
-
setResolution(res: number) {
|
|
162
|
-
self.resolution = res
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
setFill(fill: number) {
|
|
166
|
-
if (fill === 0) {
|
|
167
|
-
self.fill = true
|
|
168
|
-
self.minSize = 0
|
|
169
|
-
} else if (fill === 1) {
|
|
170
|
-
self.fill = false
|
|
171
|
-
self.minSize = 1
|
|
172
|
-
} else if (fill === 2) {
|
|
173
|
-
self.fill = false
|
|
174
|
-
self.minSize = 2
|
|
175
|
-
}
|
|
176
|
-
},
|
|
177
|
-
|
|
178
|
-
toggleLogScale() {
|
|
179
|
-
self.scale = self.scale === 'log' ? 'linear' : 'log'
|
|
180
|
-
},
|
|
181
|
-
|
|
182
|
-
setScaleType(scale?: string) {
|
|
183
|
-
self.scale = scale
|
|
184
|
-
},
|
|
185
|
-
|
|
186
|
-
setSummaryScoreMode(val: string) {
|
|
187
|
-
self.summaryScoreMode = val
|
|
188
|
-
},
|
|
189
|
-
|
|
190
|
-
setAutoscale(val: string) {
|
|
191
|
-
self.autoscale = val
|
|
192
|
-
},
|
|
193
|
-
|
|
194
|
-
setMaxScore(val?: number) {
|
|
195
|
-
self.constraints.max = val
|
|
196
|
-
},
|
|
197
|
-
|
|
198
|
-
setRendererType(val: string) {
|
|
199
|
-
self.rendererTypeNameState = val
|
|
200
|
-
},
|
|
201
|
-
|
|
202
|
-
setMinScore(val?: number) {
|
|
203
|
-
self.constraints.min = val
|
|
204
|
-
},
|
|
205
|
-
|
|
206
|
-
toggleCrossHatches() {
|
|
207
|
-
self.displayCrossHatches = !self.displayCrossHatches
|
|
208
|
-
},
|
|
209
|
-
|
|
210
|
-
setCrossHatches(cross: boolean) {
|
|
211
|
-
self.displayCrossHatches = cross
|
|
212
|
-
},
|
|
213
106
|
}))
|
|
214
107
|
.views(self => ({
|
|
108
|
+
/**
|
|
109
|
+
* #getter
|
|
110
|
+
*/
|
|
215
111
|
get featureUnderMouse() {
|
|
216
112
|
return self.featureUnderMouseVolatile
|
|
217
113
|
},
|
|
114
|
+
/**
|
|
115
|
+
* #getter
|
|
116
|
+
*/
|
|
218
117
|
get TooltipComponent() {
|
|
219
118
|
return Tooltip as unknown as React.FC
|
|
220
119
|
},
|
|
221
120
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
get rendererTypeNameSimple() {
|
|
226
|
-
return self.rendererTypeNameState || getConf(self, 'defaultRendering')
|
|
227
|
-
},
|
|
121
|
+
/**
|
|
122
|
+
* #getter
|
|
123
|
+
*/
|
|
228
124
|
get rendererTypeName() {
|
|
229
|
-
const name =
|
|
125
|
+
const name = self.rendererTypeNameSimple
|
|
230
126
|
const rendererType = rendererTypes.get(name)
|
|
231
127
|
if (!rendererType) {
|
|
232
128
|
throw new Error(`unknown renderer ${name}`)
|
|
233
129
|
}
|
|
234
130
|
return rendererType
|
|
235
131
|
},
|
|
236
|
-
|
|
237
|
-
// subclasses can define these, as snpcoverage track does
|
|
238
|
-
get filters() {
|
|
239
|
-
return undefined
|
|
240
|
-
},
|
|
241
|
-
|
|
242
|
-
get scaleType() {
|
|
243
|
-
return self.scale ?? (getConf(self, 'scaleType') as string)
|
|
244
|
-
},
|
|
245
|
-
|
|
246
|
-
get maxScore() {
|
|
247
|
-
return self.constraints.max ?? (getConf(self, 'maxScore') as number)
|
|
248
|
-
},
|
|
249
|
-
|
|
250
|
-
get minScore() {
|
|
251
|
-
return self.constraints.min ?? (getConf(self, 'minScore') as number)
|
|
252
|
-
},
|
|
253
132
|
}))
|
|
254
133
|
.views(self => ({
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
const {
|
|
260
|
-
color,
|
|
261
|
-
displayCrossHatches,
|
|
262
|
-
fill,
|
|
263
|
-
minSize,
|
|
264
|
-
negColor,
|
|
265
|
-
posColor,
|
|
266
|
-
summaryScoreMode,
|
|
267
|
-
scaleType,
|
|
268
|
-
} = self
|
|
269
|
-
|
|
270
|
-
return self.rendererType.configSchema.create(
|
|
271
|
-
{
|
|
272
|
-
...configBlob,
|
|
273
|
-
...(scaleType ? { scaleType } : {}),
|
|
274
|
-
...(fill !== undefined ? { filled: fill } : {}),
|
|
275
|
-
...(displayCrossHatches !== undefined
|
|
276
|
-
? { displayCrossHatches }
|
|
277
|
-
: {}),
|
|
278
|
-
...(summaryScoreMode !== undefined ? { summaryScoreMode } : {}),
|
|
279
|
-
...(color !== undefined ? { color } : {}),
|
|
280
|
-
...(negColor !== undefined ? { negColor } : {}),
|
|
281
|
-
...(posColor !== undefined ? { posColor } : {}),
|
|
282
|
-
...(minSize !== undefined ? { minSize } : {}),
|
|
283
|
-
},
|
|
284
|
-
getEnv(self),
|
|
285
|
-
)
|
|
286
|
-
},
|
|
287
|
-
}))
|
|
288
|
-
.views(self => ({
|
|
289
|
-
// everything except density gets a numerical scalebar
|
|
134
|
+
/**
|
|
135
|
+
* #getter
|
|
136
|
+
*/
|
|
290
137
|
get needsScalebar() {
|
|
291
138
|
return (
|
|
292
139
|
self.rendererTypeName === 'MultiXYPlotRenderer' ||
|
|
@@ -295,14 +142,18 @@ const stateModelFactory = (
|
|
|
295
142
|
self.rendererTypeName === 'MultiRowLineRenderer'
|
|
296
143
|
)
|
|
297
144
|
},
|
|
298
|
-
|
|
145
|
+
/**
|
|
146
|
+
* #getter
|
|
147
|
+
*/
|
|
299
148
|
get needsFullHeightScalebar() {
|
|
300
149
|
return (
|
|
301
150
|
self.rendererTypeName === 'MultiXYPlotRenderer' ||
|
|
302
151
|
self.rendererTypeName === 'MultiLineRenderer'
|
|
303
152
|
)
|
|
304
153
|
},
|
|
305
|
-
|
|
154
|
+
/**
|
|
155
|
+
* #getter
|
|
156
|
+
*/
|
|
306
157
|
get isMultiRow() {
|
|
307
158
|
return (
|
|
308
159
|
self.rendererTypeName === 'MultiRowXYPlotRenderer' ||
|
|
@@ -310,9 +161,11 @@ const stateModelFactory = (
|
|
|
310
161
|
self.rendererTypeName === 'MultiDensityRenderer'
|
|
311
162
|
)
|
|
312
163
|
},
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
164
|
+
/**
|
|
165
|
+
* #getter
|
|
166
|
+
* can be used to give it a "color scale" like a R heatmap, not
|
|
167
|
+
* implemented like this yet but flag can be used for this
|
|
168
|
+
*/
|
|
316
169
|
get needsCustomLegend() {
|
|
317
170
|
return self.rendererTypeName === 'MultiDensityRenderer'
|
|
318
171
|
},
|
|
@@ -323,22 +176,29 @@ const stateModelFactory = (
|
|
|
323
176
|
self.rendererTypeName === 'MultiRowXYPlotRenderer'
|
|
324
177
|
)
|
|
325
178
|
},
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
179
|
+
/**
|
|
180
|
+
* #getter
|
|
181
|
+
* the multirowxy and multiline don't need to use colors on the legend
|
|
182
|
+
* boxes since their track is drawn with the color. sort of a stylistic
|
|
183
|
+
* choice
|
|
184
|
+
*/
|
|
329
185
|
get renderColorBoxes() {
|
|
330
186
|
return !(
|
|
331
187
|
self.rendererTypeName === 'MultiRowLineRenderer' ||
|
|
332
188
|
self.rendererTypeName === 'MultiRowXYPlotRenderer'
|
|
333
189
|
)
|
|
334
190
|
},
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
191
|
+
/**
|
|
192
|
+
* #getter
|
|
193
|
+
* positions multi-row below the tracklabel even if using overlap
|
|
194
|
+
* tracklabels for everything else
|
|
195
|
+
*/
|
|
338
196
|
get prefersOffset() {
|
|
339
197
|
return this.isMultiRow
|
|
340
198
|
},
|
|
341
|
-
|
|
199
|
+
/**
|
|
200
|
+
* #getter
|
|
201
|
+
*/
|
|
342
202
|
get sources() {
|
|
343
203
|
const sources = Object.fromEntries(
|
|
344
204
|
self.sourcesVolatile?.map(s => [s.name, s]) || [],
|
|
@@ -358,82 +218,34 @@ const stateModelFactory = (
|
|
|
358
218
|
},
|
|
359
219
|
}))
|
|
360
220
|
|
|
361
|
-
.views(self => {
|
|
362
|
-
let oldDomain: [number, number] = [0, 0]
|
|
363
|
-
return {
|
|
364
|
-
get filled(): boolean {
|
|
365
|
-
const { fill, rendererConfig } = self
|
|
366
|
-
return fill ?? readConfObject(rendererConfig, 'filled')
|
|
367
|
-
},
|
|
368
|
-
get summaryScoreModeSetting(): string {
|
|
369
|
-
const { summaryScoreMode: scoreMode, rendererConfig } = self
|
|
370
|
-
return scoreMode ?? readConfObject(rendererConfig, 'summaryScoreMode')
|
|
371
|
-
},
|
|
372
|
-
get domain() {
|
|
373
|
-
const { stats, scaleType, minScore, maxScore } = self
|
|
374
|
-
if (!stats) {
|
|
375
|
-
return undefined
|
|
376
|
-
}
|
|
377
|
-
const { scoreMin, scoreMax } = stats
|
|
378
|
-
|
|
379
|
-
const ret = getNiceDomain({
|
|
380
|
-
domain: [scoreMin, scoreMax],
|
|
381
|
-
bounds: [minScore, maxScore],
|
|
382
|
-
scaleType,
|
|
383
|
-
})
|
|
384
|
-
|
|
385
|
-
// avoid weird scalebar if log value and empty region displayed
|
|
386
|
-
if (scaleType === 'log' && ret[1] === Number.MIN_VALUE) {
|
|
387
|
-
return [0, Number.MIN_VALUE]
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
// avoid returning a new object if it matches the old value
|
|
391
|
-
if (!deepEqual(oldDomain, ret)) {
|
|
392
|
-
oldDomain = ret
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
return oldDomain
|
|
396
|
-
},
|
|
397
|
-
|
|
398
|
-
get scaleOpts() {
|
|
399
|
-
const { scaleType, stats } = self
|
|
400
|
-
return {
|
|
401
|
-
autoscaleType: this.autoscaleType,
|
|
402
|
-
domain: this.domain,
|
|
403
|
-
stats,
|
|
404
|
-
scaleType,
|
|
405
|
-
inverted: getConf(self, 'inverted'),
|
|
406
|
-
}
|
|
407
|
-
},
|
|
408
|
-
|
|
409
|
-
get autoscaleType() {
|
|
410
|
-
return self.autoscale ?? (getConf(self, 'autoscale') as string)
|
|
411
|
-
},
|
|
412
|
-
|
|
413
|
-
get displayCrossHatchesSetting() {
|
|
414
|
-
const { displayCrossHatches, rendererConfig } = self
|
|
415
|
-
return (
|
|
416
|
-
displayCrossHatches ??
|
|
417
|
-
(readConfObject(rendererConfig, 'displayCrossHatches') as boolean)
|
|
418
|
-
)
|
|
419
|
-
},
|
|
420
|
-
get rowHeight() {
|
|
421
|
-
const { sources, height, isMultiRow } = self
|
|
422
|
-
return isMultiRow ? height / (sources?.length || 1) : height
|
|
423
|
-
},
|
|
424
|
-
|
|
425
|
-
get rowHeightTooSmallForScalebar() {
|
|
426
|
-
return this.rowHeight < 70
|
|
427
|
-
},
|
|
428
|
-
|
|
429
|
-
get useMinimalTicks() {
|
|
430
|
-
return (
|
|
431
|
-
getConf(self, 'minimalTicks') || this.rowHeightTooSmallForScalebar
|
|
432
|
-
)
|
|
433
|
-
},
|
|
434
|
-
}
|
|
435
|
-
})
|
|
436
221
|
.views(self => ({
|
|
222
|
+
/**
|
|
223
|
+
* #getter
|
|
224
|
+
*/
|
|
225
|
+
get rowHeight() {
|
|
226
|
+
const { sources, height, isMultiRow } = self
|
|
227
|
+
return isMultiRow ? height / (sources?.length || 1) : height
|
|
228
|
+
},
|
|
229
|
+
/**
|
|
230
|
+
* #getter
|
|
231
|
+
*/
|
|
232
|
+
get rowHeightTooSmallForScalebar() {
|
|
233
|
+
return this.rowHeight < 70
|
|
234
|
+
},
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* #getter
|
|
238
|
+
*/
|
|
239
|
+
get useMinimalTicks() {
|
|
240
|
+
return (
|
|
241
|
+
getConf(self, 'minimalTicks') || this.rowHeightTooSmallForScalebar
|
|
242
|
+
)
|
|
243
|
+
},
|
|
244
|
+
}))
|
|
245
|
+
.views(self => ({
|
|
246
|
+
/**
|
|
247
|
+
* #getter
|
|
248
|
+
*/
|
|
437
249
|
get ticks() {
|
|
438
250
|
const { scaleType, domain, isMultiRow, rowHeight, useMinimalTicks } =
|
|
439
251
|
self
|
|
@@ -455,6 +267,9 @@ const stateModelFactory = (
|
|
|
455
267
|
return useMinimalTicks ? { ...ticks, values: domain } : ticks
|
|
456
268
|
},
|
|
457
269
|
|
|
270
|
+
/**
|
|
271
|
+
* #getter
|
|
272
|
+
*/
|
|
458
273
|
get colors() {
|
|
459
274
|
return [
|
|
460
275
|
'red',
|
|
@@ -469,15 +284,13 @@ const stateModelFactory = (
|
|
|
469
284
|
'pink',
|
|
470
285
|
]
|
|
471
286
|
},
|
|
472
|
-
|
|
473
|
-
get adapterCapabilities() {
|
|
474
|
-
const { adapterTypeName } = self
|
|
475
|
-
return pluginManager.getAdapterType(adapterTypeName).adapterCapabilities
|
|
476
|
-
},
|
|
477
287
|
}))
|
|
478
288
|
.views(self => {
|
|
479
289
|
const { renderProps: superRenderProps } = self
|
|
480
290
|
return {
|
|
291
|
+
/**
|
|
292
|
+
* #method
|
|
293
|
+
*/
|
|
481
294
|
renderProps() {
|
|
482
295
|
const superProps = superRenderProps()
|
|
483
296
|
const {
|
|
@@ -511,14 +324,23 @@ const stateModelFactory = (
|
|
|
511
324
|
}
|
|
512
325
|
},
|
|
513
326
|
|
|
327
|
+
/**
|
|
328
|
+
* #getter
|
|
329
|
+
*/
|
|
514
330
|
get hasResolution() {
|
|
515
331
|
return self.adapterCapabilities.includes('hasResolution')
|
|
516
332
|
},
|
|
517
333
|
|
|
334
|
+
/**
|
|
335
|
+
* #getter
|
|
336
|
+
*/
|
|
518
337
|
get hasGlobalStats() {
|
|
519
338
|
return self.adapterCapabilities.includes('hasGlobalStats')
|
|
520
339
|
},
|
|
521
340
|
|
|
341
|
+
/**
|
|
342
|
+
* #getter
|
|
343
|
+
*/
|
|
522
344
|
get fillSetting() {
|
|
523
345
|
if (self.filled) {
|
|
524
346
|
return 0
|
|
@@ -534,35 +356,17 @@ const stateModelFactory = (
|
|
|
534
356
|
const { trackMenuItems: superTrackMenuItems } = self
|
|
535
357
|
const hasRenderings = getConf(self, 'defaultRendering')
|
|
536
358
|
return {
|
|
359
|
+
/**
|
|
360
|
+
* #method
|
|
361
|
+
*/
|
|
537
362
|
trackMenuItems() {
|
|
538
363
|
return [
|
|
539
364
|
...superTrackMenuItems(),
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
{
|
|
546
|
-
label: 'Finer resolution',
|
|
547
|
-
onClick: () => self.setResolution(self.resolution * 5),
|
|
548
|
-
},
|
|
549
|
-
{
|
|
550
|
-
label: 'Coarser resolution',
|
|
551
|
-
onClick: () => self.setResolution(self.resolution / 5),
|
|
552
|
-
},
|
|
553
|
-
],
|
|
554
|
-
},
|
|
555
|
-
{
|
|
556
|
-
label: 'Summary score mode',
|
|
557
|
-
subMenu: ['min', 'max', 'avg', 'whiskers'].map(elt => ({
|
|
558
|
-
label: elt,
|
|
559
|
-
type: 'radio',
|
|
560
|
-
checked: self.summaryScoreModeSetting === elt,
|
|
561
|
-
onClick: () => self.setSummaryScoreMode(elt),
|
|
562
|
-
})),
|
|
563
|
-
},
|
|
564
|
-
]
|
|
565
|
-
: []),
|
|
365
|
+
{
|
|
366
|
+
label: 'Score',
|
|
367
|
+
subMenu: self.scoreTrackMenuItems(),
|
|
368
|
+
},
|
|
369
|
+
|
|
566
370
|
...(self.canHaveFill
|
|
567
371
|
? [
|
|
568
372
|
{
|
|
@@ -578,11 +382,7 @@ const stateModelFactory = (
|
|
|
578
382
|
},
|
|
579
383
|
]
|
|
580
384
|
: []),
|
|
581
|
-
|
|
582
|
-
label:
|
|
583
|
-
self.scaleType === 'log' ? 'Set linear scale' : 'Set log scale',
|
|
584
|
-
onClick: () => self.toggleLogScale(),
|
|
585
|
-
},
|
|
385
|
+
|
|
586
386
|
...(self.needsScalebar
|
|
587
387
|
? [
|
|
588
388
|
{
|
|
@@ -613,36 +413,6 @@ const stateModelFactory = (
|
|
|
613
413
|
]
|
|
614
414
|
: []),
|
|
615
415
|
|
|
616
|
-
{
|
|
617
|
-
label: 'Autoscale type',
|
|
618
|
-
subMenu: [
|
|
619
|
-
['local', 'Local'],
|
|
620
|
-
...(self.hasGlobalStats
|
|
621
|
-
? [
|
|
622
|
-
['global', 'Global'],
|
|
623
|
-
['globalsd', 'Global ± 3σ'],
|
|
624
|
-
]
|
|
625
|
-
: []),
|
|
626
|
-
['localsd', 'Local ± 3σ'],
|
|
627
|
-
].map(([val, label]) => {
|
|
628
|
-
return {
|
|
629
|
-
label,
|
|
630
|
-
type: 'radio',
|
|
631
|
-
checked: self.autoscaleType === val,
|
|
632
|
-
onClick: () => self.setAutoscale(val),
|
|
633
|
-
}
|
|
634
|
-
}),
|
|
635
|
-
},
|
|
636
|
-
{
|
|
637
|
-
label: 'Set min/max score...',
|
|
638
|
-
onClick: () => {
|
|
639
|
-
const session = getSession(self)
|
|
640
|
-
session.queueDialog(handleClose => [
|
|
641
|
-
SetMinMaxDlg,
|
|
642
|
-
{ model: self, handleClose },
|
|
643
|
-
])
|
|
644
|
-
},
|
|
645
|
-
},
|
|
646
416
|
{
|
|
647
417
|
label: 'Edit colors/arrangement...',
|
|
648
418
|
onClick: () => {
|
|
@@ -657,32 +427,10 @@ const stateModelFactory = (
|
|
|
657
427
|
}
|
|
658
428
|
})
|
|
659
429
|
.actions(self => {
|
|
660
|
-
const {
|
|
661
|
-
|
|
662
|
-
type ExportSvgOpts = Parameters<typeof superRenderSvg>[0]
|
|
663
|
-
|
|
430
|
+
const { renderSvg: superRenderSvg } = self
|
|
664
431
|
return {
|
|
665
|
-
// re-runs stats and refresh whole display on reload
|
|
666
|
-
async reload() {
|
|
667
|
-
self.setError()
|
|
668
|
-
const aborter = new AbortController()
|
|
669
|
-
let stats
|
|
670
|
-
try {
|
|
671
|
-
self.setLoading(aborter)
|
|
672
|
-
stats = await getStats(self, {
|
|
673
|
-
signal: aborter.signal,
|
|
674
|
-
...self.renderProps(),
|
|
675
|
-
})
|
|
676
|
-
if (isAlive(self)) {
|
|
677
|
-
self.updateStats(stats)
|
|
678
|
-
superReload()
|
|
679
|
-
}
|
|
680
|
-
} catch (e) {
|
|
681
|
-
self.setError(e)
|
|
682
|
-
}
|
|
683
|
-
},
|
|
684
432
|
afterAttach() {
|
|
685
|
-
|
|
433
|
+
quantitativeStatsAutorun(self)
|
|
686
434
|
addDisposer(
|
|
687
435
|
self,
|
|
688
436
|
autorun(async () => {
|
|
@@ -703,20 +451,17 @@ const stateModelFactory = (
|
|
|
703
451
|
}),
|
|
704
452
|
)
|
|
705
453
|
},
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
<StatBars model={self} orientation="left" exportSVG />
|
|
714
|
-
</g>
|
|
715
|
-
</>
|
|
716
|
-
)
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* #action
|
|
457
|
+
*/
|
|
458
|
+
async renderSvg(opts: ExportSvgDisplayOptions) {
|
|
459
|
+
const { renderSvg } = await import('./renderSvg')
|
|
460
|
+
return renderSvg(self, opts, superRenderSvg)
|
|
717
461
|
},
|
|
718
462
|
}
|
|
719
463
|
})
|
|
464
|
+
}
|
|
720
465
|
|
|
721
466
|
export type WiggleDisplayStateModel = ReturnType<typeof stateModelFactory>
|
|
722
467
|
export type WiggleDisplayModel = Instance<WiggleDisplayStateModel>
|