- TrackRow: Add isBlacklisted prop with grayout styling and ban icon
- VirtualizedTrackList: Check blacklist status for each track
- PlaylistDetailView: Gray out and restrict actions for blacklisted tracks
- AlbumDetailView: Apply album-level blacklist check to all tracks
- HomeView: Gray out blacklisted tracks in Continue Listening section
- ArtistDetailView: Banner shown when viewing blacklisted artist page
Blacklisted tracks show reduced opacity, ban icon instead of track
number, and restricted menu actions (navigation only, no playback).
- Show success/error toasts when adding/removing artists
- Show feedback when enabling/disabling blacklist
- Show confirmation toast when clearing all artists
Phase 3 (minimal) - UI for testing:
- Add artistBlacklistStore.ts with O(1) local checks
- Initialize store on app startup
- Add blacklist toggle button to ArtistDetailView
- Button shows red when artist is blacklisted
cc
- Add compact prop to QualityBadge for inline usage in track lists
- Compact mode shows simple text (24bit/96kHz or CD Quality)
- Use golden gradient for hires badges in compact mode
- Update ArtistDetailView to use QualityBadge compact
- Update FavoritesView to use QualityBadge compact
- Update SearchView to use QualityBadge compact
- Remove duplicate CSS and getQualityLabel functions
- LocalLibrary views keep custom format showing codec (FLAC 24/96)
- Use golden gradient (#fbbf24 to #b8860b) with dark text for hires badges
- Increase min-width to 90px for consistent sizing across all badges
- Rename track-row favorite button to avoid CSS conflict with header button
- Header favorite button now properly circular like radio and network buttons
1. Search: Re-clicking Search button in sidebar scrolls to top and focuses input
- Added triggerSearchFocus mechanism in searchState store
- SearchView subscribes to focus trigger for scroll + focus
2. ArtistDetailView: Added quality badge and favorite button to Popular Tracks
- Added getQualityLabel function with bit depth/sample rate
- Added quality-badge element with hires styling
- Added favorite button in track actions
3. FavoritesView: Fixed getAlbumQualityLabel to show detailed format
- Now shows "24bit/96kHz" instead of generic "Hi-Res"
- Use top/bottom positioning instead of calculated height
- top: 32px (below title bar), bottom: 104px (above player)
- Add adjustment for when title bar is hidden (top: 0)
- Sidebar now always fits within visible content area
Changes the menu action label from "Play later" to "Add to queue"
for better clarity and consistency with standard music player UX.
Updated in:
- AlbumMenu.svelte
- TrackMenu.svelte
- ArtistDetailView.svelte (tracks context menu)
Relates to #21
Groups/bands in the sidebar now use the musician resolution flow.
Since bands typically have Qobuz artist pages, they resolve as
confidence=3 (Confirmed) and navigate directly to the artist page.
Wire up onMusicianClick for Members & Former and Collaborators
sections in ArtistDetailView sidebar. Clicking a member now triggers
the musician resolution flow (modal for weak confidence, musician
page for contextual, or artist page for confirmed).
Uses the first role from MusicBrainz relationships or defaults to
"Band Member" / "Collaborator" as the role parameter.
- Add mbAvailable state to track MusicBrainz availability
- Set mbAvailable=false when MB is disabled or API fails
- Wrap entire Relationships section with {#if mbAvailable}
- Only extract labels from albums categorized as 'albums' (Discography)
- Excludes EPs, live albums, compilations, tributes, and others
- Change icon from Tag to Disc (record label, not tag)
- Add labels field to ArtistDetail type
- Extract unique labels from artist albums in convertQobuzArtist
- Update appendArtistAlbums to merge new labels
- Display labels in sidebar with click navigation to label view
- Use Tag icon from lucide-svelte
- Remove ended visual distinction (all members same style)
- Match Lyrics sidebar dimensions (340px, same height)
- Update header structure to match Lyrics
- Use element-connect.svg icon
- Equal spacing between items in all sections
cc
- All band members go to single 'Members' list
- Show ended status with muted color
- Tooltip shows roles + period (e.g. 'guitar (1981 - 2003)')
- Remove separate 'Former Members' section
cc
- Deduplicate members that appear multiple times with different roles
- Combine roles and show in mouseover tooltip
- Apply to Members, Former Members, Member Of, Collaborators
cc
- Members: current band members
- Former Members: past members (with muted style)
- Member Of: groups artist belongs to
- Collaborators: collaboration relationships
cc
- Fixed position sidebar that slides in from right
- Labels section (placeholder)
- Similar Artists section (functional)
- MusicBrainz Relationships section (functional)
cc
Display MusicBrainz artist relationships on artist detail page:
- Band Members section with role info (for groups)
- Past Members section (former members)
- Member Of section (groups this artist belongs to)
Features:
- Automatic MusicBrainz artist resolution on page load
- Click to navigate to related artist's Qobuz page
- Graceful degradation when data unavailable
- Respects MusicBrainz enabled setting
Uses Stage 1 MusicBrainz infrastructure for data fetching.
cc
- Use size="large" (180px) for all AlbumCard instances
- Change album grids from CSS grid with 1fr to flexbox
- Fix LocalLibrary gap issue by using consistent spacing
- Align VirtualizedAlbumList, ArtistDetailView, SearchView,
FavoritesView, HomeView, and AlbumDetailView
Add --alpha-* CSS variables (4-95%) to app.css that adapt to theme:
- Dark themes: white-based rgba
- Light themes: black-based rgba (auto-inverts for proper contrast)
Mass-replaced 100+ instances of rgba(255,255,255,...) across 23 files
with var(--alpha-*) for consistent theming support.
This fixes borders, overlays, and UI elements being invisible or
having poor contrast in light themes.
- Extract .action-btn-circle styles to app.css for reuse
- Remove duplicate button styles from ArtistDetailView and AlbumDetailView
- Use theme-aware colors (--text-primary) instead of hardcoded white
- Icons now use currentColor for theme compatibility
The jump-nav sticky header uses negative margins to extend beyond
the container padding. The right margin was -16px (or -32px in Settings)
but the container only has 8px (or 24px) of right padding, causing
8px of horizontal overflow.
Fixed by matching the negative right margin to the actual padding:
- ArtistDetailView: -16px → -8px, width calc(100%+40px) → calc(100%+32px)
- FavoritesView: -16px → -8px, width calc(100%+40px) → calc(100%+32px)
- LocalLibraryView: -16px → -8px, width calc(100%+40px) → calc(100%+32px)
- SettingsView: -32px → -24px, width calc(100%+64px) → calc(100%+56px)
- Reorder sections: Others -> Playlists -> Tributes
- Tributes section now collapsed by default with expand/collapse caret
- Add info icon with tooltip explaining content may include covers by other artists
- Implement pagination with Load More (20 items at a time)
- Sort dropdown only visible when section is expanded
- Add margin-bottom 2px to local-library-section in sidebar
- Make dividers transparent (keep spacing, remove visible line)
- Add independent sort dropdowns to: EPs & Singles, Live Albums,
Compilations, Tributes & Covers, Others
- Each section maintains its own sort state
- Remove solid background from Discography and all sections below
- Remove Load More button from Discography (initial display sufficient)
- Change badge font-weight to 100 (Thin) in AlbumCard and QualityBadge
- Use LINE Seed JP font family for badges
- Use CSS line-clamp for exactly 3 lines (reactive to container width)
- ResizeObserver detects window/container resizes
- Auto-hide Read more/Show less if text fits in 3 lines
- Works across all screen sizes (4K to HD)
- Change margin-top to padding-top for 10px spacing (avoids collapse)
- Add animated glow expansion on Play All button hover
- Match context menu styling to TrackMenu component
- Add 10px top margin for spacing from jump-nav
- Play All button (44px) larger than context menu button (40px)
- Add backdrop to context menu for click-outside-to-close behavior
- Reduce icon size in smaller button (18px)
- Remove solid background container
- Show 5 tracks by default with progressive loading (5 → 20 → 50)
- Add "Load More" link that disappears after 50 tracks
- Replace text Play All button with circular icon button
- Add context menu (...) with: Play Next, Play Later, Shuffle, Add to Playlist
- All actions apply to full track list (up to 50)
- Remove divider line before section