Skip to content

GUI: the page scrolls past the player bar when a list has explicit songs #878

Closed

Description

@LargeModGames

What happened

In the desktop app the whole page can scroll down past the player bar, into an empty black area. It happens when the open list has explicit songs (the ones with the E badge). How far the page scrolls depends on where those songs are in the list, and it changes as I scroll the list. With no explicit songs there is still a 1 px scroll, so a page scrollbar always shows at the right edge of the window.

What I expect: the page itself never scrolls. Only the panels inside it scroll.

Steps to reproduce

  1. Start the desktop app (or spotatui-gui) and open a long playlist that has explicit songs further down the list.
  2. Scroll the mouse wheel over the track list, or drag the scrollbar at the right edge of the window.
  3. See the whole page move up, with black space under the player bar.

Frontend

Desktop app (the browser GUI has it too)

Source

Spotify

spotatui version

main at 39b0237 (the E badge from #838 is not in a release yet)

OS

Windows 11

How you installed spotatui

Built from source

Cause

Each explicit row has hidden screen-reader text next to its E badge: <span className="sr-only">{s.explicit}</span> in gui/src/TrackTable.tsx line 158. The .sr-only rule in gui/src/style.css (line 40) sets position: absolute but no top or left. The track list has no positioned parent, so the hidden text stays at its place in the list but the list's scroll box does not clip it, and the document grows to hold it. The two live regions in gui/src/Toast.tsx (lines 28 and 31) use the same rule. They sit just under the shell and add the 1 px.

I measured it in Chromium with a 1290x800 window and an 80-track playlist where every 7th song is explicit:

Variant document.documentElement.scrollHeight
Now 4853 px
The explicit text hidden 801 px
With top: 0; left: 0 on .sr-only 800 px

Where to look

  • gui/src/style.css line 40: the .sr-only rule.
  • gui/src/TrackTable.tsx line 158: the hidden "Explicit" text.
  • gui/src/Toast.tsx lines 28 and 31: the two live regions.
  • gui/e2e/scenes.shot.ts line 94: the library playlist scene, which opens a playlist from the filmScores fixture in gui/e2e/fixtures.ts (line 762).

Possible solution

  • Add top: 0; and left: 0; to .sr-only in gui/src/style.css. The text stays 1 px and clipped, so nothing changes on screen, and screen readers still read it in DOM order.
  • Add an e2e check: open a playlist with explicit songs below the visible part of the list, and assert that document.documentElement.scrollHeight equals window.innerHeight. The filmScores fixture has only 4 songs, so make a longer table for this check.

Things to avoid:

  • Don't set overflow: hidden on body or .shell. That hides the symptom, and the real cause stays.
  • Don't remove the hidden text. Screen readers need it.

Done when

  • In the desktop app, a long playlist with explicit songs does not let the page scroll, and no page scrollbar shows.
  • The new e2e check fails without the CSS change and passes with it.
  • npm run lint, npm run format:check, npm run typecheck and npm test pass in gui/.

Activity

  1. spotatui commented on Oct 16, 2026

    @spotatui
    Contributor

    🎧 spotatui triage

    Auto-triaged with claude-opus-5-5.

    Label: bug
    Likely area: GUI frontend (gui/ web page): track table styling

    Summary

    In the desktop app and the browser GUI, the whole page can scroll past the player bar into an empty black area when the open track list has explicit songs. The reporter traces it to the hidden "Explicit" screen-reader text added with the E badge (#838). The .sr-only rule sets position: absolute with no top or left, so the hidden text escapes the list's scroll box and makes the document taller. The E badge is still unreleased, so release builds are not affected yet.

    Key points

    • Desktop app and browser GUI on Windows 11, built from source at main 39b0237.
    • Expected: the page never scrolls, only the panels inside it. Actual: the page scrolls down into black space under the player bar. How far it scrolls depends on where the explicit rows are.
    • Even with no explicit songs, the page scrolls 1 px, so a page scrollbar always shows. The reporter blames the two sr-only live regions in Toast.tsx.
    • Measured in Chromium at 1290x800 with an 80-track playlist: scrollHeight is 4853 px now, 801 px with the explicit text hidden, and 800 px with top: 0; left: 0 on .sr-only.
    • Proposed fix: add top: 0; left: 0 to .sr-only, plus an e2e check that scrollHeight equals innerHeight. Do not use overflow: hidden on body, and do not remove the hidden text.

    Where to look

    • gui/src/style.css: Defines the .sr-only rule at line 40. It has position: absolute but no top or left.
    • gui/src/TrackTable.tsx: Line 158 renders the hidden Explicit span next to the E badge on each explicit row.
    • gui/src/Toast.tsx: Lines 28 and 31 are the two sr-only live regions under the shell that the reporter links to the 1 px scroll.

    Possible duplicates: none found

    Compared against 50 open and 100 recently closed issues.

  2. niukanen1 commented on Oct 17, 2026

    @niukanen1
    Contributor

    Taking this one

  3. added a commit that references this issue on Oct 18, 2026
    52b0727
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinggood first issueGood for newcomers

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions