@principal-ai/subsystems-react 0.37.4 → 0.37.6

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 (41) hide show
  1. package/dist/index.d.ts +2 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/stories/Subsystem/C4Graph/c4Fixture.d.ts +3 -0
  6. package/dist/stories/Subsystem/C4Graph/c4Fixture.d.ts.map +1 -0
  7. package/dist/stories/Subsystem/C4Graph/c4Fixture.js +2 -0
  8. package/dist/stories/Subsystem/C4Graph/c4Fixture.js.map +1 -0
  9. package/dist/subsystem/C4Graph.d.ts +22 -0
  10. package/dist/subsystem/C4Graph.d.ts.map +1 -0
  11. package/dist/subsystem/C4Graph.js +305 -0
  12. package/dist/subsystem/C4Graph.js.map +1 -0
  13. package/dist/subsystem/ConstructsCatalog.d.ts.map +1 -1
  14. package/dist/subsystem/ConstructsCatalog.js +8 -4
  15. package/dist/subsystem/ConstructsCatalog.js.map +1 -1
  16. package/dist/subsystem/WalkthroughsPanel.d.ts +2 -0
  17. package/dist/subsystem/WalkthroughsPanel.d.ts.map +1 -1
  18. package/dist/subsystem/WalkthroughsPanel.js +114 -48
  19. package/dist/subsystem/WalkthroughsPanel.js.map +1 -1
  20. package/dist/subsystem/model.js +6 -6
  21. package/dist/subsystem/toC4.d.ts +95 -0
  22. package/dist/subsystem/toC4.d.ts.map +1 -0
  23. package/dist/subsystem/toC4.js +196 -0
  24. package/dist/subsystem/toC4.js.map +1 -0
  25. package/dist/subsystem/walkthroughBrief.d.ts +18 -0
  26. package/dist/subsystem/walkthroughBrief.d.ts.map +1 -0
  27. package/dist/subsystem/walkthroughBrief.js +34 -0
  28. package/dist/subsystem/walkthroughBrief.js.map +1 -0
  29. package/package.json +1 -1
  30. package/src/index.ts +6 -1
  31. package/src/stories/Subsystem/C4Graph/C4Container.stories.tsx +104 -0
  32. package/src/stories/Subsystem/C4Graph/c4Fixture.ts +6 -0
  33. package/src/subsystem/C4Graph.tsx +465 -0
  34. package/src/subsystem/ConstructsCatalog.tsx +25 -14
  35. package/src/subsystem/WalkthroughsPanel.test.tsx +146 -0
  36. package/src/subsystem/WalkthroughsPanel.tsx +163 -60
  37. package/src/subsystem/model.ts +6 -6
  38. package/src/subsystem/toC4.test.ts +121 -0
  39. package/src/subsystem/toC4.ts +277 -0
  40. package/src/subsystem/walkthroughBrief.test.ts +57 -0
  41. package/src/subsystem/walkthroughBrief.ts +40 -0
@@ -12,10 +12,15 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
12
12
  */
13
13
  import { useCallback, useEffect, useRef, useState } from 'react';
14
14
  import { useTheme } from '@principal-ade/industry-theme';
15
- import { ChevronDown, GripVertical, Pause, Play } from 'lucide-react';
15
+ import { Check, ChevronDown, Copy, GripVertical, Pause, Play } from 'lucide-react';
16
16
  import { PROPOSED_COLOR, reorderTargetIndex, reorderWalkthroughs, walkthroughStepGraphEdgeId, } from './model';
17
+ import { buildStepBrief } from './walkthroughBrief';
17
18
  /** Pause (ms) between steps when a walkthrough autoplays. */
18
19
  export const WALKTHROUGH_PLAY_PAUSE_MS = 2500;
20
+ /** How long a step's copy button flashes its "copied" checkmark (ms). */
21
+ export const STEP_COPY_FEEDBACK_MS = 2000;
22
+ /** Square size (px) of a walkthrough header's Play/Collapse control. */
23
+ const WALKTHROUGH_CONTROL_SIZE = 34;
19
24
  /** One collapsible walkthrough in the sidebar's flows panel. Clicking the
20
25
  * title: closed → open + select; open with a step selected → select the whole
21
26
  * flow (deselect the step, stay open); open with the whole flow selected →
@@ -35,6 +40,13 @@ function WalkthroughFlow({ walkthrough, collapsed, active, onToggleCollapsed, on
35
40
  const [gripHover, setGripHover] = useState(false);
36
41
  const [hoveredStep, setHoveredStep] = useState(null);
37
42
  const stepButtonRefs = useRef([]);
43
+ // Per-step copy affordance: revealed while a row is hovered or holds focus.
44
+ // `focusedStep` tracks focus-within (button or its copy control) so the icon
45
+ // stays put while the pointer or focus moves between them.
46
+ const [focusedStep, setFocusedStep] = useState(null);
47
+ const [copyHoverStep, setCopyHoverStep] = useState(null);
48
+ const [copiedStep, setCopiedStep] = useState(null);
49
+ const copyTimerRef = useRef(null);
38
50
  // Autoplay: stepping through the flow's steps with a pause between each.
39
51
  const [playing, setPlaying] = useState(false);
40
52
  const playTimerRef = useRef(null);
@@ -48,6 +60,30 @@ function WalkthroughFlow({ walkthrough, collapsed, active, onToggleCollapsed, on
48
60
  // Clear any pending timer on unmount.
49
61
  // eslint-disable-next-line react-hooks/exhaustive-deps
50
62
  useEffect(() => () => stopPlaying(), []);
63
+ const copyStep = useCallback((stepIndex) => {
64
+ const brief = buildStepBrief(walkthrough, stepIndex);
65
+ if (brief.length === 0)
66
+ return;
67
+ const clipboard = navigator.clipboard;
68
+ if (!clipboard)
69
+ return;
70
+ void clipboard
71
+ .writeText(brief)
72
+ .then(() => {
73
+ setCopiedStep(stepIndex);
74
+ if (copyTimerRef.current != null) {
75
+ window.clearTimeout(copyTimerRef.current);
76
+ }
77
+ copyTimerRef.current = window.setTimeout(() => setCopiedStep(null), STEP_COPY_FEEDBACK_MS);
78
+ })
79
+ .catch(() => {
80
+ // best-effort — show nothing when the clipboard is unavailable
81
+ });
82
+ }, [walkthrough]);
83
+ useEffect(() => () => {
84
+ if (copyTimerRef.current != null)
85
+ window.clearTimeout(copyTimerRef.current);
86
+ }, []);
51
87
  // Native HTML5 drag suppresses mouse events, so a row hovered when the drag
52
88
  // began never gets its mouseleave — its hover styling would stick after the
53
89
  // drop. Reset every row's hover whenever a drag starts or ends.
@@ -110,7 +146,8 @@ function WalkthroughFlow({ walkthrough, collapsed, active, onToggleCollapsed, on
110
146
  display: 'flex',
111
147
  alignItems: 'center',
112
148
  gap: 4,
113
- padding: '0 16px',
149
+ height: WALKTHROUGH_CONTROL_SIZE,
150
+ padding: '0 0 0 16px',
114
151
  background: wholeFlowActive || headerHover ? hoverBg : 'transparent',
115
152
  transition: 'background 120ms ease',
116
153
  }, children: [_jsx("button", { type: "button", onClick: () => {
@@ -133,7 +170,7 @@ function WalkthroughFlow({ walkthrough, collapsed, active, onToggleCollapsed, on
133
170
  display: 'flex',
134
171
  alignItems: 'center',
135
172
  minWidth: 0,
136
- padding: '10px 0',
173
+ padding: 0,
137
174
  border: 'none',
138
175
  background: 'transparent',
139
176
  textAlign: 'left',
@@ -154,11 +191,11 @@ function WalkthroughFlow({ walkthrough, collapsed, active, onToggleCollapsed, on
154
191
  alignItems: 'center',
155
192
  justifyContent: 'center',
156
193
  flexShrink: 0,
157
- width: 22,
158
- height: 22,
194
+ alignSelf: 'stretch',
195
+ width: WALKTHROUGH_CONTROL_SIZE,
159
196
  padding: 0,
160
197
  border: 'none',
161
- borderRadius: 4,
198
+ borderRadius: 0,
162
199
  background: playing || playHover ? theme.colors.border : 'transparent',
163
200
  color: playing || playHover ? theme.colors.text : muted,
164
201
  cursor: 'pointer',
@@ -173,11 +210,11 @@ function WalkthroughFlow({ walkthrough, collapsed, active, onToggleCollapsed, on
173
210
  alignItems: 'center',
174
211
  justifyContent: 'center',
175
212
  flexShrink: 0,
176
- width: 22,
177
- height: 22,
213
+ alignSelf: 'stretch',
214
+ width: WALKTHROUGH_CONTROL_SIZE,
178
215
  padding: 0,
179
216
  border: 'none',
180
- borderRadius: 4,
217
+ borderRadius: 0,
181
218
  background: collapseHover ? theme.colors.border : 'transparent',
182
219
  color: collapseHover ? theme.colors.text : muted,
183
220
  cursor: 'pointer',
@@ -189,7 +226,7 @@ function WalkthroughFlow({ walkthrough, collapsed, active, onToggleCollapsed, on
189
226
  display: 'inline-flex',
190
227
  alignItems: 'center',
191
228
  flexShrink: 0,
192
- marginRight: -8,
229
+ marginRight: 8,
193
230
  padding: '2px 0',
194
231
  color: gripHover || reorder.isDragging ? theme.colors.text : muted,
195
232
  cursor: reorder.isDragging ? 'grabbing' : 'grab',
@@ -200,45 +237,74 @@ function WalkthroughFlow({ walkthrough, collapsed, active, onToggleCollapsed, on
200
237
  }, children: walkthrough.steps.map((step, i) => {
201
238
  const stepActive = active !== null && active.stepIndex === i;
202
239
  const proposed = stepProposed(step.from, step.to);
203
- return (_jsxs("button", { ref: (el) => {
204
- stepButtonRefs.current[i] = el;
205
- }, type: "button", title: proposed ? 'Step touches a proposed component' : undefined, onMouseEnter: () => {
206
- setHoveredStep(i);
207
- onHoverStep(walkthrough, i);
208
- }, onClick: () => onFocusStep(walkthrough, i), style: {
209
- display: 'flex',
210
- alignItems: 'center',
211
- gap: 8,
212
- minWidth: 0,
213
- padding: '8px 8px 8px 17px',
214
- textAlign: 'left',
215
- borderRadius: 0,
216
- border: 'none',
217
- outline: 'none',
218
- background: stepActive || hoveredStep === i ? hoverBg : 'transparent',
219
- cursor: 'pointer',
220
- transition: 'background 120ms ease',
221
- }, children: [_jsx("span", { style: {
222
- flexShrink: 0,
223
- width: 14,
224
- fontSize: theme.fontSizes[0],
225
- fontFamily: theme.fonts.monospace,
226
- fontWeight: proposed ? 700 : undefined,
227
- color: proposed
228
- ? PROPOSED_COLOR
229
- : stepActive
230
- ? theme.colors.text
231
- : muted,
232
- }, children: i + 1 }), _jsx("span", { style: {
233
- flex: 1,
240
+ const revealed = stepActive || hoveredStep === i || focusedStep === i || copiedStep === i;
241
+ const copied = copiedStep === i;
242
+ const copyHovered = copyHoverStep === i;
243
+ return (_jsxs("div", { style: { position: 'relative' }, onFocus: () => setFocusedStep(i), onBlur: (e) => {
244
+ if (!e.currentTarget.contains(e.relatedTarget)) {
245
+ setFocusedStep((cur) => (cur === i ? null : cur));
246
+ }
247
+ }, children: [_jsxs("button", { ref: (el) => {
248
+ stepButtonRefs.current[i] = el;
249
+ }, type: "button", title: proposed ? 'Step touches a proposed component' : undefined, onMouseEnter: () => {
250
+ setHoveredStep(i);
251
+ onHoverStep(walkthrough, i);
252
+ }, onClick: () => onFocusStep(walkthrough, i), style: {
253
+ display: 'flex',
254
+ alignItems: 'center',
255
+ gap: 8,
234
256
  minWidth: 0,
235
- overflow: 'hidden',
236
- textOverflow: 'ellipsis',
237
- whiteSpace: 'nowrap',
238
- fontSize: theme.fontSizes[1],
239
- fontFamily: theme.fonts.monospace,
240
- color: proposed ? PROPOSED_COLOR : theme.colors.text,
241
- }, children: step.symbol })] }, `${walkthroughStepGraphEdgeId(step)}-${i}`));
257
+ width: '100%',
258
+ padding: '8px 36px 8px 17px',
259
+ textAlign: 'left',
260
+ borderRadius: 0,
261
+ border: 'none',
262
+ outline: 'none',
263
+ background: stepActive || hoveredStep === i ? hoverBg : 'transparent',
264
+ cursor: 'pointer',
265
+ transition: 'background 120ms ease',
266
+ }, children: [_jsx("span", { style: {
267
+ flexShrink: 0,
268
+ width: 14,
269
+ fontSize: theme.fontSizes[0],
270
+ fontFamily: theme.fonts.monospace,
271
+ fontWeight: proposed ? 700 : undefined,
272
+ color: proposed
273
+ ? PROPOSED_COLOR
274
+ : stepActive
275
+ ? theme.colors.text
276
+ : muted,
277
+ }, children: i + 1 }), _jsx("span", { style: {
278
+ flex: 1,
279
+ minWidth: 0,
280
+ overflow: 'hidden',
281
+ textOverflow: 'ellipsis',
282
+ whiteSpace: 'nowrap',
283
+ fontSize: theme.fontSizes[1],
284
+ fontFamily: theme.fonts.monospace,
285
+ color: proposed ? PROPOSED_COLOR : theme.colors.text,
286
+ }, children: step.symbol })] }), revealed && (_jsx("button", { type: "button", "aria-label": `Copy step ${i + 1} of ${walkthrough.title} for an agent`, title: copied ? 'Copied' : 'Copy this step for an agent', onMouseDown: (e) => e.preventDefault(), onMouseEnter: () => setCopyHoverStep(i), onMouseLeave: () => setCopyHoverStep((cur) => (cur === i ? null : cur)), onClick: () => copyStep(i), style: {
287
+ position: 'absolute',
288
+ right: 0,
289
+ top: 0,
290
+ bottom: 0,
291
+ display: 'inline-flex',
292
+ alignItems: 'center',
293
+ justifyContent: 'center',
294
+ width: 'auto',
295
+ aspectRatio: '1 / 1',
296
+ padding: 0,
297
+ border: 'none',
298
+ borderRadius: 0,
299
+ background: copied
300
+ ? 'rgba(16,185,129,0.12)'
301
+ : copyHovered
302
+ ? theme.colors.border
303
+ : 'transparent',
304
+ color: copied ? '#10b981' : copyHovered ? theme.colors.text : muted,
305
+ cursor: 'pointer',
306
+ transition: 'background 120ms ease, color 120ms ease',
307
+ }, children: copied ? (_jsx(Check, { size: 12, strokeWidth: 2 })) : (_jsx(Copy, { size: 12, strokeWidth: 2 })) }))] }, `${walkthroughStepGraphEdgeId(step)}-${i}`));
242
308
  }) }))] }));
243
309
  }
244
310
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"WalkthroughsPanel.js","sourceRoot":"","sources":["../../src/subsystem/WalkthroughsPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WalkthroughsPanel.js","sourceRoot":"","sources":["../../src/subsystem/WalkthroughsPanel.tsx"],"names":[],"mappings":"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"}
@@ -534,17 +534,17 @@ export function isWalkthroughMechanism(mechanism) {
534
534
  return WALKTHROUGH_MECHANISM_SET.has(mechanism);
535
535
  }
536
536
  export const MECHANISM_COLOR = {
537
- calls: '#4ec9b0',
537
+ calls: '#22c55e',
538
538
  extends: '#b48ead',
539
539
  inherits: '#9b6fd0',
540
540
  implements: '#c586c0',
541
541
  mixes_in: '#d474a8',
542
542
  uses: '#e3b341',
543
543
  method: '#c586c0',
544
- references: '#e07a5f',
545
- feeds: '#22c55e',
546
- produces: '#e07a5f',
547
- writes: '#2f9e44',
544
+ references: '#3b82f6',
545
+ feeds: '#4ec9b0',
546
+ produces: '#a78bfa',
547
+ writes: '#e8853a',
548
548
  reads: '#0ea5e9',
549
549
  watches: '#9ca3af',
550
550
  'registers-into': '#ff6b35', // orange
@@ -681,7 +681,7 @@ export function packageColor(name) {
681
681
  * are the only surface using it, but pick a distinct value if roles ever
682
682
  * take over node borders. */
683
683
  export const ROLE_COLOR = {
684
- entry: '#ff6b35',
684
+ entry: '#c0c0c0',
685
685
  service: '#0893d2', // blue — external system
686
686
  };
687
687
  /**
@@ -0,0 +1,95 @@
1
+ /**
2
+ * toC4 — project a subsystem-model (or a composition of them) onto C4 levels.
3
+ *
4
+ * The stored document is flat: `components[]` carry `process` (runtime unit),
5
+ * `purl` (repo/package), `construct`, `role`, `module`, plus `relations[]`
6
+ * (static) and `walkthroughs[]` (dynamic). C4 wants a hierarchy above the
7
+ * component — system → container → component — with externals and actors
8
+ * outside it. This module derives that hierarchy without inventing data:
9
+ *
10
+ * system ← the repo key (purlRepoKey of the first grounded component)
11
+ * container ← component.process (runtime/deployment boundary)
12
+ * component ← a grounded component
13
+ * external ← construct: 'external'
14
+ * actor ← construct: 'custom_entity' (their authored actor/entity)
15
+ *
16
+ * Edges are rolled up to the owner of each endpoint at the chosen view, so the
17
+ * container view shows container↔container collaborations and the component
18
+ * view shows component↔component ones. Intra-owner edges (from === to) drop.
19
+ *
20
+ * Pure over the document so it is unit-testable and reusable by any renderer.
21
+ */
22
+ import type { SubsystemComponent, SubsystemModelDocument } from './model';
23
+ /** C4 levels plus the two "outside the system" concepts. */
24
+ export type C4Kind = 'system' | 'container' | 'component' | 'external' | 'actor';
25
+ /** Which projection to build: containers (level 2) or components (level 3). */
26
+ export type C4View = 'container' | 'component';
27
+ /** A C4 element the renderer can draw as a box. */
28
+ export interface C4Node {
29
+ id: string;
30
+ kind: C4Kind;
31
+ label: string;
32
+ /** Compound parent (container → system, component → container). */
33
+ parentId?: string;
34
+ /** Grouping key the node was derived from (process key, purl, alias). */
35
+ key?: string;
36
+ /** Source component aliases rolled into this node. */
37
+ members: string[];
38
+ /** Distinct constructs among the members (for a quick breakdown). */
39
+ constructs: string[];
40
+ /** True when any member is a `store` construct (a data store in C4). */
41
+ isStore: boolean;
42
+ /** Present only in the component view — the backing component. */
43
+ component?: SubsystemComponent;
44
+ /** Source model ids that contributed members, when attribution is supplied. */
45
+ models?: string[];
46
+ }
47
+ /** A compound frame (the system, or a container holding components). */
48
+ export interface C4Group {
49
+ id: string;
50
+ kind: 'system' | 'container';
51
+ label: string;
52
+ parentId?: string;
53
+ /** Member C4 node ids (or nested group ids for the system). */
54
+ memberIds: string[];
55
+ }
56
+ /** A rolled-up collaboration. `relationship` = static, `flow` = walkthrough. */
57
+ export interface C4Edge {
58
+ id: string;
59
+ source: string;
60
+ target: string;
61
+ kind: 'relationship' | 'flow';
62
+ label: string;
63
+ mechanisms: string[];
64
+ count: number;
65
+ }
66
+ export interface C4Model {
67
+ view: C4View;
68
+ system: C4Node;
69
+ nodes: C4Node[];
70
+ groups: C4Group[];
71
+ edges: C4Edge[];
72
+ }
73
+ export interface ToC4Options {
74
+ view?: C4View;
75
+ /** Override the system title; defaults to the repo key's owner/name. */
76
+ systemLabel?: string;
77
+ /** Override the repo key used for the system id. */
78
+ repoKey?: string;
79
+ /** Model-id attribution per component alias (e.g. from a merge sidecar). */
80
+ modelsByAlias?: Record<string, string[]>;
81
+ }
82
+ /** A code component (not an external, not an actor/entity). */
83
+ export declare function isGroundedComponent(c: SubsystemComponent): boolean;
84
+ /** `owner/name` from a purl, trimmed of scheme and fragment. */
85
+ export declare function labelFromPurl(purl: string): string;
86
+ /** The repo key the system is derived from: first grounded component's purl. */
87
+ export declare function deriveRepoKey(doc: SubsystemModelDocument): string | undefined;
88
+ /**
89
+ * Derive the C4 projection of a (possibly composed) subsystem document.
90
+ *
91
+ * @param doc - a portable document, or a composed one with canonical aliases.
92
+ * @param options - view + optional system naming + attribution.
93
+ */
94
+ export declare function toC4(doc: SubsystemModelDocument, options?: ToC4Options): C4Model;
95
+ //# sourceMappingURL=toC4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toC4.d.ts","sourceRoot":"","sources":["../../src/subsystem/toC4.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE1E,4DAA4D;AAC5D,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAEjF,+EAA+E;AAC/E,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;AAE/C,mDAAmD;AACnD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qEAAqE;IACrE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,wEAAwE;IACxE,OAAO,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wEAAwE;AACxE,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,gFAAgF;AAChF,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C;AAKD,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAElE;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAM7E;AAaD;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,sBAAsB,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAiJpF"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * toC4 — project a subsystem-model (or a composition of them) onto C4 levels.
3
+ *
4
+ * The stored document is flat: `components[]` carry `process` (runtime unit),
5
+ * `purl` (repo/package), `construct`, `role`, `module`, plus `relations[]`
6
+ * (static) and `walkthroughs[]` (dynamic). C4 wants a hierarchy above the
7
+ * component — system → container → component — with externals and actors
8
+ * outside it. This module derives that hierarchy without inventing data:
9
+ *
10
+ * system ← the repo key (purlRepoKey of the first grounded component)
11
+ * container ← component.process (runtime/deployment boundary)
12
+ * component ← a grounded component
13
+ * external ← construct: 'external'
14
+ * actor ← construct: 'custom_entity' (their authored actor/entity)
15
+ *
16
+ * Edges are rolled up to the owner of each endpoint at the chosen view, so the
17
+ * container view shows container↔container collaborations and the component
18
+ * view shows component↔component ones. Intra-owner edges (from === to) drop.
19
+ *
20
+ * Pure over the document so it is unit-testable and reusable by any renderer.
21
+ */
22
+ const EXTERNAL_PURL = 'external';
23
+ const UNASSIGNED = '(unassigned)';
24
+ /** A code component (not an external, not an actor/entity). */
25
+ export function isGroundedComponent(c) {
26
+ return c.construct !== 'external' && c.construct !== 'custom_entity';
27
+ }
28
+ /** `owner/name` from a purl, trimmed of scheme and fragment. */
29
+ export function labelFromPurl(purl) {
30
+ const base = purl.replace(/^external:/, '').split('#')[0]?.trim() ?? '';
31
+ const parts = base.split('/').filter(Boolean);
32
+ return parts.slice(-2).join('/') || base || purl;
33
+ }
34
+ /** The repo key the system is derived from: first grounded component's purl. */
35
+ export function deriveRepoKey(doc) {
36
+ for (const c of doc.components) {
37
+ const p = (c.purl ?? '').split('#')[0]?.trim();
38
+ if (p && p !== EXTERNAL_PURL && !p.startsWith('external:'))
39
+ return p;
40
+ }
41
+ return undefined;
42
+ }
43
+ /** Stable identity for an external: its real purl, else the model-local alias. */
44
+ function externalKey(c) {
45
+ const purl = (c.purl ?? '').trim();
46
+ if (purl && purl !== EXTERNAL_PURL && purl !== 'external:proposed')
47
+ return purl;
48
+ return `alias:${c.alias}`;
49
+ }
50
+ function containerKey(c) {
51
+ return c.process?.trim() || UNASSIGNED;
52
+ }
53
+ /**
54
+ * Derive the C4 projection of a (possibly composed) subsystem document.
55
+ *
56
+ * @param doc - a portable document, or a composed one with canonical aliases.
57
+ * @param options - view + optional system naming + attribution.
58
+ */
59
+ export function toC4(doc, options = {}) {
60
+ const view = options.view ?? 'container';
61
+ const repoKey = options.repoKey ?? deriveRepoKey(doc) ?? 'system';
62
+ const systemId = `system:${repoKey}`;
63
+ const system = {
64
+ id: systemId,
65
+ kind: 'system',
66
+ label: options.systemLabel ?? labelFromPurl(repoKey),
67
+ key: repoKey,
68
+ members: [],
69
+ constructs: [],
70
+ isStore: false,
71
+ };
72
+ const nodes = new Map();
73
+ const ownerOf = new Map();
74
+ const containerNodeId = (key) => `container:${key}`;
75
+ const componentNodeId = (alias) => `component:${alias}`;
76
+ for (const c of doc.components) {
77
+ let id;
78
+ let kind;
79
+ let label;
80
+ let parentId;
81
+ let key;
82
+ if (c.construct === 'external') {
83
+ key = externalKey(c);
84
+ id = `external:${key}`;
85
+ kind = 'external';
86
+ label = key.startsWith('alias:') ? c.name : labelFromPurl(key);
87
+ }
88
+ else if (c.construct === 'custom_entity') {
89
+ key = c.alias;
90
+ id = `actor:${c.alias}`;
91
+ kind = 'actor';
92
+ label = c.name;
93
+ }
94
+ else if (view === 'component') {
95
+ key = containerKey(c);
96
+ id = componentNodeId(c.alias);
97
+ kind = 'component';
98
+ label = c.name;
99
+ parentId = containerNodeId(key);
100
+ }
101
+ else {
102
+ key = containerKey(c);
103
+ id = containerNodeId(key);
104
+ kind = 'container';
105
+ label = key === UNASSIGNED ? 'Unassigned' : key;
106
+ parentId = systemId;
107
+ }
108
+ ownerOf.set(c.alias, id);
109
+ let node = nodes.get(id);
110
+ if (!node) {
111
+ node = {
112
+ id,
113
+ kind,
114
+ label,
115
+ parentId,
116
+ key,
117
+ members: [],
118
+ constructs: [],
119
+ isStore: false,
120
+ ...(kind === 'component' ? { component: c } : {}),
121
+ };
122
+ nodes.set(id, node);
123
+ }
124
+ node.members.push(c.alias);
125
+ if (!node.constructs.includes(c.construct))
126
+ node.constructs.push(c.construct);
127
+ if (c.construct === 'store')
128
+ node.isStore = true;
129
+ const models = options.modelsByAlias?.[c.alias];
130
+ if (models && models.length > 0) {
131
+ node.models = [...new Set([...(node.models ?? []), ...models])];
132
+ }
133
+ }
134
+ // --- Groups (compound frames) ------------------------------------------
135
+ const groups = [];
136
+ if (view === 'container') {
137
+ const containerIds = [...nodes.values()].filter((n) => n.kind === 'container').map((n) => n.id);
138
+ if (containerIds.length > 0) {
139
+ groups.push({ id: systemId, kind: 'system', label: system.label, memberIds: containerIds });
140
+ }
141
+ }
142
+ else {
143
+ const byContainer = new Map();
144
+ for (const n of nodes.values()) {
145
+ if (n.kind !== 'component' || !n.parentId)
146
+ continue;
147
+ const list = byContainer.get(n.parentId) ?? [];
148
+ list.push(n.id);
149
+ byContainer.set(n.parentId, list);
150
+ }
151
+ const containerIds = [];
152
+ for (const [id, memberIds] of byContainer) {
153
+ const label = id.slice('container:'.length);
154
+ groups.push({ id, kind: 'container', label: label === UNASSIGNED ? 'Unassigned' : label, parentId: systemId, memberIds });
155
+ containerIds.push(id);
156
+ }
157
+ if (containerIds.length > 0) {
158
+ groups.push({ id: systemId, kind: 'system', label: system.label, memberIds: containerIds });
159
+ }
160
+ }
161
+ // --- Edges: roll each endpoint up to its owner at this view -------------
162
+ const relEdges = new Map();
163
+ const flowEdges = new Map();
164
+ const addEdge = (bucket, source, target, kind, mechanism) => {
165
+ if (!source || !target || source === target)
166
+ return;
167
+ const key = `${source}\0${target}`;
168
+ let edge = bucket.get(key);
169
+ if (!edge) {
170
+ edge = { id: `${kind}:${key}`, source, target, kind, label: '', mechanisms: [], count: 0 };
171
+ bucket.set(key, edge);
172
+ }
173
+ edge.count += 1;
174
+ if (!edge.mechanisms.includes(mechanism))
175
+ edge.mechanisms.push(mechanism);
176
+ };
177
+ for (const r of doc.relations ?? []) {
178
+ addEdge(relEdges, ownerOf.get(r.from), ownerOf.get(r.to), 'relationship', r.relationType);
179
+ }
180
+ for (const w of doc.walkthroughs ?? []) {
181
+ for (const s of w.steps ?? []) {
182
+ addEdge(flowEdges, ownerOf.get(s.from), ownerOf.get(s.to), 'flow', s.mechanism);
183
+ }
184
+ }
185
+ const edges = [...relEdges.values(), ...flowEdges.values()];
186
+ for (const e of edges)
187
+ e.label = [...e.mechanisms].sort().join(' + ');
188
+ return {
189
+ view,
190
+ system,
191
+ nodes: [...nodes.values()].filter((n) => n.kind !== 'system'),
192
+ groups,
193
+ edges,
194
+ };
195
+ }
196
+ //# sourceMappingURL=toC4.js.map