Audio Queue

PreviousNext

Composable queue management components with shuffle, repeat, and track selection.

A comprehensive queue management system. Includes shuffle, repeat modes, track selection, search, and drag-and-drop reordering.

Installation

pnpm dlx shadcn@latest add @audio/queue

Usage

Import the components you need:

import {
  AudioQueue,
  AudioQueueButton,
  AudioQueuePreferences,
  AudioQueueRepeatMode,
  AudioQueueShuffle,
} from "@/components/audio/queue"

Basic Queue

The AudioQueue component opens a dialog showing the current queue with search functionality and track selection.

<AudioPlayer>
  <AudioPlayerControlBar>
    <AudioQueue />
  </AudioPlayerControlBar>
</AudioPlayer>

Queue with Shuffle and Repeat

Use this when you want quick access to shuffle and repeat controls. The toggle buttons provide fast switching between modes.

<AudioPlayer>
  <AudioPlayerControlBar>
    <AudioQueueShuffle />
    <AudioQueueRepeatMode />
    <AudioQueue />
  </AudioPlayerControlBar>
</AudioPlayer>

Queue with Preferences

Use this when you want a compact interface with all queue settings in a dropdown menu. Ideal for space-constrained layouts.

<AudioPlayer>
  <AudioPlayerControlBar>
    <AudioQueuePreferences />
    <AudioQueue />
  </AudioPlayerControlBar>
</AudioPlayer>

Queue with All Controls

Use this when you want both quick access buttons and a preferences menu. Provides the most comprehensive queue management interface.

<AudioPlayer tracks={tracks}>
  <AudioPlayerControlBar>
    <AudioQueueShuffle />
    <AudioQueueRepeatMode />
    <AudioQueuePreferences />
    <AudioQueue />
  </AudioPlayerControlBar>
</AudioPlayer>

API Reference

AudioQueue

A dialog component that displays the current queue and allows track selection, search, and reordering.

Props

PropTypeDefaultDescription
onTrackSelect(index: number) => void-Callback function to handle track selection. Receives the index of the selected track.
searchPlaceholderstring"Search for a track..."Placeholder text for the search input.
emptyLabelstring"No tracks found"Label to display when the queue is empty.
emptyDescriptionstring"Try searching for a different track"Description to display when the queue is empty.

Features

  • Search: Filter tracks by title or artist
  • Track selection: Click to play or pause current track
  • Drag and drop: Reorder tracks when not searching
  • Remove tracks: Remove individual tracks from queue
  • Clear queue: Button to clear all tracks

Search and Drag-and-Drop: Search functionality filters tracks by title or artist. Track reordering is automatically disabled when search is active to prevent confusion. The queue dialog automatically closes when a track is selected.

Example

<AudioQueue
  onTrackSelect={(index) => {
    console.log("Selected track at index:", index);
  }}
  searchPlaceholder="Search tracks..."
  emptyLabel="Queue is empty"
  emptyDescription="Add tracks to the queue to see them here"
/>

AudioQueueButton

A button component with optional tooltip support, used internally by queue components.

Props

PropTypeDefaultDescription
tooltipbooleanfalseWhether to show a tooltip.
tooltipLabelstring-Tooltip text to display.

Example

<AudioQueueButton
  tooltip
  tooltipLabel="Open queue"
  variant="outline"
  size="icon"
>
  <ListMusicIcon />
</AudioQueueButton>

AudioQueueRepeatMode

A toggle button that cycles through repeat modes: none, one, all.

Props

Inherits all props from Toggle component.

Behavior

  • None: No repeat (default)
  • One: Repeat current track indefinitely
  • All: Repeat entire queue

The button shows different icons based on the current mode:

  • RepeatIcon for "all" mode
  • Repeat1Icon for "one" mode
  • No icon when disabled (none mode)

Example

<AudioQueueRepeatMode />

AudioQueueShuffle

A toggle button that enables/disables shuffle mode. When enabled, the queue is shuffled randomly.

Props

Inherits all props from Toggle component (except onPressedChange).

Behavior

  • When enabled: Queue is shuffled randomly
  • When disabled: Queue maintains original order

The shuffle state persists until manually disabled.

State Persistence: The shuffle and repeat mode states are persisted to localStorage and will be restored when the app reloads.

Example

<AudioQueueShuffle />

AudioQueuePreferences

A dropdown menu that combines repeat mode and insert mode controls in a compact interface.

Props

Inherits all props from AudioQueueButton component.

Features

  • Repeat mode selection: None, One, All
  • Insert mode selection: First, Last, After Current

Insert Modes

  • First: New tracks are added at the beginning of the queue
  • Last: New tracks are added at the end of the queue (default)
  • After Current: New tracks are added after the currently playing track

Insert Mode Behavior: The insert mode determines where new tracks are added to the queue when using addToQueue. This setting persists across sessions via localStorage.

Example

<AudioQueuePreferences />

Integration with AudioPlayer

Queue components are designed to work seamlessly with the AudioPlayer component:

<AudioPlayer>
  <AudioPlayerControlBar>
    <AudioPlayerControlGroup>
      <AudioPlayerPlay />
      <AudioPlayerSeekBar />
      <AudioPlayerTimeDisplay />
    </AudioPlayerControlGroup>
    <AudioPlayerControlGroup>
      <AudioQueueShuffle />
      <AudioQueueRepeatMode />
      <AudioQueue />
    </AudioPlayerControlGroup>
  </AudioPlayerControlBar>
</AudioPlayer>

Notes

AudioProvider Requirement: AudioProvider (or the project's audio store) is required for queue components to work correctly. All components read from and update the global audio store state.

Last updated 11/19/2025