music-player-01
elevenlabs/music-player-01FreeBlock
Music player with playlist
Install it
npx shadcn@latest add https://raw.githubusercontent.com/elevenlabs/ui/main/apps/www/public/r/music-player-01.jsonSource
1"use client"23import { PauseIcon, PlayIcon } from "lucide-react"45import { cn } from "@/lib/utils"6import {7 AudioPlayerButton,8 AudioPlayerDuration,9 AudioPlayerProgress,10 AudioPlayerProvider,11 AudioPlayerTime,12 exampleTracks,13 useAudioPlayer,14} from "@/components/ui/audio-player"15import { Button } from "@/components/ui/button"16import { Card } from "@/components/ui/card"17import { ScrollArea } from "@/components/ui/scroll-area"1819interface Track {20 id: string21 name: string22 url: string23}2425export default function Page() {26 return (27 <AudioPlayerProvider<Track>>28 <MusicPlayer />29 </AudioPlayerProvider>30 )31}3233const MusicPlayer = () => {34 return (35 <Card className="mx-auto w-full overflow-hidden p-0">36 <div className="flex flex-col lg:h-[180px] lg:flex-row">37 <div className="bg-muted/50 flex flex-col overflow-hidden lg:h-full lg:w-64">38 <ScrollArea className="h-48 w-full lg:h-full">39 <div className="space-y-1 p-3">40 {exampleTracks.map((song, index) => (41 <SongListItem42 key={song.id}43 song={song}44 trackNumber={index + 1}45 />46 ))}47 </div>48 </ScrollArea>49 </div>50 <Player />51 </div>52 </Card>53 )54}5556const Player = () => {57 const player = useAudioPlayer<Track>()5859 return (60 <div className="flex flex-1 items-center p-4 sm:p-6">61 <div className="mx-auto w-full max-w-2xl">62 <div className="mb-4">63 <h3 className="text-base font-semibold sm:text-lg">64 {player.activeItem?.data?.name ?? "No track selected"}65 </h3>66 </div>67 <div className="flex items-center gap-3 sm:gap-4">68 <AudioPlayerButton69 variant="outline"70 size="default"71 className="h-12 w-12 shrink-0 sm:h-10 sm:w-10"72 disabled={!player.activeItem}73 />74 <div className="flex flex-1 items-center gap-2 sm:gap-3">75 <AudioPlayerTime className="text-xs tabular-nums" />76 <AudioPlayerProgress className="flex-1" />77 <AudioPlayerDuration className="text-xs tabular-nums" />78 </div>79 </div>80 </div>81 </div>82 )83}8485const SongListItem = ({86 song,87 trackNumber,88}: {89 song: Track90 trackNumber: number91}) => {92 const player = useAudioPlayer<Track>()93 const isActive = player.isItemActive(song.id)94// … truncated
What it pulls in
Other registry items
Files it writes
More from shadcn/ui
All 50 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| music-player-02music-player-02 | shadcn/ui | Blocks | Free | no deps | |
| pong-01pong-01 | shadcn/ui | Blocks | Free | 1 dep · 6 files | |
| realtime-transcriber-01realtime-transcriber-01 | shadcn/ui | Blocks | Free | 2 deps · 3 files | |
| speaker-01speaker-01 | shadcn/ui | Blocks | Free | no deps · 2 files | |
| transcriber-01transcriber-01 | shadcn/ui | Blocks | Free | 2 deps · 2 files | |
| voice-chat-01voice-chat-01 | shadcn/ui | Blocks | Free | 1 dep | |
| voice-chat-02voice-chat-02 | shadcn/ui | Blocks | Free | 2 deps | |
| voice-chat-03voice-chat-03 | shadcn/ui | Blocks | Free | 1 dep |
