@genome-spy/core 0.48.1 → 0.49.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 +7485 -7097
- package/dist/bundle/index.js +124 -111
- package/dist/schema.json +838 -344
- package/dist/src/data/collector.d.ts +10 -8
- package/dist/src/data/collector.d.ts.map +1 -1
- package/dist/src/data/collector.js +131 -33
- package/dist/src/data/collector.test.d.ts +2 -0
- package/dist/src/data/collector.test.d.ts.map +1 -0
- package/dist/src/data/collector.test.js +55 -1
- package/dist/src/data/dataFlow.test.d.ts +2 -0
- package/dist/src/data/dataFlow.test.d.ts.map +1 -0
- package/dist/src/data/flow.test.d.ts +2 -0
- package/dist/src/data/flow.test.d.ts.map +1 -0
- package/dist/src/data/flow.test.js +19 -14
- package/dist/src/data/flowNode.test.d.ts +2 -0
- package/dist/src/data/flowNode.test.d.ts.map +1 -0
- package/dist/src/data/flowOptimizer.test.d.ts +2 -0
- package/dist/src/data/flowOptimizer.test.d.ts.map +1 -0
- package/dist/src/data/flowOptimizer.test.js +9 -10
- package/dist/src/data/formats/fasta.test.d.ts +2 -0
- package/dist/src/data/formats/fasta.test.d.ts.map +1 -0
- package/dist/src/data/sources/inlineSource.test.d.ts +2 -0
- package/dist/src/data/sources/inlineSource.test.d.ts.map +1 -0
- package/dist/src/data/sources/inlineSource.test.js +23 -16
- package/dist/src/data/sources/sequenceSource.test.d.ts +2 -0
- package/dist/src/data/sources/sequenceSource.test.d.ts.map +1 -0
- package/dist/src/data/sources/sequenceSource.test.js +59 -42
- package/dist/src/data/transforms/clone.test.d.ts +2 -0
- package/dist/src/data/transforms/clone.test.d.ts.map +1 -0
- package/dist/src/data/transforms/coverage.test.d.ts +2 -0
- package/dist/src/data/transforms/coverage.test.d.ts.map +1 -0
- package/dist/src/data/transforms/coverage.test.js +1 -1
- package/dist/src/data/transforms/filter.d.ts +10 -0
- package/dist/src/data/transforms/filter.d.ts.map +1 -1
- package/dist/src/data/transforms/filter.js +30 -1
- package/dist/src/data/transforms/filter.test.d.ts +2 -0
- package/dist/src/data/transforms/filter.test.d.ts.map +1 -0
- package/dist/src/data/transforms/flatten.test.d.ts +2 -0
- package/dist/src/data/transforms/flatten.test.d.ts.map +1 -0
- package/dist/src/data/transforms/flatten.test.js +10 -7
- package/dist/src/data/transforms/flattenDelimited.test.d.ts +2 -0
- package/dist/src/data/transforms/flattenDelimited.test.d.ts.map +1 -0
- package/dist/src/data/transforms/flattenDelimited.test.js +16 -13
- package/dist/src/data/transforms/flattenSequence.test.d.ts +2 -0
- package/dist/src/data/transforms/flattenSequence.test.d.ts.map +1 -0
- package/dist/src/data/transforms/flattenSequence.test.js +1 -1
- package/dist/src/data/transforms/formula.test.d.ts +2 -0
- package/dist/src/data/transforms/formula.test.d.ts.map +1 -0
- package/dist/src/data/transforms/formula.test.js +1 -1
- package/dist/src/data/transforms/identifier.d.ts +1 -1
- package/dist/src/data/transforms/identifier.d.ts.map +1 -1
- package/dist/src/data/transforms/identifier.js +2 -2
- package/dist/src/data/transforms/identifier.test.d.ts +2 -0
- package/dist/src/data/transforms/identifier.test.d.ts.map +1 -0
- package/dist/src/data/transforms/identifier.test.js +23 -14
- package/dist/src/data/transforms/pileup.test.d.ts +2 -0
- package/dist/src/data/transforms/pileup.test.d.ts.map +1 -0
- package/dist/src/data/transforms/project.test.d.ts +2 -0
- package/dist/src/data/transforms/project.test.d.ts.map +1 -0
- package/dist/src/data/transforms/project.test.js +1 -1
- package/dist/src/data/transforms/regexExtract.test.d.ts +2 -0
- package/dist/src/data/transforms/regexExtract.test.d.ts.map +1 -0
- package/dist/src/data/transforms/regexExtract.test.js +6 -3
- package/dist/src/data/transforms/regexFold.test.d.ts +2 -0
- package/dist/src/data/transforms/regexFold.test.d.ts.map +1 -0
- package/dist/src/data/transforms/sample.test.d.ts +2 -0
- package/dist/src/data/transforms/sample.test.d.ts.map +1 -0
- package/dist/src/data/transforms/stack.test.d.ts +2 -0
- package/dist/src/data/transforms/stack.test.d.ts.map +1 -0
- package/dist/src/data/transforms/stack.test.js +8 -8
- package/dist/src/encoder/accessor.d.ts +17 -14
- package/dist/src/encoder/accessor.d.ts.map +1 -1
- package/dist/src/encoder/accessor.js +127 -56
- package/dist/src/encoder/accessor.test.d.ts +2 -0
- package/dist/src/encoder/accessor.test.d.ts.map +1 -0
- package/dist/src/encoder/accessor.test.js +145 -31
- package/dist/src/encoder/encoder.d.ts +26 -13
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/encoder/encoder.js +98 -114
- package/dist/src/encoder/encoder.test.d.ts +2 -0
- package/dist/src/encoder/encoder.test.d.ts.map +1 -0
- package/dist/src/encoder/encoder.test.js +85 -82
- package/dist/src/fonts/bmFontManager.d.ts.map +1 -1
- package/dist/src/fonts/bmFontManager.js +10 -4
- package/dist/src/genome/genome.test.d.ts +2 -0
- package/dist/src/genome/genome.test.d.ts.map +1 -0
- package/dist/src/genome/scaleIndex.test.d.ts +2 -0
- package/dist/src/genome/scaleIndex.test.d.ts.map +1 -0
- package/dist/src/genome/scaleLocus.test.d.ts +2 -0
- package/dist/src/genome/scaleLocus.test.d.ts.map +1 -0
- package/dist/src/genomeSpy.d.ts +3 -2
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +29 -21
- package/dist/src/gl/dataToVertices.d.ts +5 -7
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.js +42 -30
- package/dist/src/gl/glslScaleGenerator.d.ts +84 -15
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.js +260 -73
- package/dist/src/gl/includes/picking.vertex.glsl.js +1 -1
- package/dist/src/marks/link.common.glsl.js +1 -1
- package/dist/src/marks/link.d.ts.map +1 -1
- package/dist/src/marks/link.js +10 -0
- package/dist/src/marks/link.vertex.glsl.js +1 -1
- package/dist/src/marks/mark.d.ts +6 -9
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +212 -95
- package/dist/src/marks/point.d.ts.map +1 -1
- package/dist/src/marks/point.js +5 -1
- package/dist/src/marks/rect.d.ts.map +1 -1
- package/dist/src/marks/rect.js +9 -4
- package/dist/src/marks/rule.d.ts.map +1 -1
- package/dist/src/marks/rule.js +4 -0
- package/dist/src/marks/text.d.ts.map +1 -1
- package/dist/src/marks/text.js +5 -1
- package/dist/src/scale/scale.test.d.ts +2 -0
- package/dist/src/scale/scale.test.d.ts.map +1 -0
- package/dist/src/scale/scale.test.js +2 -0
- package/dist/src/scale/ticks.test.d.ts +2 -0
- package/dist/src/scale/ticks.test.d.ts.map +1 -0
- package/dist/src/scale/ticks.test.js +6 -0
- package/dist/src/selection/selection.d.ts +39 -0
- package/dist/src/selection/selection.d.ts.map +1 -0
- package/dist/src/selection/selection.js +78 -0
- package/dist/src/spec/channel.d.ts +137 -83
- package/dist/src/spec/mark.d.ts +9 -0
- package/dist/src/spec/parameter.d.ts +112 -3
- package/dist/src/spec/root.d.ts +0 -1
- package/dist/src/spec/transform.d.ts +19 -1
- package/dist/src/spec/view.d.ts +3 -3
- package/dist/src/tooltip/dataTooltipHandler.js +1 -1
- package/dist/src/types/encoder.d.ts +80 -26
- package/dist/src/types/rendering.d.ts +1 -0
- package/dist/src/types/selectionTypes.d.ts +44 -0
- package/dist/src/types/viewContext.d.ts +1 -4
- package/dist/src/utils/addBaseUrl.test.d.ts +2 -0
- package/dist/src/utils/addBaseUrl.test.d.ts.map +1 -0
- package/dist/src/utils/animator.d.ts.map +1 -1
- package/dist/src/utils/animator.js +3 -1
- package/dist/src/utils/binnedIndex.test.d.ts +2 -0
- package/dist/src/utils/binnedIndex.test.d.ts.map +1 -0
- package/dist/src/utils/cloner.test.d.ts +2 -0
- package/dist/src/utils/cloner.test.d.ts.map +1 -0
- package/dist/src/utils/coalesce.test.d.ts +2 -0
- package/dist/src/utils/coalesce.test.d.ts.map +1 -0
- package/dist/src/utils/concatIterables.test.d.ts +2 -0
- package/dist/src/utils/concatIterables.test.d.ts.map +1 -0
- package/dist/src/utils/domainArray.test.d.ts +2 -0
- package/dist/src/utils/domainArray.test.d.ts.map +1 -0
- package/dist/src/utils/expression.d.ts +2 -2
- package/dist/src/utils/expression.d.ts.map +1 -1
- package/dist/src/utils/expression.js +11 -2
- package/dist/src/utils/indexer.test.d.ts +2 -0
- package/dist/src/utils/indexer.test.d.ts.map +1 -0
- package/dist/src/utils/inertia.d.ts.map +1 -1
- package/dist/src/utils/inertia.js +4 -0
- package/dist/src/utils/inputBinding.d.ts.map +1 -1
- package/dist/src/utils/inputBinding.js +4 -0
- package/dist/src/utils/iterateNestedMaps.d.ts +4 -3
- package/dist/src/utils/iterateNestedMaps.d.ts.map +1 -1
- package/dist/src/utils/iterateNestedMaps.js +3 -2
- package/dist/src/utils/iterateNestedMaps.test.d.ts +2 -0
- package/dist/src/utils/iterateNestedMaps.test.d.ts.map +1 -0
- package/dist/src/utils/kWayMerge.test.d.ts +2 -0
- package/dist/src/utils/kWayMerge.test.d.ts.map +1 -0
- package/dist/src/utils/mergeObjects.test.d.ts +2 -0
- package/dist/src/utils/mergeObjects.test.d.ts.map +1 -0
- package/dist/src/utils/numberExtractor.test.d.ts +2 -0
- package/dist/src/utils/numberExtractor.test.d.ts.map +1 -0
- package/dist/src/utils/propertyCacher.test.d.ts +2 -0
- package/dist/src/utils/propertyCacher.test.d.ts.map +1 -0
- package/dist/src/utils/propertyCoalescer.test.d.ts +2 -0
- package/dist/src/utils/propertyCoalescer.test.d.ts.map +1 -0
- package/dist/src/utils/propertyCoalescer.test.js +3 -0
- package/dist/src/utils/radixSort.d.ts +9 -0
- package/dist/src/utils/radixSort.d.ts.map +1 -0
- package/dist/src/utils/radixSort.js +130 -0
- package/dist/src/utils/radixSort.test.d.ts +2 -0
- package/dist/src/utils/radixSort.test.d.ts.map +1 -0
- package/dist/src/utils/radixSort.test.js +51 -0
- package/dist/src/utils/reservationMap.test.d.ts +2 -0
- package/dist/src/utils/reservationMap.test.d.ts.map +1 -0
- package/dist/src/utils/ringBuffer.test.d.ts +2 -0
- package/dist/src/utils/ringBuffer.test.d.ts.map +1 -0
- package/dist/src/utils/topK.test.d.ts +2 -0
- package/dist/src/utils/topK.test.d.ts.map +1 -0
- package/dist/src/utils/trees.test.d.ts +2 -0
- package/dist/src/utils/trees.test.d.ts.map +1 -0
- package/dist/src/utils/trees.test.js +8 -3
- package/dist/src/utils/variableTools.test.d.ts +2 -0
- package/dist/src/utils/variableTools.test.d.ts.map +1 -0
- package/dist/src/view/axisResolution.d.ts +19 -6
- package/dist/src/view/axisResolution.d.ts.map +1 -1
- package/dist/src/view/axisResolution.js +16 -7
- package/dist/src/view/axisResolution.test.d.ts +2 -0
- package/dist/src/view/axisResolution.test.d.ts.map +1 -0
- package/dist/src/view/axisResolution.test.js +16 -11
- package/dist/src/view/facetView.d.ts +1 -1
- package/dist/src/view/facetView.d.ts.map +1 -1
- 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 +34 -5
- package/dist/src/view/flowBuilder.test.d.ts +2 -0
- package/dist/src/view/flowBuilder.test.d.ts.map +1 -0
- package/dist/src/view/gridView.d.ts +0 -6
- package/dist/src/view/gridView.d.ts.map +1 -1
- package/dist/src/view/layerView.d.ts +0 -6
- package/dist/src/view/layerView.d.ts.map +1 -1
- package/dist/src/view/layout/flexLayout.test.d.ts +2 -0
- package/dist/src/view/layout/flexLayout.test.d.ts.map +1 -0
- package/dist/src/view/layout/grid.test.d.ts +2 -0
- package/dist/src/view/layout/grid.test.d.ts.map +1 -0
- package/dist/src/view/layout/rectangle.test.d.ts +2 -0
- package/dist/src/view/layout/rectangle.test.d.ts.map +1 -0
- package/dist/src/view/paramMediator.d.ts +32 -5
- package/dist/src/view/paramMediator.d.ts.map +1 -1
- package/dist/src/view/paramMediator.js +97 -9
- package/dist/src/view/paramMediator.test.d.ts +2 -0
- package/dist/src/view/paramMediator.test.d.ts.map +1 -0
- package/dist/src/view/paramMediator.test.js +17 -1
- package/dist/src/view/scaleResolution.d.ts +17 -9
- package/dist/src/view/scaleResolution.d.ts.map +1 -1
- package/dist/src/view/scaleResolution.js +51 -34
- package/dist/src/view/scaleResolution.test.d.ts +2 -0
- package/dist/src/view/scaleResolution.test.d.ts.map +1 -0
- package/dist/src/view/scaleResolution.test.js +2 -0
- package/dist/src/view/testUtils.d.ts.map +1 -1
- package/dist/src/view/testUtils.js +15 -3
- package/dist/src/view/unitView.d.ts +5 -15
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +81 -101
- package/dist/src/view/view.d.ts +1 -1
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.test.d.ts +2 -0
- package/dist/src/view/view.test.d.ts.map +1 -0
- package/dist/src/view/view.test.js +73 -55
- package/dist/src/view/viewFactory.test.d.ts +2 -0
- package/dist/src/view/viewFactory.test.d.ts.map +1 -0
- package/dist/src/view/viewFactory.test.js +2 -2
- package/dist/src/view/zoom.js +2 -2
- package/package.json +5 -2
|
@@ -20,12 +20,6 @@ export default class UnitView extends View {
|
|
|
20
20
|
spec: import("../spec/view.js").UnitSpec;
|
|
21
21
|
/** @type {import("../marks/mark.js").default} */
|
|
22
22
|
mark: import("../marks/mark.js").default;
|
|
23
|
-
/**
|
|
24
|
-
* @param {import("./renderingContext/viewRenderingContext.js").default} context
|
|
25
|
-
* @param {import("./layout/rectangle.js").default} coords
|
|
26
|
-
* @param {import("../types/rendering.js").RenderingOptions} [options]
|
|
27
|
-
*/
|
|
28
|
-
render(context: import("./renderingContext/viewRenderingContext.js").default, coords: import("./layout/rectangle.js").default, options?: import("../types/rendering.js").RenderingOptions): void;
|
|
29
23
|
getMarkType(): import("../spec/mark.js").MarkType;
|
|
30
24
|
/**
|
|
31
25
|
* Pulls scales and axes up in the view hierarcy according to the resolution rules, using dataParents.
|
|
@@ -35,21 +29,16 @@ export default class UnitView extends View {
|
|
|
35
29
|
*/
|
|
36
30
|
resolve(type?: import("../spec/view.js").ResolutionTarget): void;
|
|
37
31
|
/**
|
|
32
|
+
* Returns an accessor that accesses a field or an evaluated expression,
|
|
33
|
+
* if there is one.
|
|
38
34
|
*
|
|
39
35
|
* @param {Channel} channel
|
|
40
36
|
*/
|
|
41
|
-
|
|
37
|
+
getDataAccessor(channel: import("../spec/channel.js").Channel): import("../types/encoder.js").Accessor<import("../spec/channel.js").Scalar>;
|
|
42
38
|
/**
|
|
43
39
|
* Returns a collector that is associated with this view.
|
|
44
40
|
*/
|
|
45
41
|
getCollector(): import("../data/collector.js").default;
|
|
46
|
-
/**
|
|
47
|
-
* Returns the domain of the specified channel of this domain/mark.
|
|
48
|
-
*
|
|
49
|
-
* @param {import("../spec/channel.js").ChannelWithScale} channel A primary channel
|
|
50
|
-
* @returns {DomainArray}
|
|
51
|
-
*/
|
|
52
|
-
getConfiguredDomain(channel: import("../spec/channel.js").ChannelWithScale): import("../utils/domainArray.js").DomainArray;
|
|
53
42
|
/**
|
|
54
43
|
* Extracts the domain from the data.
|
|
55
44
|
*
|
|
@@ -61,9 +50,10 @@ export default class UnitView extends View {
|
|
|
61
50
|
* (with aggregate and extent).
|
|
62
51
|
*
|
|
63
52
|
* @param {Channel} channel
|
|
53
|
+
* @param {import("../spec/channel.js").Type} type
|
|
64
54
|
* @returns {DomainArray}
|
|
65
55
|
*/
|
|
66
|
-
extractDataDomain(channel: import("../spec/channel.js").Channel): import("../utils/domainArray.js").DomainArray;
|
|
56
|
+
extractDataDomain(channel: import("../spec/channel.js").Channel, type: import("../spec/channel.js").Type): import("../utils/domainArray.js").DomainArray;
|
|
67
57
|
getZoomLevel(): number;
|
|
68
58
|
/**
|
|
69
59
|
* @param {string} channel
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unitView.d.ts","sourceRoot":"","sources":["../../../src/view/unitView.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"unitView.d.ts","sourceRoot":"","sources":["../../../src/view/unitView.js"],"names":[],"mappings":"AAsBA;;;;GAIG;AACH;QAHkB,MAAM,GAAE,cAAc,kBAAkB,EAAE,OAAO;EASjE;AAEF;IAeI;;;;;;;;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,EAiCzC;IA5BG,yCAAgB;IAIZ,iDAAiD;IACjD,MADW,OAAO,kBAAkB,EAAE,OAAO,CACnB;IAsFlC,kDAIC;IAED;;;;;OAKG;IACH,iEAmFC;IAED;;;;;OAKG;IACH,4IAEC;IAkBD;;OAEG;IACH,uDAEC;IAED;;;;;;;;;;;;;OAaG;IACH,uEAHW,OAAO,oBAAoB,EAAE,IAAI,iDAqB3C;IAED,uBAQC;IAgBD;;;;OAIG;IACH,8BAJW,MAAM,+DAEJ,OAAO,iBAAiB,EAAE,kBAAkB,CAKxD;;CACJ;iBA7UgB,WAAW"}
|
|
@@ -6,8 +6,6 @@ import TextMark from "../marks/text.js";
|
|
|
6
6
|
|
|
7
7
|
import ScaleResolution from "./scaleResolution.js";
|
|
8
8
|
import {
|
|
9
|
-
isSecondaryChannel,
|
|
10
|
-
secondaryChannels,
|
|
11
9
|
isPositionalChannel,
|
|
12
10
|
isChannelDefWithScale,
|
|
13
11
|
primaryPositionalChannels,
|
|
@@ -18,6 +16,9 @@ import {
|
|
|
18
16
|
import createDomain from "../utils/domainArray.js";
|
|
19
17
|
import AxisResolution from "./axisResolution.js";
|
|
20
18
|
import View from "./view.js";
|
|
19
|
+
import { createSinglePointSelection } from "../selection/selection.js";
|
|
20
|
+
import { isString } from "vega-util";
|
|
21
|
+
import { UNIQUE_ID_KEY } from "../data/transforms/identifier.js";
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
24
|
*
|
|
@@ -37,6 +38,7 @@ export default class UnitView extends View {
|
|
|
37
38
|
* @typedef {import("../spec/channel.js").Channel} Channel
|
|
38
39
|
* @typedef {import("../utils/domainArray.js").DomainArray} DomainArray
|
|
39
40
|
* @typedef {import("../spec/view.js").ResolutionTarget} ResolutionTarget
|
|
41
|
+
* @typedef {((datum: import("../data/flowNode.js").Datum) => import("../spec/channel.js").Scalar) & { fieldDef: import("../spec/channel.js").FieldDef}} FieldAccessor
|
|
40
42
|
*
|
|
41
43
|
*/
|
|
42
44
|
|
|
@@ -84,6 +86,52 @@ export default class UnitView extends View {
|
|
|
84
86
|
);
|
|
85
87
|
|
|
86
88
|
this.needsAxes = { x: true, y: true };
|
|
89
|
+
|
|
90
|
+
this.#setupPointSelection();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
#setupPointSelection() {
|
|
94
|
+
for (const [name, param] of this.paramMediator.paramConfigs) {
|
|
95
|
+
if (!("select" in param)) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const select = param.select;
|
|
100
|
+
const type = isString(select) ? select : select.type;
|
|
101
|
+
if (type === "point") {
|
|
102
|
+
// Handle projection-free point selections
|
|
103
|
+
|
|
104
|
+
const none = -1;
|
|
105
|
+
let lastId = none;
|
|
106
|
+
|
|
107
|
+
const setter = this.paramMediator.getSetter(name);
|
|
108
|
+
|
|
109
|
+
const getHoveredDatum = () => {
|
|
110
|
+
const h = this.context.getCurrentHover();
|
|
111
|
+
return h?.mark?.unitView === this ? h.datum : null;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const on =
|
|
115
|
+
!isString(select) && "on" in select ? select.on : "click";
|
|
116
|
+
|
|
117
|
+
this.addInteractionEventListener(
|
|
118
|
+
["mouseover", "pointerover"].includes(on)
|
|
119
|
+
? "mousemove"
|
|
120
|
+
: "click",
|
|
121
|
+
(rect, event) => {
|
|
122
|
+
const datum = getHoveredDatum();
|
|
123
|
+
const id = datum ? datum[UNIQUE_ID_KEY] : none;
|
|
124
|
+
if (id != lastId) {
|
|
125
|
+
lastId = id;
|
|
126
|
+
const selection = createSinglePointSelection(
|
|
127
|
+
getHoveredDatum()
|
|
128
|
+
);
|
|
129
|
+
setter(selection);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
87
135
|
}
|
|
88
136
|
|
|
89
137
|
/**
|
|
@@ -172,10 +220,11 @@ export default class UnitView extends View {
|
|
|
172
220
|
targetChannel
|
|
173
221
|
);
|
|
174
222
|
}
|
|
175
|
-
view.resolutions[type][targetChannel].pushUnitView(
|
|
176
|
-
this,
|
|
177
|
-
channel
|
|
178
|
-
|
|
223
|
+
view.resolutions[type][targetChannel].pushUnitView({
|
|
224
|
+
view: this,
|
|
225
|
+
channel,
|
|
226
|
+
channelDef,
|
|
227
|
+
});
|
|
179
228
|
} else if (type == "scale" && isChannelWithScale(channel)) {
|
|
180
229
|
if (!view.resolutions[type][targetChannel]) {
|
|
181
230
|
const resolution = new ScaleResolution(targetChannel);
|
|
@@ -189,27 +238,24 @@ export default class UnitView extends View {
|
|
|
189
238
|
);
|
|
190
239
|
});
|
|
191
240
|
}
|
|
192
|
-
view.resolutions[type][targetChannel].pushUnitView(
|
|
193
|
-
this,
|
|
194
|
-
channel
|
|
195
|
-
|
|
241
|
+
view.resolutions[type][targetChannel].pushUnitView({
|
|
242
|
+
view: this,
|
|
243
|
+
channel,
|
|
244
|
+
channelDef,
|
|
245
|
+
dataDomainSource: this.extractDataDomain.bind(this),
|
|
246
|
+
});
|
|
196
247
|
}
|
|
197
248
|
}
|
|
198
249
|
}
|
|
199
250
|
|
|
200
251
|
/**
|
|
252
|
+
* Returns an accessor that accesses a field or an evaluated expression,
|
|
253
|
+
* if there is one.
|
|
201
254
|
*
|
|
202
255
|
* @param {Channel} channel
|
|
203
256
|
*/
|
|
204
|
-
|
|
205
|
-
return this.
|
|
206
|
-
const encoding = this.mark.encoding; // Mark provides encodings with defaults and possible modifications
|
|
207
|
-
if (encoding && encoding[channel]) {
|
|
208
|
-
return this.context.accessorFactory.createAccessor(
|
|
209
|
-
encoding[channel]
|
|
210
|
-
);
|
|
211
|
-
}
|
|
212
|
-
});
|
|
257
|
+
getDataAccessor(channel) {
|
|
258
|
+
return this.mark.encoders[channel]?.dataAccessor;
|
|
213
259
|
}
|
|
214
260
|
|
|
215
261
|
/**
|
|
@@ -220,7 +266,7 @@ export default class UnitView extends View {
|
|
|
220
266
|
*/
|
|
221
267
|
getFacetAccessor(whoIsAsking) {
|
|
222
268
|
// TODO: Rewrite, call getFacetFields
|
|
223
|
-
const sampleAccessor = this.
|
|
269
|
+
const sampleAccessor = this.getDataAccessor("sample");
|
|
224
270
|
if (sampleAccessor) {
|
|
225
271
|
return sampleAccessor;
|
|
226
272
|
}
|
|
@@ -235,48 +281,6 @@ export default class UnitView extends View {
|
|
|
235
281
|
return this.context.dataFlow.findCollectorByKey(this);
|
|
236
282
|
}
|
|
237
283
|
|
|
238
|
-
/**
|
|
239
|
-
* @param {Channel} channel A primary channel
|
|
240
|
-
*/
|
|
241
|
-
#validateDomainQuery(channel) {
|
|
242
|
-
if (isSecondaryChannel(channel)) {
|
|
243
|
-
throw new Error(
|
|
244
|
-
`getDomain(${channel}), must only be called for primary channels!`
|
|
245
|
-
);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
const channelDef = this.mark.encoding[channel];
|
|
249
|
-
// TODO: Broken. Fix.
|
|
250
|
-
if (!isChannelDefWithScale(channelDef)) {
|
|
251
|
-
throw new Error("The channel has no scale, cannot get domain!");
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
return channelDef;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
* Returns the domain of the specified channel of this domain/mark.
|
|
259
|
-
*
|
|
260
|
-
* @param {import("../spec/channel.js").ChannelWithScale} channel A primary channel
|
|
261
|
-
* @returns {DomainArray}
|
|
262
|
-
*/
|
|
263
|
-
getConfiguredDomain(channel) {
|
|
264
|
-
const channelDef = this.#validateDomainQuery(channel);
|
|
265
|
-
|
|
266
|
-
const specDomain =
|
|
267
|
-
channelDef && channelDef.scale && channelDef.scale.domain;
|
|
268
|
-
if (specDomain) {
|
|
269
|
-
const scaleResolution = this.getScaleResolution(
|
|
270
|
-
channelDef.resolutionChannel ?? channel
|
|
271
|
-
);
|
|
272
|
-
return createDomain(
|
|
273
|
-
channelDef.type ?? "nominal",
|
|
274
|
-
// Chrom/pos must be linearized first
|
|
275
|
-
scaleResolution.fromComplexInterval(specDomain)
|
|
276
|
-
);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
|
|
280
284
|
/**
|
|
281
285
|
* Extracts the domain from the data.
|
|
282
286
|
*
|
|
@@ -288,49 +292,25 @@ export default class UnitView extends View {
|
|
|
288
292
|
* (with aggregate and extent).
|
|
289
293
|
*
|
|
290
294
|
* @param {Channel} channel
|
|
295
|
+
* @param {import("../spec/channel.js").Type} type
|
|
291
296
|
* @returns {DomainArray}
|
|
292
297
|
*/
|
|
293
|
-
extractDataDomain(channel) {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
this.context.accessorFactory.createAccessor(encodingSpec);
|
|
307
|
-
if (accessor) {
|
|
308
|
-
domain = createDomain(type);
|
|
309
|
-
|
|
310
|
-
if (accessor.constant) {
|
|
311
|
-
domain.extend(accessor({}));
|
|
312
|
-
} else {
|
|
313
|
-
const collector = this.getCollector();
|
|
314
|
-
if (collector?.completed) {
|
|
315
|
-
collector.visitData((d) =>
|
|
316
|
-
domain.extend(accessor(d))
|
|
317
|
-
);
|
|
318
|
-
}
|
|
298
|
+
extractDataDomain(channel, type) {
|
|
299
|
+
/** @type {DomainArray} */
|
|
300
|
+
let domain = createDomain(type);
|
|
301
|
+
|
|
302
|
+
(this.mark.encoders[channel]?.accessors ?? [])
|
|
303
|
+
.filter((a) => a.scaleChannel)
|
|
304
|
+
.forEach((accessor) => {
|
|
305
|
+
if (accessor.constant) {
|
|
306
|
+
domain.extend(accessor({}));
|
|
307
|
+
} else {
|
|
308
|
+
const collector = this.getCollector();
|
|
309
|
+
if (collector?.completed) {
|
|
310
|
+
collector.visitData((d) => domain.extend(accessor(d)));
|
|
319
311
|
}
|
|
320
312
|
}
|
|
321
|
-
}
|
|
322
|
-
return domain;
|
|
323
|
-
};
|
|
324
|
-
|
|
325
|
-
let domain = extract(channel);
|
|
326
|
-
|
|
327
|
-
const secondaryChannel = secondaryChannels[channel];
|
|
328
|
-
if (secondaryChannel) {
|
|
329
|
-
const secondaryDomain = extract(secondaryChannel);
|
|
330
|
-
if (secondaryDomain) {
|
|
331
|
-
domain.extendAll(secondaryDomain);
|
|
332
|
-
}
|
|
333
|
-
}
|
|
313
|
+
});
|
|
334
314
|
|
|
335
315
|
return domain;
|
|
336
316
|
}
|
package/dist/src/view/view.d.ts
CHANGED
|
@@ -205,7 +205,7 @@ export default class View {
|
|
|
205
205
|
* pass. The order is depth first, pre order.
|
|
206
206
|
*/
|
|
207
207
|
onBeforeRender(): void;
|
|
208
|
-
render(context:
|
|
208
|
+
render(context: import("./renderingContext/viewRenderingContext.js").default, coords: import("./layout/rectangle.js").default, options?: import("../types/rendering.js").RenderingOptions): void;
|
|
209
209
|
/**
|
|
210
210
|
* Returns the encodings specified in this view combined with the inherited
|
|
211
211
|
* encodings. However, this does not contain any defaults or inferred/adjusted/fixed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"AA0BA,oBAAoB;AACpB,sCAAuC;AACvC,0BAA0B;AAC1B,sCAAuC;AAKvC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;IAuBI;;;;;;;;;OASG;IACH,kBARW,OAAO,iBAAiB,EAAE,QAAQ,WAClC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,WAAW,EAmDrB;IAvED;;OAEG;IACH,wBAFmB,MAAM,KAAE,MAAM,CAEQ;IAEzC;;;;;OAKG;IACH,aAFU,IAAI,GAAG,EAAE,OAAO,uBAAuB,EAAE,OAAO,CAAC,CAEX;IAiB5C,mDAAsB;IACtB,mDAAgC;IAChC,iBAA4B;IAC5B,aAA6B;IAC7B,yCAAgB;IAEhB;QACI;;;WAGG;eADO,QAAQ,OAAO,OAAO,oBAAoB,EAAE,gBAAgB,EAAE,OAAO,sBAAsB,EAAE,OAAO,CAAC,CAAC;QAGhH;;;WAGG;cADO,QAAQ,OAAO,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC;MAG1H;IAID;;;;kCAhEE,OAAO;;;;kCAEP,OAAO;MAkER;IAED;;;OAGG;IACH,WAFU,OAAO,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,OAAO,CAAC,CAEzC;IAEvC,4BAA4B;IAC5B,eADW,aAAa,CAGvB;IASL;;;;;OAKG;IACH,sDAEC;IAED,sBAIC;IAED;;;;OAIG;IACH,eAFa,OAAO,CAInB;IAED;;;;;OAKG;IACH,gBAFa,OAAO,CAMnB;IAED;;;;;OAKG;IACH,WAFa,cAAc,CAW1B;IAED;;OAEG;IACH,mBAFa,cAAc,CAkB1B;IAoED,+BAEC;IAED,2BAEC;IAED;;;;;;;;OAQG;IACH,aAFa,OAAO,CAMnB;IAED;;;;;;;OAOG;IACH,uBAFa,MAAM,CAMlB;IAED,wBAKC;IAkBD;;OAEG;IACH,6BAEC;IAED;;OAEG;IACH,2BAEC;IAED;;;;OAIG;IACH,yBAFW,gBAAgB,QAO1B;IAED;;;;OAIG;IACH,2BAHW,MAAM,kBACG,gBAAgB,KAAE,IAAI,QASzC;IAED;;;;;;;;OAQG;IACH,yCANW,OAAO,uBAAuB,EAAE,OAAO,SAEvC,OAAO,8BAA8B,EAAE,OAAO,aAC9C,OAAO,QAUjB;IAED;;;;;;;;;;OAUG;IACH,kCAJW,MAAM,YACN,wBAAwB,eACxB,OAAO,QAajB;IAED;;;;;;;OAOG;IACH,eAJW,OAAO,GACL,WAAW,CAmBvB;IAED;;OAEG;IACH,yBAOC;IAED;;OAEG;IACH,6BASC;IAED;;;OAGG;IACH,uBAEC;
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"AA0BA,oBAAoB;AACpB,sCAAuC;AACvC,0BAA0B;AAC1B,sCAAuC;AAKvC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;IAuBI;;;;;;;;;OASG;IACH,kBARW,OAAO,iBAAiB,EAAE,QAAQ,WAClC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,WAAW,EAmDrB;IAvED;;OAEG;IACH,wBAFmB,MAAM,KAAE,MAAM,CAEQ;IAEzC;;;;;OAKG;IACH,aAFU,IAAI,GAAG,EAAE,OAAO,uBAAuB,EAAE,OAAO,CAAC,CAEX;IAiB5C,mDAAsB;IACtB,mDAAgC;IAChC,iBAA4B;IAC5B,aAA6B;IAC7B,yCAAgB;IAEhB;QACI;;;WAGG;eADO,QAAQ,OAAO,OAAO,oBAAoB,EAAE,gBAAgB,EAAE,OAAO,sBAAsB,EAAE,OAAO,CAAC,CAAC;QAGhH;;;WAGG;cADO,QAAQ,OAAO,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC;MAG1H;IAID;;;;kCAhEE,OAAO;;;;kCAEP,OAAO;MAkER;IAED;;;OAGG;IACH,WAFU,OAAO,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,OAAO,CAAC,CAEzC;IAEvC,4BAA4B;IAC5B,eADW,aAAa,CAGvB;IASL;;;;;OAKG;IACH,sDAEC;IAED,sBAIC;IAED;;;;OAIG;IACH,eAFa,OAAO,CAInB;IAED;;;;;OAKG;IACH,gBAFa,OAAO,CAMnB;IAED;;;;;OAKG;IACH,WAFa,cAAc,CAW1B;IAED;;OAEG;IACH,mBAFa,cAAc,CAkB1B;IAoED,+BAEC;IAED,2BAEC;IAED;;;;;;;;OAQG;IACH,aAFa,OAAO,CAMnB;IAED;;;;;;;OAOG;IACH,uBAFa,MAAM,CAMlB;IAED,wBAKC;IAkBD;;OAEG;IACH,6BAEC;IAED;;OAEG;IACH,2BAEC;IAED;;;;OAIG;IACH,yBAFW,gBAAgB,QAO1B;IAED;;;;OAIG;IACH,2BAHW,MAAM,kBACG,gBAAgB,KAAE,IAAI,QASzC;IAED;;;;;;;;OAQG;IACH,yCANW,OAAO,uBAAuB,EAAE,OAAO,SAEvC,OAAO,8BAA8B,EAAE,OAAO,aAC9C,OAAO,QAUjB;IAED;;;;;;;;;;OAUG;IACH,kCAJW,MAAM,YACN,wBAAwB,eACxB,OAAO,QAajB;IAED;;;;;;;OAOG;IACH,eAJW,OAAO,GACL,WAAW,CAmBvB;IAED;;OAEG;IACH,yBAOC;IAED;;OAEG;IACH,6BASC;IAED;;;OAGG;IACH,uBAEC;IAtbqC,iMAGZ;IAyc1B;;;;;;OAMG;IACH,eAFY,OAAO,oBAAoB,EAAE,QAAQ,CAuBhD;IAED;;;;OAIG;IACH,+BAJW,IAAI,UAEM,MAAM,KAAE,GAAG,CAM/B;IAED;;;;;OAKG;IACH,6BAHW,IAAI,GACF,MAAM,EAAE,CASpB;IAED;;;;;;;;;;;;;;;OAeG;IACH,yBAFY,YAAY,CAIvB;IAED;;OAEG;IACH,4BAFW,OAAO,oBAAoB,EAAE,gBAAgB,0CAWvD;IAED;;OAEG;IACH,2BAFW,OAAO,oBAAoB,EAAE,iBAAiB,yCAWxD;IAED;;;;OAIG;IACH,iCAJW,OAAO,oBAAoB,EAAE,OAAO,GAAG,SAAS,kBAChD,OAAO,iBAAiB,EAAE,gBAAgB,GACxC,OAAO,iBAAiB,EAAE,kBAAkB,CAIxD;IAED;;;;OAIG;IACH,0CAJW,OAAO,oBAAoB,EAAE,OAAO,kBACpC,OAAO,iBAAiB,EAAE,gBAAgB,GACxC,OAAO,iBAAiB,EAAE,kBAAkB,CAQxD;IAED;;;;OAIG;IACH,8BAJW,OAAO,oBAAoB,EAAE,OAAO,kBACpC,OAAO,iBAAiB,EAAE,gBAAgB,GACxC,OAAO,iBAAiB,EAAE,kBAAkB,CAIxD;IAED;;OAEG;IACH,cAFa,MAAM,CAOlB;IAED;;OAEG;IACH,8BAEC;IAED,oBASC;IAED;;;;;;OAMG;IACH,yBANW,GAAG,wCAQb;IAED;;;;OAIG;IACH,8BAHW,MAAM,cACN,MAAM,GAAG,SAAS,GAAG,WAAW,QAiB1C;IAED,4BAEC;IAED;;;;;OAKG;IACH,iCAFW,OAAO,8BAA8B,EAAE,OAAO,QAIxD;;CACJ;AAoEM,iCAHI,GAAG,0CAGkC;0BA9uBnC,8BAAsB,IAAI;qCAG5B,IAAI,KACF,WAAW;sBAEX,eAAe,GAAG;IAC9B,SAAgB,CAAC,SAAW,IAAI,KAAE,IAAI,CAAC;IACvC,cAAqB,CAAC,SAAW,IAAI,KAAE,IAAI,CAAC;IAC5C,aAAoB,CAAC,SAAW,IAAI,KAAE,IAAI,CAAA;CAAC;;;;;UAIlC,OAAO,iBAAiB,EAAE,kBAAkB;;;;cAC5C,GAAG;;gDAGF,OAAO,uBAAuB,EAAE,OAAO,SAEvC,OAAO,8BAA8B,EAAE,OAAO;;;;;+BAG/C,OAAO;;;;+BAEP,OAAO;;0BAzCwB,oBAAoB;oBAbzC,qBAAqB;+BADlC,wBAAwB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.test.d.ts","sourceRoot":"","sources":["../../../src/view/view.test.js"],"names":[],"mappings":""}
|
|
@@ -10,6 +10,7 @@ import LayerView from "./layerView.js";
|
|
|
10
10
|
|
|
11
11
|
describe("Trivial creations and initializations", () => {
|
|
12
12
|
test("Fails on empty spec", async () => {
|
|
13
|
+
// @ts-expect-error
|
|
13
14
|
expect(create({}, View)).rejects.toThrow();
|
|
14
15
|
});
|
|
15
16
|
|
|
@@ -23,7 +24,7 @@ describe("Trivial creations and initializations", () => {
|
|
|
23
24
|
test("Parses a more comples spec", async () => {
|
|
24
25
|
const view = await create(
|
|
25
26
|
{
|
|
26
|
-
|
|
27
|
+
hconcat: [
|
|
27
28
|
{
|
|
28
29
|
layer: [{ mark: "point" }, { mark: "rect" }],
|
|
29
30
|
},
|
|
@@ -35,26 +36,28 @@ describe("Trivial creations and initializations", () => {
|
|
|
35
36
|
|
|
36
37
|
expect(view).toBeInstanceOf(ConcatView);
|
|
37
38
|
expect(view.children[0]).toBeInstanceOf(LayerView);
|
|
39
|
+
// @ts-ignore
|
|
38
40
|
expect(view.children[0].children[0]).toBeInstanceOf(UnitView);
|
|
41
|
+
// @ts-ignore
|
|
39
42
|
expect(view.children[0].children[0].mark).toBeInstanceOf(PointMark);
|
|
40
43
|
expect(view.children[1]).toBeInstanceOf(UnitView);
|
|
41
44
|
expect(view.children[2]).toBeUndefined();
|
|
42
45
|
});
|
|
43
46
|
|
|
44
|
-
test("Parses and initializes a trivial spec",
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
47
|
+
test("Parses and initializes a trivial spec", () =>
|
|
48
|
+
expect(
|
|
49
|
+
createAndInitialize(
|
|
50
|
+
{
|
|
51
|
+
data: { values: [1] },
|
|
52
|
+
mark: "point",
|
|
53
|
+
encoding: {
|
|
54
|
+
x: { field: "data", type: "quantitative" },
|
|
55
|
+
y: { field: "data", type: "quantitative" },
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
View
|
|
59
|
+
)
|
|
60
|
+
).resolves.toBeInstanceOf(UnitView));
|
|
58
61
|
});
|
|
59
62
|
|
|
60
63
|
describe("Test domain handling", () => {
|
|
@@ -66,6 +69,7 @@ describe("Test domain handling", () => {
|
|
|
66
69
|
],
|
|
67
70
|
};
|
|
68
71
|
|
|
72
|
+
/** -- This should be moved to ScaleResolution's test
|
|
69
73
|
test("Uses domain from the scale properties", () => {
|
|
70
74
|
const spec = {
|
|
71
75
|
data: dataSpec,
|
|
@@ -84,52 +88,65 @@ describe("Test domain handling", () => {
|
|
|
84
88
|
expect(r(view.getConfiguredDomain("y"))).toEqual([0, 1000])
|
|
85
89
|
);
|
|
86
90
|
});
|
|
91
|
+
*/
|
|
87
92
|
|
|
88
|
-
test("Includes a constant in the data domain", () =>
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
test("Includes a constant in the data domain", () =>
|
|
94
|
+
createAndInitialize(
|
|
95
|
+
{
|
|
96
|
+
data: dataSpec,
|
|
97
|
+
mark: "point",
|
|
98
|
+
encoding: {
|
|
99
|
+
x: { datum: 123, type: "quantitative" },
|
|
100
|
+
y: { field: "a", type: "quantitative" },
|
|
101
|
+
},
|
|
95
102
|
},
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
103
|
+
UnitView
|
|
104
|
+
).then((view) =>
|
|
105
|
+
expect(r(view.extractDataDomain("x", "quantitative"))).toEqual([
|
|
106
|
+
123, 123,
|
|
107
|
+
])
|
|
108
|
+
));
|
|
102
109
|
|
|
103
|
-
test("Extracts domain from the data", () =>
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
+
test("Extracts domain from the data", () =>
|
|
111
|
+
createAndInitialize(
|
|
112
|
+
{
|
|
113
|
+
data: dataSpec,
|
|
114
|
+
mark: "point",
|
|
115
|
+
encoding: {
|
|
116
|
+
x: { field: "a", type: "quantitative" },
|
|
117
|
+
y: { field: "a", type: "quantitative" },
|
|
118
|
+
},
|
|
110
119
|
},
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
120
|
+
UnitView
|
|
121
|
+
).then((view) =>
|
|
122
|
+
expect(r(view.extractDataDomain("y", "quantitative"))).toEqual([
|
|
123
|
+
1, 3,
|
|
124
|
+
])
|
|
125
|
+
));
|
|
117
126
|
|
|
118
|
-
test("Extracts domain from
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
127
|
+
test("Extracts domain from conditional encoding", () =>
|
|
128
|
+
createAndInitialize(
|
|
129
|
+
{
|
|
130
|
+
params: [{ name: "p" }],
|
|
131
|
+
data: dataSpec,
|
|
132
|
+
mark: "point",
|
|
133
|
+
encoding: {
|
|
134
|
+
size: {
|
|
135
|
+
field: "a",
|
|
136
|
+
type: "quantitative",
|
|
137
|
+
condition: {
|
|
138
|
+
param: "p",
|
|
139
|
+
datum: 123,
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
},
|
|
126
143
|
},
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
144
|
+
UnitView
|
|
145
|
+
).then((view) =>
|
|
146
|
+
expect(r(view.extractDataDomain("size", "quantitative"))).toEqual([
|
|
147
|
+
1, 123,
|
|
148
|
+
])
|
|
149
|
+
));
|
|
133
150
|
});
|
|
134
151
|
|
|
135
152
|
describe("Utility methods", () => {
|
|
@@ -207,6 +224,7 @@ describe("Utility methods", () => {
|
|
|
207
224
|
},
|
|
208
225
|
LayerView
|
|
209
226
|
).then((view) =>
|
|
227
|
+
// @ts-ignore
|
|
210
228
|
expect(view.children[0].children[0].getBaseUrl()).toEqual(
|
|
211
229
|
"https://site.com/blaa"
|
|
212
230
|
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewFactory.test.d.ts","sourceRoot":"","sources":["../../../src/view/viewFactory.test.js"],"names":[],"mappings":""}
|
|
@@ -11,7 +11,7 @@ test("isViewSpec", () => {
|
|
|
11
11
|
expect(factory.isViewSpec({ layer: [] })).toBeTruthy();
|
|
12
12
|
expect(factory.isViewSpec({ hconcat: [] })).toBeTruthy();
|
|
13
13
|
expect(factory.isViewSpec({ vconcat: [] })).toBeTruthy();
|
|
14
|
-
expect(factory.isViewSpec({ concat: [] })).toBeTruthy();
|
|
14
|
+
expect(factory.isViewSpec({ concat: [], columns: 1 })).toBeTruthy();
|
|
15
15
|
|
|
16
16
|
expect(() => factory.isViewSpec({ mark: "rect", layer: [] })).toThrow();
|
|
17
17
|
});
|
|
@@ -20,6 +20,6 @@ test("Throws if importing is not allowed", () => {
|
|
|
20
20
|
const factory = new ViewFactory({ allowImport: false });
|
|
21
21
|
|
|
22
22
|
expect(() =>
|
|
23
|
-
factory.createOrImportView({ import: { url: "" } })
|
|
23
|
+
factory.createOrImportView({ import: { url: "" } }, undefined)
|
|
24
24
|
).rejects.toThrow();
|
|
25
25
|
});
|
package/dist/src/view/zoom.js
CHANGED
|
@@ -71,10 +71,10 @@ export function interactionToZoom(event, coords, handleZoom, hover, animator) {
|
|
|
71
71
|
|
|
72
72
|
if (hover) {
|
|
73
73
|
const e = hover.mark.encoders;
|
|
74
|
-
if (e.x && !e.x2 && !e.x.
|
|
74
|
+
if (e.x && !e.x2 && !e.x.constant) {
|
|
75
75
|
x = +e.x(hover.datum) * coords.width + coords.x;
|
|
76
76
|
}
|
|
77
|
-
if (e.y && !e.y2 && !e.y.
|
|
77
|
+
if (e.y && !e.y2 && !e.y.constant) {
|
|
78
78
|
y = (1 - +e.y(hover.datum)) * coords.height + coords.y;
|
|
79
79
|
}
|
|
80
80
|
}
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"contributors": [],
|
|
9
9
|
"license": "MIT",
|
|
10
|
-
"version": "0.
|
|
10
|
+
"version": "0.49.0",
|
|
11
11
|
"jsdelivr": "dist/bundle/index.js",
|
|
12
12
|
"unpkg": "dist/bundle/index.js",
|
|
13
13
|
"browser": "dist/bundle/index.js",
|
|
@@ -64,5 +64,8 @@
|
|
|
64
64
|
"vega-scale": "^7.3.1",
|
|
65
65
|
"vega-util": "^1.17.2"
|
|
66
66
|
},
|
|
67
|
-
"
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@types/long": "^4.0.1"
|
|
69
|
+
},
|
|
70
|
+
"gitHead": "33055fe37370459fb09d37cea3cf456b52a9893b"
|
|
68
71
|
}
|