@jbrowse/plugin-wiggle 2.13.0 → 2.14.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 (93) hide show
  1. package/dist/BigWigAdapter/BigWigAdapter.d.ts +1 -1
  2. package/dist/BigWigAdapter/BigWigAdapter.js +1 -1
  3. package/dist/CreateMultiWiggleExtension/ConfirmDialog.js +12 -4
  4. package/dist/LinearWiggleDisplay/components/SetColorDialog.js +12 -4
  5. package/dist/LinearWiggleDisplay/components/Tooltip.d.ts +1 -1
  6. package/dist/LinearWiggleDisplay/components/Tooltip.js +7 -2
  7. package/dist/LinearWiggleDisplay/models/model.d.ts +1 -1
  8. package/dist/LinearWiggleDisplay/models/model.js +10 -4
  9. package/dist/MultiDensityRenderer/MultiDensityRenderer.js +1 -8
  10. package/dist/MultiLinearWiggleDisplay/components/ScoreLegend.js +1 -2
  11. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js +3 -1
  12. package/dist/MultiLinearWiggleDisplay/components/SourcesGrid.js +22 -8
  13. package/dist/MultiLinearWiggleDisplay/components/Tooltip.js +4 -7
  14. package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.js +1 -1
  15. package/dist/MultiLinearWiggleDisplay/components/YScaleBars.js +2 -2
  16. package/dist/MultiLinearWiggleDisplay/models/model.d.ts +1 -1
  17. package/dist/MultiLinearWiggleDisplay/models/model.js +16 -6
  18. package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js +1 -1
  19. package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +1 -1
  20. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js +1 -3
  21. package/dist/MultiWiggleAddTrackWorkflow/AddTrackWorkflow.js +8 -4
  22. package/dist/MultiWiggleRendering.d.ts +4 -4
  23. package/dist/MultiWiggleRendering.js +6 -3
  24. package/dist/Tooltip.d.ts +1 -1
  25. package/dist/Tooltip.js +1 -1
  26. package/dist/WiggleBaseRenderer.d.ts +1 -1
  27. package/dist/WiggleBaseRenderer.js +1 -1
  28. package/dist/WiggleRPC/MultiWiggleGetSources.d.ts +1 -1
  29. package/dist/WiggleRPC/MultiWiggleGetSources.js +0 -1
  30. package/dist/WiggleRPC/WiggleGetGlobalQuantitativeStats.js +0 -1
  31. package/dist/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.d.ts +2 -2
  32. package/dist/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js +0 -1
  33. package/dist/WiggleRendering.d.ts +3 -3
  34. package/dist/WiggleRendering.js +3 -3
  35. package/dist/drawDensity.js +5 -3
  36. package/dist/drawLine.js +5 -3
  37. package/dist/drawXY.js +5 -3
  38. package/dist/index.d.ts +3 -3
  39. package/dist/index.js +1 -1
  40. package/dist/shared/SetMinMaxDialog.d.ts +2 -2
  41. package/dist/shared/SetMinMaxDialog.js +6 -2
  42. package/dist/shared/YScaleBar.d.ts +1 -1
  43. package/dist/shared/modelShared.d.ts +5 -5
  44. package/dist/shared/modelShared.js +15 -5
  45. package/dist/util.d.ts +2 -2
  46. package/dist/util.js +12 -16
  47. package/esm/BigWigAdapter/BigWigAdapter.d.ts +1 -1
  48. package/esm/BigWigAdapter/BigWigAdapter.js +1 -1
  49. package/esm/CreateMultiWiggleExtension/ConfirmDialog.js +12 -4
  50. package/esm/LinearWiggleDisplay/components/SetColorDialog.js +12 -4
  51. package/esm/LinearWiggleDisplay/components/Tooltip.d.ts +1 -1
  52. package/esm/LinearWiggleDisplay/components/Tooltip.js +7 -2
  53. package/esm/LinearWiggleDisplay/models/model.d.ts +1 -1
  54. package/esm/LinearWiggleDisplay/models/model.js +10 -4
  55. package/esm/MultiDensityRenderer/MultiDensityRenderer.js +1 -8
  56. package/esm/MultiLinearWiggleDisplay/components/ScoreLegend.js +1 -2
  57. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js +3 -1
  58. package/esm/MultiLinearWiggleDisplay/components/SourcesGrid.js +22 -8
  59. package/esm/MultiLinearWiggleDisplay/components/Tooltip.js +4 -7
  60. package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.js +1 -1
  61. package/esm/MultiLinearWiggleDisplay/components/YScaleBars.js +2 -2
  62. package/esm/MultiLinearWiggleDisplay/models/model.d.ts +1 -1
  63. package/esm/MultiLinearWiggleDisplay/models/model.js +16 -6
  64. package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js +1 -1
  65. package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +1 -1
  66. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js +1 -3
  67. package/esm/MultiWiggleAddTrackWorkflow/AddTrackWorkflow.js +8 -4
  68. package/esm/MultiWiggleRendering.d.ts +4 -4
  69. package/esm/MultiWiggleRendering.js +6 -3
  70. package/esm/Tooltip.d.ts +1 -1
  71. package/esm/Tooltip.js +1 -1
  72. package/esm/WiggleBaseRenderer.d.ts +1 -1
  73. package/esm/WiggleBaseRenderer.js +1 -1
  74. package/esm/WiggleRPC/MultiWiggleGetSources.d.ts +1 -1
  75. package/esm/WiggleRPC/MultiWiggleGetSources.js +0 -1
  76. package/esm/WiggleRPC/WiggleGetGlobalQuantitativeStats.js +0 -1
  77. package/esm/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.d.ts +2 -2
  78. package/esm/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js +0 -1
  79. package/esm/WiggleRendering.d.ts +3 -3
  80. package/esm/WiggleRendering.js +3 -3
  81. package/esm/drawDensity.js +5 -3
  82. package/esm/drawLine.js +5 -3
  83. package/esm/drawXY.js +5 -3
  84. package/esm/index.d.ts +3 -3
  85. package/esm/index.js +1 -1
  86. package/esm/shared/SetMinMaxDialog.d.ts +2 -2
  87. package/esm/shared/SetMinMaxDialog.js +6 -2
  88. package/esm/shared/YScaleBar.d.ts +1 -1
  89. package/esm/shared/modelShared.d.ts +5 -5
  90. package/esm/shared/modelShared.js +15 -5
  91. package/esm/util.d.ts +2 -2
  92. package/esm/util.js +12 -16
  93. package/package.json +5 -6
@@ -27,8 +27,8 @@ const mobx_react_1 = require("mobx-react");
27
27
  const react_1 = __importStar(require("react"));
28
28
  const ui_1 = require("@jbrowse/core/ui");
29
29
  const WiggleRendering = (0, mobx_react_1.observer)(function (props) {
30
- const { regions, features, bpPerPx, width, height, onMouseLeave = () => { }, onMouseMove = () => { }, onFeatureClick = () => { }, } = props;
31
- const [region] = regions;
30
+ const { regions, features, bpPerPx, width, height, onMouseLeave, onMouseMove, onFeatureClick, } = props;
31
+ const region = regions[0];
32
32
  const ref = (0, react_1.useRef)(null);
33
33
  function getFeatureUnderMouse(eventClientX) {
34
34
  // calculates feature under mouse
@@ -50,7 +50,7 @@ const WiggleRendering = (0, mobx_react_1.observer)(function (props) {
50
50
  }
51
51
  return featureUnderMouse;
52
52
  }
53
- return (react_1.default.createElement("div", { ref: ref, "data-testid": "wiggle-rendering-test", onMouseMove: event => { var _a; return onMouseMove(event, (_a = getFeatureUnderMouse(event.clientX)) === null || _a === void 0 ? void 0 : _a.id()); }, onClick: event => { var _a; return onFeatureClick(event, (_a = getFeatureUnderMouse(event.clientX)) === null || _a === void 0 ? void 0 : _a.id()); }, onMouseLeave: event => onMouseLeave(event), style: {
53
+ return (react_1.default.createElement("div", { ref: ref, "data-testid": "wiggle-rendering-test", onMouseMove: e => { var _a; return onMouseMove === null || onMouseMove === void 0 ? void 0 : onMouseMove(e, (_a = getFeatureUnderMouse(e.clientX)) === null || _a === void 0 ? void 0 : _a.id()); }, onClick: e => { var _a; return onFeatureClick === null || onFeatureClick === void 0 ? void 0 : onFeatureClick(e, (_a = getFeatureUnderMouse(e.clientX)) === null || _a === void 0 ? void 0 : _a.id()); }, onMouseLeave: e => onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave(e), style: {
54
54
  overflow: 'visible',
55
55
  position: 'relative',
56
56
  height,
@@ -9,7 +9,7 @@ const fudgeFactor = 0.3;
9
9
  const clipHeight = 2;
10
10
  function drawDensity(ctx, props) {
11
11
  const { features, regions, bpPerPx, scaleOpts, height, config } = props;
12
- const [region] = regions;
12
+ const region = regions[0];
13
13
  const pivot = (0, configuration_1.readConfObject)(config, 'bicolorPivot');
14
14
  const pivotValue = (0, configuration_1.readConfObject)(config, 'bicolorPivotValue');
15
15
  const negColor = (0, configuration_1.readConfObject)(config, 'negColor');
@@ -26,8 +26,10 @@ function drawDensity(ctx, props) {
26
26
  const cb = color === '#f0f'
27
27
  ? (_, score) => scale(score)
28
28
  : (feature, score) => (0, configuration_1.readConfObject)(config, 'color', { feature, score });
29
- const [niceMin, niceMax] = scale2.domain();
30
- let prevLeftPx = -Infinity;
29
+ const domain = scale2.domain();
30
+ const niceMin = domain[0];
31
+ const niceMax = domain[1];
32
+ let prevLeftPx = Number.NEGATIVE_INFINITY;
31
33
  let hasClipping = false;
32
34
  const reducedFeatures = [];
33
35
  for (const feature of features.values()) {
package/dist/drawLine.js CHANGED
@@ -9,7 +9,7 @@ const fudgeFactor = 0.3;
9
9
  const clipHeight = 2;
10
10
  function drawLine(ctx, props) {
11
11
  const { features, regions, bpPerPx, scaleOpts, height: unadjustedHeight, ticks: { values }, displayCrossHatches, colorCallback, config, offset = 0, } = props;
12
- const [region] = regions;
12
+ const region = regions[0];
13
13
  const width = (region.end - region.start) / bpPerPx;
14
14
  // the adjusted height takes into account YSCALEBAR_LABEL_OFFSET from the
15
15
  // wiggle display, and makes the height of the actual drawn area add
@@ -17,10 +17,12 @@ function drawLine(ctx, props) {
17
17
  const height = unadjustedHeight - offset * 2;
18
18
  const clipColor = (0, configuration_1.readConfObject)(config, 'clipColor');
19
19
  const scale = (0, util_2.getScale)({ ...scaleOpts, range: [0, height] });
20
- const [niceMin, niceMax] = scale.domain();
20
+ const domain = scale.domain();
21
+ const niceMin = domain[0];
22
+ const niceMax = domain[1];
21
23
  const toY = (n) => (0, util_1.clamp)(height - (scale(n) || 0), 0, height) + offset;
22
24
  let lastVal;
23
- let prevLeftPx = -Infinity;
25
+ let prevLeftPx = Number.NEGATIVE_INFINITY;
24
26
  const reducedFeatures = [];
25
27
  for (const feature of features.values()) {
26
28
  const [leftPx, rightPx] = (0, util_1.featureSpanPx)(feature, region, bpPerPx);
package/dist/drawXY.js CHANGED
@@ -20,7 +20,7 @@ const fudgeFactor = 0.3;
20
20
  const clipHeight = 2;
21
21
  function drawXY(ctx, props) {
22
22
  const { features, bpPerPx, regions, scaleOpts, height: unadjustedHeight, config, ticks, displayCrossHatches, offset = 0, colorCallback, } = props;
23
- const [region] = regions;
23
+ const region = regions[0];
24
24
  const width = (region.end - region.start) / bpPerPx;
25
25
  // the adjusted height takes into account YSCALEBAR_LABEL_OFFSET from the
26
26
  // wiggle display, and makes the height of the actual drawn area add
@@ -33,12 +33,14 @@ function drawXY(ctx, props) {
33
33
  const minSize = (0, configuration_1.readConfObject)(config, 'minSize');
34
34
  const scale = (0, util_2.getScale)({ ...scaleOpts, range: [0, height] });
35
35
  const originY = (0, util_2.getOrigin)(scaleOpts.scaleType);
36
- const [niceMin, niceMax] = scale.domain();
36
+ const domain = scale.domain();
37
+ const niceMin = domain[0];
38
+ const niceMax = domain[1];
37
39
  const toY = (n) => (0, util_1.clamp)(height - (scale(n) || 0), 0, height) + offset;
38
40
  const toOrigin = (n) => toY(originY) - toY(n);
39
41
  const getHeight = (n) => (filled ? toOrigin(n) : Math.max(minSize, 1));
40
42
  let hasClipping = false;
41
- let prevLeftPx = -Infinity;
43
+ let prevLeftPx = Number.NEGATIVE_INFINITY;
42
44
  const reducedFeatures = [];
43
45
  const crossingOrigin = niceMin < pivotValue && niceMax > pivotValue;
44
46
  // we handle whiskers separately to render max row, min row, and avg in three
package/dist/index.d.ts CHANGED
@@ -17,10 +17,10 @@ export default class WigglePlugin extends Plugin {
17
17
  bpPerPx: number;
18
18
  width: number;
19
19
  height: number;
20
- onMouseLeave: Function;
21
- onMouseMove: Function;
22
- onFeatureClick: Function;
23
20
  blockKey: string;
21
+ onMouseLeave?: (event: import("react").MouseEvent) => void;
22
+ onMouseMove?: (event: import("react").MouseEvent, arg?: string) => void;
23
+ onFeatureClick?: (event: import("react").MouseEvent, arg?: string) => void;
24
24
  }) => import("react").JSX.Element;
25
25
  XYPlotRenderer: typeof XYPlotRenderer;
26
26
  WiggleBaseRenderer: typeof WiggleBaseRenderer;
package/dist/index.js CHANGED
@@ -97,7 +97,7 @@ class WigglePlugin extends Plugin_1.default {
97
97
  if (regexGuess.test(fileName) && !hint) {
98
98
  return obj;
99
99
  }
100
- else if (hint === adapterName) {
100
+ if (hint === adapterName) {
101
101
  return obj;
102
102
  }
103
103
  return cb(file, index, hint);
@@ -4,8 +4,8 @@ export default function SetMinMaxDialog(props: {
4
4
  minScore: number;
5
5
  maxScore: number;
6
6
  scaleType: string;
7
- setMinScore: Function;
8
- setMaxScore: Function;
7
+ setMinScore: (arg?: number) => void;
8
+ setMaxScore: (arg?: number) => void;
9
9
  };
10
10
  handleClose: () => void;
11
11
  }): React.JSX.Element;
@@ -41,8 +41,12 @@ function SetMinMaxDialog(props) {
41
41
  react_1.default.createElement(material_1.Typography, null, "Enter min/max score: "),
42
42
  !ok ? (react_1.default.createElement(material_1.Typography, { color: "error" }, "Max is greater than or equal to min")) : null,
43
43
  !logOk ? (react_1.default.createElement(material_1.Typography, { color: "error" }, "Min score should be greater than 0 for log scale")) : null,
44
- react_1.default.createElement(material_1.TextField, { value: min, onChange: event => setMin(event.target.value), placeholder: "Enter min score" }),
45
- react_1.default.createElement(material_1.TextField, { value: max, onChange: event => setMax(event.target.value), placeholder: "Enter max score" })),
44
+ react_1.default.createElement(material_1.TextField, { value: min, onChange: event => {
45
+ setMin(event.target.value);
46
+ }, placeholder: "Enter min score" }),
47
+ react_1.default.createElement(material_1.TextField, { value: max, onChange: event => {
48
+ setMax(event.target.value);
49
+ }, placeholder: "Enter max score" })),
46
50
  react_1.default.createElement(material_1.DialogActions, null,
47
51
  react_1.default.createElement(material_1.Button, { variant: "contained", color: "primary", type: "submit", style: { marginLeft: 20 }, disabled: !ok, onClick: () => {
48
52
  model.setMinScore(min !== '' && !Number.isNaN(+min) ? +min : undefined);
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { axisPropsFromTickScale } from 'react-d3-axis-mod';
2
+ import type { axisPropsFromTickScale } from 'react-d3-axis-mod';
3
3
  type Ticks = ReturnType<typeof axisPropsFromTickScale>;
4
4
  declare const YScaleBar: ({ model, orientation, }: {
5
5
  model: {
@@ -181,7 +181,7 @@ export default function SharedWiggleMixin(configSchema: AnyConfigurationSchemaTy
181
181
  error: unknown;
182
182
  message: string | undefined;
183
183
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
184
- onHorizontalScroll?: Function;
184
+ onHorizontalScroll?: () => void;
185
185
  blockState?: Record<string, any>;
186
186
  }>;
187
187
  readonly DisplayBlurb: import("react").FC<{
@@ -407,10 +407,10 @@ export default function SharedWiggleMixin(configSchema: AnyConfigurationSchemaTy
407
407
  } & import("mobx-state-tree/dist/internal").NonEmptyObject & {
408
408
  setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
409
409
  [x: string]: any;
410
- } & import("mobx-state-tree/dist/internal").NonEmptyObject & any & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
411
- } & import("mobx-state-tree" /**
412
- * #property
413
- */).IStateTreeNode<AnyConfigurationSchemaType>);
410
+ } & import("mobx-state-tree/dist/internal" /**
411
+ * #property
412
+ */).NonEmptyObject & any & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
413
+ } & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
414
414
  } & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>;
415
415
  /**
416
416
  * #getter
@@ -411,11 +411,15 @@ function SharedWiggleMixin(configSchema) {
411
411
  subMenu: [
412
412
  {
413
413
  label: 'Finer resolution',
414
- onClick: () => self.setResolution(self.resolution * 5),
414
+ onClick: () => {
415
+ self.setResolution(self.resolution * 5);
416
+ },
415
417
  },
416
418
  {
417
419
  label: 'Coarser resolution',
418
- onClick: () => self.setResolution(self.resolution / 5),
420
+ onClick: () => {
421
+ self.setResolution(self.resolution / 5);
422
+ },
419
423
  },
420
424
  ],
421
425
  },
@@ -425,14 +429,18 @@ function SharedWiggleMixin(configSchema) {
425
429
  label: elt,
426
430
  type: 'radio',
427
431
  checked: self.summaryScoreModeSetting === elt,
428
- onClick: () => self.setSummaryScoreMode(elt),
432
+ onClick: () => {
433
+ self.setSummaryScoreMode(elt);
434
+ },
429
435
  })),
430
436
  },
431
437
  ]
432
438
  : []),
433
439
  {
434
440
  label: self.scaleType === 'log' ? 'Set linear scale' : 'Set log scale',
435
- onClick: () => self.toggleLogScale(),
441
+ onClick: () => {
442
+ self.toggleLogScale();
443
+ },
436
444
  },
437
445
  {
438
446
  label: 'Autoscale type',
@@ -449,7 +457,9 @@ function SharedWiggleMixin(configSchema) {
449
457
  label,
450
458
  type: 'radio',
451
459
  checked: self.autoscaleType === val,
452
- onClick: () => self.setAutoscale(val),
460
+ onClick: () => {
461
+ self.setAutoscale(val);
462
+ },
453
463
  })),
454
464
  },
455
465
  {
package/dist/util.d.ts CHANGED
@@ -25,7 +25,7 @@ export interface Source {
25
25
  * - pivotValue (number)
26
26
  * - inverted (boolean)
27
27
  */
28
- export declare function getScale({ domain, range, scaleType, pivotValue, inverted, }: ScaleOpts): import("d3-scale").ScaleLinear<number, number, never> | import("d3-scale").ScaleQuantize<number, never>;
28
+ export declare function getScale({ domain, range, scaleType, pivotValue, inverted, }: ScaleOpts): import("@mui/x-charts-vendor/d3-scale").ScaleLinear<number, number, never> | import("@mui/x-charts-vendor/d3-scale").ScaleLogarithmic<number, number, never> | import("@mui/x-charts-vendor/d3-scale").ScaleQuantize<number, never>;
29
29
  /**
30
30
  * gets the origin for drawing the graph. for linear this is 0, for log this is arbitrarily set to log(1)==0
31
31
  *
@@ -56,7 +56,7 @@ export declare function getQuantitativeStats(self: {
56
56
  }, opts: {
57
57
  headers?: Record<string, string>;
58
58
  signal?: AbortSignal;
59
- filters?: string[];
59
+ filters: string[];
60
60
  }): Promise<QuantitativeStats>;
61
61
  export declare function quantitativeStatsAutorun(self: {
62
62
  featureDensityStatsReady: boolean;
package/dist/util.js CHANGED
@@ -9,7 +9,7 @@ exports.quantitativeStatsAutorun = quantitativeStatsAutorun;
9
9
  exports.toP = toP;
10
10
  exports.round = round;
11
11
  exports.fillRectCtx = fillRectCtx;
12
- const d3_scale_1 = require("d3-scale");
12
+ const d3_scale_1 = require("@mui/x-charts-vendor/d3-scale");
13
13
  const mobx_1 = require("mobx");
14
14
  const util_1 = require("@jbrowse/core/util");
15
15
  const tracks_1 = require("@jbrowse/core/util/tracks");
@@ -37,8 +37,7 @@ function getScale({ domain = [], range = [], scaleType, pivotValue, inverted, })
37
37
  scale = (0, d3_scale_1.scaleLinear)();
38
38
  }
39
39
  else if (scaleType === 'log') {
40
- scale = (0, d3_scale_1.scaleLog)();
41
- scale.base(2);
40
+ scale = (0, d3_scale_1.scaleLog)().base(2);
42
41
  }
43
42
  else if (scaleType === 'quantize') {
44
43
  scale = (0, d3_scale_1.scaleQuantize)();
@@ -101,17 +100,13 @@ function getNiceDomain({ scaleType, domain, bounds, }) {
101
100
  }
102
101
  }
103
102
  if (scaleType === 'log') {
104
- // if the min is 0, assume that it's just something
105
- // with no read coverage and that we should ignore it in calculations
106
- // if it's greater than 1 pin to 1 for the full range also
107
- // otherwise, we may see bigwigs with fractional values
108
- if (min === 0 || min > 1) {
103
+ // for min>0 and max>1, set log min to 1, which works for most coverage
104
+ // types tracks. if max is not >1, might be like raw p-values so then it'll
105
+ // display negative values
106
+ if (min >= 0 && max > 1) {
109
107
  min = 1;
110
108
  }
111
109
  }
112
- if (min === undefined || max === undefined) {
113
- throw new Error('invalid domain supplied to stats function');
114
- }
115
110
  if (minScore !== undefined && minScore !== Number.MIN_VALUE) {
116
111
  min = minScore;
117
112
  }
@@ -139,7 +134,7 @@ function getNiceDomain({ scaleType, domain, bounds, }) {
139
134
  }
140
135
  async function getQuantitativeStats(self, opts) {
141
136
  const { rpcManager } = (0, util_1.getSession)(self);
142
- const nd = (0, configuration_1.getConf)(self, 'numStdDev') || 3;
137
+ const numStdDev = (0, configuration_1.getConf)(self, 'numStdDev') || 3;
143
138
  const { adapterConfig, autoscaleType } = self;
144
139
  const sessionId = (0, tracks_1.getRpcSessionId)(self);
145
140
  const params = {
@@ -161,8 +156,8 @@ async function getQuantitativeStats(self, opts) {
161
156
  return autoscaleType === 'globalsd'
162
157
  ? {
163
158
  ...results,
164
- scoreMin: scoreMin >= 0 ? 0 : scoreMean - nd * scoreStdDev,
165
- scoreMax: scoreMean + nd * scoreStdDev,
159
+ scoreMin: scoreMin >= 0 ? 0 : scoreMean - numStdDev * scoreStdDev,
160
+ scoreMax: scoreMean + numStdDev * scoreStdDev,
166
161
  }
167
162
  : results;
168
163
  }
@@ -187,8 +182,8 @@ async function getQuantitativeStats(self, opts) {
187
182
  return autoscaleType === 'localsd'
188
183
  ? {
189
184
  ...results,
190
- scoreMin: scoreMin >= 0 ? 0 : scoreMean - nd * scoreStdDev,
191
- scoreMax: scoreMean + nd * scoreStdDev,
185
+ scoreMin: scoreMin >= 0 ? 0 : scoreMean - numStdDev * scoreStdDev,
186
+ scoreMax: scoreMean + numStdDev * scoreStdDev,
192
187
  }
193
188
  : results;
194
189
  }
@@ -212,6 +207,7 @@ function quantitativeStatsAutorun(self) {
212
207
  const statsRegion = JSON.stringify(view.dynamicBlocks);
213
208
  const wiggleStats = await getQuantitativeStats(self, {
214
209
  signal: aborter.signal,
210
+ filters: [],
215
211
  ...self.renderProps(),
216
212
  });
217
213
  if ((0, mobx_state_tree_1.isAlive)(self)) {
@@ -14,7 +14,7 @@ export default class BigWigAdapter extends BaseFeatureDataAdapter {
14
14
  header: Awaited<ReturnType<BigWig["getHeader"]>>;
15
15
  }>;
16
16
  getRefNames(opts?: BaseOptions): Promise<string[]>;
17
- refIdToName(refId: number): Promise<string>;
17
+ refIdToName(refId: number): Promise<string | undefined>;
18
18
  getGlobalStats(opts?: BaseOptions): Promise<import("@jbrowse/core/util/stats").QuantitativeStats>;
19
19
  getFeatures(region: Region, opts?: WiggleOptions): import("rxjs").Observable<Feature>;
20
20
  getMultiRegionFeatureDensityStats(_regions: Region[]): Promise<{
@@ -16,7 +16,7 @@ class BigWigAdapter extends BaseFeatureDataAdapter {
16
16
  }
17
17
  async setup(opts) {
18
18
  if (!this.setupP) {
19
- this.setupP = this.setupPre(opts).catch(e => {
19
+ this.setupP = this.setupPre(opts).catch((e) => {
20
20
  this.setupP = undefined;
21
21
  throw e;
22
22
  });
@@ -5,7 +5,9 @@ import { readConfObject, } from '@jbrowse/core/configuration';
5
5
  const ConfirmDialog = ({ tracks, onClose, }) => {
6
6
  const [val, setVal] = useState(`MultiWiggle ${Date.now()}`);
7
7
  const allQuant = tracks.every(t => t.type === 'QuantitativeTrack');
8
- return (React.createElement(Dialog, { open: true, onClose: () => onClose(false), title: "Confirm multi-wiggle track create" },
8
+ return (React.createElement(Dialog, { open: true, onClose: () => {
9
+ onClose(false);
10
+ }, title: "Confirm multi-wiggle track create" },
9
11
  React.createElement(DialogContent, null,
10
12
  React.createElement(Typography, null,
11
13
  !allQuant
@@ -16,10 +18,16 @@ const ConfirmDialog = ({ tracks, onClose, }) => {
16
18
  readConfObject(track, 'name'),
17
19
  " - ",
18
20
  track.type)))),
19
- React.createElement(TextField, { value: val, onChange: event => setVal(event.target.value), helperText: "Track name" }),
21
+ React.createElement(TextField, { value: val, onChange: event => {
22
+ setVal(event.target.value);
23
+ }, helperText: "Track name" }),
20
24
  React.createElement(Typography, null, "Confirm creation of track?")),
21
25
  React.createElement(DialogActions, null,
22
- React.createElement(Button, { onClick: () => onClose(false), color: "primary" }, "Cancel"),
23
- React.createElement(Button, { onClick: () => onClose(true, { name: val }), color: "primary", variant: "contained", autoFocus: true }, "Submit"))));
26
+ React.createElement(Button, { onClick: () => {
27
+ onClose(false);
28
+ }, color: "primary" }, "Cancel"),
29
+ React.createElement(Button, { onClick: () => {
30
+ onClose(true, { name: val });
31
+ }, color: "primary", variant: "contained", autoFocus: true }, "Submit"))));
24
32
  };
25
33
  export default ConfirmDialog;
@@ -8,8 +8,12 @@ const SetColorDialog = observer(function SetColorDialog({ model, handleClose, })
8
8
  return (React.createElement(Dialog, { open: true, onClose: handleClose, title: "Set color" },
9
9
  React.createElement(DialogContent, null,
10
10
  React.createElement(Typography, null, "Select either an overall color, or the positive/negative colors. Note that density renderers only work properly with positive/negative colors"),
11
- React.createElement(FormControlLabel, { checked: !posneg, onClick: () => setPosNeg(false), control: React.createElement(Radio, null), label: "Overall color" }),
12
- React.createElement(FormControlLabel, { checked: posneg, onClick: () => setPosNeg(true), control: React.createElement(Radio, null), label: "Positive/negative color" }),
11
+ React.createElement(FormControlLabel, { checked: !posneg, onClick: () => {
12
+ setPosNeg(false);
13
+ }, control: React.createElement(Radio, null), label: "Overall color" }),
14
+ React.createElement(FormControlLabel, { checked: posneg, onClick: () => {
15
+ setPosNeg(true);
16
+ }, control: React.createElement(Radio, null), label: "Positive/negative color" }),
13
17
  posneg ? (React.createElement(React.Fragment, null,
14
18
  React.createElement(Typography, null, "Positive color"),
15
19
  React.createElement(ColorPicker, { color: model.posColor || 'black', onChange: event => {
@@ -22,13 +26,17 @@ const SetColorDialog = observer(function SetColorDialog({ model, handleClose, })
22
26
  model.setColor(undefined);
23
27
  } }))) : (React.createElement(React.Fragment, null,
24
28
  React.createElement(Typography, null, "Overall color"),
25
- React.createElement(ColorPicker, { color: model.color || 'black', onChange: event => model.setColor(event) })))),
29
+ React.createElement(ColorPicker, { color: model.color || 'black', onChange: event => {
30
+ model.setColor(event);
31
+ } })))),
26
32
  React.createElement(DialogActions, null,
27
33
  React.createElement(Button, { onClick: () => {
28
34
  model.setPosColor(undefined);
29
35
  model.setNegColor(undefined);
30
36
  model.setColor(undefined);
31
37
  }, color: "secondary", variant: "contained" }, "Restore default"),
32
- React.createElement(Button, { variant: "contained", color: "primary", type: "submit", onClick: () => handleClose() }, "Submit"))));
38
+ React.createElement(Button, { variant: "contained", color: "primary", type: "submit", onClick: () => {
39
+ handleClose();
40
+ } }, "Submit"))));
33
41
  });
34
42
  export default SetColorDialog;
@@ -4,7 +4,7 @@ import { TooltipContentsComponent } from '../../Tooltip';
4
4
  type Coord = [number, number];
5
5
  declare const WiggleTooltip: (props: {
6
6
  model: {
7
- featureUnderMouse: Feature;
7
+ featureUnderMouse?: Feature;
8
8
  };
9
9
  height: number;
10
10
  offsetMouseCoord: Coord;
@@ -7,8 +7,13 @@ const en = (n) => n.toLocaleString('en-US');
7
7
  const TooltipContents = React.forwardRef(function TooltipContents2({ feature }, ref) {
8
8
  const start = feature.get('start');
9
9
  const end = feature.get('end');
10
- const name = feature.get('refName');
11
- const loc = [name, start === end ? en(start) : `${en(start)}..${en(end)}`]
10
+ const refName = feature.get('refName');
11
+ const name = feature.get('name');
12
+ const loc = [
13
+ refName,
14
+ name,
15
+ start === end ? en(start) : `${en(start)}..${en(end)}`,
16
+ ]
12
17
  .filter(f => !!f)
13
18
  .join(':');
14
19
  return feature.get('summary') !== undefined ? (React.createElement("div", { ref: ref },
@@ -155,7 +155,7 @@ declare function stateModelFactory(pluginManager: PluginManager, configSchema: A
155
155
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree" /**
156
156
  * #getter
157
157
  */)._NotCustomized>>;
158
- onHorizontalScroll?: Function;
158
+ onHorizontalScroll?: () => void;
159
159
  blockState?: Record<string, any>;
160
160
  }>;
161
161
  readonly DisplayBlurb: React.FC<{
@@ -108,7 +108,7 @@ function stateModelFactory(pluginManager, configSchema) {
108
108
  if (self.filled) {
109
109
  return 0;
110
110
  }
111
- else if (!self.filled && self.minSize === 1) {
111
+ else if (self.minSize === 1) {
112
112
  return 1;
113
113
  }
114
114
  else {
@@ -139,7 +139,9 @@ function stateModelFactory(pluginManager, configSchema) {
139
139
  label: elt,
140
140
  type: 'radio',
141
141
  checked: self.fillSetting === idx,
142
- onClick: () => self.setFill(idx),
142
+ onClick: () => {
143
+ self.setFill(idx);
144
+ },
143
145
  })),
144
146
  },
145
147
  ]
@@ -150,7 +152,9 @@ function stateModelFactory(pluginManager, configSchema) {
150
152
  type: 'checkbox',
151
153
  label: 'Draw cross hatches',
152
154
  checked: self.displayCrossHatchesSetting,
153
- onClick: () => self.toggleCrossHatches(),
155
+ onClick: () => {
156
+ self.toggleCrossHatches();
157
+ },
154
158
  },
155
159
  ]
156
160
  : []),
@@ -162,7 +166,9 @@ function stateModelFactory(pluginManager, configSchema) {
162
166
  label: key,
163
167
  type: 'radio',
164
168
  checked: self.rendererTypeNameSimple === key,
165
- onClick: () => self.setRendererType(key),
169
+ onClick: () => {
170
+ self.setRendererType(key);
171
+ },
166
172
  })),
167
173
  },
168
174
  ]
@@ -4,11 +4,9 @@ import { drawDensity } from '../drawDensity';
4
4
  export default class MultiXYPlotRenderer extends WiggleBaseRenderer {
5
5
  // @ts-expect-error
6
6
  async draw(ctx, props) {
7
- const { bpPerPx, sources, regions, features } = props;
8
- const [region] = regions;
7
+ const { sources, features } = props;
9
8
  const groups = groupBy(features.values(), f => f.get('source'));
10
9
  const height = props.height / sources.length;
11
- const width = (region.end - region.start) / bpPerPx;
12
10
  let feats = [];
13
11
  ctx.save();
14
12
  sources.forEach(source => {
@@ -18,11 +16,6 @@ export default class MultiXYPlotRenderer extends WiggleBaseRenderer {
18
16
  features,
19
17
  height,
20
18
  });
21
- ctx.strokeStyle = 'rgba(200,200,200,0.8)';
22
- ctx.beginPath();
23
- ctx.moveTo(0, height);
24
- ctx.lineTo(width, height);
25
- ctx.stroke();
26
19
  ctx.translate(0, height);
27
20
  feats = feats.concat(reducedFeatures);
28
21
  });
@@ -5,8 +5,7 @@ import RectBg from './RectBg';
5
5
  const ScoreLegend = observer(({ model }) => {
6
6
  const { ticks, scaleType } = model;
7
7
  const { width } = getContainingView(model);
8
- const legend = `[${ticks === null || ticks === void 0 ? void 0 : ticks.values[0]}-${ticks === null || ticks === void 0 ? void 0 : ticks.values[1]}]` +
9
- (scaleType === 'log' ? ' (log scale)' : '');
8
+ const legend = `[${ticks === null || ticks === void 0 ? void 0 : ticks.values[0]}-${ticks === null || ticks === void 0 ? void 0 : ticks.values[1]}]${scaleType === 'log' ? ' (log scale)' : ''}`;
10
9
  const len = measureText(legend, 14);
11
10
  const padding = 25;
12
11
  const xpos = width - len - padding;
@@ -18,7 +18,9 @@ export default function SetColorDialog({ model, handleClose, }) {
18
18
  const [showTips, setShowTips] = useLocalStorage('multiwiggle-showTips', true);
19
19
  return (React.createElement(DraggableDialog, { open: true, onClose: handleClose, maxWidth: "xl", title: 'Multi-wiggle color/arrangement editor' },
20
20
  React.createElement(DialogContent, { className: classes.content },
21
- React.createElement(Button, { variant: "contained", style: { float: 'right' }, onClick: () => setShowTips(!showTips) }, showTips ? 'Hide tips' : 'Show tips'),
21
+ React.createElement(Button, { variant: "contained", style: { float: 'right' }, onClick: () => {
22
+ setShowTips(!showTips);
23
+ } }, showTips ? 'Hide tips' : 'Show tips'),
22
24
  React.createElement("br", null),
23
25
  showTips ? (React.createElement(React.Fragment, null,
24
26
  "Helpful tips",
@@ -30,17 +30,27 @@ function SourcesGrid({ rows, onChange, showTips, }) {
30
30
  field: null,
31
31
  });
32
32
  return (React.createElement("div", null,
33
- React.createElement(Button, { disabled: !selected.length, onClick: event => setAnchorEl(event.currentTarget) }, "Change color of selected items"),
34
- React.createElement(Button, { onClick: () => onChange(moveUp([...rows], selected)), disabled: !selected.length },
33
+ React.createElement(Button, { disabled: !selected.length, onClick: event => {
34
+ setAnchorEl(event.currentTarget);
35
+ } }, "Change color of selected items"),
36
+ React.createElement(Button, { onClick: () => {
37
+ onChange(moveUp([...rows], selected));
38
+ }, disabled: !selected.length },
35
39
  React.createElement(KeyboardArrowUpIcon, null),
36
40
  showTips ? 'Move selected items up' : null),
37
- React.createElement(Button, { onClick: () => onChange(moveDown([...rows], selected)), disabled: !selected.length },
41
+ React.createElement(Button, { onClick: () => {
42
+ onChange(moveDown([...rows], selected));
43
+ }, disabled: !selected.length },
38
44
  React.createElement(KeyboardArrowDownIcon, null),
39
45
  showTips ? 'Move selected items down' : null),
40
- React.createElement(Button, { onClick: () => onChange(moveUp([...rows], selected, rows.length)), disabled: !selected.length },
46
+ React.createElement(Button, { onClick: () => {
47
+ onChange(moveUp([...rows], selected, rows.length));
48
+ }, disabled: !selected.length },
41
49
  React.createElement(KeyboardDoubleArrowUpIcon, null),
42
50
  showTips ? 'Move selected items to top' : null),
43
- React.createElement(Button, { onClick: () => onChange(moveDown([...rows], selected, rows.length)), disabled: !selected.length },
51
+ React.createElement(Button, { onClick: () => {
52
+ onChange(moveDown([...rows], selected, rows.length));
53
+ }, disabled: !selected.length },
44
54
  React.createElement(KeyboardDoubleArrowDownIcon, null),
45
55
  showTips ? 'Move selected items to bottom' : null),
46
56
  React.createElement(ColorPopover, { anchorEl: anchorEl, color: widgetColor, onChange: c => {
@@ -52,9 +62,13 @@ function SourcesGrid({ rows, onChange, showTips, }) {
52
62
  }
53
63
  });
54
64
  onChange([...rows]);
55
- }, onClose: () => setAnchorEl(null) }),
65
+ }, onClose: () => {
66
+ setAnchorEl(null);
67
+ } }),
56
68
  React.createElement("div", { style: { height: 400, width: '100%' } },
57
- React.createElement(DataGrid, { getRowId: row => row.name, checkboxSelection: true, disableRowSelectionOnClick: true, onRowSelectionModelChange: arg => setSelected(arg), rows: rows, rowHeight: 25, columnHeaderHeight: 33, columns: [
69
+ React.createElement(DataGrid, { getRowId: row => row.name, checkboxSelection: true, disableRowSelectionOnClick: true, onRowSelectionModelChange: arg => {
70
+ setSelected(arg);
71
+ }, rows: rows, rowHeight: 25, columnHeaderHeight: 33, columns: [
58
72
  {
59
73
  field: 'color',
60
74
  headerName: 'Color',
@@ -89,7 +103,7 @@ function SourcesGrid({ rows, onChange, showTips, }) {
89
103
  // thing since we are controlling sort instead of the default data
90
104
  // grid sort anyways
91
105
  const idx = (currSort.idx + 1) % 2;
92
- const field = (sort === null || sort === void 0 ? void 0 : sort.field) || currSort.field;
106
+ const field = sort.field || currSort.field;
93
107
  setCurrSort({ idx, field });
94
108
  onChange(field
95
109
  ? [...rows].sort((a, b) => {
@@ -22,13 +22,10 @@ const TooltipContents = React.forwardRef(function TooltipContents2({ model, feat
22
22
  React.createElement("th", null, "color"),
23
23
  React.createElement("th", null, "source"),
24
24
  React.createElement("th", null, "score"))),
25
- React.createElement("tbody", null, Object.entries(sources).map(([source, data]) => {
26
- var _a;
27
- return (React.createElement("tr", { key: source },
28
- React.createElement("td", { style: { background: (_a = obj[source]) === null || _a === void 0 ? void 0 : _a.color } }, " "),
29
- React.createElement("td", null, source),
30
- React.createElement("td", null, toP(data.score))));
31
- })))) : (React.createElement("span", null,
25
+ React.createElement("tbody", null, Object.entries(sources).map(([source, data]) => (React.createElement("tr", { key: source },
26
+ React.createElement("td", { style: { background: obj[source].color } }, " "),
27
+ React.createElement("td", null, source),
28
+ React.createElement("td", null, toP(data.score)))))))) : (React.createElement("span", null,
32
29
  source,
33
30
  ' ',
34
31
  summary