feat(radio): wire radio + similarity into the queue (A11/B6, §6.5)
"Start radio" in the track menu seeds the queue from a track; RadioController
(headless, in AppShell) tops it up via /radio/next as it drains. QueuePanel's
radio scaffolding is now live: the exploration slider drives familiar<->new and
each entry shows its reason ("why this is playing"). Adds the radio endpoints
(start/next/similar), radio context + actions on the queue slice, and the pick->
entry mapper. Degrades to metadata picks while ML is offline.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,7 @@ import { Sidebar } from './Sidebar';
|
||||
import { PersistentPlayer } from '../player/PersistentPlayer';
|
||||
import { NowPlaying } from '../player/NowPlaying';
|
||||
import { QueuePanel } from '../player/QueuePanel';
|
||||
import { RadioController } from '../player/RadioController';
|
||||
import { TrackInfoDrawer } from '../track/TrackInfoDrawer';
|
||||
import { AddToPlaylistDialog } from '../track/AddToPlaylistDialog';
|
||||
import { LoadingSkeleton } from '../common/LoadingSkeleton';
|
||||
@@ -39,6 +40,7 @@ export function AppShell() {
|
||||
<AddToPlaylistDialog />
|
||||
<PersistentPlayer />
|
||||
<NowPlaying />
|
||||
<RadioController />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user