From 846387e2f71db736b980950b2058527f01985fa0 Mon Sep 17 00:00:00 2001 From: pleb Date: Tue, 4 Nov 2025 09:27:47 -0800 Subject: [PATCH] Create a separate playlist map card component --- src/lib/components/MapCard.svelte | 74 +------- .../tools/playlist-discovery/+page.svelte | 30 +--- .../PlaylistSongCard.svelte | 158 ++++++++++++++++++ 3 files changed, 174 insertions(+), 88 deletions(-) create mode 100644 src/routes/tools/playlist-discovery/PlaylistSongCard.svelte diff --git a/src/lib/components/MapCard.svelte b/src/lib/components/MapCard.svelte index 412c8f4..c025bf4 100644 --- a/src/lib/components/MapCard.svelte +++ b/src/lib/components/MapCard.svelte @@ -23,23 +23,21 @@ export let beatsaverKey: string | undefined = undefined; // BeatSaver stats export let score: number | undefined = undefined; -// Layout tweaks -export let compact = false; export let showActions = true; export let showPublished = true; $: hasScore = typeof score === 'number' && Number.isFinite(score); -
-
+
+
{#if coverURL} {songName {:else}
☁️
{/if}
-
+
{songName ?? hash}
@@ -57,8 +55,8 @@ $: hasScore = typeof score === 'number' && Number.isFinite(score);
{/if} -
-
+
+
@@ -95,13 +93,6 @@ $: hasScore = typeof score === 'number' && Number.isFinite(score); width: 100%; } - .card-wrapper.compact-wrapper { - display: grid; - grid-template-columns: auto 1fr; - align-items: stretch; - column-gap: 0.6rem; - } - .cover { position: relative; width: 100%; @@ -128,14 +119,6 @@ $: hasScore = typeof score === 'number' && Number.isFinite(score); font-size: 1.5rem; } - .cover.compact-cover { - width: 104px; - min-width: 104px; - max-width: 104px; - padding-top: 104px; - border-radius: 0.5rem; - } - .body { padding: 0.75rem 0.75rem 1rem; display: flex; @@ -143,12 +126,6 @@ $: hasScore = typeof score === 'number' && Number.isFinite(score); flex: 1; } - .body.compact-body { - padding: 0.25rem 0.2rem 0.5rem; - gap: 0.4rem; - min-width: 0; - } - .title { font-weight: 600; font-size: 1rem; @@ -157,10 +134,6 @@ $: hasScore = typeof score === 'number' && Number.isFinite(score); text-overflow: ellipsis; } - .body.compact-body .title { - font-size: 0.95rem; - } - .mapper-row { display: flex; justify-content: space-between; @@ -200,21 +173,12 @@ $: hasScore = typeof score === 'number' && Number.isFinite(score); flex: 1; } - .meta-leading.compact-leading { - width: 100%; - } - .meta-leading :global(.score-meter) { width: 100%; max-width: 45%; margin-left: auto; } - .meta.compact-row { - margin-top: 0.25rem; - gap: 0.35rem; - } - .actions { margin-top: 0.6rem; display: flex; @@ -223,10 +187,6 @@ $: hasScore = typeof score === 'number' && Number.isFinite(score); flex-wrap: wrap; } - .body.compact-body .actions { - margin-top: 0.3rem; - } - .player { flex: 1; max-width: 45%; @@ -240,28 +200,10 @@ $: hasScore = typeof score === 'number' && Number.isFinite(score); } @media (max-width: 959px) { - .card-wrapper.compact-wrapper { - grid-template-columns: 1fr; - row-gap: 0.35rem; - } - - .cover.compact-cover { - margin: 0 auto; - width: 100%; - max-width: 240px; - padding-top: 100%; - } - } - - @media (min-width: 960px) { - .meta.compact-row { - flex-direction: column; - align-items: flex-start; - gap: 0.2rem; - } - - .meta.compact-row .meta-leading { + .player { + max-width: none; width: 100%; + margin-left: 0; } } diff --git a/src/routes/tools/playlist-discovery/+page.svelte b/src/routes/tools/playlist-discovery/+page.svelte index 41d96f9..b9e7fac 100644 --- a/src/routes/tools/playlist-discovery/+page.svelte +++ b/src/routes/tools/playlist-discovery/+page.svelte @@ -1,8 +1,8 @@ + +
+
+ {#if coverURL} + {`Cover + {:else} + + {/if} +
+ +
+
+ {#if mapLink} + {mapTitle} + {:else} + {mapTitle} + {/if} +
+ + {#if mapper} +
{mapper}
+ {/if} + +
+ +
+ +
+ +
+
+
+ + +