@principal-ai/subsystems-react 0.20.5 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/graphify/anchor.d.ts +17 -0
- package/dist/graphify/anchor.d.ts.map +1 -1
- package/dist/graphify/anchor.js +41 -0
- package/dist/graphify/anchor.js.map +1 -1
- package/dist/graphify/consolidated.d.ts +40 -1
- package/dist/graphify/consolidated.d.ts.map +1 -1
- package/dist/graphify/construct.d.ts +23 -0
- package/dist/graphify/construct.d.ts.map +1 -0
- package/dist/graphify/construct.js +77 -0
- package/dist/graphify/construct.js.map +1 -0
- package/dist/graphify/index.d.ts +2 -2
- package/dist/graphify/index.d.ts.map +1 -1
- package/dist/graphify/index.js +1 -1
- package/dist/graphify/index.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/pierre/PierreWalkthroughCodeView.d.ts +22 -0
- package/dist/pierre/PierreWalkthroughCodeView.d.ts.map +1 -0
- package/dist/pierre/PierreWalkthroughCodeView.js +198 -0
- package/dist/pierre/PierreWalkthroughCodeView.js.map +1 -0
- package/dist/pierre/index.d.ts +2 -2
- package/dist/pierre/index.js +1 -1
- package/dist/pierre/pierreFileLang.d.ts +1 -1
- package/dist/pierre/pierreFileLang.js +1 -1
- package/dist/stories/Subsystem/ComponentGraph/fixtures.d.ts +14 -2
- package/dist/stories/Subsystem/ComponentGraph/fixtures.d.ts.map +1 -1
- package/dist/stories/Subsystem/ComponentGraph/fixtures.js +86 -20
- package/dist/stories/Subsystem/ComponentGraph/fixtures.js.map +1 -1
- package/dist/subsystem/ComponentDeclaration.js +1 -1
- package/dist/subsystem/ComponentDeclaration.js.map +1 -1
- package/dist/subsystem/FileDrawer.d.ts +2 -2
- package/dist/subsystem/FileDrawer.js +2 -2
- package/dist/subsystem/SubsystemComponentGraph.d.ts +25 -24
- package/dist/subsystem/SubsystemComponentGraph.d.ts.map +1 -1
- package/dist/subsystem/SubsystemComponentGraph.js +220 -194
- package/dist/subsystem/SubsystemComponentGraph.js.map +1 -1
- package/dist/subsystem/formatDeclaration.d.ts +2 -1
- package/dist/subsystem/formatDeclaration.d.ts.map +1 -1
- package/dist/subsystem/formatDeclaration.js +57 -33
- package/dist/subsystem/formatDeclaration.js.map +1 -1
- package/dist/subsystem/model.d.ts +109 -42
- package/dist/subsystem/model.d.ts.map +1 -1
- package/dist/subsystem/model.js +107 -5
- package/dist/subsystem/model.js.map +1 -1
- package/dist/subsystem/nodes.d.ts.map +1 -1
- package/dist/subsystem/nodes.js +43 -18
- package/dist/subsystem/nodes.js.map +1 -1
- package/dist/subsystem/tokenizeComponent.js +2 -2
- package/dist/subsystem/tokenizeComponent.js.map +1 -1
- package/package.json +3 -3
- package/src/graphify/anchor.test.ts +31 -2
- package/src/graphify/anchor.ts +46 -0
- package/src/graphify/consolidated.ts +43 -1
- package/src/graphify/{kind.test.ts → construct.test.ts} +20 -20
- package/src/graphify/{kind.ts → construct.ts} +17 -17
- package/src/graphify/index.ts +5 -2
- package/src/index.ts +20 -9
- package/src/pierre/{PierreThroughlineCodeView.tsx → PierreWalkthroughCodeView.tsx} +39 -47
- package/src/pierre/index.ts +2 -2
- package/src/pierre/pierreFileLang.ts +1 -1
- package/src/stories/Pierre/CodeView.stories.tsx +3 -3
- package/src/stories/Subsystem/ComponentDeclarationAudit.stories.tsx +14 -14
- package/src/stories/Subsystem/ComponentGraph/Appearance.stories.tsx +13 -15
- package/src/stories/Subsystem/ComponentGraph/Basics.stories.tsx +8 -8
- package/src/stories/Subsystem/ComponentGraph/Captures.stories.tsx +16 -20
- package/src/stories/Subsystem/ComponentGraph/CustomEntities.stories.tsx +11 -10
- package/src/stories/Subsystem/ComponentGraph/DetailPanel.stories.tsx +13 -14
- package/src/stories/Subsystem/ComponentGraph/Flows.stories.tsx +31 -66
- package/src/stories/Subsystem/ComponentGraph/FrameworkStereotype.stories.tsx +2 -2
- package/src/stories/Subsystem/ComponentGraph/GraphTitle.stories.tsx +4 -4
- package/src/stories/Subsystem/ComponentGraph/Processes.stories.tsx +3 -3
- package/src/stories/Subsystem/ComponentGraph/Proposed.stories.tsx +254 -0
- package/src/stories/Subsystem/ComponentGraph/Scenarios.stories.tsx +518 -33
- package/src/stories/Subsystem/ComponentGraph/Spotlights.stories.tsx +13 -13
- package/src/stories/Subsystem/ComponentGraph/fixtures.ts +105 -21
- package/src/subsystem/ComponentDeclaration.tsx +1 -1
- package/src/subsystem/FileDrawer.tsx +2 -2
- package/src/subsystem/SubsystemComponentGraph.tsx +284 -254
- package/src/subsystem/formatDeclaration.test.ts +76 -1
- package/src/subsystem/formatDeclaration.ts +57 -33
- package/src/subsystem/model.test.ts +49 -15
- package/src/subsystem/model.ts +210 -51
- package/src/subsystem/nodes.tsx +63 -22
- package/src/subsystem/tokenizeComponent.ts +2 -2
|
@@ -155,7 +155,7 @@ const nodeSpotlights: Array<{ label: string; component: SubsystemComponent; note
|
|
|
155
155
|
file: 'packages/subsystems-studio/src/bun/analysis.ts',
|
|
156
156
|
purl: corePurl,
|
|
157
157
|
symbol: 'AnalysisStatus',
|
|
158
|
-
|
|
158
|
+
declaration: {
|
|
159
159
|
kind: 'type',
|
|
160
160
|
properties: [
|
|
161
161
|
{ name: 'state', type: "'idle' | 'running' | 'done'" },
|
|
@@ -189,7 +189,7 @@ const nodeSpotlights: Array<{ label: string; component: SubsystemComponent; note
|
|
|
189
189
|
file: 'packages/subsystems-studio/src/bun/verify.ts',
|
|
190
190
|
purl: corePurl,
|
|
191
191
|
symbol: 'VerificationPhase',
|
|
192
|
-
|
|
192
|
+
declaration: {
|
|
193
193
|
kind: 'type',
|
|
194
194
|
properties: [{ name: 'idle' }, { name: 'checking' }, { name: 'done' }],
|
|
195
195
|
usedBy: [],
|
|
@@ -261,7 +261,7 @@ const nodeSpotlights: Array<{ label: string; component: SubsystemComponent; note
|
|
|
261
261
|
file: 'src/session/SessionCache.ts',
|
|
262
262
|
purl: 'pkg:github/principal-ai/agent-monitoring',
|
|
263
263
|
symbol: 'SessionCache',
|
|
264
|
-
|
|
264
|
+
declaration: {
|
|
265
265
|
kind: 'class',
|
|
266
266
|
methods: [{ nodeId: 'm1', name: 'put', parameters: [{ type: 'SessionRecord' }] }],
|
|
267
267
|
properties: [],
|
|
@@ -282,7 +282,7 @@ const nodeSpotlights: Array<{ label: string; component: SubsystemComponent; note
|
|
|
282
282
|
file: 'src/session/SessionCache.ts',
|
|
283
283
|
purl: 'pkg:github/principal-ai/agent-monitoring',
|
|
284
284
|
symbol: 'SessionCache.put',
|
|
285
|
-
|
|
285
|
+
declaration: {
|
|
286
286
|
kind: 'method',
|
|
287
287
|
hostClass: 'SessionCache',
|
|
288
288
|
parameters: [{ type: 'SessionRecord' }],
|
|
@@ -299,7 +299,7 @@ const nodeSpotlights: Array<{ label: string; component: SubsystemComponent; note
|
|
|
299
299
|
file: 'packages/subsystems-studio/src/bun/subsystem-model-store.ts',
|
|
300
300
|
purl: corePurl,
|
|
301
301
|
purpose: 'retained state — anchored to a state location',
|
|
302
|
-
|
|
302
|
+
declaration: { kind: 'store', properties: [{ name: 'ROOT', type: 'string' }, { name: 'INDEX_PATH', type: 'string' }] },
|
|
303
303
|
},
|
|
304
304
|
},
|
|
305
305
|
{
|
|
@@ -495,7 +495,7 @@ const anatomyComponents: Array<{ label: string; component: SubsystemComponent; n
|
|
|
495
495
|
construct: 'store',
|
|
496
496
|
file: 'packages/subsystems-studio/src/bun/subsystem-model-store.ts',
|
|
497
497
|
purl: corePurl,
|
|
498
|
-
|
|
498
|
+
declaration: {
|
|
499
499
|
kind: 'store',
|
|
500
500
|
properties: [
|
|
501
501
|
{ name: 'ROOT', type: 'string' },
|
|
@@ -516,7 +516,7 @@ const anatomyComponents: Array<{ label: string; component: SubsystemComponent; n
|
|
|
516
516
|
file: 'src/session/SessionCache.ts',
|
|
517
517
|
purl: 'pkg:github/principal-ai/agent-monitoring',
|
|
518
518
|
symbol: 'SessionCache',
|
|
519
|
-
|
|
519
|
+
declaration: {
|
|
520
520
|
kind: 'class',
|
|
521
521
|
methods: [
|
|
522
522
|
{ nodeId: 'cm1', name: 'put', parameters: [{ type: 'SessionRecord' }] },
|
|
@@ -540,7 +540,7 @@ const anatomyComponents: Array<{ label: string; component: SubsystemComponent; n
|
|
|
540
540
|
file: 'packages/subsystems-studio/src/bun/subsystem-model-store.ts',
|
|
541
541
|
purl: corePurl,
|
|
542
542
|
symbol: 'getSubsystemModel',
|
|
543
|
-
|
|
543
|
+
declaration: {
|
|
544
544
|
kind: 'function',
|
|
545
545
|
parameters: [{ name: 'graphId', type: 'string' }],
|
|
546
546
|
returnType: 'Promise<StoredSubsystemModel | null>',
|
|
@@ -560,7 +560,7 @@ const anatomyComponents: Array<{ label: string; component: SubsystemComponent; n
|
|
|
560
560
|
purl: corePurl,
|
|
561
561
|
symbol: 'StudioMessages',
|
|
562
562
|
role: 'entry',
|
|
563
|
-
|
|
563
|
+
declaration: {
|
|
564
564
|
kind: 'type',
|
|
565
565
|
properties: [
|
|
566
566
|
{ name: 'subsystemModelChanged', type: 'push' },
|
|
@@ -581,7 +581,7 @@ const anatomyComponents: Array<{ label: string; component: SubsystemComponent; n
|
|
|
581
581
|
file: 'src/session/SessionCache.ts',
|
|
582
582
|
purl: 'pkg:github/principal-ai/agent-monitoring',
|
|
583
583
|
symbol: 'SessionCache.put',
|
|
584
|
-
|
|
584
|
+
declaration: {
|
|
585
585
|
kind: 'method',
|
|
586
586
|
hostClass: 'SessionCache',
|
|
587
587
|
parameters: [{ name: 'record', type: 'SessionRecord' }],
|
|
@@ -599,7 +599,7 @@ const anatomyComponents: Array<{ label: string; component: SubsystemComponent; n
|
|
|
599
599
|
file: 'packages/subsystems-studio/src/bun/analysis.ts',
|
|
600
600
|
purl: corePurl,
|
|
601
601
|
symbol: 'AnalysisStatus',
|
|
602
|
-
|
|
602
|
+
declaration: {
|
|
603
603
|
kind: 'type',
|
|
604
604
|
properties: [{ name: 'state', type: "'idle' | 'running'" }],
|
|
605
605
|
usedBy: [],
|
|
@@ -617,7 +617,7 @@ const anatomyComponents: Array<{ label: string; component: SubsystemComponent; n
|
|
|
617
617
|
file: 'packages/subsystems-studio/src/bun/verify.ts',
|
|
618
618
|
purl: corePurl,
|
|
619
619
|
symbol: 'VerificationPhase',
|
|
620
|
-
|
|
620
|
+
declaration: {
|
|
621
621
|
kind: 'type',
|
|
622
622
|
properties: [{ name: 'idle' }, { name: 'checking' }, { name: 'done' }],
|
|
623
623
|
usedBy: [],
|
|
@@ -639,7 +639,7 @@ function AnatomySpotlightsDemo() {
|
|
|
639
639
|
{label} — {note}
|
|
640
640
|
</div>
|
|
641
641
|
<Row>
|
|
642
|
-
<JsonCard label="the data — component.
|
|
642
|
+
<JsonCard label="the data — component.declaration" value={component.declaration} width={320} />
|
|
643
643
|
<RenderPane label="the rendering — ComponentDeclaration">
|
|
644
644
|
<div style={{ width: 360 }}>
|
|
645
645
|
<ComponentDeclaration component={component} />
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
SubsystemComponent,
|
|
3
3
|
SubsystemComponentEdge,
|
|
4
|
+
SubsystemRelation,
|
|
5
|
+
SubsystemRelationType,
|
|
6
|
+
SubsystemWalkthrough,
|
|
7
|
+
SubsystemWalkthroughMechanism,
|
|
4
8
|
} from '../../../subsystem/model';
|
|
9
|
+
import { derivedGraphEdgeId } from '../../../subsystem/model';
|
|
5
10
|
import type { GraphifyComponentDetail } from '../../../graphify';
|
|
6
11
|
|
|
7
12
|
// ---------------------------------------------------------------------------
|
|
8
13
|
// Build a subsystem graph from a compact spec - helpers
|
|
9
14
|
// ---------------------------------------------------------------------------
|
|
10
15
|
export function components(
|
|
11
|
-
spec: Array<[id: string, name: string, construct: SubsystemComponent['construct'], file: string, purl: string, purpose?: string, symbol?: string,
|
|
16
|
+
spec: Array<[id: string, name: string, construct: SubsystemComponent['construct'], file: string, purl: string, purpose?: string, symbol?: string, declaration?: GraphifyComponentDetail]>,
|
|
12
17
|
): SubsystemComponent[] {
|
|
13
|
-
return spec.map(([id, name, construct, file, purl, purpose, symbol,
|
|
18
|
+
return spec.map(([id, name, construct, file, purl, purpose, symbol, declaration]) => ({
|
|
14
19
|
id,
|
|
15
20
|
name,
|
|
16
21
|
construct,
|
|
@@ -18,10 +23,56 @@ export function components(
|
|
|
18
23
|
purl,
|
|
19
24
|
purpose,
|
|
20
25
|
symbol,
|
|
21
|
-
|
|
26
|
+
declaration,
|
|
22
27
|
}));
|
|
23
28
|
}
|
|
24
29
|
|
|
30
|
+
const RELATION_TYPES = new Set<string>([
|
|
31
|
+
'imports',
|
|
32
|
+
'imports_from',
|
|
33
|
+
're_exports',
|
|
34
|
+
'defines',
|
|
35
|
+
'extends',
|
|
36
|
+
'inherits',
|
|
37
|
+
'implements',
|
|
38
|
+
'mixes_in',
|
|
39
|
+
'method',
|
|
40
|
+
'references',
|
|
41
|
+
'contains',
|
|
42
|
+
]);
|
|
43
|
+
|
|
44
|
+
export function relations(
|
|
45
|
+
spec: Array<[from: string, to: string, relationType: SubsystemRelationType, refs?: string[]]>,
|
|
46
|
+
): SubsystemRelation[] {
|
|
47
|
+
return spec.map(([from, to, relationType, refs], i) => ({
|
|
48
|
+
id: `r${i}`,
|
|
49
|
+
from,
|
|
50
|
+
to,
|
|
51
|
+
relationType,
|
|
52
|
+
refs,
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Story helper: one walkthrough whose hops derive Set B display edges. */
|
|
57
|
+
export function walkthroughFromHops(
|
|
58
|
+
id: string,
|
|
59
|
+
title: string,
|
|
60
|
+
hops: Array<[from: string, to: string, mechanism: SubsystemWalkthroughMechanism, file: string, line: number]>,
|
|
61
|
+
): SubsystemWalkthrough {
|
|
62
|
+
return {
|
|
63
|
+
id,
|
|
64
|
+
title,
|
|
65
|
+
steps: hops.map(([from, to, mechanism, file, line]) => ({
|
|
66
|
+
from,
|
|
67
|
+
to,
|
|
68
|
+
mechanism,
|
|
69
|
+
file,
|
|
70
|
+
line,
|
|
71
|
+
})),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** @deprecated story helper — prefer `relations` + `walkthroughFromHops`. */
|
|
25
76
|
export function edges(
|
|
26
77
|
spec: Array<[from: string, to: string, mechanism: SubsystemComponentEdge['mechanism'], refs?: string[]]>,
|
|
27
78
|
): SubsystemComponentEdge[] {
|
|
@@ -34,6 +85,40 @@ export function edges(
|
|
|
34
85
|
}));
|
|
35
86
|
}
|
|
36
87
|
|
|
88
|
+
/** Split mixed mechanism lists into relations + optional walkthrough for stories. */
|
|
89
|
+
export function graphSpecFromEdges(
|
|
90
|
+
spec: Array<[from: string, to: string, mechanism: SubsystemComponentEdge['mechanism'], refs?: string[]]>,
|
|
91
|
+
): { relations: SubsystemRelation[]; walkthroughs?: SubsystemWalkthrough[] } {
|
|
92
|
+
const rels: SubsystemRelation[] = [];
|
|
93
|
+
const hops: SubsystemWalkthrough['steps'] = [];
|
|
94
|
+
for (const [from, to, mechanism, refs] of spec) {
|
|
95
|
+
if (RELATION_TYPES.has(mechanism)) {
|
|
96
|
+
rels.push({
|
|
97
|
+
id: derivedGraphEdgeId(from, to, mechanism as SubsystemRelationType),
|
|
98
|
+
from,
|
|
99
|
+
to,
|
|
100
|
+
relationType: mechanism as SubsystemRelationType,
|
|
101
|
+
refs,
|
|
102
|
+
});
|
|
103
|
+
} else {
|
|
104
|
+
hops.push({
|
|
105
|
+
from,
|
|
106
|
+
to,
|
|
107
|
+
mechanism: mechanism as SubsystemWalkthroughMechanism,
|
|
108
|
+
file: 'story-placeholder.ts',
|
|
109
|
+
line: 1,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
relations: rels,
|
|
115
|
+
walkthroughs:
|
|
116
|
+
hops.length > 0
|
|
117
|
+
? [{ id: 'story-hops', title: 'Story hops', steps: hops }]
|
|
118
|
+
: undefined,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
37
122
|
export const readerDetail: GraphifyComponentDetail = {
|
|
38
123
|
kind: 'class',
|
|
39
124
|
methods: [
|
|
@@ -79,39 +164,28 @@ export const investigateOnlyComponents: SubsystemComponent[] = [
|
|
|
79
164
|
purl: 'pkg:github/principal-ai/agent-monitoring',
|
|
80
165
|
purpose: 'the subsystem\u2019s input type — a repo-normalized universal event the readers produce and the accumulator consumes',
|
|
81
166
|
symbol: 'RepoNormalizedUniversalAgentSessionEvent',
|
|
82
|
-
detail: {
|
|
83
|
-
kind: 'type',
|
|
84
|
-
properties: [
|
|
85
|
-
{ name: 'eventType', type: 'NormalizedEventType' },
|
|
86
|
-
{ name: 'sessionId', type: 'string' },
|
|
87
|
-
{ name: 'timestamp', type: 'number' },
|
|
88
|
-
],
|
|
89
|
-
usedBy: [{ nodeId: 'acc', name: 'accumulateToAgentSessionEvents', context: 'parameter_type' }],
|
|
90
|
-
implementors: [],
|
|
91
|
-
} satisfies GraphifyComponentDetail,
|
|
92
167
|
},
|
|
93
168
|
{
|
|
94
169
|
id: 'acc',
|
|
95
170
|
name: 'accumulateToAgentSessionEvents',
|
|
96
171
|
construct: 'function',
|
|
97
|
-
file: 'src/
|
|
172
|
+
file: 'src/accumulateToAgentSessionEvents.ts',
|
|
98
173
|
purl: 'pkg:github/principal-ai/agent-monitoring',
|
|
99
|
-
purpose: '
|
|
174
|
+
purpose: 'folds normalized events into agent session events',
|
|
100
175
|
symbol: 'accumulateToAgentSessionEvents',
|
|
101
176
|
},
|
|
102
177
|
{
|
|
103
178
|
id: 'out',
|
|
104
179
|
name: 'AgentSessionEvent',
|
|
105
180
|
construct: 'interface',
|
|
106
|
-
file: '
|
|
181
|
+
file: 'types/AgentSessionEvent.ts',
|
|
107
182
|
purl: 'pkg:github/principal-ai/agent-monitoring',
|
|
108
|
-
purpose: '
|
|
183
|
+
purpose: 'output event shape',
|
|
109
184
|
symbol: 'AgentSessionEvent',
|
|
110
|
-
|
|
185
|
+
declaration: {
|
|
111
186
|
kind: 'type',
|
|
112
187
|
properties: [
|
|
113
|
-
{ name: '
|
|
114
|
-
{ name: 'operation', type: 'AgentSessionEventOperation' },
|
|
188
|
+
{ name: 'sessionId', type: 'string' },
|
|
115
189
|
{ name: 'description', type: 'string' },
|
|
116
190
|
],
|
|
117
191
|
usedBy: [{ nodeId: 'acc', name: 'accumulateToAgentSessionEvents', context: 'return_type' }],
|
|
@@ -120,8 +194,18 @@ export const investigateOnlyComponents: SubsystemComponent[] = [
|
|
|
120
194
|
},
|
|
121
195
|
];
|
|
122
196
|
|
|
197
|
+
const investigateSpec = graphSpecFromEdges([
|
|
198
|
+
['v1', 'input', 'produces'],
|
|
199
|
+
['v2', 'input', 'produces'],
|
|
200
|
+
['input', 'acc', 'feeds'],
|
|
201
|
+
['acc', 'out', 'produces'],
|
|
202
|
+
]);
|
|
203
|
+
|
|
204
|
+
export const investigateOnlyRelations = investigateSpec.relations;
|
|
205
|
+
export const investigateOnlyWalkthroughs = investigateSpec.walkthroughs;
|
|
206
|
+
|
|
207
|
+
/** @deprecated use investigateOnlyRelations + investigateOnlyWalkthroughs */
|
|
123
208
|
export const investigateOnlyEdges: SubsystemComponentEdge[] = edges([
|
|
124
|
-
// Concept-level data flow — the LLM's semantic intent.
|
|
125
209
|
['v1', 'input', 'produces'],
|
|
126
210
|
['v2', 'input', 'produces'],
|
|
127
211
|
['input', 'acc', 'feeds'],
|
|
@@ -138,7 +138,7 @@ function verificationSummary(
|
|
|
138
138
|
const bits: string[] = [];
|
|
139
139
|
if (v.file) {
|
|
140
140
|
if (!v.file.exists) bits.push('file missing');
|
|
141
|
-
else if (v.file.symbolDeclared === false) bits.push('symbol not
|
|
141
|
+
else if (v.file.symbolDeclared === false) bits.push('symbol not in graphify');
|
|
142
142
|
else if (v.file.symbolDeclared === true) bits.push('file+symbol ok');
|
|
143
143
|
else bits.push('file exists');
|
|
144
144
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* FileDrawer — bottom panel that slides up from the bottom of the graph area
|
|
3
|
-
* to show file /
|
|
4
|
-
* declaration links, and
|
|
3
|
+
* to show file / walkthrough code. Opened by sidebar file-tree clicks,
|
|
4
|
+
* declaration links, and walkthrough step focus; content is injected as
|
|
5
5
|
* children by the graph component.
|
|
6
6
|
*/
|
|
7
7
|
|