@genome-spy/core 0.40.0 → 0.42.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.
- package/dist/bundle/index--cKb-dKG.js +615 -0
- package/dist/bundle/{index-gn8bhQ8w.js → index-d7k3kkin.js} +365 -366
- package/dist/bundle/index.es.js +4260 -3928
- package/dist/bundle/index.js +115 -80
- package/dist/schema.json +254 -52
- package/dist/src/data/sources/dynamic/axisGenomeSource.js +1 -1
- package/dist/src/data/sources/dynamic/axisTickSource.js +3 -3
- package/dist/src/data/sources/dynamic/bamSource.d.ts +3 -21
- package/dist/src/data/sources/dynamic/bamSource.d.ts.map +1 -1
- package/dist/src/data/sources/dynamic/bamSource.js +38 -55
- package/dist/src/data/sources/dynamic/bigBedSource.d.ts +2 -38
- package/dist/src/data/sources/dynamic/bigBedSource.d.ts.map +1 -1
- package/dist/src/data/sources/dynamic/bigBedSource.js +14 -71
- package/dist/src/data/sources/dynamic/bigWigSource.d.ts +4 -42
- package/dist/src/data/sources/dynamic/bigWigSource.d.ts.map +1 -1
- package/dist/src/data/sources/dynamic/bigWigSource.js +23 -60
- package/dist/src/data/sources/dynamic/gff3Source.d.ts.map +1 -1
- package/dist/src/data/sources/dynamic/gff3Source.js +1 -0
- package/dist/src/data/sources/dynamic/indexedFastaSource.d.ts +2 -20
- package/dist/src/data/sources/dynamic/indexedFastaSource.d.ts.map +1 -1
- package/dist/src/data/sources/dynamic/indexedFastaSource.js +23 -41
- package/dist/src/data/sources/dynamic/singleAxisLazySource.d.ts +23 -4
- package/dist/src/data/sources/dynamic/singleAxisLazySource.d.ts.map +1 -1
- package/dist/src/data/sources/dynamic/singleAxisLazySource.js +29 -4
- package/dist/src/data/sources/dynamic/singleAxisWindowedSource.d.ts +60 -0
- package/dist/src/data/sources/dynamic/singleAxisWindowedSource.d.ts.map +1 -0
- package/dist/src/data/sources/dynamic/singleAxisWindowedSource.js +152 -0
- package/dist/src/data/sources/dynamic/tabixSource.d.ts +6 -40
- package/dist/src/data/sources/dynamic/tabixSource.d.ts.map +1 -1
- package/dist/src/data/sources/dynamic/tabixSource.js +29 -78
- package/dist/src/data/transforms/regexFold.d.ts.map +1 -1
- package/dist/src/data/transforms/regexFold.js +8 -0
- package/dist/src/data/transforms/regexFold.test.js +28 -0
- package/dist/src/encoder/accessor.js +4 -2
- package/dist/src/genomeSpy.d.ts +16 -0
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +119 -8
- package/dist/src/gl/link.vertex.glsl.js +1 -1
- package/dist/src/gl/point.common.glsl.js +2 -0
- package/dist/src/gl/point.fragment.glsl.js +1 -1
- package/dist/src/gl/point.vertex.glsl.js +1 -1
- package/dist/src/gl/rect.vertex.glsl.js +1 -1
- package/dist/src/gl/rule.common.glsl.js +2 -0
- package/dist/src/gl/rule.fragment.glsl.js +1 -1
- package/dist/src/gl/rule.vertex.glsl.js +1 -1
- package/dist/src/gl/text.common.glsl.js +2 -0
- package/dist/src/gl/text.fragment.glsl.js +1 -1
- package/dist/src/gl/text.vertex.glsl.js +1 -1
- package/dist/src/gl/webGLHelper.d.ts +6 -21
- package/dist/src/gl/webGLHelper.d.ts.map +1 -1
- package/dist/src/gl/webGLHelper.js +7 -38
- package/dist/src/img/90-ring-with-bg.svg +1 -0
- package/dist/src/img/README.md +5 -0
- package/dist/src/marks/link.d.ts +7 -0
- package/dist/src/marks/link.d.ts.map +1 -1
- package/dist/src/marks/link.js +99 -50
- package/dist/src/marks/mark.d.ts +34 -0
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +83 -1
- package/dist/src/marks/pointMark.d.ts.map +1 -1
- package/dist/src/marks/pointMark.js +21 -9
- package/dist/src/marks/rectMark.d.ts +1 -2
- package/dist/src/marks/rectMark.d.ts.map +1 -1
- package/dist/src/marks/rectMark.js +28 -17
- package/dist/src/marks/rule.d.ts.map +1 -1
- package/dist/src/marks/rule.js +17 -6
- package/dist/src/marks/text.d.ts.map +1 -1
- package/dist/src/marks/text.js +32 -18
- package/dist/src/paramBroker.d.ts +30 -0
- package/dist/src/paramBroker.d.ts.map +1 -0
- package/dist/src/paramBroker.js +102 -0
- package/dist/src/spec/data.d.ts +28 -13
- package/dist/src/spec/mark.d.ts +27 -26
- package/dist/src/spec/view.d.ts +2 -1
- package/dist/src/styles/genome-spy.css.d.ts +1 -1
- package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
- package/dist/src/styles/genome-spy.css.js +33 -4
- package/dist/src/styles/genome-spy.scss +40 -4
- package/dist/src/types/viewContext.d.ts +11 -0
- package/dist/src/utils/binnedIndex.d.ts +2 -0
- package/dist/src/utils/binnedIndex.d.ts.map +1 -1
- package/dist/src/utils/binnedIndex.js +59 -10
- package/dist/src/utils/binnedIndex.test.js +46 -0
- package/dist/src/utils/expression.d.ts +12 -2
- package/dist/src/utils/expression.d.ts.map +1 -1
- package/dist/src/utils/expression.js +68 -9
- package/dist/src/utils/linearstep.d.ts +7 -0
- package/dist/src/utils/linearstep.d.ts.map +1 -0
- package/dist/src/utils/linearstep.js +10 -0
- package/dist/src/view/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView.js +2 -0
- package/dist/src/view/layerView.d.ts.map +1 -1
- package/dist/src/view/layerView.js +2 -0
- package/dist/src/view/unitView.d.ts +0 -6
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +2 -9
- package/dist/src/view/view.d.ts +6 -0
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +17 -0
- package/package.json +3 -3
- package/dist/bundle/index-Cbz74kpR.js +0 -638
- package/dist/src/data/sources/dynamic/windowedMixin.d.ts +0 -32
- package/dist/src/data/sources/dynamic/windowedMixin.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/windowedMixin.js +0 -53
|
@@ -15,6 +15,8 @@ const MIN_INTEGER = -(2 ** 31);
|
|
|
15
15
|
* A binned index for (overlapping) ranges that are sorted by their start position.
|
|
16
16
|
* Each indexed range is associated with respective vertex indices.
|
|
17
17
|
*
|
|
18
|
+
* The indexing scheme is somewhat similar to Tabix (https://academic.oup.com/bioinformatics/article/27/5/718/262743).
|
|
19
|
+
*
|
|
18
20
|
* @param {number} size Number of bins
|
|
19
21
|
* @param {[number, number]} domain Domain of positions
|
|
20
22
|
* @param {(datum: T) => number} accessor Accessor for range's start position
|
|
@@ -27,13 +29,15 @@ export function createBinningRangeIndexer(
|
|
|
27
29
|
accessor,
|
|
28
30
|
accessor2 = accessor
|
|
29
31
|
) {
|
|
30
|
-
const startIndices = new
|
|
32
|
+
const startIndices = new Array(size);
|
|
31
33
|
startIndices.fill(MAX_INTEGER);
|
|
32
34
|
|
|
33
35
|
let lastIndex = MIN_INTEGER;
|
|
36
|
+
let lastStart = -Infinity;
|
|
34
37
|
let unordered = false;
|
|
35
38
|
|
|
36
|
-
const endIndices = new
|
|
39
|
+
const endIndices = new Array(size);
|
|
40
|
+
endIndices.fill(0);
|
|
37
41
|
|
|
38
42
|
const start = domain[0];
|
|
39
43
|
const domainLength = domain[1] - domain[0];
|
|
@@ -63,17 +67,33 @@ export function createBinningRangeIndexer(
|
|
|
63
67
|
* @param {number} endVertexIndex
|
|
64
68
|
*/
|
|
65
69
|
function binningIndexer(datum, startVertexIndex, endVertexIndex) {
|
|
70
|
+
if (unordered) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
66
74
|
if (startVertexIndex > lastIndex) {
|
|
67
75
|
lastIndex = startVertexIndex;
|
|
68
|
-
} else
|
|
76
|
+
} else {
|
|
69
77
|
unordered = true;
|
|
70
78
|
// TODO: Contextual info like view path
|
|
71
79
|
console.debug(
|
|
72
80
|
"Items are not ordered properly. Disabling binned index."
|
|
73
81
|
);
|
|
82
|
+
return;
|
|
74
83
|
}
|
|
75
84
|
|
|
76
85
|
const value = accessor(datum);
|
|
86
|
+
|
|
87
|
+
if (value < lastStart) {
|
|
88
|
+
unordered = true;
|
|
89
|
+
// TODO: Contextual info like view path
|
|
90
|
+
console.debug(
|
|
91
|
+
"Items are not ordered properly. Disabling binned index."
|
|
92
|
+
);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
lastStart = value;
|
|
96
|
+
|
|
77
97
|
const bin = getBin(value, false);
|
|
78
98
|
|
|
79
99
|
if (startIndices[bin] > startVertexIndex) {
|
|
@@ -93,18 +113,42 @@ export function createBinningRangeIndexer(
|
|
|
93
113
|
* @param {number} endVertexIndex
|
|
94
114
|
*/
|
|
95
115
|
function binningRangeIndexer(datum, startVertexIndex, endVertexIndex) {
|
|
116
|
+
if (unordered) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
|
|
96
120
|
if (startVertexIndex > lastIndex) {
|
|
97
121
|
lastIndex = startVertexIndex;
|
|
98
|
-
} else
|
|
122
|
+
} else {
|
|
99
123
|
unordered = true;
|
|
100
124
|
// TODO: Contextual info like view path
|
|
101
125
|
console.debug(
|
|
102
|
-
"Items are not ordered properly. Disabling binned index."
|
|
126
|
+
"Items (vertices) are not ordered properly. Disabling binned index."
|
|
103
127
|
);
|
|
128
|
+
return;
|
|
104
129
|
}
|
|
105
130
|
|
|
106
131
|
const start = accessor(datum);
|
|
107
132
|
const end = accessor2(datum);
|
|
133
|
+
|
|
134
|
+
if (start < lastStart) {
|
|
135
|
+
unordered = true;
|
|
136
|
+
// TODO: Contextual info like view path
|
|
137
|
+
console.debug(
|
|
138
|
+
"Items are not ordered properly. Disabling binned index."
|
|
139
|
+
);
|
|
140
|
+
return;
|
|
141
|
+
} else if (end < start) {
|
|
142
|
+
unordered = true;
|
|
143
|
+
// TODO: Contextual info like view path
|
|
144
|
+
console.debug(
|
|
145
|
+
"End index is less than start index. Disabling binned index. Datum: ",
|
|
146
|
+
datum
|
|
147
|
+
);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
lastStart = start;
|
|
151
|
+
|
|
108
152
|
const startBin = getBin(start, false);
|
|
109
153
|
const endBin = getBin(end, true);
|
|
110
154
|
|
|
@@ -135,7 +179,16 @@ export function createBinningRangeIndexer(
|
|
|
135
179
|
return arr;
|
|
136
180
|
};
|
|
137
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Finalizes the index and returns a lookup function.
|
|
184
|
+
*
|
|
185
|
+
* @returns {Lookup}
|
|
186
|
+
*/
|
|
138
187
|
const getIndex = () => {
|
|
188
|
+
if (unordered) {
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
|
|
139
192
|
for (let i = 1; i < endIndices.length; i++) {
|
|
140
193
|
if (endIndices[i] < endIndices[i - 1]) {
|
|
141
194
|
endIndices[i] = endIndices[i - 1];
|
|
@@ -159,9 +212,5 @@ export function createBinningRangeIndexer(
|
|
|
159
212
|
binningIndexer.getIndex = getIndex;
|
|
160
213
|
binningRangeIndexer.getIndex = getIndex;
|
|
161
214
|
|
|
162
|
-
|
|
163
|
-
return undefined;
|
|
164
|
-
} else {
|
|
165
|
-
return accessor == accessor2 ? binningIndexer : binningRangeIndexer;
|
|
166
|
-
}
|
|
215
|
+
return accessor == accessor2 ? binningIndexer : binningRangeIndexer;
|
|
167
216
|
}
|
|
@@ -152,4 +152,50 @@ describe("Binning Indexer", () => {
|
|
|
152
152
|
expect(index(115, 116)).toEqual([4, 8]);
|
|
153
153
|
expect(index(135, 145)).toEqual([6, 10]);
|
|
154
154
|
});
|
|
155
|
+
|
|
156
|
+
test("Unordered ranges disable the index", () => {
|
|
157
|
+
const items = [
|
|
158
|
+
[10, 30],
|
|
159
|
+
[25, 50],
|
|
160
|
+
|
|
161
|
+
[112, 139],
|
|
162
|
+
[102, 129], // <- Unordered!
|
|
163
|
+
[121, 149],
|
|
164
|
+
];
|
|
165
|
+
const indexer = createBinningRangeIndexer(
|
|
166
|
+
100,
|
|
167
|
+
[0, 1000],
|
|
168
|
+
(x) => x[0],
|
|
169
|
+
(x) => x[1]
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
items.forEach((x, i) => indexer(x, i * 2, (i + 1) * 2));
|
|
173
|
+
|
|
174
|
+
const index = indexer.getIndex();
|
|
175
|
+
|
|
176
|
+
expect(index).toBeUndefined();
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
test("Inverted ranges disable the index", () => {
|
|
180
|
+
const items = [
|
|
181
|
+
[10, 30],
|
|
182
|
+
[25, 50],
|
|
183
|
+
|
|
184
|
+
[102, 129],
|
|
185
|
+
[139, 112], // <- Inverted!
|
|
186
|
+
[121, 149],
|
|
187
|
+
];
|
|
188
|
+
const indexer = createBinningRangeIndexer(
|
|
189
|
+
100,
|
|
190
|
+
[0, 1000],
|
|
191
|
+
(x) => x[0],
|
|
192
|
+
(x) => x[1]
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
items.forEach((x, i) => indexer(x, i * 2, (i + 1) * 2));
|
|
196
|
+
|
|
197
|
+
const index = indexer.getIndex();
|
|
198
|
+
|
|
199
|
+
expect(index).toBeUndefined();
|
|
200
|
+
});
|
|
155
201
|
});
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
+
* @typedef { object } ExpressionProps
|
|
3
|
+
* @prop { string[] } fields
|
|
4
|
+
* @prop { string[] } globals
|
|
5
|
+
* @prop { string } code
|
|
6
|
+
*
|
|
7
|
+
* @typedef { ((x: object) => any) & ExpressionProps } ExpressionFunction
|
|
2
8
|
*
|
|
3
9
|
* @param {string} expr
|
|
10
|
+
* @returns {ExpressionFunction}
|
|
4
11
|
*/
|
|
5
|
-
export default function createFunction(expr: string, globalObject?: {}):
|
|
6
|
-
|
|
12
|
+
export default function createFunction(expr: string, globalObject?: {}): ExpressionFunction;
|
|
13
|
+
export type ExpressionProps = {
|
|
7
14
|
fields: string[];
|
|
15
|
+
globals: string[];
|
|
16
|
+
code: string;
|
|
8
17
|
};
|
|
18
|
+
export type ExpressionFunction = ((x: object) => any) & ExpressionProps;
|
|
9
19
|
//# sourceMappingURL=expression.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/utils/expression.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/utils/expression.js"],"names":[],"mappings":"AAyDA;;;;;;;;;;GAUG;AACH,6CAHW,MAAM,sBACJ,kBAAkB,CAyB9B;;YAhCU,MAAM,EAAE;aACR,MAAM,EAAE;UACR,MAAM;;sCAEE,MAAM,KAAK,GAAG"}
|
|
@@ -1,17 +1,72 @@
|
|
|
1
|
-
import { parseExpression, codegenExpression } from "vega-expression";
|
|
1
|
+
import { parseExpression, codegenExpression, functions } from "vega-expression";
|
|
2
|
+
import {
|
|
3
|
+
isArray,
|
|
4
|
+
isBoolean,
|
|
5
|
+
isNumber,
|
|
6
|
+
isObject,
|
|
7
|
+
isRegExp,
|
|
8
|
+
isString,
|
|
9
|
+
lerp,
|
|
10
|
+
} from "vega-util";
|
|
11
|
+
import smoothstep from "./smoothstep.js";
|
|
12
|
+
import clamp from "./clamp.js";
|
|
13
|
+
import linearstep from "./linearstep.js";
|
|
2
14
|
|
|
3
15
|
/**
|
|
16
|
+
* Some bits are adapted from https://github.com/vega/vega/blob/main/packages/vega-functions/src/codegen.js
|
|
17
|
+
*/
|
|
18
|
+
const functionContext = {
|
|
19
|
+
clamp,
|
|
20
|
+
isArray,
|
|
21
|
+
isBoolean,
|
|
22
|
+
isDefined(/** @type {any} */ _) {
|
|
23
|
+
return _ !== undefined;
|
|
24
|
+
},
|
|
25
|
+
isNumber,
|
|
26
|
+
isObject,
|
|
27
|
+
isRegExp,
|
|
28
|
+
isString,
|
|
29
|
+
isValid(/** @type {any} */ _) {
|
|
30
|
+
// eslint-disable-next-line no-self-compare
|
|
31
|
+
return _ != null && _ === _;
|
|
32
|
+
},
|
|
33
|
+
lerp,
|
|
34
|
+
linearstep,
|
|
35
|
+
smoothstep,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @param {typeof codegenExpression} codegen
|
|
40
|
+
*/
|
|
41
|
+
function buildFunctions(codegen) {
|
|
42
|
+
const fn = functions(codegen);
|
|
43
|
+
// eslint-disable-next-line guard-for-in
|
|
44
|
+
for (const name in functionContext) {
|
|
45
|
+
fn[name] = `this.${name}`;
|
|
46
|
+
}
|
|
47
|
+
return fn;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const cg = codegenExpression({
|
|
51
|
+
forbidden: [],
|
|
52
|
+
allowed: ["datum"],
|
|
53
|
+
globalvar: "globalObject",
|
|
54
|
+
fieldvar: "datum",
|
|
55
|
+
functions: buildFunctions,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @typedef { object } ExpressionProps
|
|
60
|
+
* @prop { string[] } fields
|
|
61
|
+
* @prop { string[] } globals
|
|
62
|
+
* @prop { string } code
|
|
63
|
+
*
|
|
64
|
+
* @typedef { ((x: object) => any) & ExpressionProps } ExpressionFunction
|
|
4
65
|
*
|
|
5
66
|
* @param {string} expr
|
|
67
|
+
* @returns {ExpressionFunction}
|
|
6
68
|
*/
|
|
7
69
|
export default function createFunction(expr, globalObject = {}) {
|
|
8
|
-
const cg = codegenExpression({
|
|
9
|
-
forbidden: [],
|
|
10
|
-
allowed: ["datum"],
|
|
11
|
-
globalvar: "globalObject",
|
|
12
|
-
fieldvar: "datum",
|
|
13
|
-
});
|
|
14
|
-
|
|
15
70
|
try {
|
|
16
71
|
const parsed = parseExpression(expr);
|
|
17
72
|
const generatedCode = cg(parsed);
|
|
@@ -21,11 +76,15 @@ export default function createFunction(expr, globalObject = {}) {
|
|
|
21
76
|
"datum",
|
|
22
77
|
"globalObject",
|
|
23
78
|
`"use strict"; return (${generatedCode.code});`
|
|
24
|
-
);
|
|
79
|
+
).bind(functionContext);
|
|
25
80
|
|
|
81
|
+
/** @type { ExpressionFunction } */
|
|
26
82
|
const exprFunction = /** @param {object} x */ (x) =>
|
|
27
83
|
fn(x, globalObject);
|
|
28
84
|
exprFunction.fields = generatedCode.fields;
|
|
85
|
+
exprFunction.globals = generatedCode.globals;
|
|
86
|
+
exprFunction.code = generatedCode.code;
|
|
87
|
+
|
|
29
88
|
return exprFunction;
|
|
30
89
|
} catch (e) {
|
|
31
90
|
throw new Error(`Invalid expression: ${expr}, ${e.message}`);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linearstep.d.ts","sourceRoot":"","sources":["../../../src/utils/linearstep.js"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,0CAJW,MAAM,SACN,MAAM,KACN,MAAM,UAIhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridView.d.ts","sourceRoot":"","sources":["../../../src/view/gridView.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gridView.d.ts","sourceRoot":"","sources":["../../../src/view/gridView.js"],"names":[],"mappings":"AAowBA;;;GAGG;AACH,iDAHW,OAAO,iBAAiB,EAAE,cAAc,GACtC,OAAO,iBAAiB,EAAE,QAAQ,CAwB9C;AAED;;;GAGG;AACH,uDAHW,OAAO,iBAAiB,EAAE,cAAc,GACtC,OAAO,iBAAiB,EAAE,QAAQ,CA6C9C;AA2BD;;GAEG;AACH,8EAUC;AAED;;;;;GAKG;AACH,4CAJW,OAAO,uBAAuB,EAAE,OAAO,UACvC,OAAO,iBAAiB,EAAE,UAAU,YACpC,QAAQ,aAmBlB;AA33BD;;;;;;;;;;;;;;;GAeG;AACH;IA6BI;;;;;;;;;OASG;IACH,kBARW,OAAO,iBAAiB,EAAE,aAAa,WACvC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,iDAEb,MAAM,WACN,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAoBzC;IARG,8CAAgB;IAOhB,uBAA0B;IAG9B;;OAEG;IACH,qDAIC;IAeD;;OAEG;IACH,wDAKC;IAqBD;;OAEG;IACH,8CAEC;IAED,yBAEC;IAED;;OAEG;IACH,wCAmCC;IA2OD;;;;OAIG;IAEH,gBALW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,QA6O1D;;CAmGJ;AAgJD;IACI;;;;OAIG;IACH,6DAHW,aAAa,UACb,MAAM,EAoFhB;IAjFG,4BAAgC;IAChC,kCAAgB;IAChB,eAAoB;IAEpB,uBAAuB;IACvB,YADW,QAAQ,CACQ;IAE3B,uBAAuB;IACvB,kBADW,QAAQ,CACc;IAEjC,mFAAmF;IACnF,MADW,QAAQ,OAAO,OAAO,iBAAiB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAC5D;IAEd,4FAA4F;IAC5F,WADW,QAAQ,OAAO,OAAO,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAC3D;IAEnB,0DAA0D;IAC1D,kEAAoB;IAEpB,uBAAuB;IACvB,OADW,QAAQ,CACG;IAEtB,wBAAwB;IACxB,QADW,SAAS,CACQ;IA4DhC,uEAcC;IAED;;OAEG;IACH,4BAkKC;IAED,uBAqBC;IAED,iCAEC;CACJ;qBAhrC0D,eAAe;sBAFpD,uBAAuB;0BAGnB,oBAAoB;qBAGzB,eAAe;yBALX,mBAAmB;AAmrC5C;IACI;;;OAGG;IACH,uBAHW,SAAS,8CAyFnB;IAtDG;;;MAAoB;IACpB,2CAAsC;IAKtC,uBAAuB;IAEvB,wBAAwB;IACxB,2BAAqC;IA+CzC,0BAKC;IAWD;;;;OAIG;IACH,gCAHW,SAAS,UACT,SAAS,QA8CnB;IA7BG,0BAAsE;CA8B7E;oBAp1CmB,qBAAqB"}
|
|
@@ -436,6 +436,8 @@ export default class GridView extends ContainerView {
|
|
|
436
436
|
*/
|
|
437
437
|
// eslint-disable-next-line complexity
|
|
438
438
|
render(context, coords, options = {}) {
|
|
439
|
+
super.render(context, coords, options);
|
|
440
|
+
|
|
439
441
|
if (!this.isConfiguredVisible()) {
|
|
440
442
|
return;
|
|
441
443
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layerView.d.ts","sourceRoot":"","sources":["../../../src/view/layerView.js"],"names":[],"mappings":"AAIA;IAQI;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,SAAS,WACnC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,cACb,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAQzC;IAHG,0CAAgB;IAoCpB,gEAEC;IAWD;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"layerView.d.ts","sourceRoot":"","sources":["../../../src/view/layerView.js"],"names":[],"mappings":"AAIA;IAQI;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,SAAS,WACnC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,cACb,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAQzC;IAHG,0CAAgB;IAoCpB,gEAEC;IAWD;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,QAgB1D;;CAeJ;0BA1GyB,oBAAoB"}
|
|
@@ -77,6 +77,8 @@ export default class LayerView extends ContainerView {
|
|
|
77
77
|
* @param {import("../types/rendering.js").RenderingOptions} [options]
|
|
78
78
|
*/
|
|
79
79
|
render(context, coords, options = {}) {
|
|
80
|
+
super.render(context, coords, options);
|
|
81
|
+
|
|
80
82
|
if (!this.isConfiguredVisible()) {
|
|
81
83
|
return;
|
|
82
84
|
}
|
|
@@ -28,12 +28,6 @@ export default class UnitView extends ContainerView {
|
|
|
28
28
|
spec: import("../spec/view.js").UnitSpec;
|
|
29
29
|
/** @type {import("../marks/mark.js").default} */
|
|
30
30
|
mark: import("../marks/mark.js").default;
|
|
31
|
-
/**
|
|
32
|
-
* Not nice! Inconsistent when faceting!
|
|
33
|
-
* TODO: Something. Maybe store only width/height
|
|
34
|
-
* @type {import("./layout/rectangle.js").default}
|
|
35
|
-
*/
|
|
36
|
-
coords: import("./layout/rectangle.js").default;
|
|
37
31
|
/**
|
|
38
32
|
* @param {import("./renderingContext/viewRenderingContext.js").default} context
|
|
39
33
|
* @param {import("./layout/rectangle.js").default} coords
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unitView.d.ts","sourceRoot":"","sources":["../../../src/view/unitView.js"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH;QAHkB,MAAM,GAAE,cAAc,kBAAkB,EAAE,OAAO;EASjE;AAEF;IACI;;;;;;;OAOG;IACH;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,QAAQ,WAClC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"unitView.d.ts","sourceRoot":"","sources":["../../../src/view/unitView.js"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH;QAHkB,MAAM,GAAE,cAAc,kBAAkB,EAAE,OAAO;EASjE;AAEF;IACI;;;;;;;OAOG;IACH;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,QAAQ,WAClC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAkBzC;IAbG,yCAAgB;IAIZ,iDAAiD;IACjD,MADW,OAAO,kBAAkB,EAAE,OAAO,CACnB;IAUlC;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,QAY1D;IAED,kDAIC;IAED;;;;;OAKG;IACH,iEAyEC;IAED;;;OAGG;IACH,mGASC;IAkBD;;OAEG;IACH,uDAEC;IAED;;OAEG;IACH,opBAcC;IAED;;;;;OAKG;IACH,6BAHW,OAAO,oBAAoB,EAAE,gBAAgB,iDAkBvD;IAED;;;;;;;;;;;;OAYG;IACH,gHA2CC;IAED,uBAQC;IAgBD;;;;OAIG;IACH,8BAJW,MAAM,+DAEJ,OAAO,iBAAiB,EAAE,kBAAkB,CAKxD;CACJ;0BAnVyB,oBAAoB"}
|
|
@@ -65,13 +65,6 @@ export default class UnitView extends ContainerView {
|
|
|
65
65
|
|
|
66
66
|
this.resolve();
|
|
67
67
|
|
|
68
|
-
/**
|
|
69
|
-
* Not nice! Inconsistent when faceting!
|
|
70
|
-
* TODO: Something. Maybe store only width/height
|
|
71
|
-
* @type {import("./layout/rectangle.js").default}
|
|
72
|
-
*/
|
|
73
|
-
this.coords = undefined;
|
|
74
|
-
|
|
75
68
|
this.needsAxes = { x: true, y: true };
|
|
76
69
|
}
|
|
77
70
|
|
|
@@ -81,12 +74,12 @@ export default class UnitView extends ContainerView {
|
|
|
81
74
|
* @param {import("../types/rendering.js").RenderingOptions} [options]
|
|
82
75
|
*/
|
|
83
76
|
render(context, coords, options = {}) {
|
|
77
|
+
super.render(context, coords, options);
|
|
78
|
+
|
|
84
79
|
if (!this.isConfiguredVisible()) {
|
|
85
80
|
return;
|
|
86
81
|
}
|
|
87
82
|
|
|
88
|
-
this.coords = coords;
|
|
89
|
-
|
|
90
83
|
context.pushView(this, coords);
|
|
91
84
|
context.renderMark(this.mark, options);
|
|
92
85
|
context.popView(this);
|
package/dist/src/view/view.d.ts
CHANGED
|
@@ -46,6 +46,12 @@ export default class View {
|
|
|
46
46
|
* @type {function(number):number}
|
|
47
47
|
*/
|
|
48
48
|
opacityFunction: (arg0: number) => number;
|
|
49
|
+
/**
|
|
50
|
+
* Not nice! Inconsistent when faceting!
|
|
51
|
+
* TODO: Something. Maybe store only width/height
|
|
52
|
+
* @type {import("./layout/rectangle.js").default}
|
|
53
|
+
*/
|
|
54
|
+
coords: import("./layout/rectangle.js").default;
|
|
49
55
|
context: import("../types/viewContext.js").default;
|
|
50
56
|
layoutParent: import("./containerView.js").default;
|
|
51
57
|
dataParent: View;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
|
package/dist/src/view/view.js
CHANGED
|
@@ -16,6 +16,7 @@ import { appendToBaseUrl } from "../utils/url.js";
|
|
|
16
16
|
import { isDiscrete, bandSpace } from "vega-scale";
|
|
17
17
|
import { peek } from "../utils/arrayUtils.js";
|
|
18
18
|
import ViewError from "./viewError.js";
|
|
19
|
+
import { isExprRef } from "../marks/mark.js";
|
|
19
20
|
|
|
20
21
|
// TODO: View classes have too many responsibilities. Come up with a way
|
|
21
22
|
// to separate the concerns. However, most concerns are tightly tied to
|
|
@@ -73,6 +74,13 @@ export default class View {
|
|
|
73
74
|
*/
|
|
74
75
|
opacityFunction = defaultOpacityFunction;
|
|
75
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Not nice! Inconsistent when faceting!
|
|
79
|
+
* TODO: Something. Maybe store only width/height
|
|
80
|
+
* @type {import("./layout/rectangle.js").default}
|
|
81
|
+
*/
|
|
82
|
+
coords;
|
|
83
|
+
|
|
76
84
|
/**
|
|
77
85
|
*
|
|
78
86
|
* @param {import("../spec/view.js").ViewSpec} spec
|
|
@@ -461,6 +469,10 @@ export default class View {
|
|
|
461
469
|
* @type {import("../types/rendering.js").RenderMethod}
|
|
462
470
|
*/
|
|
463
471
|
render(context, coords, options = {}) {
|
|
472
|
+
this.coords = options.clipRect
|
|
473
|
+
? coords.intersect(options.clipRect)
|
|
474
|
+
: coords;
|
|
475
|
+
|
|
464
476
|
// override
|
|
465
477
|
}
|
|
466
478
|
|
|
@@ -723,6 +735,11 @@ function createViewOpacityFunction(view) {
|
|
|
723
735
|
|
|
724
736
|
return interpolate(unitsPerPixel) * parentOpacity;
|
|
725
737
|
};
|
|
738
|
+
} else if (isExprRef(opacityDef)) {
|
|
739
|
+
const fn = view.context.paramBroker.createExpression(
|
|
740
|
+
opacityDef.expr
|
|
741
|
+
);
|
|
742
|
+
return (parentOpacity) => fn(null) * parentOpacity;
|
|
726
743
|
}
|
|
727
744
|
}
|
|
728
745
|
return (parentOpacity) => parentOpacity;
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"contributors": [],
|
|
9
9
|
"license": "MIT",
|
|
10
|
-
"version": "0.
|
|
10
|
+
"version": "0.42.0",
|
|
11
11
|
"jsdelivr": "dist/bundle/index.js",
|
|
12
12
|
"unpkg": "dist/bundle/index.js",
|
|
13
13
|
"browser": "dist/bundle/index.js",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@gmod/bgzf-filehandle": "^1.4.7",
|
|
43
43
|
"@gmod/gff": "^1.3.0",
|
|
44
44
|
"@gmod/indexedfasta": "^2.0.4",
|
|
45
|
-
"@gmod/tabix": "^1.5.
|
|
45
|
+
"@gmod/tabix": "^1.5.13",
|
|
46
46
|
"@types/d3-array": "^3.0.2",
|
|
47
47
|
"@types/d3-dsv": "^3.0.0",
|
|
48
48
|
"@types/d3-ease": "^3.0.0",
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
"vega-scale": "^7.1.1",
|
|
66
66
|
"vega-util": "^1.16.0"
|
|
67
67
|
},
|
|
68
|
-
"gitHead": "
|
|
68
|
+
"gitHead": "59a4384ba903ee1b81212593e872ea61accc729d"
|
|
69
69
|
}
|