0.6.1 • Published 1 month ago
bot-flow-editor v0.6.1
Design
export type Event<T = any, D = any> = {
type: string;
target: T;
data: D;
};
export interface Point {
x: number;
y: number;
}
export interface Size {
width: number;
height: number;
}
export interface Distance {
dx: number;
dy: number;
}
export type NodeEvent<D> = Event<ActionNode, D>;
export type EditorEvent<D> = Event<FlowEditor, D>;
export interface ActionNodePort {
readonly index: number;
readonly actionNode: ActionNode;
}
export class ActionNode {
readonly x: number;
readonly y: number;
readonly width: number;
readonly selected: boolean;
height: number;
getPort(index: number): Point[];
draw(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
copy(options: { dx: number; dy: number }): ActionNode;
}
interface NodeGraph<TNode = unknown> {
nodes: Iterable<TNode>;
getNextNodes(node: TNode): Iterable<TNode>;
}
export interface FlowEditor {
import(graph: NodeGraph<ActionNode>): void;
export(): NodeGraph<ActionNode>;
zoom(scale: number): void;
readonly zoomScale: number;
readonly hasMoreUndo: boolean;
readonly hasMoreRedo: boolean;
undo(): void;
redo(): void;
autoLayout(): void;
selectAll(): void;
// 3 cases:
// 1) port is not connected
// 2) port is already connected to another node, disconnect it first
// 3) port is connected to a new node, add node to the graph and connect it
connectTo(
fromNode: ActionNode,
fromNodePortIndex: number,
toNode: ActionNode,
): void;
addNode(node: ActionNode, pos: Point): void;
removeNode(node: ActionNode): void;
removeSelectedNodes(): void;
addNodePort(node: ActionNode, index?: number): void;
removeNodePort(node: ActionNode, index: number): void;
beginEditNode(): void;
endEditNode(): void;
onSelectNode(
callback: (e: NodeEvent<{ selectedNodes: ActionNode[] }>) => void,
): void;
onNewNode(
callback: (
e: EditorEvent<{
fromNode?: ActionNode;
fromPortIndex?: number;
x: number;
y: number;
}>,
) => void,
): void;
readonly isModified: boolean;
onIsModifiedChanged(
callback: (
e: EditorEvent<{
cmd:
| "undo"
| "redo"
| "zoom"
| "auto-layout"
| "select-all"
| "node-cmd"
| "edge-cmd";
}>,
) => void,
): void;
}
0.6.1
1 month ago
0.6.0
1 month ago
0.5.2
1 month ago
0.5.1
1 month ago
0.5.0
1 month ago
0.4.3
1 month ago
0.4.2
1 month ago
0.3.6
1 month ago
0.3.5
1 month ago
0.4.1
1 month ago
0.4.0
1 month ago
0.3.0
1 month ago
0.3.2
1 month ago
0.3.1
1 month ago
0.3.4
1 month ago
0.3.3
1 month ago
0.2.20
1 month ago
0.2.19
2 months ago
0.2.18
2 months ago
0.2.16
2 months ago
0.2.15
2 months ago
0.2.14
2 months ago
0.2.13
2 months ago
0.2.17
2 months ago
0.2.12
2 months ago
0.2.11
2 months ago
0.2.10
2 months ago
0.2.9
2 months ago
0.2.8
2 months ago
0.2.7
2 months ago
0.2.6
2 months ago
0.2.3
2 months ago
0.2.5
2 months ago
0.2.1
2 months ago
0.2.0
2 months ago
0.2.2
2 months ago
0.1.1
2 months ago
0.1.0
2 months ago