feat(favorites): virtualize songs tracklist + memoize rows (#805)

* feat(favorites): virtualize songs tracklist + memoize rows

10k+ starred songs no longer mount every row into the DOM. Same fix
shape as playlist virtualization: @tanstack/react-virtual windowing,
memoized FavoriteSongRow with stable callback bundle, scrollMargin
ResizeObserver anchored to .content-body. visibleTracks memoized once
per visibleSongs ref to avoid O(n) songToTrack on every click.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(favorites): review follow-ups for virtualization PR #805

Add maintainer comments for scrollMargin layout coupling and bulk-bar
useLayoutEffect dep. Record PR #805 in CHANGELOG and settings credits.

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
‮Artem
2026-05-20 11:00:13 +03:00
committed by GitHub
parent d8a7c5b9e3
commit cb9445eaad
4 changed files with 297 additions and 181 deletions
+1
View File
@@ -218,6 +218,7 @@ const CONTRIBUTOR_ENTRIES = [
contributions: [
'Player: cap persisted queue to ±250-track window — fixes QuotaExceededError on large playlists (PR #756)',
'Playlists: virtualized tracklist for large playlists — no UI freeze on 10k+ tracks (PR #755)',
'Favorites: virtualized songs tracklist for large starred collections (PR #805)',
],
},
{