Skip to content

feat(web): dense tracks table on collection pages behind track_rows - #14689

Merged
dylanjeffers merged 5 commits into
mainfrom
design/track-row-table-style
Oct 21, 2026
Merged

dylanjeffers merged 5 commits into
mainfrom
design/track-row-table-style

Conversation

@dylanjeffers

Copy link
Copy Markdown
Contributor

What

Stacked on #14686. Collection pages keep their sortable, reorderable tracks table, but with track_rows on the table takes the TrackRow look.

Table gets an isDense prop (a .dense modifier on the wrapper, applied on both the virtualized and plain render paths):

  • flat surface: no card shadow or white background; the page shows through
  • 56px rows (was 64), hover and focus-within fill with surface-1 instead of a box shadow
  • active row title in the accent text color
  • header in sentence case at 12px/500 subdued, with a single divider under it
  • tabular numerals in cells
  • TracksTable: 40px artwork without a border, subdued artist line, flat disabled and locked rows

CollectionPage reads FeatureFlags.TRACK_ROWS, passes isDense, and makes its outer wrapper transparent so the hover fill is visible. Sorting, filter, drag reorder, remove and edit mode are untouched. Library and dashboard tables are not changed in this PR; they can opt in with the same prop.

Verified

  • eslint, stylelint and tsc clean for web
  • Dev server, flag forced on, Hot & New on Audius playlist: 13 tracks per screen (was 10), hover reveals repost, favorite and menu with the surface fill, light and dark.

🤖 Generated with Claude Code

@changeset-bot

changeset-bot Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 7e2e4f1

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-search-collections branch from 94e8022 to fb5fc2a Compare October 20, 2026 00:14
@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-search-collections branch from fb5fc2a to dab0de6 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 5 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>
@dylanjeffers
dylanjeffers force-pushed the design/track-row-search-collections branch from dab0de6 to 2fee8ee Compare October 21, 2026 23:05
@dylanjeffers
dylanjeffers force-pushed the design/track-row-table-style branch from 7e2e4f1 to 3bde51b Compare October 21, 2026 23:05
Base automatically changed from design/track-row-search-collections to main October 21, 2026 23:05
@dylanjeffers
dylanjeffers merged commit 279924c into main Oct 21, 2026
5 checks passed
@dylanjeffers
dylanjeffers deleted the design/track-row-table-style branch October 21, 2026 23:06
dylanjeffers added a commit that referenced this pull request Oct 21, 2026
…rows (#14690)

## 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](https://claude.com/claude-code)

---------

Co-authored-by: Claude Fable 5.1 <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