@realflow/core 0.1.0 → 0.2.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.
- package/README.md +108 -0
- package/dist/collab.d.ts +1 -1
- package/dist/layout.d.ts +3 -1
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +7 -1
- package/dist/layout.js.map +1 -1
- package/dist/ops.d.ts +28 -1
- package/dist/ops.d.ts.map +1 -1
- package/dist/ops.js +92 -0
- package/dist/ops.js.map +1 -1
- package/dist/paths.d.ts +10 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +32 -2
- package/dist/paths.js.map +1 -1
- package/dist/routing.d.ts +1 -1
- package/dist/store.d.ts +73 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +279 -18
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/paths.js
CHANGED
|
@@ -174,6 +174,36 @@ export const pathFns = {
|
|
|
174
174
|
smoothstep: smoothStepPath,
|
|
175
175
|
step: stepPath,
|
|
176
176
|
};
|
|
177
|
-
/**
|
|
178
|
-
|
|
177
|
+
/**
|
|
178
|
+
* Smooth cubic spline (Catmull-Rom → bezier) through the given points — the
|
|
179
|
+
* curve passes exactly through every point. Used for editable edges whose
|
|
180
|
+
* control points the user has dragged.
|
|
181
|
+
*/
|
|
182
|
+
export const splinePath = (points) => {
|
|
183
|
+
const pts = dedupe(points);
|
|
184
|
+
if (pts.length < 2) {
|
|
185
|
+
const p = pts[0] ?? { x: 0, y: 0 };
|
|
186
|
+
return { d: `M ${f(p.x)},${f(p.y)}`, label: { x: p.x, y: p.y } };
|
|
187
|
+
}
|
|
188
|
+
if (pts.length === 2) {
|
|
189
|
+
return straightPath({ source: pts[0], target: pts[1], sourceSide: 'right', targetSide: 'left' });
|
|
190
|
+
}
|
|
191
|
+
let d = `M ${f(pts[0].x)},${f(pts[0].y)}`;
|
|
192
|
+
for (let i = 0; i < pts.length - 1; i++) {
|
|
193
|
+
const p0 = pts[i - 1] ?? pts[i];
|
|
194
|
+
const p1 = pts[i];
|
|
195
|
+
const p2 = pts[i + 1];
|
|
196
|
+
const p3 = pts[i + 2] ?? p2;
|
|
197
|
+
const c1 = { x: p1.x + (p2.x - p0.x) / 6, y: p1.y + (p2.y - p0.y) / 6 };
|
|
198
|
+
const c2 = { x: p2.x - (p3.x - p1.x) / 6, y: p2.y - (p3.y - p1.y) / 6 };
|
|
199
|
+
d += ` C ${f(c1.x)},${f(c1.y)} ${f(c2.x)},${f(c2.y)} ${f(p2.x)},${f(p2.y)}`;
|
|
200
|
+
}
|
|
201
|
+
const mid = pts[Math.floor(pts.length / 2)];
|
|
202
|
+
return { d, label: { x: mid.x, y: mid.y } };
|
|
203
|
+
};
|
|
204
|
+
/** Build a path for the given edge type, falling back to bezier. Editable
|
|
205
|
+
* control points (waypoints) route a smooth spline regardless of type. */
|
|
206
|
+
export const edgePath = (type, s) => s.waypoints && s.waypoints.length > 0
|
|
207
|
+
? splinePath([s.source, ...s.waypoints, s.target])
|
|
208
|
+
: (pathFns[type ?? 'bezier'] ?? bezierPath)(s);
|
|
179
209
|
//# sourceMappingURL=paths.js.map
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
|
package/dist/routing.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Rect, Side, XY } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Orthogonal edge routing with obstacle avoidance — the feature neither
|
|
4
|
-
* React Flow nor
|
|
4
|
+
* React Flow nor RealFlow shipped before. Edges route around nodes instead of
|
|
5
5
|
* cutting straight through them.
|
|
6
6
|
*
|
|
7
7
|
* The algorithm is an A* search over a **Hanan grid**: the lattice formed by
|
package/dist/store.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { ConnectionCandidate, ConnectionState, Edge, FitViewOptions, FlowSnapshot, Guide, HandleInfo, HandleKind, Node, Rect, StoreOptions, Viewport, XY } from './types.js';
|
|
1
|
+
import type { ConnectionCandidate, ConnectionState, Edge, FitViewOptions, FlowSnapshot, Guide, HandleInfo, HandleKind, Node, Rect, ShapeKind, StoreOptions, Tool, Viewport, XY } from './types.js';
|
|
2
2
|
import { SpatialIndex } from './spatial.js';
|
|
3
3
|
export declare const DEFAULT_NODE_WIDTH = 172;
|
|
4
4
|
export declare const DEFAULT_NODE_HEIGHT = 44;
|
|
5
5
|
type Listener = () => void;
|
|
6
6
|
/**
|
|
7
|
-
* FlowStore is
|
|
7
|
+
* FlowStore is RealFlow's reactive heart: a Map-backed graph store with
|
|
8
8
|
* fine-grained topic subscriptions.
|
|
9
9
|
*
|
|
10
10
|
* Every mutation notifies only the topics it touches (`node:<id>`,
|
|
@@ -128,6 +128,13 @@ export declare class FlowStore {
|
|
|
128
128
|
addEdge(edge: Edge): void;
|
|
129
129
|
removeEdges(ids: string[]): void;
|
|
130
130
|
updateEdge(id: string, patch: Partial<Edge>): void;
|
|
131
|
+
/**
|
|
132
|
+
* Transiently set an edge's control points and re-render it, without touching
|
|
133
|
+
* history — for live feedback while dragging an editable edge. On drop,
|
|
134
|
+
* restore the pre-drag value and call {@link updateEdge} once so a single undo
|
|
135
|
+
* captures the net move.
|
|
136
|
+
*/
|
|
137
|
+
setEdgeControlPointsLive(id: string, points: XY[]): void;
|
|
131
138
|
/**
|
|
132
139
|
* Diff-sync the whole graph (used by controlled mode and loadSnapshot).
|
|
133
140
|
* Unchanged elements are left untouched, so selection, measured sizes and
|
|
@@ -197,6 +204,60 @@ export declare class FlowStore {
|
|
|
197
204
|
clearSelection(): void;
|
|
198
205
|
selectAll(): void;
|
|
199
206
|
deleteSelection(): void;
|
|
207
|
+
/**
|
|
208
|
+
* Wrap the selected nodes in a new container node sized to their bounding
|
|
209
|
+
* box. Each member is re-parented to the group with its position rebased to
|
|
210
|
+
* the group's local space; a member whose current parent is also selected is
|
|
211
|
+
* left alone so existing nesting is preserved. One undo entry. Returns the
|
|
212
|
+
* new group id, or `undefined` if nothing is selected.
|
|
213
|
+
*/
|
|
214
|
+
groupSelection(options?: {
|
|
215
|
+
padding?: number;
|
|
216
|
+
label?: string;
|
|
217
|
+
id?: string;
|
|
218
|
+
}): string | undefined;
|
|
219
|
+
/**
|
|
220
|
+
* Dissolve a group: its direct children are re-parented back to the root at
|
|
221
|
+
* their absolute positions and the container node is removed. Delegates to
|
|
222
|
+
* {@link removeNodes}, which already reparents surviving children on delete,
|
|
223
|
+
* so it is a single undoable step. No-op if `groupId` is not a node.
|
|
224
|
+
*/
|
|
225
|
+
ungroup(groupId: string): void;
|
|
226
|
+
/** Collapse a node: hide all of its edge-descendants. One undo entry. */
|
|
227
|
+
collapseNode(id: string): void;
|
|
228
|
+
/** Expand a previously collapsed node, revealing its subtree. */
|
|
229
|
+
expandNode(id: string): void;
|
|
230
|
+
/** The active canvas tool. `select` is normal pan/select; others draw. */
|
|
231
|
+
tool: Tool;
|
|
232
|
+
/** Switch the active canvas tool (freehand / shape stamps / select). */
|
|
233
|
+
setTool(tool: Tool): void;
|
|
234
|
+
/** Create a shape node filling `rect`. One undo entry; returns the new id. */
|
|
235
|
+
createShape(shape: ShapeKind, rect: Rect, data?: Record<string, unknown>): string;
|
|
236
|
+
/**
|
|
237
|
+
* Create a freehand node from a captured stroke (absolute flow points). The
|
|
238
|
+
* node is sized to the stroke's bounding box (with padding) and the points
|
|
239
|
+
* are stored relative to it. One undo entry; returns the new id.
|
|
240
|
+
*/
|
|
241
|
+
createFreehand(points: XY[], data?: Record<string, unknown>): string;
|
|
242
|
+
/** Duration (ms) of the most recently requested node-position tween. */
|
|
243
|
+
positionAnimationMs: number;
|
|
244
|
+
/**
|
|
245
|
+
* Signal that node positions are about to change and should tween. The React
|
|
246
|
+
* layer subscribes to the `layout-anim` topic and arms a CSS transition on
|
|
247
|
+
* nodes for `ms`; headless callers can ignore it. Emitted before the
|
|
248
|
+
* position update so the transition is in place when the new transforms land.
|
|
249
|
+
*/
|
|
250
|
+
beginPositionAnimation(ms: number): void;
|
|
251
|
+
/** Flip a node between collapsed and expanded. */
|
|
252
|
+
toggleCollapse(id: string): void;
|
|
253
|
+
/**
|
|
254
|
+
* Recompute node/edge visibility from every node's `collapsed` flag: a node
|
|
255
|
+
* is hidden iff it is an edge-descendant of at least one collapsed node; an
|
|
256
|
+
* edge is hidden iff either endpoint is hidden. Nested collapses compose —
|
|
257
|
+
* a collapsed node inside a collapsed subtree keeps its own subtree hidden
|
|
258
|
+
* when the outer one expands. Only changed flags are written.
|
|
259
|
+
*/
|
|
260
|
+
private _applyCollapseVisibility;
|
|
200
261
|
/**
|
|
201
262
|
* Serialize a set of nodes (default: the selection) plus the edges wholly
|
|
202
263
|
* between them. The result is JSON-serializable — stash it in app state or
|
|
@@ -227,6 +288,16 @@ export declare class FlowStore {
|
|
|
227
288
|
/** Move the dragged nodes by a flow-space delta from the drag origin. */
|
|
228
289
|
dragBy(delta: XY): void;
|
|
229
290
|
endDrag(): void;
|
|
291
|
+
/** True if `candidate` is a parentId-descendant of `ancestor`. */
|
|
292
|
+
private _isParentDescendant;
|
|
293
|
+
/**
|
|
294
|
+
* Attach a node to the smallest visible `group` node whose bounds contain the
|
|
295
|
+
* node's absolute center, or detach it when dropped outside every group.
|
|
296
|
+
* Skips groups nested under the node (no parent cycles). Rebases position so
|
|
297
|
+
* the node does not visually move. Called from endDrag when reparentOnDrop is
|
|
298
|
+
* enabled; assumes it runs inside a transaction.
|
|
299
|
+
*/
|
|
300
|
+
private _reparentByOverlap;
|
|
230
301
|
get dragging(): boolean;
|
|
231
302
|
private setGuides;
|
|
232
303
|
startConnection(nodeId: string, handleId?: string, kind?: HandleKind): void;
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,IAAI,EACJ,cAAc,EACd,YAAY,EACZ,KAAK,EACL,UAAU,EACV,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,EAAE,EACH,MAAM,SAAS,CAAC;AAajB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { clamp, expandRect, fitRect, rectContainsRect, rectCenter, rectUnion, sideAnchor, snapToGrid, visibleRect, zoomAt, } from './geometry.js';
|
|
2
2
|
import { SpatialIndex } from './spatial.js';
|
|
3
3
|
import { computeGuides } from './guides.js';
|
|
4
|
+
import { getDescendants } from './algorithms.js';
|
|
4
5
|
import { setsEqual, uid } from './utils.js';
|
|
5
6
|
export const DEFAULT_NODE_WIDTH = 172;
|
|
6
7
|
export const DEFAULT_NODE_HEIGHT = 44;
|
|
@@ -13,7 +14,7 @@ const rafSchedule = (fn) => {
|
|
|
13
14
|
fn();
|
|
14
15
|
};
|
|
15
16
|
/**
|
|
16
|
-
* FlowStore is
|
|
17
|
+
* FlowStore is RealFlow's reactive heart: a Map-backed graph store with
|
|
17
18
|
* fine-grained topic subscriptions.
|
|
18
19
|
*
|
|
19
20
|
* Every mutation notifies only the topics it touches (`node:<id>`,
|
|
@@ -593,6 +594,18 @@ export class FlowStore {
|
|
|
593
594
|
});
|
|
594
595
|
this.commit();
|
|
595
596
|
}
|
|
597
|
+
/**
|
|
598
|
+
* Transiently set an edge's control points and re-render it, without touching
|
|
599
|
+
* history — for live feedback while dragging an editable edge. On drop,
|
|
600
|
+
* restore the pre-drag value and call {@link updateEdge} once so a single undo
|
|
601
|
+
* captures the net move.
|
|
602
|
+
*/
|
|
603
|
+
setEdgeControlPointsLive(id, points) {
|
|
604
|
+
const prev = this.edges.get(id);
|
|
605
|
+
if (!prev)
|
|
606
|
+
return;
|
|
607
|
+
this._replaceEdge({ ...prev, controlPoints: points });
|
|
608
|
+
}
|
|
596
609
|
/**
|
|
597
610
|
* Diff-sync the whole graph (used by controlled mode and loadSnapshot).
|
|
598
611
|
* Unchanged elements are left untouched, so selection, measured sizes and
|
|
@@ -936,6 +949,198 @@ export class FlowStore {
|
|
|
936
949
|
});
|
|
937
950
|
this.commit();
|
|
938
951
|
}
|
|
952
|
+
/**
|
|
953
|
+
* Wrap the selected nodes in a new container node sized to their bounding
|
|
954
|
+
* box. Each member is re-parented to the group with its position rebased to
|
|
955
|
+
* the group's local space; a member whose current parent is also selected is
|
|
956
|
+
* left alone so existing nesting is preserved. One undo entry. Returns the
|
|
957
|
+
* new group id, or `undefined` if nothing is selected.
|
|
958
|
+
*/
|
|
959
|
+
groupSelection(options = {}) {
|
|
960
|
+
const ids = [...this.selectedNodes].filter((id) => this.nodes.has(id));
|
|
961
|
+
if (ids.length === 0)
|
|
962
|
+
return undefined;
|
|
963
|
+
const pad = options.padding ?? 32;
|
|
964
|
+
// Absolute bounding box over the whole selection.
|
|
965
|
+
let minX = Infinity;
|
|
966
|
+
let minY = Infinity;
|
|
967
|
+
let maxX = -Infinity;
|
|
968
|
+
let maxY = -Infinity;
|
|
969
|
+
for (const id of ids) {
|
|
970
|
+
const n = this.nodes.get(id);
|
|
971
|
+
const abs = this.absolutePosition(id);
|
|
972
|
+
minX = Math.min(minX, abs.x);
|
|
973
|
+
minY = Math.min(minY, abs.y);
|
|
974
|
+
maxX = Math.max(maxX, abs.x + (n.width ?? DEFAULT_NODE_WIDTH));
|
|
975
|
+
maxY = Math.max(maxY, abs.y + (n.height ?? DEFAULT_NODE_HEIGHT));
|
|
976
|
+
}
|
|
977
|
+
const groupId = options.id ?? uid('group');
|
|
978
|
+
const gx = minX - pad;
|
|
979
|
+
const gy = minY - pad;
|
|
980
|
+
const selectedSet = new Set(ids);
|
|
981
|
+
this.transact('group selection', () => {
|
|
982
|
+
this.addNode({
|
|
983
|
+
id: groupId,
|
|
984
|
+
type: 'group',
|
|
985
|
+
position: { x: gx, y: gy },
|
|
986
|
+
width: maxX - minX + pad * 2,
|
|
987
|
+
height: maxY - minY + pad * 2,
|
|
988
|
+
data: { label: options.label ?? 'Group' },
|
|
989
|
+
});
|
|
990
|
+
for (const id of ids) {
|
|
991
|
+
const n = this.nodes.get(id);
|
|
992
|
+
// Skip members that ride inside another selected member (keep nesting).
|
|
993
|
+
if (n.parentId && selectedSet.has(n.parentId))
|
|
994
|
+
continue;
|
|
995
|
+
const abs = this.absolutePosition(id);
|
|
996
|
+
this.updateNode(id, { parentId: groupId, position: { x: abs.x - gx, y: abs.y - gy } });
|
|
997
|
+
}
|
|
998
|
+
this.setSelection([groupId]);
|
|
999
|
+
});
|
|
1000
|
+
return groupId;
|
|
1001
|
+
}
|
|
1002
|
+
/**
|
|
1003
|
+
* Dissolve a group: its direct children are re-parented back to the root at
|
|
1004
|
+
* their absolute positions and the container node is removed. Delegates to
|
|
1005
|
+
* {@link removeNodes}, which already reparents surviving children on delete,
|
|
1006
|
+
* so it is a single undoable step. No-op if `groupId` is not a node.
|
|
1007
|
+
*/
|
|
1008
|
+
ungroup(groupId) {
|
|
1009
|
+
if (!this.nodes.has(groupId))
|
|
1010
|
+
return;
|
|
1011
|
+
this.removeNodes([groupId]);
|
|
1012
|
+
}
|
|
1013
|
+
/** Collapse a node: hide all of its edge-descendants. One undo entry. */
|
|
1014
|
+
collapseNode(id) {
|
|
1015
|
+
const n = this.nodes.get(id);
|
|
1016
|
+
if (!n || n.collapsed)
|
|
1017
|
+
return;
|
|
1018
|
+
this.transact('collapse node', () => {
|
|
1019
|
+
this.updateNode(id, { collapsed: true });
|
|
1020
|
+
this._applyCollapseVisibility();
|
|
1021
|
+
});
|
|
1022
|
+
}
|
|
1023
|
+
/** Expand a previously collapsed node, revealing its subtree. */
|
|
1024
|
+
expandNode(id) {
|
|
1025
|
+
const n = this.nodes.get(id);
|
|
1026
|
+
if (!n || !n.collapsed)
|
|
1027
|
+
return;
|
|
1028
|
+
this.transact('expand node', () => {
|
|
1029
|
+
this.updateNode(id, { collapsed: false });
|
|
1030
|
+
this._applyCollapseVisibility();
|
|
1031
|
+
});
|
|
1032
|
+
}
|
|
1033
|
+
/** The active canvas tool. `select` is normal pan/select; others draw. */
|
|
1034
|
+
tool = 'select';
|
|
1035
|
+
/** Switch the active canvas tool (freehand / shape stamps / select). */
|
|
1036
|
+
setTool(tool) {
|
|
1037
|
+
if (this.tool === tool)
|
|
1038
|
+
return;
|
|
1039
|
+
this.tool = tool;
|
|
1040
|
+
this.emit('tool');
|
|
1041
|
+
}
|
|
1042
|
+
/** Create a shape node filling `rect`. One undo entry; returns the new id. */
|
|
1043
|
+
createShape(shape, rect, data = {}) {
|
|
1044
|
+
const id = uid('shape');
|
|
1045
|
+
this.transact('add shape', () => {
|
|
1046
|
+
this.addNode({
|
|
1047
|
+
id,
|
|
1048
|
+
type: 'shape',
|
|
1049
|
+
position: { x: rect.x, y: rect.y },
|
|
1050
|
+
width: Math.max(8, rect.width),
|
|
1051
|
+
height: Math.max(8, rect.height),
|
|
1052
|
+
data: { shape, ...data },
|
|
1053
|
+
});
|
|
1054
|
+
this.setSelection([id]);
|
|
1055
|
+
});
|
|
1056
|
+
return id;
|
|
1057
|
+
}
|
|
1058
|
+
/**
|
|
1059
|
+
* Create a freehand node from a captured stroke (absolute flow points). The
|
|
1060
|
+
* node is sized to the stroke's bounding box (with padding) and the points
|
|
1061
|
+
* are stored relative to it. One undo entry; returns the new id.
|
|
1062
|
+
*/
|
|
1063
|
+
createFreehand(points, data = {}) {
|
|
1064
|
+
let minX = Infinity;
|
|
1065
|
+
let minY = Infinity;
|
|
1066
|
+
let maxX = -Infinity;
|
|
1067
|
+
let maxY = -Infinity;
|
|
1068
|
+
for (const p of points) {
|
|
1069
|
+
minX = Math.min(minX, p.x);
|
|
1070
|
+
minY = Math.min(minY, p.y);
|
|
1071
|
+
maxX = Math.max(maxX, p.x);
|
|
1072
|
+
maxY = Math.max(maxY, p.y);
|
|
1073
|
+
}
|
|
1074
|
+
if (!Number.isFinite(minX)) {
|
|
1075
|
+
minX = 0;
|
|
1076
|
+
minY = 0;
|
|
1077
|
+
maxX = 0;
|
|
1078
|
+
maxY = 0;
|
|
1079
|
+
}
|
|
1080
|
+
const pad = 4;
|
|
1081
|
+
const ox = minX - pad;
|
|
1082
|
+
const oy = minY - pad;
|
|
1083
|
+
const id = uid('draw');
|
|
1084
|
+
this.transact('add drawing', () => {
|
|
1085
|
+
this.addNode({
|
|
1086
|
+
id,
|
|
1087
|
+
type: 'freehand',
|
|
1088
|
+
position: { x: ox, y: oy },
|
|
1089
|
+
width: maxX - minX + pad * 2,
|
|
1090
|
+
height: maxY - minY + pad * 2,
|
|
1091
|
+
data: { points: points.map((p) => ({ x: p.x - ox, y: p.y - oy })), ...data },
|
|
1092
|
+
});
|
|
1093
|
+
this.setSelection([id]);
|
|
1094
|
+
});
|
|
1095
|
+
return id;
|
|
1096
|
+
}
|
|
1097
|
+
/** Duration (ms) of the most recently requested node-position tween. */
|
|
1098
|
+
positionAnimationMs = 0;
|
|
1099
|
+
/**
|
|
1100
|
+
* Signal that node positions are about to change and should tween. The React
|
|
1101
|
+
* layer subscribes to the `layout-anim` topic and arms a CSS transition on
|
|
1102
|
+
* nodes for `ms`; headless callers can ignore it. Emitted before the
|
|
1103
|
+
* position update so the transition is in place when the new transforms land.
|
|
1104
|
+
*/
|
|
1105
|
+
beginPositionAnimation(ms) {
|
|
1106
|
+
this.positionAnimationMs = ms;
|
|
1107
|
+
this.emit('layout-anim');
|
|
1108
|
+
}
|
|
1109
|
+
/** Flip a node between collapsed and expanded. */
|
|
1110
|
+
toggleCollapse(id) {
|
|
1111
|
+
const n = this.nodes.get(id);
|
|
1112
|
+
if (!n)
|
|
1113
|
+
return;
|
|
1114
|
+
if (n.collapsed)
|
|
1115
|
+
this.expandNode(id);
|
|
1116
|
+
else
|
|
1117
|
+
this.collapseNode(id);
|
|
1118
|
+
}
|
|
1119
|
+
/**
|
|
1120
|
+
* Recompute node/edge visibility from every node's `collapsed` flag: a node
|
|
1121
|
+
* is hidden iff it is an edge-descendant of at least one collapsed node; an
|
|
1122
|
+
* edge is hidden iff either endpoint is hidden. Nested collapses compose —
|
|
1123
|
+
* a collapsed node inside a collapsed subtree keeps its own subtree hidden
|
|
1124
|
+
* when the outer one expands. Only changed flags are written.
|
|
1125
|
+
*/
|
|
1126
|
+
_applyCollapseVisibility() {
|
|
1127
|
+
const hidden = new Set();
|
|
1128
|
+
for (const n of this.nodes.values()) {
|
|
1129
|
+
if (n.collapsed)
|
|
1130
|
+
for (const d of getDescendants(this, n.id))
|
|
1131
|
+
hidden.add(d);
|
|
1132
|
+
}
|
|
1133
|
+
for (const n of [...this.nodes.values()]) {
|
|
1134
|
+
const shouldHide = hidden.has(n.id);
|
|
1135
|
+
if (!!n.hidden !== shouldHide)
|
|
1136
|
+
this.updateNode(n.id, { hidden: shouldHide });
|
|
1137
|
+
}
|
|
1138
|
+
for (const e of [...this.edges.values()]) {
|
|
1139
|
+
const shouldHide = hidden.has(e.source) || hidden.has(e.target);
|
|
1140
|
+
if (!!e.hidden !== shouldHide)
|
|
1141
|
+
this.updateEdge(e.id, { hidden: shouldHide });
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
939
1144
|
// ── clipboard: copy / paste / duplicate ───────────────────────────────
|
|
940
1145
|
/**
|
|
941
1146
|
* Serialize a set of nodes (default: the selection) plus the edges wholly
|
|
@@ -1114,28 +1319,84 @@ export class FlowStore {
|
|
|
1114
1319
|
if (n)
|
|
1115
1320
|
after.set(id, { ...n.position });
|
|
1116
1321
|
}
|
|
1117
|
-
this.
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
const
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1322
|
+
this.transact('move', () => {
|
|
1323
|
+
this.record('move', {
|
|
1324
|
+
undo: () => this.batch(() => {
|
|
1325
|
+
for (const [id, pos] of before) {
|
|
1326
|
+
const n = this.nodes.get(id);
|
|
1327
|
+
if (n) {
|
|
1328
|
+
this.nodes.set(id, { ...n, position: pos });
|
|
1329
|
+
this.touchNode(id);
|
|
1330
|
+
}
|
|
1124
1331
|
}
|
|
1125
|
-
}
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1332
|
+
}),
|
|
1333
|
+
redo: () => this.batch(() => {
|
|
1334
|
+
for (const [id, pos] of after) {
|
|
1335
|
+
const n = this.nodes.get(id);
|
|
1336
|
+
if (n) {
|
|
1337
|
+
this.nodes.set(id, { ...n, position: pos });
|
|
1338
|
+
this.touchNode(id);
|
|
1339
|
+
}
|
|
1133
1340
|
}
|
|
1134
|
-
}
|
|
1135
|
-
})
|
|
1341
|
+
}),
|
|
1342
|
+
});
|
|
1343
|
+
// Dynamic grouping: attach/detach dropped nodes to the group under them.
|
|
1344
|
+
if (this.options.reparentOnDrop) {
|
|
1345
|
+
for (const id of drag.ids)
|
|
1346
|
+
this._reparentByOverlap(id);
|
|
1347
|
+
}
|
|
1136
1348
|
});
|
|
1137
1349
|
this.commit();
|
|
1138
1350
|
}
|
|
1351
|
+
/** True if `candidate` is a parentId-descendant of `ancestor`. */
|
|
1352
|
+
_isParentDescendant(candidate, ancestor) {
|
|
1353
|
+
let p = this.nodes.get(candidate)?.parentId;
|
|
1354
|
+
const seen = new Set();
|
|
1355
|
+
while (p && !seen.has(p)) {
|
|
1356
|
+
if (p === ancestor)
|
|
1357
|
+
return true;
|
|
1358
|
+
seen.add(p);
|
|
1359
|
+
p = this.nodes.get(p)?.parentId;
|
|
1360
|
+
}
|
|
1361
|
+
return false;
|
|
1362
|
+
}
|
|
1363
|
+
/**
|
|
1364
|
+
* Attach a node to the smallest visible `group` node whose bounds contain the
|
|
1365
|
+
* node's absolute center, or detach it when dropped outside every group.
|
|
1366
|
+
* Skips groups nested under the node (no parent cycles). Rebases position so
|
|
1367
|
+
* the node does not visually move. Called from endDrag when reparentOnDrop is
|
|
1368
|
+
* enabled; assumes it runs inside a transaction.
|
|
1369
|
+
*/
|
|
1370
|
+
_reparentByOverlap(id) {
|
|
1371
|
+
const node = this.nodes.get(id);
|
|
1372
|
+
if (!node)
|
|
1373
|
+
return;
|
|
1374
|
+
const abs = this.absolutePosition(id);
|
|
1375
|
+
const cx = abs.x + (node.width ?? DEFAULT_NODE_WIDTH) / 2;
|
|
1376
|
+
const cy = abs.y + (node.height ?? DEFAULT_NODE_HEIGHT) / 2;
|
|
1377
|
+
let target;
|
|
1378
|
+
let targetArea = Infinity;
|
|
1379
|
+
for (const g of this.nodes.values()) {
|
|
1380
|
+
if (g.id === id || g.type !== 'group' || g.hidden || this._isParentDescendant(g.id, id))
|
|
1381
|
+
continue;
|
|
1382
|
+
const gAbs = this.absolutePosition(g.id);
|
|
1383
|
+
const gw = g.width ?? DEFAULT_NODE_WIDTH;
|
|
1384
|
+
const gh = g.height ?? DEFAULT_NODE_HEIGHT;
|
|
1385
|
+
if (cx >= gAbs.x && cx <= gAbs.x + gw && cy >= gAbs.y && cy <= gAbs.y + gh && gw * gh < targetArea) {
|
|
1386
|
+
target = g.id;
|
|
1387
|
+
targetArea = gw * gh;
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
if (target === node.parentId)
|
|
1391
|
+
return; // already correctly parented
|
|
1392
|
+
if (target) {
|
|
1393
|
+
const gAbs = this.absolutePosition(target);
|
|
1394
|
+
this.updateNode(id, { parentId: target, position: { x: abs.x - gAbs.x, y: abs.y - gAbs.y } });
|
|
1395
|
+
}
|
|
1396
|
+
else if (node.parentId) {
|
|
1397
|
+
this.updateNode(id, { parentId: undefined, position: abs });
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1139
1400
|
get dragging() {
|
|
1140
1401
|
return this.drag !== null;
|
|
1141
1402
|
}
|