{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "z-ai-status",
  "title": "Z Ai Status",
  "dependencies": [
    "@heroicons/react@2.2.0",
    "ai@6.0.116"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://ui.orchid.ai/r/orchid-foundation.json",
    "https://ui.orchid.ai/r/orchid-theme.json",
    "https://ui.orchid.ai/r/z-button.json"
  ],
  "files": [
    {
      "path": "registry/ui/orchid/spectrum/atoms/z-ai-status/z-ai-status.tsx",
      "content": "\"use client\";\nimport { ChevronRightIcon } from '@heroicons/react/16/solid';\nimport ZButton from \"../z-button/z-button\";\nimport type { ComponentProps } from 'react';\nimport type { ToolUIPart } from 'ai';\nimport { cn } from \"../../../lib/ui-utils\";\nimport { useState } from 'react';\nexport type AIStatus = 'thinking' | 'complete' | 'error';\nexport type ZAiStatusProps = ComponentProps<'div'> & {\n    title: string;\n    status?: AIStatus;\n    errorText?: string;\n    errorOutput?: unknown;\n};\nconst getStatusIndicator = (status?: AIStatus) => {\n    switch (status) {\n        case 'thinking':\n            return 'bg-ai animate-pulse-size';\n        case 'complete':\n            return 'bg-neutral-inverse/30';\n        case 'error':\n            return 'bg-danger';\n        default:\n            return 'bg-surface-strong';\n    }\n};\nexport const ZAiStatus = ({ className, title, status, errorText: _errorText, errorOutput: _errorOutput, children, ...props }: ZAiStatusProps) => {\n    const [isExpanded, setIsExpanded] = useState(false);\n    const hasContent = Boolean(children);\n    const toggleExpanded = (e: React.MouseEvent<HTMLElement>) => {\n        e.preventDefault();\n        e.stopPropagation();\n        setIsExpanded(!isExpanded);\n    };\n    const statusContent = (<div className=\"flex items-center gap-2\">\n      <div className={cn(getStatusIndicator(status), 'size-2 rounded-full')}/>\n      <span className=\"text-copy text-neutral-subtle\">{title}</span>\n    </div>);\n    return (<div className={cn('not-prose text-neutral w-full', status === 'complete' && 'prose-success', className)} {...props}>\n      {hasContent ? (<ZButton variant=\"transparent\" onClick={toggleExpanded}>\n          <div className=\"flex items-center gap-1\">\n            {statusContent}\n            <ChevronRightIcon className={cn('size-4 transition-transform duration-200 ease-out', isExpanded && 'rotate-90')}/>\n          </div>\n        </ZButton>) : (<div className=\"px-2 py-1\">{statusContent}</div>)}\n\n      {hasContent && (<div className={cn('grid overflow-hidden transition-[grid-template-rows] duration-200 ease-out', isExpanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]')}>\n          <div className=\"min-h-0\">\n            <div className=\"pt-2\">{children}</div>\n          </div>\n        </div>)}\n    </div>);\n};\nexport const mapToolUIPartToAIStatus = (state?: ToolUIPart['state']): AIStatus => {\n    switch (state) {\n        case 'input-streaming':\n            return 'thinking';\n        case 'input-available':\n            return 'thinking';\n        case 'output-available':\n            return 'complete';\n        case 'output-error':\n            return 'error';\n        default:\n            return 'thinking';\n    }\n};\nexport default ZAiStatus;\n",
      "type": "registry:ui",
      "target": "@ui/orchid/spectrum/atoms/z-ai-status/z-ai-status.tsx"
    }
  ],
  "type": "registry:ui"
}