Skip to content

Commit 0bf88e7

Browse files
committed
Integrate CallStackDisplay and CallInfoPanel into TraceViewer
The components were exported from programs-react but never rendered in the web package's TraceViewer. Add them to the layout: call stack breadcrumb in the header, call info panel at the top of the right sidebar.
1 parent 09be8e0 commit 0bf88e7

4 files changed

Lines changed: 148 additions & 0 deletions

File tree

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
.call-info-panel {
2+
font-size: 0.9em;
3+
}
4+
5+
.call-info-banner {
6+
padding: 6px 10px;
7+
border-radius: 4px;
8+
font-weight: 500;
9+
margin-bottom: 6px;
10+
}
11+
12+
.call-info-banner-invoke {
13+
background: var(--programs-invoke-bg, #e8f4fd);
14+
color: var(--programs-invoke-text, #0969da);
15+
border-left: 3px solid var(--programs-invoke-accent, #0969da);
16+
}
17+
18+
.call-info-banner-return {
19+
background: var(--programs-return-bg, #dafbe1);
20+
color: var(--programs-return-text, #1a7f37);
21+
border-left: 3px solid var(--programs-return-accent, #1a7f37);
22+
}
23+
24+
.call-info-banner-revert {
25+
background: var(--programs-revert-bg, #ffebe9);
26+
color: var(--programs-revert-text, #cf222e);
27+
border-left: 3px solid var(--programs-revert-accent, #cf222e);
28+
}
29+
30+
.call-info-refs {
31+
display: flex;
32+
flex-direction: column;
33+
gap: 4px;
34+
padding: 4px 0;
35+
}
36+
37+
.call-info-ref {
38+
display: flex;
39+
align-items: baseline;
40+
gap: 6px;
41+
padding: 2px 0;
42+
}
43+
44+
.call-info-ref-label {
45+
font-weight: 500;
46+
color: var(--programs-text-muted, #888);
47+
min-width: 80px;
48+
text-align: right;
49+
flex-shrink: 0;
50+
}
51+
52+
.call-info-ref-resolved {
53+
font-family: monospace;
54+
font-size: 0.9em;
55+
word-break: break-all;
56+
}
57+
58+
.call-info-ref-error {
59+
color: var(--programs-error, #cf222e);
60+
font-style: italic;
61+
}
62+
63+
.call-info-ref-pending {
64+
color: var(--programs-text-muted, #888);
65+
font-style: italic;
66+
}
67+
68+
.call-info-ref-pointer {
69+
margin-top: 2px;
70+
}
71+
72+
.call-info-ref-pointer summary {
73+
cursor: pointer;
74+
color: var(--programs-text-muted, #888);
75+
font-size: 0.85em;
76+
}
77+
78+
.call-info-ref-pointer-json {
79+
font-size: 0.8em;
80+
padding: 4px 8px;
81+
background: var(--programs-bg-code, #f6f8fa);
82+
border-radius: 3px;
83+
overflow-x: auto;
84+
max-height: 200px;
85+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
.call-stack {
2+
font-size: 0.85em;
3+
padding: 4px 8px;
4+
}
5+
6+
.call-stack-empty {
7+
color: var(--programs-text-muted, #888);
8+
}
9+
10+
.call-stack-breadcrumb {
11+
display: flex;
12+
flex-wrap: wrap;
13+
align-items: center;
14+
gap: 2px;
15+
}
16+
17+
.call-stack-separator {
18+
color: var(--programs-text-muted, #888);
19+
user-select: none;
20+
}
21+
22+
.call-stack-frame {
23+
display: inline-flex;
24+
align-items: center;
25+
background: none;
26+
border: 1px solid transparent;
27+
border-radius: 3px;
28+
padding: 1px 4px;
29+
cursor: pointer;
30+
font-family: inherit;
31+
font-size: inherit;
32+
color: var(--programs-link, #0366d6);
33+
}
34+
35+
.call-stack-frame:hover {
36+
background: var(--programs-bg-hover, rgba(0, 0, 0, 0.05));
37+
border-color: var(--programs-border, #ddd);
38+
}
39+
40+
.call-stack-name {
41+
font-weight: 500;
42+
}
43+
44+
.call-stack-parens {
45+
color: var(--programs-text-muted, #888);
46+
}

packages/web/src/theme/ProgramExample/TraceViewer.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import {
1212
TraceProgress,
1313
VariableInspector,
1414
StackInspector,
15+
CallStackDisplay,
16+
CallInfoPanel,
1517
useTraceContext,
1618
type TraceStep,
1719
} from "@ethdebug/programs-react";
@@ -20,6 +22,8 @@ import {
2022
import "./TraceViewer.css";
2123
import "./TraceControls.css";
2224
import "./VariableInspector.css";
25+
import "./CallStackDisplay.css";
26+
import "./CallInfoPanel.css";
2327

2428
export interface TraceViewerProps {
2529
/** The execution trace */
@@ -97,6 +101,7 @@ function TraceViewerContent({
97101
<div className="trace-viewer-header">
98102
<TraceControls showStepCount={true} showOpcode={true} />
99103
<TraceProgress />
104+
<CallStackDisplay />
100105
</div>
101106

102107
<div className="trace-viewer-body">
@@ -118,6 +123,8 @@ function TraceViewerContent({
118123
</div>
119124

120125
<div className="trace-viewer-right">
126+
<CallInfoPanel />
127+
121128
{showVariables && (
122129
<div className="trace-viewer-panel variables-panel">
123130
<h4 className="panel-title">Variables</h4>

packages/web/src/theme/ProgramExample/index.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,19 @@ export {
1717
TraceProgress,
1818
VariableInspector,
1919
StackInspector,
20+
CallStackDisplay,
21+
CallInfoPanel,
2022
type TraceState,
2123
type TraceProviderProps,
2224
type ResolvedVariable,
25+
type ResolvedCallInfo,
26+
type ResolvedPointerRef,
2327
type TraceControlsProps,
2428
type TraceProgressProps,
2529
type VariableInspectorProps,
2630
type StackInspectorProps,
31+
type CallStackDisplayProps,
32+
type CallInfoPanelProps,
2733
} from "@ethdebug/programs-react";
2834

2935
// Also re-export utilities for convenience
@@ -33,12 +39,16 @@ export {
3339
createMockTrace,
3440
findInstructionAtPc,
3541
extractVariablesFromInstruction,
42+
extractCallInfoFromInstruction,
3643
buildPcToInstructionMap,
44+
buildCallStack,
3745
type DynamicInstruction,
3846
type DynamicContext,
3947
type ContextThunk,
4048
type TraceStep,
4149
type MockTraceSpec,
50+
type CallInfo,
51+
type CallFrame,
4252
} from "@ethdebug/programs-react";
4353

4454
// Local Docusaurus-specific components

0 commit comments

Comments
 (0)