@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
package/dist/src/genomeSpy.js
CHANGED
|
@@ -6,7 +6,6 @@ import SPINNER from "./img/90-ring-with-bg.svg";
|
|
|
6
6
|
import css from "./styles/genome-spy.css.js";
|
|
7
7
|
import Tooltip from "./utils/ui/tooltip.js";
|
|
8
8
|
|
|
9
|
-
import AccessorFactory from "./encoder/accessor.js";
|
|
10
9
|
import {
|
|
11
10
|
checkForDuplicateScaleNames,
|
|
12
11
|
setImplicitScaleNames,
|
|
@@ -71,7 +70,6 @@ export default class GenomeSpy {
|
|
|
71
70
|
/** Root level configuration object */
|
|
72
71
|
this.spec = spec;
|
|
73
72
|
|
|
74
|
-
this.accessorFactory = new AccessorFactory();
|
|
75
73
|
this.viewFactory = new ViewFactory();
|
|
76
74
|
|
|
77
75
|
/** @type {(function(string):object[])[]} */
|
|
@@ -148,6 +146,9 @@ export default class GenomeSpy {
|
|
|
148
146
|
* @type {HTMLElement}
|
|
149
147
|
*/
|
|
150
148
|
this._inputBindingContainer = undefined;
|
|
149
|
+
|
|
150
|
+
/** @type {Point} */
|
|
151
|
+
this._mouseDownCoords = undefined;
|
|
151
152
|
}
|
|
152
153
|
|
|
153
154
|
get #canvasWrapper() {
|
|
@@ -434,7 +435,6 @@ export default class GenomeSpy {
|
|
|
434
435
|
/** @type {import("./types/viewContext.js").default} */
|
|
435
436
|
const context = {
|
|
436
437
|
dataFlow: new DataFlow(),
|
|
437
|
-
accessorFactory: this.accessorFactory,
|
|
438
438
|
glHelper: this._glHelper,
|
|
439
439
|
animator: this.animator,
|
|
440
440
|
genomeStore: this.genomeStore,
|
|
@@ -785,7 +785,14 @@ export default class GenomeSpy {
|
|
|
785
785
|
?.forEach((listener) => listener(e));
|
|
786
786
|
}
|
|
787
787
|
|
|
788
|
-
|
|
788
|
+
if (
|
|
789
|
+
event.type != "click" ||
|
|
790
|
+
// Suppress click events if the mouse has been dragged
|
|
791
|
+
this._mouseDownCoords?.subtract(Point.fromMouseEvent(event))
|
|
792
|
+
.length < 3
|
|
793
|
+
) {
|
|
794
|
+
dispatchEvent(event);
|
|
795
|
+
}
|
|
789
796
|
}
|
|
790
797
|
};
|
|
791
798
|
|
|
@@ -799,7 +806,9 @@ export default class GenomeSpy {
|
|
|
799
806
|
"contextmenu",
|
|
800
807
|
].forEach((type) => canvas.addEventListener(type, listener));
|
|
801
808
|
|
|
802
|
-
canvas.addEventListener("mousedown", () => {
|
|
809
|
+
canvas.addEventListener("mousedown", (/** @type {MouseEvent} */ e) => {
|
|
810
|
+
this._mouseDownCoords = Point.fromMouseEvent(e);
|
|
811
|
+
|
|
803
812
|
document.addEventListener(
|
|
804
813
|
"mouseup",
|
|
805
814
|
() => this.tooltip.popEnabledState(),
|
|
@@ -822,7 +831,10 @@ export default class GenomeSpy {
|
|
|
822
831
|
const pixelValue = this._glHelper.readPickingPixel(x, y);
|
|
823
832
|
|
|
824
833
|
const uniqueId =
|
|
825
|
-
pixelValue[0] |
|
|
834
|
+
pixelValue[0] |
|
|
835
|
+
(pixelValue[1] << 8) |
|
|
836
|
+
(pixelValue[2] << 16) |
|
|
837
|
+
(pixelValue[3] << 24);
|
|
826
838
|
|
|
827
839
|
if (uniqueId == 0) {
|
|
828
840
|
this._currentHover = null;
|
|
@@ -834,10 +846,6 @@ export default class GenomeSpy {
|
|
|
834
846
|
}
|
|
835
847
|
|
|
836
848
|
if (!this._currentHover) {
|
|
837
|
-
// We are doing an exhaustive search of the data. This is a bit slow with
|
|
838
|
-
// millions of items.
|
|
839
|
-
// TODO: Optimize by indexing or something
|
|
840
|
-
|
|
841
849
|
this.viewRoot.visit((view) => {
|
|
842
850
|
if (view instanceof UnitView) {
|
|
843
851
|
if (
|
|
@@ -846,16 +854,16 @@ export default class GenomeSpy {
|
|
|
846
854
|
coords.containsPoint(x, y)
|
|
847
855
|
)
|
|
848
856
|
) {
|
|
849
|
-
const
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
}
|
|
858
|
-
}
|
|
857
|
+
const datum = view
|
|
858
|
+
.getCollector()
|
|
859
|
+
.findDatumByUniqueId(uniqueId);
|
|
860
|
+
if (datum) {
|
|
861
|
+
this._currentHover = {
|
|
862
|
+
mark: view.mark,
|
|
863
|
+
datum,
|
|
864
|
+
uniqueId,
|
|
865
|
+
};
|
|
866
|
+
}
|
|
859
867
|
}
|
|
860
868
|
if (this._currentHover) {
|
|
861
869
|
return VISIT_STOP;
|
|
@@ -973,7 +981,7 @@ export default class GenomeSpy {
|
|
|
973
981
|
/** @type {UnitView[]} */
|
|
974
982
|
const views = [];
|
|
975
983
|
this.viewRoot.visit((view) => {
|
|
976
|
-
if (view instanceof UnitView && view.
|
|
984
|
+
if (view instanceof UnitView && view.getDataAccessor("search")) {
|
|
977
985
|
views.push(view);
|
|
978
986
|
}
|
|
979
987
|
});
|
|
@@ -11,20 +11,18 @@ export class GeometryBuilder {
|
|
|
11
11
|
*/
|
|
12
12
|
/**
|
|
13
13
|
* @param {object} object
|
|
14
|
-
* @param {Record<
|
|
14
|
+
* @param {Record<import("../spec/channel.js").Channel, Encoder>} object.encoders
|
|
15
15
|
* @param {string[]} [object.attributes]
|
|
16
16
|
* @param {number} [object.numVertices] If the number of data items is known, a
|
|
17
17
|
* preallocated TypedArray is used
|
|
18
18
|
*/
|
|
19
19
|
constructor({ encoders, numVertices, attributes }: {
|
|
20
|
-
encoders: Record<
|
|
20
|
+
encoders: Record<import("../spec/channel.js").Channel, import("../types/encoder.js").Encoder>;
|
|
21
21
|
attributes?: string[];
|
|
22
22
|
numVertices?: number;
|
|
23
23
|
});
|
|
24
|
-
encoders: Record<
|
|
25
|
-
variableEncoders:
|
|
26
|
-
[k: string]: import("../types/encoder.js").Encoder;
|
|
27
|
-
};
|
|
24
|
+
encoders: Record<import("../spec/channel.js").Channel, import("../types/encoder.js").Encoder>;
|
|
25
|
+
variableEncoders: Record<import("../spec/channel.js").Channel, import("../types/encoder.js").Encoder>;
|
|
28
26
|
allocatedVertices: number;
|
|
29
27
|
variableBuilder: ArrayBuilder;
|
|
30
28
|
lastOffset: number;
|
|
@@ -59,7 +57,7 @@ export class GeometryBuilder {
|
|
|
59
57
|
*/
|
|
60
58
|
addToXIndex(datum: import("../data/flowNode.js").Datum): void;
|
|
61
59
|
xIndexer: {
|
|
62
|
-
(datum:
|
|
60
|
+
(datum: import("../data/flowNode.js").Datum, startVertexIndex: number, endVertexIndex: number): void;
|
|
63
61
|
getIndex: () => import("../utils/binnedIndex.js").Lookup;
|
|
64
62
|
};
|
|
65
63
|
toArrays(): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataToVertices.d.ts","sourceRoot":"","sources":["../../../src/gl/dataToVertices.js"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH;IACI;;;OAGG;IAEH;;;;;;OAMG;IACH;;qBAJW,MAAM,EAAE;sBACR,MAAM;
|
|
1
|
+
{"version":3,"file":"dataToVertices.d.ts","sourceRoot":"","sources":["../../../src/gl/dataToVertices.js"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH;IACI;;;OAGG;IAEH;;;;;;OAMG;IACH;;qBAJW,MAAM,EAAE;sBACR,MAAM;OAyFhB;IArFG,8FAAwB;IAIxB,sGAQK;IAQL,0BAAoC;IAEpC,8BAAoD;IA2DpD,mBAAmB;IAEnB,yFAAyF;IACzF,UADW,IAAI,GAAG,EAAE,UAAU,CAAC,CACkB;IAGrD;;;;OAIG;IACH,mBAFW,GAAG,QAcb;IAED;;OAEG;IACH,oBAFW,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,QAM5B;IAED;;;OAGG;IACH,cAHW,GAAG,QACH,MAAM,EAAE,kCAYlB;IAED;;;;OAIG;IACH,sBAJW,OAAO,qBAAqB,EAAE,IAAI,OAClC,MAAM,OACN,MAAM,QAgEhB;IAED;;;;;OAKG;IACH,mBAFW,OAAO,qBAAqB,EAAE,KAAK,QAI7C;IAhEO;;;MAAyB;IAkEjC;QAEQ,kJAAkJ;gBAAvI,OAAO,MAAM,EAAE;YAAC,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAC,CAAC;QAE9I,8BAA8B;;QAE9B,8CAA8C;;;MAIrD;CACJ;AAED;IACI;;;;;;OAMG;IACH;;oBAHW,MAAM,EAAE;mBACR,MAAM;OA+BhB;IAnBG,qBAkBW;CA8BlB;AAED;IACI;;;;;;;;;OASG;IACH;;oBANW,MAAM,EAAE;gCACR,MAAM;uBAEN,MAAM,EAAE;mBACR,MAAM;OAwBhB;IARG,uBAAgC;IAEhC,8BAA8D;IAE9D,6CAA+D;IAC/D,4CAA6D;CA6CpE;AAED;IACI;;;;;;OAMG;IACH;;oBAHW,MAAM,EAAE;mBACR,MAAM;OAShB;CACJ;AAED;IACI;;;;;OAKG;IACH;;oBAHW,MAAM,EAAE;mBACR,MAAM;OAShB;CAYJ;AAED;IACI;;;;;;;;;OASG;IACH;;oBANW,MAAM,EAAE;qBACR,OAAO,2BAA2B,EAAE,aAAa;oBACjD,OAAO,MAAM,EAAE,GAAG,CAAC;wBACnB,MAAM;sBACN,OAAO;OA6CjB;IA9BG,4DAA2B;IAC3B,2DAA0B;IAE1B,gCAA4B;IAO5B,qCAAqC;IACrC,sBADmB,GAAG,KAAK,MAAM,CAMf;IAElB,oDAGC;IACD,qDAGC;IAED,8CAAiE;CAgJxE;;;;;;;;YAnnBS,MAAM;;;;WACN,MAAM;YACN,OAAO,yBAAyB,EAAE,MAAM;;yBAjBzB,mBAAmB"}
|
|
@@ -7,12 +7,12 @@ import { createBinningRangeIndexer } from "../utils/binnedIndex.js";
|
|
|
7
7
|
import { isValueDef } from "../encoder/encoder.js";
|
|
8
8
|
import {
|
|
9
9
|
dedupeEncodingFields,
|
|
10
|
-
|
|
11
|
-
isLargeGenome,
|
|
10
|
+
getAttributeAndArrayTypes,
|
|
12
11
|
makeAttributeName,
|
|
13
12
|
splitLargeHighPrecision,
|
|
14
13
|
} from "./glslScaleGenerator.js";
|
|
15
|
-
import { isContinuous
|
|
14
|
+
import { isContinuous } from "vega-scale";
|
|
15
|
+
import createIndexer from "../utils/indexer.js";
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* @typedef {object} RangeEntry Represents a location of a vertex subset
|
|
@@ -28,7 +28,7 @@ export class GeometryBuilder {
|
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* @param {object} object
|
|
31
|
-
* @param {Record<
|
|
31
|
+
* @param {Record<import("../spec/channel.js").Channel, Encoder>} object.encoders
|
|
32
32
|
* @param {string[]} [object.attributes]
|
|
33
33
|
* @param {number} [object.numVertices] If the number of data items is known, a
|
|
34
34
|
* preallocated TypedArray is used
|
|
@@ -37,12 +37,16 @@ export class GeometryBuilder {
|
|
|
37
37
|
this.encoders = encoders;
|
|
38
38
|
|
|
39
39
|
// Encoders for variable channels
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
|
|
41
|
+
this.variableEncoders =
|
|
42
|
+
/** @type {Record<import("../spec/channel.js").Channel, Encoder>} */ (
|
|
43
|
+
Object.fromEntries(
|
|
44
|
+
Object.entries(encoders).filter(
|
|
45
|
+
([channel, e]) =>
|
|
46
|
+
attributes.includes(channel) && e && !e.constant
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
);
|
|
46
50
|
|
|
47
51
|
const dedupedEncodingFields = [
|
|
48
52
|
...dedupeEncodingFields(encoders).entries(),
|
|
@@ -56,6 +60,11 @@ export class GeometryBuilder {
|
|
|
56
60
|
|
|
57
61
|
// Create converters and updaters for all variable channels.
|
|
58
62
|
for (const [channel, ce] of Object.entries(this.variableEncoders)) {
|
|
63
|
+
const accessor = ce.dataAccessor;
|
|
64
|
+
if (!accessor) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
|
|
59
68
|
// Only add the first of the shared channels as all the rest are same
|
|
60
69
|
// For example, if both x and x2 are using the same field, only x is
|
|
61
70
|
// added to the array builder with the name "x_x2".
|
|
@@ -66,13 +75,19 @@ export class GeometryBuilder {
|
|
|
66
75
|
continue;
|
|
67
76
|
}
|
|
68
77
|
|
|
69
|
-
const
|
|
78
|
+
const numberAccessor = accessor.asNumberAccessor();
|
|
79
|
+
const scale = ce.scale;
|
|
70
80
|
|
|
71
|
-
const
|
|
72
|
-
|
|
81
|
+
const { largeHp, arrayConstructor, discrete, numComponents } =
|
|
82
|
+
getAttributeAndArrayTypes(scale, channel);
|
|
73
83
|
const largeHpArray = [0, 0];
|
|
74
84
|
|
|
75
|
-
|
|
85
|
+
/** @type {ReturnType<typeof createIndexer>} */
|
|
86
|
+
let indexer;
|
|
87
|
+
if (scale && discrete && "domain" in scale) {
|
|
88
|
+
indexer = createIndexer();
|
|
89
|
+
indexer.addAll(scale.domain());
|
|
90
|
+
}
|
|
76
91
|
|
|
77
92
|
/**
|
|
78
93
|
* Discrete variables both numeric and strings must be "indexed",
|
|
@@ -84,8 +99,9 @@ export class GeometryBuilder {
|
|
|
84
99
|
const f = indexer
|
|
85
100
|
? (d) => indexer(accessor(d))
|
|
86
101
|
: largeHp
|
|
87
|
-
? (d) =>
|
|
88
|
-
|
|
102
|
+
? (d) =>
|
|
103
|
+
splitLargeHighPrecision(numberAccessor(d), largeHpArray)
|
|
104
|
+
: numberAccessor;
|
|
89
105
|
|
|
90
106
|
const attributeName = sharedChannels
|
|
91
107
|
? makeAttributeName(sharedChannels)
|
|
@@ -93,13 +109,9 @@ export class GeometryBuilder {
|
|
|
93
109
|
|
|
94
110
|
this.variableBuilder.addConverter(attributeName, {
|
|
95
111
|
f,
|
|
96
|
-
numComponents
|
|
112
|
+
numComponents,
|
|
97
113
|
arrayReference: largeHp ? largeHpArray : undefined,
|
|
98
|
-
targetArrayType:
|
|
99
|
-
? Uint16Array
|
|
100
|
-
: hp
|
|
101
|
-
? Uint32Array
|
|
102
|
-
: Float32Array,
|
|
114
|
+
targetArrayType: arrayConstructor,
|
|
103
115
|
});
|
|
104
116
|
}
|
|
105
117
|
|
|
@@ -187,9 +199,10 @@ export class GeometryBuilder {
|
|
|
187
199
|
const xe = getContinuousEncoder(this.variableEncoders.x);
|
|
188
200
|
const x2e = getContinuousEncoder(this.variableEncoders.x2);
|
|
189
201
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
const
|
|
202
|
+
// Only index variable data
|
|
203
|
+
if (xe && !xe.constant && (!x2e || !x2e.constant)) {
|
|
204
|
+
const xa = xe.dataAccessor.asNumberAccessor();
|
|
205
|
+
const x2a = x2e ? x2e.dataAccessor.asNumberAccessor() : xa;
|
|
193
206
|
|
|
194
207
|
/** @type {[number, number]} */
|
|
195
208
|
const dataDomain = [xa(data[lo]), x2a(data[hi - 1])];
|
|
@@ -466,10 +479,9 @@ export class TextVertexBuilder extends GeometryBuilder {
|
|
|
466
479
|
|
|
467
480
|
const e = encoders;
|
|
468
481
|
|
|
469
|
-
const channelDef =
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
);
|
|
482
|
+
const channelDef = /** @type {import("../spec/channel.js").TextDef} */ (
|
|
483
|
+
e.text.channelDef
|
|
484
|
+
);
|
|
473
485
|
/** @type {(value: any) => string} */
|
|
474
486
|
this.numberFormat =
|
|
475
487
|
!isValueDef(channelDef) &&
|
|
@@ -519,7 +531,7 @@ export class TextVertexBuilder extends GeometryBuilder {
|
|
|
519
531
|
// alphabetic
|
|
520
532
|
}
|
|
521
533
|
|
|
522
|
-
const accessor = this.encoders.text
|
|
534
|
+
const accessor = this.encoders.text; // accessor or constant value
|
|
523
535
|
|
|
524
536
|
const vertexCoord = [0, 0];
|
|
525
537
|
this.updateVertexCoord(vertexCoord);
|
|
@@ -1,41 +1,92 @@
|
|
|
1
1
|
/// <reference types="external-typings/internmap.js" />
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @param {Channel} channel
|
|
5
|
+
* @param {number} conditionNumber
|
|
6
|
+
* @returns {string}
|
|
7
|
+
*/
|
|
8
|
+
export function makeAccessorFunctionName(channel: Channel, conditionNumber: number): string;
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {object} AccessorParts
|
|
11
|
+
* @prop {Channel} channel
|
|
12
|
+
* @prop {string} accessorGlsl
|
|
13
|
+
* @prop {string} accessorFunctionName
|
|
14
|
+
* @prop {string} [attributeName]
|
|
15
|
+
* @prop {string} [attributeGlsl]
|
|
16
|
+
* @prop {string} [uniformName]
|
|
17
|
+
* @prop {string} [uniformGlsl]
|
|
18
|
+
* @prop {(x: any) => any} [adjuster]
|
|
19
|
+
*/
|
|
2
20
|
/**
|
|
3
21
|
* Generates GLSL code for a constant value.
|
|
4
22
|
*
|
|
5
23
|
* @param {Channel} channel
|
|
24
|
+
* @param {number} conditionNumber
|
|
6
25
|
* @param {number | number[] | string | boolean} value
|
|
26
|
+
* @returns {AccessorParts}
|
|
7
27
|
*/
|
|
8
|
-
export function generateConstantValueGlsl(channel: Channel, value: number | number[] | string | boolean):
|
|
28
|
+
export function generateConstantValueGlsl(channel: Channel, conditionNumber: number, value: number | number[] | string | boolean): AccessorParts;
|
|
9
29
|
/**
|
|
10
30
|
* Generates GLSL code for a dynamic, parameter-driven values. These are mainly
|
|
11
31
|
* used as dynamic mark properties that map to encoding channels.
|
|
12
32
|
*
|
|
13
33
|
* @param {Channel} channel
|
|
34
|
+
* @param {number} conditionNumber
|
|
35
|
+
* @returns {AccessorParts}
|
|
14
36
|
*/
|
|
15
|
-
export function generateDynamicValueGlslAndUniform(channel: Channel):
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
37
|
+
export function generateDynamicValueGlslAndUniform(channel: Channel, conditionNumber: number): AccessorParts;
|
|
38
|
+
/**
|
|
39
|
+
* @param {Channel} channel
|
|
40
|
+
* @param {any} scale
|
|
41
|
+
* @param {number} conditionNumber
|
|
42
|
+
* @param {Channel[]} [sharedQuantitativeChannels] Channels that share the same quantitative field
|
|
43
|
+
* @returns {AccessorParts}
|
|
44
|
+
*/
|
|
45
|
+
export function generateDataGlsl(channel: Channel, scale: any, conditionNumber: number, sharedQuantitativeChannels?: Channel[]): AccessorParts;
|
|
46
|
+
/**
|
|
47
|
+
* @param {Channel} channel
|
|
48
|
+
* @param {any} scale
|
|
49
|
+
* @param {number} conditionNumber
|
|
50
|
+
* @returns {AccessorParts}
|
|
51
|
+
*/
|
|
52
|
+
export function generateDatumGlslAndUniform(channel: Channel, scale: any, conditionNumber: number): AccessorParts;
|
|
22
53
|
/**
|
|
23
54
|
*
|
|
24
55
|
* @param {Channel} channel
|
|
25
|
-
* @param {
|
|
56
|
+
* @param {any} scale
|
|
26
57
|
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
27
|
-
* @param {Channel[]} [sharedQuantitativeChannels] Channels that share the same quantitative field
|
|
28
58
|
*/
|
|
29
|
-
export function generateScaleGlsl(channel: Channel,
|
|
30
|
-
attributeName: string;
|
|
31
|
-
attributeGlsl: string;
|
|
32
|
-
markUniformGlsl: string;
|
|
59
|
+
export function generateScaleGlsl(channel: Channel, scale: any, channelDef: import("../spec/channel.js").ChannelDef): {
|
|
33
60
|
glsl: string;
|
|
34
61
|
domainUniformName: string;
|
|
35
62
|
domainUniform: string;
|
|
36
|
-
|
|
63
|
+
rangeUniformName: string;
|
|
37
64
|
rangeUniform: string;
|
|
38
65
|
};
|
|
66
|
+
/**
|
|
67
|
+
*
|
|
68
|
+
* @param {Channel} channel
|
|
69
|
+
* @param {import("../types/encoder.js").Accessor[]} accessors
|
|
70
|
+
*/
|
|
71
|
+
export function generateConditionalEncoderGlsl(channel: Channel, accessors: import("../types/encoder.js").Accessor[]): string;
|
|
72
|
+
/**
|
|
73
|
+
* @param {Channel} channel
|
|
74
|
+
*/
|
|
75
|
+
export function getScaledDataTypeForChannel(channel: Channel): "float" | "vec3" | "uint";
|
|
76
|
+
/**
|
|
77
|
+
*
|
|
78
|
+
* @param {import("../types/encoder.js").VegaScale} scale
|
|
79
|
+
* @param {import("../spec/channel.js").Channel} channel
|
|
80
|
+
*/
|
|
81
|
+
export function getAttributeAndArrayTypes(scale: import("../types/encoder.js").VegaScale, channel: import("../spec/channel.js").Channel): {
|
|
82
|
+
attributeType: string;
|
|
83
|
+
arrayConstructor: Uint32ArrayConstructor | Uint16ArrayConstructor | Float32ArrayConstructor;
|
|
84
|
+
} & {
|
|
85
|
+
numComponents: number;
|
|
86
|
+
discrete: boolean;
|
|
87
|
+
hp: boolean;
|
|
88
|
+
largeHp: boolean;
|
|
89
|
+
};
|
|
39
90
|
/**
|
|
40
91
|
* True if scale needs more than 24 bits (float32) of precision.
|
|
41
92
|
*
|
|
@@ -76,14 +127,32 @@ export function dedupeEncodingFields(encoders: Partial<Record<import("../spec/ch
|
|
|
76
127
|
* @param {import("../spec/channel.js").Channel | import("../spec/channel.js").Channel[]} channel
|
|
77
128
|
*/
|
|
78
129
|
export function makeAttributeName(channel: import("../spec/channel.js").Channel | import("../spec/channel.js").Channel[]): string;
|
|
130
|
+
/**
|
|
131
|
+
* @param {string[]} conditions
|
|
132
|
+
* @param {string[]} statements
|
|
133
|
+
* @returns {string}
|
|
134
|
+
*/
|
|
135
|
+
export function ifElseGlsl(conditions: string[], statements: string[]): string;
|
|
79
136
|
export const ATTRIBUTE_PREFIX: "attr_";
|
|
80
137
|
export const DOMAIN_PREFIX: "uDomain_";
|
|
81
138
|
export const RANGE_PREFIX: "range_";
|
|
139
|
+
export const ACCESSOR_FUNCTION_PREFIX: "accessor_";
|
|
82
140
|
export const SCALE_FUNCTION_PREFIX: "scale_";
|
|
83
141
|
export const SCALED_FUNCTION_PREFIX: "getScaled_";
|
|
84
142
|
export const RANGE_TEXTURE_PREFIX: "uRangeTexture_";
|
|
143
|
+
export const PARAM_PREFIX: "uParam_";
|
|
85
144
|
export function getRangeForGlsl(scale: any, channel: Channel): number[];
|
|
86
145
|
export type Channel = import("../spec/channel.js").Channel;
|
|
146
|
+
export type AccessorParts = {
|
|
147
|
+
channel: Channel;
|
|
148
|
+
accessorGlsl: string;
|
|
149
|
+
accessorFunctionName: string;
|
|
150
|
+
attributeName?: string;
|
|
151
|
+
attributeGlsl?: string;
|
|
152
|
+
uniformName?: string;
|
|
153
|
+
uniformGlsl?: string;
|
|
154
|
+
adjuster?: (x: any) => any;
|
|
155
|
+
};
|
|
87
156
|
/**
|
|
88
157
|
* Turns a number or number array to float or vec[234] string.
|
|
89
158
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glslScaleGenerator.d.ts","sourceRoot":"","sources":["../../../src/gl/glslScaleGenerator.js"],"names":[],"mappings":";AAqDA;;;;;GAKG;AACH,
|
|
1
|
+
{"version":3,"file":"glslScaleGenerator.d.ts","sourceRoot":"","sources":["../../../src/gl/glslScaleGenerator.js"],"names":[],"mappings":";AAqDA;;;;;GAKG;AACH,kDAJW,OAAO,mBACP,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AAEH;;;;;;;GAOG;AACH,mDALW,OAAO,mBACP,MAAM,SACN,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,GAClC,aAAa,CA4CzB;AAED;;;;;;;GAOG;AACH,4DAJW,OAAO,mBACP,MAAM,GACJ,aAAa,CAkCzB;AAED;;;;;;GAMG;AACH,0CANW,OAAO,SACP,GAAG,mBACH,MAAM,+BACN,OAAO,EAAE,GACP,aAAa,CA+BzB;AACD;;;;;GAKG;AACH,qDALW,OAAO,SACP,GAAG,mBACH,MAAM,GACJ,aAAa,CAyBzB;AAED;;;;;GAKG;AAEH,2CALW,OAAO,SACP,GAAG,cACH,OAAO,oBAAoB,EAAE,UAAU;;;;;;EAwQjD;AAED;;;;GAIG;AACH,wDAHW,OAAO,aACP,OAAO,qBAAqB,EAAE,QAAQ,EAAE,UAuClD;AAmED;;GAEG;AACH,qDAFW,OAAO,6BAQjB;AA+CD;;;;GAIG;AACH,iDAHW,OAAO,qBAAqB,EAAE,SAAS,WACvC,OAAO,oBAAoB,EAAE,OAAO;mBAQjB,MAAM;sBAAoB,sBAAsB,GAAG,sBAAsB,GAAG,uBAAuB;;;;;;EAkBhI;AAED;;;;GAIG;AACH,2CAFW,MAAM,WAIhB;AAED;;;;GAIG;AACH,sCAFW,MAAM,EAAE,WAIlB;AAMD;;;GAGG;AACH,sCAHW,MAAM,QACN,MAAM,EAAE,YAYlB;AAED;;;GAGG;AACH,2CAHW,MAAM,QACN,MAAM,EAAE,YAUlB;AAYD;;GAEG;AACH,qDAFW,MAAM,EAAE,YAIlB;AAED;;GAEG;AAEH;;;;;GAKG;AACH,+CAFW,QAAQ,OAAO,OAAO,oBAAoB,EAAE,OAAO,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC,+DA4BtG;AAED;;GAEG;AACH,2CAFW,OAAO,oBAAoB,EAAE,OAAO,GAAG,OAAO,oBAAoB,EAAE,OAAO,EAAE,UAIvF;AAwBD;;;;GAIG;AACH,uCAJW,MAAM,EAAE,cACR,MAAM,EAAE,GACN,MAAM,CAgClB;AAr1BD,uCAAwC;AACxC,uCAAwC;AACxC,oCAAqC;AACrC,mDAAoD;AACpD,6CAA8C;AAC9C,kDAAmD;AACnD,oDAAqD;AACrD,qCAAsC;AAmyB/B,uCAJI,GAAG,WACH,OAAO,GACL,MAAM,EAAE,CAQF;sBAnyBN,OAAO,oBAAoB,EAAE,OAAO;;aA+BvC,OAAO;kBACP,MAAM;0BACN,MAAM;oBACN,MAAM;oBACN,MAAM;kBACN,MAAM;kBACN,MAAM;mBACF,GAAG,KAAK,GAAG;;;;;8BA6fZ,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE;;;;uBAgMhD,CAAC,MAAM,EAAE,OAAO,CAAC;0BApvBJ,WAAW"}
|