@jbrowse/plugin-wiggle 1.7.10 → 2.0.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 (140) hide show
  1. package/dist/BigWigAdapter/BigWigAdapter.js +176 -284
  2. package/dist/BigWigAdapter/BigWigAdapter.js.map +1 -0
  3. package/dist/BigWigAdapter/configSchema.js +12 -21
  4. package/dist/BigWigAdapter/configSchema.js.map +1 -0
  5. package/dist/BigWigAdapter/index.js +8 -14
  6. package/dist/BigWigAdapter/index.js.map +1 -0
  7. package/dist/DensityRenderer/index.d.ts +1 -1
  8. package/dist/DensityRenderer/index.js +152 -133
  9. package/dist/DensityRenderer/index.js.map +1 -0
  10. package/dist/LinePlotRenderer/LinePlotRenderer.d.ts +1 -1
  11. package/dist/LinePlotRenderer/LinePlotRenderer.js +182 -168
  12. package/dist/LinePlotRenderer/LinePlotRenderer.js.map +1 -0
  13. package/dist/LinePlotRenderer/index.js +19 -33
  14. package/dist/LinePlotRenderer/index.js.map +1 -0
  15. package/dist/LinearWiggleDisplay/components/SetColorDialog.js +95 -105
  16. package/dist/LinearWiggleDisplay/components/SetColorDialog.js.map +1 -0
  17. package/dist/LinearWiggleDisplay/components/SetMinMaxDialog.js +86 -107
  18. package/dist/LinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -0
  19. package/dist/LinearWiggleDisplay/components/Tooltip.js +147 -152
  20. package/dist/LinearWiggleDisplay/components/Tooltip.js.map +1 -0
  21. package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.js +44 -50
  22. package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -0
  23. package/dist/LinearWiggleDisplay/components/YScaleBar.js +24 -31
  24. package/dist/LinearWiggleDisplay/components/YScaleBar.js.map +1 -0
  25. package/dist/LinearWiggleDisplay/index.js +13 -42
  26. package/dist/LinearWiggleDisplay/index.js.map +1 -0
  27. package/dist/LinearWiggleDisplay/models/configSchema.js +65 -69
  28. package/dist/LinearWiggleDisplay/models/configSchema.js.map +1 -0
  29. package/dist/LinearWiggleDisplay/models/model.d.ts +16 -14
  30. package/dist/LinearWiggleDisplay/models/model.js +585 -696
  31. package/dist/LinearWiggleDisplay/models/model.js.map +1 -0
  32. package/dist/WiggleBaseRenderer.d.ts +3 -3
  33. package/dist/WiggleBaseRenderer.js +119 -129
  34. package/dist/WiggleBaseRenderer.js.map +1 -0
  35. package/dist/WiggleRPC/rpcMethods.js +182 -288
  36. package/dist/WiggleRPC/rpcMethods.js.map +1 -0
  37. package/dist/WiggleRendering.js +107 -102
  38. package/dist/WiggleRendering.js.map +1 -0
  39. package/dist/XYPlotRenderer/XYPlotRenderer.d.ts +1 -1
  40. package/dist/XYPlotRenderer/XYPlotRenderer.js +250 -194
  41. package/dist/XYPlotRenderer/XYPlotRenderer.js.map +1 -0
  42. package/dist/XYPlotRenderer/index.js +30 -33
  43. package/dist/XYPlotRenderer/index.js.map +1 -0
  44. package/dist/configSchema.js +47 -74
  45. package/dist/configSchema.js.map +1 -0
  46. package/dist/index.d.ts +118 -67
  47. package/dist/index.js +167 -242
  48. package/dist/index.js.map +1 -0
  49. package/dist/util.js +112 -143
  50. package/dist/util.js.map +1 -0
  51. package/esm/BigWigAdapter/BigWigAdapter.d.ts +24 -0
  52. package/esm/BigWigAdapter/BigWigAdapter.js +62 -0
  53. package/esm/BigWigAdapter/BigWigAdapter.js.map +1 -0
  54. package/{dist/LinePlotRenderer → esm/BigWigAdapter}/configSchema.d.ts +0 -0
  55. package/esm/BigWigAdapter/configSchema.js +11 -0
  56. package/esm/BigWigAdapter/configSchema.js.map +1 -0
  57. package/esm/BigWigAdapter/index.d.ts +1 -0
  58. package/esm/BigWigAdapter/index.js +2 -0
  59. package/esm/BigWigAdapter/index.js.map +1 -0
  60. package/esm/DensityRenderer/index.d.ts +6 -0
  61. package/esm/DensityRenderer/index.js +39 -0
  62. package/esm/DensityRenderer/index.js.map +1 -0
  63. package/esm/LinePlotRenderer/LinePlotRenderer.d.ts +4 -0
  64. package/esm/LinePlotRenderer/LinePlotRenderer.js +71 -0
  65. package/esm/LinePlotRenderer/LinePlotRenderer.js.map +1 -0
  66. package/esm/LinePlotRenderer/index.d.ts +3 -0
  67. package/esm/LinePlotRenderer/index.js +12 -0
  68. package/esm/LinePlotRenderer/index.js.map +1 -0
  69. package/esm/LinearWiggleDisplay/components/SetColorDialog.d.ts +10 -0
  70. package/esm/LinearWiggleDisplay/components/SetColorDialog.js +55 -0
  71. package/esm/LinearWiggleDisplay/components/SetColorDialog.js.map +1 -0
  72. package/esm/LinearWiggleDisplay/components/SetMinMaxDialog.d.ts +11 -0
  73. package/esm/LinearWiggleDisplay/components/SetMinMaxDialog.js +46 -0
  74. package/esm/LinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -0
  75. package/esm/LinearWiggleDisplay/components/Tooltip.d.ts +24 -0
  76. package/esm/LinearWiggleDisplay/components/Tooltip.js +107 -0
  77. package/esm/LinearWiggleDisplay/components/Tooltip.js.map +1 -0
  78. package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +8 -0
  79. package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.js +29 -0
  80. package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -0
  81. package/esm/LinearWiggleDisplay/components/YScaleBar.d.ts +7 -0
  82. package/esm/LinearWiggleDisplay/components/YScaleBar.js +9 -0
  83. package/esm/LinearWiggleDisplay/components/YScaleBar.js.map +1 -0
  84. package/esm/LinearWiggleDisplay/index.d.ts +3 -0
  85. package/esm/LinearWiggleDisplay/index.js +4 -0
  86. package/esm/LinearWiggleDisplay/index.js.map +1 -0
  87. package/esm/LinearWiggleDisplay/models/configSchema.d.ts +2 -0
  88. package/esm/LinearWiggleDisplay/models/configSchema.js +64 -0
  89. package/esm/LinearWiggleDisplay/models/configSchema.js.map +1 -0
  90. package/esm/LinearWiggleDisplay/models/model.d.ts +290 -0
  91. package/esm/LinearWiggleDisplay/models/model.js +495 -0
  92. package/esm/LinearWiggleDisplay/models/model.js.map +1 -0
  93. package/esm/WiggleBaseRenderer.d.ts +55 -0
  94. package/esm/WiggleBaseRenderer.js +34 -0
  95. package/esm/WiggleBaseRenderer.js.map +1 -0
  96. package/esm/WiggleRPC/rpcMethods.d.ts +31 -0
  97. package/esm/WiggleRPC/rpcMethods.js +70 -0
  98. package/esm/WiggleRPC/rpcMethods.js.map +1 -0
  99. package/esm/WiggleRendering.d.ts +16 -0
  100. package/esm/WiggleRendering.js +40 -0
  101. package/esm/WiggleRendering.js.map +1 -0
  102. package/esm/XYPlotRenderer/XYPlotRenderer.d.ts +4 -0
  103. package/esm/XYPlotRenderer/XYPlotRenderer.js +109 -0
  104. package/esm/XYPlotRenderer/XYPlotRenderer.js.map +1 -0
  105. package/esm/XYPlotRenderer/index.d.ts +3 -0
  106. package/esm/XYPlotRenderer/index.js +23 -0
  107. package/esm/XYPlotRenderer/index.js.map +1 -0
  108. package/esm/configSchema.d.ts +2 -0
  109. package/esm/configSchema.js +46 -0
  110. package/esm/configSchema.js.map +1 -0
  111. package/esm/index.d.ts +917 -0
  112. package/esm/index.js +115 -0
  113. package/esm/index.js.map +1 -0
  114. package/esm/util.d.ts +41 -0
  115. package/esm/util.js +123 -0
  116. package/esm/util.js.map +1 -0
  117. package/package.json +23 -15
  118. package/src/DensityRenderer/DensityRenderer.test.js +5 -0
  119. package/src/DensityRenderer/index.ts +1 -1
  120. package/src/LinePlotRenderer/LinePlotRenderer.js +1 -1
  121. package/src/LinePlotRenderer/index.js +7 -1
  122. package/src/LinearWiggleDisplay/components/SetColorDialog.tsx +10 -13
  123. package/src/LinearWiggleDisplay/components/SetMinMaxDialog.tsx +13 -11
  124. package/src/LinearWiggleDisplay/components/Tooltip.tsx +4 -3
  125. package/src/LinearWiggleDisplay/components/WiggleDisplayComponent.tsx +9 -4
  126. package/src/LinearWiggleDisplay/models/model.tsx +56 -65
  127. package/src/WiggleBaseRenderer.tsx +3 -3
  128. package/src/XYPlotRenderer/XYPlotRenderer.test.js +5 -0
  129. package/src/XYPlotRenderer/XYPlotRenderer.ts +87 -40
  130. package/src/XYPlotRenderer/index.ts +19 -2
  131. package/src/configSchema.ts +0 -23
  132. package/dist/BigWigAdapter/BigWigAdapter.test.js +0 -157
  133. package/dist/DensityRenderer/DensityRenderer.test.js +0 -84
  134. package/dist/LinePlotRenderer/configSchema.js +0 -70
  135. package/dist/WiggleRendering.test.js +0 -52
  136. package/dist/XYPlotRenderer/XYPlotRenderer.test.js +0 -83
  137. package/dist/declare.d.js +0 -1
  138. package/dist/index.test.js +0 -24
  139. package/dist/util.test.js +0 -66
  140. package/src/LinePlotRenderer/configSchema.js +0 -68
package/esm/index.js ADDED
@@ -0,0 +1,115 @@
1
+ import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType';
2
+ import TrackType from '@jbrowse/core/pluggableElementTypes/TrackType';
3
+ import Plugin from '@jbrowse/core/Plugin';
4
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
5
+ import { createBaseTrackConfig, createBaseTrackModel, } from '@jbrowse/core/pluggableElementTypes/models';
6
+ import DisplayType from '@jbrowse/core/pluggableElementTypes/DisplayType';
7
+ import WiggleBaseRenderer from './WiggleBaseRenderer';
8
+ import WiggleRendering from './WiggleRendering';
9
+ import { configSchema as bigWigAdapterConfigSchema } from './BigWigAdapter';
10
+ import DensityRenderer, { configSchema as densityRendererConfigSchema, ReactComponent as DensityRendererReactComponent, } from './DensityRenderer';
11
+ import * as utils from './util';
12
+ import { configSchemaFactory as linearWiggleDisplayConfigSchemaFactory, modelFactory as linearWiggleDisplayModelFactory, ReactComponent as LinearWiggleDisplayReactComponent, YSCALEBAR_LABEL_OFFSET, } from './LinearWiggleDisplay';
13
+ import XYPlotRenderer, { configSchema as xyPlotRendererConfigSchema, ReactComponent as XYPlotRendererReactComponent, } from './XYPlotRenderer';
14
+ import LinePlotRenderer, { configSchema as linePlotRendererConfigSchema, ReactComponent as LinePlotRendererReactComponent, } from './LinePlotRenderer';
15
+ import { WiggleGetGlobalStats, WiggleGetMultiRegionStats, } from './WiggleRPC/rpcMethods';
16
+ import { getFileName, } from '@jbrowse/core/util/tracks';
17
+ export default class WigglePlugin extends Plugin {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.name = 'WigglePlugin';
21
+ this.exports = {
22
+ LinearWiggleDisplayReactComponent,
23
+ XYPlotRendererReactComponent,
24
+ XYPlotRenderer,
25
+ xyPlotRendererConfigSchema,
26
+ utils,
27
+ WiggleBaseRenderer,
28
+ linearWiggleDisplayModelFactory,
29
+ };
30
+ }
31
+ install(pluginManager) {
32
+ pluginManager.addTrackType(() => {
33
+ const configSchema = ConfigurationSchema('QuantitativeTrack', {}, { baseConfiguration: createBaseTrackConfig(pluginManager) });
34
+ return new TrackType({
35
+ name: 'QuantitativeTrack',
36
+ configSchema,
37
+ stateModel: createBaseTrackModel(pluginManager, 'QuantitativeTrack', configSchema),
38
+ });
39
+ });
40
+ pluginManager.addDisplayType(() => {
41
+ const configSchema = linearWiggleDisplayConfigSchemaFactory(pluginManager);
42
+ return new DisplayType({
43
+ name: 'LinearWiggleDisplay',
44
+ configSchema,
45
+ stateModel: linearWiggleDisplayModelFactory(pluginManager, configSchema),
46
+ trackType: 'QuantitativeTrack',
47
+ viewType: 'LinearGenomeView',
48
+ ReactComponent: LinearWiggleDisplayReactComponent,
49
+ });
50
+ });
51
+ pluginManager.addAdapterType(() => new AdapterType({
52
+ name: 'BigWigAdapter',
53
+ configSchema: bigWigAdapterConfigSchema,
54
+ adapterCapabilities: [
55
+ 'hasResolution',
56
+ 'hasLocalStats',
57
+ 'hasGlobalStats',
58
+ ],
59
+ getAdapterClass: () => import('./BigWigAdapter/BigWigAdapter').then(r => r.default),
60
+ }));
61
+ pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
62
+ return (file, index, adapterHint) => {
63
+ const regexGuess = /\.(bw|bigwig)$/i;
64
+ const adapterName = 'BigWigAdapter';
65
+ const fileName = getFileName(file);
66
+ const obj = {
67
+ type: adapterName,
68
+ bigWigLocation: file,
69
+ };
70
+ if (regexGuess.test(fileName) && !adapterHint) {
71
+ return obj;
72
+ }
73
+ else if (adapterHint === adapterName) {
74
+ return obj;
75
+ }
76
+ return adapterGuesser(file, index, adapterHint);
77
+ };
78
+ });
79
+ pluginManager.addToExtensionPoint('Core-guessTrackTypeForLocation', (trackTypeGuesser) => {
80
+ return (adapterName) => {
81
+ if (adapterName === 'BigWigAdapter') {
82
+ return 'QuantitativeTrack';
83
+ }
84
+ return trackTypeGuesser(adapterName);
85
+ };
86
+ });
87
+ pluginManager.addRendererType(() => new DensityRenderer({
88
+ name: 'DensityRenderer',
89
+ ReactComponent: DensityRendererReactComponent,
90
+ configSchema: densityRendererConfigSchema,
91
+ pluginManager,
92
+ }));
93
+ pluginManager.addRendererType(() => new LinePlotRenderer({
94
+ name: 'LinePlotRenderer',
95
+ ReactComponent: LinePlotRendererReactComponent,
96
+ configSchema: linePlotRendererConfigSchema,
97
+ pluginManager,
98
+ }));
99
+ pluginManager.addRendererType(() => new XYPlotRenderer({
100
+ name: 'XYPlotRenderer',
101
+ ReactComponent: XYPlotRendererReactComponent,
102
+ configSchema: xyPlotRendererConfigSchema,
103
+ pluginManager,
104
+ }));
105
+ pluginManager.addRpcMethod(() => new WiggleGetGlobalStats(pluginManager));
106
+ pluginManager.addRpcMethod(() => new WiggleGetMultiRegionStats(pluginManager));
107
+ }
108
+ }
109
+ export * from './util';
110
+ export { WiggleRendering };
111
+ export { WiggleBaseRenderer };
112
+ export { LinearWiggleDisplayReactComponent, linearWiggleDisplayModelFactory };
113
+ export { Tooltip } from './LinearWiggleDisplay/components/Tooltip';
114
+ export { YSCALEBAR_LABEL_OFFSET };
115
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/esm/util.d.ts ADDED
@@ -0,0 +1,41 @@
1
+ export interface ScaleOpts {
2
+ domain: number[];
3
+ range: number[];
4
+ scaleType: string;
5
+ pivotValue?: number;
6
+ inverted: boolean;
7
+ }
8
+ /**
9
+ * produces a d3-scale from arguments. applies a "nice domain" adjustment
10
+ *
11
+ * @param object - containing attributes
12
+ * - domain [min,max]
13
+ * - range [min,max]
14
+ * - bounds [min,max]
15
+ * - scaleType (linear or log)
16
+ * - pivotValue (number)
17
+ * - inverted (boolean)
18
+ */
19
+ export declare function getScale({ domain, range, scaleType, pivotValue, inverted, }: ScaleOpts): import("d3-scale").ScaleLinear<number, number> | import("d3-scale").ScaleQuantize<number>;
20
+ /**
21
+ * gets the origin for drawing the graph. for linear this is 0, for log this is arbitrarily set to log(1)==0
22
+ *
23
+ * @param scaleType -
24
+ */
25
+ export declare function getOrigin(scaleType: string): 1 | 0;
26
+ /**
27
+ * produces a "nice" domain that actually rounds down to 0 for the min
28
+ * or 0 to the max depending on if all values are positive or negative
29
+ *
30
+ * @param object - containing attributes
31
+ * - domain [min,max]
32
+ * - bounds [min,max]
33
+ * - mean
34
+ * - stddev
35
+ * - scaleType (linear or log)
36
+ */
37
+ export declare function getNiceDomain({ scaleType, domain, bounds, }: {
38
+ scaleType: string;
39
+ domain: number[];
40
+ bounds: number[];
41
+ }): [number, number];
package/esm/util.js ADDED
@@ -0,0 +1,123 @@
1
+ import { scaleLinear, scaleLog, scaleQuantize } from 'd3-scale';
2
+ /**
3
+ * produces a d3-scale from arguments. applies a "nice domain" adjustment
4
+ *
5
+ * @param object - containing attributes
6
+ * - domain [min,max]
7
+ * - range [min,max]
8
+ * - bounds [min,max]
9
+ * - scaleType (linear or log)
10
+ * - pivotValue (number)
11
+ * - inverted (boolean)
12
+ */
13
+ export function getScale({ domain = [], range = [], scaleType, pivotValue, inverted, }) {
14
+ let scale;
15
+ const [min, max] = domain;
16
+ if (min === undefined || max === undefined) {
17
+ throw new Error('invalid domain');
18
+ }
19
+ if (scaleType === 'linear') {
20
+ scale = scaleLinear();
21
+ }
22
+ else if (scaleType === 'log') {
23
+ scale = scaleLog();
24
+ scale.base(2);
25
+ }
26
+ else if (scaleType === 'quantize') {
27
+ scale = scaleQuantize();
28
+ }
29
+ else {
30
+ throw new Error('undefined scaleType');
31
+ }
32
+ scale.domain(pivotValue !== undefined ? [min, pivotValue, max] : [min, max]);
33
+ scale.nice();
34
+ const [rangeMin, rangeMax] = range;
35
+ if (rangeMin === undefined || rangeMax === undefined) {
36
+ throw new Error('invalid range');
37
+ }
38
+ scale.range(inverted ? range.slice().reverse() : range);
39
+ return scale;
40
+ }
41
+ /**
42
+ * gets the origin for drawing the graph. for linear this is 0, for log this is arbitrarily set to log(1)==0
43
+ *
44
+ * @param scaleType -
45
+ */
46
+ export function getOrigin(scaleType /* , pivot, stats */) {
47
+ // if (pivot) {
48
+ // if (pivot === 'mean') {
49
+ // return stats.scoreMean || 0
50
+ // }
51
+ // if (pivot === 'zero') {
52
+ // return 0
53
+ // }
54
+ // return parseFloat()
55
+ // }
56
+ // if (scaleType === 'z_score') {
57
+ // return stats.scoreMean || 0
58
+ // }
59
+ if (scaleType === 'log') {
60
+ return 1;
61
+ }
62
+ return 0;
63
+ }
64
+ /**
65
+ * produces a "nice" domain that actually rounds down to 0 for the min
66
+ * or 0 to the max depending on if all values are positive or negative
67
+ *
68
+ * @param object - containing attributes
69
+ * - domain [min,max]
70
+ * - bounds [min,max]
71
+ * - mean
72
+ * - stddev
73
+ * - scaleType (linear or log)
74
+ */
75
+ export function getNiceDomain({ scaleType, domain, bounds, }) {
76
+ const [minScore, maxScore] = bounds;
77
+ let [min, max] = domain;
78
+ if (scaleType === 'linear') {
79
+ if (max < 0) {
80
+ max = 0;
81
+ }
82
+ if (min > 0) {
83
+ min = 0;
84
+ }
85
+ }
86
+ if (scaleType === 'log') {
87
+ // if the min is 0, assume that it's just something
88
+ // with no read coverage and that we should ignore it in calculations
89
+ // if it's greater than 1 pin to 1 for the full range also
90
+ // otherwise, we may see bigwigs with fractional values
91
+ if (min === 0 || min > 1) {
92
+ min = 1;
93
+ }
94
+ }
95
+ if (min === undefined || max === undefined) {
96
+ throw new Error('invalid domain supplied to stats function');
97
+ }
98
+ if (minScore !== undefined && minScore !== Number.MIN_VALUE) {
99
+ min = minScore;
100
+ }
101
+ if (maxScore !== undefined && maxScore !== Number.MAX_VALUE) {
102
+ max = maxScore;
103
+ }
104
+ const getScaleType = (type) => {
105
+ if (type === 'linear') {
106
+ return scaleLinear();
107
+ }
108
+ if (type === 'log') {
109
+ const scale = scaleLog();
110
+ scale.base(2);
111
+ return scale;
112
+ }
113
+ if (type === 'quantize') {
114
+ return scaleQuantize();
115
+ }
116
+ throw new Error(`undefined scaleType ${type}`);
117
+ };
118
+ const scale = getScaleType(scaleType);
119
+ scale.domain([min, max]);
120
+ scale.nice();
121
+ return scale.domain();
122
+ }
123
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-wiggle",
3
- "version": "1.7.10",
3
+ "version": "2.0.1",
4
4
  "description": "JBrowse 2 wiggle adapters, tracks, etc.",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -20,42 +20,50 @@
20
20
  "main": "dist/index.js",
21
21
  "files": [
22
22
  "dist",
23
- "src"
23
+ "src",
24
+ "esm"
24
25
  ],
25
26
  "scripts": {
26
- "build": "babel src --root-mode upward --out-dir dist --extensions .ts,.js,.tsx,.jsx",
27
- "postbuild": "tsc --build tsconfig.build.json",
27
+ "build": "npm-run-all build:*",
28
28
  "test": "cd ../..; jest plugins/wiggle",
29
29
  "prepublishOnly": "yarn test",
30
30
  "prepack": "yarn build; yarn useDist",
31
31
  "postpack": "yarn useSrc",
32
32
  "useDist": "node ../../scripts/useDist.js",
33
- "useSrc": "node ../../scripts/useSrc.js"
33
+ "useSrc": "node ../../scripts/useSrc.js",
34
+ "prebuild": "npm run clean",
35
+ "build:esm": "tsc --build tsconfig.build.esm.json",
36
+ "build:es5": "tsc --build tsconfig.build.es5.json",
37
+ "clean": "rimraf dist esm *.tsbuildinfo"
34
38
  },
35
39
  "dependencies": {
36
40
  "@babel/runtime": "^7.17.9",
37
41
  "@gmod/bbi": "^1.0.35",
38
- "@material-ui/icons": "^4.11.2",
42
+ "@mui/icons-material": "^5.0.2",
39
43
  "@popperjs/core": "^2.11.0",
40
44
  "color": "^3.1.1",
41
- "d3-scale": "^3.2.3",
45
+ "d3-scale": "^3.0.2",
42
46
  "react-color": "^2.19.3",
43
47
  "react-d3-axis-mod": "^0.1.3",
44
48
  "react-popper": "^2.0.0"
45
49
  },
46
50
  "peerDependencies": {
47
- "@jbrowse/core": "^1.0.0",
48
- "@jbrowse/plugin-linear-genome-view": "^1.0.0",
49
- "@material-ui/core": "^4.12.2",
50
- "mobx": "^5.0.0",
51
- "mobx-react": "^6.0.0",
52
- "mobx-state-tree": "3.14.1",
51
+ "@jbrowse/core": "^2.0.0",
52
+ "@jbrowse/plugin-linear-genome-view": "^2.0.0",
53
+ "@mui/material": "^5.0.0",
54
+ "mobx": "^6.0.0",
55
+ "mobx-react": "^7.0.0",
56
+ "mobx-state-tree": "^5.0.0",
53
57
  "prop-types": "^15.0.0",
54
58
  "react": ">=16.8.0",
55
- "rxjs": "^6.0.0"
59
+ "rxjs": "^6.0.0",
60
+ "tss-react": "^3.0.0"
56
61
  },
57
62
  "publishConfig": {
58
63
  "access": "public"
59
64
  },
60
- "gitHead": "02d8c1e88e5603ea5855faed4ccb814e28071b32"
65
+ "distModule": "esm/index.js",
66
+ "srcModule": "src/index.ts",
67
+ "module": "esm/index.js",
68
+ "gitHead": "ed935bf5612af3818abdc8ef52d100d5d81d33a2"
61
69
  }
@@ -2,6 +2,11 @@ import SimpleFeature from '@jbrowse/core/util/simpleFeature'
2
2
  import { renderToAbstractCanvas } from '@jbrowse/core/util/offscreenCanvasUtils'
3
3
  import DensityRenderer, { configSchema, ReactComponent } from '.'
4
4
 
5
+ import { Image, createCanvas } from 'canvas'
6
+
7
+ global.nodeImage = Image
8
+ global.nodeCreateCanvas = createCanvas
9
+
5
10
  const pluginManager = {}
6
11
  const renderer = new DensityRenderer({
7
12
  name: 'DensityRenderer',
@@ -14,7 +14,7 @@ import WiggleBaseRenderer, {
14
14
  export { default as ReactComponent } from '../WiggleRendering'
15
15
 
16
16
  export default class DensityRenderer extends WiggleBaseRenderer {
17
- draw(
17
+ async draw(
18
18
  ctx: CanvasRenderingContext2D,
19
19
  props: RenderArgsDeserializedWithFeatures,
20
20
  ) {
@@ -5,7 +5,7 @@ import WiggleBaseRenderer from '../WiggleBaseRenderer'
5
5
  import { YSCALEBAR_LABEL_OFFSET } from '../LinearWiggleDisplay/models/model'
6
6
 
7
7
  export default class LinePlotRenderer extends WiggleBaseRenderer {
8
- draw(ctx, props) {
8
+ async draw(ctx, props) {
9
9
  const {
10
10
  features,
11
11
  regions,
@@ -6,6 +6,12 @@ export { default } from './LinePlotRenderer'
6
6
 
7
7
  export const configSchema = ConfigurationSchema(
8
8
  'LinePlotRenderer',
9
- {},
9
+ {
10
+ displayCrossHatches: {
11
+ type: 'boolean',
12
+ description: 'choose to draw cross hatches (sideways lines)',
13
+ defaultValue: false,
14
+ },
15
+ },
10
16
  { baseConfiguration: ConfigSchema, explicitlyTyped: true },
11
17
  )
@@ -5,16 +5,16 @@ import {
5
5
  DialogContent,
6
6
  DialogActions,
7
7
  DialogTitle,
8
- IconButton,
9
- Typography,
10
8
  FormControlLabel,
9
+ IconButton,
11
10
  Radio,
12
- makeStyles,
13
- } from '@material-ui/core'
14
- import CloseIcon from '@material-ui/icons/Close'
11
+ Typography,
12
+ } from '@mui/material'
13
+ import { makeStyles } from 'tss-react/mui'
14
+ import CloseIcon from '@mui/icons-material/Close'
15
15
  import { CompactPicker, Color, RGBColor } from 'react-color'
16
16
 
17
- const useStyles = makeStyles(theme => ({
17
+ const useStyles = makeStyles()(theme => ({
18
18
  closeButton: {
19
19
  position: 'absolute',
20
20
  right: theme.spacing(1),
@@ -45,7 +45,7 @@ export default function SetColorDialog({
45
45
  }
46
46
  handleClose: () => void
47
47
  }) {
48
- const classes = useStyles()
48
+ const { classes } = useStyles()
49
49
  const [posneg, setPosNeg] = useState(false)
50
50
 
51
51
  return (
@@ -85,6 +85,7 @@ export default function SetColorDialog({
85
85
  }}
86
86
  />
87
87
  <Typography>Negative color</Typography>
88
+
88
89
  <CompactPicker
89
90
  onChange={event => {
90
91
  model.setNegColor(serialize(event.rgb))
@@ -96,9 +97,7 @@ export default function SetColorDialog({
96
97
  <>
97
98
  <Typography>Overall color</Typography>
98
99
  <CompactPicker
99
- onChange={event => {
100
- model.setColor(serialize(event.rgb))
101
- }}
100
+ onChange={event => model.setColor(serialize(event.rgb))}
102
101
  />
103
102
  </>
104
103
  )}
@@ -120,9 +119,7 @@ export default function SetColorDialog({
120
119
  variant="contained"
121
120
  color="primary"
122
121
  type="submit"
123
- onClick={() => {
124
- handleClose()
125
- }}
122
+ onClick={() => handleClose()}
126
123
  >
127
124
  Submit
128
125
  </Button>
@@ -1,15 +1,17 @@
1
1
  import React, { useState } from 'react'
2
- import { makeStyles } from '@material-ui/core/styles'
3
- import Button from '@material-ui/core/Button'
4
- import TextField from '@material-ui/core/TextField'
5
- import Typography from '@material-ui/core/Typography'
6
- import Dialog from '@material-ui/core/Dialog'
7
- import DialogContent from '@material-ui/core/DialogContent'
8
- import DialogTitle from '@material-ui/core/DialogTitle'
9
- import IconButton from '@material-ui/core/IconButton'
10
- import CloseIcon from '@material-ui/icons/Close'
2
+ import {
3
+ Button,
4
+ Dialog,
5
+ DialogContent,
6
+ DialogTitle,
7
+ IconButton,
8
+ TextField,
9
+ Typography,
10
+ } from '@mui/material'
11
+ import { makeStyles } from 'tss-react/mui'
12
+ import CloseIcon from '@mui/icons-material/Close'
11
13
 
12
- const useStyles = makeStyles(theme => ({
14
+ const useStyles = makeStyles()(theme => ({
13
15
  root: {},
14
16
  closeButton: {
15
17
  position: 'absolute',
@@ -29,7 +31,7 @@ export default function SetMinMaxDlg(props: {
29
31
  }
30
32
  handleClose: () => void
31
33
  }) {
32
- const classes = useStyles()
34
+ const { classes } = useStyles()
33
35
  const { model, handleClose } = props
34
36
  const { minScore, maxScore, scaleType } = model
35
37
 
@@ -1,6 +1,7 @@
1
1
  import React, { useMemo, useState } from 'react'
2
2
  import { observer } from 'mobx-react'
3
- import { makeStyles, alpha, Portal } from '@material-ui/core'
3
+ import { alpha, Portal } from '@mui/material'
4
+ import { makeStyles } from 'tss-react/mui'
4
5
  import { Feature } from '@jbrowse/core/util/simpleFeature'
5
6
 
6
7
  // locals
@@ -18,7 +19,7 @@ function round(value: number) {
18
19
 
19
20
  const en = (n: number) => n.toLocaleString('en-US')
20
21
 
21
- const useStyles = makeStyles(theme => ({
22
+ const useStyles = makeStyles()(theme => ({
22
23
  // these styles come from
23
24
  // https://github.com/mui-org/material-ui/blob/master/packages/material-ui/src/Tooltip/Tooltip.js
24
25
  tooltip: {
@@ -99,7 +100,7 @@ const Tooltip = observer(
99
100
  const { featureUnderMouse } = model
100
101
  const [width, setWidth] = useState(0)
101
102
  const [anchorEl, setAnchorEl] = useState<HTMLDivElement | null>(null)
102
- const classes = useStyles()
103
+ const { classes } = useStyles()
103
104
 
104
105
  // must be memoized a la https://github.com/popperjs/react-popper/issues/391
105
106
  const virtElement = useMemo(
@@ -5,20 +5,25 @@ import {
5
5
  getContainingTrack,
6
6
  } from '@jbrowse/core/util'
7
7
  import { getConf } from '@jbrowse/core/configuration'
8
- import { BaseLinearDisplayComponent } from '@jbrowse/plugin-linear-genome-view'
8
+ import {
9
+ BaseLinearDisplayComponent,
10
+ LinearGenomeViewModel,
11
+ } from '@jbrowse/plugin-linear-genome-view'
9
12
  import { observer } from 'mobx-react'
10
13
  import { WiggleDisplayModel } from '../models/model'
11
14
  import YScaleBar from './YScaleBar'
12
15
 
16
+ type LGV = LinearGenomeViewModel
17
+
13
18
  const LinearWiggleDisplay = observer((props: { model: WiggleDisplayModel }) => {
14
19
  const { model } = props
15
20
  const { stats, height, needsScalebar } = model
16
21
 
17
- // @ts-ignore
18
- const { trackLabels } = getContainingView(model)
22
+ const { trackLabels } = getContainingView(model) as LGV
23
+ const track = getContainingTrack(model)
19
24
  const left =
20
25
  trackLabels === 'overlapping'
21
- ? measureText(getConf(getContainingTrack(model), 'name'), 12.8) + 100
26
+ ? measureText(getConf(track, 'name'), 12.8) + 100
22
27
  : 50
23
28
  return (
24
29
  <div>