diff --git a/web/src/lib/components/PlayerBar.svelte b/web/src/lib/components/PlayerBar.svelte index f6f78e56..47fab8f8 100644 --- a/web/src/lib/components/PlayerBar.svelte +++ b/web/src/lib/components/PlayerBar.svelte @@ -1,4 +1,9 @@ {#if current} -
- -
+
+ +
-
{current.title}
+
{current.title}
{current.artist_name}
- +
@@ -69,7 +80,7 @@ {player.error ?? 'Playback failed.'}
{:else}
+ +
+ + + +
+
{formatDuration(player.position)} @@ -95,56 +147,39 @@ {formatDuration(player.duration)}
-
- - - -
{/if} -
+
+ class="flex h-9 w-9 items-center justify-center rounded-full transition-colors {player.shuffle + ? 'bg-accent-tint text-accent' + : 'text-text-secondary hover:bg-surface-hover hover:text-text-primary'}" + > + + -
diff --git a/web/src/lib/components/TrackMenu.svelte b/web/src/lib/components/TrackMenu.svelte index a57629bf..258c0c62 100644 --- a/web/src/lib/components/TrackMenu.svelte +++ b/web/src/lib/components/TrackMenu.svelte @@ -3,7 +3,15 @@ import FlagPopover from './FlagPopover.svelte'; import type { TrackRef } from '$lib/api/types'; - let { track }: { track: TrackRef } = $props(); + let { + track, + direction = 'down' + }: { + track: TrackRef; + /** Whether the dropdown opens above the trigger ('up') or below ('down'). + Pass 'up' when used near the bottom of the viewport (e.g. PlayerBar). */ + direction?: 'up' | 'down'; + } = $props(); let menuOpen = $state(false); let popoverOpen = $state(false); @@ -44,7 +52,7 @@ {#if menuOpen}