ngx-vflow 0.4.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.
Files changed (35) hide show
  1. package/esm2022/lib/vflow/components/node/node.component.mjs +12 -6
  2. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +51 -9
  3. package/esm2022/lib/vflow/directives/changes-controller.directive.mjs +115 -14
  4. package/esm2022/lib/vflow/directives/map-context.directive.mjs +7 -6
  5. package/esm2022/lib/vflow/directives/pointer.directive.mjs +84 -0
  6. package/esm2022/lib/vflow/directives/root-pointer.directive.mjs +42 -0
  7. package/esm2022/lib/vflow/directives/root-svg-context.directive.mjs +5 -2
  8. package/esm2022/lib/vflow/directives/selectable.directive.mjs +1 -1
  9. package/esm2022/lib/vflow/directives/space-point-context.directive.mjs +10 -6
  10. package/esm2022/lib/vflow/interfaces/component-node-event.interface.mjs +2 -0
  11. package/esm2022/lib/vflow/interfaces/node.interface.mjs +1 -1
  12. package/esm2022/lib/vflow/models/node.model.mjs +25 -5
  13. package/esm2022/lib/vflow/public-components/custom-node.component.mjs +51 -0
  14. package/esm2022/lib/vflow/services/component-event-bus.service.mjs +18 -0
  15. package/esm2022/lib/vflow/services/draggable.service.mjs +2 -2
  16. package/esm2022/lib/vflow/services/selection.service.mjs +2 -2
  17. package/esm2022/lib/vflow/vflow.module.mjs +9 -3
  18. package/esm2022/public-api.mjs +3 -1
  19. package/fesm2022/ngx-vflow.mjs +397 -42
  20. package/fesm2022/ngx-vflow.mjs.map +1 -1
  21. package/lib/vflow/components/node/node.component.d.ts +10 -9
  22. package/lib/vflow/components/vflow/vflow.component.d.ts +9 -2
  23. package/lib/vflow/directives/changes-controller.directive.d.ts +35 -9
  24. package/lib/vflow/directives/pointer.directive.d.ts +21 -0
  25. package/lib/vflow/directives/root-pointer.directive.d.ts +40 -0
  26. package/lib/vflow/directives/space-point-context.directive.d.ts +13 -3
  27. package/lib/vflow/interfaces/component-node-event.interface.d.ts +32 -0
  28. package/lib/vflow/interfaces/node.interface.d.ts +9 -1
  29. package/lib/vflow/models/node.model.d.ts +14 -1
  30. package/lib/vflow/public-components/custom-node.component.d.ts +20 -0
  31. package/lib/vflow/services/component-event-bus.service.d.ts +9 -0
  32. package/lib/vflow/services/selection.service.d.ts +4 -1
  33. package/lib/vflow/vflow.module.d.ts +5 -3
  34. package/package.json +1 -1
  35. package/public-api.d.ts +2 -0
@@ -1,18 +1,13 @@
1
- import { AfterViewInit, ElementRef, Injector, NgZone, OnDestroy, OnInit, TemplateRef } from '@angular/core';
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
- protected handleService: HandleService;
11
- protected zone: NgZone;
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,12 +15,18 @@ 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;
27
28
  ngOnDestroy(): void;
28
- protected startConnection(event: MouseEvent, handle: HandleModel): void;
29
+ protected startConnection(event: Event, handle: HandleModel): void;
29
30
  protected endConnection(): void;
30
31
  /**
31
32
  * TODO srp
@@ -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;
@@ -102,7 +109,7 @@ export declare class VflowComponent {
102
109
  */
103
110
  readonly nodesChange$: import("rxjs").Observable<NodeChange[]>;
104
111
  /**
105
- * Observable with nodes change
112
+ * Observable with edges change
106
113
  */
107
114
  readonly edgesChange$: import("rxjs").Observable<EdgeChange[]>;
108
115
  protected flowWidth: Signal<string | number>;
@@ -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"; "onEdgesChange": "onEdgesChange"; }; }]>;
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
  }
@@ -1,8 +1,8 @@
1
- import { EventEmitter } from '@angular/core';
2
- import { NodeChange } from '../types/node-change.type';
1
+ import { NodeAddChange, NodeChange, NodePositionChange, NodeRemoveChange, NodeSelectedChange } from '../types/node-change.type';
3
2
  import { EdgeChangesService } from '../services/edge-changes.service';
4
3
  import { NodesChangeService } from '../services/node-changes.service';
5
- import { EdgeChange } from '../types/edge-change.type';
4
+ import { Observable } from 'rxjs';
5
+ import { EdgeAddChange, EdgeChange, EdgeDetachedChange, EdgeRemoveChange, EdgeSelectChange } from '../types/edge-change.type';
6
6
  import * as i0 from "@angular/core";
7
7
  export declare class ChangesControllerDirective {
8
8
  protected nodesChangeService: NodesChangeService;
@@ -10,13 +10,39 @@ export declare class ChangesControllerDirective {
10
10
  /**
11
11
  * Watch nodes change
12
12
  */
13
- onNodesChange: EventEmitter<NodeChange[]>;
13
+ onNodesChange: Observable<NodeChange[]>;
14
+ onNodesChangePosition: Observable<NodePositionChange[]>;
15
+ onNodesChangePositionSignle: Observable<NodePositionChange>;
16
+ onNodesChangePositionMany: Observable<NodePositionChange[]>;
17
+ onNodesChangeAdd: Observable<NodeAddChange[]>;
18
+ onNodesChangeAddSingle: Observable<NodeAddChange>;
19
+ onNodesChangeAddMany: Observable<NodeAddChange[]>;
20
+ onNodesChangeRemove: Observable<NodeRemoveChange[]>;
21
+ onNodesChangeRemoveSingle: Observable<NodeRemoveChange>;
22
+ onNodesChangeRemoveMany: Observable<NodeRemoveChange[]>;
23
+ onNodesChangeSelect: Observable<NodeSelectedChange[]>;
24
+ onNodesChangeSelectSingle: Observable<NodeSelectedChange>;
25
+ onNodesChangeSelectMany: Observable<NodeSelectedChange[]>;
14
26
  /**
15
- * Watch nodes change
27
+ * Watch edges change
16
28
  */
17
- onEdgesChange: EventEmitter<EdgeChange[]>;
18
- protected nodesChangeProxySubscription: import("rxjs").Subscription;
19
- protected edgesChangeProxySubscription: import("rxjs").Subscription;
29
+ onEdgesChange: Observable<EdgeChange[]>;
30
+ onNodesChangeDetached: Observable<EdgeDetachedChange[]>;
31
+ onNodesChangeDetachedSingle: Observable<EdgeDetachedChange>;
32
+ onNodesChangeDetachedMany: Observable<EdgeDetachedChange[]>;
33
+ onEdgesChangeAdd: Observable<EdgeAddChange[]>;
34
+ onEdgeChangeAddSingle: Observable<EdgeAddChange>;
35
+ onEdgeChangeAddMany: Observable<EdgeAddChange[]>;
36
+ onEdgeChangeRemove: Observable<EdgeRemoveChange[]>;
37
+ onEdgeChangeRemoveSingle: Observable<EdgeRemoveChange>;
38
+ onEdgeChangeRemoveMany: Observable<EdgeRemoveChange[]>;
39
+ onEdgeChangeSelect: Observable<EdgeSelectChange[]>;
40
+ onEdgeChangeSelectSingle: Observable<EdgeSelectChange>;
41
+ onEdgeChangeSelectMany: Observable<EdgeSelectChange[]>;
42
+ private nodeChangesOfType;
43
+ private edgeChangesOfType;
44
+ private singleChange;
45
+ private manyChanges;
20
46
  static ɵfac: i0.ɵɵFactoryDeclaration<ChangesControllerDirective, never>;
21
- static ɵdir: i0.ɵɵDirectiveDeclaration<ChangesControllerDirective, "[changesController]", never, {}, { "onNodesChange": "onNodesChange"; "onEdgesChange": "onEdgesChange"; }, never, never, true, never>;
47
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ChangesControllerDirective, "[changesController]", never, {}, { "onNodesChange": "onNodesChange"; "onNodesChangePosition": "onNodesChange.position"; "onNodesChangePositionSignle": "onNodesChange.position.single"; "onNodesChangePositionMany": "onNodesChange.position.many"; "onNodesChangeAdd": "onNodesChange.add"; "onNodesChangeAddSingle": "onNodesChange.add.single"; "onNodesChangeAddMany": "onNodesChange.add.many"; "onNodesChangeRemove": "onNodesChange.remove"; "onNodesChangeRemoveSingle": "onNodesChange.remove.single"; "onNodesChangeRemoveMany": "onNodesChange.remove.many"; "onNodesChangeSelect": "onNodesChange.select"; "onNodesChangeSelectSingle": "onNodesChange.select.single"; "onNodesChangeSelectMany": "onNodesChange.select.many"; "onEdgesChange": "onEdgesChange"; "onNodesChangeDetached": "onEdgesChange.detached"; "onNodesChangeDetachedSingle": "onEdgesChange.detached.single"; "onNodesChangeDetachedMany": "onEdgesChange.detached.many"; "onEdgesChangeAdd": "onEdgesChange.add"; "onEdgeChangeAddSingle": "onEdgesChange.add.single"; "onEdgeChangeAddMany": "onEdgesChange.add.many"; "onEdgeChangeRemove": "onEdgesChange.remove"; "onEdgeChangeRemoveSingle": "onEdgesChange.remove.single"; "onEdgeChangeRemoveMany": "onEdgesChange.remove.many"; "onEdgeChangeSelect": "onEdgesChange.select"; "onEdgeChangeSelectSingle": "onEdgesChange.select.single"; "onEdgeChangeSelectMany": "onEdgesChange.select.many"; }, never, never, true, never>;
22
48
  }
@@ -0,0 +1,21 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { RootPointerDirective } from './root-pointer.directive';
3
+ import * as i0 from "@angular/core";
4
+ export declare class PointerDirective {
5
+ protected hostElement: Element;
6
+ protected pointerMovementDirective: RootPointerDirective;
7
+ protected pointerOver: EventEmitter<Event>;
8
+ protected pointerOut: EventEmitter<Event>;
9
+ protected pointerStart: EventEmitter<Event>;
10
+ protected pointerEnd: EventEmitter<Event>;
11
+ protected onPointerStart(event: Event): void;
12
+ protected onPointerEnd(event: Event): void;
13
+ protected onMouseOver(event: Event): void;
14
+ protected onMouseOut(event: Event): void;
15
+ private wasPointerOver;
16
+ protected touchEnd: import("rxjs").Subscription;
17
+ protected touchOverOut: import("rxjs").Subscription;
18
+ private handleTouchOverAndOut;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<PointerDirective, never>;
20
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PointerDirective, "[pointerStart], [pointerEnd], [pointerOver], [pointerOut]", never, {}, { "pointerOver": "pointerOver"; "pointerOut": "pointerOut"; "pointerStart": "pointerStart"; "pointerEnd": "pointerEnd"; }, never, never, false, never>;
21
+ }
@@ -0,0 +1,40 @@
1
+ import { Observable } from 'rxjs';
2
+ import * as i0 from "@angular/core";
3
+ export declare class RootPointerDirective {
4
+ private host;
5
+ private initialTouch$;
6
+ mouseMovement$: Observable<{
7
+ x: number;
8
+ y: number;
9
+ originalEvent: MouseEvent;
10
+ }>;
11
+ touchMovement$: Observable<{
12
+ x: number;
13
+ y: number;
14
+ target: Element | null;
15
+ originalEvent: TouchEvent;
16
+ }>;
17
+ touchEnd$: Observable<{
18
+ x: number;
19
+ y: number;
20
+ target: Element | null;
21
+ originalEvent: TouchEvent;
22
+ }>;
23
+ pointerMovement$: Observable<{
24
+ x: number;
25
+ y: number;
26
+ originalEvent: MouseEvent;
27
+ } | {
28
+ x: number;
29
+ y: number;
30
+ target: Element | null;
31
+ originalEvent: TouchEvent;
32
+ }>;
33
+ /**
34
+ * We should know when user started a touch in order to not
35
+ * show old touch position when connection creation is started
36
+ */
37
+ setInitialTouch(event: TouchEvent): void;
38
+ static ɵfac: i0.ɵɵFactoryDeclaration<RootPointerDirective, never>;
39
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RootPointerDirective, "svg[rootPointer]", never, {}, {}, never, never, false, never>;
40
+ }
@@ -2,13 +2,23 @@ import { Signal } from '@angular/core';
2
2
  import { Point } from '../interfaces/point.interface';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class SpacePointContextDirective {
5
+ private pointerMovementDirective;
6
+ private rootSvg;
7
+ private host;
5
8
  /**
6
9
  * Signal with current mouse position in svg space
7
10
  */
8
11
  svgCurrentSpacePoint: Signal<Point>;
9
- private rootSvg;
10
- private host;
11
- private mouseMovement;
12
+ pointerMovement: Signal<{
13
+ x: number;
14
+ y: number;
15
+ originalEvent: MouseEvent;
16
+ } | {
17
+ x: number;
18
+ y: number;
19
+ target: Element | null;
20
+ originalEvent: TouchEvent;
21
+ } | undefined>;
12
22
  static ɵfac: i0.ɵɵFactoryDeclaration<SpacePointContextDirective, never>;
13
23
  static ɵdir: i0.ɵɵDirectiveDeclaration<SpacePointContextDirective, "g[spacePointContext]", never, {}, {}, never, never, false, never>;
14
24
  }
@@ -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
- export type Node<T = unknown> = SharedNode & (DefaultNode | HtmlTemplateNode<T>);
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
+ }
@@ -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
- point: import("@angular/core").WritableSignal<{
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
- target: Element;
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;
@@ -12,10 +12,12 @@ import * as i10 from "./directives/reference.directive";
12
12
  import * as i11 from "./directives/root-svg-context.directive";
13
13
  import * as i12 from "./directives/handle-size-controller.directive";
14
14
  import * as i13 from "./directives/selectable.directive";
15
- import * as i14 from "./directives/template.directive";
16
- import * as i15 from "@angular/common";
15
+ import * as i14 from "./directives/pointer.directive";
16
+ import * as i15 from "./directives/root-pointer.directive";
17
+ import * as i16 from "./directives/template.directive";
18
+ import * as i17 from "@angular/common";
17
19
  export declare class VflowModule {
18
20
  static ɵfac: i0.ɵɵFactoryDeclaration<VflowModule, never>;
19
- static ɵmod: i0.ɵɵNgModuleDeclaration<VflowModule, [typeof i1.VflowComponent, typeof i2.NodeComponent, typeof i3.EdgeComponent, typeof i4.EdgeLabelComponent, typeof i5.ConnectionComponent, typeof i6.HandleComponent, typeof i7.DefsComponent, typeof i8.SpacePointContextDirective, typeof i9.MapContextDirective, typeof i10.RootSvgReferenceDirective, typeof i11.RootSvgContextDirective, typeof i12.HandleSizeControllerDirective, typeof i13.SelectableDirective, typeof i14.NodeHtmlTemplateDirective, typeof i14.EdgeLabelHtmlTemplateDirective, typeof i14.EdgeTemplateDirective, typeof i14.ConnectionTemplateDirective, typeof i14.HandleTemplateDirective], [typeof i15.CommonModule], [typeof i1.VflowComponent, typeof i6.HandleComponent, typeof i13.SelectableDirective, typeof i14.NodeHtmlTemplateDirective, typeof i14.EdgeLabelHtmlTemplateDirective, typeof i14.EdgeTemplateDirective, typeof i14.ConnectionTemplateDirective, typeof i14.HandleTemplateDirective]>;
21
+ static ɵmod: i0.ɵɵNgModuleDeclaration<VflowModule, [typeof i1.VflowComponent, typeof i2.NodeComponent, typeof i3.EdgeComponent, typeof i4.EdgeLabelComponent, typeof i5.ConnectionComponent, typeof i6.HandleComponent, typeof i7.DefsComponent, typeof i8.SpacePointContextDirective, typeof i9.MapContextDirective, typeof i10.RootSvgReferenceDirective, typeof i11.RootSvgContextDirective, typeof i12.HandleSizeControllerDirective, typeof i13.SelectableDirective, typeof i14.PointerDirective, typeof i15.RootPointerDirective, typeof i16.NodeHtmlTemplateDirective, typeof i16.EdgeLabelHtmlTemplateDirective, typeof i16.EdgeTemplateDirective, typeof i16.ConnectionTemplateDirective, typeof i16.HandleTemplateDirective], [typeof i17.CommonModule], [typeof i1.VflowComponent, typeof i6.HandleComponent, typeof i13.SelectableDirective, typeof i16.NodeHtmlTemplateDirective, typeof i16.EdgeLabelHtmlTemplateDirective, typeof i16.EdgeTemplateDirective, typeof i16.ConnectionTemplateDirective, typeof i16.HandleTemplateDirective]>;
20
22
  static ɵinj: i0.ɵɵInjectorDeclaration<VflowModule>;
21
23
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-vflow",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://www.ngx-vflow.org/",
6
6
  "author": "Artem Mangilev",
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';