From 76812d1eeb25390722973ce56692b9d494f99c43 Mon Sep 17 00:00:00 2001 From: XShine555 Date: Mon, 20 Jul 2026 20:21:22 +0200 Subject: [PATCH] feat(web-player): add the albums pages A grid of your albums with a create dialog, and a detail page with the tracklist, inline editing and a picker that lists the songs you uploaded so they can be dropped into the album. Covers reuse the playlist mosaic since an album has no artwork of its own yet. --- web-player/src/lib/components/Sidebar.svelte | 2 + .../src/lib/components/ui/AlbumCard.svelte | 35 ++++++ .../src/lib/components/ui/AlbumForm.svelte | 101 ++++++++++++++++ web-player/src/lib/config.ts | 4 + web-player/src/lib/server/albumForm.ts | 39 +++++++ web-player/src/lib/server/api.ts | 15 +++ .../src/routes/(app)/albums/+page.server.ts | 45 +++++++ .../src/routes/(app)/albums/+page.svelte | 76 ++++++++++++ .../routes/(app)/albums/[id]/+page.server.ts | 110 ++++++++++++++++++ .../src/routes/(app)/albums/[id]/+page.svelte | 92 +++++++++++++++ .../albums/[id]/components/AlbumHeader.svelte | 98 ++++++++++++++++ .../[id]/components/AlbumTrackTable.svelte | 79 +++++++++++++ .../[id]/components/LibraryPicker.svelte | 68 +++++++++++ 13 files changed, 764 insertions(+) create mode 100644 web-player/src/lib/components/ui/AlbumCard.svelte create mode 100644 web-player/src/lib/components/ui/AlbumForm.svelte create mode 100644 web-player/src/lib/server/albumForm.ts create mode 100644 web-player/src/routes/(app)/albums/+page.server.ts create mode 100644 web-player/src/routes/(app)/albums/+page.svelte create mode 100644 web-player/src/routes/(app)/albums/[id]/+page.server.ts create mode 100644 web-player/src/routes/(app)/albums/[id]/+page.svelte create mode 100644 web-player/src/routes/(app)/albums/[id]/components/AlbumHeader.svelte create mode 100644 web-player/src/routes/(app)/albums/[id]/components/AlbumTrackTable.svelte create mode 100644 web-player/src/routes/(app)/albums/[id]/components/LibraryPicker.svelte diff --git a/web-player/src/lib/components/Sidebar.svelte b/web-player/src/lib/components/Sidebar.svelte index 2d9a5d4..95540db 100644 --- a/web-player/src/lib/components/Sidebar.svelte +++ b/web-player/src/lib/components/Sidebar.svelte @@ -4,6 +4,7 @@ import Home from '@lucide/svelte/icons/house'; import Search from '@lucide/svelte/icons/search'; import Folder from '@lucide/svelte/icons/folder'; + import Disc from '@lucide/svelte/icons/disc-3'; import Music from '@lucide/svelte/icons/music'; import Upload from '@lucide/svelte/icons/upload'; import LogOut from '@lucide/svelte/icons/log-out'; @@ -35,6 +36,7 @@ ]; const secondaryLinks = [ + { href: '/albums', label: 'Mis álbumes', icon: Disc }, { href: '/library', label: 'Canciones subidas', icon: Folder }, { href: '/upload', label: 'Subir música', icon: Upload } ]; diff --git a/web-player/src/lib/components/ui/AlbumCard.svelte b/web-player/src/lib/components/ui/AlbumCard.svelte new file mode 100644 index 0000000..662b4c8 --- /dev/null +++ b/web-player/src/lib/components/ui/AlbumCard.svelte @@ -0,0 +1,35 @@ + + + + +
{title}
+
{meta}
+
diff --git a/web-player/src/lib/components/ui/AlbumForm.svelte b/web-player/src/lib/components/ui/AlbumForm.svelte new file mode 100644 index 0000000..f577607 --- /dev/null +++ b/web-player/src/lib/components/ui/AlbumForm.svelte @@ -0,0 +1,101 @@ + + +
{ + submitting = true; + return async ({ update, result }) => { + await update({ reset: false }); + submitting = false; + if (result.type === 'success') onSuccess?.(); + }; + }} + class="mt-4 w-full max-w-2xl space-y-4" +> + + + + + + + + + +