ngx-vflow 0.5.0 → 0.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/node/node.component.mjs +11 -6
- package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +19 -5
- package/esm2022/lib/vflow/directives/map-context.directive.mjs +7 -6
- package/esm2022/lib/vflow/interfaces/component-node-event.interface.mjs +2 -0
- package/esm2022/lib/vflow/interfaces/node.interface.mjs +1 -1
- package/esm2022/lib/vflow/models/node.model.mjs +25 -5
- package/esm2022/lib/vflow/public-components/custom-node.component.mjs +51 -0
- package/esm2022/lib/vflow/services/component-event-bus.service.mjs +18 -0
- package/esm2022/lib/vflow/services/draggable.service.mjs +2 -2
- package/esm2022/lib/vflow/services/selection.service.mjs +2 -2
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/ngx-vflow.mjs +118 -21
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/node/node.component.d.ts +9 -8
- package/lib/vflow/components/vflow/vflow.component.d.ts +8 -1
- package/lib/vflow/directives/space-point-context.directive.d.ts +3 -3
- package/lib/vflow/interfaces/component-node-event.interface.d.ts +32 -0
- package/lib/vflow/interfaces/node.interface.d.ts +9 -1
- package/lib/vflow/models/edge.model.d.ts +17 -1
- package/lib/vflow/models/node.model.d.ts +14 -1
- package/lib/vflow/public-components/custom-node.component.d.ts +20 -0
- package/lib/vflow/services/component-event-bus.service.d.ts +9 -0
- package/lib/vflow/services/selection.service.d.ts +4 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
import { AfterViewInit, ElementRef, Injector,
|
|
1
|
+
import { AfterViewInit, ElementRef, Injector, OnDestroy, OnInit, TemplateRef } from '@angular/core';
|
|
2
2
|
import { NodeModel } from '../../models/node.model';
|
|
3
|
-
import { HandleService } from '../../services/handle.service';
|
|
4
3
|
import { HandleModel } from '../../models/handle.model';
|
|
5
4
|
import { WithInjector } from '../../decorators/run-in-injection-context.decorator';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
6
|
export type HandleState = 'valid' | 'invalid' | 'idle';
|
|
8
7
|
export declare class NodeComponent implements OnInit, AfterViewInit, OnDestroy, WithInjector {
|
|
9
8
|
injector: Injector;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
nodeModel: NodeModel;
|
|
13
|
-
nodeHtmlTemplate?: TemplateRef<any>;
|
|
14
|
-
nodeContentRef: ElementRef<SVGGraphicsElement>;
|
|
15
|
-
htmlWrapperRef: ElementRef<HTMLDivElement>;
|
|
9
|
+
private handleService;
|
|
10
|
+
private zone;
|
|
16
11
|
private draggableService;
|
|
17
12
|
private flowStatusService;
|
|
18
13
|
private flowEntitiesService;
|
|
@@ -20,7 +15,13 @@ export declare class NodeComponent implements OnInit, AfterViewInit, OnDestroy,
|
|
|
20
15
|
private flowSettingsService;
|
|
21
16
|
private selectionService;
|
|
22
17
|
private hostRef;
|
|
18
|
+
nodeModel: NodeModel;
|
|
19
|
+
nodeHtmlTemplate?: TemplateRef<any>;
|
|
20
|
+
nodeContentRef: ElementRef<SVGGraphicsElement>;
|
|
21
|
+
htmlWrapperRef: ElementRef<HTMLDivElement>;
|
|
23
22
|
protected showMagnet: import("@angular/core").Signal<boolean>;
|
|
23
|
+
protected styleWidth: import("@angular/core").Signal<string>;
|
|
24
|
+
protected styleHeight: import("@angular/core").Signal<string>;
|
|
24
25
|
private subscription;
|
|
25
26
|
ngOnInit(): void;
|
|
26
27
|
ngAfterViewInit(): void;
|
|
@@ -22,6 +22,7 @@ export declare class VflowComponent {
|
|
|
22
22
|
private edgesChangeService;
|
|
23
23
|
private nodeRenderingService;
|
|
24
24
|
private flowSettingsService;
|
|
25
|
+
private componentEventBusService;
|
|
25
26
|
private injector;
|
|
26
27
|
/**
|
|
27
28
|
* Size for flow view
|
|
@@ -76,6 +77,12 @@ export declare class VflowComponent {
|
|
|
76
77
|
*/
|
|
77
78
|
set edges(newEdges: Edge[]);
|
|
78
79
|
protected edgeModels: Signal<EdgeModel[]>;
|
|
80
|
+
/**
|
|
81
|
+
* Event that accumulates all custom node events
|
|
82
|
+
*
|
|
83
|
+
* @experimental
|
|
84
|
+
*/
|
|
85
|
+
onComponentNodeEvent: any;
|
|
79
86
|
protected nodeHtmlDirective?: NodeHtmlTemplateDirective;
|
|
80
87
|
protected edgeTemplateDirective?: EdgeTemplateDirective;
|
|
81
88
|
protected edgeLabelHtmlDirective?: EdgeLabelHtmlTemplateDirective;
|
|
@@ -139,6 +146,6 @@ export declare class VflowComponent {
|
|
|
139
146
|
protected trackNodes(idx: number, { node }: NodeModel): Node<unknown>;
|
|
140
147
|
protected trackEdges(idx: number, { edge }: EdgeModel): Edge<unknown>;
|
|
141
148
|
static ɵfac: i0.ɵɵFactoryDeclaration<VflowComponent, never>;
|
|
142
|
-
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; }; }, {}, ["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"; }; }]>;
|
|
149
|
+
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"; }; }]>;
|
|
143
150
|
static ngAcceptInputType_connection: i3.ConnectionSettings;
|
|
144
151
|
}
|
|
@@ -12,12 +12,12 @@ export declare class SpacePointContextDirective {
|
|
|
12
12
|
pointerMovement: Signal<{
|
|
13
13
|
x: number;
|
|
14
14
|
y: number;
|
|
15
|
-
|
|
16
|
-
originalEvent: TouchEvent;
|
|
15
|
+
originalEvent: MouseEvent;
|
|
17
16
|
} | {
|
|
18
17
|
x: number;
|
|
19
18
|
y: number;
|
|
20
|
-
|
|
19
|
+
target: Element | null;
|
|
20
|
+
originalEvent: TouchEvent;
|
|
21
21
|
} | undefined>;
|
|
22
22
|
static ɵfac: i0.ɵɵFactoryDeclaration<SpacePointContextDirective, never>;
|
|
23
23
|
static ɵdir: i0.ɵɵDirectiveDeclaration<SpacePointContextDirective, "g[spacePointContext]", never, {}, {}, never, never, false, never>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { EventEmitter } from "@angular/core";
|
|
2
|
+
import { CustomNodeComponent } from "../public-components/custom-node.component";
|
|
3
|
+
type EventInfo<T> = T extends EventEmitter<infer U> ? U : never;
|
|
4
|
+
type EventKeys<T> = {
|
|
5
|
+
[K in keyof T]: T[K] extends EventEmitter<any> ? K : never;
|
|
6
|
+
}[keyof T];
|
|
7
|
+
type EventShape<T, K extends keyof T> = {
|
|
8
|
+
[P in K]: {
|
|
9
|
+
eventName: P;
|
|
10
|
+
eventPayload: EventInfo<T[P]>;
|
|
11
|
+
};
|
|
12
|
+
}[K];
|
|
13
|
+
type EventsFromComponent<T> = EventShape<T, EventKeys<T>>;
|
|
14
|
+
/**
|
|
15
|
+
* Event of custom component node
|
|
16
|
+
*
|
|
17
|
+
* Generic accepts array of custom components and merge their event emitters for type-safe
|
|
18
|
+
* event handling
|
|
19
|
+
*
|
|
20
|
+
* @experimental
|
|
21
|
+
*/
|
|
22
|
+
export type ComponentNodeEvent<T extends CustomNodeComponent[]> = {
|
|
23
|
+
nodeId: string;
|
|
24
|
+
} & {
|
|
25
|
+
[I in keyof T]: EventsFromComponent<T[I]>;
|
|
26
|
+
}[number];
|
|
27
|
+
export type AnyComponentNodeEvent = {
|
|
28
|
+
nodeId: string;
|
|
29
|
+
eventName: string;
|
|
30
|
+
eventPayload: unknown;
|
|
31
|
+
};
|
|
32
|
+
export {};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { Type } from "@angular/core";
|
|
1
2
|
import { Point } from "./point.interface";
|
|
2
|
-
|
|
3
|
+
import { CustomNodeComponent } from "../public-components/custom-node.component";
|
|
4
|
+
export type Node<T = unknown> = SharedNode & (DefaultNode | HtmlTemplateNode<T> | ComponentNode<T>);
|
|
3
5
|
export interface SharedNode {
|
|
4
6
|
id: string;
|
|
5
7
|
point: Point;
|
|
@@ -8,8 +10,14 @@ export interface SharedNode {
|
|
|
8
10
|
export interface DefaultNode {
|
|
9
11
|
type: 'default';
|
|
10
12
|
text?: string;
|
|
13
|
+
width?: number;
|
|
14
|
+
height?: number;
|
|
11
15
|
}
|
|
12
16
|
export interface HtmlTemplateNode<T = unknown> {
|
|
13
17
|
type: 'html-template';
|
|
14
18
|
data?: T;
|
|
15
19
|
}
|
|
20
|
+
export interface ComponentNode<T = unknown> {
|
|
21
|
+
type: Type<CustomNodeComponent<T>>;
|
|
22
|
+
data?: T;
|
|
23
|
+
}
|
|
@@ -14,7 +14,23 @@ export declare class EdgeModel implements FlowEntity {
|
|
|
14
14
|
selected$: import("rxjs").Observable<boolean>;
|
|
15
15
|
detached: import("@angular/core").Signal<boolean>;
|
|
16
16
|
detached$: import("rxjs").Observable<boolean>;
|
|
17
|
-
path: import("@angular/core").Signal<
|
|
17
|
+
path: import("@angular/core").Signal<{
|
|
18
|
+
path: string;
|
|
19
|
+
points: {
|
|
20
|
+
start: {
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
};
|
|
24
|
+
center: {
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
};
|
|
28
|
+
end: {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
}>;
|
|
18
34
|
edgeLabels: {
|
|
19
35
|
[position in EdgeLabelPosition]?: EdgeLabelModel;
|
|
20
36
|
};
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { Node } from '../interfaces/node.interface';
|
|
2
2
|
import { HandleModel } from './handle.model';
|
|
3
3
|
import { FlowEntity } from '../interfaces/flow-entity.interface';
|
|
4
|
+
import { Point } from '../interfaces/point.interface';
|
|
4
5
|
export declare class NodeModel<T = unknown> implements FlowEntity {
|
|
5
6
|
node: Node<T>;
|
|
7
|
+
static defaultTypeSize: {
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
};
|
|
6
11
|
private flowSettingsService;
|
|
7
|
-
|
|
12
|
+
private internalPoint$;
|
|
13
|
+
private throttledPoint$;
|
|
14
|
+
point: import("@angular/core").Signal<{
|
|
8
15
|
x: number;
|
|
9
16
|
y: number;
|
|
10
17
|
}>;
|
|
@@ -26,5 +33,11 @@ export declare class NodeModel<T = unknown> implements FlowEntity {
|
|
|
26
33
|
handles$: import("rxjs").Observable<HandleModel[]>;
|
|
27
34
|
draggable: boolean;
|
|
28
35
|
readonly magnetRadius = 20;
|
|
36
|
+
isComponentType: boolean;
|
|
37
|
+
componentTypeInputs: import("@angular/core").Signal<{
|
|
38
|
+
node: Node<T>;
|
|
39
|
+
_selected: boolean;
|
|
40
|
+
}>;
|
|
29
41
|
constructor(node: Node<T>);
|
|
42
|
+
setPoint(point: Point): void;
|
|
30
43
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DestroyRef, OnInit } from "@angular/core";
|
|
2
|
+
import { ComponentNode, SharedNode } from '../interfaces/node.interface';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare abstract class CustomNodeComponent<T = unknown> implements OnInit {
|
|
5
|
+
private eventBus;
|
|
6
|
+
protected destroyRef: DestroyRef;
|
|
7
|
+
/**
|
|
8
|
+
* Reference to node bound to this component
|
|
9
|
+
*/
|
|
10
|
+
node: SharedNode & ComponentNode<T>;
|
|
11
|
+
set _selected(value: boolean);
|
|
12
|
+
/**
|
|
13
|
+
* Signal with selected state of node
|
|
14
|
+
*/
|
|
15
|
+
selected: import("@angular/core").WritableSignal<boolean>;
|
|
16
|
+
ngOnInit(): void;
|
|
17
|
+
private trackEvents;
|
|
18
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CustomNodeComponent<any>, never>;
|
|
19
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CustomNodeComponent<any>, never, never, { "node": { "alias": "node"; "required": false; }; "_selected": { "alias": "_selected"; "required": false; }; }, {}, never, never, false, never>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AnyComponentNodeEvent } from '../interfaces/component-node-event.interface';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class ComponentEventBusService {
|
|
4
|
+
private _event$;
|
|
5
|
+
event$: import("rxjs").Observable<AnyComponentNodeEvent>;
|
|
6
|
+
pushEvent(event: AnyComponentNodeEvent): void;
|
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ComponentEventBusService, never>;
|
|
8
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ComponentEventBusService>;
|
|
9
|
+
}
|
|
@@ -5,7 +5,10 @@ import * as i0 from "@angular/core";
|
|
|
5
5
|
export interface ViewportForSelection {
|
|
6
6
|
start: ViewportState;
|
|
7
7
|
end: ViewportState;
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Target may not exist if viewport change made programmatically
|
|
10
|
+
*/
|
|
11
|
+
target?: Element;
|
|
9
12
|
}
|
|
10
13
|
export declare class SelectionService {
|
|
11
14
|
private static delta;
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -9,11 +9,13 @@ export * from './lib/vflow/interfaces/connection-settings.interface';
|
|
|
9
9
|
export * from './lib/vflow/interfaces/handle-positions.interface';
|
|
10
10
|
export * from './lib/vflow/interfaces/marker.interface';
|
|
11
11
|
export { ViewportState } from './lib/vflow/interfaces/viewport.interface';
|
|
12
|
+
export * from './lib/vflow/interfaces/component-node-event.interface';
|
|
12
13
|
export * from './lib/vflow/types/node-change.type';
|
|
13
14
|
export * from './lib/vflow/types/edge-change.type';
|
|
14
15
|
export * from './lib/vflow/types/position.type';
|
|
15
16
|
export * from './lib/vflow/components/vflow/vflow.component';
|
|
16
17
|
export * from './lib/vflow/components/handle/handle.component';
|
|
18
|
+
export * from './lib/vflow/public-components/custom-node.component';
|
|
17
19
|
export * from './lib/vflow/directives/template.directive';
|
|
18
20
|
export * from './lib/vflow/directives/connection-controller.directive';
|
|
19
21
|
export * from './lib/vflow/directives/changes-controller.directive';
|