ngx-vflow 1.4.2 → 1.6.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/connection/connection.component.mjs +4 -3
- package/esm2022/lib/vflow/components/edge/edge.component.mjs +29 -26
- package/esm2022/lib/vflow/components/edge-label/edge-label.component.mjs +2 -1
- package/esm2022/lib/vflow/components/node/node.component.mjs +6 -4
- package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +15 -3
- package/esm2022/lib/vflow/directives/connection-controller.directive.mjs +55 -37
- package/esm2022/lib/vflow/directives/root-svg-context.directive.mjs +2 -2
- package/esm2022/lib/vflow/directives/selectable.directive.mjs +14 -11
- package/esm2022/lib/vflow/directives/template.directive.mjs +16 -1
- package/esm2022/lib/vflow/interfaces/connection.interface.mjs +1 -1
- package/esm2022/lib/vflow/interfaces/contextable.interface.mjs +2 -0
- package/esm2022/lib/vflow/interfaces/edge.interface.mjs +1 -1
- package/esm2022/lib/vflow/interfaces/template-context.interface.mjs +1 -1
- package/esm2022/lib/vflow/models/edge.model.mjs +50 -23
- package/esm2022/lib/vflow/models/node.model.mjs +22 -1
- package/esm2022/lib/vflow/public-components/custom-template-edge/custom-template-edge.component.mjs +29 -0
- package/esm2022/lib/vflow/services/edge-rendering.service.mjs +28 -0
- package/esm2022/lib/vflow/services/flow-settings.service.mjs +2 -1
- package/esm2022/lib/vflow/services/flow-status.service.mjs +13 -1
- package/esm2022/lib/vflow/testing-utils/component-mocks/vflow-mock.component.mjs +4 -2
- package/esm2022/lib/vflow/testing-utils/directive-mocks/connection-controller-mock.directive.mjs +6 -2
- package/esm2022/lib/vflow/vflow.mjs +3 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ngx-vflow.mjs +358 -193
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/connection/connection.component.d.ts +2 -6
- package/lib/vflow/components/edge/edge.component.d.ts +10 -7
- package/lib/vflow/components/edge-label/edge-label.component.d.ts +2 -6
- package/lib/vflow/components/vflow/vflow.component.d.ts +6 -1
- package/lib/vflow/directives/connection-controller.directive.d.ts +5 -2
- package/lib/vflow/directives/selectable.directive.d.ts +4 -1
- package/lib/vflow/directives/template.directive.d.ts +6 -1
- package/lib/vflow/interfaces/connection.interface.d.ts +5 -0
- package/lib/vflow/interfaces/contextable.interface.d.ts +5 -0
- package/lib/vflow/interfaces/edge.interface.d.ts +1 -0
- package/lib/vflow/interfaces/template-context.interface.d.ts +37 -1
- package/lib/vflow/models/edge.model.d.ts +24 -1
- package/lib/vflow/models/node.model.d.ts +8 -1
- package/lib/vflow/public-components/custom-template-edge/custom-template-edge.component.d.ts +17 -0
- package/lib/vflow/services/edge-rendering.service.d.ts +10 -0
- package/lib/vflow/services/flow-settings.service.d.ts +1 -0
- package/lib/vflow/services/flow-status.service.d.ts +24 -1
- package/lib/vflow/testing-utils/component-mocks/vflow-mock.component.d.ts +2 -1
- package/lib/vflow/testing-utils/directive-mocks/connection-controller-mock.directive.d.ts +4 -2
- package/lib/vflow/vflow.d.ts +2 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { TemplateRef } from '@angular/core';
|
|
2
2
|
import { ConnectionModel } from '../../models/connection.model';
|
|
3
|
+
import { ConnectionContext } from '../../interfaces/template-context.interface';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export declare class ConnectionComponent {
|
|
5
6
|
model: import("@angular/core").InputSignal<ConnectionModel>;
|
|
@@ -9,12 +10,7 @@ export declare class ConnectionComponent {
|
|
|
9
10
|
protected path: import("@angular/core").Signal<string | null>;
|
|
10
11
|
protected markerUrl: import("@angular/core").Signal<string>;
|
|
11
12
|
protected readonly defaultColor = "rgb(177, 177, 183)";
|
|
12
|
-
protected getContext():
|
|
13
|
-
$implicit: {
|
|
14
|
-
path: import("@angular/core").Signal<string | null>;
|
|
15
|
-
marker: import("@angular/core").Signal<string>;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
13
|
+
protected getContext(): ConnectionContext;
|
|
18
14
|
static ɵfac: i0.ɵɵFactoryDeclaration<ConnectionComponent, never>;
|
|
19
15
|
static ɵcmp: i0.ɵɵComponentDeclaration<ConnectionComponent, "g[connection]", never, { "model": { "alias": "model"; "required": true; "isSignal": true; }; "template": { "alias": "template"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
20
16
|
}
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import { Injector,
|
|
1
|
+
import { Injector, TemplateRef } from '@angular/core';
|
|
2
2
|
import { EdgeModel } from '../../models/edge.model';
|
|
3
3
|
import { EdgeContext } from '../../interfaces/template-context.interface';
|
|
4
|
+
import { HandleModel } from '../../models/handle.model';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class EdgeComponent
|
|
6
|
+
export declare class EdgeComponent {
|
|
6
7
|
protected injector: Injector;
|
|
7
8
|
private selectionService;
|
|
8
9
|
private flowSettingsService;
|
|
10
|
+
private flowStatusService;
|
|
11
|
+
private edgeRenderingService;
|
|
12
|
+
private connectionController;
|
|
9
13
|
model: import("@angular/core").InputSignal<EdgeModel>;
|
|
10
14
|
edgeTemplate: import("@angular/core").InputSignal<TemplateRef<EdgeContext> | undefined>;
|
|
11
15
|
edgeLabelHtmlTemplate: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
|
|
12
|
-
protected
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
onEdgeMouseDown(): void;
|
|
16
|
+
protected isReconnecting: import("@angular/core").Signal<boolean>;
|
|
17
|
+
select(): void;
|
|
18
|
+
pull(): void;
|
|
19
|
+
protected startReconnection(event: Event, handle: HandleModel): void;
|
|
17
20
|
static ɵfac: i0.ɵɵFactoryDeclaration<EdgeComponent, never>;
|
|
18
21
|
static ɵcmp: i0.ɵɵComponentDeclaration<EdgeComponent, "g[edge]", never, { "model": { "alias": "model"; "required": true; "isSignal": true; }; "edgeTemplate": { "alias": "edgeTemplate"; "required": false; "isSignal": true; }; "edgeLabelHtmlTemplate": { "alias": "edgeLabelHtmlTemplate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
19
22
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AfterViewInit, ElementRef, TemplateRef } from '@angular/core';
|
|
2
2
|
import { EdgeLabelModel } from '../../models/edge-label.model';
|
|
3
3
|
import { EdgeModel } from '../../models/edge.model';
|
|
4
|
+
import { HtmlEdgeLabelContext } from '../../interfaces/template-context.interface';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export declare class EdgeLabelComponent implements AfterViewInit {
|
|
6
7
|
private zone;
|
|
@@ -25,12 +26,7 @@ export declare class EdgeLabelComponent implements AfterViewInit {
|
|
|
25
26
|
}>;
|
|
26
27
|
protected edgeLabelStyle: import("@angular/core").Signal<Partial<CSSStyleDeclaration> | null>;
|
|
27
28
|
ngAfterViewInit(): void;
|
|
28
|
-
protected getLabelContext():
|
|
29
|
-
$implicit: {
|
|
30
|
-
edge: import("ngx-vflow").Edge<unknown>;
|
|
31
|
-
label: import("ngx-vflow").EdgeLabel;
|
|
32
|
-
};
|
|
33
|
-
};
|
|
29
|
+
protected getLabelContext(): HtmlEdgeLabelContext;
|
|
34
30
|
static ɵfac: i0.ɵɵFactoryDeclaration<EdgeLabelComponent, never>;
|
|
35
31
|
static ɵcmp: i0.ɵɵComponentDeclaration<EdgeLabelComponent, "g[edgeLabel]", never, { "model": { "alias": "model"; "required": true; "isSignal": true; }; "edgeModel": { "alias": "edgeModel"; "required": true; "isSignal": true; }; "point": { "alias": "point"; "required": false; "isSignal": true; }; "htmlTemplate": { "alias": "htmlTemplate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
36
32
|
}
|
|
@@ -24,6 +24,7 @@ export declare class VflowComponent implements OnInit {
|
|
|
24
24
|
private nodesChangeService;
|
|
25
25
|
private edgesChangeService;
|
|
26
26
|
private nodeRenderingService;
|
|
27
|
+
private edgeRenderingService;
|
|
27
28
|
private flowSettingsService;
|
|
28
29
|
private componentEventBusService;
|
|
29
30
|
private keyboardService;
|
|
@@ -75,6 +76,10 @@ export declare class VflowComponent implements OnInit {
|
|
|
75
76
|
* Raizing z-index for selected node
|
|
76
77
|
*/
|
|
77
78
|
set elevateNodesOnSelect(value: boolean);
|
|
79
|
+
/**
|
|
80
|
+
* Raizing z-index for selected edge
|
|
81
|
+
*/
|
|
82
|
+
set elevateEdgesOnSelect(value: boolean);
|
|
78
83
|
/**
|
|
79
84
|
* Nodes to render
|
|
80
85
|
*/
|
|
@@ -164,6 +169,6 @@ export declare class VflowComponent implements OnInit {
|
|
|
164
169
|
protected trackEdges(idx: number, { edge }: EdgeModel): Edge<unknown>;
|
|
165
170
|
private setInitialNodesOrder;
|
|
166
171
|
static ɵfac: i0.ɵɵFactoryDeclaration<VflowComponent, never>;
|
|
167
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<VflowComponent, "vflow", never, { "view": { "alias": "view"; "required": false; }; "minZoom": { "alias": "minZoom"; "required": false; }; "maxZoom": { "alias": "maxZoom"; "required": false; }; "background": { "alias": "background"; "required": false; }; "optimization": { "alias": "optimization"; "required": false; "isSignal": true; }; "entitiesSelectable": { "alias": "entitiesSelectable"; "required": false; }; "keyboardShortcuts": { "alias": "keyboardShortcuts"; "required": false; }; "connection": { "alias": "connection"; "required": false; }; "snapGrid": { "alias": "snapGrid"; "required": false; }; "elevateNodesOnSelect": { "alias": "elevateNodesOnSelect"; "required": false; }; "nodes": { "alias": "nodes"; "required": true; }; "edges": { "alias": "edges"; "required": false; }; }, { "onComponentNodeEvent": "onComponentNodeEvent"; }, ["nodeTemplateDirective", "groupNodeTemplateDirective", "edgeTemplateDirective", "edgeLabelHtmlDirective", "connectionTemplateDirective"], never, true, [{ directive: typeof i1.ChangesControllerDirective; inputs: {}; outputs: { "onNodesChange": "onNodesChange"; "onNodesChange.position": "onNodesChange.position"; "onNodesChange.position.single": "onNodesChange.position.single"; "onNodesChange.position.many": "onNodesChange.position.many"; "onNodesChange.size": "onNodesChange.size"; "onNodesChange.size.single": "onNodesChange.size.single"; "onNodesChange.size.many": "onNodesChange.size.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"; }; }]>;
|
|
172
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<VflowComponent, "vflow", never, { "view": { "alias": "view"; "required": false; }; "minZoom": { "alias": "minZoom"; "required": false; }; "maxZoom": { "alias": "maxZoom"; "required": false; }; "background": { "alias": "background"; "required": false; }; "optimization": { "alias": "optimization"; "required": false; "isSignal": true; }; "entitiesSelectable": { "alias": "entitiesSelectable"; "required": false; }; "keyboardShortcuts": { "alias": "keyboardShortcuts"; "required": false; }; "connection": { "alias": "connection"; "required": false; }; "snapGrid": { "alias": "snapGrid"; "required": false; }; "elevateNodesOnSelect": { "alias": "elevateNodesOnSelect"; "required": false; }; "elevateEdgesOnSelect": { "alias": "elevateEdgesOnSelect"; "required": false; }; "nodes": { "alias": "nodes"; "required": true; }; "edges": { "alias": "edges"; "required": false; }; }, { "onComponentNodeEvent": "onComponentNodeEvent"; }, ["nodeTemplateDirective", "groupNodeTemplateDirective", "edgeTemplateDirective", "edgeLabelHtmlDirective", "connectionTemplateDirective"], never, true, [{ directive: typeof i1.ChangesControllerDirective; inputs: {}; outputs: { "onNodesChange": "onNodesChange"; "onNodesChange.position": "onNodesChange.position"; "onNodesChange.position.single": "onNodesChange.position.single"; "onNodesChange.position.many": "onNodesChange.position.many"; "onNodesChange.size": "onNodesChange.size"; "onNodesChange.size.single": "onNodesChange.size.single"; "onNodesChange.size.many": "onNodesChange.size.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"; }; }]>;
|
|
168
173
|
static ngAcceptInputType_connection: i2.ConnectionSettings;
|
|
169
174
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Connection } from '../interfaces/connection.interface';
|
|
1
|
+
import { Connection, ReconnectionEvent } from '../interfaces/connection.interface';
|
|
2
2
|
import { HandleModel } from '../models/handle.model';
|
|
3
|
+
import { EdgeModel } from '../models/edge.model';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export declare class ConnectionControllerDirective {
|
|
5
6
|
private statusService;
|
|
@@ -15,11 +16,13 @@ export declare class ConnectionControllerDirective {
|
|
|
15
16
|
* @todo add connect event and deprecate onConnect
|
|
16
17
|
*/
|
|
17
18
|
readonly onConnect: import("@angular/core").OutputRef<Connection>;
|
|
19
|
+
readonly onReconnect: import("@angular/core").OutputRef<ReconnectionEvent>;
|
|
18
20
|
protected isStrictMode: import("@angular/core").Signal<boolean>;
|
|
19
21
|
startConnection(handle: HandleModel): void;
|
|
22
|
+
startReconnection(handle: HandleModel, oldEdge: EdgeModel): void;
|
|
20
23
|
validateConnection(handle: HandleModel): void;
|
|
21
24
|
resetValidateConnection(targetHandle: HandleModel): void;
|
|
22
25
|
endConnection(): void;
|
|
23
26
|
static ɵfac: i0.ɵɵFactoryDeclaration<ConnectionControllerDirective, never>;
|
|
24
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<ConnectionControllerDirective, "[onConnect]", never, {}, { "onConnect": "onConnect"; }, never, never, true, never>;
|
|
27
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ConnectionControllerDirective, "[onConnect], [onReconnect]", never, {}, { "onConnect": "onConnect"; "onReconnect": "onReconnect"; }, never, never, true, never>;
|
|
25
28
|
}
|
|
@@ -4,8 +4,11 @@ export declare class SelectableDirective {
|
|
|
4
4
|
private selectionService;
|
|
5
5
|
private parentEdge;
|
|
6
6
|
private parentNode;
|
|
7
|
-
|
|
7
|
+
private host;
|
|
8
|
+
protected selectOnEvent: import("rxjs").Subscription;
|
|
9
|
+
private select;
|
|
8
10
|
private entity;
|
|
11
|
+
private getEvent$;
|
|
9
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<SelectableDirective, never>;
|
|
10
13
|
static ɵdir: i0.ɵɵDirectiveDeclaration<SelectableDirective, "[selectable]", never, {}, {}, never, never, true, never>;
|
|
11
14
|
}
|
|
@@ -1,28 +1,33 @@
|
|
|
1
1
|
import { TemplateRef } from '@angular/core';
|
|
2
|
-
import { EdgeContext } from '../interfaces/template-context.interface';
|
|
2
|
+
import { ConnectionContext, EdgeContext, GroupNodeContext, HtmlEdgeLabelContext, NodeContext } from '../interfaces/template-context.interface';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class EdgeTemplateDirective {
|
|
5
5
|
templateRef: TemplateRef<EdgeContext>;
|
|
6
|
+
static ngTemplateContextGuard(dir: EdgeTemplateDirective, ctx: unknown): ctx is EdgeContext;
|
|
6
7
|
static ɵfac: i0.ɵɵFactoryDeclaration<EdgeTemplateDirective, never>;
|
|
7
8
|
static ɵdir: i0.ɵɵDirectiveDeclaration<EdgeTemplateDirective, "ng-template[edge]", never, {}, {}, never, never, true, never>;
|
|
8
9
|
}
|
|
9
10
|
export declare class ConnectionTemplateDirective {
|
|
10
11
|
templateRef: TemplateRef<any>;
|
|
12
|
+
static ngTemplateContextGuard(dir: ConnectionTemplateDirective, ctx: unknown): ctx is ConnectionContext;
|
|
11
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<ConnectionTemplateDirective, never>;
|
|
12
14
|
static ɵdir: i0.ɵɵDirectiveDeclaration<ConnectionTemplateDirective, "ng-template[connection]", never, {}, {}, never, never, true, never>;
|
|
13
15
|
}
|
|
14
16
|
export declare class EdgeLabelHtmlTemplateDirective {
|
|
15
17
|
templateRef: TemplateRef<any>;
|
|
18
|
+
static ngTemplateContextGuard(dir: EdgeLabelHtmlTemplateDirective, ctx: unknown): ctx is HtmlEdgeLabelContext;
|
|
16
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<EdgeLabelHtmlTemplateDirective, never>;
|
|
17
20
|
static ɵdir: i0.ɵɵDirectiveDeclaration<EdgeLabelHtmlTemplateDirective, "ng-template[edgeLabelHtml]", never, {}, {}, never, never, true, never>;
|
|
18
21
|
}
|
|
19
22
|
export declare class NodeHtmlTemplateDirective {
|
|
20
23
|
templateRef: TemplateRef<any>;
|
|
24
|
+
static ngTemplateContextGuard(dir: NodeHtmlTemplateDirective, ctx: unknown): ctx is NodeContext;
|
|
21
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<NodeHtmlTemplateDirective, never>;
|
|
22
26
|
static ɵdir: i0.ɵɵDirectiveDeclaration<NodeHtmlTemplateDirective, "ng-template[nodeHtml]", never, {}, {}, never, never, true, never>;
|
|
23
27
|
}
|
|
24
28
|
export declare class GroupNodeTemplateDirective {
|
|
25
29
|
templateRef: TemplateRef<any>;
|
|
30
|
+
static ngTemplateContextGuard(dir: GroupNodeTemplateDirective, ctx: unknown): ctx is GroupNodeContext;
|
|
26
31
|
static ɵfac: i0.ɵɵFactoryDeclaration<GroupNodeTemplateDirective, never>;
|
|
27
32
|
static ɵdir: i0.ɵɵDirectiveDeclaration<GroupNodeTemplateDirective, "ng-template[groupNode]", never, {}, {}, never, never, true, never>;
|
|
28
33
|
}
|
|
@@ -1,11 +1,47 @@
|
|
|
1
1
|
import { Signal } from '@angular/core';
|
|
2
2
|
import { Edge } from './edge.interface';
|
|
3
|
+
import { HtmlTemplateEdgeLabel } from './edge-label.interface';
|
|
4
|
+
import { Point } from './point.interface';
|
|
5
|
+
import { HandleState } from '../models/handle.model';
|
|
3
6
|
export interface EdgeContext {
|
|
4
7
|
$implicit: {
|
|
5
|
-
edge: Edge
|
|
8
|
+
edge: Edge<any>;
|
|
6
9
|
path: Signal<string>;
|
|
7
10
|
markerStart: Signal<string>;
|
|
8
11
|
markerEnd: Signal<string>;
|
|
9
12
|
selected: Signal<boolean>;
|
|
10
13
|
};
|
|
11
14
|
}
|
|
15
|
+
export interface NodeContext {
|
|
16
|
+
$implicit: {
|
|
17
|
+
node: any;
|
|
18
|
+
selected: Signal<boolean>;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface GroupNodeContext {
|
|
22
|
+
$implicit: {
|
|
23
|
+
node: any;
|
|
24
|
+
selected: Signal<boolean>;
|
|
25
|
+
width: Signal<number>;
|
|
26
|
+
height: Signal<number>;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface ConnectionContext {
|
|
30
|
+
$implicit: {
|
|
31
|
+
path: Signal<string | null>;
|
|
32
|
+
marker: Signal<string>;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface HtmlEdgeLabelContext {
|
|
36
|
+
$implicit: {
|
|
37
|
+
edge: Edge<any>;
|
|
38
|
+
label: HtmlTemplateEdgeLabel<any>;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface HandleContext {
|
|
42
|
+
$implicit: {
|
|
43
|
+
point: Signal<Point>;
|
|
44
|
+
state: Signal<HandleState>;
|
|
45
|
+
node: any;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -3,17 +3,40 @@ import { Edge, Curve, EdgeType } from '../interfaces/edge.interface';
|
|
|
3
3
|
import { EdgeLabelModel } from './edge-label.model';
|
|
4
4
|
import { NodeModel } from './node.model';
|
|
5
5
|
import { FlowEntity } from '../interfaces/flow-entity.interface';
|
|
6
|
-
|
|
6
|
+
import { Contextable } from '../interfaces/contextable.interface';
|
|
7
|
+
import { EdgeContext } from '../interfaces/template-context.interface';
|
|
8
|
+
export declare class EdgeModel implements FlowEntity, Contextable<EdgeContext> {
|
|
7
9
|
edge: Edge;
|
|
8
10
|
source: import("@angular/core").WritableSignal<NodeModel<unknown> | undefined>;
|
|
9
11
|
target: import("@angular/core").WritableSignal<NodeModel<unknown> | undefined>;
|
|
10
12
|
curve: Curve;
|
|
11
13
|
type: EdgeType;
|
|
14
|
+
reconnectable: boolean | 'source' | 'target';
|
|
12
15
|
selected: import("@angular/core").WritableSignal<boolean>;
|
|
13
16
|
selected$: import("rxjs").Observable<boolean>;
|
|
17
|
+
renderOrder: import("@angular/core").WritableSignal<number>;
|
|
14
18
|
detached: import("@angular/core").Signal<boolean>;
|
|
15
19
|
detached$: import("rxjs").Observable<boolean>;
|
|
16
20
|
path: import("@angular/core").Signal<import("../interfaces/path-data.interface").PathData>;
|
|
21
|
+
sourceHandle: import("@angular/core").Signal<import("./handle.model").HandleModel | null>;
|
|
22
|
+
targetHandle: import("@angular/core").Signal<import("./handle.model").HandleModel | null>;
|
|
23
|
+
/**
|
|
24
|
+
* TODO: not reactive
|
|
25
|
+
*/
|
|
26
|
+
markerStartUrl: import("@angular/core").Signal<string>;
|
|
27
|
+
/**
|
|
28
|
+
* TODO: not reactive
|
|
29
|
+
*/
|
|
30
|
+
markerEndUrl: import("@angular/core").Signal<string>;
|
|
31
|
+
context: {
|
|
32
|
+
$implicit: {
|
|
33
|
+
edge: Edge<unknown>;
|
|
34
|
+
path: import("@angular/core").Signal<string>;
|
|
35
|
+
markerStart: import("@angular/core").Signal<string>;
|
|
36
|
+
markerEnd: import("@angular/core").Signal<string>;
|
|
37
|
+
selected: import("@angular/core").Signal<boolean>;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
17
40
|
edgeLabels: {
|
|
18
41
|
[position in EdgeLabelPosition]?: EdgeLabelModel;
|
|
19
42
|
};
|
|
@@ -3,7 +3,11 @@ import { DynamicNode, Node } from '../interfaces/node.interface';
|
|
|
3
3
|
import { HandleModel } from './handle.model';
|
|
4
4
|
import { FlowEntity } from '../interfaces/flow-entity.interface';
|
|
5
5
|
import { Point } from '../interfaces/point.interface';
|
|
6
|
-
|
|
6
|
+
import { Contextable } from '../interfaces/contextable.interface';
|
|
7
|
+
import { GroupNodeContext, NodeContext } from '../interfaces/template-context.interface';
|
|
8
|
+
export declare class NodeModel<T = unknown> implements FlowEntity, Contextable<NodeContext | GroupNodeContext | {
|
|
9
|
+
$implicit: object;
|
|
10
|
+
}> {
|
|
7
11
|
node: Node<T> | DynamicNode<T>;
|
|
8
12
|
private static defaultWidth;
|
|
9
13
|
private static defaultHeight;
|
|
@@ -57,6 +61,9 @@ export declare class NodeModel<T = unknown> implements FlowEntity {
|
|
|
57
61
|
resizable: import("@angular/core").WritableSignal<boolean>;
|
|
58
62
|
resizing: import("@angular/core").WritableSignal<boolean>;
|
|
59
63
|
resizerTemplate: import("@angular/core").WritableSignal<TemplateRef<unknown> | null>;
|
|
64
|
+
context: {
|
|
65
|
+
$implicit: {};
|
|
66
|
+
};
|
|
60
67
|
private parentId;
|
|
61
68
|
constructor(node: Node<T> | DynamicNode<T>);
|
|
62
69
|
setPoint(point: Point): void;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class CustomTemplateEdgeComponent {
|
|
3
|
+
private edge;
|
|
4
|
+
private flowSettingsService;
|
|
5
|
+
private edgeRenderingService;
|
|
6
|
+
protected model: import("../../models/edge.model").EdgeModel;
|
|
7
|
+
protected context: {
|
|
8
|
+
edge: import("ngx-vflow").Edge<unknown>;
|
|
9
|
+
path: import("@angular/core").Signal<string>;
|
|
10
|
+
markerStart: import("@angular/core").Signal<string>;
|
|
11
|
+
markerEnd: import("@angular/core").Signal<string>;
|
|
12
|
+
selected: import("@angular/core").Signal<boolean>;
|
|
13
|
+
};
|
|
14
|
+
protected pull(): void;
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CustomTemplateEdgeComponent, never>;
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CustomTemplateEdgeComponent, "g[customTemplateEdge]", never, {}, {}, never, ["*"], true, never>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EdgeModel } from '../models/edge.model';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class EdgeRenderingService {
|
|
4
|
+
private flowEntitiesService;
|
|
5
|
+
readonly edges: import("@angular/core").Signal<EdgeModel[]>;
|
|
6
|
+
private maxOrder;
|
|
7
|
+
pull(edge: EdgeModel): void;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EdgeRenderingService, never>;
|
|
9
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<EdgeRenderingService>;
|
|
10
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NodeModel } from '../models/node.model';
|
|
2
2
|
import { HandleModel } from '../models/handle.model';
|
|
3
3
|
import { ConnectionInternal } from '../interfaces/connection.internal.interface';
|
|
4
|
+
import { EdgeModel } from '../models/edge.model';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export interface FlowStatusIdle {
|
|
6
7
|
state: 'idle';
|
|
@@ -20,13 +21,35 @@ export interface FlowStatusConnectionEnd {
|
|
|
20
21
|
state: 'connection-end';
|
|
21
22
|
payload: ConnectionInternal;
|
|
22
23
|
}
|
|
23
|
-
export
|
|
24
|
+
export interface FlowStatusReconnectionStart {
|
|
25
|
+
state: 'reconnection-start';
|
|
26
|
+
payload: Omit<ConnectionInternal, 'target' | 'targetHandle'> & {
|
|
27
|
+
oldEdge: EdgeModel;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface FlowStatusReconnectionValidation {
|
|
31
|
+
state: 'reconnection-validation';
|
|
32
|
+
payload: ConnectionInternal & {
|
|
33
|
+
valid: boolean;
|
|
34
|
+
oldEdge: EdgeModel;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export interface FlowStatusReconnectionEnd {
|
|
38
|
+
state: 'reconnection-end';
|
|
39
|
+
payload: ConnectionInternal & {
|
|
40
|
+
oldEdge: EdgeModel;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export type FlowStatus = FlowStatusIdle | FlowStatusConnectionStart | FlowStatusConnectionValidation | FlowStatusConnectionEnd | FlowStatusReconnectionStart | FlowStatusReconnectionValidation | FlowStatusReconnectionEnd;
|
|
24
44
|
export declare class FlowStatusService {
|
|
25
45
|
readonly status: import("@angular/core").WritableSignal<FlowStatus>;
|
|
26
46
|
setIdleStatus(): void;
|
|
27
47
|
setConnectionStartStatus(source: NodeModel, sourceHandle: HandleModel): void;
|
|
48
|
+
setReconnectionStartStatus(source: NodeModel, sourceHandle: HandleModel, oldEdge: EdgeModel): void;
|
|
28
49
|
setConnectionValidationStatus(valid: boolean, source: NodeModel, target: NodeModel, sourceHandle: HandleModel, targetHandle: HandleModel): void;
|
|
50
|
+
setReconnectionValidationStatus(valid: boolean, source: NodeModel, target: NodeModel, sourceHandle: HandleModel, targetHandle: HandleModel, oldEdge: EdgeModel): void;
|
|
29
51
|
setConnectionEndStatus(source: NodeModel, target: NodeModel, sourceHandle: HandleModel, targetHandle: HandleModel): void;
|
|
52
|
+
setReconnectionEndStatus(source: NodeModel, target: NodeModel, sourceHandle: HandleModel, targetHandle: HandleModel, oldEdge: EdgeModel): void;
|
|
30
53
|
static ɵfac: i0.ɵɵFactoryDeclaration<FlowStatusService, never>;
|
|
31
54
|
static ɵprov: i0.ɵɵInjectableDeclaration<FlowStatusService>;
|
|
32
55
|
}
|
|
@@ -34,6 +34,7 @@ export declare class VflowMockComponent implements AsInterface<VflowComponent>,
|
|
|
34
34
|
number
|
|
35
35
|
];
|
|
36
36
|
elevateNodesOnSelect: boolean;
|
|
37
|
+
elevateEdgesOnSelect: boolean;
|
|
37
38
|
readonly onComponentNodeEvent: import("@angular/core").OutputEmitterRef<any>;
|
|
38
39
|
protected nodeTemplateDirective: import("@angular/core").Signal<NodeHtmlTemplateMockDirective | undefined>;
|
|
39
40
|
protected groupNodeTemplateDirective: import("@angular/core").Signal<GroupNodeTemplateMockDirective | undefined>;
|
|
@@ -56,6 +57,6 @@ export declare class VflowMockComponent implements AsInterface<VflowComponent>,
|
|
|
56
57
|
getDetachedEdges(): Edge[];
|
|
57
58
|
protected createSignal<T>(value: T): WritableSignal<T>;
|
|
58
59
|
static ɵfac: i0.ɵɵFactoryDeclaration<VflowMockComponent, never>;
|
|
59
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<VflowMockComponent, "vflow", never, { "nodes": { "alias": "nodes"; "required": true; }; "edges": { "alias": "edges"; "required": false; }; "view": { "alias": "view"; "required": false; }; "minZoom": { "alias": "minZoom"; "required": false; }; "maxZoom": { "alias": "maxZoom"; "required": false; }; "background": { "alias": "background"; "required": false; }; "optimization": { "alias": "optimization"; "required": false; "isSignal": true; }; "entitiesSelectable": { "alias": "entitiesSelectable"; "required": false; }; "keyboardShortcuts": { "alias": "keyboardShortcuts"; "required": false; }; "connection": { "alias": "connection"; "required": false; }; "snapGrid": { "alias": "snapGrid"; "required": false; }; "elevateNodesOnSelect": { "alias": "elevateNodesOnSelect"; "required": false; }; }, { "onComponentNodeEvent": "onComponentNodeEvent"; }, ["nodeTemplateDirective", "groupNodeTemplateDirective", "edgeTemplateDirective", "edgeLabelHtmlDirective", "connectionTemplateDirective"], ["*"], true, never>;
|
|
60
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<VflowMockComponent, "vflow", never, { "nodes": { "alias": "nodes"; "required": true; }; "edges": { "alias": "edges"; "required": false; }; "view": { "alias": "view"; "required": false; }; "minZoom": { "alias": "minZoom"; "required": false; }; "maxZoom": { "alias": "maxZoom"; "required": false; }; "background": { "alias": "background"; "required": false; }; "optimization": { "alias": "optimization"; "required": false; "isSignal": true; }; "entitiesSelectable": { "alias": "entitiesSelectable"; "required": false; }; "keyboardShortcuts": { "alias": "keyboardShortcuts"; "required": false; }; "connection": { "alias": "connection"; "required": false; }; "snapGrid": { "alias": "snapGrid"; "required": false; }; "elevateNodesOnSelect": { "alias": "elevateNodesOnSelect"; "required": false; }; "elevateEdgesOnSelect": { "alias": "elevateEdgesOnSelect"; "required": false; }; }, { "onComponentNodeEvent": "onComponentNodeEvent"; }, ["nodeTemplateDirective", "groupNodeTemplateDirective", "edgeTemplateDirective", "edgeLabelHtmlDirective", "connectionTemplateDirective"], ["*"], true, never>;
|
|
60
61
|
static ngAcceptInputType_connection: i1.ConnectionSettings;
|
|
61
62
|
}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import { Connection } from '../../interfaces/connection.interface';
|
|
1
|
+
import { Connection, ReconnectionEvent } from '../../interfaces/connection.interface';
|
|
2
2
|
import { AsInterface } from '../types';
|
|
3
3
|
import { ConnectionControllerDirective } from '../../directives/connection-controller.directive';
|
|
4
4
|
import { HandleModel } from '../../models/handle.model';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export declare class ConnectionControllerMockDirective implements AsInterface<ConnectionControllerDirective> {
|
|
7
7
|
readonly onConnect: import("@angular/core").OutputEmitterRef<Connection>;
|
|
8
|
+
readonly onReconnect: import("@angular/core").OutputEmitterRef<ReconnectionEvent>;
|
|
8
9
|
startConnection(handle: HandleModel): void;
|
|
10
|
+
startReconnection(handle: HandleModel): void;
|
|
9
11
|
validateConnection(handle: HandleModel): void;
|
|
10
12
|
resetValidateConnection(targetHandle: HandleModel): void;
|
|
11
13
|
endConnection(): void;
|
|
12
14
|
static ɵfac: i0.ɵɵFactoryDeclaration<ConnectionControllerMockDirective, never>;
|
|
13
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<ConnectionControllerMockDirective, "[onConnect]", never, {}, { "onConnect": "onConnect"; }, never, never, true, never>;
|
|
15
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ConnectionControllerMockDirective, "[onConnect]", never, {}, { "onConnect": "onConnect"; "onReconnect": "onReconnect"; }, never, never, true, never>;
|
|
14
16
|
}
|
package/lib/vflow/vflow.d.ts
CHANGED
|
@@ -7,4 +7,5 @@ import { NodeToolbarComponent } from './public-components/node-toolbar/node-tool
|
|
|
7
7
|
import { ResizableComponent } from './public-components/resizable/resizable.component';
|
|
8
8
|
import { HandleComponent } from './public-components/handle/handle.component';
|
|
9
9
|
import { ConnectionControllerDirective } from './directives/connection-controller.directive';
|
|
10
|
-
|
|
10
|
+
import { CustomTemplateEdgeComponent } from '../../public-api';
|
|
11
|
+
export declare const Vflow: readonly [typeof VflowComponent, typeof HandleComponent, typeof ResizableComponent, typeof SelectableDirective, typeof MiniMapComponent, typeof NodeToolbarComponent, typeof CustomTemplateEdgeComponent, typeof DragHandleDirective, typeof ConnectionControllerDirective, typeof NodeHtmlTemplateDirective, typeof GroupNodeTemplateDirective, typeof EdgeLabelHtmlTemplateDirective, typeof EdgeTemplateDirective, typeof ConnectionTemplateDirective, typeof HandleTemplateDirective];
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export * from './lib/vflow/public-components/custom-dynamic-node/custom-dynamic-
|
|
|
24
24
|
export * from './lib/vflow/public-components/resizable/resizable.component';
|
|
25
25
|
export * from './lib/vflow/public-components/minimap/minimap.component';
|
|
26
26
|
export * from './lib/vflow/public-components/node-toolbar/node-toolbar.component';
|
|
27
|
+
export * from './lib/vflow/public-components/custom-template-edge/custom-template-edge.component';
|
|
27
28
|
export * from './lib/vflow/directives/template.directive';
|
|
28
29
|
export * from './lib/vflow/directives/connection-controller.directive';
|
|
29
30
|
export * from './lib/vflow/directives/changes-controller.directive';
|