promptCompare
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Viewing readonly version of main branch: v148View latest version
A collapsible container for displaying AI-generated code and output in chat interfaces.
The Sandbox component provides a structured way to display AI-generated code
alongside its execution output in chat conversations. It features a collapsible
container with status indicators and tabbed navigation between code and output
views. It's designed to be used with CodeBlock for displaying code and
StackTrace for displaying errors.
See scripts/sandbox.tsx for this example.
npx ai-elements@latest add sandbox
- Collapsible container with smooth animations
- Status badges showing execution state (Pending, Running, Completed, Error)
- Tabs for Code and Output views
- Syntax-highlighted code display
- Copy button for easy code sharing
- Works with AI SDK tool state patterns
The Sandbox component integrates with the AI SDK's tool state to show code generation progress:
"use client";
import type { ToolUIPart } from "ai";
import {
Sandbox,
SandboxContent,
SandboxHeader,
SandboxTabContent,
SandboxTabs,
SandboxTabsBar,
SandboxTabsList,
SandboxTabsTrigger,
} from "@/components/ai-elements/sandbox";
import { CodeBlock } from "@/components/ai-elements/code-block";
type CodeSandboxProps = {
toolPart: ToolUIPart;
};
export const CodeSandbox = ({ toolPart }: CodeSandboxProps) => {
const code = toolPart.input?.code ?? "";
const output = toolPart.output?.logs ?? "";
return (
<Sandbox>
<SandboxHeader
state={toolPart.state}
title={toolPart.input?.filename ?? "code.tsx"}
/>
<SandboxContent>
<SandboxTabs defaultValue="code">
<SandboxTabsBar>
<SandboxTabsList>
<SandboxTabsTrigger value="code">Code</SandboxTabsTrigger>
<SandboxTabsTrigger value="output">Output</SandboxTabsTrigger>
</SandboxTabsList>
</SandboxTabsBar>
<SandboxTabContent value="code">
<CodeBlock code={code} language="tsx" />
</SandboxTabContent>
<SandboxTabContent value="output">
<CodeBlock code={output} language="log" />
</SandboxTabContent>
</SandboxTabs>
</SandboxContent>
</Sandbox>
);
};
| Prop | Type | Default | Description |
|---|---|---|---|
...props | React.ComponentProps<typeof Collapsible> | - | Any other props are spread to the underlying Collapsible component. |
| Prop | Type | Default | Description |
|---|---|---|---|
title | string | undefined | The title displayed in the header (e.g., filename). |
state | ToolUIPart[ | Required | The current execution state, used to display the appropriate status badge. |
className | string | - | Additional CSS classes for the header. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | React.ComponentProps<typeof CollapsibleContent> | - | Any other props are spread to the CollapsibleContent. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | React.ComponentProps<typeof Tabs> | - | Any other props are spread to the underlying Tabs component. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | React.HTMLAttributes<HTMLDivElement> | - | Any other props are spread to the container div. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | React.ComponentProps<typeof TabsList> | - | Any other props are spread to the underlying TabsList component. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | React.ComponentProps<typeof TabsTrigger> | - | Any other props are spread to the underlying TabsTrigger component. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | React.ComponentProps<typeof TabsContent> | - | Any other props are spread to the underlying TabsContent component. |