@vitessce/scatterplot 3.7.0 → 3.8.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/{deflate-B_q2mNjQ.js → deflate-BxyEnrsG.js} +1 -1
- package/dist/{index-3MaQoF6s.js → index-BumwWP-J.js} +28 -7
- package/dist/index.js +1 -1
- package/dist/{jpeg-Dd3Whsa_.js → jpeg-Dgjm5b-q.js} +1 -1
- package/dist/{lerc-DG3xbTk6.js → lerc-C4YXyd73.js} +1 -1
- package/dist/{lzw-bq1KhCJW.js → lzw-TJDvnCZk.js} +1 -1
- package/dist/{packbits-Dhncj7No.js → packbits-CUf4ETKT.js} +1 -1
- package/dist/{raw-B5fgnX06.js → raw-DrfOM6es.js} +1 -1
- package/dist/{webimage-CWwSjMxu.js → webimage-ol5Hkbkz.js} +1 -1
- package/dist-tsc/shared-spatial-scatterplot/AbstractSpatialOrScatterplot.d.ts +1 -0
- package/dist-tsc/shared-spatial-scatterplot/AbstractSpatialOrScatterplot.d.ts.map +1 -1
- package/dist-tsc/shared-spatial-scatterplot/AbstractSpatialOrScatterplot.js +29 -0
- package/package.json +10 -10
- package/src/shared-spatial-scatterplot/AbstractSpatialOrScatterplot.js +29 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as inflate_1 } from "./pako.esm-SxljTded.js";
|
|
2
|
-
import { B as BaseDecoder } from "./index-
|
|
2
|
+
import { B as BaseDecoder } from "./index-BumwWP-J.js";
|
|
3
3
|
class DeflateDecoder extends BaseDecoder {
|
|
4
4
|
decodeBlock(buffer) {
|
|
5
5
|
return inflate_1(new Uint8Array(buffer)).buffer;
|
|
@@ -105941,22 +105941,22 @@ function addDecoder(cases, importFn) {
|
|
|
105941
105941
|
}
|
|
105942
105942
|
cases.forEach((c2) => registry$1.set(c2, importFn));
|
|
105943
105943
|
}
|
|
105944
|
-
addDecoder([void 0, 1], () => import("./raw-
|
|
105945
|
-
addDecoder(5, () => import("./lzw-
|
|
105944
|
+
addDecoder([void 0, 1], () => import("./raw-DrfOM6es.js").then((m2) => m2.default));
|
|
105945
|
+
addDecoder(5, () => import("./lzw-TJDvnCZk.js").then((m2) => m2.default));
|
|
105946
105946
|
addDecoder(6, () => {
|
|
105947
105947
|
throw new Error("old style JPEG compression is not supported.");
|
|
105948
105948
|
});
|
|
105949
|
-
addDecoder(7, () => import("./jpeg-
|
|
105950
|
-
addDecoder([8, 32946], () => import("./deflate-
|
|
105951
|
-
addDecoder(32773, () => import("./packbits-
|
|
105949
|
+
addDecoder(7, () => import("./jpeg-Dgjm5b-q.js").then((m2) => m2.default));
|
|
105950
|
+
addDecoder([8, 32946], () => import("./deflate-BxyEnrsG.js").then((m2) => m2.default));
|
|
105951
|
+
addDecoder(32773, () => import("./packbits-CUf4ETKT.js").then((m2) => m2.default));
|
|
105952
105952
|
addDecoder(
|
|
105953
105953
|
34887,
|
|
105954
|
-
() => import("./lerc-
|
|
105954
|
+
() => import("./lerc-C4YXyd73.js").then(async (m2) => {
|
|
105955
105955
|
await m2.zstd.init();
|
|
105956
105956
|
return m2;
|
|
105957
105957
|
}).then((m2) => m2.default)
|
|
105958
105958
|
);
|
|
105959
|
-
addDecoder(50001, () => import("./webimage-
|
|
105959
|
+
addDecoder(50001, () => import("./webimage-ol5Hkbkz.js").then((m2) => m2.default));
|
|
105960
105960
|
function decodeRowAcc(row, stride) {
|
|
105961
105961
|
let length2 = row.length - stride;
|
|
105962
105962
|
let offset2 = 0;
|
|
@@ -137879,6 +137879,9 @@ function getOnHoverCallback(obsIndex, setObsHighlight, setComponentHover) {
|
|
|
137879
137879
|
}
|
|
137880
137880
|
};
|
|
137881
137881
|
}
|
|
137882
|
+
const ROTATION_THRESHOLD = 1;
|
|
137883
|
+
const ZOOM_THRESHOLD = 0.01;
|
|
137884
|
+
const TRANSLATION_THRESHOLD = 2;
|
|
137882
137885
|
class AbstractSpatialOrScatterplot extends PureComponent {
|
|
137883
137886
|
constructor(props) {
|
|
137884
137887
|
super(props);
|
|
@@ -137886,6 +137889,7 @@ class AbstractSpatialOrScatterplot extends PureComponent {
|
|
|
137886
137889
|
gl: null,
|
|
137887
137890
|
tool: null
|
|
137888
137891
|
};
|
|
137892
|
+
this.lastApplied = null;
|
|
137889
137893
|
this.viewport = null;
|
|
137890
137894
|
this.onViewStateChange = this.onViewStateChange.bind(this);
|
|
137891
137895
|
this.onInitializeViewInfo = this.onInitializeViewInfo.bind(this);
|
|
@@ -137909,6 +137913,23 @@ class AbstractSpatialOrScatterplot extends PureComponent {
|
|
|
137909
137913
|
spatialAxisFixed
|
|
137910
137914
|
} = this.props;
|
|
137911
137915
|
const use3d = this.use3d();
|
|
137916
|
+
let targetChanged = false;
|
|
137917
|
+
if (nextViewState.target && viewState.target) {
|
|
137918
|
+
const dx = Math.abs((nextViewState.target[0] ?? 0) - (viewState.target[0] ?? 0));
|
|
137919
|
+
const dy = Math.abs((nextViewState.target[1] ?? 0) - (viewState.target[1] ?? 0));
|
|
137920
|
+
const scale2 = 2 ** (nextViewState.zoom ?? 0);
|
|
137921
|
+
const dxPx = Math.abs(dx) * scale2;
|
|
137922
|
+
const dyPx = Math.abs(dy) * scale2;
|
|
137923
|
+
targetChanged = dxPx > TRANSLATION_THRESHOLD || dyPx > TRANSLATION_THRESHOLD;
|
|
137924
|
+
}
|
|
137925
|
+
const prev2 = this.lastApplied || viewState;
|
|
137926
|
+
const zoomChanged = Math.abs((nextViewState.zoom ?? 0) - (prev2.zoom ?? 0)) > ZOOM_THRESHOLD;
|
|
137927
|
+
const orbitChanged = Math.abs((nextViewState.rotationOrbit ?? 0) - (prev2.rotationOrbit ?? 0)) > ROTATION_THRESHOLD;
|
|
137928
|
+
const xChanged = Math.abs((nextViewState.rotationX ?? 0) - (prev2.rotationX ?? 0)) > ROTATION_THRESHOLD;
|
|
137929
|
+
if (!(zoomChanged || orbitChanged || xChanged || targetChanged)) {
|
|
137930
|
+
return;
|
|
137931
|
+
}
|
|
137932
|
+
this.lastApplied = nextViewState;
|
|
137912
137933
|
setViewState({
|
|
137913
137934
|
...nextViewState,
|
|
137914
137935
|
// If the axis is fixed, just use the current target in state i.e don't change target.
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as inflate_1 } from "./pako.esm-SxljTded.js";
|
|
2
|
-
import { g as getDefaultExportFromCjs, B as BaseDecoder } from "./index-
|
|
2
|
+
import { g as getDefaultExportFromCjs, B as BaseDecoder } from "./index-BumwWP-J.js";
|
|
3
3
|
const LercParameters = {
|
|
4
4
|
AddCompression: 1
|
|
5
5
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractSpatialOrScatterplot.d.ts","sourceRoot":"","sources":["../../src/shared-spatial-scatterplot/AbstractSpatialOrScatterplot.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AbstractSpatialOrScatterplot.d.ts","sourceRoot":"","sources":["../../src/shared-spatial-scatterplot/AbstractSpatialOrScatterplot.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH;IACE,wBAeC;IAZC;;;MAGC;IACD,2BAAuB;IACvB,wBAAoB;IAStB;;;;;;;OAOG;IACH,gDAFG;QAAuB,SAAS,EAAxB,MAAM;KAChB,QAoCA;IAED;;;;;OAKG;IACH,mCAFG;QAA0B,QAAQ,EAA1B,MAAM;KAChB,QAGA;IAED;;;;;OAKG;IACH,uBAFW,MAAM,QAIhB;IAED;;;;;OAKG;IACH,mBAFW,MAAM,QAQhB;IAgBD,qCAgFC;IAwCD;;MAEE;IAEF,iBAAa;IA1Ib;;;;;OAKG;IAEH,aALa,MAAM,EAAE,CAOpB;IAuFD;;;;;OAKG;IACH,iFAsBC;IAED;;OAEG;IAEH,2BAEC;IAQD;;;OAGG;IAEH,SAHa,OAAO,CAKnB;IAED;;;OAGG;IACH,sBA6DC;CACF"}
|
|
@@ -3,6 +3,9 @@ import React, { PureComponent } from 'react';
|
|
|
3
3
|
import { deck, DEFAULT_GL_OPTIONS } from '@vitessce/gl';
|
|
4
4
|
import ToolMenu from './ToolMenu.js';
|
|
5
5
|
import { getCursor, getCursorWithTool } from './cursor.js';
|
|
6
|
+
const ROTATION_THRESHOLD = 1;
|
|
7
|
+
const ZOOM_THRESHOLD = 0.01;
|
|
8
|
+
const TRANSLATION_THRESHOLD = 2;
|
|
6
9
|
/**
|
|
7
10
|
* Abstract class component intended to be inherited by
|
|
8
11
|
* the Spatial and Scatterplot class components.
|
|
@@ -16,6 +19,7 @@ export default class AbstractSpatialOrScatterplot extends PureComponent {
|
|
|
16
19
|
gl: null,
|
|
17
20
|
tool: null,
|
|
18
21
|
};
|
|
22
|
+
this.lastApplied = null;
|
|
19
23
|
this.viewport = null;
|
|
20
24
|
this.onViewStateChange = this.onViewStateChange.bind(this);
|
|
21
25
|
this.onInitializeViewInfo = this.onInitializeViewInfo.bind(this);
|
|
@@ -35,6 +39,31 @@ export default class AbstractSpatialOrScatterplot extends PureComponent {
|
|
|
35
39
|
onViewStateChange({ viewState: nextViewState }) {
|
|
36
40
|
const { setViewState, viewState, spatialAxisFixed, } = this.props;
|
|
37
41
|
const use3d = this.use3d();
|
|
42
|
+
// Begin changes for neuroglancer.
|
|
43
|
+
// The following logic reduces the number of viewState updates emitted,
|
|
44
|
+
// which thereby reduces the number of re-renders required of Neuroglancer
|
|
45
|
+
// (when the Neuroglancer view is coordinated with a DeckGL-based Spatial view).
|
|
46
|
+
let targetChanged = false;
|
|
47
|
+
if (nextViewState.target && viewState.target) {
|
|
48
|
+
const dx = Math.abs((nextViewState.target[0] ?? 0) - (viewState.target[0] ?? 0));
|
|
49
|
+
const dy = Math.abs((nextViewState.target[1] ?? 0) - (viewState.target[1] ?? 0));
|
|
50
|
+
const scale = 2 ** (nextViewState.zoom ?? 0);
|
|
51
|
+
const dxPx = Math.abs(dx) * scale;
|
|
52
|
+
const dyPx = Math.abs(dy) * scale;
|
|
53
|
+
targetChanged = dxPx > TRANSLATION_THRESHOLD || dyPx > TRANSLATION_THRESHOLD;
|
|
54
|
+
}
|
|
55
|
+
const prev = this.lastApplied || viewState;
|
|
56
|
+
const zoomChanged = Math.abs((nextViewState.zoom ?? 0) - (prev.zoom ?? 0))
|
|
57
|
+
> ZOOM_THRESHOLD;
|
|
58
|
+
const orbitChanged = Math.abs((nextViewState.rotationOrbit ?? 0) - (prev.rotationOrbit ?? 0))
|
|
59
|
+
> ROTATION_THRESHOLD;
|
|
60
|
+
const xChanged = Math.abs((nextViewState.rotationX ?? 0) - (prev.rotationX ?? 0))
|
|
61
|
+
> ROTATION_THRESHOLD;
|
|
62
|
+
if (!(zoomChanged || orbitChanged || xChanged || targetChanged)) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
this.lastApplied = nextViewState;
|
|
66
|
+
// End changes for neuroglancer.
|
|
38
67
|
setViewState({
|
|
39
68
|
...nextViewState,
|
|
40
69
|
// If the axis is fixed, just use the current target in state i.e don't change target.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vitessce/scatterplot",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.8.0",
|
|
4
4
|
"author": "HIDIVE Lab at HMS",
|
|
5
5
|
"homepage": "http://vitessce.io",
|
|
6
6
|
"repository": {
|
|
@@ -21,19 +21,19 @@
|
|
|
21
21
|
"d3-quadtree": "^1.0.7",
|
|
22
22
|
"lodash-es": "^4.17.21",
|
|
23
23
|
"react-aria": "^3.28.0",
|
|
24
|
-
"@vitessce/styles": "3.
|
|
25
|
-
"@vitessce/constants-internal": "3.
|
|
26
|
-
"@vitessce/gl": "3.
|
|
27
|
-
"@vitessce/icons": "3.
|
|
28
|
-
"@vitessce/tooltip": "3.
|
|
29
|
-
"@vitessce/utils": "3.
|
|
30
|
-
"@vitessce/vit-s": "3.
|
|
24
|
+
"@vitessce/styles": "3.8.0",
|
|
25
|
+
"@vitessce/constants-internal": "3.8.0",
|
|
26
|
+
"@vitessce/gl": "3.8.0",
|
|
27
|
+
"@vitessce/icons": "3.8.0",
|
|
28
|
+
"@vitessce/tooltip": "3.8.0",
|
|
29
|
+
"@vitessce/utils": "3.8.0",
|
|
30
|
+
"@vitessce/vit-s": "3.8.0"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@testing-library/jest-dom": "^6.6.3",
|
|
34
34
|
"@testing-library/react": "^16.3.0",
|
|
35
|
-
"react": "
|
|
36
|
-
"react-dom": "
|
|
35
|
+
"react": "18.3.1",
|
|
36
|
+
"react-dom": "18.3.1",
|
|
37
37
|
"vite": "^7.0.0",
|
|
38
38
|
"vitest": "^3.1.4"
|
|
39
39
|
},
|
|
@@ -3,6 +3,9 @@ import { deck, DEFAULT_GL_OPTIONS } from '@vitessce/gl';
|
|
|
3
3
|
import ToolMenu from './ToolMenu.js';
|
|
4
4
|
import { getCursor, getCursorWithTool } from './cursor.js';
|
|
5
5
|
|
|
6
|
+
const ROTATION_THRESHOLD = 1;
|
|
7
|
+
const ZOOM_THRESHOLD = 0.01;
|
|
8
|
+
const TRANSLATION_THRESHOLD = 2;
|
|
6
9
|
/**
|
|
7
10
|
* Abstract class component intended to be inherited by
|
|
8
11
|
* the Spatial and Scatterplot class components.
|
|
@@ -17,7 +20,7 @@ export default class AbstractSpatialOrScatterplot extends PureComponent {
|
|
|
17
20
|
gl: null,
|
|
18
21
|
tool: null,
|
|
19
22
|
};
|
|
20
|
-
|
|
23
|
+
this.lastApplied = null;
|
|
21
24
|
this.viewport = null;
|
|
22
25
|
this.onViewStateChange = this.onViewStateChange.bind(this);
|
|
23
26
|
this.onInitializeViewInfo = this.onInitializeViewInfo.bind(this);
|
|
@@ -40,6 +43,31 @@ export default class AbstractSpatialOrScatterplot extends PureComponent {
|
|
|
40
43
|
setViewState, viewState, spatialAxisFixed,
|
|
41
44
|
} = this.props;
|
|
42
45
|
const use3d = this.use3d();
|
|
46
|
+
// Begin changes for neuroglancer.
|
|
47
|
+
// The following logic reduces the number of viewState updates emitted,
|
|
48
|
+
// which thereby reduces the number of re-renders required of Neuroglancer
|
|
49
|
+
// (when the Neuroglancer view is coordinated with a DeckGL-based Spatial view).
|
|
50
|
+
let targetChanged = false;
|
|
51
|
+
if (nextViewState.target && viewState.target) {
|
|
52
|
+
const dx = Math.abs((nextViewState.target[0] ?? 0) - (viewState.target[0] ?? 0));
|
|
53
|
+
const dy = Math.abs((nextViewState.target[1] ?? 0) - (viewState.target[1] ?? 0));
|
|
54
|
+
const scale = 2 ** (nextViewState.zoom ?? 0);
|
|
55
|
+
const dxPx = Math.abs(dx) * scale;
|
|
56
|
+
const dyPx = Math.abs(dy) * scale;
|
|
57
|
+
targetChanged = dxPx > TRANSLATION_THRESHOLD || dyPx > TRANSLATION_THRESHOLD;
|
|
58
|
+
}
|
|
59
|
+
const prev = this.lastApplied || viewState;
|
|
60
|
+
const zoomChanged = Math.abs((nextViewState.zoom ?? 0) - (prev.zoom ?? 0))
|
|
61
|
+
> ZOOM_THRESHOLD;
|
|
62
|
+
const orbitChanged = Math.abs((nextViewState.rotationOrbit ?? 0) - (prev.rotationOrbit ?? 0))
|
|
63
|
+
> ROTATION_THRESHOLD;
|
|
64
|
+
const xChanged = Math.abs((nextViewState.rotationX ?? 0) - (prev.rotationX ?? 0))
|
|
65
|
+
> ROTATION_THRESHOLD;
|
|
66
|
+
if (!(zoomChanged || orbitChanged || xChanged || targetChanged)) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
this.lastApplied = nextViewState;
|
|
70
|
+
// End changes for neuroglancer.
|
|
43
71
|
setViewState({
|
|
44
72
|
...nextViewState,
|
|
45
73
|
// If the axis is fixed, just use the current target in state i.e don't change target.
|