@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.
Files changed (220) hide show
  1. package/dist/BigWigAdapter/BigWigAdapter.d.ts +2 -2
  2. package/dist/BigWigAdapter/BigWigAdapter.js +4 -3
  3. package/dist/BigWigAdapter/BigWigAdapter.js.map +1 -1
  4. package/dist/BigWigAdapter/configSchema.d.ts +20 -1
  5. package/dist/CreateMultiWiggleExtension/ConfirmDialog.d.ts +2 -2
  6. package/dist/DensityRenderer/configSchema.d.ts +33 -1
  7. package/dist/LinePlotRenderer/configSchema.d.ts +44 -1
  8. package/dist/LinearWiggleDisplay/components/SetColorDialog.d.ts +2 -2
  9. package/dist/LinearWiggleDisplay/components/Tooltip.d.ts +1 -1
  10. package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +2 -2
  11. package/dist/LinearWiggleDisplay/index.js +27 -4
  12. package/dist/LinearWiggleDisplay/index.js.map +1 -1
  13. package/dist/LinearWiggleDisplay/models/configSchema.d.ts +81 -1
  14. package/dist/LinearWiggleDisplay/models/configSchema.js +6 -67
  15. package/dist/LinearWiggleDisplay/models/configSchema.js.map +1 -1
  16. package/dist/LinearWiggleDisplay/models/model.d.ts +172 -320
  17. package/dist/LinearWiggleDisplay/models/model.js +18 -450
  18. package/dist/LinearWiggleDisplay/models/model.js.map +1 -1
  19. package/dist/LinearWiggleDisplay/models/renderSvg.d.ts +4 -0
  20. package/dist/LinearWiggleDisplay/models/renderSvg.js +21 -0
  21. package/dist/LinearWiggleDisplay/models/renderSvg.js.map +1 -0
  22. package/dist/MultiDensityRenderer/MultiDensityRenderer.js +1 -1
  23. package/dist/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -1
  24. package/dist/MultiDensityRenderer/configSchema.d.ts +33 -1
  25. package/dist/MultiLineRenderer/MultiLineRenderer.js +1 -1
  26. package/dist/MultiLineRenderer/MultiLineRenderer.js.map +1 -1
  27. package/dist/MultiLineRenderer/configSchema.d.ts +51 -1
  28. package/dist/MultiLinearWiggleDisplay/components/DraggableDialog.d.ts +2 -2
  29. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +2 -2
  30. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js +37 -38
  31. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
  32. package/dist/MultiLinearWiggleDisplay/components/Tooltip.d.ts +1 -1
  33. package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +3 -3
  34. package/dist/MultiLinearWiggleDisplay/index.js +25 -2
  35. package/dist/MultiLinearWiggleDisplay/index.js.map +1 -1
  36. package/dist/MultiLinearWiggleDisplay/models/configSchema.d.ts +87 -1
  37. package/dist/MultiLinearWiggleDisplay/models/configSchema.js +6 -66
  38. package/dist/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -1
  39. package/dist/MultiLinearWiggleDisplay/models/model.d.ts +288 -153
  40. package/dist/MultiLinearWiggleDisplay/models/model.js +334 -523
  41. package/dist/MultiLinearWiggleDisplay/models/model.js.map +1 -1
  42. package/dist/MultiLinearWiggleDisplay/models/renderSvg.d.ts +4 -0
  43. package/dist/MultiLinearWiggleDisplay/models/renderSvg.js +20 -0
  44. package/dist/MultiLinearWiggleDisplay/models/renderSvg.js.map +1 -0
  45. package/dist/MultiQuantitativeTrack/configSchema.d.ts +73 -1
  46. package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js +1 -1
  47. package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -1
  48. package/dist/MultiRowLineRenderer/configSchema.d.ts +51 -1
  49. package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +1 -1
  50. package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -1
  51. package/dist/MultiRowXYPlotRenderer/configSchema.d.ts +68 -1
  52. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +1 -1
  53. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js +2 -2
  54. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js.map +1 -1
  55. package/dist/MultiWiggleAdapter/configSchema.d.ts +18 -1
  56. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +2 -2
  57. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +1 -1
  58. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -1
  59. package/dist/MultiWiggleRendering.d.ts +2 -2
  60. package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js +3 -2
  61. package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -1
  62. package/dist/MultiXYPlotRenderer/configSchema.d.ts +65 -1
  63. package/dist/QuantitativeTrack/configSchema.d.ts +73 -1
  64. package/dist/Tooltip.d.ts +1 -1
  65. package/dist/WiggleBaseRenderer.d.ts +1 -1
  66. package/dist/WiggleRPC/MultiWiggleGetSources.d.ts +21 -0
  67. package/dist/WiggleRPC/MultiWiggleGetSources.js +51 -0
  68. package/dist/WiggleRPC/MultiWiggleGetSources.js.map +1 -0
  69. package/dist/WiggleRPC/WiggleGetGlobalQuantitativeStats.d.ts +14 -0
  70. package/dist/WiggleRPC/WiggleGetGlobalQuantitativeStats.js +37 -0
  71. package/dist/WiggleRPC/WiggleGetGlobalQuantitativeStats.js.map +1 -0
  72. package/dist/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.d.ts +20 -0
  73. package/dist/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js +54 -0
  74. package/dist/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js.map +1 -0
  75. package/dist/WiggleRPC/rpcMethods.d.ts +3 -47
  76. package/dist/WiggleRPC/rpcMethods.js +16 -117
  77. package/dist/WiggleRPC/rpcMethods.js.map +1 -1
  78. package/dist/WiggleRendering.d.ts +2 -2
  79. package/dist/XYPlotRenderer/configSchema.d.ts +65 -1
  80. package/dist/configSchema.d.ts +51 -1
  81. package/dist/index.d.ts +329 -180
  82. package/dist/index.js +2 -2
  83. package/dist/index.js.map +1 -1
  84. package/dist/shared/SetMinMaxDialog.d.ts +2 -2
  85. package/dist/shared/YScaleBar.d.ts +4 -3
  86. package/dist/shared/YScaleBar.js +1 -1
  87. package/dist/shared/YScaleBar.js.map +1 -1
  88. package/dist/shared/configShared.d.ts +85 -0
  89. package/dist/shared/configShared.js +84 -0
  90. package/dist/shared/configShared.js.map +1 -0
  91. package/dist/shared/modelShared.d.ts +576 -0
  92. package/dist/shared/modelShared.js +480 -0
  93. package/dist/shared/modelShared.js.map +1 -0
  94. package/dist/util.d.ts +9 -9
  95. package/dist/util.js +13 -22
  96. package/dist/util.js.map +1 -1
  97. package/esm/BigWigAdapter/BigWigAdapter.d.ts +2 -2
  98. package/esm/BigWigAdapter/BigWigAdapter.js +6 -4
  99. package/esm/BigWigAdapter/BigWigAdapter.js.map +1 -1
  100. package/esm/BigWigAdapter/configSchema.d.ts +20 -1
  101. package/esm/CreateMultiWiggleExtension/ConfirmDialog.d.ts +2 -2
  102. package/esm/DensityRenderer/configSchema.d.ts +33 -1
  103. package/esm/LinePlotRenderer/configSchema.d.ts +44 -1
  104. package/esm/LinearWiggleDisplay/components/SetColorDialog.d.ts +2 -2
  105. package/esm/LinearWiggleDisplay/components/Tooltip.d.ts +1 -1
  106. package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +2 -2
  107. package/esm/LinearWiggleDisplay/index.js +2 -2
  108. package/esm/LinearWiggleDisplay/index.js.map +1 -1
  109. package/esm/LinearWiggleDisplay/models/configSchema.d.ts +81 -1
  110. package/esm/LinearWiggleDisplay/models/configSchema.js +3 -67
  111. package/esm/LinearWiggleDisplay/models/configSchema.js.map +1 -1
  112. package/esm/LinearWiggleDisplay/models/model.d.ts +172 -320
  113. package/esm/LinearWiggleDisplay/models/model.js +22 -454
  114. package/esm/LinearWiggleDisplay/models/model.js.map +1 -1
  115. package/esm/LinearWiggleDisplay/models/renderSvg.d.ts +4 -0
  116. package/esm/LinearWiggleDisplay/models/renderSvg.js +14 -0
  117. package/esm/LinearWiggleDisplay/models/renderSvg.js.map +1 -0
  118. package/esm/MultiDensityRenderer/MultiDensityRenderer.js +1 -1
  119. package/esm/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -1
  120. package/esm/MultiDensityRenderer/configSchema.d.ts +33 -1
  121. package/esm/MultiLineRenderer/MultiLineRenderer.js +1 -1
  122. package/esm/MultiLineRenderer/MultiLineRenderer.js.map +1 -1
  123. package/esm/MultiLineRenderer/configSchema.d.ts +51 -1
  124. package/esm/MultiLinearWiggleDisplay/components/DraggableDialog.d.ts +2 -2
  125. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +2 -2
  126. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js +37 -38
  127. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
  128. package/esm/MultiLinearWiggleDisplay/components/Tooltip.d.ts +1 -1
  129. package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +3 -3
  130. package/esm/MultiLinearWiggleDisplay/index.js +2 -2
  131. package/esm/MultiLinearWiggleDisplay/index.js.map +1 -1
  132. package/esm/MultiLinearWiggleDisplay/models/configSchema.d.ts +87 -1
  133. package/esm/MultiLinearWiggleDisplay/models/configSchema.js +3 -66
  134. package/esm/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -1
  135. package/esm/MultiLinearWiggleDisplay/models/model.d.ts +288 -153
  136. package/esm/MultiLinearWiggleDisplay/models/model.js +336 -527
  137. package/esm/MultiLinearWiggleDisplay/models/model.js.map +1 -1
  138. package/esm/MultiLinearWiggleDisplay/models/renderSvg.d.ts +4 -0
  139. package/esm/MultiLinearWiggleDisplay/models/renderSvg.js +13 -0
  140. package/esm/MultiLinearWiggleDisplay/models/renderSvg.js.map +1 -0
  141. package/esm/MultiQuantitativeTrack/configSchema.d.ts +73 -1
  142. package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js +1 -1
  143. package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -1
  144. package/esm/MultiRowLineRenderer/configSchema.d.ts +51 -1
  145. package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +1 -1
  146. package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -1
  147. package/esm/MultiRowXYPlotRenderer/configSchema.d.ts +68 -1
  148. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +1 -1
  149. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js +3 -2
  150. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js.map +1 -1
  151. package/esm/MultiWiggleAdapter/configSchema.d.ts +18 -1
  152. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +2 -2
  153. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +1 -1
  154. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -1
  155. package/esm/MultiWiggleRendering.d.ts +2 -2
  156. package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.js +2 -1
  157. package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -1
  158. package/esm/MultiXYPlotRenderer/configSchema.d.ts +65 -1
  159. package/esm/QuantitativeTrack/configSchema.d.ts +73 -1
  160. package/esm/Tooltip.d.ts +1 -1
  161. package/esm/WiggleBaseRenderer.d.ts +1 -1
  162. package/esm/WiggleRPC/MultiWiggleGetSources.d.ts +21 -0
  163. package/esm/WiggleRPC/MultiWiggleGetSources.js +44 -0
  164. package/esm/WiggleRPC/MultiWiggleGetSources.js.map +1 -0
  165. package/esm/WiggleRPC/WiggleGetGlobalQuantitativeStats.d.ts +14 -0
  166. package/esm/WiggleRPC/WiggleGetGlobalQuantitativeStats.js +30 -0
  167. package/esm/WiggleRPC/WiggleGetGlobalQuantitativeStats.js.map +1 -0
  168. package/esm/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.d.ts +20 -0
  169. package/esm/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js +47 -0
  170. package/esm/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js.map +1 -0
  171. package/esm/WiggleRPC/rpcMethods.d.ts +3 -47
  172. package/esm/WiggleRPC/rpcMethods.js +3 -111
  173. package/esm/WiggleRPC/rpcMethods.js.map +1 -1
  174. package/esm/WiggleRendering.d.ts +2 -2
  175. package/esm/XYPlotRenderer/configSchema.d.ts +65 -1
  176. package/esm/configSchema.d.ts +51 -1
  177. package/esm/index.d.ts +329 -180
  178. package/esm/index.js +3 -3
  179. package/esm/index.js.map +1 -1
  180. package/esm/shared/SetMinMaxDialog.d.ts +2 -2
  181. package/esm/shared/YScaleBar.d.ts +4 -3
  182. package/esm/shared/YScaleBar.js +1 -1
  183. package/esm/shared/YScaleBar.js.map +1 -1
  184. package/esm/shared/configShared.d.ts +85 -0
  185. package/esm/shared/configShared.js +81 -0
  186. package/esm/shared/configShared.js.map +1 -0
  187. package/esm/shared/modelShared.d.ts +576 -0
  188. package/esm/shared/modelShared.js +454 -0
  189. package/esm/shared/modelShared.js.map +1 -0
  190. package/esm/util.d.ts +9 -9
  191. package/esm/util.js +10 -18
  192. package/esm/util.js.map +1 -1
  193. package/package.json +4 -4
  194. package/src/BigWigAdapter/BigWigAdapter.test.ts +8 -3
  195. package/src/BigWigAdapter/BigWigAdapter.ts +8 -7
  196. package/src/LinearWiggleDisplay/index.ts +2 -2
  197. package/src/LinearWiggleDisplay/models/configSchema.ts +4 -73
  198. package/src/LinearWiggleDisplay/models/model.tsx +25 -524
  199. package/src/LinearWiggleDisplay/models/renderSvg.tsx +29 -0
  200. package/src/MultiDensityRenderer/MultiDensityRenderer.ts +1 -2
  201. package/src/MultiLineRenderer/MultiLineRenderer.ts +1 -2
  202. package/src/MultiLinearWiggleDisplay/components/SetColorDialog.tsx +54 -51
  203. package/src/MultiLinearWiggleDisplay/index.ts +2 -2
  204. package/src/MultiLinearWiggleDisplay/models/configSchema.ts +4 -72
  205. package/src/MultiLinearWiggleDisplay/models/model.tsx +134 -389
  206. package/src/MultiLinearWiggleDisplay/models/renderSvg.tsx +26 -0
  207. package/src/MultiRowLineRenderer/MultiRowLineRenderer.ts +1 -2
  208. package/src/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.ts +1 -2
  209. package/src/MultiWiggleAdapter/MultiWiggleAdapter.ts +1 -1
  210. package/src/MultiWiggleAddTrackWidget/AddTrackWorkflow.tsx +1 -1
  211. package/src/MultiXYPlotRenderer/MultiXYPlotRenderer.ts +2 -2
  212. package/src/WiggleRPC/MultiWiggleGetSources.ts +68 -0
  213. package/src/WiggleRPC/WiggleGetGlobalQuantitativeStats.ts +44 -0
  214. package/src/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.ts +73 -0
  215. package/src/WiggleRPC/rpcMethods.ts +3 -170
  216. package/src/index.ts +4 -4
  217. package/src/shared/YScaleBar.tsx +4 -2
  218. package/src/shared/configShared.ts +90 -0
  219. package/src/shared/modelShared.ts +510 -0
  220. 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, when } from 'mobx'
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
- getStats,
34
- statsAutorun,
21
+ quantitativeStatsAutorun,
35
22
  YSCALEBAR_LABEL_OFFSET,
36
23
  } from '../../util'
37
24
 
38
25
  import Tooltip from '../components/Tooltip'
39
- import { StatBars } from '../components/WiggleDisplayComponent'
26
+ import SharedWiggleMixin from '../../shared/modelShared'
40
27
 
41
28
  const randomColor = () =>
42
- '#000000'.replace(/0/g, () => (~~(Math.random() * 16)).toString(16))
29
+ '#000000'.replaceAll('0', () => (~~(Math.random() * 16)).toString(16))
43
30
 
44
- // lazt components
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
- const stateModelFactory = (
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
- BaseLinearDisplay,
60
+ SharedWiggleMixin(configSchema),
73
61
  types.model({
62
+ /**
63
+ * #property
64
+ */
74
65
  type: types.literal('MultiLinearWiggleDisplay'),
75
- configuration: ConfigurationReference(configSchema),
76
- selectedRendering: types.optional(types.string, ''),
77
- resolution: types.optional(types.number, 1),
78
- fill: types.maybe(types.boolean),
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
- updateStats(stats: { scoreMin: number; scoreMax: number }) {
114
- const { scoreMin, scoreMax } = stats
115
- const EPSILON = 0.000001
116
- if (!self.stats) {
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
- get adapterTypeName() {
223
- return self.adapterConfig.type
224
- },
225
- get rendererTypeNameSimple() {
226
- return self.rendererTypeNameState || getConf(self, 'defaultRendering')
227
- },
121
+ /**
122
+ * #getter
123
+ */
228
124
  get rendererTypeName() {
229
- const name = this.rendererTypeNameSimple
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
- get rendererConfig() {
256
- const configBlob =
257
- getConf(self, ['renderers', self.rendererTypeName]) || {}
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
- // can be used to give it a "color scale" like a R heatmap, not
315
- // implemented like this yet but flag can be used for this
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
- // the multirowxy and multiline don't need to use colors on the legend
328
- // boxes since their track is drawn with the color. sort of a stylistic choice
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
- // positions multi-row below the tracklabel even if using overlap
337
- // tracklabels for everything else
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
- ...(self.hasResolution
541
- ? [
542
- {
543
- label: 'Resolution',
544
- subMenu: [
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 { reload: superReload, renderSvg: superRenderSvg } = self
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
- statsAutorun(self)
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
- async renderSvg(opts: ExportSvgOpts) {
707
- await when(() => !!self.stats && !!self.regionCannotBeRenderedText)
708
- const { offsetPx } = getContainingView(self) as LGV
709
- return (
710
- <>
711
- <g id="snpcov">{await superRenderSvg(opts)}</g>
712
- <g transform={`translate(${Math.max(-offsetPx, 0)})`}>
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>