ngx-vflow 1.0.6 → 1.1.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 (52) hide show
  1. package/esm2022/lib/vflow/components/node/node.component.mjs +24 -54
  2. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +5 -11
  3. package/esm2022/lib/vflow/directives/changes-controller.directive.mjs +55 -1
  4. package/esm2022/lib/vflow/directives/connection-controller.directive.mjs +37 -47
  5. package/esm2022/lib/vflow/directives/node-handles-controller.directive.mjs +33 -0
  6. package/esm2022/lib/vflow/directives/node-resize-controller.directive.mjs +35 -0
  7. package/esm2022/lib/vflow/directives/selectable.directive.mjs +2 -2
  8. package/esm2022/lib/vflow/models/handle.model.mjs +33 -33
  9. package/esm2022/lib/vflow/models/node.model.mjs +30 -67
  10. package/esm2022/lib/vflow/public-components/handle/handle.component.mjs +3 -3
  11. package/esm2022/lib/vflow/public-components/resizable/resizable.component.mjs +4 -3
  12. package/esm2022/lib/vflow/services/draggable.service.mjs +2 -2
  13. package/esm2022/lib/vflow/services/flow-status.service.mjs +1 -15
  14. package/esm2022/lib/vflow/services/handle.service.mjs +1 -1
  15. package/esm2022/lib/vflow/testing-utils/component-mocks/handle-mock.component.mjs +22 -0
  16. package/esm2022/lib/vflow/testing-utils/component-mocks/minimap-mock.component.mjs +22 -0
  17. package/esm2022/lib/vflow/testing-utils/component-mocks/node-toolbar-mock.component.mjs +19 -0
  18. package/esm2022/lib/vflow/testing-utils/component-mocks/resizable-mock.component.mjs +21 -0
  19. package/esm2022/lib/vflow/testing-utils/component-mocks/vflow-mock.component.mjs +251 -0
  20. package/esm2022/lib/vflow/testing-utils/directive-mocks/connection-controller-mock.directive.mjs +15 -0
  21. package/esm2022/lib/vflow/testing-utils/directive-mocks/drag-handle-mock.directive.mjs +11 -0
  22. package/esm2022/lib/vflow/testing-utils/directive-mocks/selectable-mock.directive.mjs +14 -0
  23. package/esm2022/lib/vflow/testing-utils/directive-mocks/template-mock.directive.mjs +87 -0
  24. package/esm2022/lib/vflow/testing-utils/provide-custom-node-mocks.mjs +9 -8
  25. package/esm2022/lib/vflow/testing-utils/vflow-mocks.mjs +26 -0
  26. package/esm2022/lib/vflow/vflow.mjs +3 -1
  27. package/esm2022/public-api.mjs +11 -1
  28. package/fesm2022/ngx-vflow.mjs +857 -378
  29. package/fesm2022/ngx-vflow.mjs.map +1 -1
  30. package/lib/vflow/components/node/node.component.d.ts +6 -12
  31. package/lib/vflow/components/vflow/vflow.component.d.ts +4 -5
  32. package/lib/vflow/directives/changes-controller.directive.d.ts +54 -0
  33. package/lib/vflow/directives/connection-controller.directive.d.ts +4 -5
  34. package/lib/vflow/directives/node-handles-controller.directive.d.ts +11 -0
  35. package/lib/vflow/directives/node-resize-controller.directive.d.ts +11 -0
  36. package/lib/vflow/models/handle.model.d.ts +8 -23
  37. package/lib/vflow/models/node.model.d.ts +17 -13
  38. package/lib/vflow/services/flow-status.service.d.ts +0 -6
  39. package/lib/vflow/services/handle.service.d.ts +1 -1
  40. package/lib/vflow/testing-utils/component-mocks/handle-mock.component.d.ts +11 -0
  41. package/lib/vflow/testing-utils/component-mocks/minimap-mock.component.d.ts +10 -0
  42. package/lib/vflow/testing-utils/component-mocks/node-toolbar-mock.component.d.ts +7 -0
  43. package/lib/vflow/testing-utils/component-mocks/resizable-mock.component.d.ts +8 -0
  44. package/lib/vflow/testing-utils/component-mocks/vflow-mock.component.d.ts +48 -0
  45. package/lib/vflow/testing-utils/directive-mocks/connection-controller-mock.directive.d.ts +7 -0
  46. package/lib/vflow/testing-utils/directive-mocks/drag-handle-mock.directive.d.ts +5 -0
  47. package/lib/vflow/testing-utils/directive-mocks/selectable-mock.directive.d.ts +5 -0
  48. package/lib/vflow/testing-utils/directive-mocks/template-mock.directive.d.ts +32 -0
  49. package/lib/vflow/testing-utils/vflow-mocks.d.ts +10 -0
  50. package/lib/vflow/vflow.d.ts +2 -1
  51. package/package.json +1 -1
  52. package/public-api.d.ts +10 -0
@@ -1,11 +1,10 @@
1
- import { AfterViewInit, ElementRef, Injector, OnDestroy, OnInit, TemplateRef } from '@angular/core';
1
+ import { Injector, OnDestroy, OnInit, TemplateRef } from '@angular/core';
2
2
  import { NodeModel } from '../../models/node.model';
3
3
  import { HandleModel } from '../../models/handle.model';
4
- import { WithInjector } from '../../decorators/run-in-injection-context.decorator';
5
4
  import * as i0 from "@angular/core";
6
5
  export type HandleState = 'valid' | 'invalid' | 'idle';
7
- export declare class NodeComponent implements OnInit, AfterViewInit, OnDestroy, WithInjector {
8
- injector: Injector;
6
+ export declare class NodeComponent implements OnInit, OnDestroy {
7
+ protected injector: Injector;
9
8
  private handleService;
10
9
  private draggableService;
11
10
  private flowStatusService;
@@ -13,20 +12,15 @@ export declare class NodeComponent implements OnInit, AfterViewInit, OnDestroy,
13
12
  private flowSettingsService;
14
13
  private selectionService;
15
14
  private hostRef;
16
- private connectionController;
17
15
  private nodeAccessor;
18
16
  private overlaysService;
19
- private zone;
20
- nodeModel: import("@angular/core").InputSignal<NodeModel<unknown>>;
17
+ private connectionController;
18
+ model: import("@angular/core").InputSignal<NodeModel<unknown>>;
21
19
  nodeTemplate: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
22
20
  groupNodeTemplate: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
23
- htmlWrapperRef: import("@angular/core").Signal<ElementRef<HTMLDivElement>>;
24
21
  protected showMagnet: import("@angular/core").Signal<boolean>;
25
- protected styleWidth: import("@angular/core").Signal<string>;
26
- protected styleHeight: import("@angular/core").Signal<string>;
27
22
  protected toolbar: import("@angular/core").Signal<import("../../models/toolbar.model").ToolbarModel | undefined>;
28
23
  ngOnInit(): void;
29
- ngAfterViewInit(): void;
30
24
  ngOnDestroy(): void;
31
25
  protected startConnection(event: Event, handle: HandleModel): void;
32
26
  protected validateConnection(handle: HandleModel): void;
@@ -35,5 +29,5 @@ export declare class NodeComponent implements OnInit, AfterViewInit, OnDestroy,
35
29
  protected pullNode(): void;
36
30
  protected selectNode(): void;
37
31
  static ɵfac: i0.ɵɵFactoryDeclaration<NodeComponent, never>;
38
- static ɵcmp: i0.ɵɵComponentDeclaration<NodeComponent, "g[node]", never, { "nodeModel": { "alias": "nodeModel"; "required": true; "isSignal": true; }; "nodeTemplate": { "alias": "nodeTemplate"; "required": false; "isSignal": true; }; "groupNodeTemplate": { "alias": "groupNodeTemplate"; "required": false; "isSignal": true; }; }, {}, never, never, true, 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>;
39
33
  }
@@ -16,9 +16,8 @@ import { FitViewOptions } from '../../interfaces/fit-view-options.interface';
16
16
  import { Optimization } from '../../interfaces/optimization.interface';
17
17
  import { KeyboardShortcuts } from '../../types/keyboard-action.type';
18
18
  import * as i0 from "@angular/core";
19
- import * as i1 from "../../directives/connection-controller.directive";
20
- import * as i2 from "../../directives/changes-controller.directive";
21
- import * as i3 from "../../interfaces/connection-settings.interface";
19
+ import * as i1 from "../../directives/changes-controller.directive";
20
+ import * as i2 from "../../interfaces/connection-settings.interface";
22
21
  export declare class VflowComponent implements OnInit {
23
22
  private viewportService;
24
23
  private flowEntitiesService;
@@ -154,6 +153,6 @@ export declare class VflowComponent implements OnInit {
154
153
  protected trackEdges(idx: number, { edge }: EdgeModel): Edge<unknown>;
155
154
  private setInitialNodesOrder;
156
155
  static ɵfac: i0.ɵɵFactoryDeclaration<VflowComponent, never>;
157
- 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; }; "nodes": { "alias": "nodes"; "required": true; }; "edges": { "alias": "edges"; "required": false; }; }, { "onComponentNodeEvent": "onComponentNodeEvent"; }, ["nodeTemplateDirective", "groupNodeTemplateDirective", "edgeTemplateDirective", "edgeLabelHtmlDirective", "connectionTemplateDirective"], never, true, [{ 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.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"; }; }]>;
158
- static ngAcceptInputType_connection: i3.ConnectionSettings;
156
+ 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; }; "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"; }; }]>;
157
+ static ngAcceptInputType_connection: i2.ConnectionSettings;
159
158
  }
@@ -11,35 +11,89 @@ export declare class ChangesControllerDirective {
11
11
  */
12
12
  readonly onNodesChange: import("@angular/core").OutputRef<NodeChange[]>;
13
13
  readonly onNodesChangePosition: import("@angular/core").OutputRef<NodePositionChange[]>;
14
+ /**
15
+ * @deprecated use `onNodesChange.position` instead
16
+ */
14
17
  readonly onNodesChangePositionSignle: import("@angular/core").OutputRef<NodePositionChange>;
18
+ /**
19
+ * @deprecated use `onNodesChange.position` instead
20
+ */
15
21
  readonly onNodesChangePositionMany: import("@angular/core").OutputRef<NodePositionChange[]>;
16
22
  readonly onNodesChangeSize: import("@angular/core").OutputRef<NodeSizeChange[]>;
23
+ /**
24
+ * @deprecated use `onNodesChange.size` instead
25
+ */
17
26
  readonly onNodesChangeSizeSingle: import("@angular/core").OutputRef<NodeSizeChange>;
27
+ /**
28
+ * @deprecated use `onNodesChange.size` instead
29
+ */
18
30
  readonly onNodesChangeSizeMany: import("@angular/core").OutputRef<NodeSizeChange[]>;
19
31
  readonly onNodesChangeAdd: import("@angular/core").OutputRef<NodeAddChange[]>;
32
+ /**
33
+ * @deprecated use `onNodesChange.add` instead
34
+ */
20
35
  readonly onNodesChangeAddSingle: import("@angular/core").OutputRef<NodeAddChange>;
36
+ /**
37
+ * @deprecated use `onNodesChange.add` instead
38
+ */
21
39
  readonly onNodesChangeAddMany: import("@angular/core").OutputRef<NodeAddChange[]>;
22
40
  readonly onNodesChangeRemove: import("@angular/core").OutputRef<NodeRemoveChange[]>;
41
+ /**
42
+ * @deprecated use `onNodesChange.remove` instead
43
+ */
23
44
  readonly onNodesChangeRemoveSingle: import("@angular/core").OutputRef<NodeRemoveChange>;
45
+ /**
46
+ * @deprecated use `onNodesChange.remove` instead
47
+ */
24
48
  readonly onNodesChangeRemoveMany: import("@angular/core").OutputRef<NodeRemoveChange[]>;
25
49
  readonly onNodesChangeSelect: import("@angular/core").OutputRef<NodeSelectedChange[]>;
50
+ /**
51
+ * @deprecated use `onNodesChange.select` instead
52
+ */
26
53
  readonly onNodesChangeSelectSingle: import("@angular/core").OutputRef<NodeSelectedChange>;
54
+ /**
55
+ * @deprecated use `onNodesChange.select` instead
56
+ */
27
57
  readonly onNodesChangeSelectMany: import("@angular/core").OutputRef<NodeSelectedChange[]>;
28
58
  /**
29
59
  * Watch edges change
30
60
  */
31
61
  readonly onEdgesChange: import("@angular/core").OutputRef<EdgeChange[]>;
32
62
  readonly onNodesChangeDetached: import("@angular/core").OutputRef<EdgeDetachedChange[]>;
63
+ /**
64
+ * @deprecated use `onEdgesChange.detached` instead
65
+ */
33
66
  readonly onNodesChangeDetachedSingle: import("@angular/core").OutputRef<EdgeDetachedChange>;
67
+ /**
68
+ * @deprecated use `onEdgesChange.detached` instead
69
+ */
34
70
  readonly onNodesChangeDetachedMany: import("@angular/core").OutputRef<EdgeDetachedChange[]>;
35
71
  readonly onEdgesChangeAdd: import("@angular/core").OutputRef<EdgeAddChange[]>;
72
+ /**
73
+ * @deprecated use `onEdgesChange.add` instead
74
+ */
36
75
  readonly onEdgeChangeAddSingle: import("@angular/core").OutputRef<EdgeAddChange>;
76
+ /**
77
+ * @deprecated use `onEdgesChange.add` instead
78
+ */
37
79
  readonly onEdgeChangeAddMany: import("@angular/core").OutputRef<EdgeAddChange[]>;
38
80
  readonly onEdgeChangeRemove: import("@angular/core").OutputRef<EdgeRemoveChange[]>;
81
+ /**
82
+ * @deprecated use `onEdgesChange.remove` instead
83
+ */
39
84
  readonly onEdgeChangeRemoveSingle: import("@angular/core").OutputRef<EdgeRemoveChange>;
85
+ /**
86
+ * @deprecated use `onEdgesChange.remove` instead
87
+ */
40
88
  readonly onEdgeChangeRemoveMany: import("@angular/core").OutputRef<EdgeRemoveChange[]>;
41
89
  readonly onEdgeChangeSelect: import("@angular/core").OutputRef<EdgeSelectChange[]>;
90
+ /**
91
+ * @deprecated use `onEdgesChange.select` instead
92
+ */
42
93
  readonly onEdgeChangeSelectSingle: import("@angular/core").OutputRef<EdgeSelectChange>;
94
+ /**
95
+ * @deprecated use `onEdgesChange.select` instead
96
+ */
43
97
  readonly onEdgeChangeSelectMany: import("@angular/core").OutputRef<EdgeSelectChange[]>;
44
98
  private nodeChangesOfType;
45
99
  private edgeChangesOfType;
@@ -2,6 +2,8 @@ import { Connection } from '../interfaces/connection.interface';
2
2
  import { HandleModel } from '../models/handle.model';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class ConnectionControllerDirective {
5
+ private statusService;
6
+ private flowEntitiesService;
5
7
  /**
6
8
  * This event fires when user tries to create new Edge.
7
9
  *
@@ -12,15 +14,12 @@ export declare class ConnectionControllerDirective {
12
14
  *
13
15
  * @todo add connect event and deprecate onConnect
14
16
  */
15
- readonly onConnect: import("@angular/core").OutputEmitterRef<Connection>;
16
- private statusService;
17
- private flowEntitiesService;
18
- protected connectEffect: import("@angular/core").EffectRef;
17
+ readonly onConnect: import("@angular/core").OutputRef<Connection>;
19
18
  protected isStrictMode: import("@angular/core").Signal<boolean>;
20
19
  startConnection(handle: HandleModel): void;
21
20
  validateConnection(handle: HandleModel): void;
22
21
  resetValidateConnection(targetHandle: HandleModel): void;
23
22
  endConnection(): void;
24
23
  static ɵfac: i0.ɵɵFactoryDeclaration<ConnectionControllerDirective, never>;
25
- static ɵdir: i0.ɵɵDirectiveDeclaration<ConnectionControllerDirective, "[connectionController]", never, {}, { "onConnect": "onConnect"; }, never, never, true, never>;
24
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ConnectionControllerDirective, "[onConnect]", never, {}, { "onConnect": "onConnect"; }, never, never, true, never>;
26
25
  }
@@ -0,0 +1,11 @@
1
+ import { OnInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class NodeHandlesControllerDirective implements OnInit {
4
+ private nodeAccessor;
5
+ private zone;
6
+ private destroyRef;
7
+ private hostElementRef;
8
+ ngOnInit(): void;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<NodeHandlesControllerDirective, never>;
10
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NodeHandlesControllerDirective, "[nodeHandlesController]", never, {}, {}, never, never, true, never>;
11
+ }
@@ -0,0 +1,11 @@
1
+ import { OnInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class NodeResizeControllerDirective implements OnInit {
4
+ private nodeAccessor;
5
+ private zone;
6
+ private destroyRef;
7
+ private hostElementRef;
8
+ ngOnInit(): void;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<NodeResizeControllerDirective, never>;
10
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NodeResizeControllerDirective, "[nodeResizeController]", never, {}, {}, never, never, true, never>;
11
+ }
@@ -13,35 +13,20 @@ export declare class HandleModel {
13
13
  width: number;
14
14
  height: number;
15
15
  }>;
16
- offset: import("@angular/core").Signal<{
17
- x: number;
18
- y: number;
19
- }>;
20
- sizeOffset: import("@angular/core").Signal<{
21
- x: number;
22
- y: number;
23
- }>;
24
16
  pointAbsolute: import("@angular/core").Signal<{
25
17
  x: number;
26
18
  y: number;
27
19
  }>;
28
20
  state: import("@angular/core").WritableSignal<HandleState>;
29
- private updateParentSizeAndPosition$;
30
- parentSize: import("@angular/core").Signal<{
31
- width: number;
32
- height: number;
33
- } | {
34
- readonly width: 0;
35
- readonly height: 0;
36
- }>;
37
- parentPosition: import("@angular/core").Signal<{
21
+ private updateHostSizeAndPosition$;
22
+ private hostSize;
23
+ private hostPosition;
24
+ hostOffset: import("@angular/core").Signal<{
38
25
  x: number;
39
26
  y: number;
40
- } | {
41
- readonly x: 0;
42
- readonly y: 0;
43
27
  }>;
44
- parentReference: Element;
28
+ private sizeOffset;
29
+ hostReference: Element;
45
30
  template: import("@angular/core").TemplateRef<any> | undefined;
46
31
  templateContext: {
47
32
  $implicit: {
@@ -54,6 +39,6 @@ export declare class HandleModel {
54
39
  };
55
40
  };
56
41
  constructor(rawHandle: NodeHandle, parentNode: NodeModel);
57
- updateParent(): void;
58
- private getParentSize;
42
+ updateHost(): void;
43
+ private getHostSize;
59
44
  }
@@ -8,23 +8,29 @@ export declare class NodeModel<T = unknown> implements FlowEntity {
8
8
  private static defaultWidth;
9
9
  private static defaultHeight;
10
10
  private static defaultColor;
11
- private flowSettingsService;
12
11
  private entitiesService;
13
- private internalPoint;
14
- private throttledPoint$;
15
- private notThrottledPoint$;
16
- point: Signal<Point>;
12
+ point: import("@angular/core").WritableSignal<Point>;
17
13
  point$: import("rxjs").Observable<Point>;
18
- size: import("@angular/core").WritableSignal<{
14
+ width: import("@angular/core").WritableSignal<number>;
15
+ width$: import("rxjs").Observable<number>;
16
+ height: import("@angular/core").WritableSignal<number>;
17
+ height$: import("rxjs").Observable<number>;
18
+ /**
19
+ * @deprecated use width or height signals
20
+ */
21
+ size: Signal<{
19
22
  width: number;
20
23
  height: number;
21
24
  }>;
25
+ /**
26
+ * @deprecated use width$ or height$
27
+ */
22
28
  size$: import("rxjs").Observable<{
23
29
  width: number;
24
30
  height: number;
25
31
  }>;
26
- width: Signal<number>;
27
- height: Signal<number>;
32
+ styleWidth: Signal<string>;
33
+ styleHeight: Signal<string>;
28
34
  renderOrder: import("@angular/core").WritableSignal<number>;
29
35
  selected: import("@angular/core").WritableSignal<boolean>;
30
36
  selected$: import("rxjs").Observable<boolean>;
@@ -51,11 +57,9 @@ export declare class NodeModel<T = unknown> implements FlowEntity {
51
57
  resizerTemplate: import("@angular/core").WritableSignal<TemplateRef<unknown> | null>;
52
58
  private parentId;
53
59
  constructor(node: Node<T> | DynamicNode<T>);
54
- setPoint(point: Point, throttle: boolean): void;
55
- /**
56
- * TODO find the way to implement this better
57
- */
58
- linkDefaultNodeSizeWithModelSize(): void;
60
+ setPoint(point: Point): void;
59
61
  private createTextSignal;
60
62
  private createInternalPointSignal;
63
+ private createWidthSignal;
64
+ private createHeightSignal;
61
65
  }
@@ -30,9 +30,3 @@ export declare class FlowStatusService {
30
30
  static ɵfac: i0.ɵɵFactoryDeclaration<FlowStatusService, never>;
31
31
  static ɵprov: i0.ɵɵInjectableDeclaration<FlowStatusService>;
32
32
  }
33
- /**
34
- * Batch status changes together to call them one after another
35
- *
36
- * @param changes list of set[FlowStatus.state]Status() calls
37
- */
38
- export declare function batchStatusChanges(...changes: (() => void)[]): void;
@@ -8,7 +8,7 @@ export interface NodeHandle {
8
8
  position: Position;
9
9
  type: HandleType;
10
10
  id?: string;
11
- parentReference?: Element;
11
+ hostReference?: Element;
12
12
  template?: TemplateRef<any>;
13
13
  }
14
14
  export declare class HandleService {
@@ -0,0 +1,11 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { Position } from '../../types/position.type';
3
+ import * as i0 from "@angular/core";
4
+ export declare class HandleMockComponent {
5
+ position: import("@angular/core").InputSignal<Position>;
6
+ type: import("@angular/core").InputSignal<"source" | "target">;
7
+ id: import("@angular/core").InputSignal<string | undefined>;
8
+ template: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<HandleMockComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<HandleMockComponent, "handle", never, { "position": { "alias": "position"; "required": true; "isSignal": true; }; "type": { "alias": "type"; "required": true; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "template": { "alias": "template"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
11
+ }
@@ -0,0 +1,10 @@
1
+ import { MiniMapPosition } from '../../public-components/minimap/minimap.component';
2
+ import * as i0 from "@angular/core";
3
+ export declare class MiniMapMockComponent {
4
+ maskColor: import("@angular/core").InputSignal<string>;
5
+ strokeColor: import("@angular/core").InputSignal<string>;
6
+ position: import("@angular/core").InputSignal<MiniMapPosition>;
7
+ scaleOnHover: import("@angular/core").InputSignal<boolean>;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<MiniMapMockComponent, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<MiniMapMockComponent, "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>;
10
+ }
@@ -0,0 +1,7 @@
1
+ import { Position } from '../../types/position.type';
2
+ import * as i0 from "@angular/core";
3
+ export declare class NodeToolbarMockComponent {
4
+ position: import("@angular/core").InputSignal<Position>;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<NodeToolbarMockComponent, never>;
6
+ static ɵcmp: i0.ɵɵComponentDeclaration<NodeToolbarMockComponent, "node-toolbar", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
7
+ }
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class ResizableMockComponent {
3
+ resizable: import("@angular/core").InputSignal<boolean | "" | undefined>;
4
+ resizerColor: import("@angular/core").InputSignal<string>;
5
+ gap: import("@angular/core").InputSignal<number>;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<ResizableMockComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<ResizableMockComponent, "[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>;
8
+ }
@@ -0,0 +1,48 @@
1
+ import { WritableSignal } from '@angular/core';
2
+ import { Node, DynamicNode } from '../../interfaces/node.interface';
3
+ import { Edge } from '../../interfaces/edge.interface';
4
+ import { Point } from '../../interfaces/point.interface';
5
+ import { Background } from '../../types/background.type';
6
+ import { Optimization } from '../../interfaces/optimization.interface';
7
+ import { KeyboardShortcuts } from '../../types/keyboard-action.type';
8
+ import { ConnectionSettings } from '../../interfaces/connection-settings.interface';
9
+ import { ViewportState } from '../../interfaces/viewport.interface';
10
+ import { NodeChange } from '../../types/node-change.type';
11
+ import { EdgeChange } from '../../types/edge-change.type';
12
+ import { FitViewOptions } from '../../interfaces/fit-view-options.interface';
13
+ import { ConnectionTemplateMockDirective, EdgeLabelHtmlTemplateMockDirective, EdgeTemplateMockDirective, GroupNodeTemplateMockDirective, NodeHtmlTemplateMockDirective } from '../directive-mocks/template-mock.directive';
14
+ import * as i0 from "@angular/core";
15
+ export declare class VflowMockComponent {
16
+ readonly nodes: import("@angular/core").InputSignal<Node[] | DynamicNode[]>;
17
+ readonly edges: import("@angular/core").InputSignal<Edge<unknown>[]>;
18
+ readonly view: import("@angular/core").InputSignal<[number, number] | "auto">;
19
+ readonly minZoom: import("@angular/core").InputSignal<number>;
20
+ readonly maxZoom: import("@angular/core").InputSignal<number>;
21
+ readonly background: import("@angular/core").InputSignal<string | Background>;
22
+ readonly optimization: import("@angular/core").InputSignal<Optimization>;
23
+ readonly entitiesSelectable: import("@angular/core").InputSignal<boolean>;
24
+ readonly keyboardShortcuts: import("@angular/core").InputSignal<KeyboardShortcuts>;
25
+ readonly connection: import("@angular/core").InputSignal<ConnectionSettings | undefined>;
26
+ readonly onComponentNodeEvent: import("@angular/core").OutputEmitterRef<any>;
27
+ protected nodeTemplateDirective: import("@angular/core").Signal<NodeHtmlTemplateMockDirective | undefined>;
28
+ protected groupNodeTemplateDirective: import("@angular/core").Signal<GroupNodeTemplateMockDirective | undefined>;
29
+ protected edgeTemplateDirective: import("@angular/core").Signal<EdgeTemplateMockDirective | undefined>;
30
+ protected edgeLabelHtmlDirective: import("@angular/core").Signal<EdgeLabelHtmlTemplateMockDirective | undefined>;
31
+ protected connectionTemplateDirective: import("@angular/core").Signal<ConnectionTemplateMockDirective | undefined>;
32
+ viewport: WritableSignal<ViewportState>;
33
+ nodesChange: WritableSignal<NodeChange[]>;
34
+ edgesChange: WritableSignal<EdgeChange[]>;
35
+ viewportChange$: import("rxjs").Observable<ViewportState>;
36
+ nodesChange$: import("rxjs").Observable<NodeChange[]>;
37
+ edgesChange$: import("rxjs").Observable<EdgeChange[]>;
38
+ viewportTo(viewport: ViewportState): void;
39
+ zoomTo(zoom: number): void;
40
+ panTo(point: Point): void;
41
+ fitView(options?: FitViewOptions): void;
42
+ documentPointToFlowPoint(point: Point): Point;
43
+ getNode<T = unknown>(id: string): Node<T> | DynamicNode<T> | undefined;
44
+ getDetachedEdges(): Edge[];
45
+ protected createSignal<T>(value: T): WritableSignal<T>;
46
+ static ɵfac: i0.ɵɵFactoryDeclaration<VflowMockComponent, never>;
47
+ static ɵcmp: i0.ɵɵComponentDeclaration<VflowMockComponent, "vflow", never, { "nodes": { "alias": "nodes"; "required": true; "isSignal": true; }; "edges": { "alias": "edges"; "required": true; "isSignal": true; }; "view": { "alias": "view"; "required": false; "isSignal": true; }; "minZoom": { "alias": "minZoom"; "required": false; "isSignal": true; }; "maxZoom": { "alias": "maxZoom"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "optimization": { "alias": "optimization"; "required": false; "isSignal": true; }; "entitiesSelectable": { "alias": "entitiesSelectable"; "required": false; "isSignal": true; }; "keyboardShortcuts": { "alias": "keyboardShortcuts"; "required": false; "isSignal": true; }; "connection": { "alias": "connection"; "required": false; "isSignal": true; }; }, { "onComponentNodeEvent": "onComponentNodeEvent"; }, ["nodeTemplateDirective", "groupNodeTemplateDirective", "edgeTemplateDirective", "edgeLabelHtmlDirective", "connectionTemplateDirective"], ["*"], true, never>;
48
+ }
@@ -0,0 +1,7 @@
1
+ import { Connection } from '../../interfaces/connection.interface';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ConnectionControllerMockDirective {
4
+ readonly onConnect: import("@angular/core").OutputEmitterRef<Connection>;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConnectionControllerMockDirective, never>;
6
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ConnectionControllerMockDirective, "[onConnect]", never, {}, { "onConnect": "onConnect"; }, never, never, true, never>;
7
+ }
@@ -0,0 +1,5 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class DragHandleMockDirective {
3
+ static ɵfac: i0.ɵɵFactoryDeclaration<DragHandleMockDirective, never>;
4
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DragHandleMockDirective, "[dragHandle]", never, {}, {}, never, never, true, never>;
5
+ }
@@ -0,0 +1,5 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class SelectableMockDirective {
3
+ static ɵfac: i0.ɵɵFactoryDeclaration<SelectableMockDirective, never>;
4
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SelectableMockDirective, "[selectable]", never, {}, {}, never, never, true, never>;
5
+ }
@@ -0,0 +1,32 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class EdgeTemplateMockDirective {
4
+ templateRef: TemplateRef<any>;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<EdgeTemplateMockDirective, never>;
6
+ static ɵdir: i0.ɵɵDirectiveDeclaration<EdgeTemplateMockDirective, "ng-template[edge]", never, {}, {}, never, never, true, never>;
7
+ }
8
+ export declare class ConnectionTemplateMockDirective {
9
+ templateRef: TemplateRef<any>;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConnectionTemplateMockDirective, never>;
11
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ConnectionTemplateMockDirective, "ng-template[connection]", never, {}, {}, never, never, true, never>;
12
+ }
13
+ export declare class EdgeLabelHtmlTemplateMockDirective {
14
+ templateRef: TemplateRef<any>;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<EdgeLabelHtmlTemplateMockDirective, never>;
16
+ static ɵdir: i0.ɵɵDirectiveDeclaration<EdgeLabelHtmlTemplateMockDirective, "ng-template[edgeLabelHtml]", never, {}, {}, never, never, true, never>;
17
+ }
18
+ export declare class NodeHtmlTemplateMockDirective {
19
+ templateRef: TemplateRef<any>;
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<NodeHtmlTemplateMockDirective, never>;
21
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NodeHtmlTemplateMockDirective, "ng-template[nodeHtml]", never, {}, {}, never, never, true, never>;
22
+ }
23
+ export declare class GroupNodeTemplateMockDirective {
24
+ templateRef: TemplateRef<any>;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<GroupNodeTemplateMockDirective, never>;
26
+ static ɵdir: i0.ɵɵDirectiveDeclaration<GroupNodeTemplateMockDirective, "ng-template[groupNode]", never, {}, {}, never, never, true, never>;
27
+ }
28
+ export declare class HandleTemplateMockDirective {
29
+ templateRef: TemplateRef<any>;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<HandleTemplateMockDirective, never>;
31
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HandleTemplateMockDirective, "ng-template[handle]", never, {}, {}, never, never, true, never>;
32
+ }
@@ -0,0 +1,10 @@
1
+ import { HandleMockComponent } from './component-mocks/handle-mock.component';
2
+ import { MiniMapMockComponent } from './component-mocks/minimap-mock.component';
3
+ import { NodeToolbarMockComponent } from './component-mocks/node-toolbar-mock.component';
4
+ import { ResizableMockComponent } from './component-mocks/resizable-mock.component';
5
+ import { VflowMockComponent } from './component-mocks/vflow-mock.component';
6
+ import { ConnectionControllerMockDirective } from './directive-mocks/connection-controller-mock.directive';
7
+ import { DragHandleMockDirective } from './directive-mocks/drag-handle-mock.directive';
8
+ import { SelectableMockDirective } from './directive-mocks/selectable-mock.directive';
9
+ import { ConnectionTemplateMockDirective, EdgeLabelHtmlTemplateMockDirective, EdgeTemplateMockDirective, GroupNodeTemplateMockDirective, HandleTemplateMockDirective, NodeHtmlTemplateMockDirective } from './directive-mocks/template-mock.directive';
10
+ export declare const VflowMocks: readonly [typeof VflowMockComponent, typeof HandleMockComponent, typeof ResizableMockComponent, typeof SelectableMockDirective, typeof MiniMapMockComponent, typeof NodeToolbarMockComponent, typeof DragHandleMockDirective, typeof ConnectionControllerMockDirective, typeof NodeHtmlTemplateMockDirective, typeof GroupNodeTemplateMockDirective, typeof EdgeLabelHtmlTemplateMockDirective, typeof EdgeTemplateMockDirective, typeof ConnectionTemplateMockDirective, typeof HandleTemplateMockDirective];
@@ -6,4 +6,5 @@ import { MiniMapComponent } from './public-components/minimap/minimap.component'
6
6
  import { NodeToolbarComponent } from './public-components/node-toolbar/node-toolbar.component';
7
7
  import { ResizableComponent } from './public-components/resizable/resizable.component';
8
8
  import { HandleComponent } from './public-components/handle/handle.component';
9
- export declare const Vflow: readonly [typeof VflowComponent, typeof HandleComponent, typeof ResizableComponent, typeof SelectableDirective, typeof MiniMapComponent, typeof NodeToolbarComponent, typeof DragHandleDirective, typeof NodeHtmlTemplateDirective, typeof GroupNodeTemplateDirective, typeof EdgeLabelHtmlTemplateDirective, typeof EdgeTemplateDirective, typeof ConnectionTemplateDirective, typeof HandleTemplateDirective];
9
+ import { ConnectionControllerDirective } from './directives/connection-controller.directive';
10
+ export declare const Vflow: readonly [typeof VflowComponent, typeof HandleComponent, typeof ResizableComponent, typeof SelectableDirective, typeof MiniMapComponent, typeof NodeToolbarComponent, typeof DragHandleDirective, typeof ConnectionControllerDirective, typeof NodeHtmlTemplateDirective, typeof GroupNodeTemplateDirective, typeof EdgeLabelHtmlTemplateDirective, typeof EdgeTemplateDirective, typeof ConnectionTemplateDirective, typeof HandleTemplateDirective];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-vflow",
3
- "version": "1.0.6",
3
+ "version": "1.1.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://www.ngx-vflow.org/",
6
6
  "author": "Artem Mangilev",
package/public-api.d.ts CHANGED
@@ -30,3 +30,13 @@ export * from './lib/vflow/directives/changes-controller.directive';
30
30
  export * from './lib/vflow/directives/selectable.directive';
31
31
  export * from './lib/vflow/directives/drag-handle.directive';
32
32
  export * from './lib/vflow/testing-utils/provide-custom-node-mocks';
33
+ export * from './lib/vflow/testing-utils/component-mocks/vflow-mock.component';
34
+ export * from './lib/vflow/testing-utils/component-mocks/handle-mock.component';
35
+ export * from './lib/vflow/testing-utils/component-mocks/resizable-mock.component';
36
+ export * from './lib/vflow/testing-utils/component-mocks/minimap-mock.component';
37
+ export * from './lib/vflow/testing-utils/component-mocks/node-toolbar-mock.component';
38
+ export * from './lib/vflow/testing-utils/directive-mocks/connection-controller-mock.directive';
39
+ export * from './lib/vflow/testing-utils/directive-mocks/drag-handle-mock.directive';
40
+ export * from './lib/vflow/testing-utils/directive-mocks/selectable-mock.directive';
41
+ export * from './lib/vflow/testing-utils/directive-mocks/template-mock.directive';
42
+ export * from './lib/vflow/testing-utils/vflow-mocks';