ngx-vflow 0.9.0 → 0.10.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/esm2022/lib/vflow/components/custom-node-base/custom-node-base.component.mjs +48 -0
- package/esm2022/lib/vflow/components/node/node.component.mjs +13 -12
- package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +1 -1
- package/esm2022/lib/vflow/interfaces/component-node-event.interface.mjs +1 -1
- package/esm2022/lib/vflow/interfaces/node.interface.mjs +27 -2
- package/esm2022/lib/vflow/models/node.model.mjs +65 -16
- package/esm2022/lib/vflow/public-components/custom-dynamic-node.component.mjs +19 -0
- package/esm2022/lib/vflow/public-components/custom-node.component.mjs +9 -41
- package/esm2022/lib/vflow/services/draggable.service.mjs +14 -8
- package/esm2022/lib/vflow/services/node-changes.service.mjs +7 -4
- package/esm2022/lib/vflow/utils/reference-keeper.mjs +1 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ngx-vflow.mjs +154 -42
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/custom-node-base/custom-node-base.component.d.ts +21 -0
- package/lib/vflow/components/vflow/vflow.component.d.ts +4 -4
- package/lib/vflow/interfaces/component-node-event.interface.d.ts +2 -1
- package/lib/vflow/interfaces/node.interface.d.ts +34 -5
- package/lib/vflow/models/node.model.d.ts +22 -22
- package/lib/vflow/public-components/custom-dynamic-node.component.d.ts +13 -0
- package/lib/vflow/public-components/custom-node.component.d.ts +6 -13
- package/lib/vflow/services/draggable.service.d.ts +9 -3
- package/lib/vflow/services/node-changes.service.d.ts +1 -4
- package/lib/vflow/utils/reference-keeper.d.ts +2 -2
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DestroyRef, OnInit } from "@angular/core";
|
|
2
|
+
import { ComponentDynamicNode, ComponentNode } from "../../interfaces/node.interface";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare abstract class CustomNodeBaseComponent<T = unknown> implements OnInit {
|
|
5
|
+
private eventBus;
|
|
6
|
+
protected destroyRef: DestroyRef;
|
|
7
|
+
/**
|
|
8
|
+
* Reference to node bound to this component
|
|
9
|
+
*/
|
|
10
|
+
protected node: ComponentNode | ComponentDynamicNode;
|
|
11
|
+
set _selected(value: boolean);
|
|
12
|
+
/**
|
|
13
|
+
* Signal with selected state of node
|
|
14
|
+
*/
|
|
15
|
+
selected: import("@angular/core").WritableSignal<boolean>;
|
|
16
|
+
data: import("@angular/core").WritableSignal<T | undefined>;
|
|
17
|
+
ngOnInit(): void;
|
|
18
|
+
private trackEvents;
|
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CustomNodeBaseComponent<any>, never>;
|
|
20
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CustomNodeBaseComponent<any>, never, never, { "_selected": { "alias": "_selected"; "required": false; }; }, {}, never, never, false, never>;
|
|
21
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Signal } from '@angular/core';
|
|
2
|
-
import { Node } from '../../interfaces/node.interface';
|
|
2
|
+
import { DynamicNode, Node } from '../../interfaces/node.interface';
|
|
3
3
|
import { MapContextDirective } from '../../directives/map-context.directive';
|
|
4
4
|
import { NodeModel } from '../../models/node.model';
|
|
5
5
|
import { Edge } from '../../interfaces/edge.interface';
|
|
@@ -73,7 +73,7 @@ export declare class VflowComponent {
|
|
|
73
73
|
/**
|
|
74
74
|
* Nodes to render
|
|
75
75
|
*/
|
|
76
|
-
set nodes(newNodes: Node[]);
|
|
76
|
+
set nodes(newNodes: Node[] | DynamicNode[]);
|
|
77
77
|
protected nodeModels: Signal<NodeModel<unknown>[]>;
|
|
78
78
|
/**
|
|
79
79
|
* Edges to render
|
|
@@ -141,7 +141,7 @@ export declare class VflowComponent {
|
|
|
141
141
|
*
|
|
142
142
|
* @param id node id
|
|
143
143
|
*/
|
|
144
|
-
getNode<T = unknown>(id: string): Node<T> | undefined;
|
|
144
|
+
getNode<T = unknown>(id: string): Node<T> | DynamicNode<T> | undefined;
|
|
145
145
|
/**
|
|
146
146
|
* Sync method to get detached edges
|
|
147
147
|
*/
|
|
@@ -150,7 +150,7 @@ export declare class VflowComponent {
|
|
|
150
150
|
* Convert point received from document to point on the flow
|
|
151
151
|
*/
|
|
152
152
|
documentPointToFlowPoint(point: Point): Point;
|
|
153
|
-
protected trackNodes(idx: number, { node }: NodeModel): Node<unknown>;
|
|
153
|
+
protected trackNodes(idx: number, { node }: NodeModel): Node<unknown> | DynamicNode<unknown>;
|
|
154
154
|
protected trackEdges(idx: number, { edge }: EdgeModel): Edge<unknown>;
|
|
155
155
|
static ɵfac: i0.ɵɵFactoryDeclaration<VflowComponent, never>;
|
|
156
156
|
static ɵcmp: i0.ɵɵComponentDeclaration<VflowComponent, "vflow", never, { "view": { "alias": "view"; "required": false; }; "minZoom": { "alias": "minZoom"; "required": false; }; "maxZoom": { "alias": "maxZoom"; "required": false; }; "handlePositions": { "alias": "handlePositions"; "required": false; }; "background": { "alias": "background"; "required": false; }; "entitiesSelectable": { "alias": "entitiesSelectable"; "required": false; }; "connection": { "alias": "connection"; "required": false; }; "nodes": { "alias": "nodes"; "required": true; }; "edges": { "alias": "edges"; "required": false; }; }, { "onComponentNodeEvent": "onComponentNodeEvent"; }, ["nodeHtmlDirective", "edgeTemplateDirective", "edgeLabelHtmlDirective", "connectionTemplateDirective"], never, false, [{ directive: typeof i1.ConnectionControllerDirective; inputs: {}; outputs: { "onConnect": "onConnect"; }; }, { directive: typeof i2.ChangesControllerDirective; inputs: {}; outputs: { "onNodesChange": "onNodesChange"; "onNodesChange.position": "onNodesChange.position"; "onNodesChange.position.single": "onNodesChange.position.single"; "onNodesChange.position.many": "onNodesChange.position.many"; "onNodesChange.add": "onNodesChange.add"; "onNodesChange.add.single": "onNodesChange.add.single"; "onNodesChange.add.many": "onNodesChange.add.many"; "onNodesChange.remove": "onNodesChange.remove"; "onNodesChange.remove.single": "onNodesChange.remove.single"; "onNodesChange.remove.many": "onNodesChange.remove.many"; "onNodesChange.select": "onNodesChange.select"; "onNodesChange.select.single": "onNodesChange.select.single"; "onNodesChange.select.many": "onNodesChange.select.many"; "onEdgesChange": "onEdgesChange"; "onEdgesChange.detached": "onEdgesChange.detached"; "onEdgesChange.detached.single": "onEdgesChange.detached.single"; "onEdgesChange.detached.many": "onEdgesChange.detached.many"; "onEdgesChange.add": "onEdgesChange.add"; "onEdgesChange.add.single": "onEdgesChange.add.single"; "onEdgesChange.add.many": "onEdgesChange.add.many"; "onEdgesChange.remove": "onEdgesChange.remove"; "onEdgesChange.remove.single": "onEdgesChange.remove.single"; "onEdgesChange.remove.many": "onEdgesChange.remove.many"; "onEdgesChange.select": "onEdgesChange.select"; "onEdgesChange.select.single": "onEdgesChange.select.single"; "onEdgesChange.select.many": "onEdgesChange.select.many"; }; }]>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from "@angular/core";
|
|
2
2
|
import { CustomNodeComponent } from "../public-components/custom-node.component";
|
|
3
|
+
import { CustomDynamicNodeComponent } from "../public-components/custom-dynamic-node.component";
|
|
3
4
|
type EventInfo<T> = T extends EventEmitter<infer U> ? U : never;
|
|
4
5
|
type EventKeys<T> = {
|
|
5
6
|
[K in keyof T]: T[K] extends EventEmitter<any> ? K : never;
|
|
@@ -19,7 +20,7 @@ type EventsFromComponent<T> = EventShape<T, EventKeys<T>>;
|
|
|
19
20
|
*
|
|
20
21
|
* @experimental
|
|
21
22
|
*/
|
|
22
|
-
export type ComponentNodeEvent<T extends CustomNodeComponent[]> = {
|
|
23
|
+
export type ComponentNodeEvent<T extends (CustomNodeComponent | CustomDynamicNodeComponent)[]> = {
|
|
23
24
|
nodeId: string;
|
|
24
25
|
} & {
|
|
25
26
|
[I in keyof T]: EventsFromComponent<T[I]>;
|
|
@@ -1,23 +1,52 @@
|
|
|
1
|
-
import { Type } from "@angular/core";
|
|
1
|
+
import { Type, WritableSignal } from "@angular/core";
|
|
2
2
|
import { Point } from "./point.interface";
|
|
3
3
|
import { CustomNodeComponent } from "../public-components/custom-node.component";
|
|
4
|
-
|
|
4
|
+
import { CustomDynamicNodeComponent } from "../public-components/custom-dynamic-node.component";
|
|
5
|
+
export type Node<T = unknown> = DefaultNode | HtmlTemplateNode<T> | ComponentNode<T>;
|
|
6
|
+
export type DynamicNode<T = unknown> = DefaultDynamicNode | HtmlTemplateDynamicNode<T> | ComponentDynamicNode<T>;
|
|
5
7
|
export interface SharedNode {
|
|
6
8
|
id: string;
|
|
7
9
|
point: Point;
|
|
8
10
|
draggable?: boolean;
|
|
9
11
|
}
|
|
10
|
-
export interface
|
|
12
|
+
export interface SharedDynamicNode {
|
|
13
|
+
id: string;
|
|
14
|
+
point: WritableSignal<Point>;
|
|
15
|
+
draggable?: WritableSignal<boolean>;
|
|
16
|
+
}
|
|
17
|
+
export interface DefaultNode extends SharedNode {
|
|
11
18
|
type: 'default';
|
|
12
19
|
text?: string;
|
|
13
20
|
width?: number;
|
|
14
21
|
height?: number;
|
|
15
22
|
}
|
|
16
|
-
export interface
|
|
23
|
+
export interface DefaultDynamicNode extends SharedDynamicNode {
|
|
24
|
+
type: 'default';
|
|
25
|
+
text?: WritableSignal<string>;
|
|
26
|
+
width?: WritableSignal<number>;
|
|
27
|
+
height?: WritableSignal<number>;
|
|
28
|
+
}
|
|
29
|
+
export interface HtmlTemplateNode<T = unknown> extends SharedNode {
|
|
17
30
|
type: 'html-template';
|
|
18
31
|
data?: T;
|
|
19
32
|
}
|
|
20
|
-
export interface
|
|
33
|
+
export interface HtmlTemplateDynamicNode<T = unknown> extends SharedDynamicNode {
|
|
34
|
+
type: 'html-template';
|
|
35
|
+
data?: WritableSignal<T>;
|
|
36
|
+
}
|
|
37
|
+
export interface ComponentNode<T = unknown> extends SharedNode {
|
|
21
38
|
type: Type<CustomNodeComponent<T>>;
|
|
22
39
|
data?: T;
|
|
23
40
|
}
|
|
41
|
+
export interface ComponentDynamicNode<T = unknown> extends SharedDynamicNode {
|
|
42
|
+
type: Type<CustomDynamicNodeComponent<T>>;
|
|
43
|
+
data?: WritableSignal<T>;
|
|
44
|
+
}
|
|
45
|
+
export declare function isStaticNode<T>(node: Node | DynamicNode): node is Node<T>;
|
|
46
|
+
export declare function isDynamicNode<T>(node: Node | DynamicNode): node is DynamicNode<T>;
|
|
47
|
+
export declare function isComponentStaticNode<T>(node: Node): node is ComponentNode<T>;
|
|
48
|
+
export declare function isComponentDynamicNode<T>(node: DynamicNode): node is ComponentDynamicNode<T>;
|
|
49
|
+
export declare function isTemplateStaticNode<T>(node: Node): node is HtmlTemplateNode<T>;
|
|
50
|
+
export declare function isTemplateDynamicNode<T>(node: DynamicNode): node is HtmlTemplateDynamicNode<T>;
|
|
51
|
+
export declare function isDefaultStaticNode(node: Node): node is DefaultNode;
|
|
52
|
+
export declare function isDefaultDynamicNode(node: DynamicNode): node is DefaultDynamicNode;
|
|
@@ -1,24 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Signal } from '@angular/core';
|
|
2
|
+
import { DynamicNode, Node } from '../interfaces/node.interface';
|
|
2
3
|
import { HandleModel } from './handle.model';
|
|
3
4
|
import { FlowEntity } from '../interfaces/flow-entity.interface';
|
|
4
5
|
import { Point } from '../interfaces/point.interface';
|
|
5
6
|
export declare class NodeModel<T = unknown> implements FlowEntity {
|
|
6
|
-
node: Node<T>;
|
|
7
|
-
static
|
|
8
|
-
|
|
9
|
-
height: number;
|
|
10
|
-
};
|
|
7
|
+
node: Node<T> | DynamicNode<T>;
|
|
8
|
+
private static defaultWidth;
|
|
9
|
+
private static defaultHeight;
|
|
11
10
|
private flowSettingsService;
|
|
12
|
-
private internalPoint
|
|
11
|
+
private internalPoint;
|
|
13
12
|
private throttledPoint$;
|
|
14
|
-
point:
|
|
15
|
-
|
|
16
|
-
y: number;
|
|
17
|
-
}>;
|
|
18
|
-
point$: import("rxjs").Observable<{
|
|
19
|
-
x: number;
|
|
20
|
-
y: number;
|
|
21
|
-
}>;
|
|
13
|
+
point: Signal<Point>;
|
|
14
|
+
point$: import("rxjs").Observable<Point>;
|
|
22
15
|
size: import("@angular/core").WritableSignal<{
|
|
23
16
|
width: number;
|
|
24
17
|
height: number;
|
|
@@ -26,18 +19,25 @@ export declare class NodeModel<T = unknown> implements FlowEntity {
|
|
|
26
19
|
renderOrder: import("@angular/core").WritableSignal<number>;
|
|
27
20
|
selected: import("@angular/core").WritableSignal<boolean>;
|
|
28
21
|
selected$: import("rxjs").Observable<boolean>;
|
|
29
|
-
pointTransform:
|
|
30
|
-
sourcePosition:
|
|
31
|
-
targetPosition:
|
|
22
|
+
pointTransform: Signal<string>;
|
|
23
|
+
sourcePosition: Signal<import("ngx-vflow").Position>;
|
|
24
|
+
targetPosition: Signal<import("ngx-vflow").Position>;
|
|
32
25
|
handles: import("@angular/core").WritableSignal<HandleModel[]>;
|
|
33
26
|
handles$: import("rxjs").Observable<HandleModel[]>;
|
|
34
|
-
draggable: boolean
|
|
27
|
+
draggable: import("@angular/core").WritableSignal<boolean>;
|
|
35
28
|
readonly magnetRadius = 20;
|
|
36
29
|
isComponentType: boolean;
|
|
37
|
-
|
|
38
|
-
|
|
30
|
+
text: Signal<string>;
|
|
31
|
+
componentTypeInputs: Signal<{
|
|
32
|
+
node: Node<T> | DynamicNode<T>;
|
|
39
33
|
_selected: boolean;
|
|
40
34
|
}>;
|
|
41
|
-
constructor(node: Node<T>);
|
|
35
|
+
constructor(node: Node<T> | DynamicNode<T>);
|
|
42
36
|
setPoint(point: Point): void;
|
|
37
|
+
/**
|
|
38
|
+
* TODO find the way to implement this better
|
|
39
|
+
*/
|
|
40
|
+
linkDefaultNodeSizeWithModelSize(): void;
|
|
41
|
+
private createTextSignal;
|
|
42
|
+
private createInternalPointSignal;
|
|
43
43
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { OnInit } from "@angular/core";
|
|
2
|
+
import { ComponentDynamicNode } from '../interfaces/node.interface';
|
|
3
|
+
import { CustomNodeBaseComponent } from "../components/custom-node-base/custom-node-base.component";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare abstract class CustomDynamicNodeComponent<T = unknown> extends CustomNodeBaseComponent<T> implements OnInit {
|
|
6
|
+
/**
|
|
7
|
+
* Reference to node bound to this component
|
|
8
|
+
*/
|
|
9
|
+
node: ComponentDynamicNode<T>;
|
|
10
|
+
ngOnInit(): void;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CustomDynamicNodeComponent<any>, never>;
|
|
12
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CustomDynamicNodeComponent<any>, never, never, { "node": { "alias": "node"; "required": false; }; }, {}, never, never, false, never>;
|
|
13
|
+
}
|
|
@@ -1,20 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ComponentNode
|
|
1
|
+
import { OnInit } from "@angular/core";
|
|
2
|
+
import { ComponentNode } from '../interfaces/node.interface';
|
|
3
|
+
import { CustomNodeBaseComponent } from "../components/custom-node-base/custom-node-base.component";
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare abstract class CustomNodeComponent<T = unknown> implements OnInit {
|
|
5
|
-
private eventBus;
|
|
6
|
-
protected destroyRef: DestroyRef;
|
|
5
|
+
export declare abstract class CustomNodeComponent<T = unknown> extends CustomNodeBaseComponent<T> implements OnInit {
|
|
7
6
|
/**
|
|
8
7
|
* Reference to node bound to this component
|
|
9
8
|
*/
|
|
10
|
-
node:
|
|
11
|
-
set _selected(value: boolean);
|
|
12
|
-
/**
|
|
13
|
-
* Signal with selected state of node
|
|
14
|
-
*/
|
|
15
|
-
selected: import("@angular/core").WritableSignal<boolean>;
|
|
9
|
+
node: ComponentNode<T>;
|
|
16
10
|
ngOnInit(): void;
|
|
17
|
-
private trackEvents;
|
|
18
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<CustomNodeComponent<any>, never>;
|
|
19
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CustomNodeComponent<any>, never, never, { "node": { "alias": "node"; "required": false; };
|
|
12
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CustomNodeComponent<any>, never, never, { "node": { "alias": "node"; "required": false; }; }, {}, never, never, false, never>;
|
|
20
13
|
}
|
|
@@ -2,13 +2,19 @@ import { NodeModel } from '../models/node.model';
|
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export declare class DraggableService {
|
|
4
4
|
/**
|
|
5
|
-
* Enable
|
|
6
|
-
* model contains draggable flag which declares if draggable should be enabled or not
|
|
5
|
+
* Enable draggable behavior for element.
|
|
7
6
|
*
|
|
8
7
|
* @param element target element for toggling draggable
|
|
9
8
|
* @param model model with data for this element
|
|
10
9
|
*/
|
|
11
|
-
|
|
10
|
+
enable(element: Element, model: NodeModel): void;
|
|
11
|
+
/**
|
|
12
|
+
* Disable draggable behavior for element.
|
|
13
|
+
*
|
|
14
|
+
* @param element target element for toggling draggable
|
|
15
|
+
* @param model model with data for this element
|
|
16
|
+
*/
|
|
17
|
+
disable(element: Element): void;
|
|
12
18
|
/**
|
|
13
19
|
* TODO: not shure if this work, need to check
|
|
14
20
|
*
|
|
@@ -7,10 +7,7 @@ export declare class NodesChangeService {
|
|
|
7
7
|
protected nodesPositionChange$: Observable<{
|
|
8
8
|
type: "position";
|
|
9
9
|
id: string;
|
|
10
|
-
point:
|
|
11
|
-
x: number;
|
|
12
|
-
y: number;
|
|
13
|
-
};
|
|
10
|
+
point: import("ngx-vflow").Point;
|
|
14
11
|
}[]>;
|
|
15
12
|
protected nodeAddChange$: Observable<{
|
|
16
13
|
type: "add";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { NodeModel } from "../models/node.model";
|
|
2
|
-
import { Node } from '../interfaces/node.interface';
|
|
2
|
+
import { DynamicNode, Node } from '../interfaces/node.interface';
|
|
3
3
|
import { EdgeModel } from "../models/edge.model";
|
|
4
4
|
import { Edge } from "../interfaces/edge.interface";
|
|
5
5
|
export declare class ReferenceKeeper {
|
|
6
6
|
/**
|
|
7
7
|
* Create new models for new node references and keep old models for old node references
|
|
8
8
|
*/
|
|
9
|
-
static nodes(newNodes: Node[], oldNodeModels: NodeModel[]): NodeModel<unknown>[];
|
|
9
|
+
static nodes(newNodes: Node[] | DynamicNode[], oldNodeModels: NodeModel[]): NodeModel<unknown>[];
|
|
10
10
|
/**
|
|
11
11
|
* Create new models for new edge references and keep old models for old edge references
|
|
12
12
|
*/
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export * from './lib/vflow/types/connection-mode.type';
|
|
|
19
19
|
export * from './lib/vflow/components/vflow/vflow.component';
|
|
20
20
|
export * from './lib/vflow/components/handle/handle.component';
|
|
21
21
|
export * from './lib/vflow/public-components/custom-node.component';
|
|
22
|
+
export * from './lib/vflow/public-components/custom-dynamic-node.component';
|
|
22
23
|
export * from './lib/vflow/directives/template.directive';
|
|
23
24
|
export * from './lib/vflow/directives/connection-controller.directive';
|
|
24
25
|
export * from './lib/vflow/directives/changes-controller.directive';
|