Skip to content

Commit c268375

Browse files
kkratterfclaude
andcommitted
fix(playground): make header/footer sticky, scroll only content
- Header, Examples bar, Output header, and StatusBar are now sticky - Only the Editor textarea and Output panel content scroll - Use h-screen overflow-hidden on root, shrink-0 on fixed elements Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 678d15b commit c268375

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

packages/playground/src/App.tsx

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -61,31 +61,36 @@ function App() {
6161

6262
return (
6363
<ToastProvider position="bottom-right">
64-
<div className="min-h-screen flex flex-col bg-background">
64+
<div className="flex flex-col bg-background h-screen overflow-hidden">
6565
<LoadingOverlay isVisible={compiler.isLoading} />
6666

67+
{/* Sticky Header */}
6768
<Header
6869
onRun={handleRun}
6970
onShare={handleShare}
7071
isCompiling={compiler.status === 'compiling'}
7172
/>
7273

73-
<div className="flex-1 grid grid-cols-1 md:grid-cols-2 min-h-0">
74+
{/* Main content area - fills remaining space */}
75+
<div className="flex-1 grid grid-cols-1 md:grid-cols-2 min-h-0 overflow-hidden">
7476
{/* Editor Panel */}
75-
<div className="flex flex-col border-r border-border min-h-0">
76-
<div className="px-4 py-2.5 bg-card flex justify-between items-center border-b border-border">
77-
<span className="font-medium text-sm text-foreground">FratmScript</span>
77+
<div className="flex flex-col border-border border-r min-h-0 overflow-hidden">
78+
{/* Sticky panel header */}
79+
<div className="flex justify-between items-center bg-card px-4 py-2.5 border-border border-b shrink-0">
80+
<span className="font-medium text-muted-foreground text-sm">JavaScript ma comme si deve</span>
7881
<Badge variant="outline">v{compiler.version}</Badge>
7982
</div>
80-
<div className="flex-1 min-h-0 bg-background">
83+
{/* Scrollable editor */}
84+
<div className="flex-1 bg-background min-h-0 overflow-auto">
8185
<Editor
8286
value={code}
8387
onChange={setCode}
8488
onRun={handleRun}
8589
/>
8690
</div>
87-
<div className="px-4 py-2.5 bg-card border-t border-border flex items-center gap-3">
88-
<label className="text-xs text-muted-foreground">Examples:</label>
91+
{/* Sticky examples bar */}
92+
<div className="flex items-center gap-3 bg-card px-4 py-2.5 border-border border-t shrink-0">
93+
<label className="text-muted-foreground text-xs">Examples:</label>
8994
<NativeSelect
9095
value={selectedExample}
9196
onChange={handleExampleChange}
@@ -103,11 +108,13 @@ function App() {
103108
</div>
104109

105110
{/* Output Panel */}
106-
<div className="flex flex-col min-h-0">
107-
<div className="px-4 py-2.5 bg-card flex items-center border-b border-border">
108-
<span className="font-medium text-sm text-foreground">Output</span>
111+
<div className="flex flex-col min-h-0 overflow-hidden">
112+
{/* Sticky output header */}
113+
<div className="flex items-center bg-card px-4 py-2.5 border-border border-b shrink-0">
114+
<span className="font-medium text-foreground text-sm">Output</span>
109115
</div>
110-
<div className="flex-1 min-h-0 bg-background overflow-auto">
116+
{/* Scrollable output content */}
117+
<div className="flex-1 bg-background min-h-0 overflow-auto">
111118
<OutputPanel
112119
jsOutput={compiler.jsOutput}
113120
consoleLogs={compiler.consoleLogs}
@@ -117,6 +124,7 @@ function App() {
117124
</div>
118125
</div>
119126

127+
{/* Sticky StatusBar */}
120128
<StatusBar
121129
status={compiler.status}
122130
statusText={compiler.statusText}

0 commit comments

Comments
 (0)