@cocorof/graphier 1.4.3 → 1.4.4
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/index.cjs +81 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +81 -15
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2229,6 +2229,7 @@ function createScene(container, backgroundColor, style, rendererConfig) {
|
|
|
2229
2229
|
controls.zoomSpeed = 1.2;
|
|
2230
2230
|
controls.minDistance = 10;
|
|
2231
2231
|
controls.maxDistance = 3e4;
|
|
2232
|
+
controls.screenSpacePanning = true;
|
|
2232
2233
|
scene.add(new THREE.AmbientLight(16777215, 0.8));
|
|
2233
2234
|
const stars = createStarField(4e3, 8e3);
|
|
2234
2235
|
stars.visible = style.starField;
|
|
@@ -2242,26 +2243,34 @@ function createScene(container, backgroundColor, style, rendererConfig) {
|
|
|
2242
2243
|
controls.enableZoom = false;
|
|
2243
2244
|
const flags = {
|
|
2244
2245
|
is2D: false,
|
|
2245
|
-
keyboardMode3D: cameraMode
|
|
2246
|
+
keyboardMode3D: cameraMode,
|
|
2247
|
+
rotateButton: null
|
|
2246
2248
|
};
|
|
2247
|
-
const
|
|
2249
|
+
const _wheelOffset = new THREE.Vector3();
|
|
2248
2250
|
const onWheel = (e) => {
|
|
2249
2251
|
if (flags.is2D) return;
|
|
2250
2252
|
e.preventDefault();
|
|
2251
2253
|
let delta = -e.deltaY;
|
|
2252
2254
|
if (e.deltaMode === 1) delta *= 40;
|
|
2253
2255
|
if (e.deltaMode === 2) delta *= 800;
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
+
const target = controls.target;
|
|
2257
|
+
_wheelOffset.copy(camera.position).sub(target);
|
|
2258
|
+
const dist = _wheelOffset.length();
|
|
2256
2259
|
const moveAmount = delta * 2e-3 * Math.max(dist * 0.1, 1);
|
|
2257
|
-
|
|
2258
|
-
|
|
2260
|
+
const newDist = Math.min(
|
|
2261
|
+
Math.max(dist - moveAmount, controls.minDistance),
|
|
2262
|
+
controls.maxDistance
|
|
2263
|
+
);
|
|
2264
|
+
_wheelOffset.setLength(newDist);
|
|
2265
|
+
camera.position.copy(target).add(_wheelOffset);
|
|
2259
2266
|
};
|
|
2260
2267
|
canvas.addEventListener("wheel", onWheel, { passive: false });
|
|
2268
|
+
const trackballCleanup = setupTrackballRotation(canvas, camera, controls, flags);
|
|
2261
2269
|
const scrollCleanup = () => {
|
|
2262
2270
|
canvas.removeEventListener("wheel", onWheel);
|
|
2263
2271
|
canvas.removeEventListener("dragstart", onDragStart);
|
|
2264
2272
|
canvas.removeEventListener("selectstart", onSelectStart);
|
|
2273
|
+
trackballCleanup();
|
|
2265
2274
|
};
|
|
2266
2275
|
return {
|
|
2267
2276
|
scene,
|
|
@@ -2278,24 +2287,80 @@ function createScene(container, backgroundColor, style, rendererConfig) {
|
|
|
2278
2287
|
flags
|
|
2279
2288
|
};
|
|
2280
2289
|
}
|
|
2281
|
-
const
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2290
|
+
const TRACKBALL_SPEED = 4e-3;
|
|
2291
|
+
function setupTrackballRotation(canvas, camera, controls, flags) {
|
|
2292
|
+
let rotating = false;
|
|
2293
|
+
let lastX = 0;
|
|
2294
|
+
let lastY = 0;
|
|
2295
|
+
const _offset2 = new THREE.Vector3();
|
|
2296
|
+
const _right2 = new THREE.Vector3();
|
|
2297
|
+
const _upAxis = new THREE.Vector3();
|
|
2298
|
+
const _q2 = new THREE.Quaternion();
|
|
2299
|
+
const _qPitch = new THREE.Quaternion();
|
|
2300
|
+
function onDown(e) {
|
|
2301
|
+
if (flags.rotateButton == null || e.button !== flags.rotateButton) return;
|
|
2302
|
+
rotating = true;
|
|
2303
|
+
lastX = e.clientX;
|
|
2304
|
+
lastY = e.clientY;
|
|
2305
|
+
try {
|
|
2306
|
+
canvas.setPointerCapture(e.pointerId);
|
|
2307
|
+
} catch {
|
|
2308
|
+
}
|
|
2309
|
+
}
|
|
2310
|
+
function onMove(e) {
|
|
2311
|
+
if (!rotating) return;
|
|
2312
|
+
const dx = e.clientX - lastX;
|
|
2313
|
+
const dy = e.clientY - lastY;
|
|
2314
|
+
lastX = e.clientX;
|
|
2315
|
+
lastY = e.clientY;
|
|
2316
|
+
if (!dx && !dy) return;
|
|
2317
|
+
const target = controls.target;
|
|
2318
|
+
_offset2.copy(camera.position).sub(target);
|
|
2319
|
+
_right2.setFromMatrixColumn(camera.matrix, 0);
|
|
2320
|
+
_upAxis.setFromMatrixColumn(camera.matrix, 1);
|
|
2321
|
+
_q2.setFromAxisAngle(_upAxis, -dx * TRACKBALL_SPEED);
|
|
2322
|
+
_qPitch.setFromAxisAngle(_right2, -dy * TRACKBALL_SPEED);
|
|
2323
|
+
_q2.multiply(_qPitch);
|
|
2324
|
+
_offset2.applyQuaternion(_q2);
|
|
2325
|
+
camera.up.applyQuaternion(_q2).normalize();
|
|
2326
|
+
camera.position.copy(target).add(_offset2);
|
|
2327
|
+
camera.lookAt(target);
|
|
2328
|
+
}
|
|
2329
|
+
function onUp(e) {
|
|
2330
|
+
if (!rotating) return;
|
|
2331
|
+
rotating = false;
|
|
2332
|
+
try {
|
|
2333
|
+
canvas.releasePointerCapture(e.pointerId);
|
|
2334
|
+
} catch {
|
|
2335
|
+
}
|
|
2336
|
+
}
|
|
2337
|
+
canvas.addEventListener("pointerdown", onDown);
|
|
2338
|
+
canvas.addEventListener("pointermove", onMove);
|
|
2339
|
+
canvas.addEventListener("pointerup", onUp);
|
|
2340
|
+
canvas.addEventListener("pointercancel", onUp);
|
|
2341
|
+
return () => {
|
|
2342
|
+
canvas.removeEventListener("pointerdown", onDown);
|
|
2343
|
+
canvas.removeEventListener("pointermove", onMove);
|
|
2344
|
+
canvas.removeEventListener("pointerup", onUp);
|
|
2345
|
+
canvas.removeEventListener("pointercancel", onUp);
|
|
2346
|
+
};
|
|
2347
|
+
}
|
|
2285
2348
|
function applyNavigationMode(state, is2D, nav) {
|
|
2286
2349
|
const { controls, camera, keyboard } = state;
|
|
2287
2350
|
state.flags.is2D = is2D;
|
|
2288
2351
|
const left = (nav == null ? void 0 : nav.leftButton) ?? (is2D ? "pan" : "rotate");
|
|
2289
2352
|
const right = (nav == null ? void 0 : nav.rightButton) ?? (is2D ? "rotate" : "pan");
|
|
2353
|
+
const NONE = -1;
|
|
2290
2354
|
controls.mouseButtons = {
|
|
2291
|
-
LEFT:
|
|
2355
|
+
LEFT: left === "pan" ? THREE.MOUSE.PAN : NONE,
|
|
2292
2356
|
MIDDLE: THREE.MOUSE.DOLLY,
|
|
2293
|
-
RIGHT:
|
|
2357
|
+
RIGHT: right === "pan" ? THREE.MOUSE.PAN : NONE
|
|
2294
2358
|
};
|
|
2295
|
-
controls.enableRotate =
|
|
2359
|
+
controls.enableRotate = false;
|
|
2360
|
+
state.flags.rotateButton = left === "rotate" ? 0 : right === "rotate" ? 2 : null;
|
|
2296
2361
|
controls.touches = left === "pan" ? { ONE: THREE.TOUCH.PAN, TWO: THREE.TOUCH.DOLLY_PAN } : { ONE: THREE.TOUCH.ROTATE, TWO: THREE.TOUCH.DOLLY_PAN };
|
|
2297
2362
|
controls.enableZoom = is2D;
|
|
2298
|
-
controls.screenSpacePanning =
|
|
2363
|
+
controls.screenSpacePanning = true;
|
|
2299
2364
|
const kb = (nav == null ? void 0 : nav.keyboard) ?? (is2D ? "pan" : state.flags.keyboardMode3D);
|
|
2300
2365
|
if (kb === "off") {
|
|
2301
2366
|
keyboard.setEnabled(false);
|
|
@@ -2631,6 +2696,7 @@ function animateCamera(camera, controls, targetPos, targetLookAt, duration) {
|
|
|
2631
2696
|
function zoomToFitPositions(camera, controls, positions, duration, padding) {
|
|
2632
2697
|
const count = positions.length / 3;
|
|
2633
2698
|
if (count === 0) return;
|
|
2699
|
+
camera.up.set(0, 1, 0);
|
|
2634
2700
|
let cx = 0, cy = 0, cz = 0;
|
|
2635
2701
|
for (let i = 0; i < count; i++) {
|
|
2636
2702
|
cx += positions[i * 3];
|
|
@@ -2875,8 +2941,8 @@ function setupInteraction(canvas, camera, controls, getNodesMesh, getNodes, call
|
|
|
2875
2941
|
}
|
|
2876
2942
|
}
|
|
2877
2943
|
function onContextMenu2(e) {
|
|
2878
|
-
if (!callbacks.onContextMenu) return;
|
|
2879
2944
|
e.preventDefault();
|
|
2945
|
+
if (!callbacks.onContextMenu) return;
|
|
2880
2946
|
const nodesMesh = getNodesMesh();
|
|
2881
2947
|
if (!nodesMesh) return;
|
|
2882
2948
|
const rect = canvas.getBoundingClientRect();
|