feat(albums): draw the album dropdown that was already being computed
Build & publish Arch package / arch-package (push) Successful in 2m1s
CI / check (push) Successful in 2m27s
Search index maintenance / maintain-index (push) Successful in 6s
CI / e2e (push) Successful in 4m49s

Enter on an album card fetched the album's tracks over the IPC and ran
the whole split state machine (splitMode true, splitIndex measured
against the real container), then render() drew the single grid because
it never consulted splitMode; connectedCallback referenced
renderSplitGrid only to satisfy noUnusedLocals. perf.p2 files this as
dead code — it is the only route from the albums grid to track-details,
since a plain click navigates to the catalog page instead.

Two things it needed that the audit does not mention. The grid could
not scroll: .grid-scroll-container is the markup artists-view and
genres-view use, and cover-grid had the class with no rule for it, so
186984px of albums sat in a 772px box at 5000 albums, unreachable by
wheel, keyboard or scrollbar — and that is the element scroll-manager
saves and restores, so its scrollTop was permanently 0. And the shared
context menu was labelled 'Album actions' unconditionally, which nothing
could observe while a track menu was unreachable.

Both halves of the split grid carry the listbox semantics the single
grid gained in the ARIA pass.
This commit is contained in:
2026-08-12 15:10:05 -04:00
parent 287b6445fa
commit 71324b561a
5 changed files with 487 additions and 10 deletions
@@ -13,6 +13,27 @@ const gridStyles = css`
contain: layout style;
}
/*
* The scroller. artists-view and genres-view carry the same
* markup with this rule; cover-grid had the class and no rule for
* it, so nothing in the albums view scrolled — the container grew to
* its full content height inside an overflow: hidden host and
* everything past the first screenful was unreachable by wheel,
* keyboard or scrollbar. Invisible on the eight-album fixture and
* fatal on a real library: measured at 5 000 albums, 186 984 px of
* content in a 772 px box.
*
* It is also what the dropdown's scroll manager was written
* against — it saves and restores this element's scrollTop, which
* was permanently 0.
*/
.grid-scroll-container {
flex: 1;
overflow-y: auto;
overflow-x: hidden;
contain: paint;
}
/* ========================================
* Album card
* ======================================== */