Skip to content

feat(web): dense tables on Library and artist dashboard behind track_rows - #14690

Merged
dylanjeffers merged 6 commits into
mainfrom
design/track-row-library-tables
Oct 21, 2026
Merged

dylanjeffers merged 6 commits into
mainfrom
design/track-row-library-tables

Conversation

@dylanjeffers

Copy link
Copy Markdown
Contributor

What

Stacked on #14689. The remaining desktop track tables take the dense style when track_rows is on:

  • Library (favorites, reposts, premium): isDense on the table, and the card border wrapper class is dropped in dense mode.
  • Artist dashboard Tracks and Albums tabs: isDense on TracksTable and CollectionsTable; CollectionsTable now forwards the prop to Table.
  • Table's virtualized path uses rowHeight 56 in dense mode (was a fixed 64), so the Library list, which is virtualized, matches the 56px CSS rows.

Verified

  • eslint and tsc clean for web
  • Dev server, flag forced on: Library tracks renders 56px rows, 11 per screen, sentence-case header, flat surface. Dashboard tables share the same Table code path; this account has no uploads, so they were not viewed with data.

🤖 Generated with Claude Code

@changeset-bot

changeset-bot Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: f36ab7f

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@dylanjeffers
dylanjeffers force-pushed the design/track-row-table-style branch from b778991 to af171f0 Compare October 20, 2026 00:14
@dylanjeffers
dylanjeffers force-pushed the design/track-row-library-tables branch 2 times, most recently from 475ea3e to bdf2e94 Compare October 20, 2026 00:19
@dylanjeffers
dylanjeffers force-pushed the design/track-row-table-style branch from af171f0 to 7e2e4f1 Compare October 20, 2026 00:19
dylanjeffers and others added 6 commits October 21, 2026 16:04
The profile page passes the row variant to its Tracks and Reposts lineups
when the `track_rows` flag is on. `TrackRow` gains an optional `context`
line above the row, which the connected row uses to label the artist
pick. In row mode the lineup drops the two-column grid it uses for small
tiles so rows span the full width.

Feed stays on tiles on purpose: a feed item is a post with who reposted
it and inline playlists, and the tile carries that better than a row.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Reposts mixes playlists into the track lineup. With rows the cards sat flush
against the row above; give them a top margin in row layout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Search's track results pass the row variant to TrackLineup when the
`track_rows` flag is on, and drop the tile spacing styles in row mode.

Collection pages are left on their tracks table: it is already a dense
48px row with sortable columns and drag reorder in edit mode, which the
row does not replace.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Table gains an `isDense` prop that restyles rows to match Harmony's
TrackRow: flat surface instead of a card, 56px rows, hover fill, accent
title on the active row, sentence-case 12px header, 40px artwork and a
subdued artist line. Sorting, drag reorder and edit mode are unchanged.

The collection page turns it on with the `track_rows` flag and makes its
outer wrapper transparent so the hover fill shows.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Table puts its CSS-module `dense` class on the wrapper, which is hashed, so
`:global(.dense)` in TracksTable.module.css never matched and the 40px art,
subdued artist line and flat locked/disabled rows didn't apply. TracksTable
now adds its own module class when isDense is set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rows

Library favorites and the dashboard Tracks and Albums tables pass
`isDense` when `track_rows` is on. CollectionsTable forwards the prop,
and the virtualized table uses a 56px row height in dense mode so the
Library list matches the CSS. The Library table drops its card border in
dense mode.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@dylanjeffers
dylanjeffers force-pushed the design/track-row-table-style branch from 7e2e4f1 to 3bde51b Compare October 21, 2026 23:05
@dylanjeffers
dylanjeffers force-pushed the design/track-row-library-tables branch from bdf2e94 to f36ab7f Compare October 21, 2026 23:05
Base automatically changed from design/track-row-table-style to main October 21, 2026 23:06
@pull-request-size pull-request-size Bot added size/L and removed size/S labels Oct 21, 2026
@dylanjeffers
dylanjeffers merged commit 5833c08 into main Oct 21, 2026
5 checks passed
@dylanjeffers
dylanjeffers deleted the design/track-row-library-tables branch October 21, 2026 23:06
dylanjeffers added a commit that referenced this pull request Oct 22, 2026
…14700)

Phase 1 of the redesign on mobile: tracks in catalog lineups render as
64px rows instead of bordered tiles, matching web (#14684-#14690). Gated
by the existing `track_rows` flag, which is on in production, so this
reaches RC users through the RC OTA on merge. Feed keeps tiles.

**Where:** Trending, Underground, profile Tracks and Reposts, search
track results. Collections in mixed lineups (Reposts) stay tiles.
Library already uses `TrackList` rows and is unchanged.

**Row:** optional rank, 48px art, title, artist with badges, duration
(or "12m left" / "Played" for podcasts and audiobooks), and a
price/unlock button in place of the duration on locked tracks.
- Tap plays (gated tracks open the purchase modal or locked-content
drawer, same as the tile).
- Long-press opens the track's actions, with a haptic. No kebab: the
title gets the space. VoiceOver gets the same menu as a "More options"
action.
- The playing track gets an accent title and an equalizer on its art.

**Code:**
- `harmony-native/components/TrackRow`: presentational row.
- `lineup-tile/TrackRowTile`: connected row.
- `lineup-tile/useOpenTrackOverflow`: overflow actions now shared by
`TrackTile` and the row (tile menu unchanged). Rows add share, favorite
and repost since they have no inline buttons.
- `TrackLineup` gets `tileVariant: 'tile' | 'row'`.

**Tested** on the iOS 26.5 simulator (1.5.190 Release build with this
bundle swapped in), signed in: Trending rows and ranks, tap to play and
switch tracks, equalizer, long-press menu without starting playback,
pagination to 50, profile Tracks rows, loading skeletons. Not tested:
Android, search results, a locked track's price button, VoiceOver.

Mobile `tsc` and eslint are clean locally (mobile CI only runs security
checks).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant