āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā š shadcn/directory/elevenlabs/ui/components/voice-picker ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā
<ComponentPreview name="voice-picker-demo" description="A voice picker component for selecting a voice from a list of voices" />
npx @elevenlabs/cli@latest components add voice-picker
</TabsContent>
<TabsContent value="manual">
<Steps>
<Step>Install the following dependencies:</Step>
npm install @elevenlabs/elevenlabs-js
<Step>Copy and paste the following code into your project.</Step>
<ComponentSource name="voice-picker" title="components/ui/voice-picker.tsx" /><Step>Update the import paths to match your project setup.</Step>
</Steps> </TabsContent> </CodeTabs>import { VoicePicker } from "@/components/ui/voice-picker"
import { ElevenLabs } from "@elevenlabs/elevenlabs-js"
const voices: ElevenLabs.Voice[] = [
{
voice_id: "21m00Tcm4TlvDq8ikWAM",
name: "Rachel",
preview_url: "https://example.com/rachel-preview.mp3",
// ... other voice properties
},
// ... more voices
]
const [selectedVoice, setSelectedVoice] = useState("")
<VoicePicker
voices={voices}
value={selectedVoice}
onValueChange={setSelectedVoice}
/>
import { VoicePicker } from "@/components/ui/voice-picker"
export default ({ voices, selectedVoice, setSelectedVoice }) => (
<>
{/* Controlled */}
<VoicePicker
voices={voices}
value={selectedVoice}
onValueChange={setSelectedVoice}
/>
{/* Uncontrolled */}
<VoicePicker
voices={voices}
onValueChange={(voiceId) => console.log("Selected:", voiceId)}
/>
</>
)
const [open, setOpen] = useState(false)
<VoicePicker
voices={voices}
open={open}
onOpenChange={setOpen}
value={selectedVoice}
onValueChange={setSelectedVoice}
/>
<VoicePicker
voices={voices}
placeholder="Choose your voice..."
value={selectedVoice}
onValueChange={setSelectedVoice}
/>
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js"
const [voices, setVoices] = useState<ElevenLabs.Voice[]>([])
useEffect(() => {
const client = new ElevenLabsClient({
apiKey: process.env.ELEVENLABS_API_KEY,
})
client.voices.getAll().then((response) => {
setVoices(response.voices)
})
}, [])
<VoicePicker
voices={voices}
value={selectedVoice}
onValueChange={setSelectedVoice}
/>
A searchable dropdown for selecting ElevenLabs voices with audio preview and orb visualization.
| Prop | Type | Default | Description |
| ------------- | ------------------------- | --------------------- | ------------------------------------------- |
| voices | ElevenLabs.Voice[] | - | Required. Array of ElevenLabs voices |
| value | string | - | Selected voice ID (controlled) |
| onValueChange | (value: string) => void | - | Callback when selection changes |
| placeholder | string | "Select a voice..." | Placeholder text when no voice selected |
| className | string | - | Optional CSS classes for the trigger button |
| open | boolean | - | Control popover open state |
| onOpenChange | (open: boolean) => void | - | Callback when popover open state changes |
@elevenlabs/elevenlabs-js for ElevenLabs Voice typesvalue/onValueChange) and uncontrolled modesopen/onOpenChange propsā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā