Commit Graph
75 Commits
Author SHA1 Message Date
vicrodh 1407516b34 fix(ui): standardize AlbumCard size and grid layout across all views
- 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
2026-01-25 04:51:29 -06:00
vicrodh 8dfea8a38e Hide 'Go to artist' menu option in ArtistDetailView
Redundant to show navigation to artist when already viewing that artist.
2026-01-24 17:24:58 -06:00
vicrodh bdb49f65bb Fix PlaylistDetailView track list header column alignment
Update header to use flexbox layout matching AlbumDetailView pattern.
Add missing column classes: col-title, col-album, col-quality, col-icon, col-spacer.
2026-01-24 17:05:08 -06:00
vicrodh 848322681d refactor: replace hardcoded rgba white with theme-aware alpha variables
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.
2026-01-24 11:35:54 -06:00
vicrodh a87b8e11bb refactor: move action button styles to shared app.css
- 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
2026-01-24 11:23:05 -06:00
vicrodh 4b999c4561 style: replace play button glow with solid white border
Remove box-shadow glow effect from primary action button and
replace with 2px solid white border for cleaner appearance.
2026-01-24 11:19:57 -06:00
vicrodh b296d3091b fix: remove horizontal scroll caused by jump-nav overflow
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)
2026-01-24 00:40:37 -06:00
vicrodh d721859046 feat(artist): make Tributes collapsible with info tooltip
- 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
2026-01-24 00:34:17 -06:00
vicrodh a84cf97d36 feat(artist): independent sort filters per section, remove divider lines
- 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
2026-01-24 00:19:49 -06:00
vicrodh ada7b7b84c style(artist): remove solid backgrounds, Load More button, thin badges
- 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
2026-01-23 23:29:09 -06:00
vicrodh e404048c5b fix(artist): bio truncation reactivity, adjust margins
- Observe parent container for resize (not clamped element)
- Double RAF ensures CSS applies before measurement
- top-tracks-section: margin-top 32px
- artist-header: margin-bottom 22px
2026-01-23 20:51:09 -06:00
vicrodh f19081ee1d feat(artist): smart 3-line bio truncation with resize detection
- 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)
2026-01-23 18:58:15 -06:00
vicrodh 30bb7bc980 fix(artist): spacing, hover glow, context menu homologation
- 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
2026-01-23 18:52:50 -06:00
vicrodh dc0038fbfb style(artist): subtle glow on Play All, outline on context button 2026-01-23 18:47:49 -06:00
vicrodh 3f9d7e4de5 style(artist): polish Popular Tracks buttons and menu
- 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)
2026-01-23 18:47:06 -06:00
vicrodh 2f026fa181 feat(artist): redesign Popular Tracks section
- 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
2026-01-23 18:43:53 -06:00
vicrodh 1185d307f5 style: opaque nav bars with subtle shadow
- Remove transparency from all sticky nav bars (fully opaque)
- Remove backdrop-filter blur (not needed with opaque bg)
- Add subtle box-shadow (4px) for content-fades-beneath effect
- Applied to Artist, Favorites, LocalLibrary, Settings views
2026-01-23 18:23:30 -06:00
vicrodh 75aeb9592f fix: remove main-content padding-left for edge-to-edge nav bars
- Removed padding-left: 20px from main-content
- Toggle button and jump-nav don't collide (different vertical positions)
- Updated all view nav bars with corrected margin/width calculations
- Nav bars now truly flush with sidebar edge
2026-01-23 18:21:49 -06:00
vicrodh 7c14a6835e fix: extend sticky nav bars edge-to-edge with sidebar
- ArtistDetailView: jump-nav now flush with sidebar (margin -44px left)
- FavoritesView: favorites-nav flush with sidebar
- LocalLibraryView: jump-nav flush with sidebar
- SettingsView: settings-nav flush with sidebar
- All navs compensate for both main-content and view padding
- Radio animation: faster floating messages (1.2s), infinite loop
2026-01-23 18:17:34 -06:00
vicrodh 87e4b7c356 style(artist): add floating text animation to radio loading
Step 2 of radio button animation:
- Add wrapper for positioning context
- Floating messages appear above button and fade upward
- Uses Svelte #key directive to re-trigger animation on message change
- Absolute positioning ensures no layout shift
2026-01-23 18:13:00 -06:00
vicrodh a1d5f8a137 style(artist): add rotating arcs animation to radio button
- Replace expanding button with rotating concentric arcs
- Outer arc: rotates clockwise at 1.2s
- Inner arc: rotates counter-clockwise at 1.8s
- Animation uses absolute positioning, doesn't affect layout
- Button maintains size during loading state
2026-01-23 18:11:56 -06:00
vicrodh 65716c9e07 style(artist): restructure header per design specs
- Move action buttons below Similar Artists section
- Remove images from Similar Artists (text-only with bullet separators)
- Remove solid background from biography
- Add thin font weight (300) to bio area
- Update Similar Artists to uppercase title with letter-spacing
2026-01-23 18:11:07 -06:00
vicrodh 008ef6e443 fix(artist): add data-track-id attribute for scroll-to-track
The scrollToTrack function queries for [data-track-id] but the
attribute was missing on track rows, preventing track focus from
context.
2026-01-23 17:20:23 -06:00
vicrodh cc6d14e24b fix(artist): jump-nav full width and consistent section headers
- Fix jump-nav to span 100% of content width with proper margins
- Make Popular Tracks section header consistent with other sections
- Add track count badge to Popular Tracks
- Remove unused section-header-row CSS
2026-01-23 17:14:54 -06:00
vicrodh 77e4619e7b fix(artist): add missing onAddAlbumToPlaylist to Others section
The Others section was missing the onAddAlbumToPlaylist prop that
other album sections have, making the context menu inconsistent.
2026-01-23 17:10:14 -06:00
vicrodh 89a9f2e130 style(artist): consistent section-header-left wrapper for all sections
Apply section-header-left wrapper to all remaining album sections
for consistent structure (EPs & Singles, Live Albums, Compilations,
Tributes & Covers, Others, Playlists).
2026-01-23 17:09:46 -06:00
vicrodh 1aeb3642c6 fix(artist): move sort dropdown to discography header
- Move album sort dropdown from jump-nav to Discography section header
- Align sort dropdown to right of section title
- Revert similar artists styling to original
- Sort now only applies to album sections below it
2026-01-23 17:06:18 -06:00
vicrodh d371711e59 style(artist): improve artist view visual design
- Add album counts to section headers (Discography, EPs & Singles, etc.)
- Add glass effect to sticky jump navigation bar
- Wrap discography sections in cards with rounded corners
- Improve similar artists section with chip-style buttons
- Add card styling to biography section
- Improve top tracks section with card background
- Better visual separation with gradient dividers
- Consistent spacing and typography updates
2026-01-23 16:54:43 -06:00
vicrodh 4aa76a0ed4 feat(artist): add album sorting in artist view
Add sort dropdown in artist detail view jump navigation with options:
- Default (API order)
- Newest First (by release year)
- Oldest First (by release year)
- Title (A-Z / Z-A)

Sorting applies to all album sections: albums, EPs/singles, live albums,
compilations, tributes, and others.
2026-01-23 16:45:24 -06:00
vicrodh 5eb1b392e8 fix(queue): add album_id and artist_id to all view queue builders
Complete propagation in all view components:
- HomeView: buildContinueQueueTracks
- FavoritesView: buildFavoritesQueueTracks
- SearchView: buildSearchQueueTracks
- LocalLibraryView: setQueueForLocalTracks (local=true, null IDs)
- ArtistDetailView: buildTopTracksQueue
2026-01-23 03:57:36 -06:00
vicrodh 619f8cca6d refactor(artist): move action buttons below photo, remove album count
Restructure artist header layout:
- Move favorite and radio buttons below the artist photo
- Remove album count line from header
- Artist name now left-aligned in its own row
- Create artist-image-column for photo + actions grouping
2026-01-23 03:19:49 -06:00
vicrodh 1cd05384fb fix(artist): align header content to top instead of center
Change artist info section to align content to top of the image
instead of vertically centering. This positions the artist name
closer to the photo. Also move margin from h1 to the row container
to fix alignment between name and action buttons.
2026-01-23 03:15:20 -06:00
vicrodh aabbe8ea67 fix(radio): pass album_id and artist_id for track navigation
Add album_id and artist_id fields to QueueTrack struct so that
radio tracks have proper navigation metadata. This enables
clicking artist/album in the main player to navigate correctly
when playing tracks from artist or track radio.

Changes:
- Add album_id/artist_id to Rust QueueTrack struct
- Update track_to_queue_track to extract IDs from Qobuz Track
- Add fields to frontend BackendQueueTrack interface
- Pass IDs in ArtistDetailView radio playback
- Pass IDs in playQueueTrack to playTrack service
2026-01-23 03:14:42 -06:00
Joel C 6415991792 Use add to playlist on AlbumCards on ArtistDetailView 2026-01-22 23:11:15 +01:00
vicrodh 95647e288f fix: Sync playback context after creating radio
Call getPlaybackContext() to sync radio context from backend to frontend
This ensures the Radio icon appears in NowPlayingBar
2026-01-20 20:47:44 -06:00
vicrodh 4fc8c04bc1 fix: Use playQueueIndex for complete track data and add animated loading states
- Use playQueueIndex(0) instead of reading from queue store to get full track data
- Fixes missing artwork, duration, and seekbar for first track
- Add animated pill button with loading messages during radio creation
- Add glowing blue effect on radio icon after successful creation
- Loading messages: preparing, fetching artists, experimental notice
2026-01-20 20:45:54 -06:00
vicrodh 6c3ff71cdd fix: Sync queue state before reading in radio creation
Call syncQueueState() to fetch queue from backend before attempting playback
2026-01-20 20:34:12 -06:00
vicrodh 240c5e013a fix: Improve radio playback and session handling
- Fix radio playback initiation using onTrackPlay callback
- Fix sampling rate display for Qobuz tracks (already in kHz)
- Disable session restore to prevent local/Qobuz ID conflicts
2026-01-20 20:16:42 -06:00
vicrodh 76d1ddd007 fix: Start playback automatically when creating radio
- Import playQueueIndex from queueStore
- Call playQueueIndex(0) after radio creation to start playing
- Applies to both artist radio and track radio
2026-01-20 18:22:00 -06:00
vicrodh e1818faa90 feat: Wire up Track Radio callback in ArtistDetailView 2026-01-20 17:44:16 -06:00
vicrodh 1cf23f0e86 feat: Add Artist Radio button and Track Radio function to ArtistDetailView 2026-01-20 17:43:09 -06:00
vicrodh 2a8087ecb2 fix: Pause button now only appears on hover for playing tracks
- Replace Lucide Pause icon with solid SVG pause icon
- Pause button only shows when hovering over currently playing track
- Playing indicator (animated bars) shows when track is playing
- Play button shows for all non-playing tracks on hover
- Fixes issue where pause appeared on all tracks on hover
2026-01-20 17:33:19 -06:00
vicrodh ed7984a029 fix(context): fix playback context tracking bugs
Multiple critical fixes for context tracking:

1. Add 'local_library' to backend context type parser
   - Was rejecting 'local_library' causing "Invalid context type" error
   - Now properly recognized in set_playback_context command

2. Fix shuffle to not always start with first track
   - Removed logic that moved current track to front of shuffle
   - Now finds current track position in shuffled order instead
   - Shuffle is truly random, not biased to original order

3. Add missing await to all setPlaybackContext calls
   - PlaylistDetailView: await context creation
   - FavoritesView: make setFavoritesContext async + await calls
   - ArtistDetailView: await context creation
   - HomeView: await context creation
   - SearchView: await + use home_list type (search type doesn't exist)

   This fixes intermittent context tracking (race condition)

Fixes: shuffle starting with first song, Local Library context error,
intermittent playlist/favorites/artist/home/search context tracking

cc
2026-01-19 18:31:18 -06:00
vicrodh c59ab226b9 fix(playback): honor autoplay and seed queues
cx
2026-01-19 12:46:28 -06:00
vicrodh 318e3d795a feat(context): scroll to active track on context navigation
cx
2026-01-19 11:19:52 -06:00
vicrodh d39180bd6c feat(ui): show playing status in search and artist tracks
cx
2026-01-18 05:46:57 -06:00
vicrodh 0bd60bbc8f feat(phase35): implement context in ArtistDetailView
Context creation:
- Creates 'artist_top' context when playing from Top Tracks
- Uses artist ID and name
- Passes track index from UI loop
- Stack icon will show "Playing from: Artist · {name}"

Artist view now fully integrated with context system.

cp
2026-01-18 03:30:47 -06:00
vicrodh 99aba9a76a feat(artist): add search navigation with prev/next buttons
- Add navigation to search results with smooth scrolling
- Show result counter (X/Y) with prev/next chevron buttons
- Support keyboard navigation (Enter, Shift+Enter, Escape)
- Add searchId prop to AlbumCard for DOM targeting
- Style search toggle button without background
- Remove focus outline from search input
2026-01-15 18:20:32 -06:00
vicrodh 98f1209e37 feat(artist): add page search and improve bio truncation
Page search:
- Add search button in sticky jump-nav bar
- Slide-in animation from right when opened
- Filter albums, EPs, live, compilations, tributes, others, playlists
- Show result count or "No results" message
- Press Escape to close

Bio improvements:
- Reduce truncation to 530 chars (was 800, now 2/3)
- Only show "Read more" if text actually needs truncation

Live detection - additional languages:
- German: Konzert, liveopname
- Japanese: ライブ (raibu)
- Korean: 라이브 (laibeu), 콘서트 (konseuteu)
- Dutch: liveopname
2026-01-15 18:06:01 -06:00
vicrodh 74483f2b10 feat(artist): add Tributes section and improve album categorization
Major improvements to album categorization logic:

Detection improvements:
- Broadcasts: detect plural forms, "Radio Broadcasts", "The Beast Radio"
- Live albums: detect "Alive", city+year patterns (Seattle 1989, Tokyo 1986)
- Podcasts: detect "Report Episode X", single-track 20+ min releases
- Singles: 1-4 tracks (classic 45rpm), explicit markers in title

New Tributes section:
- Albums by different artists now go to "Tributes & Covers"
- Separates tribute/cover albums from legitimate artist content
- Keeps Others clean for compilations, B-sides, unofficial releases

Categorization priority:
1. Different artist -> Tributes
2. Broadcasts/bootlegs/podcasts -> Others
3. Compilations (greatest hits, B-sides) -> Others
4. Live albums -> Live
5. Studio albums (7+ tracks, 25+ min, deluxe) -> Discography
6. EPs/Singles (1-4 tracks, <15 min) -> EPs & Singles
2026-01-15 17:25:16 -06:00