feat(slint): favorites Playlists view — sub-tabs + rich card grid

Swap the passive single-cover FavPlaylistCard tile for the shared
discover/PlaylistCard (collage + hover overlay play/fav/more + context
menu) over playlists-visible, and add the Library/Following underline
sub-tab selector (no pills, ADR-008) above the grid with per-sub-tab and
search-empty states. Extend the shared PlaylistCard with a body-opens
prop so a favorites card-body click opens the playlist while the play
button plays (discover/search keep body=play, unchanged). Add the
Playlists search box to the row-2 toolbar. Remove the dead
FavoritePlaylistItem struct + playlists field + FavPlaylistCard.

cc
This commit is contained in:
vicrodh committed 2026-05-27 14:11:31 -06:00
1 parent 2d2f65a1cb
commit 116bc13660
3 files changed
+114 -75

No files matched your search

@@ -49,8 +49,12 @@ component OverlayButton inherits Rectangle {
export component PlaylistCard inherits Rectangle {
in property <SearchPlaylistItem> playlist;
// kind ("playlist"), playlist id, action ("play" | "play-next" |
// "queue" | "favorite").
// "queue" | "favorite" | "open").
callback media-action(string, string, string);
// When true, a click on the card BODY opens the playlist ("open")
// instead of playing it — the Favorites grid wants body=open, the play
// button=play. Discover/Search leave it false (body=play), unchanged.
in property <bool> body-opens: false;
width: 220px;
height: 266px;
@@ -87,7 +91,7 @@ export component PlaylistCard inherits Rectangle {
height: 100%;
mouse-cursor: pointer;
clicked => {
root.media-action("playlist", root.playlist.id, "play");
root.media-action("playlist", root.playlist.id, root.body-opens ? "open" : "play");
}
}