@genome-spy/core 0.71.0 → 0.73.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/LICENSE +1 -1
- package/dist/bundle/index.es.js +6842 -5365
- package/dist/bundle/index.js +159 -140
- package/dist/bundle/parquetRead-BnAGCa4_.js +1663 -0
- package/dist/schema.json +281 -17
- package/dist/src/data/formats/bed.d.ts +8 -0
- package/dist/src/data/formats/bed.d.ts.map +1 -0
- package/dist/src/data/formats/bed.js +53 -0
- package/dist/src/data/formats/bedpe.d.ts +8 -0
- package/dist/src/data/formats/bedpe.d.ts.map +1 -0
- package/dist/src/data/formats/bedpe.js +160 -0
- package/dist/src/data/formats/parquet.d.ts +12 -0
- package/dist/src/data/formats/parquet.d.ts.map +1 -0
- package/dist/src/data/formats/parquet.js +29 -0
- package/dist/src/data/formats/parquetRead.d.ts +18 -0
- package/dist/src/data/formats/parquetRead.d.ts.map +1 -0
- package/dist/src/data/formats/parquetRead.js +326 -0
- package/dist/src/data/sources/dataUtils.d.ts +16 -0
- package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
- package/dist/src/data/sources/dataUtils.js +53 -3
- package/dist/src/data/sources/urlSource.d.ts +4 -0
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +141 -17
- package/dist/src/encoder/encoder.d.ts +2 -2
- package/dist/src/fonts/bmFontManager.d.ts +1 -1
- package/dist/src/genome/assemblyPreflight.d.ts +31 -0
- package/dist/src/genome/assemblyPreflight.d.ts.map +1 -0
- package/dist/src/genome/assemblyPreflight.js +99 -0
- package/dist/src/genome/genome.d.ts +2 -2
- package/dist/src/genome/genome.d.ts.map +1 -1
- package/dist/src/genome/genome.js +4 -0
- package/dist/src/genome/genomeStore.d.ts +34 -3
- package/dist/src/genome/genomeStore.d.ts.map +1 -1
- package/dist/src/genome/genomeStore.js +409 -18
- package/dist/src/genome/rootGenomeConfig.d.ts +26 -0
- package/dist/src/genome/rootGenomeConfig.d.ts.map +1 -0
- package/dist/src/genome/rootGenomeConfig.js +94 -0
- package/dist/src/genomeSpy/interactionController.d.ts +5 -1
- package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
- package/dist/src/genomeSpy/interactionController.js +244 -29
- package/dist/src/genomeSpy/renderCoordinator.js +1 -1
- package/dist/src/genomeSpy.d.ts +13 -3
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +83 -7
- package/dist/src/gl/canvasSizeHelper.d.ts +74 -0
- package/dist/src/gl/canvasSizeHelper.d.ts.map +1 -0
- package/dist/src/gl/canvasSizeHelper.js +203 -0
- package/dist/src/gl/hashTable.d.ts +78 -0
- package/dist/src/gl/hashTable.d.ts.map +1 -0
- package/dist/src/gl/hashTable.js +164 -0
- package/dist/src/gl/includes/common.glsl.js +1 -1
- package/dist/src/gl/webGLHelper.d.ts +25 -11
- package/dist/src/gl/webGLHelper.d.ts.map +1 -1
- package/dist/src/gl/webGLHelper.js +71 -39
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -2
- package/dist/src/marks/link.d.ts.map +1 -1
- package/dist/src/marks/link.js +5 -3
- package/dist/src/marks/mark.d.ts +1 -1
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +8 -4
- package/dist/src/scales/domainPlanner.d.ts +34 -3
- package/dist/src/scales/domainPlanner.d.ts.map +1 -1
- package/dist/src/scales/domainPlanner.js +247 -26
- package/dist/src/scales/scaleInstanceManager.d.ts +2 -1
- package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
- package/dist/src/scales/scaleInstanceManager.js +10 -11
- package/dist/src/scales/scaleInteractionController.d.ts.map +1 -1
- package/dist/src/scales/scaleInteractionController.js +16 -14
- package/dist/src/scales/scaleResolution.d.ts +16 -0
- package/dist/src/scales/scaleResolution.d.ts.map +1 -1
- package/dist/src/scales/scaleResolution.js +314 -54
- package/dist/src/scales/scaleResolutionTestUtils.d.ts +21 -0
- package/dist/src/scales/scaleResolutionTestUtils.d.ts.map +1 -0
- package/dist/src/scales/scaleResolutionTestUtils.js +33 -0
- package/dist/src/scales/selectionDomainUtils.d.ts +22 -0
- package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -0
- package/dist/src/scales/selectionDomainUtils.js +79 -0
- package/dist/src/scales/zoomDomainUtils.d.ts +18 -0
- package/dist/src/scales/zoomDomainUtils.d.ts.map +1 -0
- package/dist/src/scales/zoomDomainUtils.js +69 -0
- package/dist/src/screenshotHarness.d.ts +16 -0
- package/dist/src/screenshotHarness.d.ts.map +1 -0
- package/dist/src/screenshotHarness.js +242 -0
- package/dist/src/singlePageApp.js +1 -1
- package/dist/src/spec/data.d.ts +23 -3
- package/dist/src/spec/genome.d.ts +22 -2
- package/dist/src/spec/parameter.d.ts +39 -2
- package/dist/src/spec/root.d.ts +20 -1
- package/dist/src/spec/scale.d.ts +41 -5
- 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/tooltip/dataTooltipHandler.js +59 -10
- package/dist/src/types/embedApi.d.ts +19 -0
- package/dist/src/utils/inferSpecBaseUrl.d.ts +14 -0
- package/dist/src/utils/inferSpecBaseUrl.d.ts.map +1 -0
- package/dist/src/utils/inferSpecBaseUrl.js +73 -0
- package/dist/src/utils/interactionEvent.d.ts +53 -3
- package/dist/src/utils/interactionEvent.d.ts.map +1 -1
- package/dist/src/utils/interactionEvent.js +62 -1
- package/dist/src/utils/radixSort.d.ts.map +1 -1
- package/dist/src/utils/radixSort.js +26 -1
- package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
- package/dist/src/view/containerMutationHelper.js +8 -0
- package/dist/src/view/dataReadiness.d.ts +2 -2
- package/dist/src/view/dataReadiness.d.ts.map +1 -1
- package/dist/src/view/dataReadiness.js +63 -58
- package/dist/src/view/facetView.d.ts +1 -1
- package/dist/src/view/facetView.js +1 -1
- package/dist/src/view/gridView/gridChild.d.ts +7 -0
- package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
- package/dist/src/view/gridView/gridChild.js +180 -11
- package/dist/src/view/gridView/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView/gridView.js +60 -17
- package/dist/src/view/unitView.d.ts +1 -1
- package/dist/src/view/zoom.d.ts +14 -2
- package/dist/src/view/zoom.d.ts.map +1 -1
- package/dist/src/view/zoom.js +373 -76
- package/package.json +5 -2
|
@@ -27,6 +27,11 @@ import {
|
|
|
27
27
|
isDiscreteChannel,
|
|
28
28
|
} from "../encoder/encoder.js";
|
|
29
29
|
import { isMultiPointSelection } from "../selection/selection.js";
|
|
30
|
+
import {
|
|
31
|
+
buildHashTableSet,
|
|
32
|
+
computeHashTextureDimensions,
|
|
33
|
+
} from "./hashTable.js";
|
|
34
|
+
import CanvasSizeHelper from "./canvasSizeHelper.js";
|
|
30
35
|
|
|
31
36
|
export default class WebGLHelper {
|
|
32
37
|
/**
|
|
@@ -38,14 +43,23 @@ export default class WebGLHelper {
|
|
|
38
43
|
* @param {WebGLContextAttributes} [webglContextAttributes]
|
|
39
44
|
*/
|
|
40
45
|
constructor(container, sizeSource, webglContextAttributes = {}) {
|
|
41
|
-
|
|
42
|
-
this._sizeSource =
|
|
46
|
+
const resolvedSizeSource =
|
|
43
47
|
sizeSource ??
|
|
44
48
|
(() => ({
|
|
45
49
|
width: undefined,
|
|
46
50
|
height: undefined,
|
|
47
51
|
}));
|
|
48
52
|
|
|
53
|
+
/**
|
|
54
|
+
* @type {CanvasSizeHelper}
|
|
55
|
+
*/
|
|
56
|
+
this._canvasSizeHelper = undefined;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @type {{ logicalWidth: number, logicalHeight: number, physicalWidth: number, physicalHeight: number } | undefined}
|
|
60
|
+
*/
|
|
61
|
+
this._appliedCanvasSize = undefined;
|
|
62
|
+
|
|
49
63
|
/** @type {Map<string, WebGLShader>} */
|
|
50
64
|
this._shaderCache = new Map();
|
|
51
65
|
|
|
@@ -120,11 +134,18 @@ export default class WebGLHelper {
|
|
|
120
134
|
);
|
|
121
135
|
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
122
136
|
|
|
137
|
+
this._canvasSizeHelper = new CanvasSizeHelper(
|
|
138
|
+
container,
|
|
139
|
+
canvas,
|
|
140
|
+
resolvedSizeSource,
|
|
141
|
+
() => this.adjustGl()
|
|
142
|
+
);
|
|
143
|
+
|
|
123
144
|
this.adjustGl();
|
|
124
145
|
}
|
|
125
146
|
|
|
126
147
|
invalidateSize() {
|
|
127
|
-
this.
|
|
148
|
+
this._canvasSizeHelper.invalidate();
|
|
128
149
|
this.adjustGl();
|
|
129
150
|
}
|
|
130
151
|
|
|
@@ -163,10 +184,21 @@ export default class WebGLHelper {
|
|
|
163
184
|
|
|
164
185
|
adjustGl() {
|
|
165
186
|
const logicalSize = this.getLogicalCanvasSize();
|
|
187
|
+
const physicalSize = this.getPhysicalCanvasSize(logicalSize);
|
|
188
|
+
|
|
189
|
+
if (
|
|
190
|
+
this._appliedCanvasSize &&
|
|
191
|
+
this._appliedCanvasSize.logicalWidth == logicalSize.width &&
|
|
192
|
+
this._appliedCanvasSize.logicalHeight == logicalSize.height &&
|
|
193
|
+
this._appliedCanvasSize.physicalWidth == physicalSize.width &&
|
|
194
|
+
this._appliedCanvasSize.physicalHeight == physicalSize.height
|
|
195
|
+
) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
|
|
166
199
|
this.canvas.style.width = `${logicalSize.width}px`;
|
|
167
200
|
this.canvas.style.height = `${logicalSize.height}px`;
|
|
168
201
|
|
|
169
|
-
const physicalSize = this.getPhysicalCanvasSize(logicalSize);
|
|
170
202
|
this.canvas.width = physicalSize.width;
|
|
171
203
|
this.canvas.height = physicalSize.height;
|
|
172
204
|
|
|
@@ -175,9 +207,17 @@ export default class WebGLHelper {
|
|
|
175
207
|
this._pickingBufferInfo,
|
|
176
208
|
this._pickingAttachmentOptions
|
|
177
209
|
);
|
|
210
|
+
|
|
211
|
+
this._appliedCanvasSize = {
|
|
212
|
+
logicalWidth: logicalSize.width,
|
|
213
|
+
logicalHeight: logicalSize.height,
|
|
214
|
+
physicalWidth: physicalSize.width,
|
|
215
|
+
physicalHeight: physicalSize.height,
|
|
216
|
+
};
|
|
178
217
|
}
|
|
179
218
|
|
|
180
219
|
finalize() {
|
|
220
|
+
this._canvasSizeHelper.finalize();
|
|
181
221
|
this.canvas.remove();
|
|
182
222
|
}
|
|
183
223
|
|
|
@@ -187,12 +227,16 @@ export default class WebGLHelper {
|
|
|
187
227
|
* @param {{ width: number, height: number }} [logicalSize]
|
|
188
228
|
*/
|
|
189
229
|
getPhysicalCanvasSize(logicalSize) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
230
|
+
return this._canvasSizeHelper.getPhysicalCanvasSize(logicalSize);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Returns the ratio between true display pixels and logical pixels.
|
|
235
|
+
*
|
|
236
|
+
* @param {{ width: number, height: number }} [logicalSize]
|
|
237
|
+
*/
|
|
238
|
+
getDevicePixelRatio(logicalSize) {
|
|
239
|
+
return this._canvasSizeHelper.getDevicePixelRatio(logicalSize);
|
|
196
240
|
}
|
|
197
241
|
|
|
198
242
|
/**
|
|
@@ -200,28 +244,7 @@ export default class WebGLHelper {
|
|
|
200
244
|
* without devicePixelRatio correction.
|
|
201
245
|
*/
|
|
202
246
|
getLogicalCanvasSize() {
|
|
203
|
-
|
|
204
|
-
return this._logicalCanvasSize;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// TODO: The size should never be smaller than the minimum content size!
|
|
208
|
-
const contentSize = this._sizeSource();
|
|
209
|
-
|
|
210
|
-
const cs = window.getComputedStyle(this._container, null);
|
|
211
|
-
const width =
|
|
212
|
-
contentSize.width ??
|
|
213
|
-
this._container.clientWidth -
|
|
214
|
-
parseFloat(cs.paddingLeft) -
|
|
215
|
-
parseFloat(cs.paddingRight);
|
|
216
|
-
|
|
217
|
-
const height =
|
|
218
|
-
contentSize.height ??
|
|
219
|
-
this._container.clientHeight -
|
|
220
|
-
parseFloat(cs.paddingTop) -
|
|
221
|
-
parseFloat(cs.paddingBottom);
|
|
222
|
-
|
|
223
|
-
this._logicalCanvasSize = { width, height };
|
|
224
|
-
return this._logicalCanvasSize;
|
|
247
|
+
return this._canvasSizeHelper.getLogicalCanvasSize();
|
|
225
248
|
}
|
|
226
249
|
|
|
227
250
|
/**
|
|
@@ -351,9 +374,11 @@ export default class WebGLHelper {
|
|
|
351
374
|
);
|
|
352
375
|
}
|
|
353
376
|
|
|
354
|
-
const
|
|
355
|
-
|
|
356
|
-
|
|
377
|
+
const { table, capacity } = buildHashTableSet(selection.data.keys());
|
|
378
|
+
const { width, height } = computeHashTextureDimensions(
|
|
379
|
+
capacity,
|
|
380
|
+
this.gl.getParameter(this.gl.MAX_TEXTURE_SIZE)
|
|
381
|
+
);
|
|
357
382
|
|
|
358
383
|
const existingTexture = this.selectionTextures.get(selection);
|
|
359
384
|
|
|
@@ -361,16 +386,23 @@ export default class WebGLHelper {
|
|
|
361
386
|
const texture = createOrUpdateTexture(
|
|
362
387
|
this.gl,
|
|
363
388
|
{
|
|
389
|
+
// Hash textures are point-lookups and must remain single-level.
|
|
390
|
+
auto: false,
|
|
364
391
|
level: 0,
|
|
365
|
-
|
|
392
|
+
min: gl.NEAREST,
|
|
393
|
+
mag: gl.NEAREST,
|
|
366
394
|
format: gl.RED_INTEGER,
|
|
367
395
|
internalFormat: gl.R32UI,
|
|
368
|
-
|
|
369
|
-
|
|
396
|
+
width,
|
|
397
|
+
height,
|
|
370
398
|
},
|
|
371
|
-
|
|
399
|
+
table,
|
|
372
400
|
update ? existingTexture : false
|
|
373
401
|
);
|
|
402
|
+
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
403
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_BASE_LEVEL, 0);
|
|
404
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAX_LEVEL, 0);
|
|
405
|
+
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
374
406
|
|
|
375
407
|
this.selectionTextures.set(selection, texture);
|
|
376
408
|
}
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":";AAoGA;;;;;GAKG;AACH,8BAFW,MAAM,gBAkBhB;sBAvHqB,gBAAgB;qBAFjB,KAAK;iBAGT,kBAAkB;oBACf,6BAA6B"}
|
package/dist/src/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import GenomeSpy from "./genomeSpy.js";
|
|
|
5
5
|
import icon from "./img/bowtie.svg";
|
|
6
6
|
import favIcon from "./img/genomespy-favicon.svg";
|
|
7
7
|
import { fetchJson } from "./utils/fetchUtils.js";
|
|
8
|
+
import inferSpecBaseUrl from "./utils/inferSpecBaseUrl.js";
|
|
8
9
|
|
|
9
10
|
export { GenomeSpy, html, icon, favIcon };
|
|
10
11
|
|
|
@@ -78,7 +79,10 @@ export async function embed(el, spec, options = {}) {
|
|
|
78
79
|
return genomeSpy.getNamedScaleResolutions().get(name);
|
|
79
80
|
},
|
|
80
81
|
|
|
82
|
+
awaitVisibleLazyData: genomeSpy.awaitVisibleLazyData.bind(genomeSpy),
|
|
83
|
+
getRenderedBounds: genomeSpy.getRenderedBounds.bind(genomeSpy),
|
|
81
84
|
updateNamedData: genomeSpy.updateNamedData.bind(genomeSpy),
|
|
85
|
+
getLogicalCanvasSize: genomeSpy.getLogicalCanvasSize.bind(genomeSpy),
|
|
82
86
|
exportCanvas: genomeSpy.exportCanvas.bind(genomeSpy),
|
|
83
87
|
};
|
|
84
88
|
}
|
|
@@ -112,8 +116,7 @@ export async function loadSpec(url) {
|
|
|
112
116
|
}
|
|
113
117
|
|
|
114
118
|
if (!spec.baseUrl) {
|
|
115
|
-
|
|
116
|
-
spec.baseUrl = (m && m[0]) || "./";
|
|
119
|
+
spec.baseUrl = inferSpecBaseUrl(url);
|
|
117
120
|
}
|
|
118
121
|
|
|
119
122
|
return spec;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/marks/link.js"],"names":[],"mappings":"AAYA;;GAEG;AACH;IACI;;OAEG;IACH,sBAFW,OAAO,qBAAqB,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/marks/link.js"],"names":[],"mappings":"AAYA;;GAEG;AACH;IACI;;OAEG;IACH,sBAFW,OAAO,qBAAqB,EAAE,OAAO,EAkC/C;IAPG;;;;;OAKG;IACH,yBAAiC;IAkIjC;;kBAGiC,GAAG;;;;MAEnC;CA4FR;iBA/QgB,WAAW"}
|
package/dist/src/marks/link.js
CHANGED
|
@@ -48,9 +48,7 @@ export default class LinkMark extends Mark {
|
|
|
48
48
|
*
|
|
49
49
|
* @private
|
|
50
50
|
*/
|
|
51
|
-
this._baseInstanceExt =
|
|
52
|
-
"WEBGL_draw_instanced_base_vertex_base_instance"
|
|
53
|
-
);
|
|
51
|
+
this._baseInstanceExt = undefined;
|
|
54
52
|
}
|
|
55
53
|
|
|
56
54
|
/**
|
|
@@ -110,6 +108,10 @@ export default class LinkMark extends Mark {
|
|
|
110
108
|
async initializeGraphics() {
|
|
111
109
|
await super.initializeGraphics();
|
|
112
110
|
|
|
111
|
+
this._baseInstanceExt = this.gl.getExtension(
|
|
112
|
+
"WEBGL_draw_instanced_base_vertex_base_instance"
|
|
113
|
+
);
|
|
114
|
+
|
|
113
115
|
this.createAndLinkShaders(VERTEX_SHADER, FRAGMENT_SHADER, [
|
|
114
116
|
COMMON_SHADER,
|
|
115
117
|
]);
|
package/dist/src/marks/mark.d.ts
CHANGED
|
@@ -137,7 +137,7 @@ export default class Mark<P extends import("../spec/mark.js").MarkProps = import
|
|
|
137
137
|
*/
|
|
138
138
|
get encoding(): import("../spec/channel.js").Encoding;
|
|
139
139
|
getContext(): import("../types/viewContext.js").default;
|
|
140
|
-
getType(): "link" | "
|
|
140
|
+
getType(): "link" | "point" | "text" | "rect" | "rule";
|
|
141
141
|
initializeData(): void;
|
|
142
142
|
/**
|
|
143
143
|
* Initialize encoders that encode fields of the data (or constants) to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../src/marks/mark.js"],"names":[],"mappings":"AA6DA,mCAAoC,sBAAsB,CAAC;AAC3D,mCAAoC,sBAAsB,CAAC;AAE3D,uCAAwC,oBAAoB,CAAC;AAE7D;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,0BAF0B,CAAC,SAAd,mCAAW;IAkBpB;;OAEG;IACH,sBAFW,OAAO,qBAAqB,EAAE,OAAO,EA4G/C;IAzGG,oFAAwB;IAExB,8EAA8E;IAC9E,UADW,OAAO,CAAC,MAAM,uCAAU,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC,CACjD;IAIzB;;;OAGG;IACH,sBAHU,OAAO,SAAS,EAAE,UAAU,GAAG;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,CAG5C;IAE3B;;;;;;;OAOG;IACH,2BAHU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAGG;IAEhC;;;OAGG;IACH,uBAHU,OAAO,SAAS,EAAE,WAAW,CAGX;IAE5B;;;OAGG;IACH,2BAHU,OAAO,SAAS,EAAE,eAAe,CAGX;IAEhC;;;OAGG;IACH,2BAHU,OAAO,SAAS,EAAE,gBAAgB,CAGZ;IAEhC;;;;;OAKG;IACH,2BAHU,OAAO,SAAS,EAAE,gBAAgB,CAGZ;IAEhC;;;;;OAKG;IACH,uCAA+B;IAE/B;;;;;OAKG;IACH,4BAA6B;IAE7B,kFAAkF;IAClF,UADW,QAAQ,CAAC,GAAG,CAAC,CACM;IAG9B,qBAqBE;IAEF;;;;;;OAMG;IACH,qBAHU,CAAC,CAQV;IAGL;;;OAGG;IACH,0CAHW,OAAO,CAAC,CAAC,CAAC,QAQpB;IAED,sBAEC;IAED;;;OAGG;IACH,0BAFa,WAAW,CAIvB;IAED;;;;;OAKG;IACH,2BAHa,OAAO,oBAAoB,EAAE,OAAO,EAAE,CAMlD;IAED;;OAEG;IACH,wBAFa,sCAAS,CAarB;IAED;;OAEG;IACH,4DAcC;IAED;;;;;OAKG;IACH,oGAEC;IAED;;;;;;OAMG;IACH,oDAHW,CAAC,MAAM,CAAC,CAAC,EAAE,QAqCrB;IAED;;;;OAIG;IACH,sDAiDC;IAED,wDAEC;IAED,uDAEC;IAED,uBAEC;IAED;;;OAGG;IACH,2BAEC;IAED;;OAEG;IACH,oCAEC;IAED;;OAEG;IACH,2BAEC;IAED,sEAeC;IAED;;;;;;OAMG;IAEH,6CANW,MAAM,kBACN,MAAM,iBACN,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../src/marks/mark.js"],"names":[],"mappings":"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"}
|
package/dist/src/marks/mark.js
CHANGED
|
@@ -528,8 +528,7 @@ export default class Mark {
|
|
|
528
528
|
}
|
|
529
529
|
} else if (isMultiPointSelection(selection)) {
|
|
530
530
|
// We need a texture for each multi-selection parameter.
|
|
531
|
-
// The texture
|
|
532
|
-
// in ascending order, which allows for binary search.
|
|
531
|
+
// The texture stores an open-addressing hash table of selected uniqueIds.
|
|
533
532
|
if (!selectionParameterUniforms.has(param)) {
|
|
534
533
|
selectionParameterUniforms.set(param, "multi");
|
|
535
534
|
|
|
@@ -560,7 +559,7 @@ export default class Mark {
|
|
|
560
559
|
const texName = SELECTION_TEXTURE_PREFIX + param;
|
|
561
560
|
scaleCode.push(
|
|
562
561
|
`bool ${SELECTION_CHECKER_PREFIX}${param}(bool empty) {\n` +
|
|
563
|
-
` return
|
|
562
|
+
` return hashContainsTexture(${texName}, ${uniqueIdAttr}) || (empty && isEmptyHashTexture(${texName}));\n` +
|
|
564
563
|
`}`
|
|
565
564
|
);
|
|
566
565
|
|
|
@@ -1489,7 +1488,12 @@ export default class Mark {
|
|
|
1489
1488
|
}
|
|
1490
1489
|
|
|
1491
1490
|
// Viewport comprises the full canvas
|
|
1492
|
-
gl.viewport(
|
|
1491
|
+
gl.viewport(
|
|
1492
|
+
0,
|
|
1493
|
+
0,
|
|
1494
|
+
Math.round(canvasSize.width * dpr),
|
|
1495
|
+
Math.round(canvasSize.height * dpr)
|
|
1496
|
+
);
|
|
1493
1497
|
gl.disable(gl.SCISSOR_TEST);
|
|
1494
1498
|
|
|
1495
1499
|
// Offset and scale all drawing to the view rectangle
|
|
@@ -1,8 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {any} domain
|
|
3
|
+
* @returns {domain is SelectionDomainRef}
|
|
4
|
+
*/
|
|
5
|
+
export function isSelectionDomainRef(domain: any): domain is SelectionDomainRef;
|
|
1
6
|
/**
|
|
2
7
|
* @typedef {import("../utils/domainArray.js").DomainArray} DomainArray
|
|
3
8
|
* @typedef {import("../spec/scale.js").ComplexDomain} ComplexDomain
|
|
4
9
|
* @typedef {import("../spec/scale.js").ScalarDomain} ScalarDomain
|
|
10
|
+
* @typedef {import("../spec/scale.js").SelectionDomainRef} SelectionDomainRef
|
|
5
11
|
* @typedef {import("./scaleResolution.js").ScaleResolutionMember} ScaleResolutionMember
|
|
12
|
+
* @typedef {{
|
|
13
|
+
* param: string,
|
|
14
|
+
* encoding: "x" | "y",
|
|
15
|
+
* sync: "auto" | "oneWay" | "twoWay",
|
|
16
|
+
* }} SelectionDomainLinkInfo
|
|
6
17
|
*/
|
|
7
18
|
export default class DomainPlanner {
|
|
8
19
|
/**
|
|
@@ -10,14 +21,14 @@ export default class DomainPlanner {
|
|
|
10
21
|
* @param {() => Set<ScaleResolutionMember>} options.getMembers
|
|
11
22
|
* @param {() => Set<ScaleResolutionMember>} [options.getDataMembers]
|
|
12
23
|
* @param {() => import("../spec/channel.js").Type} options.getType
|
|
13
|
-
* @param {() => number[]} options.getLocusExtent
|
|
24
|
+
* @param {(assembly: import("../spec/scale.js").Scale["assembly"] | undefined) => number[]} options.getLocusExtent
|
|
14
25
|
* @param {(interval: ScalarDomain | ComplexDomain) => number[]} options.fromComplexInterval
|
|
15
26
|
*/
|
|
16
27
|
constructor({ getMembers, getDataMembers, getType, getLocusExtent, fromComplexInterval, }: {
|
|
17
28
|
getMembers: () => Set<ScaleResolutionMember>;
|
|
18
29
|
getDataMembers?: () => Set<ScaleResolutionMember>;
|
|
19
30
|
getType: () => import("../spec/channel.js").Type;
|
|
20
|
-
getLocusExtent: () => number[];
|
|
31
|
+
getLocusExtent: (assembly: import("../spec/scale.js").Scale["assembly"] | undefined) => number[];
|
|
21
32
|
fromComplexInterval: (interval: ScalarDomain | ComplexDomain) => number[];
|
|
22
33
|
});
|
|
23
34
|
/**
|
|
@@ -25,14 +36,28 @@ export default class DomainPlanner {
|
|
|
25
36
|
*/
|
|
26
37
|
get initialDomainSnapshot(): any[];
|
|
27
38
|
hasConfiguredDomain(): boolean;
|
|
39
|
+
hasSelectionConfiguredDomain(): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* @returns {SelectionDomainLinkInfo | undefined}
|
|
42
|
+
*/
|
|
43
|
+
getSelectionConfiguredDomainInfo(): SelectionDomainLinkInfo | undefined;
|
|
28
44
|
invalidateConfiguredDomain(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Returns the default domain without considering configured domains.
|
|
47
|
+
*
|
|
48
|
+
* @param {boolean} [extractDataDomain]
|
|
49
|
+
* @param {import("../spec/scale.js").Scale["assembly"]} [locusAssembly]
|
|
50
|
+
* @returns {any[]}
|
|
51
|
+
*/
|
|
52
|
+
getDefaultDomain(extractDataDomain?: boolean, locusAssembly?: import("../spec/scale.js").Scale["assembly"]): any[];
|
|
29
53
|
/**
|
|
30
54
|
* Returns the configured domain or a data-derived/default domain.
|
|
31
55
|
*
|
|
32
56
|
* @param {boolean} [extractDataDomain]
|
|
57
|
+
* @param {import("../spec/scale.js").Scale["assembly"]} [locusAssembly]
|
|
33
58
|
* @returns {any[]}
|
|
34
59
|
*/
|
|
35
|
-
getConfiguredOrDefaultDomain(extractDataDomain?: boolean): any[];
|
|
60
|
+
getConfiguredOrDefaultDomain(extractDataDomain?: boolean, locusAssembly?: import("../spec/scale.js").Scale["assembly"]): any[];
|
|
36
61
|
/**
|
|
37
62
|
* Unions the configured domains of all participating views.
|
|
38
63
|
*
|
|
@@ -56,5 +81,11 @@ export default class DomainPlanner {
|
|
|
56
81
|
export type DomainArray = import("../utils/domainArray.js").DomainArray;
|
|
57
82
|
export type ComplexDomain = import("../spec/scale.js").ComplexDomain;
|
|
58
83
|
export type ScalarDomain = import("../spec/scale.js").ScalarDomain;
|
|
84
|
+
export type SelectionDomainRef = import("../spec/scale.js").SelectionDomainRef;
|
|
59
85
|
export type ScaleResolutionMember = import("./scaleResolution.js").ScaleResolutionMember;
|
|
86
|
+
export type SelectionDomainLinkInfo = {
|
|
87
|
+
param: string;
|
|
88
|
+
encoding: "x" | "y";
|
|
89
|
+
sync: "auto" | "oneWay" | "twoWay";
|
|
90
|
+
};
|
|
60
91
|
//# sourceMappingURL=domainPlanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domainPlanner.d.ts","sourceRoot":"","sources":["../../../src/scales/domainPlanner.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"domainPlanner.d.ts","sourceRoot":"","sources":["../../../src/scales/domainPlanner.js"],"names":[],"mappings":"AA8ZA;;;GAGG;AACH,6CAHW,GAAG,GACD,MAAM,IAAI,kBAAkB,CASxC;AAhaD;;;;;;;;;;;GAWG;AAEH;IA8BI;;;;;;;OAOG;IACH,2FANG;QAAkD,UAAU,EAApD,MAAM,GAAG,CAAC,qBAAqB,CAAC;QACW,cAAc,GAAzD,MAAM,GAAG,CAAC,qBAAqB,CAAC;QACiB,OAAO,EAAxD,MAAM,OAAO,oBAAoB,EAAE,IAAI;QACmD,cAAc,EAAxG,CAAC,QAAQ,EAAE,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,SAAS,KAAK,MAAM,EAAE;QAClB,mBAAmB,EAAjF,CAAC,QAAQ,EAAE,YAAY,GAAG,aAAa,KAAK,MAAM,EAAE;KAC9D,EAaA;IAED;;OAEG;IACH,6BAFa,GAAG,EAAE,CAIjB;IAED,+BAEC;IAED,wCAGC;IAED;;OAEG;IACH,oCAFa,uBAAuB,GAAG,SAAS,CAK/C;IAED,mCAEC;IAED;;;;;;OAMG;IACH,qCAJW,OAAO,kBACP,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,GAC1C,GAAG,EAAE,CASjB;IAED;;;;;;OAMG;IACH,iDAJW,OAAO,kBACP,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,GAC1C,GAAG,EAAE,CAQjB;IAED;;;;OAIG;IACH,uBAFY,WAAW,CAetB;IAED;;;;OAIG;IACH,iBAFY,WAAW,GAAG,SAAS,CAQlC;IAED;;;;OAIG;IACH,4BAJW,OAAO,qBAAqB,EAAE,SAAS,wBACvC,OAAO,GACL,OAAO,CAgBnB;;CAkCJ;0BAjNY,OAAO,yBAAyB,EAAE,WAAW;4BAC7C,OAAO,kBAAkB,EAAE,aAAa;2BACxC,OAAO,kBAAkB,EAAE,YAAY;iCACvC,OAAO,kBAAkB,EAAE,kBAAkB;oCAC7C,OAAO,sBAAsB,EAAE,qBAAqB;sCACpD;IACR,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,GAAG,GAAG,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACpC"}
|