Claude-skill-registry ai-elements-chatbot
shadcn/ui AI chat components for conversational interfaces. Use for streaming chat, tool/function displays, reasoning visualization, or encountering Next.js App Router setup, Tailwind v4 integration, AI SDK v5 migration errors.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/ai-elements-chatbot" ~/.claude/skills/majiayu000-claude-skill-registry-ai-elements-chatbot && rm -rf "$T"
manifest:
skills/data/ai-elements-chatbot/SKILL.mdsource content
AI Elements Chatbot Components
Status: Production Ready ✅ | Last Verified: 2025-11-18
What Is AI Elements?
Production-ready chat UI components for AI applications:
- Built on shadcn/ui
- 30+ components (Message, Conversation, Response, etc.)
- Works with Vercel AI SDK v5
- Streaming support
- Tool/function call displays
- Reasoning visualization
Quick Start (15 Minutes)
Prerequisites
- Next.js 15+ (App Router)
- shadcn/ui initialized
- Tailwind v4
- AI SDK v5+
1. Initialize
pnpm dlx ai-elements@latest init
2. Add Components
pnpm dlx ai-elements@latest add message conversation response prompt-input
3. Create Chat Interface
'use client'; import { useChat } from 'ai/react'; import { Conversation } from '@/components/ui/ai/conversation'; import { Message } from '@/components/ui/ai/message'; import { Response } from '@/components/ui/ai/response'; import { PromptInput } from '@/components/ui/ai/prompt-input'; export default function ChatPage() { const { messages, input, handleInputChange, handleSubmit } = useChat({ api: '/api/chat' }); return ( <div className="flex h-screen flex-col"> <Conversation> {messages.map((msg) => ( <Message key={msg.id} role={msg.role}> <Response markdown={msg.content} /> </Message> ))} </Conversation> <PromptInput value={input} onChange={handleInputChange} onSubmit={handleSubmit} /> </div> ); }
Load
for complete setup.references/setup-guide.md
Core Components
Message & Conversation
import { Conversation } from '@/components/ui/ai/conversation'; import { Message } from '@/components/ui/ai/message'; <Conversation> {messages.map((msg) => ( <Message key={msg.id} role={msg.role}> {msg.content} </Message> ))} </Conversation>
Response (Markdown)
import { Response } from '@/components/ui/ai/response'; <Response markdown={content} />
PromptInput
import { PromptInput } from '@/components/ui/ai/prompt-input'; <PromptInput value={input} onChange={handleInputChange} onSubmit={handleSubmit} />
CodeBlock
import { CodeBlock } from '@/components/ui/ai/code-block'; <CodeBlock code={code} language="typescript" />
Reasoning (Thinking)
import { Reasoning } from '@/components/ui/ai/reasoning'; <Reasoning content={thinking} />
Tool (Function Calls)
import { Tool } from '@/components/ui/ai/tool'; <Tool name="search" args={{ query: "..." }} result={result} />
Critical Rules
Always Do ✅
- Install shadcn/ui first (AI Elements requires it)
- Use Next.js App Router (Pages Router not supported)
- Use AI SDK v5 (breaking changes from v4)
- Install via CLI (
)pnpm dlx ai-elements@latest - Update components.json with registry
- Use client components ('use client' directive)
- Stream responses for better UX
- Handle loading states
- Add error boundaries
- Test on mobile
Never Do ❌
- Never install as npm package (components are copied)
- Never use Pages Router (only App Router)
- Never use AI SDK v4 (breaking changes)
- Never skip prerequisites (shadcn/ui, Tailwind)
- Never modify core types (extends shadcn types)
- Never use without streaming (defeats purpose)
- Never skip accessibility (ARIA labels)
- Never hardcode styles (use Tailwind)
- Never skip error handling (API failures)
- Never ignore mobile (responsive required)
Available Components (30+)
Core:
- Message
- Conversation
- Response
- PromptInput
Content:
- CodeBlock
- Markdown
- Tool
- Reasoning
- Sources
Actions:
- Actions
- CopyButton
- ShareButton
- RegenerateButton
Advanced:
- BranchNavigation
- ThinkingDisplay
- WebPreview
Common Use Cases
Use Case 1: Basic Chat
const { messages, input, handleInputChange, handleSubmit } = useChat(); return ( <> <Conversation> {messages.map(m => ( <Message key={m.id} role={m.role}> <Response markdown={m.content} /> </Message> ))} </Conversation> <PromptInput value={input} onChange={handleInputChange} onSubmit={handleSubmit} /> </> );
Use Case 2: With Tool Calls
{messages.map(m => ( <Message key={m.id} role={m.role}> {m.toolInvocations?.map(tool => ( <Tool key={tool.toolCallId} name={tool.toolName} args={tool.args} result={tool.result} /> ))} <Response markdown={m.content} /> </Message> ))}
Use Case 3: With Reasoning
<Message role="assistant"> {reasoning && <Reasoning content={reasoning} />} <Response markdown={content} /> </Message>
Use Case 4: With Code Blocks
<Response markdown={content}> {(node) => node.type === 'code' ? ( <CodeBlock code={node.value} language={node.lang} /> ) : null} </Response>
Use Case 5: With Sources
<Message role="assistant"> <Response markdown={content} /> <Sources sources={sources} /> </Message>
API Routes
Basic Streaming
// app/api/chat/route.ts import { streamText } from 'ai'; import { openai } from '@ai-sdk/openai'; export async function POST(req: Request) { const { messages } = await req.json(); const result = streamText({ model: openai('gpt-4'), messages }); return result.toDataStreamResponse(); }
With Tools
const result = streamText({ model: openai('gpt-4'), messages, tools: { search: { description: 'Search the web', parameters: z.object({ query: z.string() }), execute: async ({ query }) => { return await search(query); } } } });
When to Use AI Elements
Use when:
- Building ChatGPT-style interface
- Need production-ready components
- Using Vercel AI SDK
- Want streaming responses
- Need tool/function displays
- Want reasoning visualization
Don't use when:
- Not using Next.js App Router
- Don't have shadcn/ui
- Need Pages Router
- Building custom design system
Resources
References (
references/):
- All 8 AI Elements components with examplescomponent-catalog.md
- Complete integration examples and patternsexample-reference.md
- Step-by-step setup with Next.js 15 and shadcn/uisetup-guide.md
Templates (
templates/):
- Component examples available in reference files
Official Documentation
- AI Elements: https://ai-elements.vercel.app
- Components: https://ai-elements.vercel.app/docs/components
- Examples: https://github.com/ai-elements/ai-elements/tree/main/examples
Questions? Issues?
- Check
for complete setupreferences/setup-guide.md - Verify prerequisites (Next.js 15+, shadcn/ui, AI SDK v5)
- See official examples