@angflow/angular 0.3.6 → 0.3.8

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 (67) hide show
  1. package/dist/base.css +23 -0
  2. package/dist/esm/lib/agent/agent-bridge.service.d.ts +20 -4
  3. package/dist/esm/lib/agent/agent-bridge.service.js +364 -34
  4. package/dist/esm/lib/agent/agent-bridge.service.js.map +1 -1
  5. package/dist/esm/lib/agent/index.d.ts +2 -1
  6. package/dist/esm/lib/agent/index.js.map +1 -1
  7. package/dist/esm/lib/agent/op-log.d.ts +35 -0
  8. package/dist/esm/lib/agent/op-log.js +41 -0
  9. package/dist/esm/lib/agent/op-log.js.map +1 -0
  10. package/dist/esm/lib/agent/provide-agent-bridge.d.ts +12 -1
  11. package/dist/esm/lib/agent/provide-agent-bridge.js +4 -1
  12. package/dist/esm/lib/agent/provide-agent-bridge.js.map +1 -1
  13. package/dist/esm/lib/agent/tool-schemas.js +133 -8
  14. package/dist/esm/lib/agent/tool-schemas.js.map +1 -1
  15. package/dist/esm/lib/agent/types.d.ts +10 -0
  16. package/dist/esm/lib/components/a11y-descriptions/a11y-descriptions.component.js +2 -2
  17. package/dist/esm/lib/components/controls/control-button.component.d.ts +20 -0
  18. package/dist/esm/lib/components/controls/control-button.component.js +35 -0
  19. package/dist/esm/lib/components/controls/control-button.component.js.map +1 -0
  20. package/dist/esm/lib/components/controls/controls.component.d.ts +6 -0
  21. package/dist/esm/lib/components/controls/controls.component.js +22 -16
  22. package/dist/esm/lib/components/controls/controls.component.js.map +1 -1
  23. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.js +5 -1
  24. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.js.map +1 -1
  25. package/dist/esm/lib/components/edges/simple-bezier-edge.component.js +2 -2
  26. package/dist/esm/lib/components/edges/simple-bezier-edge.component.js.map +1 -1
  27. package/dist/esm/lib/components/handle/handle.component.d.ts +24 -3
  28. package/dist/esm/lib/components/handle/handle.component.js +64 -9
  29. package/dist/esm/lib/components/handle/handle.component.js.map +1 -1
  30. package/dist/esm/lib/components/minimap/minimap.component.d.ts +6 -0
  31. package/dist/esm/lib/components/minimap/minimap.component.js +32 -6
  32. package/dist/esm/lib/components/minimap/minimap.component.js.map +1 -1
  33. package/dist/esm/lib/components/node-resizer/node-resizer.component.d.ts +10 -0
  34. package/dist/esm/lib/components/node-resizer/node-resizer.component.js +70 -25
  35. package/dist/esm/lib/components/node-resizer/node-resizer.component.js.map +1 -1
  36. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.js +50 -14
  37. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.js.map +1 -1
  38. package/dist/esm/lib/components/selection-box/selection-box.component.js +62 -50
  39. package/dist/esm/lib/components/selection-box/selection-box.component.js.map +1 -1
  40. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.d.ts +13 -2
  41. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.js +61 -16
  42. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.js.map +1 -1
  43. package/dist/esm/lib/container/ng-flow/ng-flow.component.d.ts +11 -3
  44. package/dist/esm/lib/container/ng-flow/ng-flow.component.js +77 -9
  45. package/dist/esm/lib/container/ng-flow/ng-flow.component.js.map +1 -1
  46. package/dist/esm/lib/container/node-renderer/node-renderer.component.js +14 -0
  47. package/dist/esm/lib/container/node-renderer/node-renderer.component.js.map +1 -1
  48. package/dist/esm/lib/container/pane/pane.component.d.ts +24 -9
  49. package/dist/esm/lib/container/pane/pane.component.js +128 -54
  50. package/dist/esm/lib/container/pane/pane.component.js.map +1 -1
  51. package/dist/esm/lib/directives/key-handler.directive.d.ts +7 -0
  52. package/dist/esm/lib/directives/key-handler.directive.js +18 -1
  53. package/dist/esm/lib/directives/key-handler.directive.js.map +1 -1
  54. package/dist/esm/lib/public-api.d.ts +6 -4
  55. package/dist/esm/lib/public-api.js +3 -1
  56. package/dist/esm/lib/public-api.js.map +1 -1
  57. package/dist/esm/lib/services/flow-history.service.d.ts +56 -0
  58. package/dist/esm/lib/services/flow-history.service.js +105 -0
  59. package/dist/esm/lib/services/flow-history.service.js.map +1 -0
  60. package/dist/esm/lib/services/flow-store.service.d.ts +32 -18
  61. package/dist/esm/lib/services/flow-store.service.js +67 -21
  62. package/dist/esm/lib/services/flow-store.service.js.map +1 -1
  63. package/dist/esm/lib/services/ng-flow.service.d.ts +62 -25
  64. package/dist/esm/lib/services/ng-flow.service.js +176 -19
  65. package/dist/esm/lib/services/ng-flow.service.js.map +1 -1
  66. package/dist/style.css +23 -0
  67. package/package.json +1 -1
package/dist/base.css CHANGED
@@ -830,6 +830,9 @@ svg.xy-flow__connectionline {
830
830
  .xy-flow__pane {
831
831
  z-index: 1;
832
832
  cursor: default;
833
+ /* Stop the browser from claiming a touch that starts on the pane as a
834
+ scroll/pan gesture, so pan/pinch/marquee-drag start reliably on touch. */
835
+ touch-action: none;
833
836
  }
834
837
 
835
838
  .xy-flow__pane.selection { cursor: pointer; }
@@ -934,6 +937,8 @@ svg.xy-flow__connectionline {
934
937
  transform-origin: 0 0;
935
938
  box-sizing: border-box;
936
939
  cursor: default;
940
+ /* Allow touch-drag of the node without the browser hijacking it for scroll. */
941
+ touch-action: none;
937
942
  }
938
943
 
939
944
  .xy-flow__node.selectable { cursor: pointer; }
@@ -1011,9 +1016,14 @@ svg.xy-flow__connectionline {
1011
1016
  position: absolute;
1012
1017
  pointer-events: all;
1013
1018
  cursor: grab;
1019
+ touch-action: none;
1014
1020
  }
1015
1021
 
1016
1022
 
1023
+ /* Resize controls must capture the touch-drag rather than let it scroll. */
1024
+ .xy-flow__resize-control { touch-action: none; }
1025
+
1026
+
1017
1027
  /* ── Handles ────────────────────────────────────────────────────── */
1018
1028
  .xy-flow__handle {
1019
1029
  position: absolute;
@@ -1126,6 +1136,8 @@ svg.xy-flow__connectionline {
1126
1136
  /* ── Minimap ────────────────────────────────────────────────────── */
1127
1137
  .xy-flow__minimap {
1128
1138
  background: var(--xy-minimap-background-color, var(--xy-minimap-background-color-default));
1139
+ /* Let touch pan/zoom the minimap instead of scrolling the page. */
1140
+ touch-action: none;
1129
1141
  }
1130
1142
 
1131
1143
  .xy-flow__minimap-svg { display: block; }
@@ -1187,6 +1199,17 @@ svg.xy-flow__connectionline {
1187
1199
  left: 0;
1188
1200
  top: 0;
1189
1201
  user-select: none;
1202
+ /* Paint above the pane (z-index:1) and node/edge renderer (z-index:4) so
1203
+ projected overlays are visible and hit-testable. The host itself must not
1204
+ capture pointer events (it covers the whole canvas) — projected content
1205
+ opts back in with `pointer-events: all`, matching the edge-label renderer. */
1206
+ z-index: 5;
1207
+ transform-origin: 0 0;
1208
+ pointer-events: none;
1209
+ }
1210
+
1211
+ .xy-flow__viewport-portal > * {
1212
+ pointer-events: all;
1190
1213
  }
1191
1214
 
1192
1215
 
@@ -2,7 +2,8 @@ import { InjectionToken } from '@angular/core';
2
2
  import type { NgFlowService } from '../services/ng-flow.service';
3
3
  import type { AgentLayoutFn } from '../types/node-template';
4
4
  import type { AgentHistoryOptions } from './history';
5
- import type { AgentTransport } from './types';
5
+ import type { OpLogEntry, OpLogOptions } from './op-log';
6
+ import type { AgentTransport, AgentCanMutateFn } from './types';
6
7
  import * as i0 from "@angular/core";
7
8
  /** Provider token holding the user-supplied transport(s). */
8
9
  export declare const AGENT_TRANSPORTS: InjectionToken<AgentTransport[]>;
@@ -16,6 +17,12 @@ export declare const AGENT_ON_ERROR: InjectionToken<(err: unknown, ctx: {
16
17
  }) => void>;
17
18
  /** Optional host-provided layout function backing the `layout_nodes` tool. */
18
19
  export declare const AGENT_LAYOUT: InjectionToken<AgentLayoutFn>;
20
+ /** Optional host write-guard for mutating tools. */
21
+ export declare const AGENT_CAN_MUTATE: InjectionToken<AgentCanMutateFn>;
22
+ /** Optional sink receiving each applied mutating op (for host persistence/replay). */
23
+ export declare const AGENT_ON_OP: InjectionToken<(entry: OpLogEntry) => void>;
24
+ /** Op-log config. `false` disables the op-log + get_changes_since. Default { maxOps: 1000 }. */
25
+ export declare const AGENT_OPLOG_OPTIONS: InjectionToken<false | OpLogOptions>;
19
26
  /**
20
27
  * Routes JSON-RPC requests from one or more transports to registered
21
28
  * `NgFlowService` instances, and pushes change events back to the agent.
@@ -46,12 +53,16 @@ export declare class AngflowAgentBridge {
46
53
  private readonly flows;
47
54
  private readonly transports;
48
55
  private readonly history;
56
+ private readonly opLog;
57
+ private readonly onOp;
49
58
  private readonly handlers;
50
59
  private readonly injector;
51
60
  private readonly destroyRef;
52
61
  private readonly layoutFn;
62
+ private readonly canMutate;
53
63
  private started;
54
64
  private nextInProcessId;
65
+ private nextNodeIdSeq;
55
66
  private warnedOnBeforeDeleteBypass;
56
67
  /** Bumped every time a flow registers/unregisters. Useful for diagnostics. */
57
68
  readonly registeredFlows: import("@angular/core").WritableSignal<string[]>;
@@ -60,7 +71,7 @@ export declare class AngflowAgentBridge {
60
71
  kind: 'transport-start' | 'transport-send' | 'dispatch';
61
72
  transport?: AgentTransport;
62
73
  method?: string;
63
- }) => void) | null, layoutFn: AgentLayoutFn | null);
74
+ }) => void) | null, layoutFn: AgentLayoutFn | null, canMutate: AgentCanMutateFn | null, onOp: ((entry: OpLogEntry) => void) | null, opLogOptions: OpLogOptions | false | null);
64
75
  private reportError;
65
76
  /**
66
77
  * Register a flow under `id`. The bridge subscribes to its `nodes`,
@@ -75,23 +86,28 @@ export declare class AngflowAgentBridge {
75
86
  unregister(id: string): void;
76
87
  /** Look up a registered flow. */
77
88
  getFlow(id: string): NgFlowService | undefined;
89
+ /** Mint a unique node/group id for a flow (collision-safe vs agent-supplied ids). */
90
+ private mintId;
78
91
  /**
79
92
  * Invoke a tool directly without going through a transport. Behaves
80
93
  * identically to a JSON-RPC request: captures a history snapshot, emits
81
94
  * `flow.history` / `flow.state` events, and throws a structured error
82
95
  * (with `code` and `data` attached) on failure.
83
96
  */
84
- callTool(method: string, params?: Record<string, unknown>): Promise<unknown>;
97
+ callTool(method: string, params?: Record<string, unknown>, opts?: {
98
+ source?: string;
99
+ }): Promise<unknown>;
85
100
  private start;
86
101
  /** Stop all transports. Invoked automatically when the owning injector is destroyed. */
87
102
  private stop;
88
103
  private dispatch;
89
104
  private findFlowId;
90
105
  private emitHistory;
106
+ private recordOp;
91
107
  private emit;
92
108
  private resolveFlow;
93
109
  private watchFlow;
94
110
  private installHandlers;
95
- static ɵfac: i0.ɵɵFactoryDeclaration<AngflowAgentBridge, [{ optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
111
+ static ɵfac: i0.ɵɵFactoryDeclaration<AngflowAgentBridge, [{ optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
96
112
  static ɵprov: i0.ɵɵInjectableDeclaration<AngflowAgentBridge>;
97
113
  }