@cnvx/nodal
Version:
A Svelte 5 library for creating interactive node diagrams with customizable connections and layouts
45 lines (44 loc) • 1.25 kB
TypeScript
import { type Snippet } from "svelte";
import { SvelteMap } from "svelte/reactivity";
import { type Vector2 } from "./diagram-lib.js";
export interface DiagramNodeDef {
id: string;
x: number;
y: number;
width?: number;
height?: number;
clientOnly?: boolean;
}
type PathGenParams = {
pathGen?: "bezier";
curvature?: number;
offset?: Vector2;
} | {
pathGen: "smoothstep";
borderRadius?: number;
center?: Vector2;
};
export type DiagramEdgeParams = {
snippet?: Snippet<[edge: DiagramEdgeDef, path: string, extra: any]>;
snippetExtraArg?: any;
sourceAnchor?: Vector2;
targetAnchor?: Vector2;
class?: string;
style?: string;
zIndex?: number;
} & PathGenParams;
export type DiagramEdgeDef = {
source: string;
target: string;
} & DiagramEdgeParams;
export type DiagramProps = {
nodes: SvelteMap<string, DiagramNodeDef>;
edges: SvelteMap<string, DiagramEdgeDef>;
children: Snippet;
scaleToFit?: boolean;
};
declare const Diagram: import("svelte").Component<DiagramProps, {
generateCurvePath: (x1: number, y1: number, x2: number, y2: number, edge: DiagramEdgeDef) => string;
}, "">;
type Diagram = ReturnType<typeof Diagram>;
export default Diagram;