Desktop: content is obscured or unusable at small window sizes — decide the supported sizes and the modes #24
Closed
opened 2026-08-18 05:55:00 +00:00 by logan
·
2 comments
No Branch/Tag Specified
main
fix/146-stub-etxtbsy
fix/175-wizard-follows-the-library
fix/231-setter-rollback
fix/197-duplicate-column-label
docs/225-fixtures-wav-tags
docs/220-skill-check-scope
test/217-fixture-names-in-queue-selection
fix/216-riff-parse-allocation
fix/170-queue-header-action-names
fix/210-nav-sheet-scroll-affordance
docs/50-readme-landing-page
feat/65-art-prefetch-ahead
feat/71-more-as-a-bottom-sheet
feat/54-native-touch-feel
feat/67-entity-links-into-menus
test/196-visual-tier-gates
fix/138-ui-test-storage-leak
fix/104-wav-tags-read
fix/207-sheet-scroll-affordance
fix/204-ui-visual-update-filter
pi-agent-backlog-automation
63-touch-model-phase-2
63-android-touch-model
186-touch-targets-settings
186-touch-targets-page-header
187-seek-bar-hit-area
189-190-explore-correctness
135-android-underrun-instrumentation
51-android-small-screens
fix/171-phone-queue-scrim
fix/137-touch-only-affordances
fix/154-nested-css-check
feat/58-mini-player-progress-line
fix/66-album-page-scrolls-as-one
60-context-menu-action-sheet
64-android-system-volume
59-slim-the-mini-player
55-queue-as-a-screen
feat/57-drop-the-android-top-bar
feat/62-jobs-as-a-notification
fix/53-seek-bar-never-moves
fix/159-android-task-app-id
fix/52-android-activity-recreation-restarts-the-process
fix/150-expand-button-under-the-art
feat/42-inline-volume-and-centred-transport
fix/156-queue-selection-fixture-order
fix/151-fuse-the-scroll-guard-and-the-write
fix/43-queue-panel-selection
fix/143-top-bar-fits-its-window
feat/27-jobs-into-settings
feat/25-configurable-sidebar-tabs
feat/6-global-back-forward
fix/72-active-view-broadcast
fix/69-page-header-action-overflow
fix/quick-wins-batch
fix/118-in-library-clear
fix/61-mini-player-plain-text
fix/68-hover-affordances-pointer
fix/119-dev-headless-port
fix/130-issue-claim-user
fix/131-codegen-check-scope
feat/28-autotag-match-on-album
feat/17-demote-version-selector
feat/38-ownership-visibility
ci/115-manual-release
feat/34-icon-language
feat/7-full-tracklist-toggle
fix/16-tagwriter-totals
fix/unclaim-ca-certs
fix/unclaim-shell
ci/unclaim-on-close
docs/closing-keyword
docs/retire-stale-planning-docs
docs/issue-driven-workflow
integration/small-fixes
fix/small-issue-batch
fix/queue-toggle-state
fix/drag-count-badge
fix/album-card-year
fix/album-tracklist-heading
fix/seek-bar-clock-width
fix/explore-art-scanner-requests
chore/workflow-guardrails
v0.7.0
v0.6.0
v0.5.0
v0.4.0
v0.3.1
v0.3.0
v0.2.3
v0.2.2
v0.2.1
v0.2.0
v0.1.0
v0.0.1
v0.0.0
Labels
Clear labels
Area/Design
Area/Downloads
Area/Explore
Area/Library-UI
Area/Metadata
Area/Packaging
Area/Player
Area/Queue
Area/Settings
Area/Shell-Nav
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Platform/Android
Platform/Desktop
Breaking change that won't be backward compatible
Something is not working
Documentation changes
Improve existing functionality
New functionality
This is security issue
Issue or pull request related to testing
Priority
Critical
1
The priority is critical
Priority
High
2
The priority is high
Priority
Medium
3
The priority is medium
Priority
Low
4
The priority is low
Reviewed
Confirmed
1
Issue has been confirmed
Reviewed
Duplicate
2
This issue or pull request already exists
Reviewed
Invalid
3
Invalid issue
Reviewed
Won't Fix
3
This issue won't be fixed
Status
Blocked
1
Something is blocking this issue or pull request
Status
Need More Info
2
Feedback is required to reproduce issue or to continue work
Status
Abandoned
3
Somebody has started to work on this but abandoned work
Status
In Progress
Somebody is actively working on this right now
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Blocks
#55 Android: make the queue a real screen instead of a pop-open sidebar
yonlu/yellowjacket
Reference: yonlu/yellowjacket#24
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Report
Small window sizes are handled badly. With the queue panel open in a small window, content gets covered — e.g. the Playlists page's header management buttons disappear behind the queue panel. Possible answers: make the queue panel obviously an overlay over the content so it reads as something to close, allow horizontal scrolling in the main panel, or switch modes (even down to the mini-player) below some size. Needs discussion, and we should state what window sizes are actually supported.
Findings
bodyisoverflow-x: auto; overflow-y: hidden; the shell fits 320px viewports at 400% zoom because everything between the viewport and the shrinkable content carriesmin-width: 0and each component states what it drops.<bottom-nav>). Between 600 and 800 there is no phone layout and no guarantee.Direction
Treat this as a design pass, not a patch:
Claiming this. Branch:
feat/24-supported-sizes-queue-model.Approach. Treating it as the design pass the Direction asks for, so the
first deliverable is a plan document in
.planning/plans/active/rather thana patch — #73 has the rest of Phase 2 hanging off the decision, and #55 is
blocked on it, so the decision needs to be written down and arguable before
any CSS moves.
Order of work:
breakpoint (screenshots, not just assertions —
layout-overflow.spec.tspasses on a build whose header clips its own buttons, so the shell-level
assertion cannot see this class of fault).
two scope decisions (#69 in this PR or its own, #12 mini-player as a mode or
a refusal).
I will report back here with the matrix before implementing, and say on #55
whether this unblocks it.
Claimed by hand rather than with
issue.sh claim: the token haswrite:issuebut not
read:user, some()fails. Filed separately.Plan written:
.planning/plans/active/018-supported-sizes-and-the-queue-model.md(branch
feat/24-supported-sizes-queue-model). The matrix, as promised, plusfive measurements that are not in this issue.
Measured, against the running app (Chromium, Playlists, seed
default)is the size
window.goenforces and the only size this app promises, and"New Smart Playlist" loses 4px of its 162 there. This reads as a queue bug;
the queue makes it dramatic, but the header overflows on its own.
900, so main is 843px at 899 and 700px at 900. The worst desktop case is the
pixel above the collapse, not the minimum — so a test that checks "the
minimum" and stops has not checked the worst case, which is what
layout-overflow.spec.tsdoes today.flex-shrink: 0and in the flow of.content-area, so it takes width fromthe content rather than covering it: 69px of page left at 390px, and 0px
at 320px.
390x780, everything else reports
scrollWidth == clientWidth. See #69.MinWidth's comment are stale. The subtitle isdisplay: nonebelow 900, and the sidebar host isoverflow-y: auto(
scrollHeight434 vs 332px client at 600x460, Settings reachable afterscrolling). Neither mechanism can happen any more. The floor should stay;
its stated reason no longer supports it.
The four decisions
sidebar), Desktop (>=900). Two already exist; what is new is that they are a
written promise, that the queue is part of it, and one sentence across all
three: no action is ever unreachable.
viewport - sidebar - queueWidth >= 480, and an overlay with a scrimotherwise. It cannot be a media query: the panel is drag-resizable
200–500px and persisted, so a fixed breakpoint assumes the default 320 and
is wrong by 180px for a user who widened it — in the direction that hurts.
480 is a judgement and the plan says so: there is no cliff (the track list
rescales continuously, 213px to 124px columns with no row overflow), so it
is anchored to keep the default 1100 window inline while putting every
measured-broken case on the overlay side.
I am leaving there.
a second window (
AlwaysOnTopis a window option, and it needs its ownentry branch); making it a mode of the main window would discard navigation
state on a resize and put #12's own process-level MPRIS question on a path a
drag can trigger. The reflow already exists and is already tested, which is
a better answer than refusing. #12 is not coupled to this.
Implementing phases 2–4 next.