@genome-spy/core 0.66.1 → 0.68.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 +7669 -6115
- package/dist/bundle/index.js +114 -133
- package/dist/schema.json +534 -132
- package/dist/src/data/collector.d.ts +20 -0
- package/dist/src/data/collector.d.ts.map +1 -1
- package/dist/src/data/collector.js +148 -0
- package/dist/src/data/dataFlow.d.ts +6 -0
- package/dist/src/data/dataFlow.d.ts.map +1 -1
- package/dist/src/data/dataFlow.js +10 -0
- package/dist/src/data/flowHandle.d.ts +2 -0
- package/dist/src/data/flowHandle.d.ts.map +1 -1
- package/dist/src/data/flowHandle.js +1 -0
- package/dist/src/data/flowInit.d.ts +12 -4
- package/dist/src/data/flowInit.d.ts.map +1 -1
- package/dist/src/data/flowInit.js +115 -17
- package/dist/src/data/flowNode.d.ts +8 -0
- package/dist/src/data/flowNode.d.ts.map +1 -1
- package/dist/src/data/flowNode.js +18 -0
- package/dist/src/data/keyIndex.d.ts +18 -0
- package/dist/src/data/keyIndex.d.ts.map +1 -0
- package/dist/src/data/keyIndex.js +241 -0
- package/dist/src/data/keyIndex.test.d.ts +2 -0
- package/dist/src/data/keyIndex.test.d.ts.map +1 -0
- package/dist/src/data/sources/dataSource.d.ts.map +1 -1
- package/dist/src/data/sources/dataSource.js +5 -1
- package/dist/src/data/sources/dataSourceFactory.d.ts +14 -12
- package/dist/src/data/sources/dataSourceFactory.d.ts.map +1 -1
- package/dist/src/data/sources/dataSourceFactory.js +52 -16
- package/dist/src/data/sources/lazy/mockLazySource.d.ts +29 -0
- package/dist/src/data/sources/lazy/mockLazySource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/mockLazySource.js +44 -0
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts +22 -1
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisLazySource.js +34 -2
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +15 -0
- package/dist/src/data/sources/lazy/tabixSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/tabixSource.js +15 -5
- package/dist/src/data/transforms/stack.d.ts.map +1 -1
- package/dist/src/data/transforms/stack.js +1 -0
- package/dist/src/encoder/accessor.d.ts +43 -0
- package/dist/src/encoder/accessor.d.ts.map +1 -1
- package/dist/src/encoder/accessor.js +164 -0
- package/dist/src/encoder/encoder.d.ts +11 -2
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/encoder/encoder.js +24 -4
- package/dist/src/encoder/metadataChannels.d.ts +15 -0
- package/dist/src/encoder/metadataChannels.d.ts.map +1 -0
- package/dist/src/encoder/metadataChannels.js +65 -0
- package/dist/src/encoder/metadataChannels.test.d.ts +2 -0
- package/dist/src/encoder/metadataChannels.test.d.ts.map +1 -0
- package/dist/src/genome/scaleLocus.d.ts.map +1 -1
- package/dist/src/genome/scaleLocus.js +14 -1
- package/dist/src/genomeSpy/containerUi.d.ts +0 -1
- package/dist/src/genomeSpy/containerUi.d.ts.map +1 -1
- package/dist/src/genomeSpy/containerUi.js +0 -14
- package/dist/src/genomeSpy/loadingIndicatorManager.d.ts +3 -7
- package/dist/src/genomeSpy/loadingIndicatorManager.d.ts.map +1 -1
- package/dist/src/genomeSpy/loadingIndicatorManager.js +68 -20
- package/dist/src/genomeSpy/loadingStatusRegistry.d.ts +52 -0
- package/dist/src/genomeSpy/loadingStatusRegistry.d.ts.map +1 -0
- package/dist/src/genomeSpy/loadingStatusRegistry.js +86 -0
- package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -1
- package/dist/src/genomeSpy/viewContextFactory.js +0 -1
- package/dist/src/genomeSpy/viewDataInit.d.ts +10 -0
- package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -1
- package/dist/src/genomeSpy/viewDataInit.js +166 -2
- package/dist/src/genomeSpy/viewDataInit.test.d.ts +2 -0
- package/dist/src/genomeSpy/viewDataInit.test.d.ts.map +1 -0
- package/dist/src/genomeSpy.d.ts +1 -2
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +69 -27
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.js +16 -4
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +18 -11
- package/dist/src/marks/markUtils.js +1 -1
- package/dist/src/scale/scale.d.ts +6 -1
- package/dist/src/scale/scale.d.ts.map +1 -1
- package/dist/src/scale/scale.js +83 -23
- package/dist/src/scales/axisResolution.d.ts.map +1 -1
- package/dist/src/scales/axisResolution.js +10 -0
- package/dist/src/scales/{scaleDomainAggregator.d.ts → domainPlanner.d.ts} +8 -5
- package/dist/src/scales/domainPlanner.d.ts.map +1 -0
- package/dist/src/scales/domainPlanner.js +285 -0
- package/dist/src/scales/domainPlanner.test.d.ts +2 -0
- package/dist/src/scales/domainPlanner.test.d.ts.map +1 -0
- package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
- package/dist/src/scales/scaleInstanceManager.js +8 -4
- package/dist/src/scales/scaleInteractionController.d.ts +6 -0
- package/dist/src/scales/scaleInteractionController.d.ts.map +1 -1
- package/dist/src/scales/scaleInteractionController.js +41 -3
- package/dist/src/scales/scaleResolution.d.ts +19 -16
- package/dist/src/scales/scaleResolution.d.ts.map +1 -1
- package/dist/src/scales/scaleResolution.js +255 -70
- package/dist/src/scales/scaleResolution.test.d.ts.map +1 -1
- package/dist/src/selection/selection.d.ts +21 -0
- package/dist/src/selection/selection.d.ts.map +1 -1
- package/dist/src/selection/selection.js +82 -0
- package/dist/src/spec/channel.d.ts +52 -15
- package/dist/src/spec/data.d.ts +4 -0
- package/dist/src/spec/parameter.d.ts +16 -11
- package/dist/src/spec/testing.d.ts +12 -0
- package/dist/src/spec/testing.d.ts.map +1 -0
- package/dist/src/spec/testing.js +20 -0
- package/dist/src/spec/view.d.ts +45 -10
- package/dist/src/styles/genome-spy.css +3 -31
- 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 +0 -29
- package/dist/src/types/encoder.d.ts +37 -2
- package/dist/src/types/rendering.d.ts +4 -3
- package/dist/src/types/viewContext.d.ts +0 -14
- package/dist/src/utils/domainArray.d.ts.map +1 -1
- package/dist/src/utils/domainArray.js +3 -0
- package/dist/src/utils/indexer.d.ts +3 -0
- package/dist/src/utils/indexer.d.ts.map +1 -1
- package/dist/src/utils/indexer.js +3 -0
- package/dist/src/utils/throttle.d.ts +4 -1
- package/dist/src/utils/throttle.d.ts.map +1 -1
- package/dist/src/utils/throttle.js +54 -23
- package/dist/src/utils/throttle.test.d.ts +2 -0
- package/dist/src/utils/throttle.test.d.ts.map +1 -0
- package/dist/src/utils/transition.d.ts +21 -0
- package/dist/src/utils/transition.d.ts.map +1 -1
- package/dist/src/utils/transition.js +28 -0
- package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
- package/dist/src/utils/ui/tooltip.js +7 -1
- package/dist/src/utils/ui/tooltip.test.d.ts +2 -0
- package/dist/src/utils/ui/tooltip.test.d.ts.map +1 -0
- package/dist/src/view/axisGridView.d.ts.map +1 -1
- package/dist/src/view/axisGridView.js +22 -5
- package/dist/src/view/axisView.d.ts.map +1 -1
- package/dist/src/view/axisView.js +20 -5
- package/dist/src/view/concatView.js +3 -3
- package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
- package/dist/src/view/containerMutationHelper.js +6 -2
- package/dist/src/view/containerView.d.ts +9 -5
- package/dist/src/view/containerView.d.ts.map +1 -1
- package/dist/src/view/containerView.js +34 -9
- package/dist/src/view/dataReadiness.d.ts +46 -0
- package/dist/src/view/dataReadiness.d.ts.map +1 -0
- package/dist/src/view/dataReadiness.js +267 -0
- package/dist/src/view/dataReadiness.test.d.ts +2 -0
- package/dist/src/view/dataReadiness.test.d.ts.map +1 -0
- package/dist/src/view/facetView.d.ts.map +1 -1
- package/dist/src/view/facetView.js +7 -5
- package/dist/src/view/flowBuilder.d.ts +5 -3
- package/dist/src/view/flowBuilder.d.ts.map +1 -1
- package/dist/src/view/flowBuilder.js +74 -7
- package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
- package/dist/src/view/gridView/gridChild.js +8 -0
- package/dist/src/view/gridView/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView/gridView.js +119 -2
- package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
- package/dist/src/view/gridView/scrollbar.js +3 -0
- package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
- package/dist/src/view/gridView/selectionRect.js +20 -5
- package/dist/src/view/gridView/separatorView.d.ts +51 -0
- package/dist/src/view/gridView/separatorView.d.ts.map +1 -0
- package/dist/src/view/gridView/separatorView.js +275 -0
- package/dist/src/view/layerView.js +3 -3
- package/dist/src/view/layout/flexLayout.d.ts +0 -30
- package/dist/src/view/layout/flexLayout.d.ts.map +1 -1
- package/dist/src/view/layout/flexLayout.js +0 -86
- package/dist/src/view/paramMediator.d.ts +19 -0
- package/dist/src/view/paramMediator.d.ts.map +1 -1
- package/dist/src/view/paramMediator.js +86 -19
- package/dist/src/view/testUtils.d.ts.map +1 -1
- package/dist/src/view/testUtils.js +11 -1
- package/dist/src/view/unitView.d.ts +8 -13
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +127 -43
- package/dist/src/view/view.d.ts +34 -14
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +119 -9
- package/dist/src/view/viewFactory.d.ts.map +1 -1
- package/dist/src/view/viewFactory.js +20 -1
- package/dist/src/view/viewSelectors.d.ts +148 -0
- package/dist/src/view/viewSelectors.d.ts.map +1 -0
- package/dist/src/view/viewSelectors.js +773 -0
- package/dist/src/view/viewSelectors.test.d.ts +2 -0
- package/dist/src/view/viewSelectors.test.d.ts.map +1 -0
- package/dist/src/view/viewUtils.d.ts +0 -8
- package/dist/src/view/viewUtils.d.ts.map +1 -1
- package/dist/src/view/viewUtils.js +1 -21
- package/package.json +3 -3
- package/dist/src/scales/scaleDomainAggregator.d.ts.map +0 -1
- package/dist/src/scales/scaleDomainAggregator.js +0 -162
- package/dist/src/scales/scaleDomainAggregator.test.d.ts +0 -2
- package/dist/src/scales/scaleDomainAggregator.test.d.ts.map +0 -1
|
@@ -1,37 +1,68 @@
|
|
|
1
|
-
/* eslint-disable consistent-this */
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* https://codeburst.io/throttling-and-debouncing-in-javascript-b01cad5c8edf
|
|
5
3
|
*
|
|
6
4
|
* @param {function} func
|
|
7
5
|
* @param {number} limit
|
|
6
|
+
* @returns {((...args: any[]) => void) & { cancel: () => void }}
|
|
8
7
|
*/
|
|
9
8
|
export default function throttle(func, limit) {
|
|
10
|
-
/** @type {
|
|
11
|
-
let
|
|
9
|
+
/** @type {ReturnType<typeof setTimeout> | null} */
|
|
10
|
+
let timeoutId = null;
|
|
11
|
+
|
|
12
|
+
/** @type {number | null} */
|
|
13
|
+
let lastRan = null;
|
|
14
|
+
|
|
15
|
+
/** @type {IArguments | null} */
|
|
16
|
+
let lastArgs = null;
|
|
12
17
|
|
|
13
|
-
/** @type {
|
|
14
|
-
let
|
|
18
|
+
/** @type {any} */
|
|
19
|
+
let lastContext = null;
|
|
15
20
|
|
|
16
|
-
|
|
21
|
+
const throttled = function () {
|
|
17
22
|
// eslint-disable-next-line no-invalid-this
|
|
18
|
-
|
|
23
|
+
lastContext = this;
|
|
19
24
|
// eslint-disable-next-line prefer-rest-params
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
lastArgs = arguments;
|
|
26
|
+
|
|
27
|
+
const now = Date.now();
|
|
28
|
+
if (lastRan === null) {
|
|
29
|
+
func.apply(lastContext, lastArgs);
|
|
30
|
+
lastRan = now;
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const remaining = limit - (now - lastRan);
|
|
35
|
+
if (remaining <= 0) {
|
|
36
|
+
if (timeoutId) {
|
|
37
|
+
clearTimeout(timeoutId);
|
|
38
|
+
timeoutId = null;
|
|
39
|
+
}
|
|
40
|
+
func.apply(lastContext, lastArgs);
|
|
41
|
+
lastRan = now;
|
|
42
|
+
return;
|
|
35
43
|
}
|
|
44
|
+
|
|
45
|
+
if (timeoutId) {
|
|
46
|
+
clearTimeout(timeoutId);
|
|
47
|
+
}
|
|
48
|
+
timeoutId = setTimeout(() => {
|
|
49
|
+
timeoutId = null;
|
|
50
|
+
if (lastRan !== null && Date.now() - lastRan >= limit) {
|
|
51
|
+
func.apply(lastContext, lastArgs);
|
|
52
|
+
lastRan = Date.now();
|
|
53
|
+
}
|
|
54
|
+
}, remaining);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
throttled.cancel = () => {
|
|
58
|
+
if (timeoutId) {
|
|
59
|
+
clearTimeout(timeoutId);
|
|
60
|
+
timeoutId = null;
|
|
61
|
+
}
|
|
62
|
+
lastArgs = null;
|
|
63
|
+
lastContext = null;
|
|
64
|
+
lastRan = null;
|
|
36
65
|
};
|
|
66
|
+
|
|
67
|
+
return throttled;
|
|
37
68
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throttle.test.d.ts","sourceRoot":"","sources":["../../../src/utils/throttle.test.js"],"names":[],"mappings":""}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight cancellation token for transitions.
|
|
3
|
+
* Use this when you want a cheap, synchronous cancel path without errors.
|
|
4
|
+
*
|
|
5
|
+
* @returns {{ canceled: boolean }}
|
|
6
|
+
*/
|
|
7
|
+
export function createCancelToken(): {
|
|
8
|
+
canceled: boolean;
|
|
9
|
+
};
|
|
1
10
|
/**
|
|
2
11
|
* @param {TransitionOptions} options
|
|
3
12
|
*
|
|
@@ -11,6 +20,10 @@
|
|
|
11
20
|
* @prop {function(function(number):void):void} [requestAnimationFrame]
|
|
12
21
|
* default: window.requestAnimationFrame
|
|
13
22
|
* @prop {AbortSignal} [signal]
|
|
23
|
+
* @prop {{ canceled: boolean }} [cancelToken]
|
|
24
|
+
* Prefer this for internal transitions where cancellation is expected and should be cheap.
|
|
25
|
+
* The transition resolves immediately when canceled and does not throw or reject.
|
|
26
|
+
* Use AbortSignal when you need external orchestration or standardized cancellation.
|
|
14
27
|
*/
|
|
15
28
|
export default function transition(options: TransitionOptions): Promise<any>;
|
|
16
29
|
export type TransitionOptions = {
|
|
@@ -40,5 +53,13 @@ export type TransitionOptions = {
|
|
|
40
53
|
*/
|
|
41
54
|
requestAnimationFrame?: (arg0: (arg0: number) => void) => void;
|
|
42
55
|
signal?: AbortSignal;
|
|
56
|
+
/**
|
|
57
|
+
* Prefer this for internal transitions where cancellation is expected and should be cheap.
|
|
58
|
+
* The transition resolves immediately when canceled and does not throw or reject.
|
|
59
|
+
* Use AbortSignal when you need external orchestration or standardized cancellation.
|
|
60
|
+
*/
|
|
61
|
+
cancelToken?: {
|
|
62
|
+
canceled: boolean;
|
|
63
|
+
};
|
|
43
64
|
};
|
|
44
65
|
//# sourceMappingURL=transition.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../../../src/utils/transition.js"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../../../src/utils/transition.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,qCAFa;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAIjC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,4CAjBW,iBAAiB,gBAuF3B;;;;;WApFS,MAAM;;;;SACN,MAAM;;;;eACN,MAAM;;;;YACN,MAAM;cACN,CAAS,IAAM,EAAN,MAAM,KAAE,IAAI;;;;qBACrB,CAAS,IAAM,EAAN,MAAM,KAAE,MAAM;;;;4BACvB,CAAS,IAAqB,EAArB,CAAS,IAAM,EAAN,MAAM,KAAE,IAAI,KAAE,IAAI;aAEpC,WAAW;;;;;;kBACX;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE"}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
/** @param {number} ms */
|
|
2
2
|
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Lightweight cancellation token for transitions.
|
|
6
|
+
* Use this when you want a cheap, synchronous cancel path without errors.
|
|
7
|
+
*
|
|
8
|
+
* @returns {{ canceled: boolean }}
|
|
9
|
+
*/
|
|
10
|
+
export function createCancelToken() {
|
|
11
|
+
return { canceled: false };
|
|
12
|
+
}
|
|
13
|
+
|
|
4
14
|
/**
|
|
5
15
|
* @param {TransitionOptions} options
|
|
6
16
|
*
|
|
@@ -14,15 +24,24 @@ const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
|
14
24
|
* @prop {function(function(number):void):void} [requestAnimationFrame]
|
|
15
25
|
* default: window.requestAnimationFrame
|
|
16
26
|
* @prop {AbortSignal} [signal]
|
|
27
|
+
* @prop {{ canceled: boolean }} [cancelToken]
|
|
28
|
+
* Prefer this for internal transitions where cancellation is expected and should be cheap.
|
|
29
|
+
* The transition resolves immediately when canceled and does not throw or reject.
|
|
30
|
+
* Use AbortSignal when you need external orchestration or standardized cancellation.
|
|
17
31
|
*/
|
|
18
32
|
export default function transition(options) {
|
|
19
33
|
const requestAnimationFrame =
|
|
20
34
|
options.requestAnimationFrame || window.requestAnimationFrame;
|
|
21
35
|
|
|
22
36
|
const signal = options.signal;
|
|
37
|
+
const cancelToken = options.cancelToken;
|
|
23
38
|
|
|
24
39
|
const makePromise = () =>
|
|
25
40
|
new Promise((resolve, reject) => {
|
|
41
|
+
if (cancelToken?.canceled) {
|
|
42
|
+
return resolve();
|
|
43
|
+
}
|
|
44
|
+
|
|
26
45
|
if (signal?.aborted) {
|
|
27
46
|
return reject("aborted");
|
|
28
47
|
}
|
|
@@ -46,6 +65,11 @@ export default function transition(options) {
|
|
|
46
65
|
|
|
47
66
|
/** @param {number} stamp */
|
|
48
67
|
const step = (stamp) => {
|
|
68
|
+
if (cancelToken?.canceled) {
|
|
69
|
+
resolve();
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
49
73
|
if (signal?.aborted) {
|
|
50
74
|
reject("aborted");
|
|
51
75
|
} else {
|
|
@@ -63,6 +87,10 @@ export default function transition(options) {
|
|
|
63
87
|
});
|
|
64
88
|
|
|
65
89
|
if (options.delay) {
|
|
90
|
+
if (cancelToken?.canceled) {
|
|
91
|
+
return Promise.resolve();
|
|
92
|
+
}
|
|
93
|
+
|
|
66
94
|
if (signal?.aborted) {
|
|
67
95
|
return Promise.reject("aborted");
|
|
68
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../src/utils/ui/tooltip.js"],"names":[],"mappings":"AAIA,0CAA2C,qBAAqB,CAAC;AAEjE;IAsBI;;OAEG;IACH,uBAFW,WAAW,EAUrB;IAED;;OAEG;IACH,mBAFW,OAAO,EAQjB;IAED,cAVW,OAAO,CAYjB;IAED;;OAEG;IACH,qBAFW,OAAO,EAOjB;IAED,eATW,OAAO,CAWjB;IAED,uBAEC;IAED;;OAEG;IACH,0BAFW,OAAO,QAOjB;IAED,wBAEC;IAED;;OAEG;IACH,4BAFW,UAAU,QAsCpB;IA/BG,8BAA2D;IAiC/D,wBAiBC;IAED;;OAEG;IACH,oBAFW,MAAM,GAAG,OAAO,KAAK,EAAE,cAAc,GAAG,WAAW,QAqB7D;IAED,cAGC;IAED;;;;;;;OAOG;IACH,gBAFa,CAAC,SAFH,CAAC,cACD,CAAS,IAAC,EAAD,CAAC,KAAE,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,OAAO,KAAK,EAAE,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../src/utils/ui/tooltip.js"],"names":[],"mappings":"AAIA,0CAA2C,qBAAqB,CAAC;AAEjE;IAsBI;;OAEG;IACH,uBAFW,WAAW,EAUrB;IAED;;OAEG;IACH,mBAFW,OAAO,EAQjB;IAED,cAVW,OAAO,CAYjB;IAED;;OAEG;IACH,qBAFW,OAAO,EAOjB;IAED,eATW,OAAO,CAWjB;IAED,uBAEC;IAED;;OAEG;IACH,0BAFW,OAAO,QAOjB;IAED,wBAEC;IAED;;OAEG;IACH,4BAFW,UAAU,QAsCpB;IA/BG,8BAA2D;IAiC/D,wBAiBC;IAED;;OAEG;IACH,oBAFW,MAAM,GAAG,OAAO,KAAK,EAAE,cAAc,GAAG,WAAW,QAqB7D;IAED,cAGC;IAED;;;;;;;OAOG;IACH,gBAFa,CAAC,SAFH,CAAC,cACD,CAAS,IAAC,EAAD,CAAC,KAAE,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,OAAO,KAAK,EAAE,cAAc,CAAC,QAyBlF;IAED,sBAEC;;CACJ"}
|
|
@@ -191,8 +191,14 @@ export default class Tooltip {
|
|
|
191
191
|
Promise.resolve(html` ${JSON.stringify(d)} `);
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
+
const requestedDatum = datum;
|
|
194
195
|
converter(datum)
|
|
195
|
-
.then((result) =>
|
|
196
|
+
.then((result) => {
|
|
197
|
+
if (this.#previousTooltipDatum !== requestedDatum) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
this.setContent(result);
|
|
201
|
+
})
|
|
196
202
|
.catch((error) => {
|
|
197
203
|
if (error !== "debounced") {
|
|
198
204
|
throw error;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.test.d.ts","sourceRoot":"","sources":["../../../../src/utils/ui/tooltip.test.js"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axisGridView.d.ts","sourceRoot":"","sources":["../../../src/view/axisGridView.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"axisGridView.d.ts","sourceRoot":"","sources":["../../../src/view/axisGridView.js"],"names":[],"mappings":"AAIA;;;GAGG;AAEH;;;;;;GAMG;AACH;IACI;;;;;;;OAOG;IACH,uBAPW,IAAI,QAEJ,MAAM,WADN,OAAO,yBAAyB,EAAE,OAAO,gBAEzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,YAC3B,OAAO,WAAW,EAAE,WAAW,EA6BzC;IAHG,iFAA8B;IAKlC,kDAEC;CAKJ;gCAxDY,OAAO,oBAAoB,EAAE,wBAAwB;iCACrD,OAAO,iBAAiB,EAAE,kBAAkB;;;;mBAM5C,OAAO,WAAW,EAAE,OAAO;;;;mBAC3B,OAAO,iBAAiB,EAAE,IAAI;;;;yBAC9B,OAAO,iBAAiB,EAAE,UAAU;sBAd3B,gBAAgB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import LayerView from "./layerView.js";
|
|
2
2
|
import { orient2channel } from "./axisView.js";
|
|
3
|
+
import { markViewAsNonAddressable } from "./viewSelectors.js";
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* @typedef {import("../spec/channel.js").PrimaryPositionalChannel} PositionalChannel
|
|
@@ -42,12 +43,13 @@ export default class AxisGridView extends LayerView {
|
|
|
42
43
|
`axisGrid_${axisProps.orient}`,
|
|
43
44
|
{
|
|
44
45
|
blockEncodingInheritance: true,
|
|
45
|
-
contributesToScaleDomain: false,
|
|
46
46
|
...options,
|
|
47
47
|
}
|
|
48
48
|
);
|
|
49
49
|
|
|
50
50
|
this.axisProps = fullAxisProps;
|
|
51
|
+
|
|
52
|
+
markViewAsNonAddressable(this, { skipSubtree: true });
|
|
51
53
|
}
|
|
52
54
|
|
|
53
55
|
getOrient() {
|
|
@@ -121,7 +123,10 @@ function createRegularAxisGrid(axisProps, type) {
|
|
|
121
123
|
minBufferSize: 300,
|
|
122
124
|
},
|
|
123
125
|
encoding: {
|
|
124
|
-
[channel]: {
|
|
126
|
+
[channel]: {
|
|
127
|
+
field: "value",
|
|
128
|
+
type,
|
|
129
|
+
},
|
|
125
130
|
},
|
|
126
131
|
};
|
|
127
132
|
}
|
|
@@ -153,7 +158,11 @@ function createChromAxisGrid(axisProps, type) {
|
|
|
153
158
|
},
|
|
154
159
|
encoding: {
|
|
155
160
|
// TODO: { chrom: "name", type: "locus" } // without pos = pos is 0
|
|
156
|
-
[channel]: {
|
|
161
|
+
[channel]: {
|
|
162
|
+
field: "continuousStart",
|
|
163
|
+
type,
|
|
164
|
+
band: 0,
|
|
165
|
+
},
|
|
157
166
|
},
|
|
158
167
|
};
|
|
159
168
|
}
|
|
@@ -180,8 +189,15 @@ function createChromAxisFill(axisProps, type) {
|
|
|
180
189
|
},
|
|
181
190
|
encoding: {
|
|
182
191
|
// TODO: { chrom: "name", type: "locus" } // without pos = pos is 0
|
|
183
|
-
[channel]: {
|
|
184
|
-
|
|
192
|
+
[channel]: {
|
|
193
|
+
field: "continuousStart",
|
|
194
|
+
type,
|
|
195
|
+
band: 0,
|
|
196
|
+
},
|
|
197
|
+
[channel + "2"]: {
|
|
198
|
+
field: "continuousEnd",
|
|
199
|
+
band: 0,
|
|
200
|
+
},
|
|
185
201
|
fill: {
|
|
186
202
|
field: "odd",
|
|
187
203
|
type: "nominal",
|
|
@@ -245,6 +261,7 @@ function createAxisGrid(axisProps, type) {
|
|
|
245
261
|
opacity: "independent",
|
|
246
262
|
},
|
|
247
263
|
},
|
|
264
|
+
domainInert: true,
|
|
248
265
|
layer: layers,
|
|
249
266
|
};
|
|
250
267
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axisView.d.ts","sourceRoot":"","sources":["../../../src/view/axisView.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"axisView.d.ts","sourceRoot":"","sources":["../../../src/view/axisView.js"],"names":[],"mappings":"AAqCA;;GAEG;AACH,kIAEC;AAyYD;;;;GAIG;AACH,wFAHW,MAAM,uCAkNhB;AAnnBD;;GAEG;AACH,8BAFU,MAAM,CAAC,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,sCAAY,CAAC,CAKnF;AAEF;;GAEG;AACH,8BAFU,MAAM,uCAAa,OAAO,oBAAoB,EAAE,wBAAwB,CAAC,CAMjF;AASF;;;;;GAKG;AACH;IACI;;;;;;;;;;OAUG;IAEH;;;;;;;OAOG;IACH,6DALW,MAAM,WADN,OAAO,yBAAyB,EAAE,OAAO,gBAEzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,YAC3B,OAAO,WAAW,EAAE,WAAW,EAkCzC;IAHG,iFAA8B;IAmBlC,+BAEC;CAKJ;sBA9HqB,gBAAgB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import LayerView from "./layerView.js";
|
|
2
2
|
import { FlexDimensions } from "./layout/flexLayout.js";
|
|
3
|
+
import { markViewAsNonAddressable } from "./viewSelectors.js";
|
|
3
4
|
|
|
4
5
|
const CHROM_LAYER_NAME = "chromosome_ticks_and_labels";
|
|
5
6
|
|
|
@@ -93,12 +94,13 @@ export default class AxisView extends LayerView {
|
|
|
93
94
|
`axis_${axisProps.orient}`,
|
|
94
95
|
{
|
|
95
96
|
blockEncodingInheritance: true,
|
|
96
|
-
contributesToScaleDomain: false,
|
|
97
97
|
...options,
|
|
98
98
|
}
|
|
99
99
|
);
|
|
100
100
|
|
|
101
101
|
this.axisProps = fullAxisProps;
|
|
102
|
+
|
|
103
|
+
markViewAsNonAddressable(this, { skipSubtree: true });
|
|
102
104
|
}
|
|
103
105
|
|
|
104
106
|
getSize() {
|
|
@@ -266,6 +268,11 @@ function createAxis(axisProps, type) {
|
|
|
266
268
|
|
|
267
269
|
const anchor = ap.orient == "bottom" || ap.orient == "left" ? 1 : 0;
|
|
268
270
|
|
|
271
|
+
const makeMainDomainDef = () => ({
|
|
272
|
+
field: "value",
|
|
273
|
+
type,
|
|
274
|
+
});
|
|
275
|
+
|
|
269
276
|
/**
|
|
270
277
|
* @return {import("../spec/view.js").UnitSpec}
|
|
271
278
|
*/
|
|
@@ -302,7 +309,7 @@ function createAxis(axisProps, type) {
|
|
|
302
309
|
minBufferSize: 1500, // to prevent GPU buffer reallocation when zooming
|
|
303
310
|
},
|
|
304
311
|
encoding: {
|
|
305
|
-
[main]:
|
|
312
|
+
[main]: makeMainDomainDef(),
|
|
306
313
|
text: { field: "label" },
|
|
307
314
|
},
|
|
308
315
|
});
|
|
@@ -358,7 +365,7 @@ function createAxis(axisProps, type) {
|
|
|
358
365
|
const spec = {
|
|
359
366
|
name: "ticks_and_labels",
|
|
360
367
|
encoding: {
|
|
361
|
-
[main]:
|
|
368
|
+
[main]: makeMainDomainDef(),
|
|
362
369
|
},
|
|
363
370
|
layer: [],
|
|
364
371
|
};
|
|
@@ -378,6 +385,7 @@ function createAxis(axisProps, type) {
|
|
|
378
385
|
const axisSpec = {
|
|
379
386
|
// Force the resolution towards the parent view even if it has "independent" behavior
|
|
380
387
|
resolve: { scale: { [main]: "forced" } },
|
|
388
|
+
domainInert: true,
|
|
381
389
|
[CHANNEL_DIMENSIONS[getPerpendicularChannel(main)]]: ap.extent,
|
|
382
390
|
data: {
|
|
383
391
|
lazy: {
|
|
@@ -527,7 +535,10 @@ export function createGenomeAxis(axisProps, type) {
|
|
|
527
535
|
...chromLabelMarkProps,
|
|
528
536
|
},
|
|
529
537
|
encoding: {
|
|
530
|
-
[main + "2"]: {
|
|
538
|
+
[main + "2"]: {
|
|
539
|
+
field: "continuousEnd",
|
|
540
|
+
type,
|
|
541
|
+
},
|
|
531
542
|
text: { field: "name" },
|
|
532
543
|
},
|
|
533
544
|
};
|
|
@@ -582,7 +593,11 @@ export function createGenomeAxis(axisProps, type) {
|
|
|
582
593
|
},
|
|
583
594
|
encoding: {
|
|
584
595
|
// TODO: { chrom: "name", type: "locus" } // without pos = pos is 0
|
|
585
|
-
[main]: {
|
|
596
|
+
[main]: {
|
|
597
|
+
field: "continuousStart",
|
|
598
|
+
type,
|
|
599
|
+
band: 0,
|
|
600
|
+
},
|
|
586
601
|
},
|
|
587
602
|
layer: [],
|
|
588
603
|
};
|
|
@@ -44,12 +44,12 @@ export default class ConcatView extends GridView {
|
|
|
44
44
|
|
|
45
45
|
this.setChildren(
|
|
46
46
|
await Promise.all(
|
|
47
|
-
childSpecs.map((childSpec
|
|
47
|
+
childSpecs.map((childSpec) =>
|
|
48
48
|
this.context.createOrImportView(
|
|
49
49
|
childSpec,
|
|
50
50
|
this,
|
|
51
51
|
this,
|
|
52
|
-
"grid"
|
|
52
|
+
this.getNextAutoName("grid")
|
|
53
53
|
)
|
|
54
54
|
)
|
|
55
55
|
)
|
|
@@ -151,7 +151,7 @@ export default class ConcatView extends GridView {
|
|
|
151
151
|
afterRemove: async () => {
|
|
152
152
|
await this.syncSharedAxes();
|
|
153
153
|
},
|
|
154
|
-
defaultName: (
|
|
154
|
+
defaultName: () => this.getNextAutoName("grid"),
|
|
155
155
|
});
|
|
156
156
|
}
|
|
157
157
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerMutationHelper.d.ts","sourceRoot":"","sources":["../../../src/view/containerMutationHelper.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH;IACI;;;;;;;;;;OAUG;IAEH;;;;;;;;;;OAUG;IAEH;;;OAGG;IACH,uBAHW,OAAO,oBAAoB,EAAE,OAAO;uBAX3B;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;OAW3B;IAFG,gDAA0B;IAC1B;uBAhBgB;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;MAUF;IAG1B;;;;;;OAMG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,UACzE,MAAM,GACJ,OAAO,6BAAM,
|
|
1
|
+
{"version":3,"file":"containerMutationHelper.d.ts","sourceRoot":"","sources":["../../../src/view/containerMutationHelper.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH;IACI;;;;;;;;;;OAUG;IAEH;;;;;;;;;;OAUG;IAEH;;;OAGG;IACH,uBAHW,OAAO,oBAAoB,EAAE,OAAO;uBAX3B;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;OAW3B;IAFG,gDAA0B;IAC1B;uBAhBgB;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;MAUF;IAG1B;;;;;;OAMG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,UACzE,MAAM,GACJ,OAAO,6BAAM,CA8CzB;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAehB;CACJ"}
|
|
@@ -55,7 +55,7 @@ export default class ContainerMutationHelper {
|
|
|
55
55
|
const insertIndex = index ?? specs.length;
|
|
56
56
|
const name =
|
|
57
57
|
this.options.defaultName?.(insertIndex, childSpec) ??
|
|
58
|
-
"child"
|
|
58
|
+
this.container.getNextAutoName("child");
|
|
59
59
|
|
|
60
60
|
const childView = await this.container.context.createOrImportView(
|
|
61
61
|
childSpec,
|
|
@@ -77,9 +77,13 @@ export default class ContainerMutationHelper {
|
|
|
77
77
|
|
|
78
78
|
configureViewOpacity(childView);
|
|
79
79
|
|
|
80
|
+
const visibilityPredicate = (
|
|
81
|
+
/** @type {import("./view.js").default} */ view
|
|
82
|
+
) => view.isConfiguredVisible();
|
|
80
83
|
const { dataSources, graphicsPromises } = initializeViewSubtree(
|
|
81
84
|
childView,
|
|
82
|
-
this.container.context.dataFlow
|
|
85
|
+
this.container.context.dataFlow,
|
|
86
|
+
visibilityPredicate
|
|
83
87
|
);
|
|
84
88
|
await loadViewSubtreeData(childView, dataSources);
|
|
85
89
|
await finalizeSubtreeGraphics(graphicsPromises);
|
|
@@ -14,16 +14,19 @@ export default class ContainerView extends View {
|
|
|
14
14
|
constructor(spec: import("../spec/view.js").ContainerSpec, context: import("../types/viewContext.js").default, layoutParent: ContainerView, dataParent: import("./view.js").default, name: string, options?: import("./view.js").ViewOptions);
|
|
15
15
|
spec: import("../spec/view.js").ContainerSpec;
|
|
16
16
|
initializeChildren(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Generates an auto name that is guaranteed to be unique within this container
|
|
19
|
+
* for the given prefix. Intended for debugging-only default names.
|
|
20
|
+
*
|
|
21
|
+
* @param {string} prefix
|
|
22
|
+
* @returns {string}
|
|
23
|
+
*/
|
|
24
|
+
getNextAutoName(prefix: string): string;
|
|
17
25
|
/**
|
|
18
26
|
* @param {string[]} path An array of view names
|
|
19
27
|
* @returns {View}
|
|
20
28
|
*/
|
|
21
29
|
findDescendantByPath(path: string[]): View;
|
|
22
|
-
/**
|
|
23
|
-
*
|
|
24
|
-
* @param {string} name
|
|
25
|
-
*/
|
|
26
|
-
findChildByName(name: string): View;
|
|
27
30
|
/**
|
|
28
31
|
*
|
|
29
32
|
* @param {string} name
|
|
@@ -33,6 +36,7 @@ export default class ContainerView extends View {
|
|
|
33
36
|
* @returns {IterableIterator<View>}
|
|
34
37
|
*/
|
|
35
38
|
[Symbol.iterator](): IterableIterator<View>;
|
|
39
|
+
#private;
|
|
36
40
|
}
|
|
37
41
|
import View from "./view.js";
|
|
38
42
|
//# sourceMappingURL=containerView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerView.d.ts","sourceRoot":"","sources":["../../../src/view/containerView.js"],"names":[],"mappings":"AAEA;;GAEG;AACH;
|
|
1
|
+
{"version":3,"file":"containerView.d.ts","sourceRoot":"","sources":["../../../src/view/containerView.js"],"names":[],"mappings":"AAEA;;GAEG;AACH;IAII;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,aAAa,WACvC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,cACb,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAMzC;IADG,8CAAgB;IAGpB,oCAEC;IAED;;;;;;OAMG;IACH,wBAHW,MAAM,GACJ,MAAM,CAMlB;IAsDD;;;OAGG;IACH,2BAHW,MAAM,EAAE,GACN,IAAI,CAsBhB;IAaD;;;OAGG;IACH,2BAFW,MAAM,QAchB;IAzGD;;OAEG;IACH,qBAFa,gBAAgB,CAAC,IAAI,CAAC,CAIlC;;CA8GJ;iBA5J4C,WAAW"}
|
|
@@ -4,6 +4,9 @@ import View, { VISIT_STOP, VISIT_SKIP } from "./view.js";
|
|
|
4
4
|
* Compositor view represents a non-leaf node in the view hierarchy.
|
|
5
5
|
*/
|
|
6
6
|
export default class ContainerView extends View {
|
|
7
|
+
/** @type {Map<string, number>} */
|
|
8
|
+
#autoNameCounters = new Map();
|
|
9
|
+
|
|
7
10
|
/**
|
|
8
11
|
*
|
|
9
12
|
* @param {import("../spec/view.js").ContainerSpec} spec
|
|
@@ -23,6 +26,19 @@ export default class ContainerView extends View {
|
|
|
23
26
|
// override
|
|
24
27
|
}
|
|
25
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Generates an auto name that is guaranteed to be unique within this container
|
|
31
|
+
* for the given prefix. Intended for debugging-only default names.
|
|
32
|
+
*
|
|
33
|
+
* @param {string} prefix
|
|
34
|
+
* @returns {string}
|
|
35
|
+
*/
|
|
36
|
+
getNextAutoName(prefix) {
|
|
37
|
+
const counter = this.#autoNameCounters.get(prefix) ?? 0;
|
|
38
|
+
this.#autoNameCounters.set(prefix, counter + 1);
|
|
39
|
+
return prefix + counter;
|
|
40
|
+
}
|
|
41
|
+
|
|
26
42
|
/**
|
|
27
43
|
* @returns {IterableIterator<View>}
|
|
28
44
|
*/
|
|
@@ -80,22 +96,31 @@ export default class ContainerView extends View {
|
|
|
80
96
|
* @returns {View}
|
|
81
97
|
*/
|
|
82
98
|
findDescendantByPath(path) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
99
|
+
/** @type {View | ContainerView} */
|
|
100
|
+
let current = this;
|
|
101
|
+
|
|
102
|
+
for (let i = 0; i < path.length; i++) {
|
|
103
|
+
if (!(current instanceof ContainerView)) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const next = current.#findImmediateChildByName(path[i]);
|
|
108
|
+
if (!next) {
|
|
109
|
+
return;
|
|
90
110
|
}
|
|
111
|
+
|
|
112
|
+
if (i === path.length - 1) {
|
|
113
|
+
return next;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
current = next;
|
|
91
117
|
}
|
|
92
118
|
}
|
|
93
119
|
|
|
94
120
|
/**
|
|
95
|
-
*
|
|
96
121
|
* @param {string} name
|
|
97
122
|
*/
|
|
98
|
-
|
|
123
|
+
#findImmediateChildByName(name) {
|
|
99
124
|
for (const child of this) {
|
|
100
125
|
if (child.name === name) {
|
|
101
126
|
return child;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import("../view/view.js").default} View
|
|
3
|
+
* @typedef {import("../data/sources/lazy/singleAxisLazySource.js").DataReadinessRequest} DataReadinessRequest
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Builds a readiness request for the provided channels.
|
|
7
|
+
*
|
|
8
|
+
* @param {View} view
|
|
9
|
+
* @param {import("../spec/channel.js").PrimaryPositionalChannel[]} channels
|
|
10
|
+
* @returns {DataReadinessRequest | undefined}
|
|
11
|
+
*/
|
|
12
|
+
export function buildReadinessRequest(view: View, channels: import("../spec/channel.js").PrimaryPositionalChannel[]): DataReadinessRequest | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Checks whether all data sources under the subtree report readiness.
|
|
15
|
+
*
|
|
16
|
+
* @param {View} subtreeRoot
|
|
17
|
+
* @param {DataReadinessRequest} readinessRequest
|
|
18
|
+
* @param {(view: View) => boolean} [viewFilter]
|
|
19
|
+
* @returns {boolean}
|
|
20
|
+
*/
|
|
21
|
+
export function isSubtreeReady(subtreeRoot: View, readinessRequest: DataReadinessRequest, viewFilter?: (view: View) => boolean): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Checks readiness for lazy data sources under the subtree. Non-lazy sources
|
|
24
|
+
* are ignored so they do not block readiness checks.
|
|
25
|
+
*
|
|
26
|
+
* @param {View} subtreeRoot
|
|
27
|
+
* @param {DataReadinessRequest | undefined} readinessRequest
|
|
28
|
+
* @param {(view: View) => boolean} [viewFilter]
|
|
29
|
+
* @returns {boolean}
|
|
30
|
+
*/
|
|
31
|
+
export function isSubtreeLazyReady(subtreeRoot: View, readinessRequest: DataReadinessRequest | undefined, viewFilter?: (view: View) => boolean): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Waits until lazy data sources under the subtree satisfy the readiness request.
|
|
34
|
+
* Non-lazy sources are ignored so they do not block readiness checks.
|
|
35
|
+
*
|
|
36
|
+
* @param {import("../types/viewContext.js").default} context
|
|
37
|
+
* @param {View} subtreeRoot
|
|
38
|
+
* @param {DataReadinessRequest} readinessRequest
|
|
39
|
+
* @param {AbortSignal} [signal]
|
|
40
|
+
* @param {(view: View) => boolean} [viewFilter]
|
|
41
|
+
* @returns {Promise<void>}
|
|
42
|
+
*/
|
|
43
|
+
export function awaitSubtreeLazyReady(context: import("../types/viewContext.js").default, subtreeRoot: View, readinessRequest: DataReadinessRequest, signal?: AbortSignal, viewFilter?: (view: View) => boolean): Promise<void>;
|
|
44
|
+
export type View = import("../view/view.js").default;
|
|
45
|
+
export type DataReadinessRequest = import("../data/sources/lazy/singleAxisLazySource.js").DataReadinessRequest;
|
|
46
|
+
//# sourceMappingURL=dataReadiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataReadiness.d.ts","sourceRoot":"","sources":["../../../src/view/dataReadiness.js"],"names":[],"mappings":"AAGA;;;GAGG;AAEH;;;;;;GAMG;AACH,4CAJW,IAAI,YACJ,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,GACrD,oBAAoB,GAAG,SAAS,CAe5C;AAED;;;;;;;GAOG;AACH,4CALW,IAAI,oBACJ,oBAAoB,eACpB,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GACrB,OAAO,CAiDnB;AAED;;;;;;;;GAQG;AACH,gDALW,IAAI,oBACJ,oBAAoB,GAAG,SAAS,eAChC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GACrB,OAAO,CAwDnB;AAED;;;;;;;;;;GAUG;AACH,+CAPW,OAAO,yBAAyB,EAAE,OAAO,eACzC,IAAI,oBACJ,oBAAoB,WACpB,WAAW,eACX,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GACrB,OAAO,CAAC,IAAI,CAAC,CAyGzB;mBAtQY,OAAO,iBAAiB,EAAE,OAAO;mCACjC,OAAO,8CAA8C,EAAE,oBAAoB"}
|