@angflow/angular 0.0.1

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 (196) hide show
  1. package/README.md +187 -0
  2. package/dist/base.css +1204 -0
  3. package/dist/esm/index.d.ts +2 -0
  4. package/dist/esm/index.d.ts.map +1 -0
  5. package/dist/esm/index.js +2 -0
  6. package/dist/esm/index.js.map +1 -0
  7. package/dist/esm/lib/components/a11y-descriptions/a11y-descriptions.component.d.ts +25 -0
  8. package/dist/esm/lib/components/a11y-descriptions/a11y-descriptions.component.d.ts.map +1 -0
  9. package/dist/esm/lib/components/a11y-descriptions/a11y-descriptions.component.js +58 -0
  10. package/dist/esm/lib/components/a11y-descriptions/a11y-descriptions.component.js.map +1 -0
  11. package/dist/esm/lib/components/attribution/attribution.component.d.ts +6 -0
  12. package/dist/esm/lib/components/attribution/attribution.component.d.ts.map +1 -0
  13. package/dist/esm/lib/components/attribution/attribution.component.js +32 -0
  14. package/dist/esm/lib/components/attribution/attribution.component.js.map +1 -0
  15. package/dist/esm/lib/components/background/background.component.d.ts +31 -0
  16. package/dist/esm/lib/components/background/background.component.d.ts.map +1 -0
  17. package/dist/esm/lib/components/background/background.component.js +209 -0
  18. package/dist/esm/lib/components/background/background.component.js.map +1 -0
  19. package/dist/esm/lib/components/connection-line/connection-line.component.d.ts +36 -0
  20. package/dist/esm/lib/components/connection-line/connection-line.component.d.ts.map +1 -0
  21. package/dist/esm/lib/components/connection-line/connection-line.component.js +146 -0
  22. package/dist/esm/lib/components/connection-line/connection-line.component.js.map +1 -0
  23. package/dist/esm/lib/components/controls/controls.component.d.ts +25 -0
  24. package/dist/esm/lib/components/controls/controls.component.d.ts.map +1 -0
  25. package/dist/esm/lib/components/controls/controls.component.js +174 -0
  26. package/dist/esm/lib/components/controls/controls.component.js.map +1 -0
  27. package/dist/esm/lib/components/edge-label-renderer/edge-label-renderer.component.d.ts +6 -0
  28. package/dist/esm/lib/components/edge-label-renderer/edge-label-renderer.component.d.ts.map +1 -0
  29. package/dist/esm/lib/components/edge-label-renderer/edge-label-renderer.component.js +24 -0
  30. package/dist/esm/lib/components/edge-label-renderer/edge-label-renderer.component.js.map +1 -0
  31. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.d.ts +22 -0
  32. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.d.ts.map +1 -0
  33. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.js +64 -0
  34. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.js.map +1 -0
  35. package/dist/esm/lib/components/edges/base-edge.component.d.ts +11 -0
  36. package/dist/esm/lib/components/edges/base-edge.component.d.ts.map +1 -0
  37. package/dist/esm/lib/components/edges/base-edge.component.js +56 -0
  38. package/dist/esm/lib/components/edges/base-edge.component.js.map +1 -0
  39. package/dist/esm/lib/components/edges/bezier-edge.component.d.ts +30 -0
  40. package/dist/esm/lib/components/edges/bezier-edge.component.d.ts.map +1 -0
  41. package/dist/esm/lib/components/edges/bezier-edge.component.js +68 -0
  42. package/dist/esm/lib/components/edges/bezier-edge.component.js.map +1 -0
  43. package/dist/esm/lib/components/edges/edge-text.component.d.ts +11 -0
  44. package/dist/esm/lib/components/edges/edge-text.component.d.ts.map +1 -0
  45. package/dist/esm/lib/components/edges/edge-text.component.js +48 -0
  46. package/dist/esm/lib/components/edges/edge-text.component.js.map +1 -0
  47. package/dist/esm/lib/components/edges/simple-bezier-edge.component.d.ts +21 -0
  48. package/dist/esm/lib/components/edges/simple-bezier-edge.component.d.ts.map +1 -0
  49. package/dist/esm/lib/components/edges/simple-bezier-edge.component.js +57 -0
  50. package/dist/esm/lib/components/edges/simple-bezier-edge.component.js.map +1 -0
  51. package/dist/esm/lib/components/edges/smooth-step-edge.component.d.ts +22 -0
  52. package/dist/esm/lib/components/edges/smooth-step-edge.component.d.ts.map +1 -0
  53. package/dist/esm/lib/components/edges/smooth-step-edge.component.js +59 -0
  54. package/dist/esm/lib/components/edges/smooth-step-edge.component.js.map +1 -0
  55. package/dist/esm/lib/components/edges/step-edge.component.d.ts +22 -0
  56. package/dist/esm/lib/components/edges/step-edge.component.d.ts.map +1 -0
  57. package/dist/esm/lib/components/edges/step-edge.component.js +60 -0
  58. package/dist/esm/lib/components/edges/step-edge.component.js.map +1 -0
  59. package/dist/esm/lib/components/edges/straight-edge.component.d.ts +18 -0
  60. package/dist/esm/lib/components/edges/straight-edge.component.d.ts.map +1 -0
  61. package/dist/esm/lib/components/edges/straight-edge.component.js +53 -0
  62. package/dist/esm/lib/components/edges/straight-edge.component.js.map +1 -0
  63. package/dist/esm/lib/components/handle/handle.component.d.ts +28 -0
  64. package/dist/esm/lib/components/handle/handle.component.d.ts.map +1 -0
  65. package/dist/esm/lib/components/handle/handle.component.js +162 -0
  66. package/dist/esm/lib/components/handle/handle.component.js.map +1 -0
  67. package/dist/esm/lib/components/minimap/minimap.component.d.ts +75 -0
  68. package/dist/esm/lib/components/minimap/minimap.component.d.ts.map +1 -0
  69. package/dist/esm/lib/components/minimap/minimap.component.js +319 -0
  70. package/dist/esm/lib/components/minimap/minimap.component.js.map +1 -0
  71. package/dist/esm/lib/components/ng-flow-provider/ng-flow-provider.component.d.ts +6 -0
  72. package/dist/esm/lib/components/ng-flow-provider/ng-flow-provider.component.d.ts.map +1 -0
  73. package/dist/esm/lib/components/ng-flow-provider/ng-flow-provider.component.js +24 -0
  74. package/dist/esm/lib/components/ng-flow-provider/ng-flow-provider.component.js.map +1 -0
  75. package/dist/esm/lib/components/node-resizer/node-resizer.component.d.ts +44 -0
  76. package/dist/esm/lib/components/node-resizer/node-resizer.component.d.ts.map +1 -0
  77. package/dist/esm/lib/components/node-resizer/node-resizer.component.js +198 -0
  78. package/dist/esm/lib/components/node-resizer/node-resizer.component.js.map +1 -0
  79. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.d.ts +19 -0
  80. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.d.ts.map +1 -0
  81. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.js +101 -0
  82. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.js.map +1 -0
  83. package/dist/esm/lib/components/nodes/default-node.component.d.ts +20 -0
  84. package/dist/esm/lib/components/nodes/default-node.component.d.ts.map +1 -0
  85. package/dist/esm/lib/components/nodes/default-node.component.js +52 -0
  86. package/dist/esm/lib/components/nodes/default-node.component.js.map +1 -0
  87. package/dist/esm/lib/components/nodes/group-node.component.d.ts +19 -0
  88. package/dist/esm/lib/components/nodes/group-node.component.d.ts.map +1 -0
  89. package/dist/esm/lib/components/nodes/group-node.component.js +34 -0
  90. package/dist/esm/lib/components/nodes/group-node.component.js.map +1 -0
  91. package/dist/esm/lib/components/nodes/input-node.component.d.ts +20 -0
  92. package/dist/esm/lib/components/nodes/input-node.component.d.ts.map +1 -0
  93. package/dist/esm/lib/components/nodes/input-node.component.js +49 -0
  94. package/dist/esm/lib/components/nodes/input-node.component.js.map +1 -0
  95. package/dist/esm/lib/components/nodes/output-node.component.d.ts +20 -0
  96. package/dist/esm/lib/components/nodes/output-node.component.d.ts.map +1 -0
  97. package/dist/esm/lib/components/nodes/output-node.component.js +48 -0
  98. package/dist/esm/lib/components/nodes/output-node.component.js.map +1 -0
  99. package/dist/esm/lib/components/panel/panel.component.d.ts +13 -0
  100. package/dist/esm/lib/components/panel/panel.component.d.ts.map +1 -0
  101. package/dist/esm/lib/components/panel/panel.component.js +39 -0
  102. package/dist/esm/lib/components/panel/panel.component.js.map +1 -0
  103. package/dist/esm/lib/components/selection-box/selection-box.component.d.ts +12 -0
  104. package/dist/esm/lib/components/selection-box/selection-box.component.d.ts.map +1 -0
  105. package/dist/esm/lib/components/selection-box/selection-box.component.js +56 -0
  106. package/dist/esm/lib/components/selection-box/selection-box.component.js.map +1 -0
  107. package/dist/esm/lib/components/viewport-portal/viewport-portal.component.d.ts +8 -0
  108. package/dist/esm/lib/components/viewport-portal/viewport-portal.component.d.ts.map +1 -0
  109. package/dist/esm/lib/components/viewport-portal/viewport-portal.component.js +35 -0
  110. package/dist/esm/lib/components/viewport-portal/viewport-portal.component.js.map +1 -0
  111. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.d.ts +70 -0
  112. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.d.ts.map +1 -0
  113. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.js +503 -0
  114. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.js.map +1 -0
  115. package/dist/esm/lib/container/ng-flow/ng-flow.component.d.ts +281 -0
  116. package/dist/esm/lib/container/ng-flow/ng-flow.component.d.ts.map +1 -0
  117. package/dist/esm/lib/container/ng-flow/ng-flow.component.js +644 -0
  118. package/dist/esm/lib/container/ng-flow/ng-flow.component.js.map +1 -0
  119. package/dist/esm/lib/container/node-renderer/node-renderer.component.d.ts +56 -0
  120. package/dist/esm/lib/container/node-renderer/node-renderer.component.d.ts.map +1 -0
  121. package/dist/esm/lib/container/node-renderer/node-renderer.component.js +312 -0
  122. package/dist/esm/lib/container/node-renderer/node-renderer.component.js.map +1 -0
  123. package/dist/esm/lib/container/pane/pane.component.d.ts +35 -0
  124. package/dist/esm/lib/container/pane/pane.component.d.ts.map +1 -0
  125. package/dist/esm/lib/container/pane/pane.component.js +161 -0
  126. package/dist/esm/lib/container/pane/pane.component.js.map +1 -0
  127. package/dist/esm/lib/container/viewport/viewport.component.d.ts +9 -0
  128. package/dist/esm/lib/container/viewport/viewport.component.d.ts.map +1 -0
  129. package/dist/esm/lib/container/viewport/viewport.component.js +35 -0
  130. package/dist/esm/lib/container/viewport/viewport.component.js.map +1 -0
  131. package/dist/esm/lib/directives/drag.directive.d.ts +21 -0
  132. package/dist/esm/lib/directives/drag.directive.d.ts.map +1 -0
  133. package/dist/esm/lib/directives/drag.directive.js +69 -0
  134. package/dist/esm/lib/directives/drag.directive.js.map +1 -0
  135. package/dist/esm/lib/directives/drop-zone.directive.d.ts +30 -0
  136. package/dist/esm/lib/directives/drop-zone.directive.d.ts.map +1 -0
  137. package/dist/esm/lib/directives/drop-zone.directive.js +58 -0
  138. package/dist/esm/lib/directives/drop-zone.directive.js.map +1 -0
  139. package/dist/esm/lib/directives/key-handler.directive.d.ts +29 -0
  140. package/dist/esm/lib/directives/key-handler.directive.d.ts.map +1 -0
  141. package/dist/esm/lib/directives/key-handler.directive.js +176 -0
  142. package/dist/esm/lib/directives/key-handler.directive.js.map +1 -0
  143. package/dist/esm/lib/directives/node-type.directive.d.ts +21 -0
  144. package/dist/esm/lib/directives/node-type.directive.d.ts.map +1 -0
  145. package/dist/esm/lib/directives/node-type.directive.js +32 -0
  146. package/dist/esm/lib/directives/node-type.directive.js.map +1 -0
  147. package/dist/esm/lib/public-api.d.ts +40 -0
  148. package/dist/esm/lib/public-api.d.ts.map +1 -0
  149. package/dist/esm/lib/public-api.js +67 -0
  150. package/dist/esm/lib/public-api.js.map +1 -0
  151. package/dist/esm/lib/services/flow-store.service.d.ts +227 -0
  152. package/dist/esm/lib/services/flow-store.service.d.ts.map +1 -0
  153. package/dist/esm/lib/services/flow-store.service.js +542 -0
  154. package/dist/esm/lib/services/flow-store.service.js.map +1 -0
  155. package/dist/esm/lib/services/ng-flow.service.d.ts +186 -0
  156. package/dist/esm/lib/services/ng-flow.service.d.ts.map +1 -0
  157. package/dist/esm/lib/services/ng-flow.service.js +501 -0
  158. package/dist/esm/lib/services/ng-flow.service.js.map +1 -0
  159. package/dist/esm/lib/services/tokens.d.ts +4 -0
  160. package/dist/esm/lib/services/tokens.d.ts.map +1 -0
  161. package/dist/esm/lib/services/tokens.js +4 -0
  162. package/dist/esm/lib/services/tokens.js.map +1 -0
  163. package/dist/esm/lib/types/edges.d.ts +83 -0
  164. package/dist/esm/lib/types/edges.d.ts.map +1 -0
  165. package/dist/esm/lib/types/edges.js +2 -0
  166. package/dist/esm/lib/types/edges.js.map +1 -0
  167. package/dist/esm/lib/types/general.d.ts +128 -0
  168. package/dist/esm/lib/types/general.d.ts.map +1 -0
  169. package/dist/esm/lib/types/general.js +2 -0
  170. package/dist/esm/lib/types/general.js.map +1 -0
  171. package/dist/esm/lib/types/index.d.ts +5 -0
  172. package/dist/esm/lib/types/index.d.ts.map +1 -0
  173. package/dist/esm/lib/types/index.js +5 -0
  174. package/dist/esm/lib/types/index.js.map +1 -0
  175. package/dist/esm/lib/types/nodes.d.ts +53 -0
  176. package/dist/esm/lib/types/nodes.d.ts.map +1 -0
  177. package/dist/esm/lib/types/nodes.js +2 -0
  178. package/dist/esm/lib/types/nodes.js.map +1 -0
  179. package/dist/esm/lib/types/store.d.ts +71 -0
  180. package/dist/esm/lib/types/store.d.ts.map +1 -0
  181. package/dist/esm/lib/types/store.js +2 -0
  182. package/dist/esm/lib/types/store.js.map +1 -0
  183. package/dist/esm/lib/utils/changes.d.ts +12 -0
  184. package/dist/esm/lib/utils/changes.d.ts.map +1 -0
  185. package/dist/esm/lib/utils/changes.js +134 -0
  186. package/dist/esm/lib/utils/changes.js.map +1 -0
  187. package/dist/esm/lib/utils/index.d.ts +2 -0
  188. package/dist/esm/lib/utils/index.d.ts.map +1 -0
  189. package/dist/esm/lib/utils/index.js +2 -0
  190. package/dist/esm/lib/utils/index.js.map +1 -0
  191. package/dist/esm/lib/utils/type-guards.d.ts +12 -0
  192. package/dist/esm/lib/utils/type-guards.d.ts.map +1 -0
  193. package/dist/esm/lib/utils/type-guards.js +16 -0
  194. package/dist/esm/lib/utils/type-guards.js.map +1 -0
  195. package/dist/style.css +1392 -0
  196. package/package.json +60 -0
@@ -0,0 +1,161 @@
1
+ import { Component, ChangeDetectionStrategy, input, output, inject, NgZone, ElementRef } from '@angular/core';
2
+ import { getNodesInside, SelectionMode } from '@angflow/system';
3
+ import { FlowStore } from '../../services/flow-store.service';
4
+ import * as i0 from "@angular/core";
5
+ const _c0 = ["*"];
6
+ export class PaneComponent {
7
+ constructor() {
8
+ this.store = inject(FlowStore);
9
+ this.zone = inject(NgZone);
10
+ this.el = inject((ElementRef));
11
+ this.panOnDrag = input(true, ...(ngDevMode ? [{ debugName: "panOnDrag" }] : /* istanbul ignore next */ []));
12
+ this.selectionOnDrag = input(false, ...(ngDevMode ? [{ debugName: "selectionOnDrag" }] : /* istanbul ignore next */ []));
13
+ this.selectionKeyCode = input(null, ...(ngDevMode ? [{ debugName: "selectionKeyCode" }] : /* istanbul ignore next */ []));
14
+ this.selectionMode = input(SelectionMode.Full, ...(ngDevMode ? [{ debugName: "selectionMode" }] : /* istanbul ignore next */ []));
15
+ this.selectionStart = output();
16
+ this.selectionEnd = output();
17
+ this.paneScroll = output();
18
+ this.isSelecting = false;
19
+ this.startX = 0;
20
+ this.startY = 0;
21
+ this.boundOnMouseMove = null;
22
+ this.boundOnMouseUp = null;
23
+ this.nativeMouseDownHandler = null;
24
+ }
25
+ onWheel(event) {
26
+ this.paneScroll.emit(event);
27
+ }
28
+ /**
29
+ * Call this after d3-zoom is initialized to attach a capture-phase
30
+ * mousedown listener that fires BEFORE d3-zoom's listener.
31
+ */
32
+ initSelectionListener() {
33
+ this.nativeMouseDownHandler = (e) => this.onMouseDown(e);
34
+ // Capture phase fires before d3-zoom's bubble-phase listener
35
+ this.el.nativeElement.addEventListener('mousedown', this.nativeMouseDownHandler, true);
36
+ }
37
+ onMouseDown(event) {
38
+ const shouldSelect = this.selectionOnDrag() || this.store.selectionKeyActive();
39
+ if (!shouldSelect)
40
+ return;
41
+ if (event.button !== 0)
42
+ return;
43
+ const target = event.target;
44
+ if (target.closest('.xy-flow__node') || target.closest('.xy-flow__handle') ||
45
+ target.closest('.xy-flow__edge') || target.closest('.xy-flow__controls') ||
46
+ target.closest('.xy-flow__panel')) {
47
+ return;
48
+ }
49
+ // Prevent d3-zoom from seeing this event
50
+ event.stopImmediatePropagation();
51
+ event.preventDefault();
52
+ const containerEl = this.store.domNode();
53
+ if (!containerEl)
54
+ return;
55
+ const rect = containerEl.getBoundingClientRect();
56
+ this.startX = event.clientX - rect.left;
57
+ this.startY = event.clientY - rect.top;
58
+ this.isSelecting = true;
59
+ this.store.userSelectionActive.set(true);
60
+ this.store.userSelectionRect.set({
61
+ x: this.startX,
62
+ y: this.startY,
63
+ width: 0,
64
+ height: 0,
65
+ startX: this.startX,
66
+ startY: this.startY,
67
+ });
68
+ this.selectionStart.emit(event);
69
+ this.boundOnMouseMove = (e) => this.onMouseMove(e);
70
+ this.boundOnMouseUp = (e) => this.onMouseUp(e);
71
+ this.zone.runOutsideAngular(() => {
72
+ document.addEventListener('mousemove', this.boundOnMouseMove);
73
+ document.addEventListener('mouseup', this.boundOnMouseUp);
74
+ });
75
+ }
76
+ onMouseMove(event) {
77
+ if (!this.isSelecting)
78
+ return;
79
+ const containerEl = this.store.domNode();
80
+ if (!containerEl)
81
+ return;
82
+ const rect = containerEl.getBoundingClientRect();
83
+ const currentX = event.clientX - rect.left;
84
+ const currentY = event.clientY - rect.top;
85
+ const selectionRect = {
86
+ x: Math.min(this.startX, currentX),
87
+ y: Math.min(this.startY, currentY),
88
+ width: Math.abs(currentX - this.startX),
89
+ height: Math.abs(currentY - this.startY),
90
+ startX: this.startX,
91
+ startY: this.startY,
92
+ };
93
+ this.zone.run(() => {
94
+ this.store.userSelectionRect.set(selectionRect);
95
+ const transform = this.store.transform();
96
+ const partially = this.selectionMode() === SelectionMode.Partial;
97
+ const nodesInside = getNodesInside(this.store.nodeLookup, selectionRect, transform, partially);
98
+ const nodeIds = nodesInside.map(n => n.id);
99
+ if (nodeIds.length > 0) {
100
+ this.store.addSelectedNodes(nodeIds);
101
+ }
102
+ });
103
+ }
104
+ onMouseUp(event) {
105
+ if (!this.isSelecting)
106
+ return;
107
+ this.isSelecting = false;
108
+ if (this.boundOnMouseMove) {
109
+ document.removeEventListener('mousemove', this.boundOnMouseMove);
110
+ this.boundOnMouseMove = null;
111
+ }
112
+ if (this.boundOnMouseUp) {
113
+ document.removeEventListener('mouseup', this.boundOnMouseUp);
114
+ this.boundOnMouseUp = null;
115
+ }
116
+ this.zone.run(() => {
117
+ this.store.userSelectionActive.set(false);
118
+ this.store.userSelectionRect.set(null);
119
+ this.selectionEnd.emit(event);
120
+ });
121
+ }
122
+ ngOnDestroy() {
123
+ if (this.nativeMouseDownHandler) {
124
+ this.el.nativeElement.removeEventListener('mousedown', this.nativeMouseDownHandler, true);
125
+ }
126
+ if (this.boundOnMouseMove) {
127
+ document.removeEventListener('mousemove', this.boundOnMouseMove);
128
+ }
129
+ if (this.boundOnMouseUp) {
130
+ document.removeEventListener('mouseup', this.boundOnMouseUp);
131
+ }
132
+ }
133
+ static { this.ɵfac = function PaneComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaneComponent)(); }; }
134
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PaneComponent, selectors: [["ng-flow-pane"]], hostAttrs: [1, "ng-flow__pane", "xy-flow__pane", "xy-flow__container", 2, "display", "block", "position", "absolute", "width", "100%", "height", "100%", "top", "0", "left", "0", "z-index", "1"], hostVars: 6, hostBindings: function PaneComponent_HostBindings(rf, ctx) { if (rf & 1) {
135
+ i0.ɵɵlistener("wheel", function PaneComponent_wheel_HostBindingHandler($event) { return ctx.onWheel($event); });
136
+ } if (rf & 2) {
137
+ i0.ɵɵclassProp("draggable", ctx.panOnDrag())("dragging", ctx.store.paneDragging())("selection", ctx.store.userSelectionActive());
138
+ } }, inputs: { panOnDrag: [1, "panOnDrag"], selectionOnDrag: [1, "selectionOnDrag"], selectionKeyCode: [1, "selectionKeyCode"], selectionMode: [1, "selectionMode"] }, outputs: { selectionStart: "selectionStart", selectionEnd: "selectionEnd", paneScroll: "paneScroll" }, ngContentSelectors: _c0, decls: 1, vars: 0, template: function PaneComponent_Template(rf, ctx) { if (rf & 1) {
139
+ i0.ɵɵprojectionDef();
140
+ i0.ɵɵprojection(0);
141
+ } }, encapsulation: 2, changeDetection: 0 }); }
142
+ }
143
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaneComponent, [{
144
+ type: Component,
145
+ args: [{
146
+ selector: 'ng-flow-pane',
147
+ standalone: true,
148
+ changeDetection: ChangeDetectionStrategy.OnPush,
149
+ host: {
150
+ 'class': 'ng-flow__pane xy-flow__pane xy-flow__container',
151
+ 'style': 'display: block; position: absolute; width: 100%; height: 100%; top: 0; left: 0; z-index: 1;',
152
+ '[class.draggable]': 'panOnDrag()',
153
+ '[class.dragging]': 'store.paneDragging()',
154
+ '[class.selection]': 'store.userSelectionActive()',
155
+ '(wheel)': 'onWheel($event)',
156
+ },
157
+ template: `<ng-content />`,
158
+ }]
159
+ }], null, { panOnDrag: [{ type: i0.Input, args: [{ isSignal: true, alias: "panOnDrag", required: false }] }], selectionOnDrag: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionOnDrag", required: false }] }], selectionKeyCode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionKeyCode", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], selectionStart: [{ type: i0.Output, args: ["selectionStart"] }], selectionEnd: [{ type: i0.Output, args: ["selectionEnd"] }], paneScroll: [{ type: i0.Output, args: ["paneScroll"] }] }); })();
160
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PaneComponent, { className: "PaneComponent", filePath: "lib/container/pane/pane.component.ts", lineNumber: 19 }); })();
161
+ //# sourceMappingURL=pane.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pane.component.js","sourceRoot":"","sources":["../../../../../src/lib/container/pane/pane.component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Transform } from '@angflow/system';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ViewportComponent {
4
+ readonly transform: import("@angular/core").InputSignal<Transform>;
5
+ readonly cssTransform: import("@angular/core").Signal<string>;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<ViewportComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<ViewportComponent, "ng-flow-viewport", never, { "transform": { "alias": "transform"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
8
+ }
9
+ //# sourceMappingURL=viewport.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewport.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/container/viewport/viewport.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;;AAEjD,qBAWa,iBAAiB;IAC5B,QAAQ,CAAC,SAAS,iDAA+B;IAEjD,QAAQ,CAAC,YAAY,yCAGlB;yCANQ,iBAAiB;2CAAjB,iBAAiB;CAO7B"}
@@ -0,0 +1,35 @@
1
+ import { Component, ChangeDetectionStrategy, input, computed } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ const _c0 = ["*"];
4
+ export class ViewportComponent {
5
+ constructor() {
6
+ this.transform = input.required(...(ngDevMode ? [{ debugName: "transform" }] : /* istanbul ignore next */ []));
7
+ this.cssTransform = computed(() => {
8
+ const t = this.transform();
9
+ return `translate(${t[0]}px, ${t[1]}px) scale(${t[2]})`;
10
+ }, ...(ngDevMode ? [{ debugName: "cssTransform" }] : /* istanbul ignore next */ []));
11
+ }
12
+ static { this.ɵfac = function ViewportComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ViewportComponent)(); }; }
13
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ViewportComponent, selectors: [["ng-flow-viewport"]], hostAttrs: [1, "ng-flow__viewport", "xy-flow__viewport", "xyflow__viewport", 2, "display", "block", "transform-origin", "0 0", "z-index", "2", "pointer-events", "none", "position", "absolute", "width", "100%", "height", "100%"], hostVars: 2, hostBindings: function ViewportComponent_HostBindings(rf, ctx) { if (rf & 2) {
14
+ i0.ɵɵstyleProp("transform", ctx.cssTransform());
15
+ } }, inputs: { transform: [1, "transform"] }, ngContentSelectors: _c0, decls: 1, vars: 0, template: function ViewportComponent_Template(rf, ctx) { if (rf & 1) {
16
+ i0.ɵɵprojectionDef();
17
+ i0.ɵɵprojection(0);
18
+ } }, encapsulation: 2, changeDetection: 0 }); }
19
+ }
20
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ViewportComponent, [{
21
+ type: Component,
22
+ args: [{
23
+ selector: 'ng-flow-viewport',
24
+ standalone: true,
25
+ changeDetection: ChangeDetectionStrategy.OnPush,
26
+ host: {
27
+ 'class': 'ng-flow__viewport xy-flow__viewport xyflow__viewport',
28
+ 'style': 'display: block; transform-origin: 0 0; z-index: 2; pointer-events: none; position: absolute; width: 100%; height: 100%;',
29
+ '[style.transform]': 'cssTransform()',
30
+ },
31
+ template: `<ng-content />`,
32
+ }]
33
+ }], null, { transform: [{ type: i0.Input, args: [{ isSignal: true, alias: "transform", required: true }] }] }); })();
34
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ViewportComponent, { className: "ViewportComponent", filePath: "lib/container/viewport/viewport.component.ts", lineNumber: 15 }); })();
35
+ //# sourceMappingURL=viewport.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewport.component.js","sourceRoot":"","sources":["../../../../../src/lib/container/viewport/viewport.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;;;AAcpF,MAAM,OAAO,iBAAiB;IAX9B;QAYW,cAAS,GAAG,KAAK,CAAC,QAAQ,+EAAa,CAAC;QAExC,iBAAY,GAAG,QAAQ,CAAC,GAAG,EAAE;YACpC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1D,CAAC,mFAAC,CAAC;KACJ;kHAPY,iBAAiB;oEAAjB,iBAAiB;YAAjB,4BAAA,kBAAc,CAAG;;;YAFjB,kBAAc;;;iFAEd,iBAAiB;cAX7B,SAAS;eAAC;gBACT,QAAQ,EAAE,kBAAkB;gBAC5B,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;gBAC/C,IAAI,EAAE;oBACJ,OAAO,EAAE,sDAAsD;oBAC/D,OAAO,EAAE,yHAAyH;oBAClI,mBAAmB,EAAE,gBAAgB;iBACtC;gBACD,QAAQ,EAAE,gBAAgB;aAC3B;;kFACY,iBAAiB"}
@@ -0,0 +1,21 @@
1
+ import { OnInit, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class DragDirective implements OnInit, OnChanges, OnDestroy {
4
+ private store;
5
+ private el;
6
+ readonly nodeId: import("@angular/core").InputSignal<string>;
7
+ readonly disabled: import("@angular/core").InputSignal<boolean>;
8
+ readonly noDragClassName: import("@angular/core").InputSignal<string>;
9
+ readonly handleSelector: import("@angular/core").InputSignal<string | undefined>;
10
+ readonly isSelectable: import("@angular/core").InputSignal<boolean>;
11
+ readonly nodeClickDistance: import("@angular/core").InputSignal<number>;
12
+ private dragInstance;
13
+ ngOnInit(): void;
14
+ ngOnChanges(changes: SimpleChanges): void;
15
+ ngOnDestroy(): void;
16
+ private updateDrag;
17
+ private handleNodeClick;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<DragDirective, never>;
19
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DragDirective, "[ngFlowDrag]", never, { "nodeId": { "alias": "ngFlowDrag"; "required": true; "isSignal": true; }; "disabled": { "alias": "ngFlowDragDisabled"; "required": false; "isSignal": true; }; "noDragClassName": { "alias": "ngFlowDragNoDragClass"; "required": false; "isSignal": true; }; "handleSelector": { "alias": "ngFlowDragHandleSelector"; "required": false; "isSignal": true; }; "isSelectable": { "alias": "ngFlowDragSelectable"; "required": false; "isSignal": true; }; "nodeClickDistance": { "alias": "ngFlowDragClickDistance"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
20
+ }
21
+ //# sourceMappingURL=drag.directive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag.directive.d.ts","sourceRoot":"","sources":["../../../../src/lib/directives/drag.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,MAAM,EACN,SAAS,EACT,SAAS,EACT,aAAa,EACd,MAAM,eAAe,CAAC;;AAIvB,qBAIa,aAAc,YAAW,MAAM,EAAE,SAAS,EAAE,SAAS;IAChE,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,EAAE,CAAsC;IAEhD,QAAQ,CAAC,MAAM,8CAAmD;IAClE,QAAQ,CAAC,QAAQ,+CAAiD;IAClE,QAAQ,CAAC,eAAe,8CAA+D;IACvF,QAAQ,CAAC,cAAc,0DAA+E;IACtG,QAAQ,CAAC,YAAY,+CAAkD;IACvE,QAAQ,CAAC,iBAAiB,8CAAkD;IAE5E,OAAO,CAAC,YAAY,CAA+B;IAEnD,QAAQ,IAAI,IAAI;IAWhB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAMzC,WAAW,IAAI,IAAI;IAInB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,eAAe;yCAjDZ,aAAa;2CAAb,aAAa;CA6DzB"}
@@ -0,0 +1,69 @@
1
+ import { Directive, ElementRef, inject, input, } from '@angular/core';
2
+ import { XYDrag } from '@angflow/system';
3
+ import { FlowStore } from '../services/flow-store.service';
4
+ import * as i0 from "@angular/core";
5
+ export class DragDirective {
6
+ constructor() {
7
+ this.store = inject(FlowStore);
8
+ this.el = inject((ElementRef));
9
+ this.nodeId = input.required({ ...(ngDevMode ? { debugName: "nodeId" } : /* istanbul ignore next */ {}), alias: 'ngFlowDrag' });
10
+ this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), alias: 'ngFlowDragDisabled' });
11
+ this.noDragClassName = input('nodrag', { ...(ngDevMode ? { debugName: "noDragClassName" } : /* istanbul ignore next */ {}), alias: 'ngFlowDragNoDragClass' });
12
+ this.handleSelector = input(undefined, { ...(ngDevMode ? { debugName: "handleSelector" } : /* istanbul ignore next */ {}), alias: 'ngFlowDragHandleSelector' });
13
+ this.isSelectable = input(true, { ...(ngDevMode ? { debugName: "isSelectable" } : /* istanbul ignore next */ {}), alias: 'ngFlowDragSelectable' });
14
+ this.nodeClickDistance = input(0, { ...(ngDevMode ? { debugName: "nodeClickDistance" } : /* istanbul ignore next */ {}), alias: 'ngFlowDragClickDistance' });
15
+ this.dragInstance = null;
16
+ }
17
+ ngOnInit() {
18
+ this.dragInstance = XYDrag({
19
+ getStoreItems: () => this.store.getStoreItems(),
20
+ onNodeMouseDown: (id) => {
21
+ this.handleNodeClick(id);
22
+ },
23
+ });
24
+ this.updateDrag();
25
+ }
26
+ ngOnChanges(changes) {
27
+ if (this.dragInstance) {
28
+ this.updateDrag();
29
+ }
30
+ }
31
+ ngOnDestroy() {
32
+ this.dragInstance?.destroy();
33
+ }
34
+ updateDrag() {
35
+ if (this.disabled() || !this.el.nativeElement || !this.dragInstance) {
36
+ return;
37
+ }
38
+ this.dragInstance.update({
39
+ noDragClassName: this.noDragClassName(),
40
+ handleSelector: this.handleSelector(),
41
+ domNode: this.el.nativeElement,
42
+ isSelectable: this.isSelectable(),
43
+ nodeId: this.nodeId(),
44
+ nodeClickDistance: this.nodeClickDistance(),
45
+ });
46
+ }
47
+ handleNodeClick(id) {
48
+ const store = this.store;
49
+ const node = store.nodeLookup.get(id);
50
+ if (!node)
51
+ return;
52
+ if (store.selectNodesOnDrag()) {
53
+ // If the node is already selected, don't re-select (which would deselect others)
54
+ if (!node.selected) {
55
+ store.addSelectedNodes([id]);
56
+ }
57
+ }
58
+ }
59
+ static { this.ɵfac = function DragDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DragDirective)(); }; }
60
+ static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: DragDirective, selectors: [["", "ngFlowDrag", ""]], inputs: { nodeId: [1, "ngFlowDrag", "nodeId"], disabled: [1, "ngFlowDragDisabled", "disabled"], noDragClassName: [1, "ngFlowDragNoDragClass", "noDragClassName"], handleSelector: [1, "ngFlowDragHandleSelector", "handleSelector"], isSelectable: [1, "ngFlowDragSelectable", "isSelectable"], nodeClickDistance: [1, "ngFlowDragClickDistance", "nodeClickDistance"] }, features: [i0.ɵɵNgOnChangesFeature] }); }
61
+ }
62
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DragDirective, [{
63
+ type: Directive,
64
+ args: [{
65
+ selector: '[ngFlowDrag]',
66
+ standalone: true,
67
+ }]
68
+ }], null, { nodeId: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngFlowDrag", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngFlowDragDisabled", required: false }] }], noDragClassName: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngFlowDragNoDragClass", required: false }] }], handleSelector: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngFlowDragHandleSelector", required: false }] }], isSelectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngFlowDragSelectable", required: false }] }], nodeClickDistance: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngFlowDragClickDistance", required: false }] }] }); })();
69
+ //# sourceMappingURL=drag.directive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag.directive.js","sourceRoot":"","sources":["../../../../src/lib/directives/drag.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,MAAM,EACN,KAAK,GAKN,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,MAAM,EAAuB,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;;AAM3D,MAAM,OAAO,aAAa;IAJ1B;QAKU,UAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1B,OAAE,GAAG,MAAM,CAAC,CAAA,UAA0B,CAAA,CAAC,CAAC;QAEvC,WAAM,GAAG,KAAK,CAAC,QAAQ,6EAAW,KAAK,EAAE,YAAY,GAAG,CAAC;QACzD,aAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,KAAK,EAAE,oBAAoB,GAAG,CAAC;QACzD,oBAAe,GAAG,KAAK,CAAS,QAAQ,uFAAI,KAAK,EAAE,uBAAuB,GAAG,CAAC;QAC9E,mBAAc,GAAG,KAAK,CAAqB,SAAS,sFAAI,KAAK,EAAE,0BAA0B,GAAG,CAAC;QAC7F,iBAAY,GAAG,KAAK,CAAC,IAAI,oFAAI,KAAK,EAAE,sBAAsB,GAAG,CAAC;QAC9D,sBAAiB,GAAG,KAAK,CAAC,CAAC,yFAAI,KAAK,EAAE,yBAAyB,GAAG,CAAC;QAEpE,iBAAY,GAA0B,IAAI,CAAC;KAkDpD;IAhDC,QAAQ;QACN,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YACzB,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAC/C,eAAe,EAAE,CAAC,EAAU,EAAE,EAAE;gBAC9B,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,WAAW,CAAC,OAAsB;QAChC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YACvB,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;YACvC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;YACrC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;YAC9B,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;YACrB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;SAC5C,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,EAAU;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC9B,iFAAiF;YACjF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;8GA5DU,aAAa;oEAAb,aAAa;;iFAAb,aAAa;cAJzB,SAAS;eAAC;gBACT,QAAQ,EAAE,cAAc;gBACxB,UAAU,EAAE,IAAI;aACjB"}
@@ -0,0 +1,30 @@
1
+ import { OnInit, OnDestroy } from '@angular/core';
2
+ import type { XYPosition } from '@angflow/system';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Directive that makes the flow canvas a drop zone for external drag-and-drop.
6
+ * Works with both native HTML5 drag-and-drop and Angular CDK draggables.
7
+ *
8
+ * Usage:
9
+ * ```html
10
+ * <ng-flow ngFlowDropZone (nodeDrop)="onDrop($event)" [nodes]="nodes" [edges]="edges">
11
+ * ...
12
+ * </ng-flow>
13
+ * ```
14
+ */
15
+ export declare class NgFlowDropZoneDirective implements OnInit, OnDestroy {
16
+ private el;
17
+ private flowService;
18
+ readonly nodeDrop: import("@angular/core").OutputEmitterRef<{
19
+ event: DragEvent;
20
+ flowPosition: XYPosition;
21
+ data: string | null;
22
+ }>;
23
+ private onDragOver;
24
+ private onDrop;
25
+ ngOnInit(): void;
26
+ ngOnDestroy(): void;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgFlowDropZoneDirective, never>;
28
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgFlowDropZoneDirective, "[ngFlowDropZone]", never, {}, { "nodeDrop": "nodeDrop"; }, never, never, true, never>;
29
+ }
30
+ //# sourceMappingURL=drop-zone.directive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop-zone.directive.d.ts","sourceRoot":"","sources":["../../../../src/lib/directives/drop-zone.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,MAAM,EAAE,SAAS,EAAc,MAAM,eAAe,CAAC;AAEzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;;AAElD;;;;;;;;;;GAUG;AACH,qBAIa,uBAAwB,YAAW,MAAM,EAAE,SAAS;IAC/D,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,WAAW,CAAyB;IAE5C,QAAQ,CAAC,QAAQ;eAAmB,SAAS;sBAAgB,UAAU;cAAQ,MAAM,GAAG,IAAI;OAAM;IAElG,OAAO,CAAC,UAAU,CAKhB;IAEF,OAAO,CAAC,MAAM,CAaZ;IAEF,QAAQ,IAAI,IAAI;IAMhB,WAAW,IAAI,IAAI;yCAlCR,uBAAuB;2CAAvB,uBAAuB;CAuCnC"}
@@ -0,0 +1,58 @@
1
+ import { Directive, inject, output, ElementRef } from '@angular/core';
2
+ import { NgFlowService } from '../services/ng-flow.service';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Directive that makes the flow canvas a drop zone for external drag-and-drop.
6
+ * Works with both native HTML5 drag-and-drop and Angular CDK draggables.
7
+ *
8
+ * Usage:
9
+ * ```html
10
+ * <ng-flow ngFlowDropZone (nodeDrop)="onDrop($event)" [nodes]="nodes" [edges]="edges">
11
+ * ...
12
+ * </ng-flow>
13
+ * ```
14
+ */
15
+ export class NgFlowDropZoneDirective {
16
+ constructor() {
17
+ this.el = inject((ElementRef));
18
+ this.flowService = inject(NgFlowService);
19
+ this.nodeDrop = output();
20
+ this.onDragOver = (event) => {
21
+ event.preventDefault();
22
+ if (event.dataTransfer) {
23
+ event.dataTransfer.dropEffect = 'move';
24
+ }
25
+ };
26
+ this.onDrop = (event) => {
27
+ event.preventDefault();
28
+ const flowPosition = this.flowService.screenToFlowPosition({
29
+ x: event.clientX,
30
+ y: event.clientY,
31
+ });
32
+ const data = event.dataTransfer?.getData('application/json')
33
+ ?? event.dataTransfer?.getData('text/plain')
34
+ ?? null;
35
+ this.nodeDrop.emit({ event, flowPosition, data });
36
+ };
37
+ }
38
+ ngOnInit() {
39
+ const el = this.el.nativeElement;
40
+ el.addEventListener('dragover', this.onDragOver);
41
+ el.addEventListener('drop', this.onDrop);
42
+ }
43
+ ngOnDestroy() {
44
+ const el = this.el.nativeElement;
45
+ el.removeEventListener('dragover', this.onDragOver);
46
+ el.removeEventListener('drop', this.onDrop);
47
+ }
48
+ static { this.ɵfac = function NgFlowDropZoneDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NgFlowDropZoneDirective)(); }; }
49
+ static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: NgFlowDropZoneDirective, selectors: [["", "ngFlowDropZone", ""]], outputs: { nodeDrop: "nodeDrop" } }); }
50
+ }
51
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NgFlowDropZoneDirective, [{
52
+ type: Directive,
53
+ args: [{
54
+ selector: '[ngFlowDropZone]',
55
+ standalone: true,
56
+ }]
57
+ }], null, { nodeDrop: [{ type: i0.Output, args: ["nodeDrop"] }] }); })();
58
+ //# sourceMappingURL=drop-zone.directive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop-zone.directive.js","sourceRoot":"","sources":["../../../../src/lib/directives/drop-zone.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAqB,UAAU,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;;AAG5D;;;;;;;;;;GAUG;AAKH,MAAM,OAAO,uBAAuB;IAJpC;QAKU,OAAE,GAAG,MAAM,CAAC,CAAA,UAAuB,CAAA,CAAC,CAAC;QACrC,gBAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;QAEnC,aAAQ,GAAG,MAAM,EAAuE,CAAC;QAE1F,eAAU,GAAG,CAAC,KAAgB,EAAE,EAAE;YACxC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBACvB,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC;YACzC,CAAC;QACH,CAAC,CAAC;QAEM,WAAM,GAAG,CAAC,KAAgB,EAAE,EAAE;YACpC,KAAK,CAAC,cAAc,EAAE,CAAC;YAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC;gBACzD,CAAC,EAAE,KAAK,CAAC,OAAO;gBAChB,CAAC,EAAE,KAAK,CAAC,OAAO;aACjB,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,kBAAkB,CAAC;mBACvD,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;mBACzC,IAAI,CAAC;YAEV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC;KAaH;IAXC,QAAQ;QACN,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QACjC,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,WAAW;QACT,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QACjC,EAAE,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;wHAtCU,uBAAuB;oEAAvB,uBAAuB;;iFAAvB,uBAAuB;cAJnC,SAAS;eAAC;gBACT,QAAQ,EAAE,kBAAkB;gBAC5B,UAAU,EAAE,IAAI;aACjB"}
@@ -0,0 +1,29 @@
1
+ import { OnInit, OnDestroy } from '@angular/core';
2
+ import type { Node, Edge } from '../types';
3
+ import * as i0 from "@angular/core";
4
+ export declare class KeyHandlerDirective implements OnInit, OnDestroy {
5
+ private store;
6
+ readonly deleteKeyCode: import("@angular/core").InputSignal<string | string[] | null>;
7
+ readonly selectionKeyCode: import("@angular/core").InputSignal<string | string[] | null>;
8
+ readonly multiSelectionKeyCode: import("@angular/core").InputSignal<string | string[] | null>;
9
+ readonly disableKeyboardA11y: import("@angular/core").InputSignal<boolean>;
10
+ readonly nodesDelete: import("@angular/core").OutputEmitterRef<Node[]>;
11
+ readonly edgesDelete: import("@angular/core").OutputEmitterRef<Edge[]>;
12
+ readonly deleteElements: import("@angular/core").OutputEmitterRef<{
13
+ nodes: Node[];
14
+ edges: Edge[];
15
+ }>;
16
+ private selectionKeyPressed;
17
+ private multiSelectionKeyPressed;
18
+ ngOnInit(): void;
19
+ ngOnDestroy(): void;
20
+ onKeyDown(event: KeyboardEvent): void;
21
+ onKeyUp(event: KeyboardEvent): void;
22
+ private handleDelete;
23
+ private handleSelectAll;
24
+ private handleArrowKey;
25
+ private matchesKey;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<KeyHandlerDirective, never>;
27
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KeyHandlerDirective, "[ngFlowKeyHandler]", never, { "deleteKeyCode": { "alias": "deleteKeyCode"; "required": false; "isSignal": true; }; "selectionKeyCode": { "alias": "selectionKeyCode"; "required": false; "isSignal": true; }; "multiSelectionKeyCode": { "alias": "multiSelectionKeyCode"; "required": false; "isSignal": true; }; "disableKeyboardA11y": { "alias": "disableKeyboardA11y"; "required": false; "isSignal": true; }; }, { "nodesDelete": "nodesDelete"; "edgesDelete": "edgesDelete"; "deleteElements": "deleteElements"; }, never, never, true, never>;
28
+ }
29
+ //# sourceMappingURL=key-handler.directive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-handler.directive.d.ts","sourceRoot":"","sources":["../../../../src/lib/directives/key-handler.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,MAAM,EACN,SAAS,EACV,MAAM,eAAe,CAAC;AAIvB,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;;AAE3C,qBAQa,mBAAoB,YAAW,MAAM,EAAE,SAAS;IAC3D,OAAO,CAAC,KAAK,CAAqB;IAElC,QAAQ,CAAC,aAAa,gEAA4D;IAClF,QAAQ,CAAC,gBAAgB,gEAA4C;IACrE,QAAQ,CAAC,qBAAqB,gEAA2C;IACzE,QAAQ,CAAC,mBAAmB,+CAAgB;IAE5C,QAAQ,CAAC,WAAW,mDAAoB;IACxC,QAAQ,CAAC,WAAW,mDAAoB;IACxC,QAAQ,CAAC,cAAc;eAAmB,IAAI,EAAE;eAAS,IAAI,EAAE;OAAM;IAErE,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,wBAAwB,CAAS;IAEzC,QAAQ,IAAI,IAAI;IAChB,WAAW,IAAI,IAAI;IAEnB,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAsCrC,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAYnC,OAAO,CAAC,YAAY;IAmDpB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,UAAU;yCAnKP,mBAAmB;2CAAnB,mBAAmB;CAwK/B"}