@genome-spy/core 0.74.0 → 0.75.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.es.js +4660 -4468
- package/dist/bundle/index.js +81 -81
- package/dist/schema.json +220 -12
- package/dist/src/data/sources/dataUtils.d.ts +25 -0
- package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
- package/dist/src/data/sources/dataUtils.js +23 -0
- package/dist/src/data/sources/inlineSource.js +2 -2
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +8 -3
- package/dist/src/encoder/encoder.d.ts +2 -2
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/genome/scaleLocus.d.ts.map +1 -1
- package/dist/src/genome/scaleLocus.js +8 -3
- package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
- package/dist/src/genomeSpy/interactionController.js +91 -51
- package/dist/src/gl/dataToVertices.d.ts +12 -14
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.js +116 -95
- package/dist/src/gl/glslScaleGenerator.d.ts +3 -0
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.js +10 -8
- package/dist/src/gl/vertexRangeIndex.d.ts +23 -0
- package/dist/src/gl/vertexRangeIndex.d.ts.map +1 -0
- package/dist/src/gl/vertexRangeIndex.js +150 -0
- package/dist/src/marks/mark.d.ts +1 -1
- package/dist/src/paramRuntime/expressionCompiler.d.ts +2 -1
- package/dist/src/paramRuntime/expressionCompiler.d.ts.map +1 -1
- package/dist/src/paramRuntime/expressionCompiler.js +3 -2
- package/dist/src/paramRuntime/expressionRef.d.ts +4 -1
- package/dist/src/paramRuntime/expressionRef.d.ts.map +1 -1
- package/dist/src/paramRuntime/expressionRef.js +10 -3
- package/dist/src/paramRuntime/graphRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/graphRuntime.js +15 -6
- package/dist/src/paramRuntime/paramRuntime.d.ts +8 -2
- package/dist/src/paramRuntime/paramRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/paramRuntime.js +10 -5
- package/dist/src/paramRuntime/types.d.ts +1 -0
- package/dist/src/paramRuntime/types.d.ts.map +1 -1
- package/dist/src/paramRuntime/types.js +1 -0
- package/dist/src/paramRuntime/viewParamRuntime.d.ts +5 -4
- package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/viewParamRuntime.js +17 -6
- package/dist/src/scale/scale.d.ts.map +1 -1
- package/dist/src/scale/scale.js +1 -0
- package/dist/src/scales/domainPlanner.d.ts +57 -11
- package/dist/src/scales/domainPlanner.d.ts.map +1 -1
- package/dist/src/scales/domainPlanner.js +182 -83
- package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
- package/dist/src/scales/scaleInstanceManager.js +7 -2
- package/dist/src/scales/scalePropsResolver.d.ts +3 -3
- package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
- package/dist/src/scales/scalePropsResolver.js +28 -5
- package/dist/src/scales/scaleResolution.d.ts +12 -1
- package/dist/src/scales/scaleResolution.d.ts.map +1 -1
- package/dist/src/scales/scaleResolution.js +171 -18
- package/dist/src/screenshotExport.d.ts +23 -0
- package/dist/src/screenshotExport.d.ts.map +1 -0
- package/dist/src/screenshotExport.js +44 -0
- package/dist/src/screenshotHarness.d.ts.map +1 -1
- package/dist/src/screenshotHarness.js +26 -24
- package/dist/src/spec/axis.d.ts +2 -2
- package/dist/src/spec/channel.d.ts +4 -4
- package/dist/src/spec/data.d.ts +12 -0
- package/dist/src/spec/scale.d.ts +13 -1
- package/dist/src/utils/expression.d.ts +16 -8
- package/dist/src/utils/expression.d.ts.map +1 -1
- package/dist/src/utils/expression.js +291 -11
- package/dist/src/view/flowBuilder.d.ts +1 -1
- package/dist/src/view/flowBuilder.d.ts.map +1 -1
- package/dist/src/view/flowBuilder.js +11 -7
- package/dist/src/view/resolutionPlanner.d.ts +9 -0
- package/dist/src/view/resolutionPlanner.d.ts.map +1 -0
- package/dist/src/view/resolutionPlanner.js +302 -0
- package/dist/src/view/unitView.d.ts +1 -1
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +5 -152
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +2 -1
- package/package.json +2 -2
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @callback VertexReader
|
|
3
|
+
* @param {number} vertexIndex
|
|
4
|
+
* @returns {number}
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* A binned index for vertex ranges that are already emitted into typed arrays.
|
|
8
|
+
* The readers operate on vertices, not source datums.
|
|
9
|
+
*
|
|
10
|
+
* The scan is run-based: consecutive vertices with the same effective x
|
|
11
|
+
* interval are collapsed into one range before binning.
|
|
12
|
+
*
|
|
13
|
+
* @param {number} size Number of bins
|
|
14
|
+
* @param {[number, number]} domain Domain of positions
|
|
15
|
+
* @param {VertexReader} readStart Reader for the start x value at a vertex
|
|
16
|
+
* @param {VertexReader} [readEnd=readStart] Reader for the end x value at a vertex
|
|
17
|
+
* @param {number} [startVertexIndex=0] First vertex index in the scanned range
|
|
18
|
+
* @param {number} [endVertexIndex=startVertexIndex] One past the last vertex index
|
|
19
|
+
* @returns {import("../utils/binnedIndex.js").Lookup | undefined}
|
|
20
|
+
*/
|
|
21
|
+
export function createVertexRangeIndexer(size: number, domain: [number, number], readStart: VertexReader, readEnd?: VertexReader, startVertexIndex?: number, endVertexIndex?: number): import("../utils/binnedIndex.js").Lookup | undefined;
|
|
22
|
+
export type VertexReader = (vertexIndex: number) => number;
|
|
23
|
+
//# sourceMappingURL=vertexRangeIndex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertexRangeIndex.d.ts","sourceRoot":"","sources":["../../../src/gl/vertexRangeIndex.js"],"names":[],"mappings":"AAKA;;;;GAIG;AAEH;;;;;;;;;;;;;;GAcG;AACH,+CARW,MAAM,UACN,CAAC,MAAM,EAAE,MAAM,CAAC,aAChB,YAAY,YACZ,YAAY,qBACZ,MAAM,mBACN,MAAM,GACJ,OAAO,yBAAyB,EAAE,MAAM,GAAG,SAAS,CA6HhE;yCA9IU,MAAM,KACJ,MAAM"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import clamp from "../utils/clamp.js";
|
|
2
|
+
|
|
3
|
+
const MAX_INTEGER = 2 ** 31 - 1;
|
|
4
|
+
const MIN_INTEGER = -(2 ** 31);
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @callback VertexReader
|
|
8
|
+
* @param {number} vertexIndex
|
|
9
|
+
* @returns {number}
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A binned index for vertex ranges that are already emitted into typed arrays.
|
|
14
|
+
* The readers operate on vertices, not source datums.
|
|
15
|
+
*
|
|
16
|
+
* The scan is run-based: consecutive vertices with the same effective x
|
|
17
|
+
* interval are collapsed into one range before binning.
|
|
18
|
+
*
|
|
19
|
+
* @param {number} size Number of bins
|
|
20
|
+
* @param {[number, number]} domain Domain of positions
|
|
21
|
+
* @param {VertexReader} readStart Reader for the start x value at a vertex
|
|
22
|
+
* @param {VertexReader} [readEnd=readStart] Reader for the end x value at a vertex
|
|
23
|
+
* @param {number} [startVertexIndex=0] First vertex index in the scanned range
|
|
24
|
+
* @param {number} [endVertexIndex=startVertexIndex] One past the last vertex index
|
|
25
|
+
* @returns {import("../utils/binnedIndex.js").Lookup | undefined}
|
|
26
|
+
*/
|
|
27
|
+
export function createVertexRangeIndexer(
|
|
28
|
+
size,
|
|
29
|
+
domain,
|
|
30
|
+
readStart,
|
|
31
|
+
readEnd = readStart,
|
|
32
|
+
startVertexIndex = 0,
|
|
33
|
+
endVertexIndex = startVertexIndex
|
|
34
|
+
) {
|
|
35
|
+
if (endVertexIndex <= startVertexIndex) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (domain[1] <= domain[0]) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const startIndices = new Array(size);
|
|
44
|
+
startIndices.fill(MAX_INTEGER);
|
|
45
|
+
|
|
46
|
+
const endIndices = new Array(size);
|
|
47
|
+
endIndices.fill(0);
|
|
48
|
+
|
|
49
|
+
const start = domain[0];
|
|
50
|
+
const domainLength = domain[1] - domain[0];
|
|
51
|
+
const divisor = domainLength / size;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @param {number} pos
|
|
55
|
+
* @param {boolean} end
|
|
56
|
+
*/
|
|
57
|
+
const getBin = (pos, end) => {
|
|
58
|
+
const unfloored = (pos - start) / divisor;
|
|
59
|
+
const floored = Math.floor(unfloored);
|
|
60
|
+
|
|
61
|
+
// Special handling for the end coordinate because we are using half-open ranges.
|
|
62
|
+
return clamp(
|
|
63
|
+
end && floored == unfloored ? floored - 1 : floored,
|
|
64
|
+
0,
|
|
65
|
+
size - 1
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
let lastIndex = MIN_INTEGER;
|
|
70
|
+
let lastStart = -Infinity;
|
|
71
|
+
let unordered = false;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @type {import("../utils/binnedIndex.js").Lookup}
|
|
75
|
+
*/
|
|
76
|
+
const lookup = (queryStart, queryEnd, arr = [0, 0]) => {
|
|
77
|
+
const startBin = getBin(queryStart, false);
|
|
78
|
+
const endBin = getBin(queryEnd, true);
|
|
79
|
+
const startIndex = startIndices[startBin];
|
|
80
|
+
const endIndex = Math.max(endIndices[endBin], startIndex);
|
|
81
|
+
|
|
82
|
+
arr[0] = startIndex;
|
|
83
|
+
arr[1] = endIndex;
|
|
84
|
+
return arr;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
for (let i = startVertexIndex; i < endVertexIndex; ) {
|
|
88
|
+
const runStart = i;
|
|
89
|
+
const runX = readStart(i);
|
|
90
|
+
const runX2 = readEnd(i);
|
|
91
|
+
|
|
92
|
+
i += 1;
|
|
93
|
+
while (
|
|
94
|
+
i < endVertexIndex &&
|
|
95
|
+
readStart(i) === runX &&
|
|
96
|
+
readEnd(i) === runX2
|
|
97
|
+
) {
|
|
98
|
+
i += 1;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (runStart > lastIndex) {
|
|
102
|
+
lastIndex = runStart;
|
|
103
|
+
} else {
|
|
104
|
+
unordered = true;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (runX < lastStart || runX2 < runX) {
|
|
109
|
+
unordered = true;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
lastStart = runX;
|
|
113
|
+
|
|
114
|
+
const startBin = getBin(runX, false);
|
|
115
|
+
const endBin = getBin(runX2, true);
|
|
116
|
+
|
|
117
|
+
for (let bin = startBin; bin <= endBin; bin++) {
|
|
118
|
+
if (startIndices[bin] > runStart) {
|
|
119
|
+
startIndices[bin] = runStart;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (endIndices[bin] < i) {
|
|
123
|
+
endIndices[bin] = i;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (unordered) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
for (let i = 1; i < endIndices.length; i++) {
|
|
133
|
+
if (endIndices[i] < endIndices[i - 1]) {
|
|
134
|
+
endIndices[i] = endIndices[i - 1];
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
let tail = true;
|
|
139
|
+
|
|
140
|
+
for (let i = startIndices.length - 1; i > 0; i--) {
|
|
141
|
+
if (tail && startIndices[i] == MAX_INTEGER) {
|
|
142
|
+
startIndices[i] = endIndices[i];
|
|
143
|
+
tail = false;
|
|
144
|
+
} else if (startIndices[i - 1] > startIndices[i]) {
|
|
145
|
+
startIndices[i - 1] = startIndices[i];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return lookup;
|
|
150
|
+
}
|
package/dist/src/marks/mark.d.ts
CHANGED
|
@@ -144,7 +144,7 @@ export default class Mark<P extends import("../spec/mark.js").MarkProps = import
|
|
|
144
144
|
*/
|
|
145
145
|
get encoding(): import("../spec/channel.js").Encoding;
|
|
146
146
|
getContext(): import("../types/viewContext.js").default;
|
|
147
|
-
getType(): "
|
|
147
|
+
getType(): "text" | "point" | "link" | "rect" | "rule" | "tick";
|
|
148
148
|
initializeData(): void;
|
|
149
149
|
/**
|
|
150
150
|
* Initialize encoders that encode fields of the data (or constants) to
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @param {string} expr
|
|
3
3
|
* @param {Record<string, any>} [globalObject]
|
|
4
|
+
* @param {object} [context]
|
|
4
5
|
* @returns {import("../utils/expression.js").ExpressionFunction}
|
|
5
6
|
*/
|
|
6
|
-
export function compileExpression(expr: string, globalObject?: Record<string, any
|
|
7
|
+
export function compileExpression(expr: string, globalObject?: Record<string, any>, context?: object): import("../utils/expression.js").ExpressionFunction;
|
|
7
8
|
//# sourceMappingURL=expressionCompiler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressionCompiler.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/expressionCompiler.js"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"expressionCompiler.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/expressionCompiler.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wCALW,MAAM,iBACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YACnB,MAAM,GACJ,OAAO,wBAAwB,EAAE,kBAAkB,CAI/D"}
|
|
@@ -3,8 +3,9 @@ import createFunction from "../utils/expression.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* @param {string} expr
|
|
5
5
|
* @param {Record<string, any>} [globalObject]
|
|
6
|
+
* @param {object} [context]
|
|
6
7
|
* @returns {import("../utils/expression.js").ExpressionFunction}
|
|
7
8
|
*/
|
|
8
|
-
export function compileExpression(expr, globalObject = {}) {
|
|
9
|
-
return createFunction(expr, globalObject);
|
|
9
|
+
export function compileExpression(expr, globalObject = {}, context = {}) {
|
|
10
|
+
return createFunction(expr, globalObject, context);
|
|
10
11
|
}
|
|
@@ -10,9 +10,12 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @param {string} expr
|
|
12
12
|
* @param {(name: string) => import("./types.js").ParamRef<any> | undefined} resolve
|
|
13
|
+
* @param {{ resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined }} [options]
|
|
13
14
|
* @returns {BoundExpression}
|
|
14
15
|
*/
|
|
15
|
-
export function bindExpression(expr: string, resolve: (name: string) => import("./types.js").ParamRef<any> | undefined
|
|
16
|
+
export function bindExpression(expr: string, resolve: (name: string) => import("./types.js").ParamRef<any> | undefined, options?: {
|
|
17
|
+
resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined;
|
|
18
|
+
}): BoundExpression;
|
|
16
19
|
export type BoundExpression = {
|
|
17
20
|
expression: import("./types.js").ExprRefFunction;
|
|
18
21
|
dependencies: import("./types.js").ParamRef<any>[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressionRef.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/expressionRef.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH
|
|
1
|
+
{"version":3,"file":"expressionRef.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/expressionRef.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,qCALW,MAAM,WACN,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS,YAChE;IAAE,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,8BAA8B,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAC1G,eAAe,CAqF3B;8BAlGY;IACR,UAAU,EAAE,OAAO,YAAY,EAAE,eAAe,CAAC;IACjD,YAAY,EAAE,OAAO,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAA;CACnD"}
|
|
@@ -13,14 +13,15 @@ import { compileExpression } from "./expressionCompiler.js";
|
|
|
13
13
|
*
|
|
14
14
|
* @param {string} expr
|
|
15
15
|
* @param {(name: string) => import("./types.js").ParamRef<any> | undefined} resolve
|
|
16
|
+
* @param {{ resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined }} [options]
|
|
16
17
|
* @returns {BoundExpression}
|
|
17
18
|
*/
|
|
18
|
-
export function bindExpression(expr, resolve) {
|
|
19
|
+
export function bindExpression(expr, resolve, options = {}) {
|
|
19
20
|
const globalObject = {};
|
|
20
21
|
|
|
21
22
|
/** @type {import("./types.js").ExprRefFunction} */
|
|
22
23
|
const expression = /** @type {any} */ (
|
|
23
|
-
compileExpression(expr, globalObject)
|
|
24
|
+
compileExpression(expr, globalObject, options)
|
|
24
25
|
);
|
|
25
26
|
|
|
26
27
|
/** @type {Map<string, import("./types.js").ParamRef<any>>} */
|
|
@@ -57,6 +58,9 @@ export function bindExpression(expr, resolve) {
|
|
|
57
58
|
for (const ref of refsForParams.values()) {
|
|
58
59
|
disposers.push(ref.subscribe(listener));
|
|
59
60
|
}
|
|
61
|
+
for (const ref of expression.scaleDependencies ?? []) {
|
|
62
|
+
disposers.push(ref.subscribe(listener));
|
|
63
|
+
}
|
|
60
64
|
|
|
61
65
|
let active = true;
|
|
62
66
|
const unsubscribe = () => {
|
|
@@ -86,10 +90,13 @@ export function bindExpression(expr, resolve) {
|
|
|
86
90
|
"|" +
|
|
87
91
|
Array.from(refsForParams.values())
|
|
88
92
|
.map((ref) => ref.id)
|
|
93
|
+
.concat((expression.scaleDependencies ?? []).map((ref) => ref.id))
|
|
89
94
|
.join(",");
|
|
90
95
|
|
|
91
96
|
return {
|
|
92
97
|
expression,
|
|
93
|
-
dependencies: Array.from(refsForParams.values())
|
|
98
|
+
dependencies: Array.from(refsForParams.values()).concat(
|
|
99
|
+
expression.scaleDependencies ?? []
|
|
100
|
+
),
|
|
94
101
|
};
|
|
95
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/graphRuntime.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graphRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/graphRuntime.js"],"names":[],"mappings":"AA+IA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IA6BI;;;;;;;OAOG;IACH,sBAJG;QAA2D,iBAAiB,GAApE,OAAO,wBAAwB,EAAE,OAAO;KAGlD,EAGA;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,eARa,CAAC,WACH,MAAM,QACN,MAAM,QACN,MAAM,GAAG,WAAW,gBACpB,CAAC,YACD;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAClB,OAAO,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAwDpD;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAPa,CAAC,WACH,MAAM,QACN,MAAM,QACN,OAAO,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MACpC,MAAM,CAAC,GACL,OAAO,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAsD5C;IAED;;;;;;;;;;;;OAYG;IACH,gBALW,MAAM,QACN,OAAO,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MACpC,MAAM,IAAI,GACR,MAAM,IAAI,CAuCtB;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,iBAJa,CAAC,MACH,MAAM,CAAC,GACL,CAAC,CAYb;IAED;;;;;;;;OAQG;IACH,iBA8CC;IAED;;;;;;;;;;OAUG;IACH,yBAJW;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAE1C,OAAO,CAAC,IAAI,CAAC,CAgDzB;;CA2EJ;0BApnBY,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI;8BAEpC;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IAC3B,SAAS,EAAE,WAAW,CAAA;CACvB;yBAIS,CAAC,IACD,eAAe,GAAG;IAC1B,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAA;CACb;yBAIS,CAAC,IACD,eAAe,GAAG;IAC1B,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC,CAAA;CACZ;yBAIS;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,EAAE,EAAE,MAAM,IAAI,CAAA;CACf;AAgEJ;;;GAGG;AACH,6BAHW,OAAO,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAChC,eAAe,CAa3B"}
|
|
@@ -121,6 +121,17 @@ function getNode(ref) {
|
|
|
121
121
|
return node;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
/**
|
|
125
|
+
* @param {import("./types.js").ParamRef<any>} dep
|
|
126
|
+
* @returns {number}
|
|
127
|
+
*/
|
|
128
|
+
function getDependencyRank(dep) {
|
|
129
|
+
if (typeof (/** @type {any} */ (dep).rank) === "number") {
|
|
130
|
+
return /** @type {any} */ (dep).rank;
|
|
131
|
+
}
|
|
132
|
+
return getNode(dep).rank;
|
|
133
|
+
}
|
|
134
|
+
|
|
124
135
|
/**
|
|
125
136
|
* @param {Set<() => void>} listeners
|
|
126
137
|
*/
|
|
@@ -291,9 +302,8 @@ export default class GraphRuntime {
|
|
|
291
302
|
* @returns {import("./types.js").ParamRef<T>}
|
|
292
303
|
*/
|
|
293
304
|
computed(ownerId, name, deps, fn) {
|
|
294
|
-
const
|
|
295
|
-
|
|
296
|
-
(previous, node) => Math.max(previous, node.rank),
|
|
305
|
+
const maxRank = deps.reduce(
|
|
306
|
+
(previous, dep) => Math.max(previous, getDependencyRank(dep)),
|
|
297
307
|
0
|
|
298
308
|
);
|
|
299
309
|
|
|
@@ -359,9 +369,8 @@ export default class GraphRuntime {
|
|
|
359
369
|
* @returns {() => void} explicit disposer for manual teardown
|
|
360
370
|
*/
|
|
361
371
|
effect(ownerId, deps, fn) {
|
|
362
|
-
const
|
|
363
|
-
|
|
364
|
-
(previous, node) => Math.max(previous, node.rank),
|
|
372
|
+
const maxRank = deps.reduce(
|
|
373
|
+
(previous, dep) => Math.max(previous, getDependencyRank(dep)),
|
|
365
374
|
0
|
|
366
375
|
);
|
|
367
376
|
|
|
@@ -89,9 +89,12 @@ export default class ParamRuntime {
|
|
|
89
89
|
* @param {ScopeId} scope
|
|
90
90
|
* @param {string} name
|
|
91
91
|
* @param {string} expr
|
|
92
|
+
* @param {{ resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined }} [options]
|
|
92
93
|
* @returns {import("./types.js").ParamRef<T>}
|
|
93
94
|
*/
|
|
94
|
-
registerDerived<T>(scope: ScopeId, name: string, expr: string
|
|
95
|
+
registerDerived<T>(scope: ScopeId, name: string, expr: string, options?: {
|
|
96
|
+
resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined;
|
|
97
|
+
}): import("./types.js").ParamRef<T>;
|
|
95
98
|
/**
|
|
96
99
|
* Creates an expression function bound to scope-based parameter resolution.
|
|
97
100
|
*
|
|
@@ -101,9 +104,12 @@ export default class ParamRuntime {
|
|
|
101
104
|
*
|
|
102
105
|
* @param {ScopeId} scope
|
|
103
106
|
* @param {string} expr
|
|
107
|
+
* @param {{ resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined }} [options]
|
|
104
108
|
* @returns {import("./types.js").ExprRefFunction}
|
|
105
109
|
*/
|
|
106
|
-
createExpression(scope: ScopeId, expr: string
|
|
110
|
+
createExpression(scope: ScopeId, expr: string, options?: {
|
|
111
|
+
resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined;
|
|
112
|
+
}): import("./types.js").ExprRefFunction;
|
|
107
113
|
/**
|
|
108
114
|
* Resolves a parameter by name from `scope`, searching parent scopes as needed.
|
|
109
115
|
* Returns the nearest matching binding, if any.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paramRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/paramRuntime.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IASI;;;;;;;;OAQG;IACH,0BAHW,OAAO,GACL,OAAO,CAYnB;IAED;;;;;;;;OAQG;IACH,oBAFW,OAAO,QAMjB;IAED;;;;;;;OAOG;IACH,wBAHW,OAAO,YACP,MAAM,IAAI,QAKpB;IAED;;;;;;;;;OASG;IACH,aAPa,CAAC,SACH,OAAO,QACP,MAAM,WACN,CAAC,YACD;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAClB,OAAO,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAYpD;IAED;;;;;;;;;;;;OAYG;IACH,kBAPa,CAAC,SACH,OAAO,QACP,MAAM,WACN,CAAC,YACD;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAClB,OAAO,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAYpD;IAED
|
|
1
|
+
{"version":3,"file":"paramRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/paramRuntime.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IASI;;;;;;;;OAQG;IACH,0BAHW,OAAO,GACL,OAAO,CAYnB;IAED;;;;;;;;OAQG;IACH,oBAFW,OAAO,QAMjB;IAED;;;;;;;OAOG;IACH,wBAHW,OAAO,YACP,MAAM,IAAI,QAKpB;IAED;;;;;;;;;OASG;IACH,aAPa,CAAC,SACH,OAAO,QACP,MAAM,WACN,CAAC,YACD;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAClB,OAAO,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAYpD;IAED;;;;;;;;;;;;OAYG;IACH,kBAPa,CAAC,SACH,OAAO,QACP,MAAM,WACN,CAAC,YACD;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAClB,OAAO,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAYpD;IAED;;;;;;;;;;;;OAYG;IACH,gBAPa,CAAC,SACH,OAAO,QACP,MAAM,QACN,MAAM,YACN;QAAE,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,8BAA8B,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,GAC1G,OAAO,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAiB5C;IAED;;;;;;;;;;;OAWG;IACH,wBALW,OAAO,QACP,MAAM,YACN;QAAE,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,8BAA8B,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,GAC1G,OAAO,YAAY,EAAE,eAAe,CAShD;IAED;;;;;;;;OAQG;IACH,QALa,CAAC,SACH,OAAO,QACP,MAAM,GACJ,OAAO,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAIxD;IAED;;;;;;;;;OASG;IACH,iBAJa,CAAC,MACH,MAAM,CAAC,GACL,CAAC,CAIb;IAED;;OAEG;IACH,iBAEC;IAED;;;;;OAKG;IACH,yBAHW;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1C,OAAO,CAAC,IAAI,CAAC,CAIzB;;CACJ;;;;;;;;;;;;;;;;;;;;;sBAzMY,MAAM"}
|
|
@@ -140,12 +140,14 @@ export default class ParamRuntime {
|
|
|
140
140
|
* @param {ScopeId} scope
|
|
141
141
|
* @param {string} name
|
|
142
142
|
* @param {string} expr
|
|
143
|
+
* @param {{ resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined }} [options]
|
|
143
144
|
* @returns {import("./types.js").ParamRef<T>}
|
|
144
145
|
*/
|
|
145
|
-
registerDerived(scope, name, expr) {
|
|
146
|
+
registerDerived(scope, name, expr, options) {
|
|
146
147
|
const { expression, dependencies } = bindExpression(
|
|
147
148
|
expr,
|
|
148
|
-
(globalName) => this.resolve(scope, globalName)
|
|
149
|
+
(globalName) => this.resolve(scope, globalName),
|
|
150
|
+
options
|
|
149
151
|
);
|
|
150
152
|
|
|
151
153
|
const ownerId = this.#paramStore.getOwnerId(scope);
|
|
@@ -167,11 +169,14 @@ export default class ParamRuntime {
|
|
|
167
169
|
*
|
|
168
170
|
* @param {ScopeId} scope
|
|
169
171
|
* @param {string} expr
|
|
172
|
+
* @param {{ resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined }} [options]
|
|
170
173
|
* @returns {import("./types.js").ExprRefFunction}
|
|
171
174
|
*/
|
|
172
|
-
createExpression(scope, expr) {
|
|
173
|
-
const { expression } = bindExpression(
|
|
174
|
-
|
|
175
|
+
createExpression(scope, expr, options) {
|
|
176
|
+
const { expression } = bindExpression(
|
|
177
|
+
expr,
|
|
178
|
+
(globalName) => this.resolve(scope, globalName),
|
|
179
|
+
options
|
|
175
180
|
);
|
|
176
181
|
return expression;
|
|
177
182
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/types.js"],"names":[],"mappings":"qBACa,CAAC,IACD;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;CAChD;6BAIS,CAAC,IACD,QAAQ,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;CAAE;8BAIzC,OAAO,wBAAwB,EAAE,kBAAkB,GAAG;IAC9D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,MAAM,CAAA;CACzB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/types.js"],"names":[],"mappings":"qBACa,CAAC,IACD;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;CAChD;6BAIS,CAAC,IACD,QAAQ,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;CAAE;8BAIzC,OAAO,wBAAwB,EAAE,kBAAkB,GAAG;IAC9D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,MAAM,CAAA;CACzB"}
|
|
@@ -10,11 +10,12 @@
|
|
|
10
10
|
export default class ViewParamRuntime {
|
|
11
11
|
/**
|
|
12
12
|
* @param {() => ViewParamRuntime} [parentFinder]
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../scales/scaleResolution.js").default | undefined} [scaleResolutionResolver]
|
|
14
|
+
* Optional resolver for scale channels in this runtime's view scope.
|
|
15
|
+
* N.B. The function must always return the same resolution for the
|
|
16
|
+
* same channel in the same view hierarchy.
|
|
16
17
|
*/
|
|
17
|
-
constructor(parentFinder?: () => ViewParamRuntime);
|
|
18
|
+
constructor(parentFinder?: () => ViewParamRuntime, scaleResolutionResolver?: (channel: import("../spec/channel.js").ChannelWithScale) => import("../scales/scaleResolution.js").default | undefined);
|
|
18
19
|
/**
|
|
19
20
|
* Registers a parameter definition into this runtime scope.
|
|
20
21
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewParamRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/viewParamRuntime.js"],"names":[],"mappings":"AAmBA;;;;;;;;GAQG;AACH;
|
|
1
|
+
{"version":3,"file":"viewParamRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/viewParamRuntime.js"],"names":[],"mappings":"AAmBA;;;;;;;;GAQG;AACH;IAwCI;;;;;;OAMG;IACH,2BANW,MAAM,gBAAgB,4BACtB,CAAC,OAAO,EAAE,OAAO,oBAAoB,EAAE,gBAAgB,KAAK,OAAO,8BAA8B,EAAE,OAAO,GAAG,SAAS,EAkBhI;IAED;;;;;;;;;;;OAWG;IACH,wEAvEqB,GAAG,KAAK,IAAI,CAkKhC;IAED;;;;;;;OAOG;IACH,eAFa,CAAC,aAJH,MAAM,gBACN,CAAC,YACD,OAAO,GACL,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAgC9B;IAED;;;;;;;;OAQG;IACH,oBAHW,MAAM,SACN,GAAG,QAWb;IAED;;;OAGG;IACH,oBAFW,MAAM,OAIhB;IAED;;;;;;;;OAQG;IACH,qBAJW,MAAM,YACN,MAAM,IAAI,GACR,MAAM,IAAI,CAiBtB;IAED;;;OAGG;IACH,qBAFW,MAAM,OAKhB;IAED;;OAEG;IACH,oBACsB,WAAW,CAAC,MAAM,2CAAY,CAGnD;IAED;;;;;OAKG;IACH,yBAHW,MAAM,GACJ,OAAO,CAKnB;IAED;;;;;;;;;;OAUG;IACH,0CAHW,MAAM,GACJ,OAAO,CAanB;IAED;;;;OAIG;IACH,+BAHW,MAAM,GACJ,gBAAgB,CAQ5B;IAKD;;;;OAIG;IACH,uBAFW,MAAM,wCAMhB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,sBALW,MAAM,YACN,MAAM,IAAI;;;;;;;qBA3VX,OAAO;;;;;;2BAKP,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI;QAwV3B,eAAe,CAY3B;IA0BD;;;;OAIG;IACH,qBAFW,MAAM,OAKhB;IAED;;;;OAIG;IACH,iBAJa,CAAC,MACH,MAAM,CAAC,GACL,CAAC,CAIb;IAED,iBAEC;IAED;;;;;OAKG;IACH,yBAFW;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,iBAItD;IAED,gBAUC;IAED;;;;;OAKG;IACH,sBAFa,OAAO,CAiBnB;;CACJ;;;;;;;;8BA9cY,OAAO,wBAAwB,EAAE,kBAAkB,GAAG;IAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,MAAM,CAAA;CAAC"}
|
|
@@ -61,16 +61,22 @@ export default class ViewParamRuntime {
|
|
|
61
61
|
/** @type {() => ViewParamRuntime} */
|
|
62
62
|
#parentFinder;
|
|
63
63
|
|
|
64
|
+
/** @type {(channel: string) => import("../scales/scaleResolution.js").default | undefined} */
|
|
65
|
+
#scaleResolutionResolver;
|
|
66
|
+
|
|
64
67
|
#disposed = false;
|
|
65
68
|
|
|
66
69
|
/**
|
|
67
70
|
* @param {() => ViewParamRuntime} [parentFinder]
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
+
* @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../scales/scaleResolution.js").default | undefined} [scaleResolutionResolver]
|
|
72
|
+
* Optional resolver for scale channels in this runtime's view scope.
|
|
73
|
+
* N.B. The function must always return the same resolution for the
|
|
74
|
+
* same channel in the same view hierarchy.
|
|
71
75
|
*/
|
|
72
|
-
constructor(parentFinder) {
|
|
76
|
+
constructor(parentFinder, scaleResolutionResolver) {
|
|
73
77
|
this.#parentFinder = parentFinder ?? (() => undefined);
|
|
78
|
+
this.#scaleResolutionResolver =
|
|
79
|
+
scaleResolutionResolver ?? (() => undefined);
|
|
74
80
|
|
|
75
81
|
const parent = this.#parentFinder();
|
|
76
82
|
if (parent) {
|
|
@@ -149,7 +155,10 @@ export default class ViewParamRuntime {
|
|
|
149
155
|
const ref = this.#runtime.registerDerived(
|
|
150
156
|
this.#scopeId,
|
|
151
157
|
name,
|
|
152
|
-
param.expr
|
|
158
|
+
param.expr,
|
|
159
|
+
{
|
|
160
|
+
resolveScaleResolution: this.#scaleResolutionResolver,
|
|
161
|
+
}
|
|
153
162
|
);
|
|
154
163
|
this.#localRefs.set(name, ref);
|
|
155
164
|
setter = () => {
|
|
@@ -352,7 +361,9 @@ export default class ViewParamRuntime {
|
|
|
352
361
|
* @param {string} expr
|
|
353
362
|
*/
|
|
354
363
|
createExpression(expr) {
|
|
355
|
-
return this.#runtime.createExpression(this.#scopeId, expr
|
|
364
|
+
return this.#runtime.createExpression(this.#scopeId, expr, {
|
|
365
|
+
resolveScaleResolution: this.#scaleResolutionResolver,
|
|
366
|
+
});
|
|
356
367
|
}
|
|
357
368
|
|
|
358
369
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scale.d.ts","sourceRoot":"","sources":["../../../src/scale/scale.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scale.d.ts","sourceRoot":"","sources":["../../../src/scale/scale.js"],"names":[],"mappings":"AAiIA,sEAuBC;AAED;;;;;GAKG;AACH,uCAJW,OAAO,kBAAkB,EAAE,KAAK,UAChC,GAAC,GACC,OAAO,uBAAuB,EAAE,SAAS,CA0BrD;AA4CD;;;;;EAuGC"}
|
package/dist/src/scale/scale.js
CHANGED
|
@@ -8,7 +8,30 @@ export function isSelectionDomainRef(domain: any): domain is SelectionDomainRef;
|
|
|
8
8
|
* @typedef {import("../spec/scale.js").ComplexDomain} ComplexDomain
|
|
9
9
|
* @typedef {import("../spec/scale.js").ScalarDomain} ScalarDomain
|
|
10
10
|
* @typedef {import("../spec/scale.js").SelectionDomainRef} SelectionDomainRef
|
|
11
|
+
* @typedef {import("../spec/parameter.js").ExprRef} ExprRef
|
|
11
12
|
* @typedef {import("./scaleResolution.js").ScaleResolutionMember} ScaleResolutionMember
|
|
13
|
+
* @typedef {() => Set<ScaleResolutionMember>} ScaleMembersGetter
|
|
14
|
+
* @typedef {(interval: ScalarDomain | ComplexDomain) => number[]} FromComplexInterval
|
|
15
|
+
* @typedef {(assembly: import("../spec/scale.js").Scale["assembly"] | undefined) => number[]} GetLocusExtent
|
|
16
|
+
* @typedef {{
|
|
17
|
+
* domains: DomainArray[],
|
|
18
|
+
* selectionRef: SelectionDomainLinkInfo | undefined,
|
|
19
|
+
* selectionRuntime: any,
|
|
20
|
+
* selectionDescription: string | undefined,
|
|
21
|
+
* hasLiteralDomain: boolean,
|
|
22
|
+
* }} ConfiguredDomainResolutionState
|
|
23
|
+
* @typedef {{
|
|
24
|
+
* kind: "literal",
|
|
25
|
+
* domain: DomainArray,
|
|
26
|
+
* } | {
|
|
27
|
+
* kind: "selection",
|
|
28
|
+
* domain: DomainArray | undefined,
|
|
29
|
+
* description: string,
|
|
30
|
+
* param: string,
|
|
31
|
+
* encoding: "x" | "y",
|
|
32
|
+
* hasInitial: boolean,
|
|
33
|
+
* runtime: any,
|
|
34
|
+
* }} ConfiguredDomainMemberResolution
|
|
12
35
|
* @typedef {{
|
|
13
36
|
* param: string,
|
|
14
37
|
* encoding: "x" | "y",
|
|
@@ -19,20 +42,20 @@ export function isSelectionDomainRef(domain: any): domain is SelectionDomainRef;
|
|
|
19
42
|
export default class DomainPlanner {
|
|
20
43
|
/**
|
|
21
44
|
* @param {object} options
|
|
22
|
-
* @param {
|
|
23
|
-
* @param {
|
|
24
|
-
* @param {
|
|
45
|
+
* @param {ScaleMembersGetter} options.getActiveMembers Active shared-scale members used for configured domain planning.
|
|
46
|
+
* @param {ScaleMembersGetter} [options.getAllMembers] All members, including inactive ones, used for conflict validation.
|
|
47
|
+
* @param {ScaleMembersGetter} [options.getDataMembers] Members used for data-domain extraction; defaults to `getActiveMembers`.
|
|
25
48
|
* @param {() => import("../spec/channel.js").Type} options.getType
|
|
26
|
-
* @param {
|
|
27
|
-
* @param {
|
|
49
|
+
* @param {GetLocusExtent} options.getLocusExtent
|
|
50
|
+
* @param {FromComplexInterval} options.fromComplexInterval
|
|
28
51
|
*/
|
|
29
|
-
constructor({
|
|
30
|
-
|
|
31
|
-
getAllMembers?:
|
|
32
|
-
getDataMembers?:
|
|
52
|
+
constructor({ getActiveMembers, getAllMembers, getDataMembers, getType, getLocusExtent, fromComplexInterval, }: {
|
|
53
|
+
getActiveMembers: ScaleMembersGetter;
|
|
54
|
+
getAllMembers?: ScaleMembersGetter;
|
|
55
|
+
getDataMembers?: ScaleMembersGetter;
|
|
33
56
|
getType: () => import("../spec/channel.js").Type;
|
|
34
|
-
getLocusExtent:
|
|
35
|
-
fromComplexInterval:
|
|
57
|
+
getLocusExtent: GetLocusExtent;
|
|
58
|
+
fromComplexInterval: FromComplexInterval;
|
|
36
59
|
});
|
|
37
60
|
/**
|
|
38
61
|
* @returns {any[]}
|
|
@@ -101,7 +124,30 @@ export type DomainArray = import("../utils/domainArray.js").DomainArray;
|
|
|
101
124
|
export type ComplexDomain = import("../spec/scale.js").ComplexDomain;
|
|
102
125
|
export type ScalarDomain = import("../spec/scale.js").ScalarDomain;
|
|
103
126
|
export type SelectionDomainRef = import("../spec/scale.js").SelectionDomainRef;
|
|
127
|
+
export type ExprRef = import("../spec/parameter.js").ExprRef;
|
|
104
128
|
export type ScaleResolutionMember = import("./scaleResolution.js").ScaleResolutionMember;
|
|
129
|
+
export type ScaleMembersGetter = () => Set<ScaleResolutionMember>;
|
|
130
|
+
export type FromComplexInterval = (interval: ScalarDomain | ComplexDomain) => number[];
|
|
131
|
+
export type GetLocusExtent = (assembly: import("../spec/scale.js").Scale["assembly"] | undefined) => number[];
|
|
132
|
+
export type ConfiguredDomainResolutionState = {
|
|
133
|
+
domains: DomainArray[];
|
|
134
|
+
selectionRef: SelectionDomainLinkInfo | undefined;
|
|
135
|
+
selectionRuntime: any;
|
|
136
|
+
selectionDescription: string | undefined;
|
|
137
|
+
hasLiteralDomain: boolean;
|
|
138
|
+
};
|
|
139
|
+
export type ConfiguredDomainMemberResolution = {
|
|
140
|
+
kind: "literal";
|
|
141
|
+
domain: DomainArray;
|
|
142
|
+
} | {
|
|
143
|
+
kind: "selection";
|
|
144
|
+
domain: DomainArray | undefined;
|
|
145
|
+
description: string;
|
|
146
|
+
param: string;
|
|
147
|
+
encoding: "x" | "y";
|
|
148
|
+
hasInitial: boolean;
|
|
149
|
+
runtime: any;
|
|
150
|
+
};
|
|
105
151
|
export type SelectionDomainLinkInfo = {
|
|
106
152
|
param: string;
|
|
107
153
|
encoding: "x" | "y";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domainPlanner.d.ts","sourceRoot":"","sources":["../../../src/scales/domainPlanner.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"domainPlanner.d.ts","sourceRoot":"","sources":["../../../src/scales/domainPlanner.js"],"names":[],"mappings":"AAooBA;;;GAGG;AACH,6CAHW,GAAG,GACD,MAAM,IAAI,kBAAkB,CASxC;AAhnBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH;IAiCI;;;;;;;;OAQG;IACH,gHAPG;QAAoC,gBAAgB,EAA5C,kBAAkB;QACW,aAAa,GAA1C,kBAAkB;QACW,cAAc,GAA3C,kBAAkB;QAC+B,OAAO,EAAxD,MAAM,OAAO,oBAAoB,EAAE,IAAI;QACf,cAAc,EAAtC,cAAc;QACe,mBAAmB,EAAhD,mBAAmB;KAC7B,EAeA;IAED;;OAEG;IACH,6BAFa,GAAG,EAAE,CAIjB;IAED;;OAEG;IACH,8BAFW;QAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;KAAE,WAI/C;IAED,wCAGC;IAED;;OAEG;IACH,2CAFa,uBAAuB,GAAG,SAAS,CAS/C;IAED;;;MAUC;IAED,mCAIC;IAED;;;;;;OAMG;IACH,qCAJW,OAAO,kBACP,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,GAC1C,GAAG,EAAE,CAYjB;IAED;;;;;;;OAOG;IACH,iDALW,OAAO,kBACP,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,YAC5C;QAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,GAAG,EAAE,CAYjB;IAED;;;;;OAKG;IACH,8BAHW;QAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;KAAE,GACpC,WAAW,CA8BtB;IAED;;;;OAIG;IACH,iBAFY,WAAW,GAAG,SAAS,CAQlC;IAED;;;;;OAKG;IACH,4BALW,OAAO,qBAAqB,EAAE,SAAS,wBACvC,OAAO,mBACP,GAAG,EAAE,GACH,OAAO,CAgBnB;;CAkCJ;0BA7RY,OAAO,yBAAyB,EAAE,WAAW;4BAC7C,OAAO,kBAAkB,EAAE,aAAa;2BACxC,OAAO,kBAAkB,EAAE,YAAY;iCACvC,OAAO,kBAAkB,EAAE,kBAAkB;sBAC7C,OAAO,sBAAsB,EAAE,OAAO;oCACtC,OAAO,sBAAsB,EAAE,qBAAqB;iCACpD,MAAM,GAAG,CAAC,qBAAqB,CAAC;kCAChC,CAAC,QAAQ,EAAE,YAAY,GAAG,aAAa,KAAK,MAAM,EAAE;6BACpD,CAAC,QAAQ,EAAE,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,SAAS,KAAK,MAAM,EAAE;8CAChF;IACR,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,YAAY,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAClD,gBAAgB,EAAE,GAAG,CAAC;IACtB,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,gBAAgB,EAAE,OAAO,CAAC;CAC3B;+CACS;IACR,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;CACrB,GAAG;IACF,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,GAAG,GAAG,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC;CACd;sCACS;IACR,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,GAAG,GAAG,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC;CACd"}
|