@angflow/angular 0.0.19 → 0.3.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 (234) hide show
  1. package/README.md +108 -15
  2. package/dist/base.css +8 -0
  3. package/dist/esm/index.d.ts +0 -1
  4. package/dist/esm/lib/agent/agent-bridge.service.d.ts +3 -1
  5. package/dist/esm/lib/agent/agent-bridge.service.js +130 -23
  6. package/dist/esm/lib/agent/agent-bridge.service.js.map +1 -1
  7. package/dist/esm/lib/agent/chat/agent-chat.component.d.ts +0 -1
  8. package/dist/esm/lib/agent/chat/agent-chat.service.d.ts +0 -1
  9. package/dist/esm/lib/agent/chat/agent-chat.service.js +11 -2
  10. package/dist/esm/lib/agent/chat/agent-chat.service.js.map +1 -1
  11. package/dist/esm/lib/agent/chat/default-system-prompt.d.ts +1 -2
  12. package/dist/esm/lib/agent/chat/default-system-prompt.js +2 -1
  13. package/dist/esm/lib/agent/chat/default-system-prompt.js.map +1 -1
  14. package/dist/esm/lib/agent/chat/index.d.ts +0 -1
  15. package/dist/esm/lib/agent/chat/provide-agent-chat.d.ts +0 -1
  16. package/dist/esm/lib/agent/chat/types.d.ts +0 -1
  17. package/dist/esm/lib/agent/history.d.ts +0 -1
  18. package/dist/esm/lib/agent/index.d.ts +0 -1
  19. package/dist/esm/lib/agent/provide-agent-bridge.d.ts +0 -1
  20. package/dist/esm/lib/agent/tool-schemas.d.ts +0 -1
  21. package/dist/esm/lib/agent/tool-schemas.js +3 -1
  22. package/dist/esm/lib/agent/tool-schemas.js.map +1 -1
  23. package/dist/esm/lib/agent/transports/websocket.d.ts +8 -1
  24. package/dist/esm/lib/agent/transports/websocket.js +14 -2
  25. package/dist/esm/lib/agent/transports/websocket.js.map +1 -1
  26. package/dist/esm/lib/agent/transports/window.d.ts +0 -1
  27. package/dist/esm/lib/agent/transports/window.js +2 -1
  28. package/dist/esm/lib/agent/transports/window.js.map +1 -1
  29. package/dist/esm/lib/agent/types.d.ts +0 -1
  30. package/dist/esm/lib/components/a11y-descriptions/a11y-descriptions.component.d.ts +0 -1
  31. package/dist/esm/lib/components/attribution/attribution.component.d.ts +0 -1
  32. package/dist/esm/lib/components/background/background.component.d.ts +0 -1
  33. package/dist/esm/lib/components/connection-line/connection-line.component.d.ts +0 -1
  34. package/dist/esm/lib/components/controls/controls.component.d.ts +0 -1
  35. package/dist/esm/lib/components/controls/controls.component.js +2 -1
  36. package/dist/esm/lib/components/controls/controls.component.js.map +1 -1
  37. package/dist/esm/lib/components/edge-label-renderer/edge-label-renderer.component.d.ts +0 -1
  38. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.d.ts +7 -2
  39. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.js +11 -4
  40. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.js.map +1 -1
  41. package/dist/esm/lib/components/edges/base-edge.component.d.ts +0 -1
  42. package/dist/esm/lib/components/edges/bezier-edge.component.d.ts +0 -1
  43. package/dist/esm/lib/components/edges/bezier-edge.component.js +2 -1
  44. package/dist/esm/lib/components/edges/bezier-edge.component.js.map +1 -1
  45. package/dist/esm/lib/components/edges/edge-text.component.d.ts +0 -1
  46. package/dist/esm/lib/components/edges/simple-bezier-edge.component.d.ts +0 -1
  47. package/dist/esm/lib/components/edges/simple-bezier-edge.component.js +2 -1
  48. package/dist/esm/lib/components/edges/simple-bezier-edge.component.js.map +1 -1
  49. package/dist/esm/lib/components/edges/smooth-step-edge.component.d.ts +0 -1
  50. package/dist/esm/lib/components/edges/smooth-step-edge.component.js +2 -1
  51. package/dist/esm/lib/components/edges/smooth-step-edge.component.js.map +1 -1
  52. package/dist/esm/lib/components/edges/step-edge.component.d.ts +0 -1
  53. package/dist/esm/lib/components/edges/step-edge.component.js +2 -1
  54. package/dist/esm/lib/components/edges/step-edge.component.js.map +1 -1
  55. package/dist/esm/lib/components/edges/straight-edge.component.d.ts +0 -1
  56. package/dist/esm/lib/components/edges/straight-edge.component.js +2 -1
  57. package/dist/esm/lib/components/edges/straight-edge.component.js.map +1 -1
  58. package/dist/esm/lib/components/handle/handle.component.d.ts +1 -1
  59. package/dist/esm/lib/components/handle/handle.component.js +13 -1
  60. package/dist/esm/lib/components/handle/handle.component.js.map +1 -1
  61. package/dist/esm/lib/components/handle-group/handle-group.component.d.ts +0 -1
  62. package/dist/esm/lib/components/handle-group/handle-row.component.d.ts +0 -1
  63. package/dist/esm/lib/components/minimap/minimap.component.d.ts +19 -17
  64. package/dist/esm/lib/components/minimap/minimap.component.js +143 -183
  65. package/dist/esm/lib/components/minimap/minimap.component.js.map +1 -1
  66. package/dist/esm/lib/components/ng-flow-provider/ng-flow-provider.component.d.ts +13 -5
  67. package/dist/esm/lib/components/ng-flow-provider/ng-flow-provider.component.js +13 -4
  68. package/dist/esm/lib/components/ng-flow-provider/ng-flow-provider.component.js.map +1 -1
  69. package/dist/esm/lib/components/node-resizer/node-resizer.component.d.ts +2 -1
  70. package/dist/esm/lib/components/node-resizer/node-resizer.component.js +43 -26
  71. package/dist/esm/lib/components/node-resizer/node-resizer.component.js.map +1 -1
  72. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.d.ts +0 -1
  73. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.js +1 -1
  74. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.js.map +1 -1
  75. package/dist/esm/lib/components/nodes/default-node.component.d.ts +6 -15
  76. package/dist/esm/lib/components/nodes/default-node.component.js +13 -22
  77. package/dist/esm/lib/components/nodes/default-node.component.js.map +1 -1
  78. package/dist/esm/lib/components/nodes/group-node.component.d.ts +5 -16
  79. package/dist/esm/lib/components/nodes/group-node.component.js +8 -16
  80. package/dist/esm/lib/components/nodes/group-node.component.js.map +1 -1
  81. package/dist/esm/lib/components/nodes/input-node.component.d.ts +6 -15
  82. package/dist/esm/lib/components/nodes/input-node.component.js +11 -20
  83. package/dist/esm/lib/components/nodes/input-node.component.js.map +1 -1
  84. package/dist/esm/lib/components/nodes/output-node.component.d.ts +6 -15
  85. package/dist/esm/lib/components/nodes/output-node.component.js +11 -20
  86. package/dist/esm/lib/components/nodes/output-node.component.js.map +1 -1
  87. package/dist/esm/lib/components/nodes/template-node.component.d.ts +2 -14
  88. package/dist/esm/lib/components/nodes/template-node.component.js +16 -26
  89. package/dist/esm/lib/components/nodes/template-node.component.js.map +1 -1
  90. package/dist/esm/lib/components/panel/panel.component.d.ts +0 -1
  91. package/dist/esm/lib/components/selection-box/selection-box.component.d.ts +11 -1
  92. package/dist/esm/lib/components/selection-box/selection-box.component.js +108 -3
  93. package/dist/esm/lib/components/selection-box/selection-box.component.js.map +1 -1
  94. package/dist/esm/lib/components/viewport-portal/viewport-portal.component.d.ts +0 -1
  95. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.d.ts +27 -3
  96. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.js +151 -61
  97. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.js.map +1 -1
  98. package/dist/esm/lib/container/ng-flow/ng-flow.component.d.ts +4 -8
  99. package/dist/esm/lib/container/ng-flow/ng-flow.component.js +151 -54
  100. package/dist/esm/lib/container/ng-flow/ng-flow.component.js.map +1 -1
  101. package/dist/esm/lib/container/node-renderer/node-renderer.component.d.ts +7 -1
  102. package/dist/esm/lib/container/node-renderer/node-renderer.component.js +70 -14
  103. package/dist/esm/lib/container/node-renderer/node-renderer.component.js.map +1 -1
  104. package/dist/esm/lib/container/pane/pane.component.d.ts +0 -1
  105. package/dist/esm/lib/container/pane/pane.component.js +23 -3
  106. package/dist/esm/lib/container/pane/pane.component.js.map +1 -1
  107. package/dist/esm/lib/container/viewport/viewport.component.d.ts +0 -1
  108. package/dist/esm/lib/directives/drag.directive.d.ts +1 -2
  109. package/dist/esm/lib/directives/drag.directive.js +1 -1
  110. package/dist/esm/lib/directives/drag.directive.js.map +1 -1
  111. package/dist/esm/lib/directives/drop-zone.directive.d.ts +0 -1
  112. package/dist/esm/lib/directives/key-handler.directive.d.ts +0 -1
  113. package/dist/esm/lib/directives/key-handler.directive.js +6 -2
  114. package/dist/esm/lib/directives/key-handler.directive.js.map +1 -1
  115. package/dist/esm/lib/directives/node-type.directive.d.ts +0 -1
  116. package/dist/esm/lib/graph/collapse.d.ts +35 -0
  117. package/dist/esm/lib/graph/collapse.js +102 -0
  118. package/dist/esm/lib/graph/collapse.js.map +1 -0
  119. package/dist/esm/lib/graph/group-bounds.d.ts +42 -0
  120. package/dist/esm/lib/graph/group-bounds.js +34 -0
  121. package/dist/esm/lib/graph/group-bounds.js.map +1 -0
  122. package/dist/esm/lib/layout/dagre-layout.d.ts +0 -1
  123. package/dist/esm/lib/layout/index.d.ts +1 -2
  124. package/dist/esm/lib/layout/index.js.map +1 -1
  125. package/dist/esm/lib/layout/layout-nodes.d.ts +39 -5
  126. package/dist/esm/lib/layout/layout-nodes.js +94 -7
  127. package/dist/esm/lib/layout/layout-nodes.js.map +1 -1
  128. package/dist/esm/lib/public-api.d.ts +4 -2
  129. package/dist/esm/lib/public-api.js +2 -1
  130. package/dist/esm/lib/public-api.js.map +1 -1
  131. package/dist/esm/lib/services/flow-store.service.d.ts +25 -2
  132. package/dist/esm/lib/services/flow-store.service.js +101 -14
  133. package/dist/esm/lib/services/flow-store.service.js.map +1 -1
  134. package/dist/esm/lib/services/ng-flow.service.d.ts +82 -7
  135. package/dist/esm/lib/services/ng-flow.service.js +210 -26
  136. package/dist/esm/lib/services/ng-flow.service.js.map +1 -1
  137. package/dist/esm/lib/services/tokens.d.ts +0 -1
  138. package/dist/esm/lib/types/edges.d.ts +0 -1
  139. package/dist/esm/lib/types/general.d.ts +0 -1
  140. package/dist/esm/lib/types/index.d.ts +0 -1
  141. package/dist/esm/lib/types/node-template.d.ts +2 -1
  142. package/dist/esm/lib/types/nodes.d.ts +4 -1
  143. package/dist/esm/lib/types/store.d.ts +0 -1
  144. package/dist/esm/lib/utils/changes.d.ts +28 -2
  145. package/dist/esm/lib/utils/changes.js +57 -1
  146. package/dist/esm/lib/utils/changes.js.map +1 -1
  147. package/dist/esm/lib/utils/index.d.ts +2 -2
  148. package/dist/esm/lib/utils/index.js +2 -1
  149. package/dist/esm/lib/utils/index.js.map +1 -1
  150. package/dist/esm/lib/utils/inject-flow-store.d.ts +16 -0
  151. package/dist/esm/lib/utils/inject-flow-store.js +23 -0
  152. package/dist/esm/lib/utils/inject-flow-store.js.map +1 -0
  153. package/dist/esm/lib/utils/inject-ng-flow-node.d.ts +0 -1
  154. package/dist/esm/lib/utils/position-tween.d.ts +0 -1
  155. package/dist/esm/lib/utils/template-interpolation.d.ts +0 -1
  156. package/dist/esm/lib/utils/type-guards.d.ts +0 -1
  157. package/dist/esm/lib/utils/type-guards.js +2 -0
  158. package/dist/esm/lib/utils/type-guards.js.map +1 -1
  159. package/dist/esm/test-setup.d.ts +0 -1
  160. package/dist/style.css +8 -0
  161. package/package.json +83 -78
  162. package/dist/esm/index.d.ts.map +0 -1
  163. package/dist/esm/lib/agent/agent-bridge.service.d.ts.map +0 -1
  164. package/dist/esm/lib/agent/chat/agent-chat.component.d.ts.map +0 -1
  165. package/dist/esm/lib/agent/chat/agent-chat.service.d.ts.map +0 -1
  166. package/dist/esm/lib/agent/chat/default-system-prompt.d.ts.map +0 -1
  167. package/dist/esm/lib/agent/chat/index.d.ts.map +0 -1
  168. package/dist/esm/lib/agent/chat/provide-agent-chat.d.ts.map +0 -1
  169. package/dist/esm/lib/agent/chat/types.d.ts.map +0 -1
  170. package/dist/esm/lib/agent/history.d.ts.map +0 -1
  171. package/dist/esm/lib/agent/index.d.ts.map +0 -1
  172. package/dist/esm/lib/agent/provide-agent-bridge.d.ts.map +0 -1
  173. package/dist/esm/lib/agent/tool-schemas.d.ts.map +0 -1
  174. package/dist/esm/lib/agent/transports/websocket.d.ts.map +0 -1
  175. package/dist/esm/lib/agent/transports/window.d.ts.map +0 -1
  176. package/dist/esm/lib/agent/types.d.ts.map +0 -1
  177. package/dist/esm/lib/components/a11y-descriptions/a11y-descriptions.component.d.ts.map +0 -1
  178. package/dist/esm/lib/components/attribution/attribution.component.d.ts.map +0 -1
  179. package/dist/esm/lib/components/background/background.component.d.ts.map +0 -1
  180. package/dist/esm/lib/components/connection-line/connection-line.component.d.ts.map +0 -1
  181. package/dist/esm/lib/components/controls/controls.component.d.ts.map +0 -1
  182. package/dist/esm/lib/components/edge-label-renderer/edge-label-renderer.component.d.ts.map +0 -1
  183. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.d.ts.map +0 -1
  184. package/dist/esm/lib/components/edges/base-edge.component.d.ts.map +0 -1
  185. package/dist/esm/lib/components/edges/bezier-edge.component.d.ts.map +0 -1
  186. package/dist/esm/lib/components/edges/edge-text.component.d.ts.map +0 -1
  187. package/dist/esm/lib/components/edges/simple-bezier-edge.component.d.ts.map +0 -1
  188. package/dist/esm/lib/components/edges/smooth-step-edge.component.d.ts.map +0 -1
  189. package/dist/esm/lib/components/edges/step-edge.component.d.ts.map +0 -1
  190. package/dist/esm/lib/components/edges/straight-edge.component.d.ts.map +0 -1
  191. package/dist/esm/lib/components/handle/handle.component.d.ts.map +0 -1
  192. package/dist/esm/lib/components/handle-group/handle-group.component.d.ts.map +0 -1
  193. package/dist/esm/lib/components/handle-group/handle-row.component.d.ts.map +0 -1
  194. package/dist/esm/lib/components/minimap/minimap.component.d.ts.map +0 -1
  195. package/dist/esm/lib/components/ng-flow-provider/ng-flow-provider.component.d.ts.map +0 -1
  196. package/dist/esm/lib/components/node-resizer/node-resizer.component.d.ts.map +0 -1
  197. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.d.ts.map +0 -1
  198. package/dist/esm/lib/components/nodes/default-node.component.d.ts.map +0 -1
  199. package/dist/esm/lib/components/nodes/group-node.component.d.ts.map +0 -1
  200. package/dist/esm/lib/components/nodes/input-node.component.d.ts.map +0 -1
  201. package/dist/esm/lib/components/nodes/output-node.component.d.ts.map +0 -1
  202. package/dist/esm/lib/components/nodes/template-node.component.d.ts.map +0 -1
  203. package/dist/esm/lib/components/panel/panel.component.d.ts.map +0 -1
  204. package/dist/esm/lib/components/selection-box/selection-box.component.d.ts.map +0 -1
  205. package/dist/esm/lib/components/viewport-portal/viewport-portal.component.d.ts.map +0 -1
  206. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.d.ts.map +0 -1
  207. package/dist/esm/lib/container/ng-flow/ng-flow.component.d.ts.map +0 -1
  208. package/dist/esm/lib/container/node-renderer/node-renderer.component.d.ts.map +0 -1
  209. package/dist/esm/lib/container/pane/pane.component.d.ts.map +0 -1
  210. package/dist/esm/lib/container/viewport/viewport.component.d.ts.map +0 -1
  211. package/dist/esm/lib/directives/drag.directive.d.ts.map +0 -1
  212. package/dist/esm/lib/directives/drop-zone.directive.d.ts.map +0 -1
  213. package/dist/esm/lib/directives/key-handler.directive.d.ts.map +0 -1
  214. package/dist/esm/lib/directives/node-type.directive.d.ts.map +0 -1
  215. package/dist/esm/lib/layout/dagre-layout.d.ts.map +0 -1
  216. package/dist/esm/lib/layout/index.d.ts.map +0 -1
  217. package/dist/esm/lib/layout/layout-nodes.d.ts.map +0 -1
  218. package/dist/esm/lib/public-api.d.ts.map +0 -1
  219. package/dist/esm/lib/services/flow-store.service.d.ts.map +0 -1
  220. package/dist/esm/lib/services/ng-flow.service.d.ts.map +0 -1
  221. package/dist/esm/lib/services/tokens.d.ts.map +0 -1
  222. package/dist/esm/lib/types/edges.d.ts.map +0 -1
  223. package/dist/esm/lib/types/general.d.ts.map +0 -1
  224. package/dist/esm/lib/types/index.d.ts.map +0 -1
  225. package/dist/esm/lib/types/node-template.d.ts.map +0 -1
  226. package/dist/esm/lib/types/nodes.d.ts.map +0 -1
  227. package/dist/esm/lib/types/store.d.ts.map +0 -1
  228. package/dist/esm/lib/utils/changes.d.ts.map +0 -1
  229. package/dist/esm/lib/utils/index.d.ts.map +0 -1
  230. package/dist/esm/lib/utils/inject-ng-flow-node.d.ts.map +0 -1
  231. package/dist/esm/lib/utils/position-tween.d.ts.map +0 -1
  232. package/dist/esm/lib/utils/template-interpolation.d.ts.map +0 -1
  233. package/dist/esm/lib/utils/type-guards.d.ts.map +0 -1
  234. package/dist/esm/test-setup.d.ts.map +0 -1
@@ -13,18 +13,7 @@ import * as i0 from "@angular/core";
13
13
  */
14
14
  export declare class TemplateNodeComponent {
15
15
  private readonly store;
16
- readonly id: import("@angular/core").InputSignal<string>;
17
- readonly data: import("@angular/core").InputSignal<any>;
18
- readonly type: import("@angular/core").InputSignal<string | undefined>;
19
- readonly selected: import("@angular/core").InputSignal<boolean>;
20
- readonly dragging: import("@angular/core").InputSignal<boolean>;
21
- readonly zIndex: import("@angular/core").InputSignal<number>;
22
- readonly isConnectable: import("@angular/core").InputSignal<boolean>;
23
- readonly positionAbsoluteX: import("@angular/core").InputSignal<number>;
24
- readonly positionAbsoluteY: import("@angular/core").InputSignal<number>;
25
- readonly sourcePosition: import("@angular/core").InputSignal<Position | undefined>;
26
- readonly targetPosition: import("@angular/core").InputSignal<Position | undefined>;
27
- readonly dragHandle: import("@angular/core").InputSignal<string | undefined>;
16
+ readonly node: import("../../types").NgFlowNodeContext<Record<string, unknown>>;
28
17
  readonly spec: import("@angular/core").Signal<import("../../types").NodeTemplateSpec | undefined>;
29
18
  readonly title: import("@angular/core").Signal<string>;
30
19
  readonly iconPath: import("@angular/core").Signal<string | null>;
@@ -43,6 +32,5 @@ export declare class TemplateNodeComponent {
43
32
  position: Position;
44
33
  }[]>;
45
34
  static ɵfac: i0.ɵɵFactoryDeclaration<TemplateNodeComponent, never>;
46
- static ɵcmp: i0.ɵɵComponentDeclaration<TemplateNodeComponent, "ng-flow-template-node", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "dragging": { "alias": "dragging"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "isConnectable": { "alias": "isConnectable"; "required": false; "isSignal": true; }; "positionAbsoluteX": { "alias": "positionAbsoluteX"; "required": false; "isSignal": true; }; "positionAbsoluteY": { "alias": "positionAbsoluteY"; "required": false; "isSignal": true; }; "sourcePosition": { "alias": "sourcePosition"; "required": false; "isSignal": true; }; "targetPosition": { "alias": "targetPosition"; "required": false; "isSignal": true; }; "dragHandle": { "alias": "dragHandle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<TemplateNodeComponent, "ng-flow-template-node", never, {}, {}, never, never, true, never>;
47
36
  }
48
- //# sourceMappingURL=template-node.component.d.ts.map
@@ -1,8 +1,9 @@
1
- import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';
2
2
  import { Position } from '@angflow/system';
3
3
  import { HandleComponent } from '../handle/handle.component';
4
4
  import { FlowStore } from '../../services/flow-store.service';
5
5
  import { interpolateTemplateString, isTemplateConditionTrue, } from '../../utils/template-interpolation';
6
+ import { injectNgFlowNode } from '../../utils/inject-ng-flow-node';
6
7
  import * as i0 from "@angular/core";
7
8
  const POSITION_MAP = {
8
9
  top: Position.Top,
@@ -39,34 +40,23 @@ const ICONS = {
39
40
  export class TemplateNodeComponent {
40
41
  constructor() {
41
42
  this.store = inject(FlowStore);
42
- this.id = input.required(...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
43
- this.data = input(...(ngDevMode ? [undefined, { debugName: "data" }] : /* istanbul ignore next */ []));
44
- this.type = input(...(ngDevMode ? [undefined, { debugName: "type" }] : /* istanbul ignore next */ []));
45
- this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
46
- this.dragging = input(false, ...(ngDevMode ? [{ debugName: "dragging" }] : /* istanbul ignore next */ []));
47
- this.zIndex = input(0, ...(ngDevMode ? [{ debugName: "zIndex" }] : /* istanbul ignore next */ []));
48
- this.isConnectable = input(true, ...(ngDevMode ? [{ debugName: "isConnectable" }] : /* istanbul ignore next */ []));
49
- this.positionAbsoluteX = input(0, ...(ngDevMode ? [{ debugName: "positionAbsoluteX" }] : /* istanbul ignore next */ []));
50
- this.positionAbsoluteY = input(0, ...(ngDevMode ? [{ debugName: "positionAbsoluteY" }] : /* istanbul ignore next */ []));
51
- this.sourcePosition = input(...(ngDevMode ? [undefined, { debugName: "sourcePosition" }] : /* istanbul ignore next */ []));
52
- this.targetPosition = input(...(ngDevMode ? [undefined, { debugName: "targetPosition" }] : /* istanbul ignore next */ []));
53
- this.dragHandle = input(...(ngDevMode ? [undefined, { debugName: "dragHandle" }] : /* istanbul ignore next */ []));
54
- this.spec = computed(() => this.store.nodeTemplates().get(this.type() ?? ''), ...(ngDevMode ? [{ debugName: "spec" }] : /* istanbul ignore next */ []));
55
- this.title = computed(() => interpolateTemplateString(this.spec()?.title ?? '', this.data()), ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
43
+ this.node = injectNgFlowNode();
44
+ this.spec = computed(() => this.store.nodeTemplates().get(this.node.type() ?? ''), ...(ngDevMode ? [{ debugName: "spec" }] : /* istanbul ignore next */ []));
45
+ this.title = computed(() => interpolateTemplateString(this.spec()?.title ?? '', this.node.data()), ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
56
46
  this.iconPath = computed(() => {
57
47
  const icon = this.spec()?.icon;
58
48
  return icon ? ICONS[icon] ?? null : null;
59
49
  }, ...(ngDevMode ? [{ debugName: "iconPath" }] : /* istanbul ignore next */ []));
60
50
  this.badges = computed(() => (this.spec()?.badges ?? [])
61
- .filter((b) => isTemplateConditionTrue(b.showIf, this.data()))
51
+ .filter((b) => isTemplateConditionTrue(b.showIf, this.node.data()))
62
52
  .map((b) => ({
63
- text: interpolateTemplateString(b.text, this.data()),
53
+ text: interpolateTemplateString(b.text, this.node.data()),
64
54
  color: BADGE_COLORS.has(b.color) ? b.color : 'slate',
65
55
  })), ...(ngDevMode ? [{ debugName: "badges" }] : /* istanbul ignore next */ []));
66
56
  this.fields = computed(() => (this.spec()?.fields ?? [])
67
- .filter((f) => isTemplateConditionTrue(f.showIf, this.data()))
68
- .map((f) => ({ label: f.label, value: interpolateTemplateString(f.value, this.data()) })), ...(ngDevMode ? [{ debugName: "fields" }] : /* istanbul ignore next */ []));
69
- this.bodyText = computed(() => interpolateTemplateString(this.spec()?.body ?? '', this.data()), ...(ngDevMode ? [{ debugName: "bodyText" }] : /* istanbul ignore next */ []));
57
+ .filter((f) => isTemplateConditionTrue(f.showIf, this.node.data()))
58
+ .map((f) => ({ label: f.label, value: interpolateTemplateString(f.value, this.node.data()) })), ...(ngDevMode ? [{ debugName: "fields" }] : /* istanbul ignore next */ []));
59
+ this.bodyText = computed(() => interpolateTemplateString(this.spec()?.body ?? '', this.node.data()), ...(ngDevMode ? [{ debugName: "bodyText" }] : /* istanbul ignore next */ []));
70
60
  this.handles = computed(() => {
71
61
  const declared = this.spec()?.handles ?? [
72
62
  { type: 'target', position: 'left' },
@@ -80,12 +70,12 @@ export class TemplateNodeComponent {
80
70
  }, ...(ngDevMode ? [{ debugName: "handles" }] : /* istanbul ignore next */ []));
81
71
  }
82
72
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: TemplateNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
83
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: TemplateNodeComponent, isStandalone: true, selector: "ng-flow-template-node", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, dragging: { classPropertyName: "dragging", publicName: "dragging", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, isConnectable: { classPropertyName: "isConnectable", publicName: "isConnectable", isSignal: true, isRequired: false, transformFunction: null }, positionAbsoluteX: { classPropertyName: "positionAbsoluteX", publicName: "positionAbsoluteX", isSignal: true, isRequired: false, transformFunction: null }, positionAbsoluteY: { classPropertyName: "positionAbsoluteY", publicName: "positionAbsoluteY", isSignal: true, isRequired: false, transformFunction: null }, sourcePosition: { classPropertyName: "sourcePosition", publicName: "sourcePosition", isSignal: true, isRequired: false, transformFunction: null }, targetPosition: { classPropertyName: "targetPosition", publicName: "targetPosition", isSignal: true, isRequired: false, transformFunction: null }, dragHandle: { classPropertyName: "dragHandle", publicName: "dragHandle", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
73
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: TemplateNodeComponent, isStandalone: true, selector: "ng-flow-template-node", ngImport: i0, template: `
84
74
  @if (spec(); as s) {
85
75
  <div
86
76
  class="ng-flow__template-node"
87
77
  [class.ng-flow__template-node--compact]="(s.variant ?? 'detailed') === 'compact'"
88
- [class.ng-flow__template-node--selected]="selected()"
78
+ [class.ng-flow__template-node--selected]="node.selected()"
89
79
  [style.borderLeftColor]="s.accent ?? null"
90
80
  >
91
81
  <div class="ng-flow__template-node__header" [style.color]="s.accent ?? null">
@@ -135,7 +125,7 @@ export class TemplateNodeComponent {
135
125
  [type]="h.type"
136
126
  [id]="h.id ?? null"
137
127
  [position]="h.position"
138
- [isConnectable]="isConnectable()"
128
+ [isConnectable]="node.isConnectable()"
139
129
  />
140
130
  }
141
131
  </div>
@@ -149,7 +139,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
149
139
  <div
150
140
  class="ng-flow__template-node"
151
141
  [class.ng-flow__template-node--compact]="(s.variant ?? 'detailed') === 'compact'"
152
- [class.ng-flow__template-node--selected]="selected()"
142
+ [class.ng-flow__template-node--selected]="node.selected()"
153
143
  [style.borderLeftColor]="s.accent ?? null"
154
144
  >
155
145
  <div class="ng-flow__template-node__header" [style.color]="s.accent ?? null">
@@ -199,11 +189,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
199
189
  [type]="h.type"
200
190
  [id]="h.id ?? null"
201
191
  [position]="h.position"
202
- [isConnectable]="isConnectable()"
192
+ [isConnectable]="node.isConnectable()"
203
193
  />
204
194
  }
205
195
  </div>
206
196
  }
207
197
  `, styles: ["\n .ng-flow__template-node {\n min-width: 140px;\n max-width: 280px;\n padding: 8px 10px;\n border: 1px solid #d4d4d8;\n border-left: 3px solid #94a3b8;\n border-radius: 6px;\n background: #ffffff;\n font-size: 12px;\n color: #1e293b;\n }\n .ng-flow__template-node--selected {\n box-shadow: 0 0 0 1px #6366f1;\n }\n .ng-flow__template-node--compact {\n padding: 4px 8px;\n min-width: 100px;\n }\n .ng-flow__template-node__header {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n }\n .ng-flow__template-node__icon {\n width: 16px;\n height: 16px;\n flex: none;\n }\n .ng-flow__template-node__badges {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-top: 4px;\n }\n .ng-flow__template-node__badge {\n padding: 0 6px;\n border-radius: 999px;\n font-size: 10px;\n line-height: 16px;\n }\n .ng-flow__template-node__badge--slate { background: #f1f5f9; color: #475569; }\n .ng-flow__template-node__badge--indigo { background: #e0e7ff; color: #4338ca; }\n .ng-flow__template-node__badge--emerald { background: #d1fae5; color: #047857; }\n .ng-flow__template-node__badge--amber { background: #fef3c7; color: #b45309; }\n .ng-flow__template-node__badge--rose { background: #ffe4e6; color: #be123c; }\n .ng-flow__template-node__fields {\n margin: 6px 0 0;\n }\n .ng-flow__template-node__field {\n display: flex;\n justify-content: space-between;\n gap: 8px;\n }\n .ng-flow__template-node__field dt {\n color: #64748b;\n font-weight: 400;\n }\n .ng-flow__template-node__field dd {\n margin: 0;\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n }\n .ng-flow__template-node__body {\n margin: 6px 0 0;\n color: #475569;\n }\n "] }]
208
- }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: true }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], dragging: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragging", required: false }] }], zIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "zIndex", required: false }] }], isConnectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isConnectable", required: false }] }], positionAbsoluteX: [{ type: i0.Input, args: [{ isSignal: true, alias: "positionAbsoluteX", required: false }] }], positionAbsoluteY: [{ type: i0.Input, args: [{ isSignal: true, alias: "positionAbsoluteY", required: false }] }], sourcePosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "sourcePosition", required: false }] }], targetPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "targetPosition", required: false }] }], dragHandle: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragHandle", required: false }] }] } });
198
+ }] });
209
199
  //# sourceMappingURL=template-node.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-node.component.js","sourceRoot":"","sources":["../../../../../src/lib/components/nodes/template-node.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template-node.component.js","sourceRoot":"","sources":["../../../../../src/lib/components/nodes/template-node.component.ts"],"names":[],"mappings":"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"}
@@ -22,4 +22,3 @@ export declare class PanelComponent {
22
22
  static ɵfac: i0.ɵɵFactoryDeclaration<PanelComponent, never>;
23
23
  static ɵcmp: i0.ɵɵComponentDeclaration<PanelComponent, "ng-flow-panel", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
24
24
  }
25
- //# sourceMappingURL=panel.component.d.ts.map
@@ -3,6 +3,10 @@ import * as i0 from "@angular/core";
3
3
  export declare class SelectionBoxComponent {
4
4
  readonly store: FlowStore<import("../../types").Node, import("../../types").Edge>;
5
5
  readonly contextMenu: import("@angular/core").OutputEmitterRef<MouseEvent>;
6
+ private readonly destroyRef;
7
+ private readonly nodesSelectionBox;
8
+ private dragInstance;
9
+ constructor();
6
10
  readonly isVisible: import("@angular/core").Signal<boolean>;
7
11
  readonly rect: import("@angular/core").Signal<import("@angflow/system").SelectionRect | null>;
8
12
  readonly nodesSelectionBounds: import("@angular/core").Signal<{
@@ -13,7 +17,13 @@ export declare class SelectionBoxComponent {
13
17
  }>;
14
18
  readonly nodesSelectionTransform: import("@angular/core").Signal<string>;
15
19
  onContextMenu(event: MouseEvent): void;
20
+ onKeyDown(event: KeyboardEvent): void;
21
+ /**
22
+ * Ports React's useMoveSelectedNodes: shift every selected & draggable node
23
+ * by a snap-grid-aware velocity, then push the batch through the same
24
+ * updateNodePositions path a drag uses.
25
+ */
26
+ private moveSelectedNodes;
16
27
  static ɵfac: i0.ɵɵFactoryDeclaration<SelectionBoxComponent, never>;
17
28
  static ɵcmp: i0.ɵɵComponentDeclaration<SelectionBoxComponent, "ng-flow-selection-box", never, {}, { "contextMenu": "contextMenu"; }, never, never, true, never>;
18
29
  }
19
- //# sourceMappingURL=selection-box.component.d.ts.map
@@ -1,10 +1,21 @@
1
- import { Component, ChangeDetectionStrategy, inject, computed, output } from '@angular/core';
1
+ import { Component, ChangeDetectionStrategy, inject, computed, output, viewChild, effect, DestroyRef, } from '@angular/core';
2
+ import { XYDrag, calculateNodePosition, snapPosition, } from '@angflow/system';
2
3
  import { FlowStore } from '../../services/flow-store.service';
3
4
  import * as i0 from "@angular/core";
5
+ /** Per-key unit direction vectors for arrow-key node movement (React parity). */
6
+ const arrowKeyDiffs = {
7
+ ArrowUp: { x: 0, y: -1 },
8
+ ArrowDown: { x: 0, y: 1 },
9
+ ArrowLeft: { x: -1, y: 0 },
10
+ ArrowRight: { x: 1, y: 0 },
11
+ };
4
12
  export class SelectionBoxComponent {
5
13
  constructor() {
6
14
  this.store = inject(FlowStore);
7
15
  this.contextMenu = output();
16
+ this.destroyRef = inject(DestroyRef);
17
+ this.nodesSelectionBox = viewChild('nodesSelectionBox', ...(ngDevMode ? [{ debugName: "nodesSelectionBox" }] : /* istanbul ignore next */ []));
18
+ this.dragInstance = null;
8
19
  this.isVisible = computed(() => this.store.userSelectionActive() && this.store.userSelectionRect() !== null, ...(ngDevMode ? [{ debugName: "isVisible" }] : /* istanbul ignore next */ []));
9
20
  this.rect = computed(() => this.store.userSelectionRect(), ...(ngDevMode ? [{ debugName: "rect" }] : /* istanbul ignore next */ []));
10
21
  this.nodesSelectionBounds = computed(() => {
@@ -30,13 +41,101 @@ export class SelectionBoxComponent {
30
41
  const b = this.nodesSelectionBounds();
31
42
  return `translate(${b.x}px, ${b.y}px)`;
32
43
  }, ...(ngDevMode ? [{ debugName: "nodesSelectionTransform" }] : /* istanbul ignore next */ []));
44
+ // Bind/unbind XYDrag to the nodes-selection box as it enters/leaves the
45
+ // DOM (@if on nodesSelectionActive). No nodeId is passed: XYDrag's
46
+ // undefined-nodeId path collects all selected nodes and routes through the
47
+ // onSelectionDrag* store callbacks (already wired on <ng-flow>), mirroring
48
+ // React's useDrag({ nodeRef }) with no nodeId.
49
+ effect(() => {
50
+ const box = this.nodesSelectionBox();
51
+ if (!box) {
52
+ // Box left the DOM (selection cleared) — drop the d3-drag binding.
53
+ this.dragInstance?.destroy();
54
+ this.dragInstance = null;
55
+ return;
56
+ }
57
+ if (!this.dragInstance) {
58
+ this.dragInstance = XYDrag({
59
+ getStoreItems: () => this.store.getStoreItems(),
60
+ });
61
+ }
62
+ this.dragInstance.update({
63
+ domNode: box.nativeElement,
64
+ // nodeId intentionally omitted → selection-drag path.
65
+ noDragClassName: this.store.noDragClassName(),
66
+ });
67
+ });
68
+ // Safety net: if the component is destroyed while the box is still bound
69
+ // (e.g. <ng-flow> torn down mid-drag), release the d3 listeners.
70
+ this.destroyRef.onDestroy(() => this.dragInstance?.destroy());
33
71
  }
34
72
  onContextMenu(event) {
35
73
  event.preventDefault();
36
74
  this.contextMenu.emit(event);
37
75
  }
76
+ onKeyDown(event) {
77
+ if (event.key === 'Escape') {
78
+ event.preventDefault();
79
+ this.store.nodesSelectionActive.set(false);
80
+ event.currentTarget?.blur();
81
+ return;
82
+ }
83
+ const direction = arrowKeyDiffs[event.key];
84
+ if (!direction)
85
+ return;
86
+ event.preventDefault();
87
+ this.moveSelectedNodes(direction, event.shiftKey ? 4 : 1);
88
+ }
89
+ /**
90
+ * Ports React's useMoveSelectedNodes: shift every selected & draggable node
91
+ * by a snap-grid-aware velocity, then push the batch through the same
92
+ * updateNodePositions path a drag uses.
93
+ */
94
+ moveSelectedNodes(direction, factor) {
95
+ const store = this.store;
96
+ const snapToGrid = store.snapToGrid();
97
+ const snapGrid = store.snapGrid();
98
+ const nodeExtent = store.nodeExtent();
99
+ const nodeOrigin = store.nodeOrigin();
100
+ const nodesDraggable = store.nodesDraggable();
101
+ const onError = store.onError();
102
+ const nodeLookup = store.nodeLookup;
103
+ // By default a node moves 5px per press; snap grid overrides the velocity.
104
+ const xVelo = snapToGrid ? snapGrid[0] : 5;
105
+ const yVelo = snapToGrid ? snapGrid[1] : 5;
106
+ const xDiff = direction.x * xVelo * factor;
107
+ const yDiff = direction.y * yVelo * factor;
108
+ const nodeUpdates = new Map();
109
+ for (const [, node] of nodeLookup) {
110
+ const userDraggable = node.draggable;
111
+ const isSelectedDraggable = node.selected && (userDraggable || (nodesDraggable && typeof userDraggable === 'undefined'));
112
+ if (!isSelectedDraggable)
113
+ continue;
114
+ let nextPosition = {
115
+ x: node.internals.positionAbsolute.x + xDiff,
116
+ y: node.internals.positionAbsolute.y + yDiff,
117
+ };
118
+ if (snapToGrid) {
119
+ nextPosition = snapPosition(nextPosition, snapGrid);
120
+ }
121
+ const { position, positionAbsolute } = calculateNodePosition({
122
+ nodeId: node.id,
123
+ nextPosition,
124
+ nodeLookup,
125
+ nodeExtent,
126
+ nodeOrigin,
127
+ onError,
128
+ });
129
+ node.position = position;
130
+ node.internals.positionAbsolute = positionAbsolute;
131
+ nodeUpdates.set(node.id, node);
132
+ }
133
+ if (nodeUpdates.size > 0) {
134
+ store.updateNodePositions(nodeUpdates);
135
+ }
136
+ }
38
137
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: SelectionBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: SelectionBoxComponent, isStandalone: true, selector: "ng-flow-selection-box", outputs: { contextMenu: "contextMenu" }, host: { styleAttribute: "display: contents;" }, ngImport: i0, template: `
138
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: SelectionBoxComponent, isStandalone: true, selector: "ng-flow-selection-box", outputs: { contextMenu: "contextMenu" }, host: { styleAttribute: "display: contents;" }, viewQueries: [{ propertyName: "nodesSelectionBox", first: true, predicate: ["nodesSelectionBox"], descendants: true, isSignal: true }], ngImport: i0, template: `
40
139
  @if (isVisible()) {
41
140
  <div
42
141
  class="ng-flow__selection xy-flow__selection"
@@ -50,11 +149,14 @@ export class SelectionBoxComponent {
50
149
  }
51
150
  @if (store.nodesSelectionActive()) {
52
151
  <div
152
+ #nodesSelectionBox
53
153
  class="ng-flow__selection ng-flow__nodesselection xy-flow__selection xy-flow__nodesselection"
54
154
  style="position: absolute; pointer-events: all; z-index: 10; transform-origin: left top;"
55
155
  [style.transform]="nodesSelectionTransform()"
56
156
  [style.width.px]="nodesSelectionBounds().width"
57
157
  [style.height.px]="nodesSelectionBounds().height"
158
+ tabindex="-1"
159
+ (keydown)="onKeyDown($event)"
58
160
  (contextmenu)="onContextMenu($event)"
59
161
  ></div>
60
162
  }
@@ -83,15 +185,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
83
185
  }
84
186
  @if (store.nodesSelectionActive()) {
85
187
  <div
188
+ #nodesSelectionBox
86
189
  class="ng-flow__selection ng-flow__nodesselection xy-flow__selection xy-flow__nodesselection"
87
190
  style="position: absolute; pointer-events: all; z-index: 10; transform-origin: left top;"
88
191
  [style.transform]="nodesSelectionTransform()"
89
192
  [style.width.px]="nodesSelectionBounds().width"
90
193
  [style.height.px]="nodesSelectionBounds().height"
194
+ tabindex="-1"
195
+ (keydown)="onKeyDown($event)"
91
196
  (contextmenu)="onContextMenu($event)"
92
197
  ></div>
93
198
  }
94
199
  `,
95
200
  }]
96
- }], propDecorators: { contextMenu: [{ type: i0.Output, args: ["contextMenu"] }] } });
201
+ }], ctorParameters: () => [], propDecorators: { contextMenu: [{ type: i0.Output, args: ["contextMenu"] }], nodesSelectionBox: [{ type: i0.ViewChild, args: ['nodesSelectionBox', { isSignal: true }] }] } });
97
202
  //# sourceMappingURL=selection-box.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"selection-box.component.js","sourceRoot":"","sources":["../../../../../src/lib/components/selection-box/selection-box.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selection-box.component.js","sourceRoot":"","sources":["../../../../../src/lib/components/selection-box/selection-box.component.ts"],"names":[],"mappings":"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"}
@@ -10,4 +10,3 @@ export declare class ViewportPortalComponent {
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<ViewportPortalComponent, never>;
11
11
  static ɵcmp: i0.ɵɵComponentDeclaration<ViewportPortalComponent, "ng-flow-viewport-portal", never, {}, {}, never, ["*"], true, never>;
12
12
  }
13
- //# sourceMappingURL=viewport-portal.component.d.ts.map
@@ -1,8 +1,22 @@
1
1
  import { Type } from '@angular/core';
2
2
  import { type HandleType, type Connection, type FinalConnectionState } from '@angflow/system';
3
3
  import { FlowStore } from '../../services/flow-store.service';
4
- import type { Edge, EdgeTypes } from '../../types';
4
+ import type { Edge, EdgeTypes, InternalNode } from '../../types';
5
5
  import * as i0 from "@angular/core";
6
+ /**
7
+ * Pure, identity-free fingerprint of everything that affects an edge's
8
+ * geometry: endpoint absolute positions, node sizes, and the global edge
9
+ * mode (plus the flow id, which feeds marker URLs). Used as the memo key so
10
+ * a dragged node (position change) or a remeasure (size change) invalidates
11
+ * the cached inputs while an unchanged frame stays a cheap string-equal hit.
12
+ */
13
+ export declare function computeEdgeGeometryKey(edge: Edge, sourceNode: InternalNode | undefined, targetNode: InternalNode | undefined, edgeMode: 'handles' | 'floating', rfId?: string): string;
14
+ /**
15
+ * Computes an edge's SVG path string from a built inputs object. Byte-for-byte
16
+ * equivalent to the inline switch the template used to call per binding —
17
+ * extracted so the memo can compute it exactly once per inputs build.
18
+ */
19
+ export declare function computeEdgePathFromInputs(ei: Record<string, unknown>): string;
6
20
  export declare class EdgeRendererComponent {
7
21
  readonly store: FlowStore<import("../../types").Node, Edge>;
8
22
  readonly reconnectRadius: import("@angular/core").InputSignal<number>;
@@ -50,7 +64,7 @@ export declare class EdgeRendererComponent {
50
64
  handleType: HandleType;
51
65
  connectionState: FinalConnectionState;
52
66
  }>;
53
- readonly visibleEdges: import("@angular/core").Signal<Edge[]>;
67
+ readonly visibleEdges: import("@angular/core").Signal<import("../../public-api").DisplayEdge<Edge>[]>;
54
68
  readonly markers: import("@angular/core").Signal<Record<string, unknown>[]>;
55
69
  isCustomEdge(type?: string): boolean;
56
70
  getEdgeClasses(edge: Edge): string;
@@ -68,7 +82,18 @@ export declare class EdgeRendererComponent {
68
82
  */
69
83
  getEdgeComponentInputs(edge: Edge, all: Record<string, unknown>): Record<string, unknown>;
70
84
  private getDeclaredInputs;
85
+ private buildEdgeInputs;
86
+ /**
87
+ * Per-edge memo of the built inputs object and its computed path. The
88
+ * template calls getEdgeInputs(edge) up to 3x per edge (main SVG, custom-edge
89
+ * overlay, label) and getEdgePath() twice; without this each call rebuilt the
90
+ * inputs and recomputed the path. Cached on edge id, validated against a
91
+ * geometry fingerprint plus reference identities for the inputs that don't
92
+ * appear in the key (edge object, handle-data map, handle bounds).
93
+ */
94
+ private readonly edgeMemo;
71
95
  getEdgeInputs(edge: Edge): Record<string, any>;
96
+ constructor();
72
97
  onEdgeEvent(event: MouseEvent, edge: Edge, eventType: string): void;
73
98
  onEdgeKeyDown(event: KeyboardEvent, edge: Edge): void;
74
99
  onEdgeFocus(edge: Edge): void;
@@ -87,4 +112,3 @@ export declare class EdgeRendererComponent {
87
112
  static ɵfac: i0.ɵɵFactoryDeclaration<EdgeRendererComponent, never>;
88
113
  static ɵcmp: i0.ɵɵComponentDeclaration<EdgeRendererComponent, "ng-flow-edge-renderer", never, { "reconnectRadius": { "alias": "reconnectRadius"; "required": false; "isSignal": true; }; "customEdgeTypes": { "alias": "customEdgeTypes"; "required": false; "isSignal": true; }; }, { "edgeClick": "edgeClick"; "edgeDoubleClick": "edgeDoubleClick"; "edgeContextMenu": "edgeContextMenu"; "edgeMouseEnter": "edgeMouseEnter"; "edgeMouseMove": "edgeMouseMove"; "edgeMouseLeave": "edgeMouseLeave"; "reconnect": "reconnect"; "reconnectStart": "reconnectStart"; "reconnectEnd": "reconnectEnd"; }, never, never, true, never>;
89
114
  }
90
- //# sourceMappingURL=edge-renderer.component.d.ts.map