ngx-vflow 1.6.0 → 1.7.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 +2 -2
- package/esm2022/lib/vflow/components/node/node.component.mjs +5 -4
- package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +11 -10
- package/esm2022/lib/vflow/directives/connection-controller.directive.mjs +5 -5
- package/esm2022/lib/vflow/directives/node-resize-controller.directive.mjs +4 -1
- package/esm2022/lib/vflow/directives/template.directive.mjs +18 -1
- package/esm2022/lib/vflow/interfaces/node.interface.mjs +7 -1
- package/esm2022/lib/vflow/interfaces/template-context.interface.mjs +1 -1
- package/esm2022/lib/vflow/models/handle.model.mjs +2 -2
- package/esm2022/lib/vflow/models/node.model.mjs +48 -70
- package/esm2022/lib/vflow/public-components/minimap/minimap.component.mjs +5 -5
- package/esm2022/lib/vflow/public-components/resizable/resizable.component.mjs +105 -44
- package/esm2022/lib/vflow/services/draggable.service.mjs +2 -4
- package/esm2022/lib/vflow/services/flow-entities.service.mjs +2 -2
- package/esm2022/lib/vflow/services/node-changes.service.mjs +6 -6
- package/esm2022/lib/vflow/services/overlays.service.mjs +4 -3
- package/esm2022/lib/vflow/services/viewport.service.mjs +2 -2
- package/esm2022/lib/vflow/testing-utils/directive-mocks/template-mock.directive.mjs +15 -1
- package/esm2022/lib/vflow/utils/add-nodes-to-edges.mjs +2 -2
- package/esm2022/lib/vflow/utils/align-number.mjs +4 -0
- package/esm2022/lib/vflow/utils/identity-checker/reference-identity-checker.mjs +31 -0
- package/esm2022/lib/vflow/utils/is-group-node.mjs +2 -2
- package/esm2022/lib/vflow/utils/to-unified-node.mjs +24 -0
- package/esm2022/lib/vflow/vflow.mjs +5 -4
- package/fesm2022/ngx-vflow.mjs +269 -165
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/node/node.component.d.ts +3 -2
- package/lib/vflow/components/vflow/vflow.component.d.ts +4 -3
- package/lib/vflow/directives/node-resize-controller.directive.d.ts +3 -0
- package/lib/vflow/directives/template.directive.d.ts +7 -1
- package/lib/vflow/interfaces/node.interface.d.ts +16 -2
- package/lib/vflow/interfaces/template-context.interface.d.ts +8 -0
- package/lib/vflow/models/node.model.d.ts +13 -17
- package/lib/vflow/public-components/minimap/minimap.component.d.ts +1 -1
- package/lib/vflow/public-components/resizable/resizable.component.d.ts +2 -0
- package/lib/vflow/services/overlays.service.d.ts +2 -2
- package/lib/vflow/testing-utils/directive-mocks/template-mock.directive.d.ts +5 -0
- package/lib/vflow/utils/align-number.d.ts +1 -0
- package/lib/vflow/utils/{reference-keeper.d.ts → identity-checker/reference-identity-checker.d.ts} +5 -5
- package/lib/vflow/utils/to-unified-node.d.ts +2 -0
- package/lib/vflow/vflow.d.ts +4 -4
- package/package.json +1 -1
- package/esm2022/lib/vflow/utils/reference-keeper.mjs +0 -31
|
@@ -17,9 +17,10 @@ export declare class NodeComponent implements OnInit, OnDestroy {
|
|
|
17
17
|
private connectionController;
|
|
18
18
|
model: import("@angular/core").InputSignal<NodeModel<unknown>>;
|
|
19
19
|
nodeTemplate: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
|
|
20
|
+
nodeSvgTemplate: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
|
|
20
21
|
groupNodeTemplate: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
|
|
21
22
|
protected showMagnet: import("@angular/core").Signal<boolean>;
|
|
22
|
-
protected
|
|
23
|
+
protected toolbars: import("@angular/core").Signal<import("../../models/toolbar.model").ToolbarModel[] | undefined>;
|
|
23
24
|
ngOnInit(): void;
|
|
24
25
|
ngOnDestroy(): void;
|
|
25
26
|
protected startConnection(event: Event, handle: HandleModel): void;
|
|
@@ -29,5 +30,5 @@ export declare class NodeComponent implements OnInit, OnDestroy {
|
|
|
29
30
|
protected pullNode(): void;
|
|
30
31
|
protected selectNode(): void;
|
|
31
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<NodeComponent, never>;
|
|
32
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NodeComponent, "g[node]", never, { "model": { "alias": "model"; "required": true; "isSignal": true; }; "nodeTemplate": { "alias": "nodeTemplate"; "required": false; "isSignal": true; }; "groupNodeTemplate": { "alias": "groupNodeTemplate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
33
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NodeComponent, "g[node]", never, { "model": { "alias": "model"; "required": true; "isSignal": true; }; "nodeTemplate": { "alias": "nodeTemplate"; "required": false; "isSignal": true; }; "nodeSvgTemplate": { "alias": "nodeSvgTemplate"; "required": false; "isSignal": true; }; "groupNodeTemplate": { "alias": "groupNodeTemplate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
33
34
|
}
|
|
@@ -4,7 +4,7 @@ import { MapContextDirective } from '../../directives/map-context.directive';
|
|
|
4
4
|
import { NodeModel } from '../../models/node.model';
|
|
5
5
|
import { Edge } from '../../interfaces/edge.interface';
|
|
6
6
|
import { EdgeModel } from '../../models/edge.model';
|
|
7
|
-
import { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, GroupNodeTemplateDirective, NodeHtmlTemplateDirective } from '../../directives/template.directive';
|
|
7
|
+
import { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, GroupNodeTemplateDirective, NodeHtmlTemplateDirective, NodeSvgTemplateDirective } from '../../directives/template.directive';
|
|
8
8
|
import { Point } from '../../interfaces/point.interface';
|
|
9
9
|
import { ViewportState } from '../../interfaces/viewport.interface';
|
|
10
10
|
import { ConnectionModel } from '../../models/connection.model';
|
|
@@ -99,6 +99,7 @@ export declare class VflowComponent implements OnInit {
|
|
|
99
99
|
*/
|
|
100
100
|
readonly onComponentNodeEvent: import("@angular/core").OutputRef<any>;
|
|
101
101
|
protected nodeTemplateDirective: import("@angular/core").Signal<NodeHtmlTemplateDirective | undefined>;
|
|
102
|
+
protected nodeSvgTemplateDirective: import("@angular/core").Signal<NodeSvgTemplateDirective | undefined>;
|
|
102
103
|
protected groupNodeTemplateDirective: import("@angular/core").Signal<GroupNodeTemplateDirective | undefined>;
|
|
103
104
|
protected edgeTemplateDirective: import("@angular/core").Signal<EdgeTemplateDirective | undefined>;
|
|
104
105
|
protected edgeLabelHtmlDirective: import("@angular/core").Signal<EdgeLabelHtmlTemplateDirective | undefined>;
|
|
@@ -165,10 +166,10 @@ export declare class VflowComponent implements OnInit {
|
|
|
165
166
|
* Convert point received from document to point on the flow
|
|
166
167
|
*/
|
|
167
168
|
documentPointToFlowPoint(point: Point): Point;
|
|
168
|
-
protected trackNodes(idx: number, { node }: NodeModel): Node<unknown> | DynamicNode<unknown>;
|
|
169
|
+
protected trackNodes(idx: number, { rawNode: node }: NodeModel): Node<unknown> | DynamicNode<unknown>;
|
|
169
170
|
protected trackEdges(idx: number, { edge }: EdgeModel): Edge<unknown>;
|
|
170
171
|
private setInitialNodesOrder;
|
|
171
172
|
static ɵfac: i0.ɵɵFactoryDeclaration<VflowComponent, never>;
|
|
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"; }; }]>;
|
|
173
|
+
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", "nodeSvgTemplateDirective", "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"; }; }]>;
|
|
173
174
|
static ngAcceptInputType_connection: i2.ConnectionSettings;
|
|
174
175
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TemplateRef } from '@angular/core';
|
|
2
|
-
import { ConnectionContext, EdgeContext, GroupNodeContext, HtmlEdgeLabelContext, NodeContext } from '../interfaces/template-context.interface';
|
|
2
|
+
import { ConnectionContext, EdgeContext, GroupNodeContext, HtmlEdgeLabelContext, NodeContext, SvgNodeContext } from '../interfaces/template-context.interface';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class EdgeTemplateDirective {
|
|
5
5
|
templateRef: TemplateRef<EdgeContext>;
|
|
@@ -25,6 +25,12 @@ export declare class NodeHtmlTemplateDirective {
|
|
|
25
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<NodeHtmlTemplateDirective, never>;
|
|
26
26
|
static ɵdir: i0.ɵɵDirectiveDeclaration<NodeHtmlTemplateDirective, "ng-template[nodeHtml]", never, {}, {}, never, never, true, never>;
|
|
27
27
|
}
|
|
28
|
+
export declare class NodeSvgTemplateDirective {
|
|
29
|
+
templateRef: TemplateRef<any>;
|
|
30
|
+
static ngTemplateContextGuard(dir: NodeSvgTemplateDirective, ctx: unknown): ctx is SvgNodeContext;
|
|
31
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NodeSvgTemplateDirective, never>;
|
|
32
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NodeSvgTemplateDirective, "ng-template[nodeSvg]", never, {}, {}, never, never, true, never>;
|
|
33
|
+
}
|
|
28
34
|
export declare class GroupNodeTemplateDirective {
|
|
29
35
|
templateRef: TemplateRef<any>;
|
|
30
36
|
static ngTemplateContextGuard(dir: GroupNodeTemplateDirective, ctx: unknown): ctx is GroupNodeContext;
|
|
@@ -2,8 +2,8 @@ import { Type, WritableSignal } from '@angular/core';
|
|
|
2
2
|
import { Point } from './point.interface';
|
|
3
3
|
import { CustomNodeComponent } from '../public-components/custom-node/custom-node.component';
|
|
4
4
|
import { CustomDynamicNodeComponent } from '../public-components/custom-dynamic-node/custom-dynamic-node.component';
|
|
5
|
-
export type Node<T = any> = DefaultNode | HtmlTemplateNode<T> | ComponentNode<T> | DefaultGroupNode | TemplateGroupNode<T>;
|
|
6
|
-
export type DynamicNode<T = any> = DefaultDynamicNode | HtmlTemplateDynamicNode<T> | ComponentDynamicNode<T> | DefaultDynamicGroupNode | TemplateDynamicGroupNode<T>;
|
|
5
|
+
export type Node<T = any> = DefaultNode | HtmlTemplateNode<T> | SvgTemplateNode<T> | ComponentNode<T> | DefaultGroupNode | TemplateGroupNode<T>;
|
|
6
|
+
export type DynamicNode<T = any> = DefaultDynamicNode | HtmlTemplateDynamicNode<T> | SvgTemplateDynamicNode<T> | ComponentDynamicNode<T> | DefaultDynamicGroupNode | TemplateDynamicGroupNode<T>;
|
|
7
7
|
export interface SharedNode {
|
|
8
8
|
id: string;
|
|
9
9
|
point: Point;
|
|
@@ -34,12 +34,24 @@ export interface HtmlTemplateNode<T = any> extends SharedNode {
|
|
|
34
34
|
width?: number;
|
|
35
35
|
height?: number;
|
|
36
36
|
}
|
|
37
|
+
export interface SvgTemplateNode<T = any> extends SharedNode {
|
|
38
|
+
type: 'svg-template';
|
|
39
|
+
width: number;
|
|
40
|
+
height: number;
|
|
41
|
+
data?: T;
|
|
42
|
+
}
|
|
37
43
|
export interface HtmlTemplateDynamicNode<T = any> extends SharedDynamicNode {
|
|
38
44
|
type: 'html-template';
|
|
39
45
|
data?: WritableSignal<T>;
|
|
40
46
|
width?: WritableSignal<number>;
|
|
41
47
|
height?: WritableSignal<number>;
|
|
42
48
|
}
|
|
49
|
+
export interface SvgTemplateDynamicNode<T = any> extends SharedDynamicNode {
|
|
50
|
+
type: 'svg-template';
|
|
51
|
+
width: WritableSignal<number>;
|
|
52
|
+
height: WritableSignal<number>;
|
|
53
|
+
data?: WritableSignal<T>;
|
|
54
|
+
}
|
|
43
55
|
export interface DefaultGroupNode extends SharedNode {
|
|
44
56
|
type: 'default-group';
|
|
45
57
|
width: number;
|
|
@@ -84,6 +96,8 @@ export declare function isComponentStaticNode<T>(node: Node<T>): node is Compone
|
|
|
84
96
|
export declare function isComponentDynamicNode<T>(node: DynamicNode<T>): node is ComponentDynamicNode<T>;
|
|
85
97
|
export declare function isTemplateStaticNode<T>(node: Node<T>): node is HtmlTemplateNode<T>;
|
|
86
98
|
export declare function isTemplateDynamicNode<T>(node: DynamicNode<T>): node is HtmlTemplateDynamicNode<T>;
|
|
99
|
+
export declare function isSvgTemplateStaticNode<T>(node: Node<T>): node is SvgTemplateNode<T>;
|
|
100
|
+
export declare function isSvgTemplateDynamicNode<T>(node: DynamicNode<T>): node is SvgTemplateDynamicNode<T>;
|
|
87
101
|
export declare function isDefaultStaticNode(node: Node): node is DefaultNode;
|
|
88
102
|
export declare function isDefaultDynamicNode(node: DynamicNode): node is DefaultDynamicNode;
|
|
89
103
|
export declare function isDefaultStaticGroupNode(node: Node): node is DefaultGroupNode;
|
|
@@ -18,6 +18,14 @@ export interface NodeContext {
|
|
|
18
18
|
selected: Signal<boolean>;
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
+
export interface SvgNodeContext {
|
|
22
|
+
$implicit: {
|
|
23
|
+
node: any;
|
|
24
|
+
selected: Signal<boolean>;
|
|
25
|
+
width: Signal<number>;
|
|
26
|
+
height: Signal<number>;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
21
29
|
export interface GroupNodeContext {
|
|
22
30
|
$implicit: {
|
|
23
31
|
node: any;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TemplateRef } from '@angular/core';
|
|
2
2
|
import { DynamicNode, Node } from '../interfaces/node.interface';
|
|
3
3
|
import { HandleModel } from './handle.model';
|
|
4
4
|
import { FlowEntity } from '../interfaces/flow-entity.interface';
|
|
@@ -8,7 +8,7 @@ import { GroupNodeContext, NodeContext } from '../interfaces/template-context.in
|
|
|
8
8
|
export declare class NodeModel<T = unknown> implements FlowEntity, Contextable<NodeContext | GroupNodeContext | {
|
|
9
9
|
$implicit: object;
|
|
10
10
|
}> {
|
|
11
|
-
|
|
11
|
+
rawNode: Node<T> | DynamicNode<T>;
|
|
12
12
|
private static defaultWidth;
|
|
13
13
|
private static defaultHeight;
|
|
14
14
|
private static defaultColor;
|
|
@@ -22,7 +22,7 @@ export declare class NodeModel<T = unknown> implements FlowEntity, Contextable<N
|
|
|
22
22
|
/**
|
|
23
23
|
* @deprecated use width or height signals
|
|
24
24
|
*/
|
|
25
|
-
size: Signal<{
|
|
25
|
+
size: import("@angular/core").Signal<{
|
|
26
26
|
width: number;
|
|
27
27
|
height: number;
|
|
28
28
|
}>;
|
|
@@ -33,30 +33,30 @@ export declare class NodeModel<T = unknown> implements FlowEntity, Contextable<N
|
|
|
33
33
|
width: number;
|
|
34
34
|
height: number;
|
|
35
35
|
}>;
|
|
36
|
-
styleWidth: Signal<string>;
|
|
37
|
-
styleHeight: Signal<string>;
|
|
38
|
-
foWidth: Signal<number>;
|
|
39
|
-
foHeight: Signal<number>;
|
|
36
|
+
styleWidth: import("@angular/core").Signal<string>;
|
|
37
|
+
styleHeight: import("@angular/core").Signal<string>;
|
|
38
|
+
foWidth: import("@angular/core").Signal<number>;
|
|
39
|
+
foHeight: import("@angular/core").Signal<number>;
|
|
40
40
|
renderOrder: import("@angular/core").WritableSignal<number>;
|
|
41
41
|
selected: import("@angular/core").WritableSignal<boolean>;
|
|
42
42
|
selected$: import("rxjs").Observable<boolean>;
|
|
43
|
-
globalPoint: Signal<{
|
|
43
|
+
globalPoint: import("@angular/core").Signal<{
|
|
44
44
|
x: number;
|
|
45
45
|
y: number;
|
|
46
46
|
}>;
|
|
47
|
-
pointTransform: Signal<string>;
|
|
47
|
+
pointTransform: import("@angular/core").Signal<string>;
|
|
48
48
|
handles: import("@angular/core").WritableSignal<HandleModel[]>;
|
|
49
49
|
handles$: import("rxjs").Observable<HandleModel[]>;
|
|
50
50
|
draggable: import("@angular/core").WritableSignal<boolean>;
|
|
51
51
|
dragHandlesCount: import("@angular/core").WritableSignal<number>;
|
|
52
52
|
readonly magnetRadius = 20;
|
|
53
53
|
isComponentType: boolean;
|
|
54
|
-
text:
|
|
54
|
+
text: import("@angular/core").WritableSignal<string>;
|
|
55
55
|
componentTypeInputs: {
|
|
56
56
|
node: Node<T> | DynamicNode<T>;
|
|
57
57
|
};
|
|
58
|
-
parent: Signal<NodeModel<unknown> | null>;
|
|
59
|
-
children: Signal<NodeModel<unknown>[]>;
|
|
58
|
+
parent: import("@angular/core").Signal<NodeModel<unknown> | null>;
|
|
59
|
+
children: import("@angular/core").Signal<NodeModel<unknown>[]>;
|
|
60
60
|
color: import("@angular/core").WritableSignal<string>;
|
|
61
61
|
resizable: import("@angular/core").WritableSignal<boolean>;
|
|
62
62
|
resizing: import("@angular/core").WritableSignal<boolean>;
|
|
@@ -65,10 +65,6 @@ export declare class NodeModel<T = unknown> implements FlowEntity, Contextable<N
|
|
|
65
65
|
$implicit: {};
|
|
66
66
|
};
|
|
67
67
|
private parentId;
|
|
68
|
-
constructor(
|
|
68
|
+
constructor(rawNode: Node<T> | DynamicNode<T>);
|
|
69
69
|
setPoint(point: Point): void;
|
|
70
|
-
private createTextSignal;
|
|
71
|
-
private createInternalPointSignal;
|
|
72
|
-
private createWidthSignal;
|
|
73
|
-
private createHeightSignal;
|
|
74
70
|
}
|
|
@@ -41,7 +41,7 @@ export declare class MiniMapComponent implements OnInit {
|
|
|
41
41
|
protected boundsViewport: import("@angular/core").Signal<import("ngx-vflow").ViewportState>;
|
|
42
42
|
protected minimapTransform: import("@angular/core").Signal<string>;
|
|
43
43
|
ngOnInit(): void;
|
|
44
|
-
protected trackNodes(idx: number, {
|
|
44
|
+
protected trackNodes(idx: number, { rawNode }: NodeModel): import("ngx-vflow").Node<unknown> | import("ngx-vflow").DynamicNode<unknown>;
|
|
45
45
|
static ɵfac: i0.ɵɵFactoryDeclaration<MiniMapComponent, never>;
|
|
46
46
|
static ɵcmp: i0.ɵɵComponentDeclaration<MiniMapComponent, "mini-map", never, { "maskColor": { "alias": "maskColor"; "required": false; "isSignal": true; }; "strokeColor": { "alias": "strokeColor"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "scaleOnHover": { "alias": "scaleOnHover"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
47
47
|
}
|
|
@@ -8,6 +8,7 @@ export declare class ResizableComponent implements OnInit, AfterViewInit {
|
|
|
8
8
|
private rootPointer;
|
|
9
9
|
private viewportService;
|
|
10
10
|
private spacePointContext;
|
|
11
|
+
private settingsService;
|
|
11
12
|
private hostRef;
|
|
12
13
|
resizable: import("@angular/core").InputSignal<boolean | "" | undefined>;
|
|
13
14
|
resizerColor: import("@angular/core").InputSignal<string>;
|
|
@@ -29,6 +30,7 @@ export declare class ResizableComponent implements OnInit, AfterViewInit {
|
|
|
29
30
|
protected resize(event: PointerEvent): void;
|
|
30
31
|
protected endResize(): void;
|
|
31
32
|
private getDistanceToEdge;
|
|
33
|
+
private applyResize;
|
|
32
34
|
static ɵfac: i0.ɵɵFactoryDeclaration<ResizableComponent, never>;
|
|
33
35
|
static ɵcmp: i0.ɵɵComponentDeclaration<ResizableComponent, "[resizable]", never, { "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "resizerColor": { "alias": "resizerColor"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
34
36
|
}
|
|
@@ -2,8 +2,8 @@ import { ToolbarModel } from '../models/toolbar.model';
|
|
|
2
2
|
import { NodeModel } from '../models/node.model';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class OverlaysService {
|
|
5
|
-
private toolbars;
|
|
6
|
-
|
|
5
|
+
private readonly toolbars;
|
|
6
|
+
nodeToolbarsMap: import("@angular/core").Signal<Map<NodeModel<unknown>, ToolbarModel[]>>;
|
|
7
7
|
addToolbar(toolbar: ToolbarModel): void;
|
|
8
8
|
removeToolbar(toolbar: ToolbarModel): void;
|
|
9
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<OverlaysService, never>;
|
|
@@ -22,6 +22,11 @@ export declare class NodeHtmlTemplateMockDirective implements AsInterface<NodeHt
|
|
|
22
22
|
static ɵfac: i0.ɵɵFactoryDeclaration<NodeHtmlTemplateMockDirective, never>;
|
|
23
23
|
static ɵdir: i0.ɵɵDirectiveDeclaration<NodeHtmlTemplateMockDirective, "ng-template[nodeHtml]", never, {}, {}, never, never, true, never>;
|
|
24
24
|
}
|
|
25
|
+
export declare class NodeSvgTemplateMockDirective implements AsInterface<NodeSvgTemplateMockDirective> {
|
|
26
|
+
templateRef: TemplateRef<any>;
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NodeSvgTemplateMockDirective, never>;
|
|
28
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NodeSvgTemplateMockDirective, "ng-template[nodeSvg]", never, {}, {}, never, never, true, never>;
|
|
29
|
+
}
|
|
25
30
|
export declare class GroupNodeTemplateMockDirective implements AsInterface<GroupNodeTemplateDirective> {
|
|
26
31
|
templateRef: TemplateRef<any>;
|
|
27
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<GroupNodeTemplateMockDirective, never>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function align(num: number, constant: number): number;
|
package/lib/vflow/utils/{reference-keeper.d.ts → identity-checker/reference-identity-checker.d.ts}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { NodeModel } from '
|
|
2
|
-
import { DynamicNode, Node } from '
|
|
3
|
-
import { EdgeModel } from '
|
|
4
|
-
import { Edge } from '
|
|
5
|
-
export declare class
|
|
1
|
+
import { NodeModel } from '../../models/node.model';
|
|
2
|
+
import { DynamicNode, Node } from '../../interfaces/node.interface';
|
|
3
|
+
import { EdgeModel } from '../../models/edge.model';
|
|
4
|
+
import { Edge } from '../../interfaces/edge.interface';
|
|
5
|
+
export declare class ReferenceIdentityChecker {
|
|
6
6
|
/**
|
|
7
7
|
* Create new models for new node references and keep old models for old node references
|
|
8
8
|
*/
|
package/lib/vflow/vflow.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { VflowComponent } from './components/vflow/vflow.component';
|
|
2
2
|
import { DragHandleDirective } from './directives/drag-handle.directive';
|
|
3
3
|
import { SelectableDirective } from './directives/selectable.directive';
|
|
4
|
-
import { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, GroupNodeTemplateDirective, HandleTemplateDirective, NodeHtmlTemplateDirective } from './directives/template.directive';
|
|
4
|
+
import { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, GroupNodeTemplateDirective, HandleTemplateDirective, NodeHtmlTemplateDirective, NodeSvgTemplateDirective } from './directives/template.directive';
|
|
5
|
+
import { ConnectionControllerDirective } from './directives/connection-controller.directive';
|
|
5
6
|
import { MiniMapComponent } from './public-components/minimap/minimap.component';
|
|
6
7
|
import { NodeToolbarComponent } from './public-components/node-toolbar/node-toolbar.component';
|
|
7
8
|
import { ResizableComponent } from './public-components/resizable/resizable.component';
|
|
8
9
|
import { HandleComponent } from './public-components/handle/handle.component';
|
|
9
|
-
import {
|
|
10
|
-
|
|
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];
|
|
10
|
+
import { CustomTemplateEdgeComponent } from './public-components/custom-template-edge/custom-template-edge.component';
|
|
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 NodeSvgTemplateDirective, typeof GroupNodeTemplateDirective, typeof EdgeLabelHtmlTemplateDirective, typeof EdgeTemplateDirective, typeof ConnectionTemplateDirective, typeof HandleTemplateDirective];
|
package/package.json
CHANGED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { NodeModel } from '../models/node.model';
|
|
2
|
-
import { EdgeModel } from '../models/edge.model';
|
|
3
|
-
export class ReferenceKeeper {
|
|
4
|
-
/**
|
|
5
|
-
* Create new models for new node references and keep old models for old node references
|
|
6
|
-
*/
|
|
7
|
-
static nodes(newNodes, oldNodeModels) {
|
|
8
|
-
const oldNodesMap = new Map();
|
|
9
|
-
oldNodeModels.forEach((model) => oldNodesMap.set(model.node, model));
|
|
10
|
-
return newNodes.map((newNode) => {
|
|
11
|
-
if (oldNodesMap.has(newNode))
|
|
12
|
-
return oldNodesMap.get(newNode);
|
|
13
|
-
else
|
|
14
|
-
return new NodeModel(newNode);
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Create new models for new edge references and keep old models for old edge references
|
|
19
|
-
*/
|
|
20
|
-
static edges(newEdges, oldEdgeModels) {
|
|
21
|
-
const oldEdgesMap = new Map();
|
|
22
|
-
oldEdgeModels.forEach((model) => oldEdgesMap.set(model.edge, model));
|
|
23
|
-
return newEdges.map((newEdge) => {
|
|
24
|
-
if (oldEdgesMap.has(newEdge))
|
|
25
|
-
return oldEdgesMap.get(newEdge);
|
|
26
|
-
else
|
|
27
|
-
return new EdgeModel(newEdge);
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlLWtlZXBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy91dGlscy9yZWZlcmVuY2Uta2VlcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHakQsTUFBTSxPQUFPLGVBQWU7SUFDMUI7O09BRUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQWdDLEVBQUUsYUFBMEI7UUFDOUUsTUFBTSxXQUFXLEdBQXVDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFckUsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztnQkFBRSxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUM7O2dCQUMxRCxPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFnQixFQUFFLGFBQTBCO1FBQzlELE1BQU0sV0FBVyxHQUF5QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BELGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXJFLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzlCLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7Z0JBQUUsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBRSxDQUFDOztnQkFDMUQsT0FBTyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IER5bmFtaWNOb2RlLCBOb2RlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFZGdlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZWRnZS5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lZGdlLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VLZWVwZXIge1xuICAvKipcbiAgICogQ3JlYXRlIG5ldyBtb2RlbHMgZm9yIG5ldyBub2RlIHJlZmVyZW5jZXMgYW5kIGtlZXAgb2xkIG1vZGVscyBmb3Igb2xkIG5vZGUgcmVmZXJlbmNlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBub2RlcyhuZXdOb2RlczogTm9kZVtdIHwgRHluYW1pY05vZGVbXSwgb2xkTm9kZU1vZGVsczogTm9kZU1vZGVsW10pIHtcbiAgICBjb25zdCBvbGROb2Rlc01hcDogTWFwPE5vZGUgfCBEeW5hbWljTm9kZSwgTm9kZU1vZGVsPiA9IG5ldyBNYXAoKTtcbiAgICBvbGROb2RlTW9kZWxzLmZvckVhY2goKG1vZGVsKSA9PiBvbGROb2Rlc01hcC5zZXQobW9kZWwubm9kZSwgbW9kZWwpKTtcblxuICAgIHJldHVybiBuZXdOb2Rlcy5tYXAoKG5ld05vZGUpID0+IHtcbiAgICAgIGlmIChvbGROb2Rlc01hcC5oYXMobmV3Tm9kZSkpIHJldHVybiBvbGROb2Rlc01hcC5nZXQobmV3Tm9kZSkhO1xuICAgICAgZWxzZSByZXR1cm4gbmV3IE5vZGVNb2RlbChuZXdOb2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbmV3IG1vZGVscyBmb3IgbmV3IGVkZ2UgcmVmZXJlbmNlcyBhbmQga2VlcCBvbGQgbW9kZWxzIGZvciBvbGQgZWRnZSByZWZlcmVuY2VzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGVkZ2VzKG5ld0VkZ2VzOiBFZGdlW10sIG9sZEVkZ2VNb2RlbHM6IEVkZ2VNb2RlbFtdKTogRWRnZU1vZGVsW10ge1xuICAgIGNvbnN0IG9sZEVkZ2VzTWFwOiBNYXA8RWRnZSwgRWRnZU1vZGVsPiA9IG5ldyBNYXAoKTtcbiAgICBvbGRFZGdlTW9kZWxzLmZvckVhY2goKG1vZGVsKSA9PiBvbGRFZGdlc01hcC5zZXQobW9kZWwuZWRnZSwgbW9kZWwpKTtcblxuICAgIHJldHVybiBuZXdFZGdlcy5tYXAoKG5ld0VkZ2UpID0+IHtcbiAgICAgIGlmIChvbGRFZGdlc01hcC5oYXMobmV3RWRnZSkpIHJldHVybiBvbGRFZGdlc01hcC5nZXQobmV3RWRnZSkhO1xuICAgICAgZWxzZSByZXR1cm4gbmV3IEVkZ2VNb2RlbChuZXdFZGdlKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|