Design Prot Merge #1

Merged
NotS1mp merged 217 commits from design-prot into master 2026-09-21 15:48:16 +00:00
Showing only changes of commit bbc115ca84 - Show all commits
+33 -2
View File
@@ -1,4 +1,6 @@
<script lang="ts"> <script lang="ts">
import { player } from '$lib/player/player.svelte';
let { data } = $props(); let { data } = $props();
const tracks = $derived(data.tracks); const tracks = $derived(data.tracks);
@@ -7,6 +9,12 @@
const dateFormatter = new Intl.DateTimeFormat('es', { dateStyle: 'medium' }); const dateFormatter = new Intl.DateTimeFormat('es', { dateStyle: 'medium' });
function togglePlay(index: number) {
const track = tracks.items[index];
if (player.current?.id === track.id) player.toggle();
else player.playQueue(tracks.items, index);
}
function pageHref(page: number) { function pageHref(page: number) {
const params = new URLSearchParams(); const params = new URLSearchParams();
if (data.query) params.set('q', data.query); if (data.query) params.set('q', data.query);
@@ -70,14 +78,37 @@
</div> </div>
{:else} {:else}
<ul class="mt-8 grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-4"> <ul class="mt-8 grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-4">
{#each tracks.items as track (track.id)} {#each tracks.items as track, i (track.id)}
<li <li
class="group rounded-2xl border border-white/5 bg-white/[0.03] p-4 transition hover:border-emerald-500/30 hover:bg-white/[0.05]" class="group rounded-2xl border border-white/5 bg-white/[0.03] p-4 transition hover:border-emerald-500/30 hover:bg-white/[0.05]"
> >
<div <div
class="grid aspect-square place-items-center rounded-xl bg-gradient-to-br from-emerald-500/20 to-emerald-500/5 text-4xl" class="relative grid aspect-square place-items-center overflow-hidden rounded-xl bg-gradient-to-br from-emerald-500/20 to-emerald-500/5 text-4xl"
> >
🎵 🎵
<button
type="button"
onclick={() => togglePlay(i)}
aria-label={player.current?.id === track.id && player.isPlaying
? 'Pausar'
: 'Reproducir'}
class="absolute inset-0 grid place-items-center bg-neutral-950/40 opacity-0 transition group-hover:opacity-100 focus-visible:opacity-100"
class:opacity-100={player.current?.id === track.id}
>
<span
class="grid h-12 w-12 place-items-center rounded-full bg-emerald-500 text-neutral-950 shadow-lg"
>
{#if player.current?.id === track.id && player.isPlaying}
<svg viewBox="0 0 24 24" fill="currentColor" class="h-6 w-6">
<path d="M6 5h4v14H6zM14 5h4v14h-4z" />
</svg>
{:else}
<svg viewBox="0 0 24 24" fill="currentColor" class="h-6 w-6">
<path d="M8 5v14l11-7z" />
</svg>
{/if}
</span>
</button>
</div> </div>
<h3 class="mt-3 truncate font-semibold" title={track.title}>{track.title}</h3> <h3 class="mt-3 truncate font-semibold" title={track.title}>{track.title}</h3>
<p class="mt-1 text-xs text-neutral-500"> <p class="mt-1 text-xs text-neutral-500">