d3-graph-controller
Version:
A TypeScript library for visualizing and simulating directed, interactive graphs.
66 lines (65 loc) • 2.1 kB
text/typescript
import { NodeTypeToken } from '../model/graph.mjs';
import { GraphLink } from '../model/link.mjs';
import { GraphNode } from '../model/node.mjs';
/**
* Simulation force.
*/
export interface Force<Subject> {
/**
* Whether the force is enabled.
*/
readonly enabled: boolean;
/**
* The strength of the force.
* Can be a static number or a function receiving the force's subject and returning a number.
*/
readonly strength: number | ((subject: Subject) => number);
}
/**
* Simulation force applied to nodes.
*/
export type NodeForce<T extends NodeTypeToken, Node extends GraphNode<T>> = Force<Node>;
/**
* Collision force applied to nodes.
*/
export interface CollisionForce<T extends NodeTypeToken, Node extends GraphNode<T>> extends NodeForce<T, Node> {
/**
* Multiplier of the node radius.
* Tip: Large values can drastically reduce link intersection.
*/
readonly radiusMultiplier: number;
}
/**
* Simulation force applied to links.
*/
export interface LinkForce<T extends NodeTypeToken, Node extends GraphNode<T>, Link extends GraphLink<T, Node>> extends Force<Link> {
/**
* Define the length of a link for the simulation.
*/
readonly length: number | ((link: Link) => number);
}
/**
* Simulation force configuration.
*/
export interface SimulationForceConfig<T extends NodeTypeToken, Node extends GraphNode<T>, Link extends GraphLink<T, Node>> {
/**
* Centering force applied to nodes.
*/
readonly centering: false | NodeForce<T, Node>;
/**
* Charge force applied to nodes.
*/
readonly charge: false | NodeForce<T, Node>;
/**
* Collision force applied to nodes.
*/
readonly collision: false | CollisionForce<T, Node>;
/**
* Link force applied to links.
*/
readonly link: false | LinkForce<T, Node, Link>;
}
/**
* Create the default force configuration.
*/
export declare function createDefaultForceConfig<T extends NodeTypeToken, Node extends GraphNode<T>, Link extends GraphLink<T, Node>>(): SimulationForceConfig<T, Node, Link>;