feat(label): web-parity header actions, catalog/library toggle, label cards

LabelView parity with the revamped Qobuz web label page (semantics
verified live against play.qobuz.com via Playwright):

- Header: Follow + Shuffle (new play_label_top_shuffled, shuffle-then-
  delegate to play_tracks_ctx) + overflow menu (Play next / Add to queue /
  Share -> play.qobuz.com/label/<id>; no Song.link equivalent for labels).
  No header Play by owner decision (the Popular Tracks play does the same).
- The Popular Tracks section '...' button was dead (fired an unhandled
  'top-tracks-menu' action): now a popup with Play next / Add to queue
  over all cached popular tracks. Section buttons wrapped so the 44px
  primary and 32px secondaries share one vertical centre.
- Catalog/library toggle: the ArtistPage SegmentedTabBar verbatim, floated
  right of the header cluster (visible only with library items; mirrors
  the web's A/B-rolled 'Del catalogo / En la biblioteca'). Library tab
  renders added tracks + albums on the label, backed by the new
  library_by_label session index (AlbumCard.label_id / TrackCard.label_id,
  seeded from the SAME two favorites fetches as library_by_artist).
- More Labels carousel now renders the Library LabelCard (new label-cards
  mode in ArtistCarousel) instead of the legacy generic card.
- Artists carousel images: /label/page top_artists often carry no parseable
  image, leaving placeholders forever. Restored the Tauri fallback wave:
  custom artwork first, then v2/artist/get, fed through the stable
  LabelArtist artwork targets.

i18n: zero new msgids (all reused across the 8 locales). slintcheck green.

km
This commit is contained in:
vicrodh committed 2026-07-21 12:30:40 -06:00
1 parent 70d8dc85f2
commit d4a4f30e91
13 files changed
+558 -42

No files matched your search

+8
View File
@@ -3760,6 +3760,14 @@ export global LabelState {
in property <bool> description-truncated: false;
// Header follow state — true when the label is in the user's favorites.
in property <bool> is-following: false;
// Catalog/library toggle (SegmentedTabBar, mirrors ArtistState.artist-tab
// + library-*): "catalog" renders the /label/page sections; "library"
// renders the user's favorite albums on this label (the session
// library_by_label index). The toggle only shows when count > 0.
in-out property <string> label-tab: "catalog";
in property <int> library-count: 0;
in property <[AlbumCardItem]> library-albums: [];
in property <[TrackItem]> library-tracks: [];
// Popular tracks (album-thumbnail rows, multi-select capable).
in property <[TrackItem]> top-tracks: [];
// Multi-select (mirrors AlbumState): mode flag + count. Per-row toggle