@genome-spy/core 0.44.0 → 0.45.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 +6123 -5482
- package/dist/bundle/index.js +211 -148
- package/dist/schema.json +329 -79
- package/dist/src/data/collector.d.ts.map +1 -1
- package/dist/src/data/collector.js +4 -2
- package/dist/src/data/flowOptimizer.test.js +12 -3
- package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
- package/dist/src/data/sources/dataUtils.js +3 -1
- package/dist/src/data/sources/lazy/bigBedSource.d.ts +1 -1
- package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigBedSource.js +52 -20
- package/dist/src/data/sources/lazy/bigWigSource.d.ts +0 -1
- package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigWigSource.js +30 -4
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisLazySource.js +0 -2
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts +6 -2
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +38 -20
- package/dist/src/data/sources/sequenceSource.d.ts.map +1 -1
- package/dist/src/data/sources/sequenceSource.js +14 -5
- package/dist/src/data/sources/sequenceSource.test.js +23 -5
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +15 -2
- package/dist/src/data/transforms/aggregate.d.ts.map +1 -1
- package/dist/src/data/transforms/aggregate.js +5 -2
- package/dist/src/encoder/encoder.d.ts +2 -4
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/encoder/encoder.js +8 -8
- package/dist/src/encoder/encoder.test.js +3 -0
- package/dist/src/genomeSpy.d.ts +7 -5
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +109 -132
- package/dist/src/gl/glslScaleGenerator.js +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/marks/mark.d.ts +8 -5
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +56 -12
- package/dist/src/marks/point.common.glsl.js +1 -1
- package/dist/src/marks/point.d.ts +1 -4
- package/dist/src/marks/point.d.ts.map +1 -1
- package/dist/src/marks/point.js +31 -23
- package/dist/src/marks/point.vertex.glsl.js +1 -1
- package/dist/src/marks/text.d.ts.map +1 -1
- package/dist/src/marks/text.js +15 -7
- package/dist/src/spec/data.d.ts +11 -10
- package/dist/src/spec/mark.d.ts +11 -21
- package/dist/src/spec/parameter.d.ts +11 -7
- package/dist/src/spec/root.d.ts +0 -8
- package/dist/src/spec/title.d.ts +5 -4
- package/dist/src/spec/view.d.ts +19 -4
- package/dist/src/styles/genome-spy.css.d.ts +1 -1
- package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
- package/dist/src/styles/genome-spy.css.js +52 -5
- package/dist/src/styles/genome-spy.scss +63 -10
- package/dist/src/styles/update.sh +6 -0
- package/dist/src/tooltip/dataTooltipHandler.js +1 -1
- package/dist/src/tooltip/refseqGeneTooltipHandler.js +1 -1
- package/dist/src/tooltip/tooltipHandler.d.ts +1 -1
- package/dist/src/tooltip/tooltipHandler.d.ts.map +1 -1
- package/dist/src/tooltip/tooltipHandler.ts +1 -1
- package/dist/src/types/embedApi.d.ts +6 -0
- package/dist/src/types/viewContext.d.ts +2 -3
- package/dist/src/utils/debounce.d.ts +2 -2
- package/dist/src/utils/debounce.d.ts.map +1 -1
- package/dist/src/utils/debounce.js +5 -2
- 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 +1 -1
- package/dist/src/utils/formatObject.d.ts +2 -2
- package/dist/src/utils/formatObject.d.ts.map +1 -1
- package/dist/src/utils/formatObject.js +2 -2
- package/dist/src/utils/inputBinding.d.ts +5 -0
- package/dist/src/utils/inputBinding.d.ts.map +1 -0
- package/dist/src/utils/inputBinding.js +115 -0
- package/dist/src/utils/ui/tooltip.js +1 -1
- package/dist/src/view/paramMediator.d.ts +108 -0
- package/dist/src/view/paramMediator.d.ts.map +1 -0
- package/dist/src/view/paramMediator.js +337 -0
- package/dist/src/view/paramMediator.test.js +211 -0
- package/dist/src/view/scaleResolution.d.ts.map +1 -1
- package/dist/src/view/scaleResolution.js +11 -6
- package/dist/src/view/view.d.ts +4 -1
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +19 -5
- package/dist/src/view/viewFactory.d.ts.map +1 -1
- package/dist/src/view/viewFactory.js +45 -0
- package/dist/src/view/viewUtils.d.ts +5 -1
- package/dist/src/view/viewUtils.d.ts.map +1 -1
- package/dist/src/view/viewUtils.js +9 -4
- package/package.json +16 -17
- package/dist/src/paramBroker.d.ts +0 -46
- package/dist/src/paramBroker.d.ts.map +0 -1
- package/dist/src/paramBroker.js +0 -118
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/data/collector.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH;IAKI;;OAEG;IACH,qBAFW,OAAO,sBAAsB,EAAE,aAAa,EActD;IATG,qDAA2C;IAE3C,2CAA2C;IAC3C,WADW,QAAU,SAAS,KAAE,IAAI,CAAC,EAAE,CACpB;IAEnB,uFAAuF;IACvF,cADW,IAAI,GAAG,GAAG,GAAG,EAAE,EAAE,OAAO,eAAe,EAAE,IAAI,CAAC,CAC5B;IAKjC,cAOC;IANG,2CAA2C;IAC3C,OADW,OAAO,eAAe,EAAE,IAAI,CACxB;
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/data/collector.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH;IAKI;;OAEG;IACH,qBAFW,OAAO,sBAAsB,EAAE,aAAa,EActD;IATG,qDAA2C;IAE3C,2CAA2C;IAC3C,WADW,QAAU,SAAS,KAAE,IAAI,CAAC,EAAE,CACpB;IAEnB,uFAAuF;IACvF,cADW,IAAI,GAAG,GAAG,GAAG,EAAE,EAAE,OAAO,eAAe,EAAE,IAAI,CAAC,CAC5B;IAKjC,cAOC;IANG,2CAA2C;IAC3C,OADW,OAAO,eAAe,EAAE,IAAI,CACxB;IA6FnB;;OAEG;IACH,WAFa,SAAS,OAAO,eAAe,EAAE,KAAK,CAAC,CAuBnD;IAED;;;OAGG;IACH,2BAFmB,OAAO,eAAe,EAAE,KAAK,KAAK,IAAI,QAUxD;IAED;;OAEG;IACH,uBAMC;IAED,qBAMC;CACJ;qBAzLyD,eAAe"}
|
|
@@ -89,8 +89,10 @@ export default class Collector extends FlowNode {
|
|
|
89
89
|
);
|
|
90
90
|
const groups =
|
|
91
91
|
accessors.length > 1
|
|
92
|
-
? //
|
|
93
|
-
|
|
92
|
+
? // There's something strange in d3-array's typings
|
|
93
|
+
/** @type {Map<any, any>} */ /** @type {any} */ (
|
|
94
|
+
group(this._data, ...accessors)
|
|
95
|
+
)
|
|
94
96
|
: // D3's group is SLOW!
|
|
95
97
|
groupBy(this._data, accessors[0]);
|
|
96
98
|
|
|
@@ -132,20 +132,29 @@ describe("removeRedundantCloneTransforms", () => {
|
|
|
132
132
|
});
|
|
133
133
|
});
|
|
134
134
|
|
|
135
|
+
const viewStub = {
|
|
136
|
+
paramMediator: {
|
|
137
|
+
registerParam: () => {},
|
|
138
|
+
allocateSetter: () => {},
|
|
139
|
+
createExpression: () => {},
|
|
140
|
+
},
|
|
141
|
+
getBaseUrl: () => "",
|
|
142
|
+
};
|
|
143
|
+
|
|
135
144
|
describe("Merge indentical data sources", () => {
|
|
136
145
|
test("Merges correctly", () => {
|
|
137
146
|
/** @type {DataFlow<string>} */
|
|
138
147
|
const dataFlow = new DataFlow();
|
|
139
148
|
|
|
140
|
-
const a = new UrlSource({ url: "http://genomespy.app/" });
|
|
149
|
+
const a = new UrlSource({ url: "http://genomespy.app/" }, viewStub);
|
|
141
150
|
const ac = new Collector();
|
|
142
151
|
a.addChild(ac);
|
|
143
152
|
|
|
144
|
-
const b = new UrlSource({ url: "http://genomespy.app/" });
|
|
153
|
+
const b = new UrlSource({ url: "http://genomespy.app/" }, viewStub);
|
|
145
154
|
const bc = new Collector();
|
|
146
155
|
b.addChild(bc);
|
|
147
156
|
|
|
148
|
-
const c = new UrlSource({ url: "http://helsinki.fi/" });
|
|
157
|
+
const c = new UrlSource({ url: "http://helsinki.fi/" }, viewStub);
|
|
149
158
|
const cc = new Collector();
|
|
150
159
|
c.addChild(cc);
|
|
151
160
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataUtils.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/dataUtils.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataUtils.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/dataUtils.js"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,kCAHW,OAAO,oBAAoB,EAAE,UAAU;;;;;;;;;;;;;EAsBjD;AAED;;GAEG;AACH,wCAFW,MAAM,GAAG,MAAM,EAAE,UAU3B;AAWD;;;GAGG;AACH,4CAHW,OAAO,oBAAoB,EAAE,UAAU,4DAKjD;AAED;;;GAGG;AACH,4CAHW,OAAO,oBAAoB,EAAE,UAAU,4DAKjD;AAED;;;GAGG;AACH,6CAHW,OAAO,oBAAoB,EAAE,UAAU,6DAKjD;AAED;;;;GAIG;AACH,sCAHW,OAAO,oBAAoB,EAAE,UAAU,sDAKjD;AAxCM,+BAAgC,GAAG,QAI3B,OAAO,uBAAuB,EAAE,MAAM;;UAGtB,OAAO,gBAAgB,EAAE,KAAK,qCANR"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { withoutExprRef } from "../../view/paramMediator.js";
|
|
1
2
|
import { isInlineData } from "./inlineSource.js";
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -13,7 +14,8 @@ export function getFormat(params) {
|
|
|
13
14
|
}
|
|
14
15
|
const format = { ...params.format };
|
|
15
16
|
|
|
16
|
-
format.type ??=
|
|
17
|
+
format.type ??=
|
|
18
|
+
isUrlData(params) && extractTypeFromUrl(withoutExprRef(params.url));
|
|
17
19
|
// @ts-ignore TODO: Fix typing
|
|
18
20
|
format.parse ??= "auto";
|
|
19
21
|
|
|
@@ -15,7 +15,7 @@ export default class BigBedSource extends SingleAxisWindowedSource {
|
|
|
15
15
|
rest?: string;
|
|
16
16
|
}) => Record<string, any>;
|
|
17
17
|
params: import("../../../spec/data.js").BigBedData;
|
|
18
|
-
|
|
18
|
+
#private;
|
|
19
19
|
}
|
|
20
20
|
import SingleAxisWindowedSource from "./singleAxisWindowedSource.js";
|
|
21
21
|
//# sourceMappingURL=bigBedSource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigBedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bigBedSource.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bigBedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bigBedSource.js"],"names":[],"mappings":"AAOA;IAUI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,UAAU,QAC1C,OAAO,uBAAuB,EAAE,OAAO,EAmCjD;IA9CD,0CAA0C;IAC1C,QADW,OAAO,WAAW,EAAE,OAAO,CAC/B;IAEP,yCAAyC;IACzC,KADW,OAAO,WAAW,EAAE,MAAM,CACjC;IAEJ,4GAA4G;IAC5G,mBADmB,MAAM,UAAU;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,MAAM,EAAE,GAAG,CAAC,CAC9F;IA8BN,mDAA6B;;CA8EpC;qCAtHoC,+BAA+B"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
activateExprRefProps,
|
|
3
|
+
withoutExprRef,
|
|
4
|
+
} from "../../../view/paramMediator.js";
|
|
1
5
|
import addBaseUrl from "../../../utils/addBaseUrl.js";
|
|
2
6
|
import SingleAxisWindowedSource from "./singleAxisWindowedSource.js";
|
|
3
7
|
|
|
@@ -25,9 +29,21 @@ export default class BigBedSource extends SingleAxisWindowedSource {
|
|
|
25
29
|
...params,
|
|
26
30
|
};
|
|
27
31
|
|
|
28
|
-
|
|
32
|
+
const activatedParams = activateExprRefProps(
|
|
33
|
+
view.paramMediator,
|
|
34
|
+
paramsWithDefaults,
|
|
35
|
+
(props) => {
|
|
36
|
+
if (props.includes("url")) {
|
|
37
|
+
this.#initialize().then(() => this.reloadLastDomain());
|
|
38
|
+
} else if (props.includes("windowSize")) {
|
|
39
|
+
this.reloadLastDomain();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
super(view, activatedParams.channel);
|
|
29
45
|
|
|
30
|
-
this.params =
|
|
46
|
+
this.params = activatedParams;
|
|
31
47
|
|
|
32
48
|
if (!this.params.url) {
|
|
33
49
|
throw new Error("No URL provided for BigBedSource");
|
|
@@ -35,7 +51,11 @@ export default class BigBedSource extends SingleAxisWindowedSource {
|
|
|
35
51
|
|
|
36
52
|
this.setupDebouncing(this.params);
|
|
37
53
|
|
|
38
|
-
this
|
|
54
|
+
this.#initialize();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
#initialize() {
|
|
58
|
+
this.initializedPromise = new Promise((resolve, reject) => {
|
|
39
59
|
Promise.all([
|
|
40
60
|
import("@gmod/bed"),
|
|
41
61
|
import("@gmod/bbi"),
|
|
@@ -45,28 +65,40 @@ export default class BigBedSource extends SingleAxisWindowedSource {
|
|
|
45
65
|
|
|
46
66
|
this.bbi = new BigBed({
|
|
47
67
|
filehandle: new RemoteFile(
|
|
48
|
-
addBaseUrl(
|
|
68
|
+
addBaseUrl(
|
|
69
|
+
withoutExprRef(this.params.url),
|
|
70
|
+
this.view.getBaseUrl()
|
|
71
|
+
)
|
|
49
72
|
),
|
|
50
73
|
});
|
|
51
74
|
|
|
52
|
-
this.bbi
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
fastParser
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
this.bbi
|
|
76
|
+
.getHeader()
|
|
77
|
+
.then(async (header) => {
|
|
78
|
+
// @ts-ignore TODO: Fix
|
|
79
|
+
this.parser = new BED({ autoSql: header.autoSql });
|
|
80
|
+
try {
|
|
81
|
+
const fastParser = makeFastParser(this.parser);
|
|
82
|
+
this.parseLine = (chrom, f) =>
|
|
83
|
+
fastParser(chrom, f.start, f.end, f.rest);
|
|
84
|
+
} catch (e) {
|
|
85
|
+
this.parseLine = (chrom, f) =>
|
|
86
|
+
this.parser.parseLine(
|
|
87
|
+
`${chrom}\t${f.start}\t${f.end}\t${f.rest}`
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
resolve();
|
|
92
|
+
})
|
|
93
|
+
.catch((e) => {
|
|
94
|
+
// Load empty data
|
|
95
|
+
this.load();
|
|
96
|
+
reject(e);
|
|
97
|
+
});
|
|
68
98
|
});
|
|
69
99
|
});
|
|
100
|
+
|
|
101
|
+
return this.initializedPromise;
|
|
70
102
|
}
|
|
71
103
|
|
|
72
104
|
/**
|
|
@@ -8,7 +8,6 @@ export default class BigWigSource extends SingleAxisWindowedSource {
|
|
|
8
8
|
*/
|
|
9
9
|
constructor(params: import("../../../spec/data.js").BigWigData, view: import("../../../view/view.js").default);
|
|
10
10
|
params: import("../../../spec/data.js").BigWigData;
|
|
11
|
-
initializedPromise: Promise<any>;
|
|
12
11
|
/**
|
|
13
12
|
* Listen to the domain change event and update data when the covered windows change.
|
|
14
13
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigWigSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bigWigSource.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bigWigSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bigWigSource.js"],"names":[],"mappings":"AAOA;;GAEG;AACH;IAOI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,UAAU,QAC1C,OAAO,uBAAuB,EAAE,OAAO,EAmCjD;IATG,mDAA6B;IA8CjC;;;;OAIG;IACH,wBAFW,MAAM,EAAE,iBAqBlB;IAED;;;OAGG;IAEH,uBAJW,MAAM,EAAE,kBACR,MAAM,iBA2BhB;;CACJ;qCA9IoC,+BAA+B"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
activateExprRefProps,
|
|
3
|
+
withoutExprRef,
|
|
4
|
+
} from "../../../view/paramMediator.js";
|
|
1
5
|
import addBaseUrl from "../../../utils/addBaseUrl.js";
|
|
2
6
|
import SingleAxisWindowedSource from "./singleAxisWindowedSource.js";
|
|
3
7
|
|
|
@@ -25,9 +29,21 @@ export default class BigWigSource extends SingleAxisWindowedSource {
|
|
|
25
29
|
...params,
|
|
26
30
|
};
|
|
27
31
|
|
|
28
|
-
|
|
32
|
+
const activatedParams = activateExprRefProps(
|
|
33
|
+
view.paramMediator,
|
|
34
|
+
paramsWithDefaults,
|
|
35
|
+
(props) => {
|
|
36
|
+
if (props.includes("url")) {
|
|
37
|
+
this.#initialize().then(() => this.reloadLastDomain());
|
|
38
|
+
} else if (props.includes("pixelsPerBin")) {
|
|
39
|
+
this.reloadLastDomain();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
super(view, activatedParams.channel);
|
|
29
45
|
|
|
30
|
-
this.params =
|
|
46
|
+
this.params = activatedParams;
|
|
31
47
|
|
|
32
48
|
if (!this.params.url) {
|
|
33
49
|
throw new Error("No URL provided for BigWigSource");
|
|
@@ -35,6 +51,10 @@ export default class BigWigSource extends SingleAxisWindowedSource {
|
|
|
35
51
|
|
|
36
52
|
this.setupDebouncing(this.params);
|
|
37
53
|
|
|
54
|
+
this.#initialize();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
#initialize() {
|
|
38
58
|
this.initializedPromise = new Promise((resolve) => {
|
|
39
59
|
Promise.all([
|
|
40
60
|
import("@gmod/bbi"),
|
|
@@ -42,7 +62,10 @@ export default class BigWigSource extends SingleAxisWindowedSource {
|
|
|
42
62
|
]).then(([{ BigWig }, { RemoteFile }]) => {
|
|
43
63
|
this.#bbi = new BigWig({
|
|
44
64
|
filehandle: new RemoteFile(
|
|
45
|
-
addBaseUrl(
|
|
65
|
+
addBaseUrl(
|
|
66
|
+
withoutExprRef(this.params.url),
|
|
67
|
+
this.view.getBaseUrl()
|
|
68
|
+
)
|
|
46
69
|
),
|
|
47
70
|
});
|
|
48
71
|
|
|
@@ -62,6 +85,8 @@ export default class BigWigSource extends SingleAxisWindowedSource {
|
|
|
62
85
|
});
|
|
63
86
|
});
|
|
64
87
|
});
|
|
88
|
+
|
|
89
|
+
return this.initializedPromise;
|
|
65
90
|
}
|
|
66
91
|
|
|
67
92
|
/**
|
|
@@ -96,7 +121,8 @@ export default class BigWigSource extends SingleAxisWindowedSource {
|
|
|
96
121
|
*/
|
|
97
122
|
// @ts-expect-error
|
|
98
123
|
async loadInterval(interval, reductionLevel) {
|
|
99
|
-
const scale =
|
|
124
|
+
const scale =
|
|
125
|
+
1 / 2 / reductionLevel / withoutExprRef(this.params.pixelsPerBin);
|
|
100
126
|
const featureChunks = await this.discretizeAndLoad(
|
|
101
127
|
interval,
|
|
102
128
|
(d, signal) =>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleAxisLazySource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisLazySource.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IAOI;;;OAGG;IACH,kBAHW,OAAO,uBAAuB,EAAE,OAAO,WACvC,OAAO,0BAA0B,EAAE,wBAAwB,EAiDrE;IAzDD;;;OAGG;IACH,4CAAuC;IASnC,8CAAgB;IAYhB,2EAA2E;IAC3E,SADW,OAAO,0BAA0B,EAAE,wBAAwB,CAChD;IAEtB,oEAA4D;IA+BhE;;;OAGG;IACH,wBAWC;IAED;;;;OAIG;IACH,oEAEC;IAED;;;;;;OAMG;IACH,wBAJW,MAAM,EAAE,iBACR,OAAO,yBAAyB,EAAE,gBAAgB,EAAE,QAK9D;IAED;;;;;OAKG;IACH,mCAHW,OAAO,QAKjB;IAED;;;;;OAKG;IACH,gCAGC;IAQD;;;;;OAKG;IACH,8BAHW,OAAO,mBAAmB,EAAE,KAAK,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"singleAxisLazySource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisLazySource.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IAOI;;;OAGG;IACH,kBAHW,OAAO,uBAAuB,EAAE,OAAO,WACvC,OAAO,0BAA0B,EAAE,wBAAwB,EAiDrE;IAzDD;;;OAGG;IACH,4CAAuC;IASnC,8CAAgB;IAYhB,2EAA2E;IAC3E,SADW,OAAO,0BAA0B,EAAE,wBAAwB,CAChD;IAEtB,oEAA4D;IA+BhE;;;OAGG;IACH,wBAWC;IAED;;;;OAIG;IACH,oEAEC;IAED;;;;;;OAMG;IACH,wBAJW,MAAM,EAAE,iBACR,OAAO,yBAAyB,EAAE,gBAAgB,EAAE,QAK9D;IAED;;;;;OAKG;IACH,mCAHW,OAAO,QAKjB;IAED;;;;;OAKG;IACH,gCAGC;IAQD;;;;;OAKG;IACH,8BAHW,OAAO,mBAAmB,EAAE,KAAK,EAAE,EAAE,QAgB/C;CACJ;uBAtJsB,kBAAkB"}
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export default class SingleAxisWindowedSource extends SingleAxisLazySource {
|
|
8
8
|
/**
|
|
9
|
-
* @type {{windowSize?: number}}
|
|
9
|
+
* @type {{windowSize?: number | import("../../../spec/parameter.js").ExprRef}}
|
|
10
10
|
* @protected
|
|
11
11
|
*/
|
|
12
12
|
protected params: {
|
|
13
|
-
windowSize?: number;
|
|
13
|
+
windowSize?: number | import("../../../spec/parameter.js").ExprRef;
|
|
14
14
|
};
|
|
15
15
|
/**
|
|
16
16
|
* @param {import("../../../spec/data.js").DebouncedData} debounceParams
|
|
@@ -30,6 +30,10 @@ export default class SingleAxisWindowedSource extends SingleAxisLazySource {
|
|
|
30
30
|
* @protected
|
|
31
31
|
*/
|
|
32
32
|
protected loadInterval(interval: number[]): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* @protected
|
|
35
|
+
*/
|
|
36
|
+
protected reloadLastDomain(): void;
|
|
33
37
|
/**
|
|
34
38
|
* Splits the interval into discrete chromosomal intervals – one for each chromosome –
|
|
35
39
|
* and loads the data for each of them. Handles abort signals and errors.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleAxisWindowedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisWindowedSource.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"singleAxisWindowedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisWindowedSource.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH;IAWI;;;OAGG;IACH,kBAHU;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,4BAA4B,EAAE,OAAO,CAAA;KAAC,CAGvE;IAEP;;;OAGG;IACH,0CAHW,OAAO,uBAAuB,EAAE,aAAa,QAqBvD;IAED;;;;OAIG;IACH,wBAFW,MAAM,EAAE,QAqBlB;IAcD;;;;;OAKG;IACH,iCAHW,MAAM,EAAE,iBAKlB;IApBD;;OAEG;IACH,mCAOC;IAYD;;;;;;;;;OASG;IACH,yCANW,MAAM,EAAE,4BACU,OAAO,mCAAmC,EAAE,0BAA0B,UAAU,WAAW,+BAqCvH;IAED;;;;;;OAMG;IACH,yCALW,MAAM,EAAE,cACR,MAAM,mBACG,MAAM,EAAE,KAAE,IAAI,QAyBjC;;CACJ;iCA3KgC,2BAA2B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { withoutExprRef } from "../../../view/paramMediator.js";
|
|
2
|
+
import { debounce } from "../../../utils/debounce.js";
|
|
1
3
|
import SingleAxisLazySource from "./singleAxisLazySource.js";
|
|
2
|
-
import { debounce } from "@genome-spy/core/utils/debounce.js";
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Divides the domain into windows and loads the data for one or two consecutive windows
|
|
@@ -10,15 +11,16 @@ import { debounce } from "@genome-spy/core/utils/debounce.js";
|
|
|
10
11
|
export default class SingleAxisWindowedSource extends SingleAxisLazySource {
|
|
11
12
|
#abortController = new AbortController();
|
|
12
13
|
|
|
13
|
-
/**
|
|
14
|
-
* @type {number[]}
|
|
15
|
-
*/
|
|
14
|
+
/** @type {number[]} */
|
|
16
15
|
#lastQuantizedInterval = [0, 0];
|
|
17
16
|
|
|
17
|
+
/** @type {number[]} */
|
|
18
|
+
#lastDomain = [0, 0];
|
|
19
|
+
|
|
18
20
|
#lastWindowSize = 0;
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
|
-
* @type {{windowSize?: number}}
|
|
23
|
+
* @type {{windowSize?: number | import("../../../spec/parameter.js").ExprRef}}
|
|
22
24
|
* @protected
|
|
23
25
|
*/
|
|
24
26
|
params;
|
|
@@ -28,20 +30,22 @@ export default class SingleAxisWindowedSource extends SingleAxisLazySource {
|
|
|
28
30
|
* @protected
|
|
29
31
|
*/
|
|
30
32
|
setupDebouncing(debounceParams) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
33
|
+
const wait = () => withoutExprRef(debounceParams.debounce);
|
|
34
|
+
const debounceMode = debounceParams.debounceMode;
|
|
35
|
+
if (debounceMode == "domain") {
|
|
36
|
+
this.onDomainChanged = debounce(
|
|
37
|
+
this.onDomainChanged.bind(this),
|
|
38
|
+
wait,
|
|
39
|
+
false
|
|
40
|
+
);
|
|
41
|
+
} else if (debounceMode == "window") {
|
|
42
|
+
this.loadInterval = debounce(
|
|
43
|
+
this.loadInterval.bind(this),
|
|
44
|
+
wait,
|
|
45
|
+
false
|
|
46
|
+
);
|
|
47
|
+
} else {
|
|
48
|
+
throw new Error("Invalid debounceMode: " + debounceMode);
|
|
45
49
|
}
|
|
46
50
|
}
|
|
47
51
|
|
|
@@ -51,7 +55,9 @@ export default class SingleAxisWindowedSource extends SingleAxisLazySource {
|
|
|
51
55
|
* @param {number[]} domain Linearized domain
|
|
52
56
|
*/
|
|
53
57
|
onDomainChanged(domain) {
|
|
54
|
-
|
|
58
|
+
this.#lastDomain = domain;
|
|
59
|
+
|
|
60
|
+
const windowSize = withoutExprRef(this.params?.windowSize) ?? -1;
|
|
55
61
|
|
|
56
62
|
if (domain[1] - domain[0] > windowSize) {
|
|
57
63
|
return;
|
|
@@ -69,6 +75,18 @@ export default class SingleAxisWindowedSource extends SingleAxisLazySource {
|
|
|
69
75
|
);
|
|
70
76
|
}
|
|
71
77
|
|
|
78
|
+
/**
|
|
79
|
+
* @protected
|
|
80
|
+
*/
|
|
81
|
+
reloadLastDomain() {
|
|
82
|
+
const domain = this.#lastDomain;
|
|
83
|
+
|
|
84
|
+
this.#lastDomain = [0, 0];
|
|
85
|
+
this.#lastQuantizedInterval = [0, 0];
|
|
86
|
+
|
|
87
|
+
this.onDomainChanged(domain);
|
|
88
|
+
}
|
|
89
|
+
|
|
72
90
|
/**
|
|
73
91
|
* Listen to the domain change event and update data when the covered windows change.
|
|
74
92
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequenceSource.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/sequenceSource.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sequenceSource.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/sequenceSource.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,0CAHW,QAAQ,OAAO,oBAAoB,EAAE,IAAI,CAAC,0DAKpD;AAED;IACI;;;;OAIG;IACH,oBAHW,OAAO,oBAAoB,EAAE,iBAAiB,QAC9C,OAAO,oBAAoB,EAAE,OAAO,EAgB9C;IAZG,sDAIC;IAUL,0BAcC;CAKJ;uBAnDsB,iBAAiB"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
activateExprRefProps,
|
|
3
|
+
withoutExprRef,
|
|
4
|
+
} from "../../view/paramMediator.js";
|
|
1
5
|
import DataSource from "./dataSource.js";
|
|
2
6
|
|
|
3
7
|
/**
|
|
@@ -16,7 +20,11 @@ export default class SequenceSource extends DataSource {
|
|
|
16
20
|
*/
|
|
17
21
|
constructor(params, view) {
|
|
18
22
|
super();
|
|
19
|
-
this.sequence =
|
|
23
|
+
this.sequence = activateExprRefProps(
|
|
24
|
+
view.paramMediator,
|
|
25
|
+
params.sequence,
|
|
26
|
+
() => this.loadSynchronously()
|
|
27
|
+
);
|
|
20
28
|
|
|
21
29
|
if (!("start" in this.sequence)) {
|
|
22
30
|
throw new Error("'start' is missing from sequence parameters!");
|
|
@@ -27,14 +35,15 @@ export default class SequenceSource extends DataSource {
|
|
|
27
35
|
}
|
|
28
36
|
|
|
29
37
|
loadSynchronously() {
|
|
30
|
-
const as = this.sequence.as
|
|
31
|
-
const
|
|
32
|
-
const
|
|
38
|
+
const as = withoutExprRef(this.sequence.as) ?? "data";
|
|
39
|
+
const start = withoutExprRef(this.sequence.start) ?? 0;
|
|
40
|
+
const step = withoutExprRef(this.sequence.step) ?? 1;
|
|
41
|
+
const stop = withoutExprRef(this.sequence.stop);
|
|
33
42
|
|
|
34
43
|
this.reset();
|
|
35
44
|
this.beginBatch({ type: "file" });
|
|
36
45
|
|
|
37
|
-
for (let x =
|
|
46
|
+
for (let x = start; x < stop; x += step) {
|
|
38
47
|
this._propagate({ [as]: x });
|
|
39
48
|
}
|
|
40
49
|
|
|
@@ -14,10 +14,18 @@ async function collectSource(source) {
|
|
|
14
14
|
return [...collector.getData()];
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
const viewStub = {
|
|
18
|
+
paramMediator: {
|
|
19
|
+
registerParam: () => {},
|
|
20
|
+
allocateSetter: () => {},
|
|
21
|
+
createExpression: () => {},
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
|
|
17
25
|
test("SequenceSource generates a sequence", async () => {
|
|
18
26
|
expect(
|
|
19
27
|
await collectSource(
|
|
20
|
-
new SequenceSource({ sequence: { start: 0, stop: 3 } })
|
|
28
|
+
new SequenceSource({ sequence: { start: 0, stop: 3 } }, viewStub)
|
|
21
29
|
)
|
|
22
30
|
).toEqual([{ data: 0 }, { data: 1 }, { data: 2 }]);
|
|
23
31
|
});
|
|
@@ -25,7 +33,10 @@ test("SequenceSource generates a sequence", async () => {
|
|
|
25
33
|
test("SequenceSource generates a sequence with a custom step", async () => {
|
|
26
34
|
expect(
|
|
27
35
|
await collectSource(
|
|
28
|
-
new SequenceSource(
|
|
36
|
+
new SequenceSource(
|
|
37
|
+
{ sequence: { start: 0, stop: 5, step: 2 } },
|
|
38
|
+
viewStub
|
|
39
|
+
)
|
|
29
40
|
)
|
|
30
41
|
).toEqual([{ data: 0 }, { data: 2 }, { data: 4 }]);
|
|
31
42
|
});
|
|
@@ -33,14 +44,21 @@ test("SequenceSource generates a sequence with a custom step", async () => {
|
|
|
33
44
|
test("SequenceSource generates a sequence with a custom field name", async () => {
|
|
34
45
|
expect(
|
|
35
46
|
await collectSource(
|
|
36
|
-
new SequenceSource(
|
|
47
|
+
new SequenceSource(
|
|
48
|
+
{ sequence: { start: 0, stop: 3, as: "x" } },
|
|
49
|
+
viewStub
|
|
50
|
+
)
|
|
37
51
|
)
|
|
38
52
|
).toEqual([{ x: 0 }, { x: 1 }, { x: 2 }]);
|
|
39
53
|
});
|
|
40
54
|
|
|
41
55
|
test("SequenceSource throws on missing 'start' parameter", () => {
|
|
42
|
-
expect(
|
|
56
|
+
expect(
|
|
57
|
+
() => new SequenceSource({ sequence: { stop: 3 } }, viewStub)
|
|
58
|
+
).toThrow();
|
|
43
59
|
});
|
|
44
60
|
test("SequenceSource throws on missing 'stop' parameter", () => {
|
|
45
|
-
expect(
|
|
61
|
+
expect(
|
|
62
|
+
() => new SequenceSource({ sequence: { start: 0 } }, viewStub)
|
|
63
|
+
).toThrow();
|
|
46
64
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urlSource.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/urlSource.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"urlSource.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/urlSource.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH,gCAHW,QAAQ,OAAO,oBAAoB,EAAE,IAAI,CAAC,gDAKpD;AAED;IACI;;;OAGG;IACH,oBAHW,OAAO,oBAAoB,EAAE,OAAO,QACpC,OAAO,oBAAoB,EAAE,OAAO,EAU9C;IALG,6CAEC;IAED,gBAAiC;CA0DxC;uBApFsB,iBAAiB"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { loader as vegaLoader, read } from "vega-loader";
|
|
2
2
|
import { getFormat } from "./dataUtils.js";
|
|
3
3
|
import DataSource from "./dataSource.js";
|
|
4
|
+
import {
|
|
5
|
+
activateExprRefProps,
|
|
6
|
+
withoutExprRef,
|
|
7
|
+
} from "../../view/paramMediator.js";
|
|
4
8
|
|
|
5
9
|
/**
|
|
6
10
|
* @param {Partial<import("../../spec/data.js").Data>} data
|
|
@@ -18,7 +22,10 @@ export default class UrlSource extends DataSource {
|
|
|
18
22
|
constructor(params, view) {
|
|
19
23
|
super();
|
|
20
24
|
|
|
21
|
-
this.params = params
|
|
25
|
+
this.params = activateExprRefProps(view.paramMediator, params, () =>
|
|
26
|
+
this.load()
|
|
27
|
+
);
|
|
28
|
+
|
|
22
29
|
this.baseUrl = view?.getBaseUrl();
|
|
23
30
|
}
|
|
24
31
|
|
|
@@ -27,11 +34,17 @@ export default class UrlSource extends DataSource {
|
|
|
27
34
|
}
|
|
28
35
|
|
|
29
36
|
async load() {
|
|
30
|
-
const url = this.params.url;
|
|
37
|
+
const url = withoutExprRef(this.params.url);
|
|
31
38
|
|
|
32
39
|
/** @type {string[]} */
|
|
33
40
|
const urls = Array.isArray(url) ? url : [url];
|
|
34
41
|
|
|
42
|
+
if (urls.length === 0 || !urls[0]) {
|
|
43
|
+
this.reset();
|
|
44
|
+
this.complete();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
35
48
|
/** @param {string} url */
|
|
36
49
|
const load = async (url) =>
|
|
37
50
|
// TODO: Support chunked loading
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/aggregate.js"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH;IAKI;;OAEG;IACH,oBAFW,OAAO,yBAAyB,EAAE,eAAe,EAQ3D;IAJG,0DAAoB;IAEpB,oBAAoB;IACpB,QADW,GAAG,EAAE,CACA;
|
|
1
|
+
{"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/aggregate.js"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH;IAKI;;OAEG;IACH,oBAFW,OAAO,yBAAyB,EAAE,eAAe,EAQ3D;IAJG,0DAAoB;IAEpB,oBAAoB;IACpB,QADW,GAAG,EAAE,CACA;CA4CvB;qBApEyC,gBAAgB"}
|
|
@@ -46,8 +46,11 @@ export default class AggregateTransform extends FlowNode {
|
|
|
46
46
|
const groupFieldAccessors = groupby.map((f) => field(f));
|
|
47
47
|
|
|
48
48
|
// TODO: Fix case where no group fields are specified
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
|
|
50
|
+
// There's something strange in d3-array's typings
|
|
51
|
+
const groups = /** @type {Map<any, any>} */ /** @type {any} */ (
|
|
52
|
+
d3group(this.buffer, ...groupFieldAccessors)
|
|
53
|
+
);
|
|
51
54
|
|
|
52
55
|
for (const [group, data] of iterateNestedMaps(groups)) {
|
|
53
56
|
/** @type {any} */
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Creates an object that contains encoders for every channel of a mark
|
|
3
3
|
*
|
|
4
|
-
* TODO: This should actually receive the mark as parameter
|
|
5
|
-
*
|
|
6
4
|
* TODO: This method should have a test. But how to mock Mark...
|
|
7
5
|
*
|
|
8
6
|
* @param {import("../marks/mark.js").default} mark
|
|
@@ -11,14 +9,14 @@
|
|
|
11
9
|
*/
|
|
12
10
|
export default function createEncoders(mark: import("../marks/mark.js").default, encoding?: import("../spec/channel.js").Encoding): Partial<Record<import("../spec/channel.js").Channel, import("../types/encoder.js").Encoder>>;
|
|
13
11
|
/**
|
|
14
|
-
*
|
|
12
|
+
* @param {import("../marks/mark.js").default} mark
|
|
15
13
|
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
16
14
|
* @param {any} scale
|
|
17
15
|
* @param {Accessor} accessor
|
|
18
16
|
* @param {Channel} channel
|
|
19
17
|
* @returns {Encoder}
|
|
20
18
|
*/
|
|
21
|
-
export function createEncoder(channelDef: import("../spec/channel.js").ChannelDef, scale: any, accessor: import("../types/encoder.js").Accessor, channel: import("../spec/channel.js").Channel): import("../types/encoder.js").Encoder;
|
|
19
|
+
export function createEncoder(mark: import("../marks/mark.js").default, channelDef: import("../spec/channel.js").ChannelDef, scale: any, accessor: import("../types/encoder.js").Accessor, channel: import("../spec/channel.js").Channel): import("../types/encoder.js").Encoder;
|
|
22
20
|
/**
|
|
23
21
|
* TODO: Move to a more generic place
|
|
24
22
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/encoder/encoder.js"],"names":[],"mappings":"AAKA
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/encoder/encoder.js"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,6CAJW,OAAO,kBAAkB,EAAE,OAAO,aAClC,OAAO,oBAAoB,EAAE,QAAQ,gGAuC/C;AAED;;;;;;;GAOG;AACH,oCAPW,OAAO,kBAAkB,EAAE,OAAO,cAClC,OAAO,oBAAoB,EAAE,UAAU,SACvC,GAAG,0IAqGb;AAED;;;;;GAKG;AACH,uCAHW,OAAO,oBAAoB,EAAE,UAAU,4FAKjD;AAED;;;GAGG;AACH,uCAHW,OAAO,oBAAoB,EAAE,UAAU,mEAKjD;AAED;;;GAGG;AACH,uCAHW,OAAO,oBAAoB,EAAE,UAAU,uDAKjD;AAED;;;GAGG;AACH,kDAHW,OAAO,oBAAoB,EAAE,UAAU,kEAWjD;AAED;;;GAGG;AACH,6CAHW,OAAO,qBAAqB,EAAE,OAAO,WACrC,OAAO,oBAAoB,EAAE,OAAO,27CAS9C;AAED;;;GAGG;AACH,iDAHW,OAAO,oBAAoB,EAAE,UAAU,4FAKjD;AAED;;;GAGG;AACH,0CAHW,OAAO,oBAAoB,EAAE,UAAU,0DAKjD;AAED;;;GAGG;AACH,sCAHW,OAAO,oBAAoB,EAAE,UAAU,sDAKjD;AAoBD;;;GAGG;AACH,oDAHW,OAAO,oBAAoB,EAAE,OAAO,oEAM9C;AAED;;;GAGG;AACH,6CAHW,OAAO,oBAAoB,EAAE,OAAO,6DAM9C;AAqBD;;;GAGG;AACH,4CAFW,MAAM,WAIhB;AAED;;;;GAIG;AACH,oDAFW,OAAO,oBAAoB,EAAE,OAAO,2DAS9C;AAED;;;;;GAKG;AACH,2CAFW,OAAO,oBAAoB,EAAE,OAAO,wCAI9C;AAED;;;;GAIG;AACH,kDAFW,OAAO,oBAAoB,EAAE,OAAO,0CAM9C;AAED;;GAEG;AACH,wCAFW,OAAO,oBAAoB,EAAE,OAAO,WAI9C;AAED;;;;GAIG;AACH,2CAFW,OAAO,oBAAoB,EAAE,OAAO,WAI9C;AAED;;;GAGG;AACH,4CAHW,OAAO,oBAAoB,EAAE,OAAO,4DAuB9C;AAED;;;;;GAKG;AACH,0CAHW,OAAO,oBAAoB,EAAE,OAAO,GAClC,GAAG,EAAE,CAsBjB;AAED;;;GAGG;AACH,gDAHW,OAAO,oBAAoB,EAAE,OAAO,UACzB,GAAG,KAAE,MAAM,CAmBhC;AA7LD;;GAEG;AACH,wCAFU,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,CAEb;AAEpD;;GAEG;AACH,0CAFU,OAAO,oBAAoB,EAAE,0BAA0B,EAAE,CAEX;AAExD;;GAEG;AACH,iCAFU,OAAO,oBAAoB,EAAE,iBAAiB,EAAE,CAKxD;AAoBF;;;;GAIG;AACH,gCAFU,QAAQ,OAAO,OAAO,oBAAoB,EAAE,OAAO,EAAE,OAAO,oBAAoB,EAAE,0BAA0B,CAAC,CAAC,CAKtH;AAEF;;;;GAIG;AACH,8BAFU,QAAQ,OAAO,OAAO,oBAAoB,EAAE,OAAO,EAAE,OAAO,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAInG"}
|