force-graph 1.50.0 → 1.51.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.
@@ -1179,6 +1179,10 @@ var forceGraph = Kapsule({
1179
1179
  onBackgroundRightClick: {
1180
1180
  triggerUpdate: false
1181
1181
  },
1182
+ showPointerCursor: {
1183
+ "default": true,
1184
+ triggerUpdate: false
1185
+ },
1182
1186
  onZoom: {
1183
1187
  triggerUpdate: false
1184
1188
  },
@@ -1525,9 +1529,9 @@ var forceGraph = Kapsule({
1525
1529
  // detect pointer drag on canvas pan
1526
1530
  !state.isPointerDragging && ev.type === 'pointermove' && state.onBackgroundClick // only bother detecting drags this way if background clicks are enabled (so they don't trigger accidentally on canvas panning)
1527
1531
  && (ev.pressure > 0 || state.isPointerPressed) // ev.pressure always 0 on Safari, so we use the isPointerPressed tracker
1528
- && (ev.pointerType !== 'touch' || ev.movementX === undefined || [ev.movementX, ev.movementY].some(function (m) {
1532
+ && (ev.pointerType === 'mouse' || ev.movementX === undefined || [ev.movementX, ev.movementY].some(function (m) {
1529
1533
  return Math.abs(m) > 1;
1530
- })) // relax drag trigger sensitivity on touch events
1534
+ })) // relax drag trigger sensitivity on non-mouse (touch/pen) events
1531
1535
  && (state.isPointerDragging = true);
1532
1536
 
1533
1537
  // update the pointer pos
@@ -1638,7 +1642,7 @@ var forceGraph = Kapsule({
1638
1642
  state.tooltip.content(obj ? accessorFn(state["".concat(obj.type.toLowerCase(), "Label")])(obj.d) || null : null);
1639
1643
 
1640
1644
  // set pointer if hovered object is clickable
1641
- state.canvas.classList[obj && state["on".concat(objType, "Click")] || !obj && state.onBackgroundClick ? 'add' : 'remove']('clickable');
1645
+ state.canvas.classList[(obj && state["on".concat(objType, "Click")] || !obj && state.onBackgroundClick) && accessorFn(state.showPointerCursor)(obj === null || obj === void 0 ? void 0 : obj.d) ? 'add' : 'remove']('clickable');
1642
1646
  state.hoverObj = obj;
1643
1647
  }
1644
1648
  doRedraw && refreshShadowCanvas();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "force-graph",
3
- "version": "1.50.0",
3
+ "version": "1.51.0",
4
4
  "description": "2D force-directed graph rendered on HTML5 canvas",
5
5
  "type": "module",
6
6
  "unpkg": "dist/force-graph.min.js",
@@ -65,18 +65,18 @@
65
65
  "lodash-es": "4"
66
66
  },
67
67
  "devDependencies": {
68
- "@babel/core": "^7.28.0",
69
- "@babel/preset-env": "^7.28.0",
68
+ "@babel/core": "^7.28.4",
69
+ "@babel/preset-env": "^7.28.3",
70
70
  "@rollup/plugin-babel": "^6.0.4",
71
71
  "@rollup/plugin-commonjs": "^28.0.6",
72
72
  "@rollup/plugin-node-resolve": "^16.0.1",
73
73
  "@rollup/plugin-terser": "^0.4.4",
74
74
  "postcss": "^8.5.6",
75
75
  "rimraf": "^6.0.1",
76
- "rollup": "^4.44.1",
77
- "rollup-plugin-dts": "^6.2.1",
76
+ "rollup": "^4.50.0",
77
+ "rollup-plugin-dts": "^6.2.3",
78
78
  "rollup-plugin-postcss": "^4.0.2",
79
- "typescript": "^5.8.3"
79
+ "typescript": "^5.9.2"
80
80
  },
81
81
  "engines": {
82
82
  "node": ">=12"
@@ -185,6 +185,7 @@ export default Kapsule({
185
185
  onLinkHover: { triggerUpdate: false },
186
186
  onBackgroundClick: { triggerUpdate: false },
187
187
  onBackgroundRightClick: { triggerUpdate: false },
188
+ showPointerCursor: { default: true, triggerUpdate: false },
188
189
  onZoom: { triggerUpdate: false },
189
190
  onZoomEnd: { triggerUpdate: false },
190
191
  onRenderFramePre: { triggerUpdate: false },
@@ -528,7 +529,7 @@ export default Kapsule({
528
529
  !state.isPointerDragging && ev.type === 'pointermove'
529
530
  && (state.onBackgroundClick) // only bother detecting drags this way if background clicks are enabled (so they don't trigger accidentally on canvas panning)
530
531
  && (ev.pressure > 0 || state.isPointerPressed) // ev.pressure always 0 on Safari, so we use the isPointerPressed tracker
531
- && (ev.pointerType !== 'touch' || ev.movementX === undefined || [ev.movementX, ev.movementY].some(m => Math.abs(m) > 1)) // relax drag trigger sensitivity on touch events
532
+ && (ev.pointerType === 'mouse' || ev.movementX === undefined || [ev.movementX, ev.movementY].some(m => Math.abs(m) > 1)) // relax drag trigger sensitivity on non-mouse (touch/pen) events
532
533
  && (state.isPointerDragging = true);
533
534
 
534
535
  // update the pointer pos
@@ -634,7 +635,8 @@ export default Kapsule({
634
635
 
635
636
  // set pointer if hovered object is clickable
636
637
  state.canvas.classList[
637
- ((obj && state[`on${objType}Click`]) || (!obj && state.onBackgroundClick)) ? 'add' : 'remove'
638
+ ((obj && state[`on${objType}Click`]) || (!obj && state.onBackgroundClick)) &&
639
+ accessorFn(state.showPointerCursor)(obj?.d) ? 'add' : 'remove'
638
640
  ]('clickable');
639
641
 
640
642
  state.hoverObj = obj;
package/src/index.d.ts CHANGED
@@ -180,6 +180,8 @@ export declare class ForceGraphGeneric<ChainableInstance, N extends NodeObject =
180
180
  linkHoverPrecision(precision: number): ChainableInstance;
181
181
  onBackgroundClick(callback: (event: MouseEvent) => void): ChainableInstance;
182
182
  onBackgroundRightClick(callback: (event: MouseEvent) => void): ChainableInstance;
183
+ showPointerCursor(): Accessor<N | L | undefined, boolean>;
184
+ showPointerCursor(objAccessor: Accessor<N | L | undefined, boolean>): ChainableInstance;
183
185
  onZoom(callback: (transform: {k: number, x: number, y: number}) => void): ChainableInstance;
184
186
  onZoomEnd(callback: (transform: {k: number, x: number, y: number}) => void): ChainableInstance;
185
187
  enableNodeDrag(): boolean;