@jbrowse/plugin-wiggle 2.16.0 → 2.17.0

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