From a598ea14185e518a2c1f4c7eacdc1c8b30559cb9 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Fri, 1 May 2026 21:14:01 -0400 Subject: [PATCH] feat(web): move Hidden tracks out of main nav, surface from Settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hidden tracks (M5b quarantine) is a low-frequency surface — it doesn't warrant a permanent slot in the main nav. Moves the link under a new 'Library' section card on /settings alongside ListenBrainz config. Co-Authored-By: Claude Opus 4.7 (1M context) --- web/src/lib/components/Shell.svelte | 1 - web/src/lib/components/Shell.test.ts | 16 +++------------- web/src/routes/settings/+page.svelte | 10 ++++++++++ 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/web/src/lib/components/Shell.svelte b/web/src/lib/components/Shell.svelte index 5d69f6a6..9d121751 100644 --- a/web/src/lib/components/Shell.svelte +++ b/web/src/lib/components/Shell.svelte @@ -26,7 +26,6 @@ { href: '/library/artists', label: 'Artists' }, { href: '/library/albums', label: 'Albums' }, { href: '/library/liked', label: 'Liked' }, - { href: '/library/hidden', label: 'Hidden' }, { href: '/search', label: 'Search' }, { href: '/discover', label: 'Discover' }, { href: '/requests', label: 'Requests' }, diff --git a/web/src/lib/components/Shell.test.ts b/web/src/lib/components/Shell.test.ts index d1885fb9..fbd15374 100644 --- a/web/src/lib/components/Shell.test.ts +++ b/web/src/lib/components/Shell.test.ts @@ -41,7 +41,7 @@ describe('Shell', () => { test('renders nav items in expected order', () => { render(Shell); - const labels = ['Home', 'Artists', 'Albums', 'Liked', 'Hidden', 'Search', + const labels = ['Home', 'Artists', 'Albums', 'Liked', 'Search', 'Discover', 'Requests', 'Playlists', 'Settings']; for (const label of labels) { expect(screen.getByRole('link', { name: label })).toBeInTheDocument(); @@ -55,19 +55,9 @@ describe('Shell', () => { expect(screen.getByRole('link', { name: 'Playlists' })).toHaveAttribute('href', '/playlists'); }); - test('Hidden nav link sits between Liked and Search', () => { + test('Hidden link is not in the main nav', () => { render(Shell); - const hidden = screen.getByRole('link', { name: 'Hidden' }); - expect(hidden).toHaveAttribute('href', '/library/hidden'); - const labels = screen - .getAllByRole('link') - .map((el) => el.textContent?.trim()) - .filter(Boolean); - const idxLiked = labels.indexOf('Liked'); - const idxHidden = labels.indexOf('Hidden'); - const idxSearch = labels.indexOf('Search'); - expect(idxLiked).toBeLessThan(idxHidden); - expect(idxHidden).toBeLessThan(idxSearch); + expect(screen.queryByRole('link', { name: 'Hidden' })).not.toBeInTheDocument(); }); test('non-admin users do not see the Admin nav link', () => { diff --git a/web/src/routes/settings/+page.svelte b/web/src/routes/settings/+page.svelte index bd16b88c..9bb83748 100644 --- a/web/src/routes/settings/+page.svelte +++ b/web/src/routes/settings/+page.svelte @@ -97,4 +97,14 @@ {/if} + +
+

Library

+
    +
  • + Hidden tracks + — tracks you've flagged as bad rips, wrong tags, or otherwise unplayable. +
  • +
+