"use client"
import {
CodeBlock,
CodeBlockBody,
CodeBlockContent,
CodeBlockCopyButton,
CodeBlockFilename,
CodeBlockFiles,
CodeBlockHeader,
CodeBlockItem,
CodeBlockSelect,
CodeBlockSelectItem,
} from "@/registry/new-york/ai-elements/code-block"
export default function CodeBlockMultipleFilesDemo() {
const codeData = [
{
language: "typescript",
filename: "Button.tsx",
code: `import { type ReactNode } from "react"
interface ButtonProps {
children: ReactNode
onClick?: () => void
variant?: "primary" | "secondary"
}
export function Button({ children, onClick, variant = "primary" }: ButtonProps) {
return (
<button
onClick={onClick}
className={\`btn btn-\${variant}\`}
>
{children}
</button>
)
}`,
},
{
language: "typescript",
filename: "Input.tsx",
code: `import { type InputHTMLAttributes } from "react"
interface InputProps extends InputHTMLAttributes<HTMLInputElement> {
label?: string
error?: string
}
export function Input({ label, error, ...props }: InputProps) {
return (
<div className="input-wrapper">
{label && <label>{label}</label>}
<input {...props} />
{error && <span className="error">{error}</span>}
</div>
)
}`,
},
{
language: "css",
filename: "styles.css",
code: `.btn {
padding: 0.5rem 1rem;
border-radius: 0.375rem;
font-weight: 500;
transition: all 0.2s;
}
.btn-primary {
background-color: #3b82f6;
color: white;
}
.btn-secondary {
background-color: #6b7280;
color: white;
}`,
},
]
return (
<CodeBlock data={codeData} defaultValue={codeData[0].filename}>
<CodeBlockHeader>
<CodeBlockFiles>
{(item) => (
<CodeBlockFilename key={item.filename} value={item.filename}>
{item.filename}
</CodeBlockFilename>
)}
</CodeBlockFiles>
<CodeBlockSelect>
{(item) => (
<CodeBlockSelectItem key={item.filename} id={item.filename}>
{item.filename}
</CodeBlockSelectItem>
)}
</CodeBlockSelect>
<CodeBlockCopyButton
onCopy={() => console.log("Copied code to clipboard")}
onError={() => console.error("Failed to copy code to clipboard")}
/>
</CodeBlockHeader>
<CodeBlockBody>
{(item) => (
<CodeBlockItem key={item.filename} value={item.filename}>
<CodeBlockContent language={item.language as any}>
{item.code}
</CodeBlockContent>
</CodeBlockItem>
)}
</CodeBlockBody>
</CodeBlock>
)
}