@genome-spy/core 0.75.0 → 0.77.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/browser-KWU9rWZT.js +123 -0
- package/dist/bundle/{esm-CgfVIRJ-.js → esm-0dYHNV_D.js} +2 -2
- package/dist/bundle/{esm-sIoQYZ21.js → esm-CRMf_I9V.js} +18 -18
- package/dist/bundle/esm-CT3ygiMq.js +1084 -0
- package/dist/bundle/{esm-DQiq2Zhd.js → esm-CscjKVDc.js} +44 -44
- package/dist/bundle/index.es.js +3408 -3185
- package/dist/bundle/index.js +106 -97
- package/dist/schema.json +352 -0
- package/dist/src/config/defaults/markDefaults.d.ts.map +1 -1
- package/dist/src/config/defaults/markDefaults.js +1 -12
- package/dist/src/config/defaults/scaleDefaults.d.ts.map +1 -1
- package/dist/src/config/defaults/scaleDefaults.js +1 -0
- package/dist/src/config/markConfig.d.ts.map +1 -1
- package/dist/src/config/markConfig.js +16 -8
- package/dist/src/config/themes.d.ts.map +1 -1
- package/dist/src/config/themes.js +15 -2
- package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigWigSource.js +31 -11
- package/dist/src/data/sources/lazy/registerBuiltInLazySources.js +2 -2
- package/dist/src/data/sources/lazy/registerCoreLazySources.d.ts +2 -0
- package/dist/src/data/sources/lazy/registerCoreLazySources.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/registerCoreLazySources.js +2 -0
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts +19 -3
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +34 -13
- package/dist/src/data/sources/lazy/tabixSource.d.ts +7 -0
- package/dist/src/data/sources/lazy/tabixSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/tabixSource.js +18 -0
- package/dist/src/data/sources/lazy/tabixTsvSource.d.ts +37 -0
- package/dist/src/data/sources/lazy/tabixTsvSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/tabixTsvSource.js +163 -0
- package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
- package/dist/src/data/transforms/filterScoredLabels.js +3 -2
- package/dist/src/embedFactory.d.ts.map +1 -1
- package/dist/src/embedFactory.js +2 -0
- package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -1
- package/dist/src/genomeSpy/viewContextFactory.js +1 -0
- package/dist/src/genomeSpyBase.d.ts +6 -0
- package/dist/src/genomeSpyBase.d.ts.map +1 -1
- package/dist/src/genomeSpyBase.js +15 -1
- package/dist/src/gl/webGLHelper.d.ts +5 -2
- package/dist/src/gl/webGLHelper.d.ts.map +1 -1
- package/dist/src/gl/webGLHelper.js +20 -3
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +1084 -2
- package/dist/src/marks/link.vertex.glsl.js +1 -1
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +0 -6
- package/dist/src/marks/rect.vertex.glsl.js +1 -1
- package/dist/src/minimal.d.ts +1 -0
- package/dist/src/minimal.d.ts.map +1 -1
- package/dist/src/minimal.js +6 -4
- package/dist/src/paramRuntime/embedParamApi.d.ts +26 -0
- package/dist/src/paramRuntime/embedParamApi.d.ts.map +1 -0
- package/dist/src/paramRuntime/embedParamApi.js +133 -0
- package/dist/src/scale/scale.js +10 -2
- package/dist/src/scales/domainPlanner.js +1 -1
- package/dist/src/scales/scaleInteractionController.d.ts +8 -4
- package/dist/src/scales/scaleInteractionController.d.ts.map +1 -1
- package/dist/src/scales/scaleInteractionController.js +55 -7
- package/dist/src/scales/scaleResolution.d.ts +3 -3
- package/dist/src/scales/scaleResolution.d.ts.map +1 -1
- package/dist/src/scales/scaleResolution.js +14 -7
- package/dist/src/scales/selectionDomainUtils.d.ts +10 -0
- package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -1
- package/dist/src/scales/selectionDomainUtils.js +32 -3
- package/dist/src/selection/index.d.ts +8 -0
- package/dist/src/selection/index.d.ts.map +1 -0
- package/dist/src/selection/index.js +12 -0
- package/dist/src/spec/channel.d.ts +30 -0
- package/dist/src/spec/data.d.ts +40 -0
- package/dist/src/spec/parameter.d.ts +6 -0
- package/dist/src/spec/transform.d.ts +6 -0
- package/dist/src/styles/genome-spy.css +8 -0
- 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 +8 -0
- package/dist/src/types/embedApi.d.ts +54 -0
- package/dist/src/types/scaleResolutionApi.d.ts +28 -1
- package/dist/src/types/viewContext.d.ts +11 -0
- package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
- package/dist/src/utils/ui/tooltip.js +22 -0
- package/dist/src/view/axisGridView.d.ts.map +1 -1
- package/dist/src/view/axisGridView.js +2 -1
- package/dist/src/view/axisView.d.ts.map +1 -1
- package/dist/src/view/axisView.js +2 -1
- package/dist/src/view/facetView.d.ts.map +1 -1
- package/dist/src/view/facetView.js +2 -1
- package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
- package/dist/src/view/gridView/gridChild.js +9 -1
- package/dist/src/view/gridView/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView/gridView.js +198 -32
- package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
- package/dist/src/view/gridView/scrollbar.js +5 -1
- package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
- package/dist/src/view/gridView/selectionRect.js +5 -1
- package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
- package/dist/src/view/gridView/separatorView.js +5 -1
- package/dist/src/view/testUtils.d.ts +30 -3
- package/dist/src/view/testUtils.d.ts.map +1 -1
- package/dist/src/view/testUtils.js +51 -2
- package/dist/src/view/viewSelectors.d.ts +38 -10
- package/dist/src/view/viewSelectors.d.ts.map +1 -1
- package/dist/src/view/viewSelectors.js +67 -2
- package/dist/src/view/viewUtilTypes.d.ts +15 -0
- package/dist/src/view/viewUtils.d.ts.map +1 -1
- package/dist/src/view/viewUtils.js +10 -0
- package/package.json +3 -3
- package/dist/bundle/browser-BTgw5ieH.js +0 -126
- package/dist/bundle/esm-DtE8VqAv.js +0 -1015
- /package/dist/bundle/{esm-BDFRLEuD.js → esm-C49STiCR.js} +0 -0
- /package/dist/bundle/{esm-CGX-qz1d.js → esm-CuVa5T98.js} +0 -0
|
@@ -39,6 +39,29 @@ export function requireIntervalSelection(selection, paramName) {
|
|
|
39
39
|
return selection;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Returns an interval selection when the value exists and is of the correct
|
|
44
|
+
* type. Missing values are treated as empty so selection-linked domains can
|
|
45
|
+
* initialize before a pushed outer selection has been seeded.
|
|
46
|
+
*
|
|
47
|
+
* @param {any} selection
|
|
48
|
+
* @param {string} paramName
|
|
49
|
+
* @returns {import("../types/selectionTypes.js").IntervalSelection | undefined}
|
|
50
|
+
*/
|
|
51
|
+
export function getIntervalSelection(selection, paramName) {
|
|
52
|
+
if (!selection) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (!isIntervalSelection(selection)) {
|
|
57
|
+
throw new Error(
|
|
58
|
+
`Selection domain parameter "${paramName}" must be an interval selection.`
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return selection;
|
|
63
|
+
}
|
|
64
|
+
|
|
42
65
|
/**
|
|
43
66
|
* Resolves the runtime-backed interval selection binding used by a linked
|
|
44
67
|
* domain. Matching is based on the actual resolved runtime slot instead of
|
|
@@ -52,7 +75,7 @@ export function resolveIntervalSelectionBinding(view, paramName, encoding) {
|
|
|
52
75
|
const runtime = view.paramRuntime.findRuntimeForParam
|
|
53
76
|
? requireParamRuntime(view.paramRuntime, paramName)
|
|
54
77
|
: view.paramRuntime;
|
|
55
|
-
const selection =
|
|
78
|
+
const selection = getIntervalSelection(
|
|
56
79
|
runtime.getValue
|
|
57
80
|
? runtime.getValue(paramName)
|
|
58
81
|
: view.paramRuntime.findValue(paramName),
|
|
@@ -71,7 +94,12 @@ export function resolveIntervalSelectionBinding(view, paramName, encoding) {
|
|
|
71
94
|
* @param {string} paramName
|
|
72
95
|
* @param {"x" | "y"} encoding
|
|
73
96
|
*/
|
|
74
|
-
export function findIntervalSelectionBindingOwners(
|
|
97
|
+
export function findIntervalSelectionBindingOwners(
|
|
98
|
+
root,
|
|
99
|
+
runtime,
|
|
100
|
+
paramName,
|
|
101
|
+
encoding
|
|
102
|
+
) {
|
|
75
103
|
/** @type {{ view: import("../view/view.js").default, param: import("../spec/parameter.js").SelectionParameter }[]} */
|
|
76
104
|
const owners = [];
|
|
77
105
|
|
|
@@ -124,7 +152,8 @@ export function hasIntervalSelectionBindingInScope(
|
|
|
124
152
|
|
|
125
153
|
seen.add(candidateView);
|
|
126
154
|
|
|
127
|
-
const param =
|
|
155
|
+
const param =
|
|
156
|
+
candidateView.paramRuntime?.paramConfigs?.get(paramName);
|
|
128
157
|
if (!param || !isSelectionParameter(param)) {
|
|
129
158
|
continue;
|
|
130
159
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a runtime interval selection value for use with parameter APIs.
|
|
3
|
+
*
|
|
4
|
+
* @param {Partial<Record<import("../spec/channel.js").PositionalChannel, [number, number] | null>>} intervals
|
|
5
|
+
* @returns {import("../types/selectionTypes.js").IntervalSelection}
|
|
6
|
+
*/
|
|
7
|
+
export function intervalSelection(intervals: Partial<Record<import("../spec/channel.js").PositionalChannel, [number, number] | null>>): import("../types/selectionTypes.js").IntervalSelection;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/selection/index.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,6CAHW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GACtF,OAAO,4BAA4B,EAAE,iBAAiB,CAOlE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a runtime interval selection value for use with parameter APIs.
|
|
3
|
+
*
|
|
4
|
+
* @param {Partial<Record<import("../spec/channel.js").PositionalChannel, [number, number] | null>>} intervals
|
|
5
|
+
* @returns {import("../types/selectionTypes.js").IntervalSelection}
|
|
6
|
+
*/
|
|
7
|
+
export function intervalSelection(intervals) {
|
|
8
|
+
return {
|
|
9
|
+
type: "interval",
|
|
10
|
+
intervals: { ...intervals },
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -99,6 +99,12 @@ export interface TypeMixins<T extends Type> {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
export interface FieldDefBase {
|
|
102
|
+
/**
|
|
103
|
+
* A description of the encoded field. Can be used for documentation and
|
|
104
|
+
* to explain the meaning of the channel mapping.
|
|
105
|
+
*/
|
|
106
|
+
description?: string;
|
|
107
|
+
|
|
102
108
|
/**
|
|
103
109
|
* __Required.__ A string defining the name of the field from which to pull a data value
|
|
104
110
|
* or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.
|
|
@@ -169,12 +175,24 @@ export interface ValueDefBase<V extends Value = Scalar> {
|
|
|
169
175
|
* A constant value in visual domain (e.g., `"red"` / `"#0099ff"`, values between `0` to `1` for opacity).
|
|
170
176
|
*/
|
|
171
177
|
value: V | ExprRef;
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* A description of the encoded value. Can be used for documentation and
|
|
181
|
+
* to explain the meaning of the channel mapping.
|
|
182
|
+
*/
|
|
183
|
+
description?: string;
|
|
172
184
|
}
|
|
173
185
|
|
|
174
186
|
export type ValueDef<V extends Value = Scalar> = ValueDefBase<V> & TitleMixins;
|
|
175
187
|
|
|
176
188
|
export interface DatumDef<V extends Scalar | ExprRef = Scalar | ExprRef>
|
|
177
189
|
extends Partial<TypeMixins<Type>>, BandMixins, ScaleMixins, TitleMixins {
|
|
190
|
+
/**
|
|
191
|
+
* A description of the encoded datum. Can be used for documentation and
|
|
192
|
+
* to explain the meaning of the channel mapping.
|
|
193
|
+
*/
|
|
194
|
+
description?: string;
|
|
195
|
+
|
|
178
196
|
/**
|
|
179
197
|
* A constant value in data domain.
|
|
180
198
|
*/
|
|
@@ -183,6 +201,12 @@ export interface DatumDef<V extends Scalar | ExprRef = Scalar | ExprRef>
|
|
|
183
201
|
|
|
184
202
|
export interface ExprDef
|
|
185
203
|
extends Partial<TypeMixins<Type>>, BandMixins, TitleMixins {
|
|
204
|
+
/**
|
|
205
|
+
* A description of the encoded expression. Can be used for documentation
|
|
206
|
+
* and to explain the meaning of the channel mapping.
|
|
207
|
+
*/
|
|
208
|
+
description?: string;
|
|
209
|
+
|
|
186
210
|
/**
|
|
187
211
|
* An expression. Properties of the data can be accessed through the `datum` object.
|
|
188
212
|
*/
|
|
@@ -332,6 +356,12 @@ export interface PositionMixins extends BandMixins {
|
|
|
332
356
|
export type PositionFieldDefBase = ScaleFieldDef<Type>;
|
|
333
357
|
|
|
334
358
|
export interface ChromPosDefBase extends BandMixins {
|
|
359
|
+
/**
|
|
360
|
+
* A description of the encoded position. Can be used for documentation and
|
|
361
|
+
* to explain the meaning of the channel mapping.
|
|
362
|
+
*/
|
|
363
|
+
description?: string;
|
|
364
|
+
|
|
335
365
|
/**
|
|
336
366
|
* The field having the chromosome or contig.
|
|
337
367
|
*/
|
package/dist/src/spec/data.d.ts
CHANGED
|
@@ -138,6 +138,12 @@ export type InlineDataset =
|
|
|
138
138
|
| object;
|
|
139
139
|
|
|
140
140
|
export interface DataBase {
|
|
141
|
+
/**
|
|
142
|
+
* A description of the data source. Can be used for documentation and to
|
|
143
|
+
* explain the role of the data in the visualization.
|
|
144
|
+
*/
|
|
145
|
+
description?: string;
|
|
146
|
+
|
|
141
147
|
/**
|
|
142
148
|
* An object that specifies the format for parsing the data.
|
|
143
149
|
*/
|
|
@@ -202,6 +208,12 @@ export interface DynamicCallbackData extends DataBase {
|
|
|
202
208
|
export type Generator = SequenceGenerator;
|
|
203
209
|
|
|
204
210
|
export interface GeneratorBase {
|
|
211
|
+
/**
|
|
212
|
+
* A description of the data source. Can be used for documentation and to
|
|
213
|
+
* explain the role of the generated data in the visualization.
|
|
214
|
+
*/
|
|
215
|
+
description?: string;
|
|
216
|
+
|
|
205
217
|
/**
|
|
206
218
|
* Provide a placeholder name and bind data at runtime.
|
|
207
219
|
*/
|
|
@@ -240,6 +252,12 @@ export interface SequenceParams {
|
|
|
240
252
|
}
|
|
241
253
|
|
|
242
254
|
export interface LazyData {
|
|
255
|
+
/**
|
|
256
|
+
* A description of the data source. Can be used for documentation and to
|
|
257
|
+
* explain the role of the lazy data in the visualization.
|
|
258
|
+
*/
|
|
259
|
+
description?: string;
|
|
260
|
+
|
|
243
261
|
lazy: LazyDataParams;
|
|
244
262
|
}
|
|
245
263
|
|
|
@@ -250,6 +268,7 @@ export type LazyDataParams =
|
|
|
250
268
|
| BigWigData
|
|
251
269
|
| BigBedData
|
|
252
270
|
| BamData
|
|
271
|
+
| TabixTsvData
|
|
253
272
|
| Gff3Data
|
|
254
273
|
| VcfData;
|
|
255
274
|
|
|
@@ -446,6 +465,27 @@ export interface TabixData extends DebouncedData {
|
|
|
446
465
|
windowSize?: number;
|
|
447
466
|
}
|
|
448
467
|
|
|
468
|
+
export interface TabixTsvData extends TabixData {
|
|
469
|
+
type: "tabix";
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* Ordered list of field names for headerless tabix TSV input.
|
|
473
|
+
* If omitted, the source tries to read a commented header line from the
|
|
474
|
+
* tabix file header or the first row of a plain TSV header.
|
|
475
|
+
*/
|
|
476
|
+
columns?: string[];
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* Optional type parsing for TSV fields. When omitted, field types are
|
|
480
|
+
* inferred automatically. Set to `null` to disable spec-based type
|
|
481
|
+
* inference and rely on data inference, or provide a field-to-type map to
|
|
482
|
+
* override selected columns.
|
|
483
|
+
*
|
|
484
|
+
* __Default value:__ `"auto"`
|
|
485
|
+
*/
|
|
486
|
+
parse?: Parse | null;
|
|
487
|
+
}
|
|
488
|
+
|
|
449
489
|
export interface Gff3Data extends TabixData {
|
|
450
490
|
type: "gff3";
|
|
451
491
|
}
|
|
@@ -18,6 +18,12 @@ export interface ParameterBase {
|
|
|
18
18
|
*/
|
|
19
19
|
name: string;
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* A description of the parameter. Can be used for documentation and to
|
|
23
|
+
* explain the meaning of the control or selection.
|
|
24
|
+
*/
|
|
25
|
+
description?: string;
|
|
26
|
+
|
|
21
27
|
push?: "outer";
|
|
22
28
|
}
|
|
23
29
|
|
|
@@ -11,6 +11,12 @@ export type Field = string;
|
|
|
11
11
|
export interface TransformParamsBase {
|
|
12
12
|
/** The type of the transform to be applied */
|
|
13
13
|
type: string;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* A description of the transform step. Can be used for documentation
|
|
17
|
+
* and agent context.
|
|
18
|
+
*/
|
|
19
|
+
description?: string;
|
|
14
20
|
}
|
|
15
21
|
|
|
16
22
|
export interface IdentifierParams extends TransformParamsBase {
|
|
@@ -177,6 +177,14 @@
|
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
+
.autoscroll-container {
|
|
181
|
+
max-height: min(40em, 50vh);
|
|
182
|
+
overflow-x: hidden;
|
|
183
|
+
overflow-y: auto;
|
|
184
|
+
padding-right: var(--genome-spy-basic-spacing);
|
|
185
|
+
margin-right: calc(-1 * var(--genome-spy-basic-spacing));
|
|
186
|
+
}
|
|
187
|
+
|
|
180
188
|
.na {
|
|
181
189
|
color: #aaa;
|
|
182
190
|
font-style: italic;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export default css;
|
|
2
|
-
declare const css: "\n@scope {\n:scope {\n--genome-spy-basic-spacing: 10px;\n--genome-spy-font-family:\nsystem-ui, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif,\n\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n\nfont-family: var(--genome-spy-font-family);\n\nposition: relative;\n\ndisplay: flex;\nflex-direction: column;\n}\n\n.canvas-wrapper {\nposition: relative;\nflex-grow: 1;\noverflow: hidden;\n}\n\ncanvas {\ndisplay: block;\ntouch-action: none;\ntransform: scale(1, 1);\nopacity: 1;\ntransition:\ntransform 0.6s,\nopacity 0.6s;\n\n&:focus,\n&:focus-visible {\noutline: none;\n}\n}\n\n.loading {\n> canvas {\ntransform: scale(0.95, 0.95);\nopacity: 0;\n}\n}\n\n.loading-indicators {\nposition: absolute;\ninset: 0;\n\nuser-select: none;\npointer-events: none;\n\ndiv {\nposition: absolute;\ndisplay: flex;\nalign-items: center;\njustify-content: center;\n\n> div {\nfont-size: 11px;\ntransition: opacity 0.2s;\nbackground: white;\npadding: 2px 5px;\ndisplay: flex;\nborder-radius: 3px;\ngap: 0.5em;\nopacity: 0;\n\n&.loading {\nopacity: 0.5;\n}\n\n&.error {\nopacity: 0.8;\ncolor: firebrick;\n}\n\n> * {\ndisplay: block;\n}\n\nimg {\nwidth: 1.5em;\nheight: 1.5em;\n}\n}\n}\n}\n\n.tooltip {\nposition: absolute;\n\nmax-width: 450px;\noverflow: hidden;\n\n--background-color: #f6f6f6;\nbackground: var(--background-color);\npadding: var(--genome-spy-basic-spacing);\n\n--font-size: 12px;\nfont-size: var(--font-size);\n\nbox-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.21);\n\n&:not(.sticky) {\npointer-events: none;\n}\n\ntransition:\noutline-color 0.3s ease-in-out,\nbox-shadow 0.3s ease-in-out;\n\noutline: 0px solid transparent;\n&.sticky {\noutline: 2px solid black;\nbox-shadow: 0px 3px 18px 0px rgba(0, 0, 0, 0.3);\n}\n\nz-index: 100;\n\n> :last-child {\nmargin-bottom: 0;\n}\n\n> .title {\npadding-bottom: calc(var(--genome-spy-basic-spacing) / 2);\nmargin-bottom: calc(var(--genome-spy-basic-spacing) / 2);\nborder-bottom: 1px dashed var(--background-color);\nborder-bottom: 1px dashed\ncolor-mix(in srgb, black 25%, var(--background-color));\n}\n\n.summary {\nfont-size: 12px;\n}\n\ntable {\n&:first-child {\nmargin-top: 0;\n}\n\nborder-collapse: collapse;\n\nth,\ntd {\npadding: 2px 0.4em;\nvertical-align: top;\nfont-size: var(--font-size);\n\n&:first-child {\npadding-left: 0;\n}\n}\n\nth {\ntext-align: left;\nfont-weight: bold;\n}\n}\n\n.color-legend {\ndisplay: inline-block;\nwidth: 0.8em;\nheight: 0.8em;\nmargin-left: 0.4em;\nbox-shadow: 0px 0px 3px 1px white;\n}\n\n.color-legend-unmapped {\nbackground-color: transparent;\nborder: 1px solid black;\nbox-sizing: border-box;\nbox-shadow: none;\n}\n\n.attributes {\n.hovered {\nbackground-color: #e0e0e0;\n}\n}\n\n.na {\ncolor: #aaa;\nfont-style: italic;\nfont-size: 80%;\n}\n}\n\n.gene-track-tooltip {\n.summary {\nfont-size: 90%;\n}\n}\n\n.gs-input-binding {\ndisplay: grid;\ngrid-template-columns: max-content max-content;\ncolumn-gap: 1em;\nrow-gap: 0.3em;\njustify-items: start;\n\n> select,\n> input:not([type=\"checkbox\"]) {\nwidth: 100%;\n}\n\ninput[type=\"range\"] + span {\ndisplay: inline-block;\nmargin-left: 0.3em;\nmin-width: 2.2em;\nfont-variant-numeric: tabular-nums;\n}\n\ninput[type=\"range\"],\ninput[type=\"radio\"] {\nvertical-align: text-bottom;\n}\n\n.radio-group {\ndisplay: flex;\nalign-items: center;\n}\n\n.description {\nmax-width: 26em;\ngrid-column: 1 / -1;\ncolor: #777;\nfont-size: 90%;\nmargin-top: -0.5em;\n}\n}\n\n.gs-input-bindings {\nflex-basis: content;\nfont-size: 14px;\npadding: var(--genome-spy-basic-spacing);\n}\n\n.message-box {\ndisplay: flex;\nalign-items: center;\njustify-content: center;\nposition: absolute;\ntop: 0;\nheight: 100%;\nwidth: 100%;\n\n> div {\nborder: 1px solid red;\npadding: 10px;\nbackground: #fff0f0;\n}\n}\n}\n";
|
|
2
|
+
declare const css: "\n@scope {\n:scope {\n--genome-spy-basic-spacing: 10px;\n--genome-spy-font-family:\nsystem-ui, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif,\n\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n\nfont-family: var(--genome-spy-font-family);\n\nposition: relative;\n\ndisplay: flex;\nflex-direction: column;\n}\n\n.canvas-wrapper {\nposition: relative;\nflex-grow: 1;\noverflow: hidden;\n}\n\ncanvas {\ndisplay: block;\ntouch-action: none;\ntransform: scale(1, 1);\nopacity: 1;\ntransition:\ntransform 0.6s,\nopacity 0.6s;\n\n&:focus,\n&:focus-visible {\noutline: none;\n}\n}\n\n.loading {\n> canvas {\ntransform: scale(0.95, 0.95);\nopacity: 0;\n}\n}\n\n.loading-indicators {\nposition: absolute;\ninset: 0;\n\nuser-select: none;\npointer-events: none;\n\ndiv {\nposition: absolute;\ndisplay: flex;\nalign-items: center;\njustify-content: center;\n\n> div {\nfont-size: 11px;\ntransition: opacity 0.2s;\nbackground: white;\npadding: 2px 5px;\ndisplay: flex;\nborder-radius: 3px;\ngap: 0.5em;\nopacity: 0;\n\n&.loading {\nopacity: 0.5;\n}\n\n&.error {\nopacity: 0.8;\ncolor: firebrick;\n}\n\n> * {\ndisplay: block;\n}\n\nimg {\nwidth: 1.5em;\nheight: 1.5em;\n}\n}\n}\n}\n\n.tooltip {\nposition: absolute;\n\nmax-width: 450px;\noverflow: hidden;\n\n--background-color: #f6f6f6;\nbackground: var(--background-color);\npadding: var(--genome-spy-basic-spacing);\n\n--font-size: 12px;\nfont-size: var(--font-size);\n\nbox-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.21);\n\n&:not(.sticky) {\npointer-events: none;\n}\n\ntransition:\noutline-color 0.3s ease-in-out,\nbox-shadow 0.3s ease-in-out;\n\noutline: 0px solid transparent;\n&.sticky {\noutline: 2px solid black;\nbox-shadow: 0px 3px 18px 0px rgba(0, 0, 0, 0.3);\n}\n\nz-index: 100;\n\n> :last-child {\nmargin-bottom: 0;\n}\n\n> .title {\npadding-bottom: calc(var(--genome-spy-basic-spacing) / 2);\nmargin-bottom: calc(var(--genome-spy-basic-spacing) / 2);\nborder-bottom: 1px dashed var(--background-color);\nborder-bottom: 1px dashed\ncolor-mix(in srgb, black 25%, var(--background-color));\n}\n\n.summary {\nfont-size: 12px;\n}\n\ntable {\n&:first-child {\nmargin-top: 0;\n}\n\nborder-collapse: collapse;\n\nth,\ntd {\npadding: 2px 0.4em;\nvertical-align: top;\nfont-size: var(--font-size);\n\n&:first-child {\npadding-left: 0;\n}\n}\n\nth {\ntext-align: left;\nfont-weight: bold;\n}\n}\n\n.color-legend {\ndisplay: inline-block;\nwidth: 0.8em;\nheight: 0.8em;\nmargin-left: 0.4em;\nbox-shadow: 0px 0px 3px 1px white;\n}\n\n.color-legend-unmapped {\nbackground-color: transparent;\nborder: 1px solid black;\nbox-sizing: border-box;\nbox-shadow: none;\n}\n\n.attributes {\n.hovered {\nbackground-color: #e0e0e0;\n}\n}\n\n.autoscroll-container {\nmax-height: min(40em, 50vh);\noverflow-x: hidden;\noverflow-y: auto;\npadding-right: var(--genome-spy-basic-spacing);\nmargin-right: calc(-1 * var(--genome-spy-basic-spacing));\n}\n\n.na {\ncolor: #aaa;\nfont-style: italic;\nfont-size: 80%;\n}\n}\n\n.gene-track-tooltip {\n.summary {\nfont-size: 90%;\n}\n}\n\n.gs-input-binding {\ndisplay: grid;\ngrid-template-columns: max-content max-content;\ncolumn-gap: 1em;\nrow-gap: 0.3em;\njustify-items: start;\n\n> select,\n> input:not([type=\"checkbox\"]) {\nwidth: 100%;\n}\n\ninput[type=\"range\"] + span {\ndisplay: inline-block;\nmargin-left: 0.3em;\nmin-width: 2.2em;\nfont-variant-numeric: tabular-nums;\n}\n\ninput[type=\"range\"],\ninput[type=\"radio\"] {\nvertical-align: text-bottom;\n}\n\n.radio-group {\ndisplay: flex;\nalign-items: center;\n}\n\n.description {\nmax-width: 26em;\ngrid-column: 1 / -1;\ncolor: #777;\nfont-size: 90%;\nmargin-top: -0.5em;\n}\n}\n\n.gs-input-bindings {\nflex-basis: content;\nfont-size: 14px;\npadding: var(--genome-spy-basic-spacing);\n}\n\n.message-box {\ndisplay: flex;\nalign-items: center;\njustify-content: center;\nposition: absolute;\ntop: 0;\nheight: 100%;\nwidth: 100%;\n\n> div {\nborder: 1px solid red;\npadding: 10px;\nbackground: #fff0f0;\n}\n}\n}\n";
|
|
3
3
|
//# sourceMappingURL=genome-spy.css.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genome-spy.css.d.ts","sourceRoot":"","sources":["../../../src/styles/genome-spy.css.js"],"names":[],"mappings":";AAAA,
|
|
1
|
+
{"version":3,"file":"genome-spy.css.d.ts","sourceRoot":"","sources":["../../../src/styles/genome-spy.css.js"],"names":[],"mappings":";AAAA,i5HAqQE"}
|
|
@@ -178,6 +178,14 @@ background-color: #e0e0e0;
|
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
+
.autoscroll-container {
|
|
182
|
+
max-height: min(40em, 50vh);
|
|
183
|
+
overflow-x: hidden;
|
|
184
|
+
overflow-y: auto;
|
|
185
|
+
padding-right: var(--genome-spy-basic-spacing);
|
|
186
|
+
margin-right: calc(-1 * var(--genome-spy-basic-spacing));
|
|
187
|
+
}
|
|
188
|
+
|
|
181
189
|
.na {
|
|
182
190
|
color: #aaa;
|
|
183
191
|
font-style: italic;
|
|
@@ -2,6 +2,8 @@ import { ScaleResolutionApi } from "./scaleResolutionApi.js";
|
|
|
2
2
|
import { TooltipHandler } from "../tooltip/tooltipHandler.js";
|
|
3
3
|
import { RootSpec } from "../spec/root.js";
|
|
4
4
|
import { GenomeSpyConfig } from "../spec/config.js";
|
|
5
|
+
import { Scalar } from "../spec/channel.js";
|
|
6
|
+
import { IntervalSelection } from "./selectionTypes.js";
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* Embeds GenomeSpy into the DOM
|
|
@@ -54,6 +56,47 @@ export interface EmbedOptions {
|
|
|
54
56
|
onError?: (error: unknown, container: HTMLElement) => boolean | void;
|
|
55
57
|
}
|
|
56
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Runtime value type covered by the default embed parameter API.
|
|
61
|
+
*
|
|
62
|
+
* The default type covers scalar variable parameters and interval selections.
|
|
63
|
+
* Object and array variable parameters are supported at runtime, but callers
|
|
64
|
+
* should provide their own generic type when accessing them:
|
|
65
|
+
*
|
|
66
|
+
* `const param = api.getParam<MyValue>("myParam")`
|
|
67
|
+
*
|
|
68
|
+
* Current limitations:
|
|
69
|
+
*
|
|
70
|
+
* - Parameters are addressed by name only. Independent same-name parameters
|
|
71
|
+
* throw an ambiguity error.
|
|
72
|
+
* - Computed `expr` parameters are readable but cannot be written.
|
|
73
|
+
* - Point selections are readable as runtime values but are not supported for
|
|
74
|
+
* writes through the initial API because valid values require
|
|
75
|
+
* GenomeSpy-generated datum ids.
|
|
76
|
+
* - Projected selections are not supported.
|
|
77
|
+
*/
|
|
78
|
+
export type ParamValue = Scalar | null | undefined | IntervalSelection;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* A handle for reading, writing, and subscribing to an explicit parameter.
|
|
82
|
+
*/
|
|
83
|
+
export interface ParamApi<T = ParamValue> {
|
|
84
|
+
/**
|
|
85
|
+
* Returns the current parameter value.
|
|
86
|
+
*/
|
|
87
|
+
getValue: () => T;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Sets the parameter value. Computed `expr` parameters throw when set.
|
|
91
|
+
*/
|
|
92
|
+
setValue: (value: T) => void;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Subscribes to parameter changes. Returns an unsubscribe function.
|
|
96
|
+
*/
|
|
97
|
+
subscribe: (listener: (value: T) => void) => () => void;
|
|
98
|
+
}
|
|
99
|
+
|
|
57
100
|
/**
|
|
58
101
|
* An API for controlling the embedded GenomeSpy instance.
|
|
59
102
|
*/
|
|
@@ -82,6 +125,17 @@ export interface EmbedResult {
|
|
|
82
125
|
*/
|
|
83
126
|
getScaleResolutionByName: (name: string) => ScaleResolutionApi;
|
|
84
127
|
|
|
128
|
+
/**
|
|
129
|
+
* Returns a handle for reading, writing, and subscribing to a named
|
|
130
|
+
* parameter.
|
|
131
|
+
*
|
|
132
|
+
* Parameters are addressed by name only. If the name resolves to multiple
|
|
133
|
+
* independent parameters, this method throws an ambiguity error. Parameters
|
|
134
|
+
* declared with `push: "outer"` are treated as aliases of the outer
|
|
135
|
+
* parameter they write to.
|
|
136
|
+
*/
|
|
137
|
+
getParam: <T = ParamValue>(name: string) => ParamApi<T>;
|
|
138
|
+
|
|
85
139
|
/**
|
|
86
140
|
* Waits until lazy data sources have loaded data for the current visible
|
|
87
141
|
* positional domain.
|
|
@@ -10,6 +10,25 @@ export interface ScaleResolutionEvent {
|
|
|
10
10
|
|
|
11
11
|
export type ScaleResolutionListener = (event: ScaleResolutionEvent) => void;
|
|
12
12
|
|
|
13
|
+
export interface ZoomToOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Approximate transition duration. Zero or omitted zooms immediately.
|
|
16
|
+
* Boolean `true` indicates a default duration.
|
|
17
|
+
*/
|
|
18
|
+
duration?: boolean | number;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Render immediately without scheduling an animation frame.
|
|
22
|
+
*
|
|
23
|
+
* This is intended for synchronizing multiple GenomeSpy instances, where
|
|
24
|
+
* the target view should be redrawn during the same animation frame as the
|
|
25
|
+
* source view. Use it only for zero-duration zooms. It is not supported for
|
|
26
|
+
* animated transitions and may do redundant work if several domains are
|
|
27
|
+
* applied before the browser has a chance to paint.
|
|
28
|
+
*/
|
|
29
|
+
renderImmediately?: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
13
32
|
/**
|
|
14
33
|
* A public API for ScaleResolution
|
|
15
34
|
*/
|
|
@@ -59,6 +78,14 @@ export interface ScaleResolutionApi {
|
|
|
59
78
|
|
|
60
79
|
zoomTo(
|
|
61
80
|
domain: number[] | ComplexDomain,
|
|
62
|
-
|
|
81
|
+
options?: ZoomToOptions
|
|
82
|
+
): Promise<void>;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @deprecated Use the options object form: `zoomTo(domain, { duration })`.
|
|
86
|
+
*/
|
|
87
|
+
zoomTo(
|
|
88
|
+
domain: number[] | ComplexDomain,
|
|
89
|
+
duration: boolean | number
|
|
63
90
|
): Promise<void>;
|
|
64
91
|
}
|
|
@@ -34,6 +34,17 @@ export default interface ViewContext {
|
|
|
34
34
|
|
|
35
35
|
requestLayoutReflow: () => void;
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Renders the current scene immediately without scheduling an animation frame.
|
|
39
|
+
*
|
|
40
|
+
* This is intended for synchronization paths where another GenomeSpy
|
|
41
|
+
* instance is already rendering the current animation frame and this view
|
|
42
|
+
* must repaint after a synchronous state update, such as linked scale
|
|
43
|
+
* domains. Callers should use the animator for ordinary rendering. Calling
|
|
44
|
+
* this repeatedly before the browser paints may do redundant work.
|
|
45
|
+
*/
|
|
46
|
+
renderImmediately: () => void;
|
|
47
|
+
|
|
37
48
|
updateTooltip: <T>(
|
|
38
49
|
datum: T,
|
|
39
50
|
converter?: (datum: T) => Promise<TemplateResult>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../src/utils/ui/tooltip.js"],"names":[],"mappings":"AAIA,0CAA2C,qBAAqB,CAAC;AACjE,4CAA6C,uBAAuB,CAAC;AAErE;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,
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../src/utils/ui/tooltip.js"],"names":[],"mappings":"AAIA,0CAA2C,qBAAqB,CAAC;AACjE,4CAA6C,uBAAuB,CAAC;AAErE;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,QAwB7D;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"}
|
|
@@ -165,6 +165,9 @@ export default class Tooltip {
|
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
render(content, this.#element);
|
|
168
|
+
this.#element
|
|
169
|
+
.querySelectorAll(".autoscroll-container")
|
|
170
|
+
.forEach(scrollHoveredTooltipRow);
|
|
168
171
|
|
|
169
172
|
this.visible = true;
|
|
170
173
|
|
|
@@ -213,6 +216,25 @@ export default class Tooltip {
|
|
|
213
216
|
}
|
|
214
217
|
}
|
|
215
218
|
|
|
219
|
+
/**
|
|
220
|
+
* Scrolls the highlighted tooltip row into view after Lit has committed the
|
|
221
|
+
* current render.
|
|
222
|
+
*
|
|
223
|
+
* @param {Element | undefined} element
|
|
224
|
+
*/
|
|
225
|
+
function scrollHoveredTooltipRow(element) {
|
|
226
|
+
if (!element) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
queueMicrotask(() => {
|
|
231
|
+
element.querySelector("tr.hovered")?.scrollIntoView({
|
|
232
|
+
block: "nearest",
|
|
233
|
+
inline: "nearest",
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
|
|
216
238
|
/**
|
|
217
239
|
* Calculate euclidean distance
|
|
218
240
|
*
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,EAmBzC;IAJG,0CAA0B;IAM9B,kDAEC;CAKJ;gCA9CY,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,6 +1,6 @@
|
|
|
1
1
|
import LayerView from "./layerView.js";
|
|
2
2
|
import { orient2channel } from "./axisView.js";
|
|
3
|
-
import { markViewAsNonAddressable } from "./viewSelectors.js";
|
|
3
|
+
import { markViewAsChrome, markViewAsNonAddressable } from "./viewSelectors.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @typedef {import("../spec/channel.js").PrimaryPositionalChannel} PositionalChannel
|
|
@@ -39,6 +39,7 @@ export default class AxisGridView extends LayerView {
|
|
|
39
39
|
this.axisProps = axisProps;
|
|
40
40
|
|
|
41
41
|
markViewAsNonAddressable(this, { skipSubtree: true });
|
|
42
|
+
markViewAsChrome(this, { skipSubtree: true });
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
getOrient() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axisView.d.ts","sourceRoot":"","sources":["../../../src/view/axisView.js"],"names":[],"mappings":"AAuCA;;GAEG;AACH,kIAEC;
|
|
1
|
+
{"version":3,"file":"axisView.d.ts","sourceRoot":"","sources":["../../../src/view/axisView.js"],"names":[],"mappings":"AAuCA;;GAEG;AACH,kIAEC;AAshBD;;;;GAIG;AACH,wFAHW,MAAM,uCAqNhB;AAnwBD;;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;IAeI;;;;;;;;OAQG;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,EAuDzC;IATG,iFAA8B;IA+ClC,+BAEC;;CAuEJ;sBAzPqB,gBAAgB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import LayerView from "./layerView.js";
|
|
2
2
|
import { FlexDimensions } from "./layout/flexLayout.js";
|
|
3
3
|
import UnitView from "./unitView.js";
|
|
4
|
-
import { markViewAsNonAddressable } from "./viewSelectors.js";
|
|
4
|
+
import { markViewAsChrome, markViewAsNonAddressable } from "./viewSelectors.js";
|
|
5
5
|
import { getConfiguredAxisDefaults } from "../config/axisConfig.js";
|
|
6
6
|
|
|
7
7
|
const CHROM_LAYER_NAME = "chromosome_ticks_and_labels";
|
|
@@ -135,6 +135,7 @@ export default class AxisView extends LayerView {
|
|
|
135
135
|
);
|
|
136
136
|
|
|
137
137
|
markViewAsNonAddressable(this, { skipSubtree: true });
|
|
138
|
+
markViewAsChrome(this, { skipSubtree: true });
|
|
138
139
|
}
|
|
139
140
|
|
|
140
141
|
async initializeChildren() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facetView.d.ts","sourceRoot":"","sources":["../../../src/view/facetView.js"],"names":[],"mappings":"AAoDA;;;;;;;;;;;;;;GAcG;AACH;IACI;;;;;;;OAOG;IACH;;;;;;OAMG;IACH,kBALW,OAAO,gBAAgB,EAAE,SAAS,WAClC,OAAO,gBAAgB,EAAE,WAAW,UACpC,aAAa,QACb,MAAM,
|
|
1
|
+
{"version":3,"file":"facetView.d.ts","sourceRoot":"","sources":["../../../src/view/facetView.js"],"names":[],"mappings":"AAoDA;;;;;;;;;;;;;;GAcG;AACH;IACI;;;;;;;OAOG;IACH;;;;;;OAMG;IACH,kBALW,OAAO,gBAAgB,EAAE,SAAS,WAClC,OAAO,gBAAgB,EAAE,WAAW,UACpC,aAAa,QACb,MAAM,EAgChB;IA3BG,UAAgB;IAEhB,WAEC;IAED;;;;OAIG;IACH,aAFU,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAcvC;IAED,oDAAoD;IACpD,kBADY,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CACa;IAajE,sBAIC;IAED;;;OAGG;IACH,qBAFW,KAAK,GAAG,QAAQ,OAwB1B;IAED,qBAyCC;IAED,qBASC;IA6BD,kDAgBC;IAOD;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,WAAW,EAAE,gBAAgB,QA2L9C;IA3KO,wBAA0B;CA4KrC;2BAnbY,QAAQ,GAAG,KAAK;;;;;;aA4CnB,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE;;;0BA3Df,oBAAoB;qBACzB,eAAe"}
|
|
@@ -12,7 +12,7 @@ import coalesce from "../utils/coalesce.js";
|
|
|
12
12
|
import { field as vegaField } from "vega-util";
|
|
13
13
|
import DecoratorView from "./decoratorView.js";
|
|
14
14
|
import Padding from "./layout/padding.js";
|
|
15
|
-
import { markViewAsNonAddressable } from "./viewSelectors.js";
|
|
15
|
+
import { markViewAsChrome, markViewAsNonAddressable } from "./viewSelectors.js";
|
|
16
16
|
|
|
17
17
|
const DEFAULT_SPACING = 20;
|
|
18
18
|
|
|
@@ -104,6 +104,7 @@ export default class FacetView extends ContainerView {
|
|
|
104
104
|
`facetLabel-${channel}`
|
|
105
105
|
);
|
|
106
106
|
markViewAsNonAddressable(labelView, { skipSubtree: true });
|
|
107
|
+
markViewAsChrome(labelView, { skipSubtree: true });
|
|
107
108
|
return [channel, labelView];
|
|
108
109
|
})
|
|
109
110
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridChild.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridChild.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gridChild.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridChild.js"],"names":[],"mappings":"AA42BA;;;;;GAKG;AACH,qDALW,OAAO,yBAAyB,EAAE,uBAAuB,CAAC,MAAM,CAAC,sBACjE,OAAO,aACP,MAAM,GACJ,OAAO,yBAAyB,EAAE,WAAW,GAAG,SAAS,CAyBrE;AAcD;;;GAGG;AACH,iDAHW,OAAO,oBAAoB,EAAE,cAAc,GACzC,OAAO,oBAAoB,EAAE,QAAQ,CA6BjD;AAED;;;GAGG;AACH,uDAHW,OAAO,oBAAoB,EAAE,cAAc,GACzC,OAAO,oBAAoB,EAAE,QAAQ,CA4CjD;AAx8BD;IACI;;;;;;OAMG;IAEH;;;;OAIG;IACH,kBAJW,OAAO,YAAY,EAAE,OAAO,gBAC5B,OAAO,qBAAqB,EAAE,OAAO,UACrC,MAAM,EAwHhB;IArHG,gGAAgC;IAChC,0EAAgB;IAChB,eAAoB;IAEpB,uBAAuB;IACvB,YADW,QAAQ,CACQ;IAE3B,uBAAuB;IACvB,kBADW,QAAQ,CACc;IAEjC,sFAAsF;IACtF,MADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAC/D;IAEd,+FAA+F;IAC/F,WADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAC9D;IAEnB,mFAAmF;IACnF,YADW,OAAO,CAAC,MAAM,CAAC,OAAO,gBAAgB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAC3D;IAEpB,4BAA4B;IAC5B,eADW,aAAa,CACM;IAE9B,uBAAuB;IACvB,OADW,QAAQ,CACG;IAEtB,qBAAqB;IACrB,kBADW,MAAM,CACQ;IAEzB,iCAAiC;IACjC,wBADW,MAAM,GAAG,SAAS,CACU;IAEvC,qBAAqB;IACrB,aADW,MAAM,CACG;IAEpB,wBAAwB;IACxB,QADW,SAAS,CACQ;IA6hBhC,6GAiBC;IAED;;OAEG;IACH,4BA2LC;IAED;;OAEG;IACH,yBAWC;IAED,uBAqBC;IAED,iCAEC;;CACJ;qBAz1BoB,gBAAgB;qBANK,gBAAgB;yBADjC,oBAAoB;sBAYvB,gBAAgB;0BACoB,oBAAoB;sBARxD,wBAAwB;oBAF1B,sBAAsB"}
|
|
@@ -16,7 +16,10 @@ import Point from "../layout/point.js";
|
|
|
16
16
|
import Rectangle from "../layout/rectangle.js";
|
|
17
17
|
import createTitle, { resolveTitleSpec } from "../title.js";
|
|
18
18
|
import UnitView from "../unitView.js";
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
markViewAsChrome,
|
|
21
|
+
markViewAsNonAddressable,
|
|
22
|
+
} from "../viewSelectors.js";
|
|
20
23
|
import Scrollbar from "./scrollbar.js";
|
|
21
24
|
import SelectionRect, { INTERVAL_DRAG_ACTIVE_PARAM } from "./selectionRect.js";
|
|
22
25
|
import { normalizeIntervalForSelection } from "../../scales/selectionDomainUtils.js";
|
|
@@ -101,6 +104,7 @@ export default class GridChild {
|
|
|
101
104
|
markViewAsNonAddressable(this.background, {
|
|
102
105
|
skipSubtree: true,
|
|
103
106
|
});
|
|
107
|
+
markViewAsChrome(this.background, { skipSubtree: true });
|
|
104
108
|
}
|
|
105
109
|
|
|
106
110
|
const backgroundStrokeSpec = createBackgroundStroke(viewBackground);
|
|
@@ -118,6 +122,9 @@ export default class GridChild {
|
|
|
118
122
|
markViewAsNonAddressable(this.backgroundStroke, {
|
|
119
123
|
skipSubtree: true,
|
|
120
124
|
});
|
|
125
|
+
markViewAsChrome(this.backgroundStroke, {
|
|
126
|
+
skipSubtree: true,
|
|
127
|
+
});
|
|
121
128
|
}
|
|
122
129
|
|
|
123
130
|
const titleSpec = resolveTitleSpec(
|
|
@@ -139,6 +146,7 @@ export default class GridChild {
|
|
|
139
146
|
);
|
|
140
147
|
this.title = unitView;
|
|
141
148
|
markViewAsNonAddressable(this.title, { skipSubtree: true });
|
|
149
|
+
markViewAsChrome(this.title, { skipSubtree: true });
|
|
142
150
|
}
|
|
143
151
|
}
|
|
144
152
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridView.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridView.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gridView.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridView.js"],"names":[],"mappings":"AAywCA;;GAEG;AACH,sHAUC;AA4DD;;;;;GAKG;AACH,4CAJW,OAAO,wBAAwB,EAAE,OAAO,UACxC,OAAO,oBAAoB,EAAE,UAAU,YACvC,QAAQ,aAmBlB;AA3zCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAH2D,KAAK,SAAnD,OAAQ,oBAAoB,EAAE,aAAc;IA6CrD;;;;;;;;;OASG;IACH,kBARW,KAAK,WACL,OAAO,4BAA4B,EAAE,OAAO,gBAC5C,aAAa,yFAEb,MAAM,WACN,MAAM,YACN,OAAO,YAAY,EAAE,WAAW,EAyC1C;IAtBG,uBAA0B;IAwB9B;;OAEG;IACH,6FAEC;IAED;;;;;;OAMG;IACH,4FAFa,SAAS,CAIrB;IAED;;;;;;;OAOG;IACH,oGAHW,MAAM,GACJ,SAAS,CASrB;IAED;;;;;OAKG;IACH,iGAQC;IAED;;;;;OAKG;IACH,qBAFW,MAAM,QAUhB;IAeD;;OAEG;IACH,mBAFW,qEAAM,QAWhB;IAYD;;OAEG;IACH,sFAEC;IAED,yBAEC;IAED;;OAEG;IACH,sCAKC;IAED;;;;OAIG;IACH,gCAqCC;;CAu4BJ;qBAjsC0D,gBAAgB;sBADrD,wBAAwB;0BAEpB,qBAAqB;sBAQzB,gBAAgB"}
|