{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "ai-sandbox",
  "title": "AI: Sandbox",
  "description": "A sandbox execution summary with status, tool output and expandable details.",
  "dependencies": [
    "@untitledui/icons@^0.0.23"
  ],
  "registryDependencies": [
    "@nx-ui/utils",
    "@nx-ui/collapsible",
    "@nx-ui/tabs",
    "@nx-ui/ai-tool",
    "@nx-ui/ai-types"
  ],
  "files": [
    {
      "path": "components/ai/sandbox.tsx",
      "content": "// Ported from vercel/ai-elements@6a9d5b1822ffb10bba4bd97175f01edd7d8651cd.\n\"use client\";\n\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from \"@/components/ui/collapsible\";\nimport {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from \"@/components/ui/tabs\";\nimport { cn } from \"@/lib/utils\";\nimport type { ToolUIPart } from \"./types\";\nimport { ChevronDown as ChevronDownIcon, Code01 as Code } from \"@untitledui/icons\";\nimport type { ComponentProps } from \"react\";\n\nimport { getStatusBadge } from \"./tool\";\n\nexport type SandboxRootProps = ComponentProps<typeof Collapsible>;\n\nexport const Sandbox = ({ className, ...props }: SandboxRootProps) => (\n  <Collapsible\n    className={cn(\n      \"not-prose group mb-4 w-full overflow-hidden rounded-md border\",\n      className\n    )}\n    defaultOpen\n    {...props}\n  />\n);\n\nexport interface SandboxHeaderProps {\n  title?: string;\n  state: ToolUIPart[\"state\"];\n  className?: string;\n}\n\nexport const SandboxHeader = ({\n  className,\n  title,\n  state,\n  ...props\n}: SandboxHeaderProps) => (\n  <CollapsibleTrigger\n    className={cn(\n      \"flex w-full items-center justify-between gap-4 p-3\",\n      className\n    )}\n    {...props}\n  >\n    <div className=\"flex items-center gap-2\">\n      <Code className=\"size-4 text-muted-foreground\" />\n      <span className=\"font-medium text-sm\">{title}</span>\n      {getStatusBadge(state)}\n    </div>\n    <ChevronDownIcon className=\"size-4 text-muted-foreground transition-transform group-data-[state=open]:rotate-180\" />\n  </CollapsibleTrigger>\n);\n\nexport type SandboxContentProps = ComponentProps<typeof CollapsibleContent>;\n\nexport const SandboxContent = ({\n  className,\n  ...props\n}: SandboxContentProps) => (\n  <CollapsibleContent\n    className={cn(\n      \"data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 outline-none data-[state=closed]:animate-out data-[state=open]:animate-in\",\n      className\n    )}\n    {...props}\n  />\n);\n\nexport type SandboxTabsProps = ComponentProps<typeof Tabs>;\n\nexport const SandboxTabs = ({ className, ...props }: SandboxTabsProps) => (\n  <Tabs className={cn(\"w-full gap-0\", className)} {...props} />\n);\n\nexport type SandboxTabsBarProps = ComponentProps<\"div\">;\n\nexport const SandboxTabsBar = ({\n  className,\n  ...props\n}: SandboxTabsBarProps) => (\n  <div\n    className={cn(\n      \"flex w-full items-center border-border border-t border-b\",\n      className\n    )}\n    {...props}\n  />\n);\n\nexport type SandboxTabsListProps = ComponentProps<typeof TabsList>;\n\nexport const SandboxTabsList = ({\n  className,\n  ...props\n}: SandboxTabsListProps) => (\n  <TabsList\n    className={cn(\"h-auto rounded-none border-0 bg-transparent p-0\", className)}\n    {...props}\n  />\n);\n\nexport type SandboxTabsTriggerProps = ComponentProps<typeof TabsTrigger>;\n\nexport const SandboxTabsTrigger = ({\n  className,\n  ...props\n}: SandboxTabsTriggerProps) => (\n  <TabsTrigger\n    className={cn(\n      \"rounded-none border-0 border-transparent border-b-2 px-4 py-2 font-medium text-muted-foreground text-sm transition-colors data-[state=active]:border-primary data-[state=active]:bg-transparent data-[state=active]:text-foreground data-[state=active]:shadow-none\",\n      className\n    )}\n    {...props}\n  />\n);\n\nexport type SandboxTabContentProps = ComponentProps<typeof TabsContent>;\n\nexport const SandboxTabContent = ({\n  className,\n  ...props\n}: SandboxTabContentProps) => (\n  <TabsContent className={cn(\"mt-0 text-sm\", className)} {...props} />\n);\n",
      "type": "registry:ui",
      "target": "components/ai/sandbox.tsx"
    }
  ],
  "type": "registry:ui"
}