ngx-vflow 0.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 (106) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/vflow/components/connection/connection.component.mjs +100 -0
  3. package/esm2022/lib/vflow/components/defs/defs.component.mjs +19 -0
  4. package/esm2022/lib/vflow/components/edge/edge.component.mjs +42 -0
  5. package/esm2022/lib/vflow/components/edge-label/edge-label.component.mjs +58 -0
  6. package/esm2022/lib/vflow/components/node/node.component.mjs +146 -0
  7. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +183 -0
  8. package/esm2022/lib/vflow/directives/changes-controller.directive.mjs +34 -0
  9. package/esm2022/lib/vflow/directives/connection-controller.directive.mjs +36 -0
  10. package/esm2022/lib/vflow/directives/map-context.directive.mjs +62 -0
  11. package/esm2022/lib/vflow/directives/reference.directive.mjs +16 -0
  12. package/esm2022/lib/vflow/directives/root-svg-context.directive.mjs +26 -0
  13. package/esm2022/lib/vflow/directives/space-point-context.directive.mjs +29 -0
  14. package/esm2022/lib/vflow/directives/template.directive.mjs +58 -0
  15. package/esm2022/lib/vflow/interfaces/connection-settings.interface.mjs +2 -0
  16. package/esm2022/lib/vflow/interfaces/connection.interface.mjs +2 -0
  17. package/esm2022/lib/vflow/interfaces/edge-label.interface.mjs +2 -0
  18. package/esm2022/lib/vflow/interfaces/edge.interface.mjs +2 -0
  19. package/esm2022/lib/vflow/interfaces/handle-positions.interface.mjs +2 -0
  20. package/esm2022/lib/vflow/interfaces/marker.interface.mjs +2 -0
  21. package/esm2022/lib/vflow/interfaces/node.interface.mjs +2 -0
  22. package/esm2022/lib/vflow/interfaces/path-data.interface.mjs +2 -0
  23. package/esm2022/lib/vflow/interfaces/point.interface.mjs +2 -0
  24. package/esm2022/lib/vflow/interfaces/template-context.interface.mjs +2 -0
  25. package/esm2022/lib/vflow/interfaces/viewport.interface.mjs +2 -0
  26. package/esm2022/lib/vflow/math/edge-path/bezier-path.mjs +77 -0
  27. package/esm2022/lib/vflow/math/edge-path/straigh-path.mjs +18 -0
  28. package/esm2022/lib/vflow/math/point-on-line-by-ratio.mjs +12 -0
  29. package/esm2022/lib/vflow/models/connection.model.mjs +9 -0
  30. package/esm2022/lib/vflow/models/edge-label.model.mjs +8 -0
  31. package/esm2022/lib/vflow/models/edge.model.mjs +30 -0
  32. package/esm2022/lib/vflow/models/flow.model.mjs +16 -0
  33. package/esm2022/lib/vflow/models/node.model.mjs +90 -0
  34. package/esm2022/lib/vflow/services/draggable.service.mjs +66 -0
  35. package/esm2022/lib/vflow/services/edge-changes.service.mjs +38 -0
  36. package/esm2022/lib/vflow/services/flow-entities.service.mjs +49 -0
  37. package/esm2022/lib/vflow/services/flow-status.service.mjs +39 -0
  38. package/esm2022/lib/vflow/services/node-changes.service.mjs +32 -0
  39. package/esm2022/lib/vflow/services/viewport.service.mjs +32 -0
  40. package/esm2022/lib/vflow/types/edge-change.type.mjs +2 -0
  41. package/esm2022/lib/vflow/types/node-change.type.mjs +2 -0
  42. package/esm2022/lib/vflow/types/position.type.mjs +2 -0
  43. package/esm2022/lib/vflow/types/using-points.type.mjs +2 -0
  44. package/esm2022/lib/vflow/types/viewport-change-type.type.mjs +2 -0
  45. package/esm2022/lib/vflow/utils/add-nodes-to-edges.mjs +11 -0
  46. package/esm2022/lib/vflow/utils/hash.mjs +7 -0
  47. package/esm2022/lib/vflow/utils/is-defined.mjs +4 -0
  48. package/esm2022/lib/vflow/utils/reference-keeper.mjs +31 -0
  49. package/esm2022/lib/vflow/utils/round.mjs +2 -0
  50. package/esm2022/lib/vflow/vflow.module.mjs +68 -0
  51. package/esm2022/ngx-vflow.mjs +5 -0
  52. package/esm2022/public-api.mjs +23 -0
  53. package/fesm2022/ngx-vflow.mjs +1332 -0
  54. package/fesm2022/ngx-vflow.mjs.map +1 -0
  55. package/index.d.ts +5 -0
  56. package/lib/vflow/components/connection/connection.component.d.ts +20 -0
  57. package/lib/vflow/components/defs/defs.component.d.ts +8 -0
  58. package/lib/vflow/components/edge/edge.component.d.ts +16 -0
  59. package/lib/vflow/components/edge-label/edge-label.component.d.ts +31 -0
  60. package/lib/vflow/components/node/node.component.d.ts +53 -0
  61. package/lib/vflow/components/vflow/vflow.component.d.ts +73 -0
  62. package/lib/vflow/directives/changes-controller.directive.d.ts +16 -0
  63. package/lib/vflow/directives/connection-controller.directive.d.ts +11 -0
  64. package/lib/vflow/directives/map-context.directive.d.ts +19 -0
  65. package/lib/vflow/directives/reference.directive.d.ts +6 -0
  66. package/lib/vflow/directives/root-svg-context.directive.d.ts +7 -0
  67. package/lib/vflow/directives/space-point-context.directive.d.ts +14 -0
  68. package/lib/vflow/directives/template.directive.d.ts +28 -0
  69. package/lib/vflow/interfaces/connection-settings.interface.d.ts +10 -0
  70. package/lib/vflow/interfaces/connection.interface.d.ts +4 -0
  71. package/lib/vflow/interfaces/edge-label.interface.d.ts +6 -0
  72. package/lib/vflow/interfaces/edge.interface.d.ts +18 -0
  73. package/lib/vflow/interfaces/handle-positions.interface.d.ts +5 -0
  74. package/lib/vflow/interfaces/marker.interface.d.ts +9 -0
  75. package/lib/vflow/interfaces/node.interface.d.ts +16 -0
  76. package/lib/vflow/interfaces/path-data.interface.d.ts +8 -0
  77. package/lib/vflow/interfaces/point.interface.d.ts +4 -0
  78. package/lib/vflow/interfaces/template-context.interface.d.ts +10 -0
  79. package/lib/vflow/interfaces/viewport.interface.d.ts +9 -0
  80. package/lib/vflow/math/edge-path/bezier-path.d.ts +5 -0
  81. package/lib/vflow/math/edge-path/straigh-path.d.ts +4 -0
  82. package/lib/vflow/math/point-on-line-by-ratio.d.ts +7 -0
  83. package/lib/vflow/models/connection.model.d.ts +9 -0
  84. package/lib/vflow/models/edge-label.model.d.ts +9 -0
  85. package/lib/vflow/models/edge.model.d.ts +17 -0
  86. package/lib/vflow/models/flow.model.d.ts +14 -0
  87. package/lib/vflow/models/node.model.d.ts +70 -0
  88. package/lib/vflow/services/draggable.service.d.ts +32 -0
  89. package/lib/vflow/services/edge-changes.service.d.ts +22 -0
  90. package/lib/vflow/services/flow-entities.service.d.ts +15 -0
  91. package/lib/vflow/services/flow-status.service.d.ts +43 -0
  92. package/lib/vflow/services/node-changes.service.d.ts +26 -0
  93. package/lib/vflow/services/viewport.service.d.ts +24 -0
  94. package/lib/vflow/types/edge-change.type.d.ts +14 -0
  95. package/lib/vflow/types/node-change.type.d.ts +16 -0
  96. package/lib/vflow/types/position.type.d.ts +1 -0
  97. package/lib/vflow/types/using-points.type.d.ts +5 -0
  98. package/lib/vflow/types/viewport-change-type.type.d.ts +3 -0
  99. package/lib/vflow/utils/add-nodes-to-edges.d.ts +3 -0
  100. package/lib/vflow/utils/hash.d.ts +1 -0
  101. package/lib/vflow/utils/is-defined.d.ts +1 -0
  102. package/lib/vflow/utils/reference-keeper.d.ts +14 -0
  103. package/lib/vflow/utils/round.d.ts +1 -0
  104. package/lib/vflow/vflow.module.d.ts +18 -0
  105. package/package.json +25 -0
  106. package/public-api.d.ts +18 -0
@@ -0,0 +1,28 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { EdgeContext } from '../interfaces/template-context.interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class EdgeTemplateDirective {
5
+ templateRef: TemplateRef<EdgeContext>;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<EdgeTemplateDirective, never>;
7
+ static ɵdir: i0.ɵɵDirectiveDeclaration<EdgeTemplateDirective, "ng-template[edge]", never, {}, {}, never, never, false, never>;
8
+ }
9
+ export declare class ConnectionTemplateDirective {
10
+ templateRef: TemplateRef<any>;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConnectionTemplateDirective, never>;
12
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ConnectionTemplateDirective, "ng-template[connection]", never, {}, {}, never, never, false, never>;
13
+ }
14
+ export declare class EdgeLabelHtmlTemplateDirective {
15
+ templateRef: TemplateRef<any>;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<EdgeLabelHtmlTemplateDirective, never>;
17
+ static ɵdir: i0.ɵɵDirectiveDeclaration<EdgeLabelHtmlTemplateDirective, "ng-template[edgeLabelHtml]", never, {}, {}, never, never, false, never>;
18
+ }
19
+ export declare class NodeHtmlTemplateDirective {
20
+ templateRef: TemplateRef<any>;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<NodeHtmlTemplateDirective, never>;
22
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NodeHtmlTemplateDirective, "ng-template[nodeHtml]", never, {}, {}, never, never, false, never>;
23
+ }
24
+ export declare class HandleTemplateDirective {
25
+ templateRef: TemplateRef<any>;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<HandleTemplateDirective, never>;
27
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HandleTemplateDirective, "ng-template[handle]", never, {}, {}, never, never, false, never>;
28
+ }
@@ -0,0 +1,10 @@
1
+ import { Connection } from "./connection.interface";
2
+ import { Curve, EdgeType } from "./edge.interface";
3
+ import { Marker } from "./marker.interface";
4
+ export type ConnectionValidatorFn = (connection: Connection) => boolean;
5
+ export interface ConnectionSettings {
6
+ curve?: Curve;
7
+ type?: EdgeType;
8
+ validator?: ConnectionValidatorFn;
9
+ marker?: Marker;
10
+ }
@@ -0,0 +1,4 @@
1
+ export interface Connection {
2
+ source: string;
3
+ target: string;
4
+ }
@@ -0,0 +1,6 @@
1
+ export type EdgeLabelType = 'html-template';
2
+ export type EdgeLabelPosition = 'start' | 'center' | 'end';
3
+ export interface EdgeLabel<T = unknown> {
4
+ type: EdgeLabelType;
5
+ data?: T;
6
+ }
@@ -0,0 +1,18 @@
1
+ import { Connection } from "./connection.interface";
2
+ import { EdgeLabel, EdgeLabelPosition } from "./edge-label.interface";
3
+ import { Marker } from "./marker.interface";
4
+ export type EdgeType = 'default' | 'template';
5
+ export type Curve = 'straight' | 'bezier';
6
+ export interface Edge<T = unknown> extends Connection {
7
+ id: string;
8
+ type?: EdgeType;
9
+ curve?: Curve;
10
+ data?: T;
11
+ edgeLabels?: {
12
+ [position in EdgeLabelPosition]?: EdgeLabel;
13
+ };
14
+ markers?: {
15
+ start?: Marker;
16
+ end?: Marker;
17
+ };
18
+ }
@@ -0,0 +1,5 @@
1
+ import { Position } from "../types/position.type";
2
+ export interface HandlePositions {
3
+ source: Position;
4
+ target: Position;
5
+ }
@@ -0,0 +1,9 @@
1
+ export interface Marker {
2
+ type?: 'arrow' | 'arrow-closed';
3
+ width?: number;
4
+ height?: number;
5
+ color?: string;
6
+ orient?: string;
7
+ markerUnits?: 'userSpaceOnUse' | 'strokeWidth';
8
+ strokeWidth?: number;
9
+ }
@@ -0,0 +1,16 @@
1
+ import { Point } from "./point.interface";
2
+ export type Node<T = unknown> = SharedNode & (DefaultNode | HtmlTemplateNode<T>);
3
+ interface SharedNode {
4
+ id: string;
5
+ point: Point;
6
+ draggable?: boolean;
7
+ }
8
+ interface DefaultNode {
9
+ type: 'default';
10
+ text?: string;
11
+ }
12
+ interface HtmlTemplateNode<T = unknown> {
13
+ type: 'html-template';
14
+ data?: T;
15
+ }
16
+ export {};
@@ -0,0 +1,8 @@
1
+ import { EdgeLabelPosition } from "./edge-label.interface";
2
+ import { Point } from "./point.interface";
3
+ export interface PathData {
4
+ path: string;
5
+ points: {
6
+ [key in EdgeLabelPosition]: Point;
7
+ };
8
+ }
@@ -0,0 +1,4 @@
1
+ export interface Point {
2
+ x: number;
3
+ y: number;
4
+ }
@@ -0,0 +1,10 @@
1
+ import { Signal } from "@angular/core";
2
+ import { Edge } from "./edge.interface";
3
+ export interface EdgeContext {
4
+ $implicit: {
5
+ edge: Edge;
6
+ path: Signal<string>;
7
+ markerStart: Signal<string>;
8
+ markerEnd: Signal<string>;
9
+ };
10
+ }
@@ -0,0 +1,9 @@
1
+ import { ViewportChangeType } from "../types/viewport-change-type.type";
2
+ import { Point } from "./point.interface";
3
+ export interface ViewportState extends Point {
4
+ zoom: number;
5
+ }
6
+ export interface WritableViewport {
7
+ changeType: ViewportChangeType;
8
+ state: Partial<ViewportState>;
9
+ }
@@ -0,0 +1,5 @@
1
+ import { PathData } from '../../interfaces/path-data.interface';
2
+ import { Point } from '../../interfaces/point.interface';
3
+ import { UsingPoints } from '../../types/using-points.type';
4
+ import { Position } from '../../types/position.type';
5
+ export declare function bezierPath(source: Point, target: Point, sourcePosition: Position, targetPosition: Position, usingPoints?: UsingPoints): PathData;
@@ -0,0 +1,4 @@
1
+ import { PathData } from "../../interfaces/path-data.interface";
2
+ import { Point } from "../../interfaces/point.interface";
3
+ import { UsingPoints } from "../../types/using-points.type";
4
+ export declare function straightPath(source: Point, target: Point, usingPoints?: UsingPoints): PathData;
@@ -0,0 +1,7 @@
1
+ import { Point } from "../interfaces/point.interface";
2
+ /**
3
+ * Get point on line
4
+ *
5
+ * https://math.stackexchange.com/questions/563566/how-do-i-find-the-middle1-2-1-3-1-4-etc-of-a-line
6
+ */
7
+ export declare function getPointOnLineByRatio(start: Point, end: Point, ratio: number): Point;
@@ -0,0 +1,9 @@
1
+ import { ConnectionSettings, ConnectionValidatorFn } from "../interfaces/connection-settings.interface";
2
+ import { Curve, EdgeType } from "../interfaces/edge.interface";
3
+ export declare class ConnectionModel {
4
+ connection: ConnectionSettings;
5
+ curve: Curve;
6
+ type: EdgeType;
7
+ validator: ConnectionValidatorFn;
8
+ constructor(connection: ConnectionSettings);
9
+ }
@@ -0,0 +1,9 @@
1
+ import { EdgeLabel } from "../interfaces/edge-label.interface";
2
+ export declare class EdgeLabelModel {
3
+ edgeLabel: EdgeLabel;
4
+ size: import("@angular/core").WritableSignal<{
5
+ width: number;
6
+ height: number;
7
+ }>;
8
+ constructor(edgeLabel: EdgeLabel);
9
+ }
@@ -0,0 +1,17 @@
1
+ import { EdgeLabelPosition } from "../interfaces/edge-label.interface";
2
+ import { Edge, Curve, EdgeType } from "../interfaces/edge.interface";
3
+ import { EdgeLabelModel } from "./edge-label.model";
4
+ import { NodeModel } from "./node.model";
5
+ export declare class EdgeModel {
6
+ edge: Edge;
7
+ source: NodeModel;
8
+ target: NodeModel;
9
+ curve: Curve;
10
+ type: EdgeType;
11
+ path: import("@angular/core").Signal<import("../interfaces/path-data.interface").PathData>;
12
+ edgeLabels: {
13
+ [position in EdgeLabelPosition]?: EdgeLabelModel;
14
+ };
15
+ private usingPoints;
16
+ constructor(edge: Edge);
17
+ }
@@ -0,0 +1,14 @@
1
+ import { Signal, WritableSignal } from "@angular/core";
2
+ import { HandlePositions } from "../interfaces/handle-positions.interface";
3
+ export declare class FlowModel {
4
+ /**
5
+ * Global setting with handle positions. Nodes derive this value
6
+ */
7
+ handlePositions: WritableSignal<HandlePositions>;
8
+ /**
9
+ * @see {VflowComponent.view}
10
+ */
11
+ view: WritableSignal<[number, number] | 'auto'>;
12
+ flowWidth: Signal<string | number>;
13
+ flowHeight: Signal<string | number>;
14
+ }
@@ -0,0 +1,70 @@
1
+ import { Node } from '../interfaces/node.interface';
2
+ import { FlowModel } from './flow.model';
3
+ export declare class NodeModel<T = unknown> {
4
+ node: Node<T>;
5
+ point: import("@angular/core").WritableSignal<{
6
+ x: number;
7
+ y: number;
8
+ }>;
9
+ point$: import("rxjs").Observable<{
10
+ x: number;
11
+ y: number;
12
+ }>;
13
+ size: import("@angular/core").WritableSignal<{
14
+ width: number;
15
+ height: number;
16
+ }>;
17
+ pointTransform: import("@angular/core").Signal<string>;
18
+ sourceOffset: import("@angular/core").Signal<{
19
+ x: number;
20
+ y: number;
21
+ }>;
22
+ targetOffset: import("@angular/core").Signal<{
23
+ x: number;
24
+ y: number;
25
+ }>;
26
+ sourcePointAbsolute: import("@angular/core").Signal<{
27
+ x: number;
28
+ y: number;
29
+ }>;
30
+ targetPointAbsolute: import("@angular/core").Signal<{
31
+ x: number;
32
+ y: number;
33
+ }>;
34
+ sourcePosition: import("@angular/core").Signal<import("ngx-vflow").Position>;
35
+ targetPosition: import("@angular/core").Signal<import("ngx-vflow").Position>;
36
+ sourceHandleSize: import("@angular/core").WritableSignal<{
37
+ width: number;
38
+ height: number;
39
+ }>;
40
+ targetHandleSize: import("@angular/core").WritableSignal<{
41
+ width: number;
42
+ height: number;
43
+ }>;
44
+ sourceHandleOffset: import("@angular/core").Signal<{
45
+ x: number;
46
+ y: number;
47
+ }>;
48
+ targetHandleOffset: import("@angular/core").Signal<{
49
+ x: number;
50
+ y: number;
51
+ }>;
52
+ sourceOffsetAligned: import("@angular/core").Signal<{
53
+ x: number;
54
+ y: number;
55
+ }>;
56
+ targetOffsetAligned: import("@angular/core").Signal<{
57
+ x: number;
58
+ y: number;
59
+ }>;
60
+ draggable: boolean;
61
+ readonly magnetRadius = 20;
62
+ private flow;
63
+ constructor(node: Node<T>);
64
+ /**
65
+ * Bind parent flow model to node
66
+ *
67
+ * @param flow parent flow
68
+ */
69
+ bindFlow(flow: FlowModel): void;
70
+ }
@@ -0,0 +1,32 @@
1
+ import { NodeModel } from '../models/node.model';
2
+ import * as i0 from "@angular/core";
3
+ export declare class DraggableService {
4
+ /**
5
+ * Enable or disable draggable behavior for element.
6
+ * model contains draggable flag which declares if draggable should be enabled or not
7
+ *
8
+ * @param element target element for toggling draggable
9
+ * @param model model with data for this element
10
+ */
11
+ toggleDraggable(element: Element, model: NodeModel): void;
12
+ /**
13
+ * TODO: not shure if this work, need to check
14
+ *
15
+ * @param element
16
+ */
17
+ destroy(element: Element): void;
18
+ /**
19
+ * Node drag behavior. Updated node's coordinate according to dragging
20
+ *
21
+ * @param model
22
+ * @returns
23
+ */
24
+ private getDragBehavior;
25
+ /**
26
+ * Specify ignoring drag behavior. It's responsible for not moving the map when user tries to drag node
27
+ * with disabled drag behavior
28
+ */
29
+ private getIgnoreDragBehavior;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<DraggableService, never>;
31
+ static ɵprov: i0.ɵɵInjectableDeclaration<DraggableService>;
32
+ }
@@ -0,0 +1,22 @@
1
+ import { FlowEntitiesService } from './flow-entities.service';
2
+ import { Observable } from 'rxjs';
3
+ import { EdgeChange } from '../types/edge-change.type';
4
+ import * as i0 from "@angular/core";
5
+ export declare class EdgeChangesService {
6
+ protected entitiesService: FlowEntitiesService;
7
+ protected edgeDetachedChange$: Observable<{
8
+ type: "detached";
9
+ id: string;
10
+ }[]>;
11
+ protected edgeAddChange$: Observable<{
12
+ type: "add";
13
+ id: string;
14
+ }[]>;
15
+ protected edgeRemoveChange$: Observable<{
16
+ type: "remove";
17
+ id: string;
18
+ }[]>;
19
+ readonly changes$: Observable<EdgeChange[]>;
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<EdgeChangesService, never>;
21
+ static ɵprov: i0.ɵɵInjectableDeclaration<EdgeChangesService>;
22
+ }
@@ -0,0 +1,15 @@
1
+ import { NodeModel } from '../models/node.model';
2
+ import { EdgeModel } from '../models/edge.model';
3
+ import { ConnectionModel } from '../models/connection.model';
4
+ import { Marker } from '../interfaces/marker.interface';
5
+ import * as i0 from "@angular/core";
6
+ export declare class FlowEntitiesService {
7
+ readonly nodes: import("@angular/core").WritableSignal<NodeModel<unknown>[]>;
8
+ readonly edges: import("@angular/core").WritableSignal<EdgeModel[]>;
9
+ readonly connection: import("@angular/core").WritableSignal<ConnectionModel>;
10
+ readonly markers: import("@angular/core").Signal<Map<number, Marker>>;
11
+ readonly validEdges: import("@angular/core").Signal<EdgeModel[]>;
12
+ getNode<T>(id: string): NodeModel<T> | undefined;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<FlowEntitiesService, never>;
14
+ static ɵprov: i0.ɵɵInjectableDeclaration<FlowEntitiesService>;
15
+ }
@@ -0,0 +1,43 @@
1
+ import { NodeModel } from '../models/node.model';
2
+ import * as i0 from "@angular/core";
3
+ export interface FlowStatusIdle {
4
+ state: 'idle';
5
+ payload: null;
6
+ }
7
+ export interface FlowStatusConnectionStart {
8
+ state: 'connection-start';
9
+ payload: {
10
+ sourceNode: NodeModel;
11
+ };
12
+ }
13
+ export interface FlowStatusConnectionValidation {
14
+ state: 'connection-validation';
15
+ payload: {
16
+ sourceNode: NodeModel;
17
+ targetNode: NodeModel;
18
+ valid: boolean;
19
+ };
20
+ }
21
+ export interface FlowStatusConnectionEnd {
22
+ state: 'connection-end';
23
+ payload: {
24
+ sourceNode: NodeModel;
25
+ targetNode: NodeModel;
26
+ };
27
+ }
28
+ export type FlowStatus = FlowStatusIdle | FlowStatusConnectionStart | FlowStatusConnectionValidation | FlowStatusConnectionEnd;
29
+ export declare class FlowStatusService {
30
+ readonly status: import("@angular/core").WritableSignal<FlowStatus>;
31
+ setIdleStatus(): void;
32
+ setConnectionStartStatus(sourceNode: NodeModel): void;
33
+ setConnectionValidationStatus(sourceNode: NodeModel, targetNode: NodeModel, valid: boolean): void;
34
+ setConnectionEndStatus(sourceNode: NodeModel, targetNode: NodeModel): void;
35
+ static ɵfac: i0.ɵɵFactoryDeclaration<FlowStatusService, never>;
36
+ static ɵprov: i0.ɵɵInjectableDeclaration<FlowStatusService>;
37
+ }
38
+ /**
39
+ * Batch status changes together to call them one after another
40
+ *
41
+ * @param changes list of set[FlowStatus.state]Status() calls
42
+ */
43
+ export declare function batchStatusChanges(...changes: Function[]): void;
@@ -0,0 +1,26 @@
1
+ import { FlowEntitiesService } from './flow-entities.service';
2
+ import { Observable } from 'rxjs';
3
+ import { NodeChange } from '../types/node-change.type';
4
+ import * as i0 from "@angular/core";
5
+ export declare class NodesChangeService {
6
+ protected entitiesService: FlowEntitiesService;
7
+ protected nodesPositionChange$: Observable<{
8
+ type: "position";
9
+ id: string;
10
+ point: {
11
+ x: number;
12
+ y: number;
13
+ };
14
+ }[]>;
15
+ protected nodeAddChange$: Observable<{
16
+ type: "add";
17
+ id: string;
18
+ }[]>;
19
+ protected nodeRemoveChange$: Observable<{
20
+ type: "remove";
21
+ id: string;
22
+ }[]>;
23
+ readonly changes$: Observable<NodeChange[]>;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<NodesChangeService, never>;
25
+ static ɵprov: i0.ɵɵInjectableDeclaration<NodesChangeService>;
26
+ }
@@ -0,0 +1,24 @@
1
+ import { WritableSignal } from '@angular/core';
2
+ import { ViewportState, WritableViewport } from '../interfaces/viewport.interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ViewportService {
5
+ /**
6
+ * The default value used by d3, just copy it here
7
+ *
8
+ * @returns default viewport value
9
+ */
10
+ private static getDefaultViewport;
11
+ /**
12
+ * Internal signal that accepts value from user by lib api
13
+ * When this signal changes, lib sets new view state and update readableViewport signal
14
+ */
15
+ readonly writableViewport: WritableSignal<WritableViewport>;
16
+ /**
17
+ * Public signal with viewport state. User can directly read from this signal. It's updated by:
18
+ * - user events on flow
19
+ * - writableViewport signal
20
+ */
21
+ readonly readableViewport: WritableSignal<ViewportState>;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<ViewportService, never>;
23
+ static ɵprov: i0.ɵɵInjectableDeclaration<ViewportService>;
24
+ }
@@ -0,0 +1,14 @@
1
+ export type EdgeChange = EdgeDetachedChange | EdgeAddChange | EdgeRemoveChange;
2
+ export interface EdgeDetachedChange extends EdgeChangeShared {
3
+ type: 'detached';
4
+ }
5
+ export interface EdgeAddChange extends EdgeChangeShared {
6
+ type: 'add';
7
+ }
8
+ export interface EdgeRemoveChange extends EdgeChangeShared {
9
+ type: 'remove';
10
+ }
11
+ interface EdgeChangeShared {
12
+ id: string;
13
+ }
14
+ export {};
@@ -0,0 +1,16 @@
1
+ import { Point } from "../interfaces/point.interface";
2
+ export type NodeChange = NodePositionChange | NodeAddChange | NodeRemoveChange;
3
+ export interface NodePositionChange extends NodeChangeShared {
4
+ type: 'position';
5
+ point: Point;
6
+ }
7
+ export interface NodeAddChange extends NodeChangeShared {
8
+ type: 'add';
9
+ }
10
+ export interface NodeRemoveChange extends NodeChangeShared {
11
+ type: 'remove';
12
+ }
13
+ interface NodeChangeShared {
14
+ id: string;
15
+ }
16
+ export {};
@@ -0,0 +1 @@
1
+ export type Position = 'top' | 'bottom' | 'right' | 'left';
@@ -0,0 +1,5 @@
1
+ export type UsingPoints = [
2
+ start: boolean,
3
+ center: boolean,
4
+ end: boolean
5
+ ];
@@ -0,0 +1,3 @@
1
+ export type ViewportChangeType = 'initial' | // first change, set by library
2
+ 'absolute' | // later absolue value changes, set by user
3
+ 'relative';
@@ -0,0 +1,3 @@
1
+ import { EdgeModel } from "../models/edge.model";
2
+ import { NodeModel } from "../models/node.model";
3
+ export declare function addNodesToEdges(nodes: NodeModel[], edges: EdgeModel[]): void;
@@ -0,0 +1 @@
1
+ export declare function hashCode(str: string): number;
@@ -0,0 +1 @@
1
+ export declare function isDefined<T>(data: T | undefined): data is T;
@@ -0,0 +1,14 @@
1
+ import { NodeModel } from "../models/node.model";
2
+ import { Node } from '../interfaces/node.interface';
3
+ import { EdgeModel } from "../models/edge.model";
4
+ import { Edge } from "../interfaces/edge.interface";
5
+ export declare class ReferenceKeeper {
6
+ /**
7
+ * Create new models for new node references and keep old models for old node references
8
+ */
9
+ static nodes(newNodes: Node[], oldNodeModels: NodeModel[]): NodeModel<unknown>[];
10
+ /**
11
+ * Create new models for new edge references and keep old models for old edge references
12
+ */
13
+ static edges(newEdges: Edge[], oldEdgeModels: EdgeModel[]): EdgeModel[];
14
+ }
@@ -0,0 +1 @@
1
+ export declare const round: (num: number) => number;
@@ -0,0 +1,18 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./components/vflow/vflow.component";
3
+ import * as i2 from "./components/node/node.component";
4
+ import * as i3 from "./components/edge/edge.component";
5
+ import * as i4 from "./components/edge-label/edge-label.component";
6
+ import * as i5 from "./components/connection/connection.component";
7
+ import * as i6 from "./components/defs/defs.component";
8
+ import * as i7 from "./directives/space-point-context.directive";
9
+ import * as i8 from "./directives/map-context.directive";
10
+ import * as i9 from "./directives/reference.directive";
11
+ import * as i10 from "./directives/root-svg-context.directive";
12
+ import * as i11 from "./directives/template.directive";
13
+ import * as i12 from "@angular/common";
14
+ export declare class VflowModule {
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<VflowModule, never>;
16
+ static ɵmod: i0.ɵɵNgModuleDeclaration<VflowModule, [typeof i1.VflowComponent, typeof i2.NodeComponent, typeof i3.EdgeComponent, typeof i4.EdgeLabelComponent, typeof i5.ConnectionComponent, typeof i6.DefsComponent, typeof i7.SpacePointContextDirective, typeof i8.MapContextDirective, typeof i9.RootSvgReferenceDirective, typeof i10.RootSvgContextDirective, typeof i11.NodeHtmlTemplateDirective, typeof i11.EdgeLabelHtmlTemplateDirective, typeof i11.EdgeTemplateDirective, typeof i11.ConnectionTemplateDirective, typeof i11.HandleTemplateDirective], [typeof i12.CommonModule], [typeof i1.VflowComponent, typeof i11.NodeHtmlTemplateDirective, typeof i11.EdgeLabelHtmlTemplateDirective, typeof i11.EdgeTemplateDirective, typeof i11.ConnectionTemplateDirective, typeof i11.HandleTemplateDirective]>;
17
+ static ɵinj: i0.ɵɵInjectorDeclaration<VflowModule>;
18
+ }
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "ngx-vflow",
3
+ "version": "0.1.0",
4
+ "peerDependencies": {
5
+ "@angular/common": "^16.2.0",
6
+ "@angular/core": "^16.2.0"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.3.0"
10
+ },
11
+ "sideEffects": false,
12
+ "module": "fesm2022/ngx-vflow.mjs",
13
+ "typings": "index.d.ts",
14
+ "exports": {
15
+ "./package.json": {
16
+ "default": "./package.json"
17
+ },
18
+ ".": {
19
+ "types": "./index.d.ts",
20
+ "esm2022": "./esm2022/ngx-vflow.mjs",
21
+ "esm": "./esm2022/ngx-vflow.mjs",
22
+ "default": "./fesm2022/ngx-vflow.mjs"
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,18 @@
1
+ export * from './lib/vflow/vflow.module';
2
+ export * from './lib/vflow/interfaces/node.interface';
3
+ export * from './lib/vflow/interfaces/point.interface';
4
+ export * from './lib/vflow/interfaces/edge.interface';
5
+ export * from './lib/vflow/interfaces/edge-label.interface';
6
+ export * from './lib/vflow/interfaces/connection.interface';
7
+ export * from './lib/vflow/interfaces/connection.interface';
8
+ export * from './lib/vflow/interfaces/connection-settings.interface';
9
+ export * from './lib/vflow/interfaces/handle-positions.interface';
10
+ export * from './lib/vflow/interfaces/marker.interface';
11
+ export { ViewportState } from './lib/vflow/interfaces/viewport.interface';
12
+ export * from './lib/vflow/types/node-change.type';
13
+ export * from './lib/vflow/types/edge-change.type';
14
+ export * from './lib/vflow/types/position.type';
15
+ export * from './lib/vflow/components/vflow/vflow.component';
16
+ export * from './lib/vflow/directives/template.directive';
17
+ export * from './lib/vflow/directives/connection-controller.directive';
18
+ export * from './lib/vflow/directives/changes-controller.directive';