@principal-ai/principal-view-react 0.16.58 → 0.16.59
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/dist/subsystem/SubsystemComponentGraph.d.ts +4 -4
- package/dist/subsystem/SubsystemComponentGraph.d.ts.map +1 -1
- package/dist/subsystem/SubsystemComponentGraph.js +60 -14
- package/dist/subsystem/SubsystemComponentGraph.js.map +1 -1
- package/dist/subsystem/model.d.ts +39 -7
- package/dist/subsystem/model.d.ts.map +1 -1
- package/dist/subsystem/model.js +90 -10
- package/dist/subsystem/model.js.map +1 -1
- package/dist/subsystem/nodes.d.ts +10 -3
- package/dist/subsystem/nodes.d.ts.map +1 -1
- package/dist/subsystem/nodes.js +43 -1
- package/dist/subsystem/nodes.js.map +1 -1
- package/dist/utils/elkLayout.d.ts +26 -0
- package/dist/utils/elkLayout.d.ts.map +1 -1
- package/dist/utils/elkLayout.js +150 -12
- package/dist/utils/elkLayout.js.map +1 -1
- package/package.json +1 -1
- package/src/stories/Subsystem/ComponentGraph/Processes.stories.tsx +68 -0
- package/src/subsystem/SubsystemComponentGraph.tsx +71 -15
- package/src/subsystem/model.test.ts +56 -0
- package/src/subsystem/model.ts +119 -11
- package/src/subsystem/nodes.tsx +64 -2
- package/src/utils/elkLayout.ts +162 -12
package/dist/utils/elkLayout.js
CHANGED
|
@@ -112,6 +112,44 @@ export function calculatePathMidpoint(points) {
|
|
|
112
112
|
// Fallback to last point
|
|
113
113
|
return points[points.length - 1];
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Closest point on a polyline to a target (for snapping labels onto the stroke).
|
|
117
|
+
*/
|
|
118
|
+
export function closestPointOnPath(points, target) {
|
|
119
|
+
if (points.length === 0)
|
|
120
|
+
return { x: 0, y: 0 };
|
|
121
|
+
if (points.length === 1)
|
|
122
|
+
return points[0];
|
|
123
|
+
let best = points[0];
|
|
124
|
+
let bestDist = Infinity;
|
|
125
|
+
for (let i = 1; i < points.length; i++) {
|
|
126
|
+
const a = points[i - 1];
|
|
127
|
+
const b = points[i];
|
|
128
|
+
const dx = b.x - a.x;
|
|
129
|
+
const dy = b.y - a.y;
|
|
130
|
+
const lenSq = dx * dx + dy * dy;
|
|
131
|
+
const t = lenSq === 0 ? 0 : Math.max(0, Math.min(1, ((target.x - a.x) * dx + (target.y - a.y) * dy) / lenSq));
|
|
132
|
+
const px = a.x + dx * t;
|
|
133
|
+
const py = a.y + dy * t;
|
|
134
|
+
const dist = Math.hypot(target.x - px, target.y - py);
|
|
135
|
+
if (dist < bestDist) {
|
|
136
|
+
bestDist = dist;
|
|
137
|
+
best = { x: px, y: py };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return best;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Polyline length in flow-space units (sum of segment lengths).
|
|
144
|
+
* @public Exported for testing
|
|
145
|
+
*/
|
|
146
|
+
export function calculatePathLength(points) {
|
|
147
|
+
let total = 0;
|
|
148
|
+
for (let i = 1; i < points.length; i++) {
|
|
149
|
+
total += Math.hypot(points[i].x - points[i - 1].x, points[i].y - points[i - 1].y);
|
|
150
|
+
}
|
|
151
|
+
return total;
|
|
152
|
+
}
|
|
115
153
|
/**
|
|
116
154
|
* Get ELK layout options based on configuration
|
|
117
155
|
*/
|
|
@@ -295,20 +333,104 @@ export async function computeElkLayout(nodes, edges, options = {}) {
|
|
|
295
333
|
}
|
|
296
334
|
return elkEdge;
|
|
297
335
|
});
|
|
336
|
+
// Partition leaf nodes into compound parents when groups are given.
|
|
337
|
+
// Group shells themselves are NOT part of `nodes` — they are reconstructed
|
|
338
|
+
// by the caller from `groupBounds`. Only leaf ids in `memberIds` nest.
|
|
339
|
+
const groupDefs = (options.groups ?? []).filter((g) => g.memberIds.length > 0);
|
|
340
|
+
const memberToGroup = new Map();
|
|
341
|
+
const groupedLeafIds = new Set();
|
|
342
|
+
for (const g of groupDefs) {
|
|
343
|
+
for (const mid of g.memberIds) {
|
|
344
|
+
if (!memberToGroup.has(mid)) {
|
|
345
|
+
memberToGroup.set(mid, g.id);
|
|
346
|
+
groupedLeafIds.add(mid);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
const elkById = new Map(elkNodes.map((n) => [n.id, n]));
|
|
351
|
+
const ungroupedElkNodes = [];
|
|
352
|
+
for (const n of elkNodes) {
|
|
353
|
+
if (!groupedLeafIds.has(n.id))
|
|
354
|
+
ungroupedElkNodes.push(n);
|
|
355
|
+
}
|
|
356
|
+
const elkParents = [];
|
|
357
|
+
for (const g of groupDefs) {
|
|
358
|
+
const children = g.memberIds
|
|
359
|
+
.map((mid) => elkById.get(mid))
|
|
360
|
+
.filter((n) => !!n);
|
|
361
|
+
// Skip groups with <2 real members — a single-child frame adds noise;
|
|
362
|
+
// the caller drops the shell and leaves the node top-level.
|
|
363
|
+
if (children.length < 2) {
|
|
364
|
+
for (const c of children)
|
|
365
|
+
ungroupedElkNodes.push(c);
|
|
366
|
+
memberToGroup.delete(g.memberIds[0]);
|
|
367
|
+
groupedLeafIds.delete(g.memberIds[0]);
|
|
368
|
+
continue;
|
|
369
|
+
}
|
|
370
|
+
elkParents.push({
|
|
371
|
+
id: g.id,
|
|
372
|
+
children,
|
|
373
|
+
layoutOptions: {
|
|
374
|
+
'elk.algorithm': 'layered',
|
|
375
|
+
'elk.direction': direction,
|
|
376
|
+
'elk.padding': '[top=48,left=24,bottom=24,right=24]',
|
|
377
|
+
'elk.spacing.nodeNode': '40',
|
|
378
|
+
},
|
|
379
|
+
});
|
|
380
|
+
}
|
|
298
381
|
// Create ELK graph
|
|
382
|
+
const rootOptions = getElkOptions(options);
|
|
383
|
+
if (elkParents.length > 0) {
|
|
384
|
+
rootOptions['elk.hierarchyHandling'] = 'INCLUDE_CHILDREN';
|
|
385
|
+
}
|
|
299
386
|
const elkGraph = {
|
|
300
387
|
id: 'root',
|
|
301
|
-
layoutOptions:
|
|
302
|
-
children:
|
|
388
|
+
layoutOptions: rootOptions,
|
|
389
|
+
children: [...ungroupedElkNodes, ...elkParents],
|
|
303
390
|
edges: elkEdges,
|
|
304
391
|
};
|
|
305
392
|
// Run ELK layout
|
|
306
393
|
const layoutedGraph = await getElkInstance().layout(elkGraph);
|
|
307
|
-
// Build
|
|
394
|
+
// Build maps of ELK-computed positions. Nested children report
|
|
395
|
+
// parent-relative coords — flatten to absolute for edges, and keep the
|
|
396
|
+
// relative form for React Flow children (whose position is parent-relative).
|
|
397
|
+
// Absolute offset of every ELK node (parents included), accumulated down
|
|
398
|
+
// the ancestor chain — edge sections/labels are relative to their
|
|
399
|
+
// `container`, so each edge needs its container's absolute offset.
|
|
400
|
+
const elkAbsOffsets = new Map();
|
|
308
401
|
const elkPositions = new Map();
|
|
402
|
+
const elkRelativePositions = new Map();
|
|
403
|
+
const groupBounds = new Map();
|
|
404
|
+
const walkElk = (n, ox, oy) => {
|
|
405
|
+
const ax = ox + (n.x ?? 0);
|
|
406
|
+
const ay = oy + (n.y ?? 0);
|
|
407
|
+
elkAbsOffsets.set(n.id, { x: ax, y: ay });
|
|
408
|
+
for (const c of n.children ?? [])
|
|
409
|
+
walkElk(c, ax, ay);
|
|
410
|
+
};
|
|
411
|
+
walkElk(layoutedGraph, 0, 0);
|
|
309
412
|
if (layoutedGraph.children) {
|
|
310
413
|
for (const child of layoutedGraph.children) {
|
|
311
|
-
|
|
414
|
+
if (child.children && child.children.length > 0 && groupDefs.some((g) => g.id === child.id)) {
|
|
415
|
+
const gx = child.x ?? 0;
|
|
416
|
+
const gy = child.y ?? 0;
|
|
417
|
+
groupBounds.set(child.id, {
|
|
418
|
+
x: gx,
|
|
419
|
+
y: gy,
|
|
420
|
+
width: child.width ?? 0,
|
|
421
|
+
height: child.height ?? 0,
|
|
422
|
+
});
|
|
423
|
+
for (const grand of child.children) {
|
|
424
|
+
const rx = grand.x ?? 0;
|
|
425
|
+
const ry = grand.y ?? 0;
|
|
426
|
+
elkRelativePositions.set(grand.id, { x: rx, y: ry });
|
|
427
|
+
elkPositions.set(grand.id, { x: gx + rx, y: gy + ry });
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
elkPositions.set(child.id, { x: child.x ?? 0, y: child.y ?? 0 });
|
|
432
|
+
elkRelativePositions.set(child.id, { x: child.x ?? 0, y: child.y ?? 0 });
|
|
433
|
+
}
|
|
312
434
|
}
|
|
313
435
|
}
|
|
314
436
|
// Extract results
|
|
@@ -328,7 +450,10 @@ export async function computeElkLayout(nodes, edges, options = {}) {
|
|
|
328
450
|
const sourceElk = sourceId ? elkPositions.get(sourceId) : null;
|
|
329
451
|
const targetOriginal = targetId ? originalPositions.get(targetId) : null;
|
|
330
452
|
const targetElk = targetId ? elkPositions.get(targetId) : null;
|
|
331
|
-
// Collect all points from sections
|
|
453
|
+
// Collect all points from sections. Sections (and labels) are
|
|
454
|
+
// relative to the edge's `container` — intra-group edges live in
|
|
455
|
+
// the parent's frame, so translate to root-absolute flow coords.
|
|
456
|
+
const containerOffset = elkAbsOffsets.get(edge.container ?? 'root') ?? { x: 0, y: 0 };
|
|
332
457
|
const allPoints = [];
|
|
333
458
|
for (const section of edge.sections) {
|
|
334
459
|
allPoints.push(section.startPoint);
|
|
@@ -337,6 +462,12 @@ export async function computeElkLayout(nodes, edges, options = {}) {
|
|
|
337
462
|
}
|
|
338
463
|
allPoints.push(section.endPoint);
|
|
339
464
|
}
|
|
465
|
+
if (containerOffset.x !== 0 || containerOffset.y !== 0) {
|
|
466
|
+
for (const p of allPoints) {
|
|
467
|
+
p.x += containerOffset.x;
|
|
468
|
+
p.y += containerOffset.y;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
340
471
|
// If preserving positions, we need to offset the edge points
|
|
341
472
|
// The edge path is relative to ELK's layout, so we translate it
|
|
342
473
|
if (preserveNodePositions && sourceOriginal && sourceElk && targetOriginal && targetElk) {
|
|
@@ -369,8 +500,8 @@ export async function computeElkLayout(nodes, edges, options = {}) {
|
|
|
369
500
|
const elkLabel = edge.labels[0];
|
|
370
501
|
// ELK reports the label's top-left; convert to center so screen-space
|
|
371
502
|
// overlays can anchor with translate(-50%, -50%) at any zoom.
|
|
372
|
-
let lx = (elkLabel.x ?? 0) + (elkLabel.width ?? 0) / 2;
|
|
373
|
-
let ly = (elkLabel.y ?? 0) + (elkLabel.height ?? 0) / 2;
|
|
503
|
+
let lx = (elkLabel.x ?? 0) + (elkLabel.width ?? 0) / 2 + containerOffset.x;
|
|
504
|
+
let ly = (elkLabel.y ?? 0) + (elkLabel.height ?? 0) / 2 + containerOffset.y;
|
|
374
505
|
if (preserveNodePositions && sourceOriginal && sourceElk && targetOriginal && targetElk) {
|
|
375
506
|
const sourceOffset = {
|
|
376
507
|
x: sourceOriginal.x - sourceElk.x,
|
|
@@ -388,7 +519,11 @@ export async function computeElkLayout(nodes, edges, options = {}) {
|
|
|
388
519
|
lx += sourceOffset.x + (targetOffset.x - sourceOffset.x) * t;
|
|
389
520
|
ly += sourceOffset.y + (targetOffset.y - sourceOffset.y) * t;
|
|
390
521
|
}
|
|
391
|
-
|
|
522
|
+
// Snap onto the polyline stroke. ELK's label box can sit slightly
|
|
523
|
+
// off the route (side selection / reserved label space); we keep
|
|
524
|
+
// its along-edge placement but center on the actual path.
|
|
525
|
+
const onPath = closestPointOnPath(allPoints, { x: lx, y: ly });
|
|
526
|
+
edgeLabelPositions.set(edge.id, onPath);
|
|
392
527
|
}
|
|
393
528
|
// For orthogonal routing with preserved positions, the offset can distort
|
|
394
529
|
// ELK's bend points, so we rebuild the path. Otherwise, use ELK's bends
|
|
@@ -429,15 +564,17 @@ export async function computeElkLayout(nodes, edges, options = {}) {
|
|
|
429
564
|
}
|
|
430
565
|
}
|
|
431
566
|
}
|
|
432
|
-
// Process nodes (update positions if not preserving)
|
|
567
|
+
// Process nodes (update positions if not preserving). Grouped children use
|
|
568
|
+
// parent-relative coords (React Flow child semantics); everything else uses
|
|
569
|
+
// absolute coords.
|
|
433
570
|
const resultNodes = preserveNodePositions
|
|
434
571
|
? nodes
|
|
435
572
|
: nodes.map((node) => {
|
|
436
|
-
const
|
|
437
|
-
if (
|
|
573
|
+
const rel = elkRelativePositions.get(node.id);
|
|
574
|
+
if (rel) {
|
|
438
575
|
return {
|
|
439
576
|
...node,
|
|
440
|
-
position: { x:
|
|
577
|
+
position: { x: rel.x, y: rel.y },
|
|
441
578
|
};
|
|
442
579
|
}
|
|
443
580
|
return node;
|
|
@@ -447,6 +584,7 @@ export async function computeElkLayout(nodes, edges, options = {}) {
|
|
|
447
584
|
edgePaths,
|
|
448
585
|
edgeLabelPositions,
|
|
449
586
|
edgePathPoints,
|
|
587
|
+
groupBounds,
|
|
450
588
|
};
|
|
451
589
|
}
|
|
452
590
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elkLayout.js","sourceRoot":"","sources":["../../src/utils/elkLayout.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"elkLayout.js","sourceRoot":"","sources":["../../src/utils/elkLayout.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import '@xyflow/react/dist/style.css';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { ThemeProvider, defaultEditorTheme } from '@principal-ade/industry-theme';
|
|
4
|
+
import { SubsystemComponentGraph } from '../../../subsystem/SubsystemComponentGraph';
|
|
5
|
+
import { components, edges } from './fixtures';
|
|
6
|
+
|
|
7
|
+
const meta = {
|
|
8
|
+
title: 'Subsystem/ComponentGraph/Processes',
|
|
9
|
+
component: SubsystemComponentGraph,
|
|
10
|
+
parameters: { layout: 'fullscreen' },
|
|
11
|
+
tags: ['autodocs'],
|
|
12
|
+
decorators: [
|
|
13
|
+
(Story) => (
|
|
14
|
+
<ThemeProvider theme={defaultEditorTheme}>
|
|
15
|
+
<Story />
|
|
16
|
+
</ThemeProvider>
|
|
17
|
+
),
|
|
18
|
+
],
|
|
19
|
+
} satisfies Meta<typeof SubsystemComponentGraph>;
|
|
20
|
+
|
|
21
|
+
export default meta;
|
|
22
|
+
type Story = StoryObj<typeof meta>;
|
|
23
|
+
|
|
24
|
+
// Two deployment units + one unframed outsider: host and renderer each get a
|
|
25
|
+
// dashed process frame; the service sits outside every boundary.
|
|
26
|
+
const processComponents = [
|
|
27
|
+
...components([
|
|
28
|
+
['main', 'main', 'function', 'src/host/main.ts', 'pkg:github/principal-ai/trail-viewer', 'boots the host process', 'main'],
|
|
29
|
+
['store', 'SessionStore', 'store', 'src/host/store.ts', 'pkg:github/principal-ai/trail-viewer', 'retained host state', 'SessionStore'],
|
|
30
|
+
['view', 'TrailView', 'function', 'src/renderer/view.tsx', 'pkg:github/principal-ai/trail-viewer', 'renders the trail', 'TrailView'],
|
|
31
|
+
['bridge', 'bridge', 'module', 'src/renderer/bridge.ts', 'pkg:github/principal-ai/trail-viewer', 'IPC bridge to the host', 'bridge'],
|
|
32
|
+
]),
|
|
33
|
+
{
|
|
34
|
+
id: 'svc',
|
|
35
|
+
name: 'telemetry',
|
|
36
|
+
construct: 'external' as const,
|
|
37
|
+
file: '',
|
|
38
|
+
purl: 'external',
|
|
39
|
+
purpose: 'external telemetry sink (no process, never framed)',
|
|
40
|
+
role: 'service' as const,
|
|
41
|
+
},
|
|
42
|
+
].map((c, i) =>
|
|
43
|
+
i < 2
|
|
44
|
+
? { ...c, process: 'trail-viewer/host' }
|
|
45
|
+
: i < 4
|
|
46
|
+
? { ...c, process: 'trail-viewer/renderer' }
|
|
47
|
+
: c,
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
const processEdges = edges([
|
|
51
|
+
['main', 'store', 'writes'],
|
|
52
|
+
['main', 'bridge', 'calls'],
|
|
53
|
+
['bridge', 'view', 'feeds'],
|
|
54
|
+
['main', 'svc', 'uses'],
|
|
55
|
+
]);
|
|
56
|
+
|
|
57
|
+
export const ProcessBoundaries: Story = {
|
|
58
|
+
render: () => (
|
|
59
|
+
<div style={{ width: '100%', height: '100vh' }}>
|
|
60
|
+
<SubsystemComponentGraph
|
|
61
|
+
title="Process boundaries"
|
|
62
|
+
description="Host and renderer each render in their own ELK-aware boundary frame. The telemetry service has no `process` and sits outside every boundary."
|
|
63
|
+
components={processComponents}
|
|
64
|
+
edges={processEdges}
|
|
65
|
+
/>
|
|
66
|
+
</div>
|
|
67
|
+
),
|
|
68
|
+
};
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* SubsystemComponentGraph — a clickable, read-only React Flow component graph
|
|
3
3
|
* for a subsystem snapshot.
|
|
4
4
|
*
|
|
5
|
-
* Nodes are positioned with ELK auto-layout (layered, minimized crossings
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* Nodes are positioned with ELK auto-layout (layered, minimized crossings,
|
|
6
|
+
* process-aware compound groups). Components sharing a `process` render
|
|
7
|
+
* inside one labeled boundary frame; nodes without one sit outside every
|
|
8
|
+
* boundary. Clicking a component invokes `onSelect`.
|
|
9
9
|
*
|
|
10
10
|
* This is a focused fork of the package's `GraphRenderer` pipeline (same ELK
|
|
11
11
|
* edge routing, delayed fitView, Background/Controls/MiniMap, node/edge type
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
type SubsystemThroughline,
|
|
45
45
|
} from './model';
|
|
46
46
|
import type { SubsystemOpenFileOptions } from './declarationRef';
|
|
47
|
-
import { SubsystemComponentNode, SubsystemEdge, SUBSYSTEM_CALLBACKS, hexWithAlpha, EDGE_DIM_ALPHA, fileMatchForNode, flowElementVisibility } from './nodes';
|
|
47
|
+
import { SubsystemComponentNode, SubsystemGroupNode, SubsystemEdge, SUBSYSTEM_CALLBACKS, hexWithAlpha, EDGE_DIM_ALPHA, fileMatchForNode, flowElementVisibility } from './nodes';
|
|
48
48
|
import { SubsystemFileTree } from './SubsystemFileTree';
|
|
49
49
|
import { GraphLayoutCover } from './GraphLayoutCover';
|
|
50
50
|
import { ComponentDeclaration } from './ComponentDeclaration';
|
|
@@ -53,6 +53,12 @@ import { FileDrawer } from './FileDrawer';
|
|
|
53
53
|
import { EdgeLegendModal, MECHANISM_DESCRIPTIONS } from './EdgeLegendModal';
|
|
54
54
|
import { buildRepoGroups, repoAvatarUrl, type RepoGroup } from './paths';
|
|
55
55
|
|
|
56
|
+
/** Cap screen-space edge labels to this fraction of the edge's on-screen length. */
|
|
57
|
+
const EDGE_LABEL_MAX_EDGE_FRACTION = 0.55;
|
|
58
|
+
/** Rough monospace width at fontSize 10 + horizontal padding/border. */
|
|
59
|
+
const EDGE_LABEL_CHAR_PX = 6.2;
|
|
60
|
+
const EDGE_LABEL_PAD_PX = 18;
|
|
61
|
+
|
|
56
62
|
export interface SubsystemComponentGraphProps {
|
|
57
63
|
components: SubsystemComponent[];
|
|
58
64
|
edges: SubsystemComponentEdge[];
|
|
@@ -109,6 +115,7 @@ export interface SubsystemComponentGraphProps {
|
|
|
109
115
|
|
|
110
116
|
const nodeTypes: NodeTypes = {
|
|
111
117
|
'subsystem-component': SubsystemComponentNode,
|
|
118
|
+
'subsystem-group': SubsystemGroupNode,
|
|
112
119
|
};
|
|
113
120
|
|
|
114
121
|
const edgeTypes: EdgeTypes = {
|
|
@@ -224,22 +231,25 @@ function Inner({ components, edges, throughlines, onSelect, onEdgeSelect, measur
|
|
|
224
231
|
const measuredDimsRef = useRef(new Map<string, { width: number; height: number }>());
|
|
225
232
|
const pendingMeasuredRef = useRef(false);
|
|
226
233
|
|
|
227
|
-
// Pass 2: once every node has a measured dimension, re-run ELK.
|
|
234
|
+
// Pass 2: once every leaf node has a measured dimension, re-run ELK.
|
|
235
|
+
// Group parents are sized by ELK, not measured — exclude them or pass 2
|
|
236
|
+
// would wait forever for dimensions that never arrive.
|
|
228
237
|
const prevMeasuredSigRef = useRef('');
|
|
229
238
|
const pass2DoneRef = useRef(false);
|
|
230
239
|
const triggerPass2 = useCallback(() => {
|
|
231
240
|
if (pass2DoneRef.current) return;
|
|
232
241
|
const dims = measuredDimsRef.current;
|
|
233
|
-
|
|
234
|
-
|
|
242
|
+
const leafNodes = built.nodes.filter((n) => n.type !== 'subsystem-group');
|
|
243
|
+
if (dims.size < leafNodes.length) return;
|
|
244
|
+
const sig = leafNodes.map((n) => `${n.id}:${dims.get(n.id)?.width ?? '?'}`).join(',');
|
|
235
245
|
if (sig.includes('?:')) return;
|
|
236
246
|
if (sig === prevMeasuredSigRef.current) return;
|
|
237
247
|
prevMeasuredSigRef.current = sig;
|
|
238
248
|
pendingMeasuredRef.current = false;
|
|
239
249
|
pass2DoneRef.current = true;
|
|
240
250
|
|
|
241
|
-
const measuredWidths = new Map(
|
|
242
|
-
const measuredHeights = new Map(
|
|
251
|
+
const measuredWidths = new Map(leafNodes.map((n) => [n.id, dims.get(n.id)!.width]));
|
|
252
|
+
const measuredHeights = new Map(leafNodes.map((n) => [n.id, dims.get(n.id)!.height]));
|
|
243
253
|
let alive = true;
|
|
244
254
|
void buildSubsystemGraph(
|
|
245
255
|
{ components, edges },
|
|
@@ -397,6 +407,26 @@ function Inner({ components, edges, throughlines, onSelect, onEdgeSelect, measur
|
|
|
397
407
|
// React Flow's own selection state from updating.
|
|
398
408
|
const dispNodes = useMemo(() => {
|
|
399
409
|
return xyflowNodesBase.map((n) => {
|
|
410
|
+
// Boundary frames follow their members: hidden when no member is
|
|
411
|
+
// visible, dimmed when members are dimmed. Never selectable.
|
|
412
|
+
if (n.type === 'subsystem-group') {
|
|
413
|
+
const memberIds = ((n.data as { region?: { memberIds?: string[] } } | undefined)?.region?.memberIds) ?? [];
|
|
414
|
+
const vis = flowElementVisibility({
|
|
415
|
+
inOpened: memberIds.some((id) => openedNodeIds?.has(id) === true),
|
|
416
|
+
inSelected: memberIds.some((id) => brightNodeIds?.has(id) === true),
|
|
417
|
+
anyOpened: openedNodeIds != null,
|
|
418
|
+
anySelected: brightNodeIds != null,
|
|
419
|
+
});
|
|
420
|
+
return {
|
|
421
|
+
...n,
|
|
422
|
+
hidden: vis.hidden,
|
|
423
|
+
selectable: false,
|
|
424
|
+
data: {
|
|
425
|
+
...(n.data as object),
|
|
426
|
+
...(vis.dimmed && { dimmed: true }),
|
|
427
|
+
},
|
|
428
|
+
};
|
|
429
|
+
}
|
|
400
430
|
const comp = (n.data as { component?: SubsystemComponent } | undefined)?.component;
|
|
401
431
|
const fileMatch = fileMatchForNode(comp?.file, openFile, focusNodeIds?.has(n.id) === true);
|
|
402
432
|
const isSelected = selected?.id !== undefined && comp?.id === selected.id;
|
|
@@ -460,8 +490,12 @@ function Inner({ components, edges, throughlines, onSelect, onEdgeSelect, measur
|
|
|
460
490
|
const onNodesChange = useCallback(
|
|
461
491
|
(changes: NodeChange[]) => {
|
|
462
492
|
// Capture dimension changes (React Flow's measurement callback).
|
|
493
|
+
// Group parents are ELK-sized — ignore their measurements.
|
|
494
|
+
const groupIds = new Set(
|
|
495
|
+
dispNodes.filter((n) => n.type === 'subsystem-group').map((n) => n.id),
|
|
496
|
+
);
|
|
463
497
|
for (const ch of changes) {
|
|
464
|
-
if (ch.type === 'dimensions' && ch.dimensions) {
|
|
498
|
+
if (ch.type === 'dimensions' && ch.dimensions && !groupIds.has(ch.id)) {
|
|
465
499
|
measuredDimsRef.current.set(ch.id, ch.dimensions);
|
|
466
500
|
pendingMeasuredRef.current = true;
|
|
467
501
|
}
|
|
@@ -677,13 +711,20 @@ function Inner({ components, edges, throughlines, onSelect, onEdgeSelect, measur
|
|
|
677
711
|
return dispEdges
|
|
678
712
|
.filter((e) => !e.hidden)
|
|
679
713
|
.map((e) => {
|
|
680
|
-
const d = e.data as {
|
|
714
|
+
const d = e.data as {
|
|
715
|
+
mechanism?: string;
|
|
716
|
+
dimmed?: boolean;
|
|
717
|
+
labelX?: number;
|
|
718
|
+
labelY?: number;
|
|
719
|
+
pathLength?: number;
|
|
720
|
+
} | undefined;
|
|
681
721
|
return {
|
|
682
722
|
id: e.id,
|
|
683
723
|
mechanism: d?.mechanism ?? 'imports',
|
|
684
724
|
dimmed: d?.dimmed === true,
|
|
685
725
|
midX: d?.labelX ?? 0,
|
|
686
726
|
midY: d?.labelY ?? 0,
|
|
727
|
+
pathLength: d?.pathLength ?? 0,
|
|
687
728
|
stepNos: selectedFlowStepNos?.get(e.id),
|
|
688
729
|
};
|
|
689
730
|
});
|
|
@@ -923,6 +964,17 @@ function Inner({ components, edges, throughlines, onSelect, onEdgeSelect, measur
|
|
|
923
964
|
const verifiable = MECHANISM_DESCRIPTIONS.find(([m]) => m === mechanism)?.[2] ?? true;
|
|
924
965
|
const screenX = lbl.midX * viewport.zoom + viewport.x;
|
|
925
966
|
const screenY = lbl.midY * viewport.zoom + viewport.y;
|
|
967
|
+
const text = lbl.stepNos?.length
|
|
968
|
+
? `${lbl.stepNos.map((n) => `${n}:`).join(' ')} ${lbl.mechanism}`
|
|
969
|
+
: lbl.mechanism;
|
|
970
|
+
// Labels stay readable at full size until they'd exceed a share of
|
|
971
|
+
// the edge's screen length, then shrink with zoom.
|
|
972
|
+
const estWidth = text.length * EDGE_LABEL_CHAR_PX + EDGE_LABEL_PAD_PX;
|
|
973
|
+
const screenEdgeLen = lbl.pathLength * viewport.zoom;
|
|
974
|
+
const scale =
|
|
975
|
+
lbl.pathLength > 0 && estWidth > 0
|
|
976
|
+
? Math.min(1, (screenEdgeLen * EDGE_LABEL_MAX_EDGE_FRACTION) / estWidth)
|
|
977
|
+
: 1;
|
|
926
978
|
return (
|
|
927
979
|
<div
|
|
928
980
|
key={lbl.id}
|
|
@@ -939,22 +991,26 @@ function Inner({ components, edges, throughlines, onSelect, onEdgeSelect, measur
|
|
|
939
991
|
// Center on the flow-space midpoint. Labels live in screen
|
|
940
992
|
// space (fixed size when zoomed out), so top-left anchoring
|
|
941
993
|
// would drift them right/down of the edge as zoom drops.
|
|
942
|
-
transform:
|
|
994
|
+
transform: `translate(-50%, -50%) scale(${scale})`,
|
|
995
|
+
transformOrigin: 'center center',
|
|
996
|
+
display: 'flex',
|
|
997
|
+
alignItems: 'center',
|
|
943
998
|
fontSize: 10,
|
|
999
|
+
lineHeight: 1,
|
|
944
1000
|
fontFamily: theme.fonts.monospace,
|
|
945
1001
|
fontWeight: 500,
|
|
946
1002
|
color,
|
|
947
1003
|
background: 'rgba(21,21,21,0.9)',
|
|
948
1004
|
border: verifiable ? `0.5px solid ${color}` : `1px dashed ${color}`,
|
|
949
1005
|
borderRadius: verifiable ? 4 : '10px 14px 12px 16px / 14px 10px 16px 12px',
|
|
950
|
-
padding: '
|
|
1006
|
+
padding: '3px 8px',
|
|
951
1007
|
cursor: 'pointer',
|
|
952
1008
|
pointerEvents: 'auto',
|
|
953
1009
|
opacity: lbl.dimmed ? 0.15 : 1,
|
|
954
1010
|
whiteSpace: 'nowrap',
|
|
955
1011
|
}}
|
|
956
1012
|
>
|
|
957
|
-
{
|
|
1013
|
+
{text}
|
|
958
1014
|
</div>
|
|
959
1015
|
);
|
|
960
1016
|
})}
|