Audio Track
Track components for displaying and managing audio tracks, with store and controlled modes.
Track components for displaying and managing audio tracks. These components support two modes:
- Store mode: reads from and controls the global audio queue provided by
audioStore. - Controlled mode: accepts an explicit list or single track for use in search results or external lists.
Installation
Install @lucide/svelte :
Copy and paste the following code into your project.
Usage
Import the components:
<script lang="ts">
import * as AudioTrack from "$lib/components/ui/audio/track/index.js";
</script> AudioTrack
Displays a single track with optional cover, metadata, and playback controls. Use either:
trackIdto render an item from the global audio queue (store mode), ortrackto render a provided track object (controlled mode).
Loading...
<script lang="ts">
import * as AudioTrack from "$lib/components/ui/audio/track/index.js";
import { audioStore } from "$lib/audio-store.svelte.js";
</script>
{#if audioStore.queue[0]}
<AudioTrack.Root trackId={audioStore.queue[0].id} />
{:else}
<p class="text-muted-foreground text-sm">No tracks in queue.</p>
{/if} <!-- From queue by id -->
<AudioTrack.Root trackId={track.id} />
<!-- With explicit data -->
<AudioTrack.Root track={customTrack} onclick={() => handlePlay(customTrack)} /> AudioTrackList
Renders a list of tracks. Pass tracks for a controlled list, otherwise the component renders the global queue.
Key features:
- Text filtering via
filterQueryor a customfilterFn. - Optional drag-and-drop (
sortable) — reordering updates the queue only when not filtered and whentracksis not provided. - Per-item remove action and play/pause controls (configurable via props).
Loading...
<script lang="ts">
import * as AudioTrack from "$lib/components/ui/audio/track/index.js";
</script>
<AudioTrack.List
onTrackSelect={(index) => console.log("selected queue index", index)}
/> <!-- Store mode: renders global queue -->
<AudioTrack.List onTrackSelect={(index) => console.log(index)} />
<!-- Controlled mode: render custom set -->
<AudioTrack.List tracks={searchResults} onTrackSelect={handleSelect} /> Grid Layout
Loading...
<script lang="ts">
import * as AudioTrack from "$lib/components/ui/audio/track/index.js";
</script>
<AudioTrack.List variant="grid" /> Sortable
Loading...
<script lang="ts">
import * as AudioTrack from "$lib/components/ui/audio/track/index.js";
</script>
<AudioTrack.List
sortable
onTrackSelect={(index) => console.log("selected queue index", index)}
/> Sortable Grid
Loading...
<script lang="ts">
import * as AudioTrack from "$lib/components/ui/audio/track/index.js";
</script>
<AudioTrack.List sortable variant="grid" /> API Reference
AudioTrack
Props
Note: Use either
trackId(store mode) ortrack(controlled mode). Both should not be used together. Store mode requiresAudioProviderto be set up. Cover images are taken fromtrack.artworkortrack.images[0]. Live tracks show a Live badge and the duration is hidden — live detection useshtmlAudio.isLive().
AudioTrackList
Props
Store vs Controlled Mode: When
tracksis omitted, the component reads from the global queue. Whentracksis provided, it operates in controlled mode using the provided array.
Sortable Behavior: When
sortableis enabled, reordering will only update the store queue when the list is not filtered (filterQueryandfilterFnare not used) AND the component is in store mode (tracksprop is not provided). Keepsortabledisabled while filtering to avoid unexpected reordering behavior.
Examples
Store mode (main queue)
<AudioTrack.List
sortable
onTrackSelect={(i) => console.log("play queue index", i)}
/> Controlled mode (external list)
<AudioTrack.List
tracks={searchResults}
variant="grid"
onTrackSelect={(index, track) => addToQueue(track)}
/> Filtering
<!-- Simple text filter -->
<AudioTrack.List filterQuery="jazz" />
<!-- Custom filter function -->
<AudioTrack.List filterFn={(t) => t.genre === "jazz"} /> With removal
<AudioTrack.List onTrackRemove={(id) => removeFromQueue(id)} /> Related
- Audio Player — player controls to use alongside track components
- Audio Provider — required wrapper that manages queue state
- Audio Queue — queue dialog and ordering controls