ngx-vflow 1.13.2 → 1.15.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 (34) hide show
  1. package/esm2022/lib/vflow/components/node/node.component.mjs +5 -4
  2. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +7 -1
  3. package/esm2022/lib/vflow/interfaces/flow-entity.interface.mjs +1 -1
  4. package/esm2022/lib/vflow/interfaces/node.interface.mjs +13 -5
  5. package/esm2022/lib/vflow/interfaces/optimization.interface.mjs +2 -1
  6. package/esm2022/lib/vflow/interfaces/template-context.interface.mjs +1 -1
  7. package/esm2022/lib/vflow/models/edge.model.mjs +4 -9
  8. package/esm2022/lib/vflow/models/node.model.mjs +51 -7
  9. package/esm2022/lib/vflow/services/edge-rendering.service.mjs +1 -1
  10. package/esm2022/lib/vflow/services/flow-rendering.service.mjs +41 -0
  11. package/esm2022/lib/vflow/utils/is-callable.mjs +10 -0
  12. package/esm2022/lib/vflow/utils/is-vflow-component.mjs +9 -0
  13. package/esm2022/public-api.mjs +2 -1
  14. package/esm2022/testing/component-mocks/vflow-mock.component.mjs +3 -1
  15. package/esm2022/testing/provide-custom-node-mocks.mjs +3 -2
  16. package/fesm2022/ngx-vflow-testing.mjs +4 -1
  17. package/fesm2022/ngx-vflow-testing.mjs.map +1 -1
  18. package/fesm2022/ngx-vflow.mjs +267 -167
  19. package/fesm2022/ngx-vflow.mjs.map +1 -1
  20. package/lib/vflow/components/vflow/vflow.component.d.ts +3 -0
  21. package/lib/vflow/interfaces/flow-entity.interface.d.ts +2 -1
  22. package/lib/vflow/interfaces/node.interface.d.ts +2 -2
  23. package/lib/vflow/interfaces/optimization.interface.d.ts +4 -0
  24. package/lib/vflow/interfaces/template-context.interface.d.ts +4 -0
  25. package/lib/vflow/models/edge.model.d.ts +2 -0
  26. package/lib/vflow/models/node.model.d.ts +4 -0
  27. package/lib/vflow/public-components/custom-template-edge/custom-template-edge.component.d.ts +1 -0
  28. package/lib/vflow/services/edge-rendering.service.d.ts +1 -1
  29. package/lib/vflow/services/flow-rendering.service.d.ts +11 -0
  30. package/lib/vflow/utils/is-callable.d.ts +1 -0
  31. package/lib/vflow/utils/is-vflow-component.d.ts +4 -0
  32. package/package.json +1 -1
  33. package/public-api.d.ts +1 -0
  34. package/testing/component-mocks/vflow-mock.component.d.ts +2 -0
@@ -29,6 +29,7 @@ export declare class VflowComponent {
29
29
  private componentEventBusService;
30
30
  private keyboardService;
31
31
  private injector;
32
+ private flowRenderingService;
32
33
  /**
33
34
  * Size for flow view
34
35
  *
@@ -118,6 +119,7 @@ export declare class VflowComponent {
118
119
  * Signal to reading edges change
119
120
  */
120
121
  readonly edgesChange: import("@angular/core").Signal<EdgeChange[]>;
122
+ readonly initialized: import("@angular/core").Signal<boolean>;
121
123
  /**
122
124
  * Observable with viewport change
123
125
  */
@@ -130,6 +132,7 @@ export declare class VflowComponent {
130
132
  * Observable with edges change
131
133
  */
132
134
  readonly edgesChange$: import("rxjs").Observable<EdgeChange[]>;
135
+ readonly initialized$: import("rxjs").Observable<boolean>;
133
136
  protected markers: import("@angular/core").Signal<Map<number, import("ngx-vflow").Marker>>;
134
137
  protected minimap: import("@angular/core").WritableSignal<import("../../models/minimap.model").MinimapModel | null>;
135
138
  protected flowOptimization: import("@angular/core").WritableSignal<Required<Optimization>>;
@@ -1,4 +1,5 @@
1
- import { WritableSignal } from '@angular/core';
1
+ import { Signal, WritableSignal } from '@angular/core';
2
2
  export interface FlowEntity {
3
3
  selected: WritableSignal<boolean>;
4
+ shouldLoad: Signal<boolean>;
4
5
  }
@@ -82,13 +82,13 @@ export interface TemplateDynamicGroupNode<T> extends SharedDynamicNode {
82
82
  data?: WritableSignal<T>;
83
83
  }
84
84
  export interface ComponentNode<T = any> extends SharedNode {
85
- type: Type<CustomNodeComponent<T>>;
85
+ type: Type<CustomNodeComponent<T>> | (() => Promise<Type<CustomNodeComponent<T>>>);
86
86
  data?: T;
87
87
  width?: number;
88
88
  height?: number;
89
89
  }
90
90
  export interface ComponentDynamicNode<T = any> extends SharedDynamicNode {
91
- type: Type<CustomDynamicNodeComponent<T>>;
91
+ type: Type<CustomDynamicNodeComponent<T>> | (() => Promise<Type<CustomDynamicNodeComponent<T>>>);
92
92
  data?: WritableSignal<T>;
93
93
  width?: WritableSignal<number>;
94
94
  height?: WritableSignal<number>;
@@ -22,4 +22,8 @@ export interface Optimization {
22
22
  * This should help to avoid performance issues when zooming out too much.
23
23
  */
24
24
  virtualizationZoomThreshold?: number;
25
+ /**
26
+ * The trigger for lazy loading of entities.
27
+ */
28
+ lazyLoadTrigger?: 'immediate' | 'viewport';
25
29
  }
@@ -10,12 +10,14 @@ export interface EdgeContext {
10
10
  markerStart: Signal<string>;
11
11
  markerEnd: Signal<string>;
12
12
  selected: Signal<boolean>;
13
+ shouldLoad: Signal<boolean>;
13
14
  };
14
15
  }
15
16
  export interface NodeContext {
16
17
  $implicit: {
17
18
  node: any;
18
19
  selected: Signal<boolean>;
20
+ shouldLoad: Signal<boolean>;
19
21
  };
20
22
  }
21
23
  export interface SvgNodeContext {
@@ -24,6 +26,7 @@ export interface SvgNodeContext {
24
26
  selected: Signal<boolean>;
25
27
  width: Signal<number>;
26
28
  height: Signal<number>;
29
+ shouldLoad: Signal<boolean>;
27
30
  };
28
31
  }
29
32
  export interface GroupNodeContext {
@@ -32,6 +35,7 @@ export interface GroupNodeContext {
32
35
  selected: Signal<boolean>;
33
36
  width: Signal<number>;
34
37
  height: Signal<number>;
38
+ shouldLoad: Signal<boolean>;
35
39
  };
36
40
  }
37
41
  export interface ConnectionContext {
@@ -17,6 +17,7 @@ export declare class EdgeModel implements FlowEntity, Contextable<EdgeContext> {
17
17
  floating: boolean;
18
18
  selected: import("@angular/core").WritableSignal<boolean>;
19
19
  selected$: import("rxjs").Observable<boolean>;
20
+ shouldLoad: import("@angular/core").Signal<boolean>;
20
21
  renderOrder: import("@angular/core").WritableSignal<number>;
21
22
  detached: import("@angular/core").Signal<boolean>;
22
23
  detached$: import("rxjs").Observable<boolean>;
@@ -42,6 +43,7 @@ export declare class EdgeModel implements FlowEntity, Contextable<EdgeContext> {
42
43
  markerStart: import("@angular/core").Signal<string>;
43
44
  markerEnd: import("@angular/core").Signal<string>;
44
45
  selected: import("@angular/core").Signal<boolean>;
46
+ shouldLoad: import("@angular/core").Signal<boolean>;
45
47
  };
46
48
  };
47
49
  edgeLabels: {
@@ -15,6 +15,8 @@ export declare class NodeModel<T = unknown> implements FlowEntity, Contextable<N
15
15
  private static defaultHeight;
16
16
  private static defaultColor;
17
17
  private entitiesService;
18
+ private settingsService;
19
+ private nodeRenderingService;
18
20
  isVisible: import("@angular/core").WritableSignal<boolean>;
19
21
  point: import("@angular/core").WritableSignal<Point>;
20
22
  point$: Observable<Point>;
@@ -59,6 +61,8 @@ export declare class NodeModel<T = unknown> implements FlowEntity, Contextable<N
59
61
  dragHandlesCount: import("@angular/core").WritableSignal<number>;
60
62
  readonly magnetRadius = 20;
61
63
  isComponentType: boolean;
64
+ shouldLoad: import("@angular/core").Signal<boolean>;
65
+ componentInstance$: Observable<any>;
62
66
  text: import("@angular/core").WritableSignal<string>;
63
67
  componentTypeInputs: {
64
68
  node: Node<T> | DynamicNode<T>;
@@ -10,6 +10,7 @@ export declare class CustomTemplateEdgeComponent {
10
10
  markerStart: import("@angular/core").Signal<string>;
11
11
  markerEnd: import("@angular/core").Signal<string>;
12
12
  selected: import("@angular/core").Signal<boolean>;
13
+ shouldLoad: import("@angular/core").Signal<boolean>;
13
14
  };
14
15
  protected pull(): void;
15
16
  static ɵfac: i0.ɵɵFactoryDeclaration<CustomTemplateEdgeComponent, never>;
@@ -4,7 +4,7 @@ export declare class EdgeRenderingService {
4
4
  private flowEntitiesService;
5
5
  private flowSettingsService;
6
6
  readonly edges: import("@angular/core").Signal<EdgeModel[]>;
7
- private viewportEdges;
7
+ readonly viewportEdges: import("@angular/core").Signal<EdgeModel[]>;
8
8
  private maxOrder;
9
9
  pull(edge: EdgeModel): void;
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<EdgeRenderingService, never>;
@@ -0,0 +1,11 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class FlowRenderingService {
3
+ private readonly nodeRenderingService;
4
+ private readonly edgeRenderingService;
5
+ private readonly flowEntitiesService;
6
+ private readonly settingsService;
7
+ flowInitialized: import("@angular/core").WritableSignal<boolean>;
8
+ constructor();
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<FlowRenderingService, never>;
10
+ static ɵprov: i0.ɵɵInjectableDeclaration<FlowRenderingService>;
11
+ }
@@ -0,0 +1 @@
1
+ export declare function isCallable(fn: any): boolean;
@@ -0,0 +1,4 @@
1
+ import { CustomDynamicNodeComponent } from '../public-components/custom-dynamic-node/custom-dynamic-node.component';
2
+ import { CustomNodeComponent } from '../public-components/custom-node/custom-node.component';
3
+ export declare function isCustomNodeComponent(type: any): type is CustomNodeComponent;
4
+ export declare function isCustomDynamicNodeComponent(type: any): type is CustomDynamicNodeComponent;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-vflow",
3
- "version": "1.13.2",
3
+ "version": "1.15.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://www.ngx-vflow.org/",
6
6
  "author": "Artem Mangilev",
package/public-api.d.ts CHANGED
@@ -43,5 +43,6 @@ export { FlowEntitiesService as ɵFlowEntitiesService } from './lib/vflow/servic
43
43
  export { NodeAccessorService as ɵNodeAccessorService } from './lib/vflow/services/node-accessor.service';
44
44
  export { ViewportService as ɵViewportService } from './lib/vflow/services/viewport.service';
45
45
  export { SelectionService as ɵSelectionService } from './lib/vflow/services/selection.service';
46
+ export { NodeRenderingService as ɵNodeRenderingService } from './lib/vflow/services/node-rendering.service';
46
47
  export { RootPointerDirective as ɵRootPointerDirective } from './lib/vflow/directives/root-pointer.directive';
47
48
  export { SpacePointContextDirective as ɵSpacePointContextDirective } from './lib/vflow/directives/space-point-context.directive';
@@ -33,6 +33,8 @@ export declare class VflowMockComponent implements AsInterface<VflowComponent>,
33
33
  viewport: WritableSignal<ViewportState>;
34
34
  nodesChange: WritableSignal<NodeChange[]>;
35
35
  edgesChange: WritableSignal<EdgeChange[]>;
36
+ initialized: WritableSignal<boolean>;
37
+ initialized$: import("rxjs").Observable<boolean>;
36
38
  viewportChange$: import("rxjs").Observable<ViewportState>;
37
39
  nodesChange$: import("rxjs").Observable<NodeChange[]>;
38
40
  edgesChange$: import("rxjs").Observable<EdgeChange[]>;