@principal-ai/subsystems-react 0.51.2 → 0.51.4

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 (85) hide show
  1. package/dist/index.d.ts +5 -3
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +3 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/subsystem/C4Graph.d.ts +12 -1
  6. package/dist/subsystem/C4Graph.d.ts.map +1 -1
  7. package/dist/subsystem/C4Graph.js +115 -22
  8. package/dist/subsystem/C4Graph.js.map +1 -1
  9. package/dist/subsystem/C4NodeCard.d.ts +22 -22
  10. package/dist/subsystem/C4NodeCard.d.ts.map +1 -1
  11. package/dist/subsystem/C4NodeCard.js +56 -77
  12. package/dist/subsystem/C4NodeCard.js.map +1 -1
  13. package/dist/subsystem/SubsystemComponentGraph.d.ts.map +1 -1
  14. package/dist/subsystem/SubsystemComponentGraph.js +32 -13
  15. package/dist/subsystem/SubsystemComponentGraph.js.map +1 -1
  16. package/dist/subsystem/TrailsPanel.d.ts.map +1 -1
  17. package/dist/subsystem/TrailsPanel.js +8 -4
  18. package/dist/subsystem/TrailsPanel.js.map +1 -1
  19. package/dist/subsystem/c4.d.ts +24 -86
  20. package/dist/subsystem/c4.d.ts.map +1 -1
  21. package/dist/subsystem/c4.js +6 -285
  22. package/dist/subsystem/c4.js.map +1 -1
  23. package/dist/subsystem/c4Evidence.js +1 -1
  24. package/dist/subsystem/c4Evidence.js.map +1 -1
  25. package/dist/subsystem/model.d.ts +14 -0
  26. package/dist/subsystem/model.d.ts.map +1 -1
  27. package/dist/subsystem/model.js.map +1 -1
  28. package/dist/subsystem/nodes.d.ts.map +1 -1
  29. package/dist/subsystem/nodes.js +4 -2
  30. package/dist/subsystem/nodes.js.map +1 -1
  31. package/dist/subsystem/techIcons/bun.d.ts +11 -0
  32. package/dist/subsystem/techIcons/bun.d.ts.map +1 -0
  33. package/dist/subsystem/techIcons/bun.js +11 -0
  34. package/dist/subsystem/techIcons/bun.js.map +1 -0
  35. package/dist/subsystem/techIcons/index.d.ts +36 -0
  36. package/dist/subsystem/techIcons/index.d.ts.map +1 -0
  37. package/dist/subsystem/techIcons/index.js +55 -0
  38. package/dist/subsystem/techIcons/index.js.map +1 -0
  39. package/dist/subsystem/techIcons/node.d.ts +12 -0
  40. package/dist/subsystem/techIcons/node.d.ts.map +1 -0
  41. package/dist/subsystem/techIcons/node.js +39 -0
  42. package/dist/subsystem/techIcons/node.js.map +1 -0
  43. package/dist/subsystem/techIcons/react.d.ts +12 -0
  44. package/dist/subsystem/techIcons/react.d.ts.map +1 -0
  45. package/dist/subsystem/techIcons/react.js +19 -0
  46. package/dist/subsystem/techIcons/react.js.map +1 -0
  47. package/dist/utils/edgeLabel.d.ts +1 -1
  48. package/dist/utils/edgeLabel.d.ts.map +1 -1
  49. package/dist/utils/edgeLabel.js +1 -1
  50. package/dist/utils/edgeLabel.js.map +1 -1
  51. package/dist/utils/elkLayout.d.ts +18 -0
  52. package/dist/utils/elkLayout.d.ts.map +1 -1
  53. package/dist/utils/elkLayout.js +90 -9
  54. package/dist/utils/elkLayout.js.map +1 -1
  55. package/package.json +3 -3
  56. package/src/index.ts +4 -6
  57. package/src/stories/Subsystem/C4Graph/C4Container.stories.tsx +212 -0
  58. package/src/stories/Subsystem/C4Graph/C4NodeGallery.stories.tsx +20 -10
  59. package/src/stories/Subsystem/ComponentGraph/IssueOverlay.stories.tsx +4 -2
  60. package/src/stories/Subsystem/ComponentGraph/ProposedTrails.stories.tsx +21 -1
  61. package/src/subsystem/C4Graph.tsx +171 -19
  62. package/src/subsystem/C4NodeCard.test.ts +71 -77
  63. package/src/subsystem/C4NodeCard.tsx +65 -95
  64. package/src/subsystem/SubsystemComponentGraph.tsx +41 -13
  65. package/src/subsystem/TrailsPanel.tsx +10 -5
  66. package/src/subsystem/c4.ts +23 -357
  67. package/src/subsystem/c4Evidence.test.ts +1 -1
  68. package/src/subsystem/c4Evidence.ts +1 -1
  69. package/src/subsystem/model.ts +14 -0
  70. package/src/subsystem/nodes.tsx +5 -2
  71. package/src/subsystem/techIcons/bun.ts +10 -0
  72. package/src/subsystem/techIcons/index.tsx +73 -0
  73. package/src/subsystem/techIcons/node.ts +38 -0
  74. package/src/subsystem/techIcons/react.ts +18 -0
  75. package/src/subsystem/techIcons/techIcons.test.ts +39 -0
  76. package/src/utils/edgeLabel.ts +1 -1
  77. package/src/utils/elkLayout.test.ts +34 -0
  78. package/src/utils/elkLayout.ts +88 -9
  79. package/dist/stories/Subsystem/C4Graph/c4ProposedElements.fixture.d.ts +0 -493
  80. package/dist/stories/Subsystem/C4Graph/c4ProposedElements.fixture.d.ts.map +0 -1
  81. package/dist/stories/Subsystem/C4Graph/c4ProposedElements.fixture.js +0 -329
  82. package/dist/stories/Subsystem/C4Graph/c4ProposedElements.fixture.js.map +0 -1
  83. package/src/stories/Subsystem/C4Graph/ProposedElements.stories.tsx +0 -293
  84. package/src/stories/Subsystem/C4Graph/c4ProposedElements.fixture.ts +0 -366
  85. package/src/subsystem/c4.test.ts +0 -573
@@ -8,27 +8,27 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
8
  *
9
9
  * The encoding has one job: make confirmation state legible at a glance. A box
10
10
  * nobody has looked at must not read the same as a box a person signed off.
11
- * Kind says what the box is — shape, size, and a written tag — and everything
12
- * else in C4 notation (technology, description) is surfaced in the order a
13
- * reader wants it.
11
+ * Kind is carried by shape and size — plus an icon for a container's sort,
12
+ * application vs data-store — and C4 notation is surfaced in the order a reader
13
+ * wants it: technology on the top row, description under the label.
14
14
  */
15
15
  import { useTheme } from '@principal-ade/industry-theme';
16
- import { Cloud, Component, Container, UserRound } from 'lucide-react';
17
- import { describeConstructBreakdown } from './model';
16
+ import { AppWindow, Database } from 'lucide-react';
17
+ import { TechMark, technologyBrand } from './techIcons';
18
18
  /**
19
19
  * Card box for a container: a wide rectangle. A container carries four things
20
- * at once (tag, label, type + technology, and the notation gap it still has),
21
- * and a strip would force the last two to truncate.
20
+ * at once (technology row, label, description, and the notation gap it still
21
+ * has), and a strip would force the last two to wrap hard.
22
22
  */
23
- export const NODE_W = 210;
24
- export const NODE_H = 138;
23
+ export const NODE_W = 250;
24
+ export const NODE_H = 150;
25
25
  /**
26
26
  * A component is a proper square — equal sides, and visibly smaller than the
27
27
  * container it sits inside. Square-vs-rectangle is the clearest signal that
28
28
  * these are different C4 levels, and it survives grayscale and colour-blind
29
29
  * reading where a border-weight difference alone does not.
30
30
  */
31
- export const COMPONENT_SIZE = 132;
31
+ export const COMPONENT_SIZE = 140;
32
32
  /**
33
33
  * Per-level box size. The graph lays out against these, so a square component
34
34
  * and a rectangular container do not collide at a shared nominal width.
@@ -39,12 +39,10 @@ export function nodeSize(node) {
39
39
  : { width: NODE_W, height: NODE_H };
40
40
  }
41
41
  /**
42
- * Fixed slot heights, so rows line up across every card regardless of which
43
- * optional fields are present. Without these a card missing its notation-gap
44
- * marker is two lines shorter and a row of cards reads as ragged.
42
+ * Fixed label slot, so the description below sits at the same y on every card
43
+ * even when a label is one line rather than two.
45
44
  */
46
45
  const LABEL_SLOT_H = 40;
47
- const GAP_SLOT_H = 18;
48
46
  /**
49
47
  * Border style for one node: colour, dash and weight, from confirmation state
50
48
  * and level.
@@ -75,30 +73,17 @@ export function nodeStyle(node, theme, selected = false) {
75
73
  // Dashed — an agent asked; a human has not answered.
76
74
  return { color: theme.colors.warning ?? '#e8a33a', dash: 'dashed', width: weight };
77
75
  case 'rejected':
78
- // Should never be drawn (buildC4Model drops it); belt-and-braces.
76
+ // Should never be drawn (a rejected element is not projected); belt-and-braces.
79
77
  return { color: muted, dash: 'dotted', width: 1 };
80
78
  }
81
79
  }
82
- function baseName(path) {
83
- const parts = path.split('/').filter(Boolean);
84
- return parts[parts.length - 1] ?? path;
85
- }
86
80
  /**
87
- * The kind + technology line under the label.
88
- *
89
- * The container kind moved up to the icon row (see `nodeTypeLabel`), so it is
90
- * not repeated here. Technology is the remaining confirmed attribute; without
91
- * one we fall back to what the document told us.
81
+ * The line under the label: the element's one-line responsibility, which C4
82
+ * asks every element to carry. No fallback — when nothing is stated, the
83
+ * notation-gap row says so rather than the card inventing a summary.
92
84
  */
93
85
  export function nodeSubtitle(node) {
94
- if (node.technology)
95
- return node.technology;
96
- // No stated technology: fall back to what the document told us.
97
- if (node.kind === 'component') {
98
- return `${node.component?.construct ?? 'code'}${node.component?.file ? ` · ${baseName(node.component.file)}` : ''}`;
99
- }
100
- const count = node.members.length;
101
- return `${describeConstructBreakdown(node.constructs)}${count > 0 ? ` · ${count} component${count === 1 ? '' : 's'}` : ''}`;
86
+ return node.description ?? '';
102
87
  }
103
88
  /**
104
89
  * What the box IS — its C4 kind. An accepted container is still a container;
@@ -110,30 +95,27 @@ export function nodeTag(node) {
110
95
  return node.kind;
111
96
  }
112
97
  /**
113
- * The glyph for the C4 kind, shown in place of a word. The kind is already
114
- * carried by the box shape (see `nodeShape`); the icon lets the top row spend
115
- * its one piece of text on the container's kind instead of repeating
116
- * "container".
98
+ * The icon on the top row: a container's sort, **application vs data-store**.
99
+ *
100
+ * The C4 kind itself does not need a glyph — the box shape already carries it
101
+ * (square vs rectangle vs pill), and the row's one text slot is worth more
102
+ * spent on the technology. Only containers have a C4-recognised split, so the
103
+ * other three kinds return nothing.
117
104
  */
118
105
  export function nodeKindIcon(node) {
119
- switch (node.kind) {
120
- case 'container':
121
- return Container;
122
- case 'component':
123
- return Component;
124
- case 'external-system':
125
- return Cloud;
126
- case 'person':
127
- return UserRound;
128
- }
106
+ if (node.kind !== 'container')
107
+ return undefined;
108
+ return node.containerKind === 'data-store' ? Database : AppWindow;
129
109
  }
130
110
  /**
131
- * The word beside the kind icon: what sort of container this is — C4's two,
132
- * `application` or `data-store`. The other three kinds have no such subtype,
133
- * so they show nothing; the icon and shape are the whole label.
111
+ * The text on the top row: the technology the box is built with (Bun, React,
112
+ * Postgres…). Falls back to the container kind / C4 kind when no technology is
113
+ * stated, so the row is never blank.
134
114
  */
135
- export function nodeTypeLabel(node) {
136
- return node.kind === 'container' ? node.containerKind : undefined;
115
+ export function nodeTopLabel(node) {
116
+ if (node.technology)
117
+ return node.technology;
118
+ return node.kind === 'container' ? (node.containerKind ?? 'container') : node.kind;
137
119
  }
138
120
  /**
139
121
  * Shape cue for the C4 kind, independent of colour and dash — both of which
@@ -188,10 +170,14 @@ export function C4NodeCard({ node, selected = false, handles, onClick }) {
188
170
  const muted = theme.colors.textMuted ?? theme.colors.textSecondary;
189
171
  const style = nodeStyle(node, theme, selected);
190
172
  const shape = nodeShape(node);
191
- const missing = nodeMissing(node);
192
173
  const Icon = nodeKindIcon(node);
193
- const typeLabel = nodeTypeLabel(node);
174
+ const brand = technologyBrand(node.technology);
175
+ const topLabel = nodeTopLabel(node);
176
+ const subtitle = nodeSubtitle(node);
194
177
  const size = nodeSize(node);
178
+ // A pill (a person) has no straight left edge, so left-aligned text reads as
179
+ // spilling out of the oval. Centre the text and inset it from the curve.
180
+ const centered = shape.kind === 'pill';
195
181
  return (_jsxs("div", { onClick: onClick, style: {
196
182
  width: size.width,
197
183
  minHeight: size.height,
@@ -203,7 +189,7 @@ export function C4NodeCard({ node, selected = false, handles, onClick }) {
203
189
  // height on every card. In a graph grid that makes the row unscannable.
204
190
  justifyContent: 'flex-start',
205
191
  gap: 3,
206
- padding: '10px 12px',
192
+ padding: centered ? '10px 30px' : '10px 12px',
207
193
  borderRadius: shape.radius,
208
194
  background: theme.colors.backgroundSecondary ?? theme.colors.background,
209
195
  border: `${style.width} ${style.dash} ${style.color}`,
@@ -213,20 +199,21 @@ export function C4NodeCard({ node, selected = false, handles, onClick }) {
213
199
  }, children: [_jsxs("span", { style: {
214
200
  display: 'flex',
215
201
  alignItems: 'center',
202
+ justifyContent: centered ? 'center' : 'space-between',
216
203
  gap: 6,
217
204
  fontFamily: theme.fonts.monospace,
218
205
  fontSize: theme.fontSizes[0],
219
- color: style.color,
206
+ color: muted,
220
207
  letterSpacing: 0.5,
221
208
  textTransform: 'uppercase',
222
209
  minWidth: 0,
223
- }, children: [_jsx("span", { title: nodeTag(node), "aria-label": nodeTag(node), style: { display: 'inline-flex', flexShrink: 0 }, children: _jsx(Icon, { size: 13, strokeWidth: 2.25 }) }), typeLabel && (_jsx("span", { style: {
224
- fontWeight: 600,
225
- whiteSpace: 'nowrap',
226
- overflow: 'hidden',
227
- textOverflow: 'ellipsis',
228
- minWidth: 0,
229
- }, children: typeLabel }))] }), _jsx("span", { style: {
210
+ }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: 6, minWidth: 0 }, children: [brand && _jsx(TechMark, { brand: brand }), _jsx("span", { style: {
211
+ fontWeight: 600,
212
+ whiteSpace: 'nowrap',
213
+ overflow: 'hidden',
214
+ textOverflow: 'ellipsis',
215
+ minWidth: 0,
216
+ }, children: topLabel })] }), Icon && (_jsx("span", { title: node.containerKind ?? node.kind, "aria-label": node.containerKind ?? node.kind, style: { display: 'inline-flex', flexShrink: 0, color: style.color }, children: _jsx(Icon, { size: 13, strokeWidth: 2.25 }) }))] }), _jsx("span", { style: {
230
217
  fontWeight: 600,
231
218
  fontSize: theme.fontSizes[2],
232
219
  color: theme.colors.text,
@@ -236,23 +223,15 @@ export function C4NodeCard({ node, selected = false, handles, onClick }) {
236
223
  WebkitLineClamp: 2,
237
224
  WebkitBoxOrient: 'vertical',
238
225
  overflow: 'hidden',
239
- }, title: node.label, children: node.label }), _jsx("span", { style: {
226
+ textAlign: centered ? 'center' : 'left',
227
+ }, title: node.label, children: node.label }), subtitle && (_jsx("span", { style: {
240
228
  fontFamily: theme.fonts.monospace,
241
229
  fontSize: theme.fontSizes[0],
242
230
  color: muted,
243
- whiteSpace: 'nowrap',
244
- overflow: 'hidden',
245
- textOverflow: 'ellipsis',
246
- }, title: node.description ?? node.members.join(', '), children: nodeSubtitle(node) }), _jsx("span", { style: { height: GAP_SLOT_H }, "aria-hidden": "true" }), missing.length > 0 && (_jsxs("span", { title: `C4 requires a ${missing.join(' and a ')} on every container`, style: {
247
- fontFamily: theme.fonts.monospace,
248
- fontSize: theme.fontSizes[0],
249
- color: theme.colors.warning ?? '#e8a33a',
250
- lineHeight: 1.3,
251
- height: GAP_SLOT_H,
252
- display: '-webkit-box',
253
- WebkitLineClamp: 2,
254
- WebkitBoxOrient: 'vertical',
255
- overflow: 'hidden',
256
- }, children: ["needs ", missing.join(' + ')] })), handles] }));
231
+ lineHeight: 1.35,
232
+ whiteSpace: 'normal',
233
+ overflowWrap: 'anywhere',
234
+ textAlign: centered ? 'center' : 'left',
235
+ }, children: subtitle })), handles] }));
257
236
  }
258
237
  //# sourceMappingURL=C4NodeCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"C4NodeCard.js","sourceRoot":"","sources":["../../src/subsystem/C4NodeCard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"C4NodeCard.js","sourceRoot":"","sources":["../../src/subsystem/C4NodeCard.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SubsystemComponentGraph.d.ts","sourceRoot":"","sources":["../../src/subsystem/SubsystemComponentGraph.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SubsystemComponentGraph.d.ts","sourceRoot":"","sources":["../../src/subsystem/SubsystemComponentGraph.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAiC,SAAS,EAAE,MAAM,OAAO,CAAC;AAkBtE,OAAO,EAUL,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EAEvB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAG9B,KAAK,cAAc,EACpB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,iDAAiD,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAOL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AAKrB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAY3E,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,cAAc,CAAC;IACtB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qFAAqF;IACrF,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACpE;;;OAGG;IACH,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM,GAAG,IAAI,CAAC;IAC3D,0EAA0E;IAC1E,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClE;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAgED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACzD;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,6EAA6E;IAC7E,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtD;kFAC8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAChC;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wDAAwD;IACxD,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,0EAA0E;IAC1E,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B;;;OAGG;IACH,UAAU,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC3C;;;;OAIG;IACH,WAAW,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC/C,6DAA6D;IAC7D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,gFAAgF;IAChF,uBAAuB,CAAC,EAAE,SAAS,CAAC;IACpC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,sBAAsB,CAAC;IAC5C;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,0CAA0C;IAC1C,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,yEAAyE;IACzE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,wBAAwB,KAAK,SAAS,CAAC;IAChF;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,SAAS,CAAC;IAC3D;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,2DAA2D;IAC3D,qBAAqB,CAAC,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAC1D;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,oBAAoB,CAAC;KAC3B,KAAK,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,gBAAgB,GAAG,IAAI,CAAC;IACjE;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAk9FD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,+BA+D1E"}
@@ -739,21 +739,18 @@ function Inner({ components, trails, graphifyRelations, orderByLine, initialTrai
739
739
  const stepIssueBadgeByEdgeId = useMemo(() => {
740
740
  const map = new Map();
741
741
  if (!issues?.length || !trails?.length) {
742
- console.log('[stepIssueBadge] early return: issues=', issues?.length, 'trails=', trails?.length);
743
742
  return map;
744
743
  }
745
744
  for (const issue of issues) {
746
745
  if (issue.kind !== 'step_unconfirmed' && issue.kind !== 'step_stale')
747
746
  continue;
748
747
  const stepInfo = issueStep(issue);
749
- console.log('[stepIssueBadge] issue', issue.id, 'kind=', issue.kind, 'stepInfo=', stepInfo);
750
748
  if (!stepInfo)
751
749
  continue;
752
750
  const step = stepInfo.trail.steps[stepInfo.stepIndex];
753
751
  if (!step)
754
752
  continue;
755
753
  const edgeId = trailStepGraphEdgeId(step);
756
- console.log('[stepIssueBadge] -> edgeId=', edgeId);
757
754
  const prev = map.get(edgeId);
758
755
  // step_stale is worse than step_unconfirmed
759
756
  const isWorse = issue.kind === 'step_stale' && prev?.kind !== 'step_stale';
@@ -763,9 +760,24 @@ function Inner({ components, trails, graphifyRelations, orderByLine, initialTrai
763
760
  count: (prev?.count ?? 0) + 1,
764
761
  });
765
762
  }
766
- console.log('[stepIssueBadge] final map size=', map.size);
767
763
  return map;
768
764
  }, [issues, trails, issueStep]);
765
+ // Edges backed by a step that ITSELF declares `proposed` — a planned seam
766
+ // between otherwise-real components. Distinct from a proposed ENDPOINT
767
+ // (the node is the placeholder there, and draws its own dashed border):
768
+ // here the seam is the claim that is not real yet, so the edge label draws
769
+ // dashed. Proposed steps are never verified, so this never competes with
770
+ // the step-issue badge.
771
+ const proposedEdgeIds = useMemo(() => {
772
+ const set = new Set();
773
+ for (const trail of trails ?? []) {
774
+ for (const step of trail.steps) {
775
+ if (step.proposed)
776
+ set.add(trailStepGraphEdgeId(step));
777
+ }
778
+ }
779
+ return set;
780
+ }, [trails]);
769
781
  // Expanded verification layers in the diagnostics list. When any layer with
770
782
  // findings is expanded, the canvas dims everything that layer does not
771
783
  // implicate (see `issueFocus`). The list publishes this through
@@ -1074,6 +1086,11 @@ function Inner({ components, trails, graphifyRelations, orderByLine, initialTrai
1074
1086
  }, [xyflowNodesBase, openFile, selected, focusNodeIds, openedNodeIds, brightNodeIds, previewNodeIds, issueFocusNodeIds, issueBadgeByAlias, regionIssueByNodeId, boundaryColors]);
1075
1087
  const baseNodesKey = useMemo(() => nodes.map((n) => n.id).sort().join(','), [nodes]);
1076
1088
  const baseEdgesKey = useMemo(() => convertedEdges.map((e) => e.id).sort().join(','), [convertedEdges]);
1089
+ // Stamp `proposedStep` onto edge data so the SVG edge itself (not just its
1090
+ // label) draws dashed when a backing trail step declares itself proposed.
1091
+ const proposedStampedEdges = useMemo(() => baseEdges.map((e) => proposedEdgeIds.has(e.id)
1092
+ ? { ...e, data: { ...e.data, proposedStep: true } }
1093
+ : e), [baseEdges, proposedEdgeIds]);
1077
1094
  const dispEdges = useMemo(() => {
1078
1095
  const paint = (e, dimmed) => {
1079
1096
  const markerEnd = e.markerEnd;
@@ -1098,7 +1115,7 @@ function Inner({ components, trails, graphifyRelations, orderByLine, initialTrai
1098
1115
  return isTrailMechanism(mechanism);
1099
1116
  };
1100
1117
  if (openedEdgeIds || focusEdgeIds || previewEdgeIds || issueFocusEdgeIds) {
1101
- return baseEdges.map((e) => {
1118
+ return proposedStampedEdges.map((e) => {
1102
1119
  const vis = flowElementVisibility({
1103
1120
  inOpened: openedEdgeIds?.has(e.id) === true,
1104
1121
  inSelected: focusEdgeIds?.has(e.id) === true,
@@ -1112,13 +1129,13 @@ function Inner({ components, trails, graphifyRelations, orderByLine, initialTrai
1112
1129
  });
1113
1130
  }
1114
1131
  if (selectedEdgeId) {
1115
- return baseEdges.map((e) => ({
1132
+ return proposedStampedEdges.map((e) => ({
1116
1133
  ...paint(e, e.id !== selectedEdgeId),
1117
1134
  hidden: !edgeInView(e),
1118
1135
  }));
1119
1136
  }
1120
- return baseEdges.map((e) => ({ ...e, hidden: !edgeInView(e) }));
1121
- }, [baseEdges, selectedEdgeId, openedEdgeIds, focusEdgeIds, previewEdgeIds, issueFocusEdgeIds, resolvedEdgeView]);
1137
+ return proposedStampedEdges.map((e) => ({ ...e, hidden: !edgeInView(e) }));
1138
+ }, [proposedStampedEdges, selectedEdgeId, openedEdgeIds, focusEdgeIds, previewEdgeIds, issueFocusEdgeIds, resolvedEdgeView]);
1122
1139
  const onNodesChange = useCallback((changes) => {
1123
1140
  // Capture dimension changes (React Flow's measurement callback).
1124
1141
  // Group parents are ELK-sized — ignore their measurements.
@@ -1935,7 +1952,7 @@ function Inner({ components, trails, graphifyRelations, orderByLine, initialTrai
1935
1952
  .map((e) => {
1936
1953
  const d = e.data;
1937
1954
  const stepIssue = stepIssueBadgeByEdgeId.get(e.id);
1938
- console.log('[edgeLabels] edge', e.id, 'stepIssue=', stepIssue);
1955
+ const proposed = proposedEdgeIds.has(e.id);
1939
1956
  return {
1940
1957
  id: e.id,
1941
1958
  mechanism: d?.mechanism ?? 'uses',
@@ -1946,11 +1963,11 @@ function Inner({ components, trails, graphifyRelations, orderByLine, initialTrai
1946
1963
  pathLength: d?.pathLength ?? 0,
1947
1964
  stepNos: selectedFlowStepNos?.get(e.id),
1948
1965
  stepIssue,
1966
+ proposed,
1949
1967
  };
1950
1968
  });
1951
- console.log('[edgeLabels] total labels=', labels.length, 'with stepIssue=', labels.filter(l => l.stepIssue).length);
1952
1969
  return labels;
1953
- }, [dispEdges, selectedFlowStepNos, stepIssueBadgeByEdgeId]);
1970
+ }, [dispEdges, selectedFlowStepNos, stepIssueBadgeByEdgeId, proposedEdgeIds]);
1954
1971
  // Unique source files across components → sidebar file trees.
1955
1972
  const treeFilePaths = treeFiles;
1956
1973
  // The hovered node's file (null when not hovering / file-less component).
@@ -2136,7 +2153,9 @@ function Inner({ components, trails, graphifyRelations, orderByLine, initialTrai
2136
2153
  position: 'absolute',
2137
2154
  inset: 0,
2138
2155
  borderRadius: 4,
2139
- border: `0.5px solid ${color}`,
2156
+ border: lbl.proposed
2157
+ ? `1.5px dashed ${color}`
2158
+ : `0.5px solid ${color}`,
2140
2159
  background: theme.colors.backgroundSecondary ?? theme.colors.background,
2141
2160
  pointerEvents: 'none',
2142
2161
  } })) : (_jsx("svg", { "aria-hidden": true, width: EDGE_LABEL_WIDTH, height: EDGE_LABEL_HEIGHT + EDGE_LABEL_CLOUD_EXTRA_TOP, viewBox: `0 0 ${EDGE_LABEL_WIDTH} ${EDGE_LABEL_HEIGHT + EDGE_LABEL_CLOUD_EXTRA_TOP}`, style: {
@@ -2144,7 +2163,7 @@ function Inner({ components, trails, graphifyRelations, orderByLine, initialTrai
2144
2163
  left: 0,
2145
2164
  top: -EDGE_LABEL_CLOUD_EXTRA_TOP,
2146
2165
  pointerEvents: 'none',
2147
- }, children: _jsx("path", { d: EDGE_LABEL_CLOUD_PATH, fill: theme.colors.backgroundSecondary ?? theme.colors.background, stroke: hexWithAlpha(color, 0.75), strokeWidth: 1.2, strokeLinejoin: "round" }) })), _jsx("span", { style: {
2166
+ }, children: _jsx("path", { d: EDGE_LABEL_CLOUD_PATH, fill: theme.colors.backgroundSecondary ?? theme.colors.background, stroke: hexWithAlpha(color, 0.75), strokeWidth: 1.2, strokeLinejoin: "round", strokeDasharray: lbl.proposed ? '4 3' : undefined }) })), _jsx("span", { style: {
2148
2167
  position: 'relative',
2149
2168
  display: 'block',
2150
2169
  maxWidth: '100%',