b9e42c3ef4
Build and Deploy / build-and-deploy (push) Has been cancelled
- lit-force-graph: Refactored for instance reuse, better lifecycle management, and added dynamic imports for AR/VR modes. - lit-html-table: Improved visual design, readability of headers, and fixed reactivity in editable mode. - lit-draggable-dom: Fixed clipping issues by switching to relative/absolute positioning and resolved a panning speed bug caused by CSS variable inheritance.
47 lines
828 B
TypeScript
47 lines
828 B
TypeScript
export class Graph {
|
|
private ids = new Set();
|
|
private graph: GraphData = {
|
|
nodes: [],
|
|
links: [],
|
|
};
|
|
|
|
addNode<T = any>(node: GraphNode<T>) {
|
|
if (this.ids.has(node.id)) {
|
|
return this.graph.nodes.find((n) => n.id === node.id)!;
|
|
}
|
|
this.ids.add(node.id);
|
|
this.graph.nodes.push(node);
|
|
return node;
|
|
}
|
|
|
|
addLink<T = any>(link: GraphLink<T>) {
|
|
this.graph.links.push(link);
|
|
return link;
|
|
}
|
|
|
|
toJSON() {
|
|
return this.graph;
|
|
}
|
|
}
|
|
|
|
export interface GraphNode<T = any> {
|
|
id: string;
|
|
name?: string;
|
|
group?: string;
|
|
value?: T;
|
|
}
|
|
|
|
export interface GraphLink<T = any> {
|
|
source: string;
|
|
target: string;
|
|
name?: string;
|
|
value?: T;
|
|
}
|
|
|
|
export interface GraphData<A = any, B = any> {
|
|
name?: string;
|
|
description?: string;
|
|
nodes: GraphNode<A>[];
|
|
links: GraphLink<B>[];
|
|
}
|