ngx-vflow 1.7.0 → 1.8.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/vflow/vflow.component.mjs +43 -20
- package/esm2022/lib/vflow/interfaces/intersecting-nodes-options.interface.mjs +2 -0
- package/esm2022/lib/vflow/interfaces/point.interface.mjs +1 -1
- package/esm2022/lib/vflow/models/node.model.mjs +8 -10
- package/esm2022/lib/vflow/public-components/node-toolbar/node-toolbar.component.mjs +12 -2
- package/esm2022/lib/vflow/services/node-changes.service.mjs +9 -5
- package/esm2022/lib/vflow/services/node-rendering.service.mjs +1 -6
- package/esm2022/lib/vflow/testing-utils/component-mocks/vflow-mock.component.mjs +19 -2
- package/esm2022/lib/vflow/utils/get-overlapping-area.mjs +6 -0
- package/esm2022/lib/vflow/utils/get-space-points.mjs +25 -0
- package/esm2022/lib/vflow/utils/identity-checker/reference-identity-checker.mjs +2 -5
- package/esm2022/lib/vflow/utils/nodes.mjs +25 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ngx-vflow.mjs +135 -42
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/vflow/vflow.component.d.ts +31 -5
- package/lib/vflow/interfaces/intersecting-nodes-options.interface.d.ts +3 -0
- package/lib/vflow/interfaces/point.interface.d.ts +3 -0
- package/lib/vflow/models/node.model.d.ts +7 -6
- package/lib/vflow/public-components/node-toolbar/node-toolbar.component.d.ts +3 -0
- package/lib/vflow/services/node-changes.service.d.ts +1 -5
- package/lib/vflow/testing-utils/component-mocks/vflow-mock.component.d.ts +10 -2
- package/lib/vflow/utils/get-overlapping-area.d.ts +2 -0
- package/lib/vflow/utils/get-space-points.d.ts +10 -0
- package/lib/vflow/utils/nodes.d.ts +3 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
1
|
import { DynamicNode, Node } from '../../interfaces/node.interface';
|
|
3
2
|
import { MapContextDirective } from '../../directives/map-context.directive';
|
|
4
3
|
import { NodeModel } from '../../models/node.model';
|
|
5
4
|
import { Edge } from '../../interfaces/edge.interface';
|
|
6
5
|
import { EdgeModel } from '../../models/edge.model';
|
|
7
6
|
import { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, GroupNodeTemplateDirective, NodeHtmlTemplateDirective, NodeSvgTemplateDirective } from '../../directives/template.directive';
|
|
8
|
-
import { Point } from '../../interfaces/point.interface';
|
|
7
|
+
import { SpacePoint, Point } from '../../interfaces/point.interface';
|
|
9
8
|
import { ViewportState } from '../../interfaces/viewport.interface';
|
|
10
9
|
import { ConnectionModel } from '../../models/connection.model';
|
|
11
10
|
import { NodeChange } from '../../types/node-change.type';
|
|
@@ -15,10 +14,11 @@ import { SpacePointContextDirective } from '../../directives/space-point-context
|
|
|
15
14
|
import { FitViewOptions } from '../../interfaces/fit-view-options.interface';
|
|
16
15
|
import { Optimization } from '../../interfaces/optimization.interface';
|
|
17
16
|
import { KeyboardShortcuts } from '../../types/keyboard-action.type';
|
|
17
|
+
import { IntersectingNodesOptions } from '../../interfaces/intersecting-nodes-options.interface';
|
|
18
18
|
import * as i0 from "@angular/core";
|
|
19
19
|
import * as i1 from "../../directives/changes-controller.directive";
|
|
20
20
|
import * as i2 from "../../interfaces/connection-settings.interface";
|
|
21
|
-
export declare class VflowComponent
|
|
21
|
+
export declare class VflowComponent {
|
|
22
22
|
private viewportService;
|
|
23
23
|
private flowEntitiesService;
|
|
24
24
|
private nodesChangeService;
|
|
@@ -132,7 +132,6 @@ export declare class VflowComponent implements OnInit {
|
|
|
132
132
|
readonly edgesChange$: import("rxjs").Observable<EdgeChange[]>;
|
|
133
133
|
protected markers: import("@angular/core").Signal<Map<number, import("ngx-vflow").Marker>>;
|
|
134
134
|
protected minimap: import("@angular/core").WritableSignal<import("../../models/minimap.model").MinimapModel | null>;
|
|
135
|
-
ngOnInit(): void;
|
|
136
135
|
/**
|
|
137
136
|
* Change viewport to specified state
|
|
138
137
|
*
|
|
@@ -166,9 +165,36 @@ export declare class VflowComponent implements OnInit {
|
|
|
166
165
|
* Convert point received from document to point on the flow
|
|
167
166
|
*/
|
|
168
167
|
documentPointToFlowPoint(point: Point): Point;
|
|
168
|
+
documentPointToFlowPoint(point: Point, options?: {
|
|
169
|
+
spaces: false;
|
|
170
|
+
}): Point;
|
|
171
|
+
/**
|
|
172
|
+
* Convert point received from document to a stack of space points on the flow
|
|
173
|
+
* Space point has a spaceNodeId, coordinates are relative to this node
|
|
174
|
+
*/
|
|
175
|
+
documentPointToFlowPoint(point: Point, options?: {
|
|
176
|
+
spaces: true;
|
|
177
|
+
}): SpacePoint[];
|
|
178
|
+
/**
|
|
179
|
+
* Gets nodes that intersect with the specified node
|
|
180
|
+
*
|
|
181
|
+
* @template T - The type of data associated with the nodes
|
|
182
|
+
* @param nodeId - The ID of the node to check intersections for
|
|
183
|
+
* @param options.partially - If true, returns nodes that partially intersect. If false, only returns fully intersecting nodes
|
|
184
|
+
* @returns An array of nodes that intersect with the specified node
|
|
185
|
+
*/
|
|
186
|
+
getIntesectingNodes<T>(nodeId: string, options?: IntersectingNodesOptions): Node<T>[] | DynamicNode<T>[];
|
|
187
|
+
/**
|
|
188
|
+
* Converts a node's position to the coordinate space of another node
|
|
189
|
+
*
|
|
190
|
+
* @param nodeId - The ID of the node whose position should be converted
|
|
191
|
+
* @param spaceNodeId - The ID of the node that defines the target coordinate space.
|
|
192
|
+
* If null, returns the position in global coordinates
|
|
193
|
+
* @returns {Point} The converted position. Returns {x: Infinity, y: Infinity} if either node is not found
|
|
194
|
+
*/
|
|
195
|
+
toNodeSpace(nodeId: string, spaceNodeId: string | null): Point;
|
|
169
196
|
protected trackNodes(idx: number, { rawNode: node }: NodeModel): Node<unknown> | DynamicNode<unknown>;
|
|
170
197
|
protected trackEdges(idx: number, { edge }: EdgeModel): Edge<unknown>;
|
|
171
|
-
private setInitialNodesOrder;
|
|
172
198
|
static ɵfac: i0.ɵɵFactoryDeclaration<VflowComponent, never>;
|
|
173
199
|
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"; }; }]>;
|
|
174
200
|
static ngAcceptInputType_connection: i2.ConnectionSettings;
|
|
@@ -5,6 +5,7 @@ import { FlowEntity } from '../interfaces/flow-entity.interface';
|
|
|
5
5
|
import { Point } from '../interfaces/point.interface';
|
|
6
6
|
import { Contextable } from '../interfaces/contextable.interface';
|
|
7
7
|
import { GroupNodeContext, NodeContext } from '../interfaces/template-context.interface';
|
|
8
|
+
import { Observable } from 'rxjs';
|
|
8
9
|
export declare class NodeModel<T = unknown> implements FlowEntity, Contextable<NodeContext | GroupNodeContext | {
|
|
9
10
|
$implicit: object;
|
|
10
11
|
}> {
|
|
@@ -14,11 +15,11 @@ export declare class NodeModel<T = unknown> implements FlowEntity, Contextable<N
|
|
|
14
15
|
private static defaultColor;
|
|
15
16
|
private entitiesService;
|
|
16
17
|
point: import("@angular/core").WritableSignal<Point>;
|
|
17
|
-
point$:
|
|
18
|
+
point$: Observable<Point>;
|
|
18
19
|
width: import("@angular/core").WritableSignal<number>;
|
|
19
|
-
width$:
|
|
20
|
+
width$: Observable<number>;
|
|
20
21
|
height: import("@angular/core").WritableSignal<number>;
|
|
21
|
-
height$:
|
|
22
|
+
height$: Observable<number>;
|
|
22
23
|
/**
|
|
23
24
|
* @deprecated use width or height signals
|
|
24
25
|
*/
|
|
@@ -29,7 +30,7 @@ export declare class NodeModel<T = unknown> implements FlowEntity, Contextable<N
|
|
|
29
30
|
/**
|
|
30
31
|
* @deprecated use width$ or height$
|
|
31
32
|
*/
|
|
32
|
-
size$:
|
|
33
|
+
size$: Observable<{
|
|
33
34
|
width: number;
|
|
34
35
|
height: number;
|
|
35
36
|
}>;
|
|
@@ -39,14 +40,14 @@ export declare class NodeModel<T = unknown> implements FlowEntity, Contextable<N
|
|
|
39
40
|
foHeight: import("@angular/core").Signal<number>;
|
|
40
41
|
renderOrder: import("@angular/core").WritableSignal<number>;
|
|
41
42
|
selected: import("@angular/core").WritableSignal<boolean>;
|
|
42
|
-
selected$:
|
|
43
|
+
selected$: Observable<boolean>;
|
|
43
44
|
globalPoint: import("@angular/core").Signal<{
|
|
44
45
|
x: number;
|
|
45
46
|
y: number;
|
|
46
47
|
}>;
|
|
47
48
|
pointTransform: import("@angular/core").Signal<string>;
|
|
48
49
|
handles: import("@angular/core").WritableSignal<HandleModel[]>;
|
|
49
|
-
handles$:
|
|
50
|
+
handles$: Observable<HandleModel[]>;
|
|
50
51
|
draggable: import("@angular/core").WritableSignal<boolean>;
|
|
51
52
|
dragHandlesCount: import("@angular/core").WritableSignal<number>;
|
|
52
53
|
readonly magnetRadius = 20;
|
|
@@ -16,8 +16,11 @@ export declare class NodeToolbarComponent implements OnInit, OnDestroy {
|
|
|
16
16
|
}
|
|
17
17
|
export declare class NodeToolbarWrapperDirective implements OnInit {
|
|
18
18
|
private element;
|
|
19
|
+
private readonly zone;
|
|
20
|
+
private readonly destroyRef;
|
|
19
21
|
model: import("@angular/core").InputSignal<ToolbarModel>;
|
|
20
22
|
ngOnInit(): void;
|
|
23
|
+
private setSize;
|
|
21
24
|
static ɵfac: i0.ɵɵFactoryDeclaration<NodeToolbarWrapperDirective, never>;
|
|
22
25
|
static ɵdir: i0.ɵɵDirectiveDeclaration<NodeToolbarWrapperDirective, "[nodeToolbarWrapper]", never, { "model": { "alias": "model"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
23
26
|
}
|
|
@@ -4,11 +4,7 @@ import { NodeChange } from '../types/node-change.type';
|
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class NodesChangeService {
|
|
6
6
|
protected entitiesService: FlowEntitiesService;
|
|
7
|
-
protected nodesPositionChange$: Observable<
|
|
8
|
-
type: "position";
|
|
9
|
-
id: string;
|
|
10
|
-
point: import("ngx-vflow").Point;
|
|
11
|
-
}[]>;
|
|
7
|
+
protected nodesPositionChange$: Observable<NodeChange[]>;
|
|
12
8
|
protected nodeSizeChange$: Observable<{
|
|
13
9
|
type: "size";
|
|
14
10
|
id: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { WritableSignal, OnInit } from '@angular/core';
|
|
2
2
|
import { Node, DynamicNode } from '../../interfaces/node.interface';
|
|
3
3
|
import { Edge } from '../../interfaces/edge.interface';
|
|
4
|
-
import { Point } from '../../interfaces/point.interface';
|
|
4
|
+
import { SpacePoint, Point } from '../../interfaces/point.interface';
|
|
5
5
|
import { Background } from '../../types/background.type';
|
|
6
6
|
import { Optimization } from '../../interfaces/optimization.interface';
|
|
7
7
|
import { KeyboardShortcuts } from '../../types/keyboard-action.type';
|
|
@@ -13,6 +13,7 @@ import { ConnectionTemplateMockDirective, EdgeLabelHtmlTemplateMockDirective, Ed
|
|
|
13
13
|
import { VflowComponent } from '../../components/vflow/vflow.component';
|
|
14
14
|
import { ConnectionModel } from '../../models/connection.model';
|
|
15
15
|
import { AsInterface } from '../types';
|
|
16
|
+
import { IntersectingNodesOptions } from '../../interfaces/intersecting-nodes-options.interface';
|
|
16
17
|
import * as i0 from "@angular/core";
|
|
17
18
|
import * as i1 from "../../interfaces/connection-settings.interface";
|
|
18
19
|
export declare class VflowMockComponent implements AsInterface<VflowComponent>, OnInit {
|
|
@@ -52,7 +53,14 @@ export declare class VflowMockComponent implements AsInterface<VflowComponent>,
|
|
|
52
53
|
zoomTo(zoom: number): void;
|
|
53
54
|
panTo(point: Point): void;
|
|
54
55
|
fitView(options?: FitViewOptions): void;
|
|
55
|
-
documentPointToFlowPoint(point: Point
|
|
56
|
+
documentPointToFlowPoint(point: Point, options?: {
|
|
57
|
+
spaces: false;
|
|
58
|
+
}): Point;
|
|
59
|
+
documentPointToFlowPoint(point: Point, options: {
|
|
60
|
+
spaces: true;
|
|
61
|
+
}): SpacePoint[];
|
|
62
|
+
getIntesectingNodes(nodeId: string, options?: IntersectingNodesOptions): Node[] | DynamicNode[];
|
|
63
|
+
toNodeSpace(nodeId: string, spaceNodeId: string): Point;
|
|
56
64
|
getNode<T = unknown>(id: string): Node<T> | DynamicNode<T> | undefined;
|
|
57
65
|
getDetachedEdges(): Edge[];
|
|
58
66
|
protected createSignal<T>(value: T): WritableSignal<T>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SpacePoint, Point } from '../interfaces/point.interface';
|
|
2
|
+
import { NodeModel } from '../models/node.model';
|
|
3
|
+
/**
|
|
4
|
+
* @todo handle regular nodes
|
|
5
|
+
*
|
|
6
|
+
* @param point global point in flow coordinates
|
|
7
|
+
* @param groups sorted array of groups
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export declare function getSpacePoints(point: Point, groups: NodeModel[]): SpacePoint[];
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { IntersectingNodesOptions } from '../interfaces/intersecting-nodes-options.interface';
|
|
1
2
|
import { Rect } from '../interfaces/rect';
|
|
2
3
|
import { NodeModel } from '../models/node.model';
|
|
3
4
|
export declare function getNodesBounds(nodes: NodeModel[]): Rect;
|
|
5
|
+
export declare function getIntesectingNodes(nodeId: string, nodes: NodeModel[], options?: IntersectingNodesOptions): NodeModel[];
|
|
6
|
+
export declare function nodeToRect(node: NodeModel): Rect;
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export { ViewportState } from './lib/vflow/interfaces/viewport.interface';
|
|
|
11
11
|
export * from './lib/vflow/interfaces/component-node-event.interface';
|
|
12
12
|
export * from './lib/vflow/interfaces/fit-view-options.interface';
|
|
13
13
|
export * from './lib/vflow/interfaces/optimization.interface';
|
|
14
|
+
export * from './lib/vflow/interfaces/intersecting-nodes-options.interface';
|
|
14
15
|
export * from './lib/vflow/types/node-change.type';
|
|
15
16
|
export * from './lib/vflow/types/edge-change.type';
|
|
16
17
|
export * from './lib/vflow/types/position.type';
|