@principal-ai/subsystems-react 0.23.1 → 0.23.2

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.
@@ -10,7 +10,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
10
10
  import { useState } from 'react';
11
11
  import { Handle, Position, } from '@xyflow/react';
12
12
  import { useTheme } from '@principal-ade/industry-theme';
13
- import { MECHANISM_COLOR, MECHANISM_STYLE, PROPOSED_COLOR, constructBadgeLabel, rightBadgeLabel, rightBadgeColor, storageBadgeLabel, storageBadgeColor, deriveNameFromSymbol, BADGE_EDGE_INSET, nodeMinWidthForBadges, packageColor, } from './model';
13
+ import { MECHANISM_COLOR, MECHANISM_STYLE, PROPOSED_COLOR, constructBadgeColor, constructBadgeLabel, rightBadgeLabel, rightBadgeColor, storageBadgeLabel, storageBadgeColor, deriveNameFromSymbol, BADGE_EDGE_INSET, nodeMinWidthForBadges, packageColor, } from './model';
14
14
  import { componentColor } from '../pierre/constructColors';
15
15
  import { resolvePierreSyntaxThemeName } from '../pierre/pierreSyntaxTheme';
16
16
  export const CONSTRUCT_LABEL = {
@@ -48,6 +48,9 @@ export function SubsystemComponentNode(props) {
48
48
  // shows as the hover badge, not as color — for now; a role glyph/accent may
49
49
  // come later. A component-authored `color` override wins over the construct.
50
50
  const color = componentColor(c, resolvePierreSyntaxThemeName(mode));
51
+ // Left badge: framework brand (e.g. React cyan) when the label is a
52
+ // framework stereotype; otherwise the same construct color as the border.
53
+ const badgeColor = constructBadgeColor(c) ?? color;
51
54
  const [hover, setHover] = useState(false);
52
55
  const configuredMax = SUBSYSTEM_CALLBACKS.maxNodeWidth;
53
56
  const maxWidth = configuredMax ?? 300;
@@ -74,6 +77,10 @@ export function SubsystemComponentNode(props) {
74
77
  // Selection is stamped into data by the graph component — React Flow's own
75
78
  // `selected` never updates because the node stops click propagation.
76
79
  const isSelected = selected || data.isSelected === true;
80
+ // Externals are "outside" the system — square corners on the node + badges.
81
+ const isExternal = c.construct === 'external';
82
+ const nodeRadius = isExternal ? 0 : 8;
83
+ const badgeRadius = isExternal ? 0 : 4;
77
84
  return (_jsxs("div", { onMouseEnter: () => {
78
85
  setHover(true);
79
86
  SUBSYSTEM_CALLBACKS.onHover?.(c.id);
@@ -95,7 +102,7 @@ export function SubsystemComponentNode(props) {
95
102
  minWidth: badgeMinWidth,
96
103
  maxWidth,
97
104
  padding: '6px 10px',
98
- borderRadius: 8,
105
+ borderRadius: nodeRadius,
99
106
  background: theme.colors.backgroundSecondary ?? theme.colors.background,
100
107
  // Selected / file-matched nodes get a thicker border. Proposed nodes
101
108
  // use a dashed goldenrod border; left construct badge keeps construct color.
@@ -109,7 +116,7 @@ export function SubsystemComponentNode(props) {
109
116
  fontFamily: theme.fonts.body,
110
117
  }, children: [_jsx("div", { style: {
111
118
  position: 'absolute',
112
- top: -9,
119
+ top: -11,
113
120
  left: BADGE_EDGE_INSET,
114
121
  zIndex: 1,
115
122
  fontFamily: theme.fonts.monospace,
@@ -118,14 +125,14 @@ export function SubsystemComponentNode(props) {
118
125
  textTransform: 'uppercase',
119
126
  lineHeight: '17px',
120
127
  whiteSpace: 'nowrap',
121
- color,
128
+ color: badgeColor,
122
129
  background: theme.colors.backgroundSecondary ?? theme.colors.background,
123
- border: `1px solid ${color}`,
124
- borderRadius: 4,
125
- padding: '0 5px',
130
+ border: `2px solid ${badgeColor}`,
131
+ borderRadius: badgeRadius,
132
+ padding: '2px 8px',
126
133
  }, children: constructBadgeLabel(c) }), (topRightLabel != null || storageLabel != null) && (_jsxs("div", { style: {
127
134
  position: 'absolute',
128
- top: -9,
135
+ top: -11,
129
136
  right: BADGE_EDGE_INSET,
130
137
  zIndex: 1,
131
138
  display: 'flex',
@@ -139,9 +146,9 @@ export function SubsystemComponentNode(props) {
139
146
  lineHeight: '17px',
140
147
  color: storageColor,
141
148
  background: theme.colors.backgroundSecondary ?? theme.colors.background,
142
- border: `1px solid ${storageColor}`,
143
- borderRadius: 4,
144
- padding: '0 5px',
149
+ border: `2px solid ${storageColor}`,
150
+ borderRadius: badgeRadius,
151
+ padding: '2px 8px',
145
152
  }, children: storageLabel })), topRightLabel != null && topRightColor != null && (_jsx("span", { style: {
146
153
  fontFamily: theme.fonts.monospace,
147
154
  fontSize: theme.fontSizes[0] * 1.1,
@@ -150,12 +157,12 @@ export function SubsystemComponentNode(props) {
150
157
  lineHeight: '17px',
151
158
  color: topRightColor,
152
159
  background: theme.colors.backgroundSecondary ?? theme.colors.background,
153
- border: `1px solid ${topRightColor}`,
154
- borderRadius: 4,
155
- padding: '0 5px',
160
+ border: `2px solid ${topRightColor}`,
161
+ borderRadius: badgeRadius,
162
+ padding: '2px 8px',
156
163
  }, children: topRightLabel }))] })), (hover || fileMatch === true) && c.file ? (_jsx("div", { style: {
157
164
  position: 'absolute',
158
- bottom: -13,
165
+ bottom: -14,
159
166
  left: '50%',
160
167
  transform: 'translateX(-50%)',
161
168
  zIndex: 1,
@@ -168,9 +175,9 @@ export function SubsystemComponentNode(props) {
168
175
  // borders and badges, not the file name
169
176
  color: theme.colors.text ?? theme.colors.textSecondary,
170
177
  background: theme.colors.backgroundSecondary ?? theme.colors.background,
171
- border: `1px solid ${color}`,
172
- borderRadius: 4,
173
- padding: '0 5px',
178
+ border: `2px solid ${color}`,
179
+ borderRadius: badgeRadius,
180
+ padding: '2px 8px',
174
181
  cursor: 'pointer',
175
182
  }, onClick: (e) => {
176
183
  // Open the file directly; don't also toggle node selection.
@@ -217,7 +224,21 @@ export function SubsystemGroupNode(props) {
217
224
  const color = packageColor(region?.key ?? 'process');
218
225
  const dimmed = data.dimmed === true;
219
226
  const hidden = data.hidden === true;
220
- const label = region?.kind === 'module' ? `module · ${region.label}` : (region?.label ?? '');
227
+ // Label is the region identity alone (path / process key / owner/name).
228
+ // Kind is carried by frame chrome (square = process; rounded = module/package)
229
+ // — don't prefix `module ·` / `package ·` or the path reads twice.
230
+ const label = region?.label ?? '';
231
+ // Process frames match external nodes — square corners (outside the soft
232
+ // component language). Module / package frames keep the rounded look.
233
+ const isProcess = region?.kind === 'process';
234
+ const frameRadius = isProcess ? 0 : 12;
235
+ const badgeRadius = isProcess ? 0 : 4;
236
+ // Processes are deployment units — solid frame. Modules/packages stay dashed
237
+ // until selected.
238
+ const frameStyle = isProcess || selected ? 'solid' : 'dashed';
239
+ // Process keeps a tinted fill; module / package bodies stay transparent so
240
+ // nested frames don't stack washes.
241
+ const frameFill = isProcess ? `${color}14` : 'transparent';
221
242
  if (!region)
222
243
  return null;
223
244
  return (_jsx("div", { style: {
@@ -225,16 +246,22 @@ export function SubsystemGroupNode(props) {
225
246
  width: width ?? 400,
226
247
  height: height ?? 300,
227
248
  boxSizing: 'border-box',
228
- borderRadius: 12,
229
- border: `2px ${selected ? 'solid' : 'dashed'} ${color}`,
230
- background: `${color}14`,
249
+ borderRadius: frameRadius,
250
+ border: `2px ${frameStyle} ${color}`,
251
+ background: frameFill,
231
252
  opacity: hidden ? 0 : dimmed ? 0.35 : 1,
232
253
  transition: 'opacity 150ms ease',
233
254
  pointerEvents: 'none',
234
255
  }, children: _jsx("div", { style: {
235
256
  position: 'absolute',
236
- top: -19,
237
- left: 12,
257
+ // Process: badge fill starts with the process fill (inside the
258
+ // frame border); no top badge border so widths don't fight.
259
+ // Module/package sit astride the top edge like component badges.
260
+ // Always set left/transform/borderTop explicitly — React Flow reuses
261
+ // group DOM nodes and `undefined` does not clear a prior value.
262
+ top: isProcess ? 0 : -19,
263
+ left: isProcess ? '50%' : 12,
264
+ transform: isProcess ? 'translateX(-50%)' : 'none',
238
265
  fontFamily: theme.fonts.monospace,
239
266
  fontSize: theme.fontSizes[3],
240
267
  fontWeight: 700,
@@ -242,7 +269,8 @@ export function SubsystemGroupNode(props) {
242
269
  color,
243
270
  background: theme.colors.backgroundSecondary ?? theme.colors.background,
244
271
  border: `1px solid ${color}`,
245
- borderRadius: 4,
272
+ borderTopWidth: isProcess ? 0 : 1,
273
+ borderRadius: badgeRadius,
246
274
  padding: '1px 7px',
247
275
  whiteSpace: 'nowrap',
248
276
  }, children: label }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/subsystem/nodes.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/subsystem/nodes.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principal-ai/subsystems-react",
3
- "version": "0.23.1",
3
+ "version": "0.23.2",
4
4
  "description": "React UI for Subsystem Models — graph, Pierre code views, and session-event feeds",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -128,6 +128,7 @@ export type {
128
128
  } from './subsystem/model';
129
129
  export {
130
130
  constructBadgeLabel,
131
+ constructBadgeColor,
131
132
  rightBadgeLabel,
132
133
  rightBadgeColor,
133
134
  deriveNameFromSymbol,
@@ -137,6 +138,7 @@ export {
137
138
  walkthroughStepGraphEdgeId,
138
139
  ROLE_COLOR,
139
140
  ROLE_LABEL,
141
+ FRAMEWORK_BADGE_COLOR,
140
142
  PROPOSED_COLOR,
141
143
  } from './subsystem/model';
142
144
  export type {
@@ -38,9 +38,9 @@ describe('constructColorsFromPierreTheme', () => {
38
38
  }
39
39
  });
40
40
 
41
- test('colliding scope pairs are shaded apart (class/type, function/method)', () => {
41
+ test('colliding scope pairs are shaded apart (class/type); function and method differ', () => {
42
42
  const dark = constructColorsFromPierreTheme('pierre-dark');
43
- expect(dark.class).not.toBe(dark.type);
43
+ expect(dark.class).not.toBe(dark.type_alias);
44
44
  expect(dark.function).not.toBe(dark.method);
45
45
  });
46
46
 
@@ -9,9 +9,8 @@
9
9
  *
10
10
  * Syntax themes deliberately reuse one hue across related scopes (class and
11
11
  * type share `entity.name.class`); the node taxonomy needs distinguishable
12
- * colors, so colliding constructs take a shade of the scope color — derived
13
- * from the theme itself, toward white in dark themes and toward black in
14
- * light themes.
12
+ * colors, so colliding constructs remap to distinct theme scopes (or a shade
13
+ * of one) rather than sharing the syntax color verbatim.
15
14
  */
16
15
 
17
16
  import type { SubsystemComponentConstruct } from '../subsystem/model';
@@ -84,24 +83,51 @@ export function constructColorsFromPierreTheme(
84
83
  // still all-Pierre, never a hand-picked value.
85
84
  const editorFg = theme.colors['editor.foreground'] ?? '#fafafa';
86
85
  const pick = (scope: string) => scopeColor(theme, scope) ?? editorFg;
87
- const towardBackground = theme.type === 'dark' ? lighten : darken;
88
86
 
89
- const classColor = pick('entity.name.class');
90
- const functionColor = pick('entity.name.function');
91
- const typeColor = pick('support.type');
87
+ // Classes: keyword's warm red/pink, pulled toward black for a crimson
88
+ // border (syntax paints class names purple; the taxonomy wants red).
89
+ // Darken lightly so it stays brighter than a muted wine, but still
90
+ // distinguishable from method (hot pink / magenta).
91
+ const classColor = mix(
92
+ pick('keyword'),
93
+ '#000000',
94
+ theme.type === 'dark' ? 0.18 : 0.08,
95
+ );
96
+ // Syntax themes paint function names purple; the node taxonomy wants
97
+ // standalone functions in the theme's string green, while methods take a
98
+ // hot pink (keyword + type magenta) so they don't collapse into class crimson.
99
+ const functionColor = pick('string');
100
+ const methodColor = mix(
101
+ pick('keyword'),
102
+ pick('support.type'),
103
+ theme.type === 'dark' ? 0.5 : 0.4,
104
+ );
105
+ // Cool white-silver: punctuation gray iced with numeric cyan, then lifted
106
+ // toward pure white (dark) / pure black (light). Higher cyan mix so the
107
+ // metallic cool cast survives the lift.
108
+ const coolMetal = mix(pick('punctuation'), pick('constant.numeric'), 0.45);
109
+ const interfaceColor =
110
+ theme.type === 'dark'
111
+ ? mix('#ffffff', coolMetal, 0.16)
112
+ : mix('#000000', coolMetal, 0.3);
92
113
 
93
114
  return {
94
115
  class: classColor,
95
- // interface/type are the type-name scope, shaded to separate them from
96
- // class (whose declaration name shares the same hue in syntax themes)
97
- interface: towardBackground(typeColor, 0.14),
98
- type_alias: towardBackground(typeColor, 0.28),
116
+ // Interfaces are contracts / shapes — a near-white cool silver, not typed purple.
117
+ interface: interfaceColor,
118
+ // Type aliases: decorator blue (distinct from class crimson / enum purple).
119
+ type_alias: pick('meta.decorator'),
99
120
  function: functionColor,
100
- method: towardBackground(functionColor, 0.14),
101
- // enum members are constants — the generic constant hue
102
- enum: pick('constant'),
121
+ method: methodColor,
122
+ // Enums: function-name purple from the syntax theme.
123
+ enum: pick('entity.name.function'),
103
124
  store: pick('variable.other.constant'),
104
- external: pick('comment'),
125
+ // Externals: comment gray, lifted slightly so they read as muted but
126
+ // not sunk into the canvas.
127
+ external:
128
+ theme.type === 'dark'
129
+ ? mix(pick('comment'), '#ffffff', 0.22)
130
+ : mix(pick('comment'), '#000000', 0.08),
105
131
  // custom entities are actors, not code — the heading/emphasis coral reads
106
132
  // as a highlight against the code-construct hues. Distinct from entry role
107
133
  // orange (#ff6b35) which stays a badge, not a border.
@@ -109,14 +135,6 @@ export function constructColorsFromPierreTheme(
109
135
  };
110
136
  }
111
137
 
112
- function lighten(hex: string, amount: number): string {
113
- return mix(hex, '#ffffff', amount);
114
- }
115
-
116
- function darken(hex: string, amount: number): string {
117
- return mix(hex, '#000000', amount);
118
- }
119
-
120
138
  /**
121
139
  * The dark-theme instantiation, for consumers without a mode context (the
122
140
  * bun-side excalidraw exporter). React components derive per mode instead.
@@ -0,0 +1,242 @@
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 type { SubsystemComponent } from '../../../subsystem/model';
6
+ import { graphSpecFromEdges } from './fixtures';
7
+
8
+ const meta = {
9
+ title: 'Subsystem/ComponentGraph/Packages',
10
+ component: SubsystemComponentGraph,
11
+ parameters: { layout: 'fullscreen' },
12
+ tags: ['autodocs'],
13
+ decorators: [
14
+ (Story) => (
15
+ <ThemeProvider theme={defaultEditorTheme}>
16
+ <Story />
17
+ </ThemeProvider>
18
+ ),
19
+ ],
20
+ } satisfies Meta<typeof SubsystemComponentGraph>;
21
+
22
+ export default meta;
23
+ type Story = StoryObj<typeof meta>;
24
+
25
+ const APP = 'pkg:github/acme/app';
26
+ const LIB = 'pkg:github/acme/lib';
27
+
28
+ /**
29
+ * Package frames are derived from `purl` when a graph spans multiple repos.
30
+ * No separate `package` field — single-repo graphs stay unframed at this level.
31
+ */
32
+ const multiRepoComponents: SubsystemComponent[] = [
33
+ {
34
+ id: 'dispatch',
35
+ name: 'dispatch',
36
+ construct: 'function',
37
+ symbol: 'dispatch',
38
+ file: 'src/host/dispatch.ts',
39
+ module: 'src/host/dispatch.ts',
40
+ process: 'app/host',
41
+ purl: APP,
42
+ purpose: 'host entry',
43
+ layer: 1,
44
+ },
45
+ {
46
+ id: 'session',
47
+ name: 'SessionService',
48
+ construct: 'class',
49
+ symbol: 'SessionService',
50
+ file: 'src/host/session.ts',
51
+ module: 'src/host/session.ts',
52
+ process: 'app/host',
53
+ purl: APP,
54
+ purpose: 'session state',
55
+ layer: 2,
56
+ },
57
+ {
58
+ id: 'parse',
59
+ name: 'parseEvent',
60
+ construct: 'function',
61
+ symbol: 'parseEvent',
62
+ file: 'src/parse.ts',
63
+ module: 'src/parse.ts',
64
+ process: 'lib/worker',
65
+ purl: LIB,
66
+ purpose: 'shared parser',
67
+ layer: 1,
68
+ },
69
+ {
70
+ id: 'normalize',
71
+ name: 'normalize',
72
+ construct: 'function',
73
+ symbol: 'normalize',
74
+ file: 'src/normalize.ts',
75
+ module: 'src/normalize.ts',
76
+ process: 'lib/worker',
77
+ purl: LIB,
78
+ purpose: 'normalize payloads',
79
+ layer: 2,
80
+ },
81
+ ];
82
+
83
+ const multiRepoEdges = graphSpecFromEdges([
84
+ ['dispatch', 'session', 'calls'],
85
+ ['dispatch', 'parse', 'calls'],
86
+ ['parse', 'normalize', 'calls'],
87
+ ]);
88
+
89
+ export const MultiRepoPackageFrames: Story = {
90
+ name: 'Multi-repo package frames',
91
+ args: {
92
+ components: multiRepoComponents,
93
+ relations: multiRepoEdges.relations,
94
+ walkthroughs: multiRepoEdges.walkthroughs,
95
+ },
96
+ render: (args) => (
97
+ <div style={{ width: '100vw', height: '100vh' }}>
98
+ <SubsystemComponentGraph {...args} />
99
+ </div>
100
+ ),
101
+ };
102
+
103
+ /** Same components, one purl — no package frames (process/module only). */
104
+ const singleRepo = multiRepoComponents.map((c) => ({ ...c, purl: APP }));
105
+
106
+ export const SingleRepoNoPackageFrames: Story = {
107
+ name: 'Single-repo (no package frames)',
108
+ args: {
109
+ components: singleRepo,
110
+ relations: multiRepoEdges.relations,
111
+ walkthroughs: multiRepoEdges.walkthroughs,
112
+ },
113
+ render: (args) => (
114
+ <div style={{ width: '100vw', height: '100vh' }}>
115
+ <SubsystemComponentGraph {...args} />
116
+ </div>
117
+ ),
118
+ };
119
+
120
+ /**
121
+ * Full nest: package → process → module → leaves.
122
+ * Each module path has 2+ exports so module frames survive the singleton rule.
123
+ */
124
+ const nestedComponents: SubsystemComponent[] = [
125
+ {
126
+ id: 'dispatch',
127
+ name: 'dispatch',
128
+ construct: 'function',
129
+ symbol: 'dispatch',
130
+ file: 'src/host/main.ts',
131
+ module: 'src/host/main.ts',
132
+ process: 'app/host',
133
+ purl: APP,
134
+ purpose: 'host entry',
135
+ layer: 1,
136
+ },
137
+ {
138
+ id: 'boot',
139
+ name: 'boot',
140
+ construct: 'function',
141
+ symbol: 'boot',
142
+ file: 'src/host/main.ts',
143
+ module: 'src/host/main.ts',
144
+ process: 'app/host',
145
+ purl: APP,
146
+ purpose: 'host bootstrap',
147
+ layer: 1,
148
+ },
149
+ {
150
+ id: 'session',
151
+ name: 'SessionService',
152
+ construct: 'class',
153
+ symbol: 'SessionService',
154
+ file: 'src/host/session.ts',
155
+ module: 'src/host/session.ts',
156
+ process: 'app/host',
157
+ purl: APP,
158
+ purpose: 'session state',
159
+ layer: 2,
160
+ },
161
+ {
162
+ id: 'session-types',
163
+ name: 'SessionRecord',
164
+ construct: 'type_alias',
165
+ symbol: 'SessionRecord',
166
+ file: 'src/host/session.ts',
167
+ module: 'src/host/session.ts',
168
+ process: 'app/host',
169
+ purl: APP,
170
+ purpose: 'session record shape',
171
+ layer: 2,
172
+ },
173
+ {
174
+ id: 'parse',
175
+ name: 'parseEvent',
176
+ construct: 'function',
177
+ symbol: 'parseEvent',
178
+ file: 'src/parse.ts',
179
+ module: 'src/parse.ts',
180
+ process: 'lib/worker',
181
+ purl: LIB,
182
+ purpose: 'shared parser',
183
+ layer: 1,
184
+ },
185
+ {
186
+ id: 'parse-types',
187
+ name: 'RawEvent',
188
+ construct: 'type_alias',
189
+ symbol: 'RawEvent',
190
+ file: 'src/parse.ts',
191
+ module: 'src/parse.ts',
192
+ process: 'lib/worker',
193
+ purl: LIB,
194
+ purpose: 'raw event shape',
195
+ layer: 1,
196
+ },
197
+ {
198
+ id: 'normalize',
199
+ name: 'normalize',
200
+ construct: 'function',
201
+ symbol: 'normalize',
202
+ file: 'src/normalize.ts',
203
+ module: 'src/normalize.ts',
204
+ process: 'lib/worker',
205
+ purl: LIB,
206
+ purpose: 'normalize payloads',
207
+ layer: 2,
208
+ },
209
+ {
210
+ id: 'normalize-types',
211
+ name: 'NormalizedEvent',
212
+ construct: 'type_alias',
213
+ symbol: 'NormalizedEvent',
214
+ file: 'src/normalize.ts',
215
+ module: 'src/normalize.ts',
216
+ process: 'lib/worker',
217
+ purl: LIB,
218
+ purpose: 'normalized event shape',
219
+ layer: 2,
220
+ },
221
+ ];
222
+
223
+ const nestedEdges = graphSpecFromEdges([
224
+ ['boot', 'dispatch', 'calls'],
225
+ ['dispatch', 'session', 'calls'],
226
+ ['dispatch', 'parse', 'calls'],
227
+ ['parse', 'normalize', 'calls'],
228
+ ]);
229
+
230
+ export const PackageProcessModuleNesting: Story = {
231
+ name: 'Package → process → module nesting',
232
+ args: {
233
+ components: nestedComponents,
234
+ relations: nestedEdges.relations,
235
+ walkthroughs: nestedEdges.walkthroughs,
236
+ },
237
+ render: (args) => (
238
+ <div style={{ width: '100vw', height: '100vh' }}>
239
+ <SubsystemComponentGraph {...args} />
240
+ </div>
241
+ ),
242
+ };