conversation-bar
elevenlabs/conversation-barFreeComponent
shadcn/ui publishes no description for this item.
Install it
npx shadcn@latest add https://raw.githubusercontent.com/elevenlabs/ui/main/apps/www/public/r/conversation-bar.jsonSource
1"use client"23import * as React from "react"4import {5 useConversationControls,6 useConversationInput,7 useConversationStatus,8} from "@elevenlabs/react"9import {10 ArrowUpIcon,11 ChevronDown,12 Keyboard,13 Mic,14 MicOff,15 PhoneIcon,16 XIcon,17} from "lucide-react"1819import { cn } from "@/lib/utils"20import { Button } from "@/components/ui/button"21import { Card } from "@/components/ui/card"22import { LiveWaveform } from "@/components/ui/live-waveform"23import { Separator } from "@/components/ui/separator"24import { Textarea } from "@/components/ui/textarea"2526export interface ConversationBarProps {27 /**28 * ElevenLabs Agent ID to connect to29 */30 agentId: string3132 /**33 * Custom className for the container34 */35 className?: string3637 /**38 * Custom className for the waveform39 */40 waveformClassName?: string4142 /**43 * Callback when user sends a message44 */45 onSendMessage?: (message: string) => void46}4748export const ConversationBar = React.forwardRef<49 HTMLDivElement,50 ConversationBarProps51>(({ agentId, className, waveformClassName, onSendMessage }, ref) => {52 const { status } = useConversationStatus()53 const { startSession, endSession, sendUserMessage, sendContextualUpdate } =54 useConversationControls()55 const { isMuted, setMuted } = useConversationInput()56 const [keyboardOpen, setKeyboardOpen] = React.useState(false)57 const [textInput, setTextInput] = React.useState("")58 const mediaStreamRef = React.useRef<MediaStream | null>(null)5960 const isConnected = status === "connected"6162 const getMicStream = React.useCallback(async () => {63 if (mediaStreamRef.current) return mediaStreamRef.current6465 const stream = await navigator.mediaDevices.getUserMedia({ audio: true })66 mediaStreamRef.current = stream6768 return stream69 }, [])7071 const startConversation = React.useCallback(async () => {72 try {73 await getMicStream()7475 startSession({76 agentId,77 connectionType: "webrtc",78 })79 } catch (error) {80 console.error("Error starting conversation:", error)81 }82 }, [getMicStream, agentId, startSession])8384 const handleEndSession = React.useCallback(() => {85 endSession()8687 if (mediaStreamRef.current) {88 mediaStreamRef.current.getTracks().forEach((t) => t.stop())89 mediaStreamRef.current = null90 }91 }, [endSession])9293 const toggleMute = React.useCallback(() => {94 setMuted(!isMuted)95 }, [isMuted, setMuted])9697 const handleStartOrEnd = React.useCallback(() => {98// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from shadcn/ui
All 50 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| audio-playeraudio-player | shadcn/ui | Components | Free | 2 deps | |
| bar-visualizerbar-visualizer | shadcn/ui | Components | Free | no deps | |
| conversationconversation | shadcn/ui | Components | Free | 1 dep | |
| live-waveformlive-waveform | shadcn/ui | Components | Free | no deps | |
| matrixmatrix | shadcn/ui | Components | Free | no deps | |
| messagemessage | shadcn/ui | Components | Free | 1 dep | |
| mic-selectormic-selector | shadcn/ui | Components | Free | no deps | |
| orborb | shadcn/ui | Components | Free | 4 deps |
