Files
Musify/web-player/src/lib/components/player/TrackInfo.svelte
T

67 lines
1.9 KiB
Svelte

<script lang="ts">
import { player } from '$lib/player/player.svelte';
import { liked } from '$lib/player/liked.svelte';
import Artwork from '$lib/components/ui/media/Artwork.svelte';
import ExplicitBadge from '$lib/components/ui/media/ExplicitBadge.svelte';
import ArtistLink from '$lib/components/ui/media/ArtistLink.svelte';
import IconButton from '$lib/components/ui/primitives/IconButton.svelte';
import Heart from '@lucide/svelte/icons/heart';
interface Props {
compact?: boolean;
}
let { compact = false }: Props = $props();
const isLiked = $derived(player.current.id !== '' && liked.isLiked(player.current.id));
function toggleLike() {
if (!player.current.id) return;
liked.toggle({
id: player.current.id,
title: player.current.title,
artist: player.current.artist,
explicit: player.current.explicit,
ownerUserId: player.current.ownerUserId,
duration: player.current.duration
});
}
</script>
<div class="flex min-w-0 items-center gap-2.5 md:gap-3">
{#if player.current.id}
<Artwork
trackIds={[player.current.id]}
size="sm"
alt={player.current.title}
class="shrink-0 md:size-cover-md"
/>
{:else}
<div class="size-cover-sm shrink-0 rounded-art bg-surface md:size-cover-md"></div>
{/if}
<div class="min-w-0">
<div class="flex min-w-0 items-center gap-1.5">
{#if player.current.explicit}
<ExplicitBadge />
{/if}
<span class="truncate text-sm text-fg">{player.current.title}</span>
</div>
<ArtistLink
name={player.current.artist || '—'}
ownerUserId={player.current.ownerUserId}
class="mt-0.5 text-xs text-fg-2"
/>
</div>
{#if !compact}
<IconButton
label={isLiked ? 'Quitar de Me gusta' : 'Añadir a Me gusta'}
tone="plain"
size="md"
pressed={isLiked}
onclick={toggleLike}
>
<Heart class="size-icon-md" fill={isLiked ? 'currentColor' : 'none'} />
</IconButton>
{/if}
</div>