import { useEffect, useRef, useState } from 'react' import { useStore } from '@tanstack/react-store' import { Store } from '@tanstack/store' import { Send, X, ChevronRight, BotIcon } from 'lucide-react' import { Streamdown } from 'streamdown' import { useGuitarRecommendationChat } from '#/lib/demo-ai-hook' import type { ChatMessages } from '#/lib/demo-ai-hook' import GuitarRecommendation from './demo-GuitarRecommendation' export const showAIAssistant = new Store(false) function Messages({ messages }: { messages: ChatMessages }) { const messagesContainerRef = useRef(null) useEffect(() => { if (messagesContainerRef.current) { messagesContainerRef.current.scrollTop = messagesContainerRef.current.scrollHeight } }, [messages]) if (!messages.length) { return (
Ask me anything! I'm here to help.
) } return (
{messages.map(({ id, role, parts }) => (
{parts.map((part, index) => { if (part.type === 'text' && part.content) { return (
{role === 'assistant' ? (
AI
) : (
Y
)}
{part.content}
) } if ( part.type === 'tool-call' && part.name === 'recommendGuitar' && part.output ) { return (
) } })}
))}
) } export default function AIAssistant() { const isOpen = useStore(showAIAssistant, (state) => state) const { messages, sendMessage } = useGuitarRecommendationChat() const [input, setInput] = useState('') return (
{isOpen && (

AI Assistant

{ e.preventDefault() if (input.trim()) { sendMessage(input) setInput('') } }} >