force-graph 1.44.1 → 1.45.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/README.md +2 -2
- package/dist/force-graph.d.ts +2 -2
- package/dist/force-graph.js +17 -12
- package/dist/force-graph.js.map +1 -1
- package/dist/force-graph.min.js +2 -2
- package/dist/force-graph.mjs +16 -11
- package/package.json +1 -1
- package/src/canvas-force-graph.js +13 -13
- package/src/force-graph.js +3 -3
- package/src/index.d.ts +2 -2
package/dist/force-graph.mjs
CHANGED
|
@@ -824,7 +824,7 @@ var CanvasForceGraph = Kapsule({
|
|
|
824
824
|
// Main canvas object to manipulate
|
|
825
825
|
state.ctx = canvasCtx;
|
|
826
826
|
},
|
|
827
|
-
update: function update(state) {
|
|
827
|
+
update: function update(state, changedProps) {
|
|
828
828
|
state.engineRunning = false; // Pause simulation
|
|
829
829
|
state.onUpdate();
|
|
830
830
|
if (state.nodeAutoColorBy !== null) {
|
|
@@ -864,18 +864,23 @@ var CanvasForceGraph = Kapsule({
|
|
|
864
864
|
var maxDepth = Math.max.apply(Math, _toConsumableArray(Object.values(nodeDepths || [])));
|
|
865
865
|
var dagLevelDistance = state.dagLevelDistance || state.graphData.nodes.length / (maxDepth || 1) * DAG_LEVEL_NODE_RATIO * (['radialin', 'radialout'].indexOf(state.dagMode) !== -1 ? 0.7 : 1);
|
|
866
866
|
|
|
867
|
+
// Reset relevant fx/fy when swapping dag modes
|
|
868
|
+
if (['lr', 'rl', 'td', 'bu'].includes(changedProps.dagMode)) {
|
|
869
|
+
var resetProp = ['lr', 'rl'].includes(changedProps.dagMode) ? 'fx' : 'fy';
|
|
870
|
+
state.graphData.nodes.filter(state.dagNodeFilter).forEach(function (node) {
|
|
871
|
+
return delete node[resetProp];
|
|
872
|
+
});
|
|
873
|
+
}
|
|
874
|
+
|
|
867
875
|
// Fix nodes to x,y for dag mode
|
|
868
|
-
if (state.dagMode) {
|
|
869
|
-
var
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
};
|
|
876
|
+
if (['lr', 'rl', 'td', 'bu'].includes(state.dagMode)) {
|
|
877
|
+
var invert = ['rl', 'bu'].includes(state.dagMode);
|
|
878
|
+
var fixFn = function fixFn(node) {
|
|
879
|
+
return (nodeDepths[node[state.nodeId]] - maxDepth / 2) * dagLevelDistance * (invert ? -1 : 1);
|
|
873
880
|
};
|
|
874
|
-
var
|
|
875
|
-
var fyFn = getFFn(['td', 'bu'].indexOf(state.dagMode) !== -1, state.dagMode === 'bu');
|
|
881
|
+
var _resetProp = ['lr', 'rl'].includes(state.dagMode) ? 'fx' : 'fy';
|
|
876
882
|
state.graphData.nodes.filter(state.dagNodeFilter).forEach(function (node) {
|
|
877
|
-
node
|
|
878
|
-
node.fy = fyFn(node);
|
|
883
|
+
return node[_resetProp] = fixFn(node);
|
|
879
884
|
});
|
|
880
885
|
}
|
|
881
886
|
|
|
@@ -1460,7 +1465,7 @@ var forceGraph = Kapsule({
|
|
|
1460
1465
|
state.zoom.filter(function (ev) {
|
|
1461
1466
|
return (
|
|
1462
1467
|
// disable zoom interaction
|
|
1463
|
-
!ev.button && state.enableZoomPanInteraction && (
|
|
1468
|
+
!ev.button && state.enableZoomPanInteraction && (ev.type !== 'wheel' || accessorFn(state.enableZoomInteraction)(ev)) && (ev.type === 'wheel' || accessorFn(state.enablePanInteraction)(ev))
|
|
1464
1469
|
);
|
|
1465
1470
|
}).on('zoom', function (ev) {
|
|
1466
1471
|
var t = ev.transform;
|
package/package.json
CHANGED
|
@@ -462,7 +462,7 @@ export default Kapsule({
|
|
|
462
462
|
state.ctx = canvasCtx;
|
|
463
463
|
},
|
|
464
464
|
|
|
465
|
-
update(state) {
|
|
465
|
+
update(state, changedProps) {
|
|
466
466
|
state.engineRunning = false; // Pause simulation
|
|
467
467
|
state.onUpdate();
|
|
468
468
|
|
|
@@ -510,19 +510,19 @@ export default Kapsule({
|
|
|
510
510
|
* (['radialin', 'radialout'].indexOf(state.dagMode) !== -1 ? 0.7 : 1)
|
|
511
511
|
);
|
|
512
512
|
|
|
513
|
+
// Reset relevant fx/fy when swapping dag modes
|
|
514
|
+
if (['lr', 'rl', 'td', 'bu'].includes(changedProps.dagMode)) {
|
|
515
|
+
const resetProp = ['lr', 'rl'].includes(changedProps.dagMode) ? 'fx' : 'fy';
|
|
516
|
+
state.graphData.nodes.filter(state.dagNodeFilter).forEach(node => delete node[resetProp]);
|
|
517
|
+
}
|
|
518
|
+
|
|
513
519
|
// Fix nodes to x,y for dag mode
|
|
514
|
-
if (state.dagMode) {
|
|
515
|
-
const
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
const fyFn = getFFn(['td', 'bu'].indexOf(state.dagMode) !== -1, state.dagMode === 'bu');
|
|
521
|
-
|
|
522
|
-
state.graphData.nodes.filter(state.dagNodeFilter).forEach(node => {
|
|
523
|
-
node.fx = fxFn(node);
|
|
524
|
-
node.fy = fyFn(node);
|
|
525
|
-
});
|
|
520
|
+
if (['lr', 'rl', 'td', 'bu'].includes(state.dagMode)) {
|
|
521
|
+
const invert = ['rl', 'bu'].includes(state.dagMode);
|
|
522
|
+
const fixFn = node => (nodeDepths[node[state.nodeId]] - maxDepth / 2) * dagLevelDistance * (invert ? -1 : 1);
|
|
523
|
+
|
|
524
|
+
const resetProp = ['lr', 'rl'].includes(state.dagMode) ? 'fx' : 'fy';
|
|
525
|
+
state.graphData.nodes.filter(state.dagNodeFilter).forEach(node => node[resetProp] = fixFn(node));
|
|
526
526
|
}
|
|
527
527
|
|
|
528
528
|
// Use radial force for radial dags
|
package/src/force-graph.js
CHANGED
|
@@ -467,9 +467,9 @@ export default Kapsule({
|
|
|
467
467
|
.filter(ev =>
|
|
468
468
|
// disable zoom interaction
|
|
469
469
|
!ev.button
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
470
|
+
&& state.enableZoomPanInteraction
|
|
471
|
+
&& (ev.type !== 'wheel' || accessorFn(state.enableZoomInteraction)(ev))
|
|
472
|
+
&& (ev.type === 'wheel' || accessorFn(state.enablePanInteraction)(ev))
|
|
473
473
|
)
|
|
474
474
|
.on('zoom', ev => {
|
|
475
475
|
const t = ev.transform;
|
package/src/index.d.ts
CHANGED
|
@@ -177,9 +177,9 @@ export interface ForceGraphGenericInstance<ChainableInstance> {
|
|
|
177
177
|
enableNodeDrag(): boolean;
|
|
178
178
|
enableNodeDrag(enable: boolean): ChainableInstance;
|
|
179
179
|
enableZoomInteraction(): boolean;
|
|
180
|
-
enableZoomInteraction(enable: boolean): ChainableInstance;
|
|
180
|
+
enableZoomInteraction(enable: boolean | ((event: MouseEvent) => boolean)): ChainableInstance;
|
|
181
181
|
enablePanInteraction(): boolean;
|
|
182
|
-
enablePanInteraction(enable: boolean): ChainableInstance;
|
|
182
|
+
enablePanInteraction(enable: boolean | ((event: MouseEvent) => boolean)): ChainableInstance;
|
|
183
183
|
enablePointerInteraction(): boolean;
|
|
184
184
|
enablePointerInteraction(enable?: boolean): ChainableInstance;
|
|
185
185
|
|