@genome-spy/core 0.48.2 → 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 +7226 -6923
- package/dist/bundle/index.js +121 -108
- package/dist/schema.json +838 -344
- 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/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.test.d.ts +2 -0
- package/dist/src/data/transforms/identifier.test.d.ts.map +1 -0
- 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 +15 -6
- package/dist/src/gl/dataToVertices.d.ts +6 -8
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.js +42 -33
- 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/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/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/inputBinding.d.ts.map +1 -1
- package/dist/src/utils/inputBinding.js +4 -0
- 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.test.d.ts +2 -0
- package/dist/src/utils/radixSort.test.d.ts.map +1 -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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaleIndex.test.d.ts","sourceRoot":"","sources":["../../../src/genome/scaleIndex.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaleLocus.test.d.ts","sourceRoot":"","sources":["../../../src/genome/scaleLocus.test.js"],"names":[],"mappings":""}
|
package/dist/src/genomeSpy.d.ts
CHANGED
|
@@ -18,7 +18,6 @@ export default class GenomeSpy {
|
|
|
18
18
|
_destructionCallbacks: (() => void)[];
|
|
19
19
|
/** Root level configuration object */
|
|
20
20
|
spec: import("./spec/root.js").RootSpec;
|
|
21
|
-
accessorFactory: AccessorFactory;
|
|
22
21
|
viewFactory: ViewFactory;
|
|
23
22
|
/** @type {(function(string):object[])[]} */
|
|
24
23
|
namedDataProviders: ((arg0: string) => object[])[];
|
|
@@ -83,6 +82,8 @@ export default class GenomeSpy {
|
|
|
83
82
|
* @type {HTMLElement}
|
|
84
83
|
*/
|
|
85
84
|
_inputBindingContainer: HTMLElement;
|
|
85
|
+
/** @type {Point} */
|
|
86
|
+
_mouseDownCoords: Point;
|
|
86
87
|
/**
|
|
87
88
|
*
|
|
88
89
|
* @param {(name: string) => any[]} provider
|
|
@@ -151,12 +152,12 @@ export default class GenomeSpy {
|
|
|
151
152
|
* Events that are broadcasted to all views.
|
|
152
153
|
*/
|
|
153
154
|
export type BroadcastEventType = "dataFlowBuilt" | "dataLoaded" | "layout" | "layoutComputed";
|
|
154
|
-
import AccessorFactory from "./encoder/accessor.js";
|
|
155
155
|
import { ViewFactory } from "./view/viewFactory.js";
|
|
156
156
|
import Animator from "./utils/animator.js";
|
|
157
157
|
import GenomeStore from "./genome/genomeStore.js";
|
|
158
158
|
import BufferedViewRenderingContext from "./view/renderingContext/bufferedViewRenderingContext.js";
|
|
159
159
|
import Inertia from "./utils/inertia.js";
|
|
160
|
+
import Point from "./view/layout/point.js";
|
|
160
161
|
import WebGLHelper from "./gl/webGLHelper.js";
|
|
161
162
|
import Tooltip from "./utils/ui/tooltip.js";
|
|
162
163
|
import UnitView from "./view/unitView.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genomeSpy.d.ts","sourceRoot":"","sources":["../../src/genomeSpy.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"genomeSpy.d.ts","sourceRoot":"","sources":["../../src/genomeSpy.js"],"names":[],"mappings":"AA8CA;IACI;;;;;OAKG;IAEH;;;;;OAKG;IACH,uBAJW,WAAW,qDAEX,OAAO,qBAAqB,EAAE,YAAY,EA6FpD;IA1FG,uBAA0B;IAC1B,oDAAsB;IAItB,6BAA6B;IAC7B,uBADW,CAAC,MAAM,IAAI,CAAC,EAAE,CACM;IAE/B,sCAAsC;IACtC,wCAAgB;IAEhB,yBAAoC;IAEpC,4CAA4C;IAC5C,oBADW,QAAU,MAAM,KAAE,MAAM,EAAE,CAAC,EAAE,CACZ;IAE5B,mBAAoD;IAEpD,0BAA0B;IAC1B,aADW,WAAW,CACM;IAE5B;;;;;OAKG;IACH,qEAF0B,OAAO,CAE8B;IAE/D,2CAA2C;IAC3C,mBADW,4BAA4B,CACL;IAClC,2CAA2C;IAC3C,iBADW,4BAA4B,CACP;IAEhC,oDAAoD;IACpD,6BAAgC;IAEhC;;;OAGG;IACH,eAFU;QAAE,IAAI,EAAE,OAAO,iBAAiB,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,oBAAoB,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAEpF;IAE9B,uBAA+C;IAE/C;;;OAGG;IACH,oBAFU,IAAI,MAAM,EAAE,QAAU,aAAa,KAAE,IAAI,CAAC,EAAE,CAAC,CAEpB;IAEnC;;;;;;OAMG;IACH,yCAFkC,GAAG,KAAK,IAAI,GAEd;IAEhC;;;OAGG;IACH,kDAFkC,GAAG,KAAK,IAAI,GAEL;IAEzC,oFAAoF;IACpF,iBADW,OAAO,MAAM,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC,CAK9E;IAED,mBAAmB;IACnB,2CAAyB;IAEzB;;;;OAIG;IACH;gBAF8B,OAAO,wBAAwB,EAAE,iBAAiB;iBAAW,MAAM;OAEnE;IAE9B;;OAEG;IACH,wBAFU,WAAW,CAEkB;IAEvC,oBAAoB;IACpB,kBADW,KAAK,CACiB;IA2CrC;;;OAGG;IACH,2CAFkB,MAAM,KAAK,GAAG,EAAE,QAIjC;IAED;;OAEG;IACH,+BAFW,MAAM,YAShB;IAED;;;;OAIG;IACH,sBAHW,MAAM,QACN,GAAG,EAAE,QAaf;IAED;;;;;OAKG;IACH,gBAHW,kBAAkB,YAClB,GAAG,QAQb;IAED;;;OAGG;IACH,iCAqDC;IA0DG,uBAQC;IAGD,mCAGE;IAOF,sCAEE;IAGF,iBAAyC;IAW7C;;OAEG;IACH,gBAuBC;IAED,sCA6MC;IAED;;;OAGG;IACH,UAFa,QAAQ,OAAO,CAAC,CA6B5B;IAED,4BA8JC;IAvIe,iCAAoC;IAyIpD;;;OAGG;IACH,kBAHW,MAAM,KACN,MAAM,QAqEhB;IAED;;;;;;;OAOG;IACH,oDAHuB,QAAQ,MAAM,GAAG,WAAW,GAAG,OAAO,KAAK,EAAE,cAAc,CAAC,QAYlF;IAED,sBA6CC;IAED,kBAIC;IAED,iCAOC;IAED,iCASC;IAED,qFAWC;;CACJ;;;;iCAj8BY,eAAe,GAAG,YAAY,GAAG,QAAQ,GAAG,gBAAgB;4BAP7B,uBAAuB;qBAZ9C,qBAAqB;wBAIlB,yBAAyB;yCARR,yDAAyD;oBAYvD,oBAAoB;kBAT7C,wBAAwB;wBALlB,qBAAqB;oBAVzB,uBAAuB;qBAQtB,oBAAoB"}
|
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(),
|
|
@@ -972,7 +981,7 @@ export default class GenomeSpy {
|
|
|
972
981
|
/** @type {UnitView[]} */
|
|
973
982
|
const views = [];
|
|
974
983
|
this.viewRoot.visit((view) => {
|
|
975
|
-
if (view instanceof UnitView && view.
|
|
984
|
+
if (view instanceof UnitView && view.getDataAccessor("search")) {
|
|
976
985
|
views.push(view);
|
|
977
986
|
}
|
|
978
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,8 +57,8 @@ export class GeometryBuilder {
|
|
|
59
57
|
*/
|
|
60
58
|
addToXIndex(datum: import("../data/flowNode.js").Datum): void;
|
|
61
59
|
xIndexer: {
|
|
62
|
-
(datum:
|
|
63
|
-
getIndex: () => import("../utils/binnedIndex.js").Lookup;
|
|
60
|
+
(datum: import("../data/flowNode.js").Datum, startVertexIndex: number, endVertexIndex: number): void;
|
|
61
|
+
getIndex: () => import("../utils/binnedIndex.js").Lookup;
|
|
64
62
|
};
|
|
65
63
|
toArrays(): {
|
|
66
64
|
/** @type {Record<string, {data: Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array, numComponents: number, divisor?: number}>} */
|
|
@@ -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,16 +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
|
-
channel == "uniqueId"
|
|
100
|
-
? Uint32Array
|
|
101
|
-
: isDiscrete(ce.scale.type)
|
|
102
|
-
? Uint16Array
|
|
103
|
-
: hp
|
|
104
|
-
? Uint32Array
|
|
105
|
-
: Float32Array,
|
|
114
|
+
targetArrayType: arrayConstructor,
|
|
106
115
|
});
|
|
107
116
|
}
|
|
108
117
|
|
|
@@ -190,9 +199,10 @@ export class GeometryBuilder {
|
|
|
190
199
|
const xe = getContinuousEncoder(this.variableEncoders.x);
|
|
191
200
|
const x2e = getContinuousEncoder(this.variableEncoders.x2);
|
|
192
201
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
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;
|
|
196
206
|
|
|
197
207
|
/** @type {[number, number]} */
|
|
198
208
|
const dataDomain = [xa(data[lo]), x2a(data[hi - 1])];
|
|
@@ -469,10 +479,9 @@ export class TextVertexBuilder extends GeometryBuilder {
|
|
|
469
479
|
|
|
470
480
|
const e = encoders;
|
|
471
481
|
|
|
472
|
-
const channelDef =
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
);
|
|
482
|
+
const channelDef = /** @type {import("../spec/channel.js").TextDef} */ (
|
|
483
|
+
e.text.channelDef
|
|
484
|
+
);
|
|
476
485
|
/** @type {(value: any) => string} */
|
|
477
486
|
this.numberFormat =
|
|
478
487
|
!isValueDef(channelDef) &&
|
|
@@ -522,7 +531,7 @@ export class TextVertexBuilder extends GeometryBuilder {
|
|
|
522
531
|
// alphabetic
|
|
523
532
|
}
|
|
524
533
|
|
|
525
|
-
const accessor = this.encoders.text
|
|
534
|
+
const accessor = this.encoders.text; // accessor or constant value
|
|
526
535
|
|
|
527
536
|
const vertexCoord = [0, 0];
|
|
528
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"}
|