Skip to content

leaderboard: filter-bar polish, stacked headers, scrollable matrix, robust sort#28

Merged
radinhamidi merged 1 commit into
mainfrom
leaderboard/table-polish-2
May 20, 2026
Merged

leaderboard: filter-bar polish, stacked headers, scrollable matrix, robust sort#28
radinhamidi merged 1 commit into
mainfrom
leaderboard/table-polish-2

Conversation

@radinhamidi
Copy link
Copy Markdown
Member

@radinhamidi radinhamidi commented May 20, 2026

Summary

Four small UX fixes on the leaderboard.

1. Filter bar grouping. The Metric: label was orphaning from its chips when the bar wrapped. Each label+chips pair is now its own flex-wrap group, so a wrap keeps them together.

2. Stacked column headers. Dataset name and metric label were one long line that wrapped to 2-3 lines per cell (e.g. ArguAna / nDCG@10). Now each is its own single-line div — dataset on top, metric below in small gray. Each line is whitespace-nowrap, so columns are tight and consistent.

3. Scrollable matrix. The home matrix and /datasets/{id} (both ~120 rows) live in a max-h-[70vh] overflow-y-auto container with a sticky top-0 <thead>. The page no longer scrolls hundreds of pixels just to show one table.

4. Robust sort. InteractiveTable now reads data-sort-value live on each sort (instead of a cache captured at init), so sorting works correctly after the metric toggle rewrites cell sort values and after chip filters change which rows are visible. setSort also re-runs the visibility pass after reordering, so chip-hidden rows stay hidden.

Test Plan

  • pnpm -F @qg/leaderboard build clean, 1113 pages.
  • After merge: filter bar groups stay together when wrapping; matrix column headers are two clean lines per dataset; main table scrolls inside its panel with sticky header; sort works after toggling Retriever/Model chips and after Metric toggle.

🤖 Generated with Claude Code

…rollable matrix, robust sort

- Filter bar: each label+chips pair is its own flex group so "Metric:"
  no longer orphans from its buttons when the bar wraps.
- Matrix column headers: dataset name and metric label stack on two
  lines (dataset on top, metric in small gray below) instead of one
  long line that wraps to 2-3 lines per cell. Each line is
  whitespace-nowrap, so headers are tight and stable-width.
- Home matrix + per-dataset table: vertical scroll inside a
  max-h-[70vh] container with a sticky thead, so a 120-row table
  doesn't blow out the page height.
- InteractiveTable sort: read data-sort-value live from the DOM on
  every sort call instead of using a cache captured at init. Fixes
  sort after the home page's metric toggle (which rewrites sort
  values) and after filter chips change. setSort now re-runs the
  search/visibility pass after reordering, so chip-hidden rows stay
  hidden across sorts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@radinhamidi radinhamidi merged commit 066f990 into main May 20, 2026
2 checks passed
@radinhamidi radinhamidi deleted the leaderboard/table-polish-2 branch May 20, 2026 06:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant