@jbrowse/plugin-wiggle 2.5.0 → 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.
Files changed (151) hide show
  1. package/dist/BigWigAdapter/BigWigAdapter.js +2 -1
  2. package/dist/BigWigAdapter/BigWigAdapter.js.map +1 -1
  3. package/dist/CreateMultiWiggleExtension/ConfirmDialog.d.ts +2 -1
  4. package/dist/LinearWiggleDisplay/components/SetColorDialog.d.ts +2 -1
  5. package/dist/LinearWiggleDisplay/components/Tooltip.d.ts +1 -1
  6. package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +2 -1
  7. package/dist/LinearWiggleDisplay/index.js +27 -4
  8. package/dist/LinearWiggleDisplay/index.js.map +1 -1
  9. package/dist/LinearWiggleDisplay/models/configSchema.d.ts +18 -35
  10. package/dist/LinearWiggleDisplay/models/configSchema.js +6 -67
  11. package/dist/LinearWiggleDisplay/models/configSchema.js.map +1 -1
  12. package/dist/LinearWiggleDisplay/models/model.d.ts +147 -342
  13. package/dist/LinearWiggleDisplay/models/model.js +17 -432
  14. package/dist/LinearWiggleDisplay/models/model.js.map +1 -1
  15. package/dist/LinearWiggleDisplay/models/renderSvg.d.ts +4 -0
  16. package/dist/LinearWiggleDisplay/models/renderSvg.js +21 -0
  17. package/dist/LinearWiggleDisplay/models/renderSvg.js.map +1 -0
  18. package/dist/MultiDensityRenderer/MultiDensityRenderer.js +1 -1
  19. package/dist/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -1
  20. package/dist/MultiLineRenderer/MultiLineRenderer.js +1 -1
  21. package/dist/MultiLineRenderer/MultiLineRenderer.js.map +1 -1
  22. package/dist/MultiLinearWiggleDisplay/components/DraggableDialog.d.ts +2 -1
  23. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +2 -1
  24. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js +2 -2
  25. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
  26. package/dist/MultiLinearWiggleDisplay/components/Tooltip.d.ts +1 -1
  27. package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +3 -2
  28. package/dist/MultiLinearWiggleDisplay/index.js +25 -2
  29. package/dist/MultiLinearWiggleDisplay/index.js.map +1 -1
  30. package/dist/MultiLinearWiggleDisplay/models/configSchema.d.ts +24 -44
  31. package/dist/MultiLinearWiggleDisplay/models/configSchema.js +6 -66
  32. package/dist/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -1
  33. package/dist/MultiLinearWiggleDisplay/models/model.d.ts +263 -175
  34. package/dist/MultiLinearWiggleDisplay/models/model.js +335 -508
  35. package/dist/MultiLinearWiggleDisplay/models/model.js.map +1 -1
  36. package/dist/MultiLinearWiggleDisplay/models/renderSvg.d.ts +4 -0
  37. package/dist/MultiLinearWiggleDisplay/models/renderSvg.js +20 -0
  38. package/dist/MultiLinearWiggleDisplay/models/renderSvg.js.map +1 -0
  39. package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js +1 -1
  40. package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -1
  41. package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +1 -1
  42. package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -1
  43. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +2 -1
  44. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +1 -1
  45. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -1
  46. package/dist/MultiWiggleRendering.d.ts +2 -1
  47. package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js +3 -2
  48. package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -1
  49. package/dist/Tooltip.d.ts +1 -1
  50. package/dist/WiggleBaseRenderer.d.ts +1 -1
  51. package/dist/WiggleRendering.d.ts +2 -1
  52. package/dist/index.d.ts +222 -198
  53. package/dist/shared/SetMinMaxDialog.d.ts +2 -1
  54. package/dist/shared/YScaleBar.d.ts +4 -2
  55. package/dist/shared/YScaleBar.js +1 -1
  56. package/dist/shared/YScaleBar.js.map +1 -1
  57. package/dist/shared/configShared.d.ts +85 -0
  58. package/dist/shared/configShared.js +84 -0
  59. package/dist/shared/configShared.js.map +1 -0
  60. package/dist/shared/modelShared.d.ts +576 -0
  61. package/dist/shared/modelShared.js +480 -0
  62. package/dist/shared/modelShared.js.map +1 -0
  63. package/dist/util.d.ts +0 -3
  64. package/dist/util.js +1 -11
  65. package/dist/util.js.map +1 -1
  66. package/esm/BigWigAdapter/BigWigAdapter.js +2 -1
  67. package/esm/BigWigAdapter/BigWigAdapter.js.map +1 -1
  68. package/esm/CreateMultiWiggleExtension/ConfirmDialog.d.ts +2 -1
  69. package/esm/LinearWiggleDisplay/components/SetColorDialog.d.ts +2 -1
  70. package/esm/LinearWiggleDisplay/components/Tooltip.d.ts +1 -1
  71. package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +2 -1
  72. package/esm/LinearWiggleDisplay/index.js +2 -2
  73. package/esm/LinearWiggleDisplay/index.js.map +1 -1
  74. package/esm/LinearWiggleDisplay/models/configSchema.d.ts +18 -35
  75. package/esm/LinearWiggleDisplay/models/configSchema.js +3 -67
  76. package/esm/LinearWiggleDisplay/models/configSchema.js.map +1 -1
  77. package/esm/LinearWiggleDisplay/models/model.d.ts +147 -342
  78. package/esm/LinearWiggleDisplay/models/model.js +20 -435
  79. package/esm/LinearWiggleDisplay/models/model.js.map +1 -1
  80. package/esm/LinearWiggleDisplay/models/renderSvg.d.ts +4 -0
  81. package/esm/LinearWiggleDisplay/models/renderSvg.js +14 -0
  82. package/esm/LinearWiggleDisplay/models/renderSvg.js.map +1 -0
  83. package/esm/MultiDensityRenderer/MultiDensityRenderer.js +1 -1
  84. package/esm/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -1
  85. package/esm/MultiLineRenderer/MultiLineRenderer.js +1 -1
  86. package/esm/MultiLineRenderer/MultiLineRenderer.js.map +1 -1
  87. package/esm/MultiLinearWiggleDisplay/components/DraggableDialog.d.ts +2 -1
  88. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +2 -1
  89. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js +1 -1
  90. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
  91. package/esm/MultiLinearWiggleDisplay/components/Tooltip.d.ts +1 -1
  92. package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +3 -2
  93. package/esm/MultiLinearWiggleDisplay/index.js +2 -2
  94. package/esm/MultiLinearWiggleDisplay/index.js.map +1 -1
  95. package/esm/MultiLinearWiggleDisplay/models/configSchema.d.ts +24 -44
  96. package/esm/MultiLinearWiggleDisplay/models/configSchema.js +3 -66
  97. package/esm/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -1
  98. package/esm/MultiLinearWiggleDisplay/models/model.d.ts +263 -175
  99. package/esm/MultiLinearWiggleDisplay/models/model.js +337 -512
  100. package/esm/MultiLinearWiggleDisplay/models/model.js.map +1 -1
  101. package/esm/MultiLinearWiggleDisplay/models/renderSvg.d.ts +4 -0
  102. package/esm/MultiLinearWiggleDisplay/models/renderSvg.js +13 -0
  103. package/esm/MultiLinearWiggleDisplay/models/renderSvg.js.map +1 -0
  104. package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js +1 -1
  105. package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -1
  106. package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +1 -1
  107. package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -1
  108. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +2 -1
  109. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +1 -1
  110. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -1
  111. package/esm/MultiWiggleRendering.d.ts +2 -1
  112. package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.js +2 -1
  113. package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -1
  114. package/esm/Tooltip.d.ts +1 -1
  115. package/esm/WiggleBaseRenderer.d.ts +1 -1
  116. package/esm/WiggleRendering.d.ts +2 -1
  117. package/esm/index.d.ts +222 -198
  118. package/esm/shared/SetMinMaxDialog.d.ts +2 -1
  119. package/esm/shared/YScaleBar.d.ts +4 -2
  120. package/esm/shared/YScaleBar.js +1 -1
  121. package/esm/shared/YScaleBar.js.map +1 -1
  122. package/esm/shared/configShared.d.ts +85 -0
  123. package/esm/shared/configShared.js +81 -0
  124. package/esm/shared/configShared.js.map +1 -0
  125. package/esm/shared/modelShared.d.ts +576 -0
  126. package/esm/shared/modelShared.js +454 -0
  127. package/esm/shared/modelShared.js.map +1 -0
  128. package/esm/util.d.ts +0 -3
  129. package/esm/util.js +0 -9
  130. package/esm/util.js.map +1 -1
  131. package/package.json +3 -3
  132. package/src/BigWigAdapter/BigWigAdapter.ts +2 -4
  133. package/src/LinearWiggleDisplay/index.ts +2 -2
  134. package/src/LinearWiggleDisplay/models/configSchema.ts +4 -73
  135. package/src/LinearWiggleDisplay/models/model.tsx +22 -503
  136. package/src/LinearWiggleDisplay/models/renderSvg.tsx +29 -0
  137. package/src/MultiDensityRenderer/MultiDensityRenderer.ts +1 -2
  138. package/src/MultiLineRenderer/MultiLineRenderer.ts +1 -2
  139. package/src/MultiLinearWiggleDisplay/components/SetColorDialog.tsx +1 -1
  140. package/src/MultiLinearWiggleDisplay/index.ts +2 -2
  141. package/src/MultiLinearWiggleDisplay/models/configSchema.ts +4 -72
  142. package/src/MultiLinearWiggleDisplay/models/model.tsx +132 -371
  143. package/src/MultiLinearWiggleDisplay/models/renderSvg.tsx +26 -0
  144. package/src/MultiRowLineRenderer/MultiRowLineRenderer.ts +1 -2
  145. package/src/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.ts +1 -2
  146. package/src/MultiWiggleAddTrackWidget/AddTrackWorkflow.tsx +1 -1
  147. package/src/MultiXYPlotRenderer/MultiXYPlotRenderer.ts +2 -2
  148. package/src/shared/YScaleBar.tsx +4 -2
  149. package/src/shared/configShared.ts +90 -0
  150. package/src/shared/modelShared.ts +510 -0
  151. package/src/util.ts +1 -10
@@ -1,37 +1,25 @@
1
1
  import React, { lazy } from 'react'
2
2
  import {
3
- ConfigurationReference,
4
3
  AnyConfigurationSchemaType,
5
4
  getConf,
6
- readConfObject,
7
5
  } from '@jbrowse/core/configuration'
8
- import {
9
- getEnv,
10
- getSession,
11
- getContainingView,
12
- isSelectionContainer,
13
- Feature,
14
- } from '@jbrowse/core/util'
15
- import {
16
- BaseLinearDisplay,
17
- LinearGenomeViewModel,
18
- } from '@jbrowse/plugin-linear-genome-view'
19
- import { when } from 'mobx'
6
+ import { getSession } from '@jbrowse/core/util'
20
7
  import { types, Instance } from 'mobx-state-tree'
21
8
  import PluginManager from '@jbrowse/core/PluginManager'
22
-
23
9
  import { axisPropsFromTickScale } from 'react-d3-axis-mod'
10
+ import { ExportSvgDisplayOptions } from '@jbrowse/plugin-linear-genome-view'
11
+
12
+ // locals
24
13
  import {
25
- getNiceDomain,
26
14
  getScale,
27
15
  quantitativeStatsAutorun,
28
16
  YSCALEBAR_LABEL_OFFSET,
29
17
  } from '../../util'
30
18
 
31
19
  import Tooltip from '../components/Tooltip'
32
- import YScaleBar from '../../shared/YScaleBar'
20
+ import SharedWiggleMixin from '../../shared/modelShared'
33
21
 
34
- const SetMinMaxDlg = lazy(() => import('../../shared/SetMinMaxDialog'))
22
+ // lazies
35
23
  const SetColorDlg = lazy(() => import('../components/SetColorDialog'))
36
24
 
37
25
  // using a map because it preserves order
@@ -41,11 +29,9 @@ const rendererTypes = new Map([
41
29
  ['line', 'LinePlotRenderer'],
42
30
  ])
43
31
 
44
- type LGV = LinearGenomeViewModel
45
-
46
32
  /**
47
33
  * #stateModel LinearWiggleDisplay
48
- * Extends `BaseLinearDisplay`
34
+ * extends `SharedWiggleMixin`
49
35
  */
50
36
  function stateModelFactory(
51
37
  pluginManager: PluginManager,
@@ -54,411 +40,36 @@ function stateModelFactory(
54
40
  return types
55
41
  .compose(
56
42
  'LinearWiggleDisplay',
57
- BaseLinearDisplay,
43
+ SharedWiggleMixin(configSchema),
58
44
  types.model({
59
45
  /**
60
46
  * #property
61
47
  */
62
48
  type: types.literal('LinearWiggleDisplay'),
63
- /**
64
- * #property
65
- */
66
- configuration: ConfigurationReference(configSchema),
67
- /**
68
- * #property
69
- */
70
- selectedRendering: types.optional(types.string, ''),
71
- /**
72
- * #property
73
- */
74
- resolution: types.optional(types.number, 1),
75
- /**
76
- * #property
77
- */
78
- fill: types.maybe(types.boolean),
79
- /**
80
- * #property
81
- */
82
- minSize: types.maybe(types.number),
83
- /**
84
- * #property
85
- */
86
- color: types.maybe(types.string),
87
- /**
88
- * #property
89
- */
90
- posColor: types.maybe(types.string),
91
- /**
92
- * #property
93
- */
94
- negColor: types.maybe(types.string),
95
- /**
96
- * #property
97
- */
98
- summaryScoreMode: types.maybe(types.string),
99
- /**
100
- * #property
101
- */
102
- rendererTypeNameState: types.maybe(types.string),
103
- /**
104
- * #property
105
- */
106
- scale: types.maybe(types.string),
107
- /**
108
- * #property
109
- */
110
- autoscale: types.maybe(types.string),
111
- /**
112
- * #property
113
- */
114
- displayCrossHatches: types.maybe(types.boolean),
115
- /**
116
- * #property
117
- */
118
- constraints: types.optional(
119
- types.model({
120
- max: types.maybe(types.number),
121
- min: types.maybe(types.number),
122
- }),
123
- {},
124
- ),
125
49
  }),
126
50
  )
127
- .volatile(() => ({
128
- message: undefined as undefined | string,
129
- stats: undefined as { scoreMin: number; scoreMax: number } | undefined,
130
- statsFetchInProgress: undefined as undefined | AbortController,
131
- }))
132
- .actions(self => ({
133
- /**
134
- * #action
135
- */
136
- updateQuantitativeStats(stats: { scoreMin: number; scoreMax: number }) {
137
- const { scoreMin, scoreMax } = stats
138
- const EPSILON = 0.000001
139
- if (!self.stats) {
140
- self.stats = { scoreMin, scoreMax }
141
- } else if (
142
- Math.abs(self.stats.scoreMax - scoreMax) > EPSILON ||
143
- Math.abs(self.stats.scoreMin - scoreMin) > EPSILON
144
- ) {
145
- self.stats = { scoreMin, scoreMax }
146
- }
147
- },
148
- /**
149
- * #action
150
- */
151
- setColor(color?: string) {
152
- self.color = color
153
- },
154
- /**
155
- * #action
156
- */
157
- setPosColor(color?: string) {
158
- self.posColor = color
159
- },
160
- /**
161
- * #action
162
- */
163
- setNegColor(color?: string) {
164
- self.negColor = color
165
- },
166
51
 
167
- /**
168
- * #action
169
- */
170
- setLoading(aborter: AbortController) {
171
- const { statsFetchInProgress: statsFetch } = self
172
- if (statsFetch !== undefined && !statsFetch.signal.aborted) {
173
- statsFetch.abort()
174
- }
175
- self.statsFetchInProgress = aborter
176
- },
177
-
178
- /**
179
- * #action
180
- * this overrides the BaseLinearDisplayModel to avoid popping up a
181
- * feature detail display, but still sets the feature selection on the
182
- * model so listeners can detect a click
183
- */
184
- selectFeature(feature: Feature) {
185
- const session = getSession(self)
186
- if (isSelectionContainer(session)) {
187
- session.setSelection(feature)
188
- }
189
- },
190
-
191
- /**
192
- * #action
193
- */
194
- setResolution(res: number) {
195
- self.resolution = res
196
- },
197
-
198
- /**
199
- * #action
200
- */
201
- setFill(fill: number) {
202
- if (fill === 0) {
203
- self.fill = true
204
- self.minSize = 0
205
- } else if (fill === 1) {
206
- self.fill = false
207
- self.minSize = 1
208
- } else if (fill === 2) {
209
- self.fill = false
210
- self.minSize = 2
211
- }
212
- },
213
-
214
- /**
215
- * #action
216
- */
217
- toggleLogScale() {
218
- self.scale = self.scale === 'log' ? 'linear' : 'log'
219
- },
220
-
221
- /**
222
- * #action
223
- */
224
- setScaleType(scale?: string) {
225
- self.scale = scale
226
- },
227
-
228
- /**
229
- * #action
230
- */
231
- setSummaryScoreMode(val: string) {
232
- self.summaryScoreMode = val
233
- },
234
-
235
- /**
236
- * #action
237
- */
238
- setAutoscale(val: string) {
239
- self.autoscale = val
240
- },
241
-
242
- /**
243
- * #action
244
- */
245
- setMaxScore(val?: number) {
246
- self.constraints.max = val
247
- },
248
-
249
- /**
250
- * #action
251
- */
252
- setRendererType(val: string) {
253
- self.rendererTypeNameState = val
254
- },
255
-
256
- /**
257
- * #action
258
- */
259
- setMinScore(val?: number) {
260
- self.constraints.min = val
261
- },
262
-
263
- /**
264
- * #action
265
- */
266
- toggleCrossHatches() {
267
- self.displayCrossHatches = !self.displayCrossHatches
268
- },
269
-
270
- /**
271
- * #action
272
- */
273
- setCrossHatches(cross: boolean) {
274
- self.displayCrossHatches = cross
275
- },
276
- }))
277
52
  .views(self => ({
278
53
  /**
279
54
  * #getter
280
55
  */
281
56
  get TooltipComponent() {
282
- return Tooltip as unknown as React.FC
283
- },
284
-
285
- /**
286
- * #getter
287
- */
288
- get adapterTypeName() {
289
- return self.adapterConfig.type
290
- },
291
-
292
- /**
293
- * #getter
294
- */
295
- get rendererTypeNameSimple() {
296
- return self.rendererTypeNameState || getConf(self, 'defaultRendering')
57
+ return Tooltip as React.FC
297
58
  },
298
59
 
299
60
  /**
300
61
  * #getter
301
62
  */
302
63
  get rendererTypeName() {
303
- const name = this.rendererTypeNameSimple
64
+ const name = self.rendererTypeNameSimple
304
65
  const rendererType = rendererTypes.get(name)
305
66
  if (!rendererType) {
306
67
  throw new Error(`unknown renderer ${name}`)
307
68
  }
308
69
  return rendererType
309
70
  },
310
-
311
- /**
312
- * #getter
313
- * subclasses can define these, as snpcoverage track does
314
- */
315
- get filters() {
316
- return undefined
317
- },
318
-
319
- /**
320
- * #getter
321
- */
322
- get scaleType() {
323
- return self.scale || getConf(self, 'scaleType')
324
- },
325
-
326
- /**
327
- * #getter
328
- */
329
- get maxScore() {
330
- return self.constraints.max ?? getConf(self, 'maxScore')
331
- },
332
-
333
- /**
334
- * #getter
335
- */
336
- get minScore() {
337
- return self.constraints.min ?? getConf(self, 'minScore')
338
- },
339
71
  }))
340
- .views(self => ({
341
- /**
342
- * #getter
343
- */
344
- get rendererConfig() {
345
- const {
346
- color,
347
- displayCrossHatches,
348
- fill,
349
- minSize,
350
- negColor,
351
- posColor,
352
- summaryScoreMode,
353
- scaleType,
354
- rendererTypeName,
355
- } = self
356
- const configBlob = getConf(self, ['renderers', rendererTypeName]) || {}
357
- return self.rendererType.configSchema.create(
358
- {
359
- ...configBlob,
360
- ...(scaleType ? { scaleType } : {}),
361
- ...(fill !== undefined ? { filled: fill } : {}),
362
- ...(displayCrossHatches !== undefined
363
- ? { displayCrossHatches }
364
- : {}),
365
- ...(summaryScoreMode !== undefined ? { summaryScoreMode } : {}),
366
- ...(color !== undefined ? { color } : {}),
367
- ...(negColor !== undefined ? { negColor } : {}),
368
- ...(posColor !== undefined ? { posColor } : {}),
369
- ...(minSize !== undefined ? { minSize } : {}),
370
- },
371
- getEnv(self),
372
- )
373
- },
374
- }))
375
- .views(self => {
376
- let oldDomain: [number, number] = [0, 0]
377
- return {
378
- /**
379
- * #getter
380
- */
381
- get filled() {
382
- return readConfObject(self.rendererConfig, 'filled')
383
- },
384
- /**
385
- * #getter
386
- */
387
- get summaryScoreModeSetting() {
388
- return readConfObject(self.rendererConfig, 'summaryScoreMode')
389
- },
390
- /**
391
- * #getter
392
- */
393
- get domain() {
394
- const { stats, scaleType, minScore, maxScore } = self
395
- if (!stats) {
396
- return undefined
397
- }
398
72
 
399
- const ret = getNiceDomain({
400
- domain: [stats.scoreMin, stats.scoreMax],
401
- bounds: [minScore, maxScore],
402
- scaleType,
403
- })
404
-
405
- // avoid weird scalebar if log value and empty region displayed
406
- if (scaleType === 'log' && ret[1] === Number.MIN_VALUE) {
407
- return [0, Number.MIN_VALUE]
408
- }
409
-
410
- // avoid returning a new object if it matches the old value
411
- if (JSON.stringify(oldDomain) !== JSON.stringify(ret)) {
412
- oldDomain = ret
413
- }
414
-
415
- return oldDomain
416
- },
417
-
418
- /**
419
- * #getter
420
- */
421
- get needsScalebar() {
422
- return (
423
- self.rendererTypeName === 'XYPlotRenderer' ||
424
- self.rendererTypeName === 'LinePlotRenderer'
425
- )
426
- },
427
- /**
428
- * #getter
429
- */
430
- get scaleOpts() {
431
- return {
432
- domain: this.domain,
433
- stats: self.stats,
434
- autoscaleType: this.autoscaleType,
435
- scaleType: self.scaleType,
436
- inverted: getConf(self, 'inverted'),
437
- }
438
- },
439
-
440
- /**
441
- * #getter
442
- */
443
- get canHaveFill() {
444
- return self.rendererTypeName === 'XYPlotRenderer'
445
- },
446
-
447
- /**
448
- * #getter
449
- */
450
- get autoscaleType() {
451
- return self.autoscale ?? getConf(self, 'autoscale')
452
- },
453
-
454
- /**
455
- * #getter
456
- */
457
- get displayCrossHatchesSetting() {
458
- return readConfObject(self.rendererConfig, 'displayCrossHatches')
459
- },
460
- }
461
- })
462
73
  .views(self => ({
463
74
  /**
464
75
  * #getter
@@ -482,14 +93,6 @@ function stateModelFactory(
482
93
  ? { ...ticks, values: domain }
483
94
  : ticks
484
95
  },
485
-
486
- /**
487
- * #getter
488
- */
489
- get adapterCapabilities() {
490
- const type = self.adapterTypeName
491
- return pluginManager.getAdapterType(type).adapterCapabilities
492
- },
493
96
  }))
494
97
  .views(self => {
495
98
  const { renderProps: superRenderProps } = self
@@ -514,20 +117,14 @@ function stateModelFactory(
514
117
  filters,
515
118
  }
516
119
  },
517
- /**
518
- * #getter
519
- */
520
- get hasResolution() {
521
- return self.adapterCapabilities.includes('hasResolution')
522
- },
523
120
 
524
121
  /**
525
122
  * #getter
526
123
  */
527
- get hasGlobalStats() {
528
- return self.adapterCapabilities.includes('hasGlobalStats')
124
+ get needsScalebar() {
125
+ const { rendererTypeName: type } = self
126
+ return type === 'XYPlotRenderer' || type === 'LinePlotRenderer'
529
127
  },
530
-
531
128
  /**
532
129
  * #getter
533
130
  */
@@ -552,32 +149,10 @@ function stateModelFactory(
552
149
  trackMenuItems() {
553
150
  return [
554
151
  ...superTrackMenuItems(),
555
- ...(self.hasResolution
556
- ? [
557
- {
558
- label: 'Resolution',
559
- subMenu: [
560
- {
561
- label: 'Finer resolution',
562
- onClick: () => self.setResolution(self.resolution * 5),
563
- },
564
- {
565
- label: 'Coarser resolution',
566
- onClick: () => self.setResolution(self.resolution / 5),
567
- },
568
- ],
569
- },
570
- {
571
- label: 'Summary score mode',
572
- subMenu: ['min', 'max', 'avg', 'whiskers'].map(elt => ({
573
- label: elt,
574
- type: 'radio',
575
- checked: self.summaryScoreModeSetting === elt,
576
- onClick: () => self.setSummaryScoreMode(elt),
577
- })),
578
- },
579
- ]
580
- : []),
152
+ {
153
+ label: 'Score',
154
+ subMenu: self.scoreTrackMenuItems(),
155
+ },
581
156
 
582
157
  ...(self.canHaveFill
583
158
  ? [
@@ -594,11 +169,6 @@ function stateModelFactory(
594
169
  },
595
170
  ]
596
171
  : []),
597
- {
598
- label:
599
- self.scaleType === 'log' ? 'Set linear scale' : 'Set log scale',
600
- onClick: () => self.toggleLogScale(),
601
- },
602
172
 
603
173
  ...(self.needsScalebar
604
174
  ? [
@@ -624,33 +194,7 @@ function stateModelFactory(
624
194
  },
625
195
  ]
626
196
  : []),
627
- {
628
- label: 'Autoscale type',
629
- subMenu: [
630
- ['local', 'Local'],
631
- ...(self.hasGlobalStats
632
- ? [
633
- ['global', 'Global'],
634
- ['globalsd', 'Global ± 3σ'],
635
- ]
636
- : []),
637
- ['localsd', 'Local ± 3σ'],
638
- ].map(([val, label]) => ({
639
- label,
640
- type: 'radio',
641
- checked: self.autoscaleType === val,
642
- onClick: () => self.setAutoscale(val),
643
- })),
644
- },
645
- {
646
- label: 'Set min/max score',
647
- onClick: () => {
648
- getSession(self).queueDialog(handleClose => [
649
- SetMinMaxDlg,
650
- { model: self, handleClose },
651
- ])
652
- },
653
- },
197
+
654
198
  {
655
199
  label: 'Set color',
656
200
  onClick: () => {
@@ -665,43 +209,18 @@ function stateModelFactory(
665
209
  }
666
210
  })
667
211
  .actions(self => {
668
- const { reload: superReload, renderSvg: superRenderSvg } = self
669
-
670
- type ExportSvgOpts = Parameters<typeof superRenderSvg>[0]
212
+ const { renderSvg: superRenderSvg } = self
671
213
 
672
214
  return {
673
- /**
674
- * #action
675
- * re-runs stats and refresh whole display on reload
676
- */
677
- async reload() {
678
- self.setError()
679
- superReload()
680
- },
681
-
682
215
  afterAttach() {
683
216
  quantitativeStatsAutorun(self)
684
217
  },
685
218
  /**
686
219
  * #action
687
220
  */
688
- async renderSvg(opts: ExportSvgOpts) {
689
- await when(() => !!self.stats && !!self.regionCannotBeRenderedText)
690
- const { needsScalebar, stats } = self
691
- const { offsetPx } = getContainingView(self) as LGV
692
- return (
693
- <>
694
- <g id="snpcov">{await superRenderSvg(opts)}</g>
695
- {needsScalebar && stats ? (
696
- <g transform={`translate(${Math.max(-offsetPx, 0)})`}>
697
- <YScaleBar
698
- model={self as WiggleDisplayModel}
699
- orientation="left"
700
- />
701
- </g>
702
- ) : null}
703
- </>
704
- )
221
+ async renderSvg(opts: ExportSvgDisplayOptions) {
222
+ const { renderSvg } = await import('./renderSvg')
223
+ return renderSvg(self, opts, superRenderSvg)
705
224
  },
706
225
  }
707
226
  })
@@ -0,0 +1,29 @@
1
+ import React from 'react'
2
+ import { getContainingView } from '@jbrowse/core/util'
3
+ import { when } from 'mobx'
4
+ import YScaleBar from '../../shared/YScaleBar'
5
+ import {
6
+ ExportSvgDisplayOptions,
7
+ LinearGenomeViewModel,
8
+ } from '@jbrowse/plugin-linear-genome-view'
9
+ import { WiggleDisplayModel } from './model'
10
+
11
+ export async function renderSvg(
12
+ self: WiggleDisplayModel,
13
+ opts: ExportSvgDisplayOptions,
14
+ superRenderSvg: (opts: ExportSvgDisplayOptions) => Promise<React.ReactNode>,
15
+ ) {
16
+ await when(() => !!self.stats && !!self.regionCannotBeRenderedText)
17
+ const { needsScalebar, stats } = self
18
+ const { offsetPx } = getContainingView(self) as LinearGenomeViewModel
19
+ return (
20
+ <>
21
+ <g id="snpcov">{await superRenderSvg(opts)}</g>
22
+ {needsScalebar && stats ? (
23
+ <g transform={`translate(${Math.max(-offsetPx, 0)})`}>
24
+ <YScaleBar model={self} orientation="left" />
25
+ </g>
26
+ ) : null}
27
+ </>
28
+ )
29
+ }
@@ -1,5 +1,4 @@
1
- import { Feature } from '@jbrowse/core/util'
2
- import { groupBy } from '../util'
1
+ import { groupBy, Feature } from '@jbrowse/core/util'
3
2
  import WiggleBaseRenderer, {
4
3
  MultiRenderArgsDeserialized as MultiArgs,
5
4
  } from '../WiggleBaseRenderer'
@@ -1,6 +1,5 @@
1
- import { Feature } from '@jbrowse/core/util'
1
+ import { groupBy, Feature } from '@jbrowse/core/util'
2
2
  import { drawLine } from '../drawxy'
3
- import { groupBy } from '../util'
4
3
 
5
4
  import WiggleBaseRenderer, {
6
5
  MultiRenderArgsDeserialized as MultiArgs,
@@ -13,7 +13,6 @@ import clone from 'clone'
13
13
  // locals
14
14
  import DraggableDialog from './DraggableDialog'
15
15
  import ColorPicker, { ColorPopover } from '@jbrowse/core/ui/ColorPicker'
16
- import { UriLink } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail'
17
16
  import { moveUp, moveDown } from './util'
18
17
  import { Source } from '../../util'
19
18
 
@@ -22,6 +21,7 @@ import KeyboardDoubleArrowUpIcon from '@mui/icons-material/KeyboardDoubleArrowUp
22
21
  import KeyboardDoubleArrowDownIcon from '@mui/icons-material/KeyboardDoubleArrowDown'
23
22
  import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'
24
23
  import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp'
24
+ import UriLink from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/UriLink'
25
25
 
26
26
  const useStyles = makeStyles()({
27
27
  content: {