fix(ui): drawer polish — themed select carets, centred view controls - #13
Merged
Merged
Conversation
Three things reported from the drawer on a real phone, plus one found while verifying them. Select carets were native, so every engine drew its own: white on macOS Chrome and Firefox (they honour color-scheme), BLACK on iOS Firefox (it does not), each with its own inset that sat the arrow almost against the border. Replaced with a drawn chevron that swaps per theme, with real right padding. Also sets `color-scheme` on the root, so the OPEN dropdown list and scrollbars follow the app's theme instead of the OS — a dark app was getting a white option list. The VIEW controls were not centred: .view-btn and .theme-toggle only centre on the cross axis, so once given a min-width their icons sat left-aligned in the box. The sort select now takes its own full-width line (at ~292px of drawer width it could not share a row with both icon controls without crushing "Recently added") and the two icon controls sit below it, all 44px, icons centred. The branch elbow under the active board reached 8px up into the pill's rounded corner and crossed it, which showed badly in light mode. It now starts at the 2px row gap and is painted accent, so it reads as one continuous gesture from the selected board into its action. Found while verifying: openDrawer added its .open class inside a requestAnimationFrame. rAF is throttled in a backgrounded or occluded tab, so the class could fail to land and leave a focus-trapped dialog rendered off-screen with `hidden` already false. Forces a reflow and opens in the same task instead. Also gives the ⚙ glyph a U+FE0E variation selector so iOS renders it as text rather than a colour emoji, which is what it was doing in the reported screenshot. 591 tests green. Verified in both themes at 400px and on desktop: all five selects carry the themed caret, no console errors, drawer closes and releases the scroll lock on every board switch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C83mrW9X8zBLY1sSZRgdCa
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #12. Three things reported from the drawer on a real phone, plus one found while verifying them.
Select carets were native, so every engine drew its own
White on macOS Chrome and Firefox (they honour
color-scheme), black on iOS Firefox (it does not), and each engine set its own inset — which is why the arrow sat almost against the border on desktop. Replaced with a drawn chevron that swaps per theme via a--select-caretcustom property, with real right padding.This also sets
color-schemeon the root, which fixes something separate and worse: the open dropdown list and the scrollbars were rendering from the OS theme, so a dark app was getting a white option list.One rule covers all five selects (facet filters, sort, library type, and the JS-built descriptor facets) because they all share
.filter-select.The VIEW controls were not centred
.view-btnand.theme-toggleonly centre on the cross axis, so once given amin-widthin the drawer their icons sat left-aligned in the box. The sort select now takes its own full-width line — at ~292px of drawer width it could not share a row with both icon controls without crushing "Recently added" — and the two icon controls sit below it, all 44px, icons centred.The branch elbow crossed the active board
It reached 8px up into the pill's rounded corner, which showed badly in light mode. It now starts at the 2px row gap and is painted accent, so it reads as one continuous gesture from the selected board into its action.
Found while verifying
openDraweradded its.openclass inside arequestAnimationFrame. rAF is throttled in a backgrounded or occluded tab, so the class could fail to land and leave a focus-trapped dialog rendered off-screen withhiddenalready false. Forces a reflow and opens in the same task instead. I hit this for real in the test browser, which is the only reason I found it.Also gives the ⚙ glyph a U+FE0E variation selector so iOS renders it as text rather than a colour emoji, which is what it was doing in the reported screenshot.
Verification
591 tests and typecheck green. Driven in both themes at 400px and on desktop: all five selects carry the themed caret with
appearance: none, no console errors across all five boards, drawer closes and releases the scroll lock on every switch, no horizontal overflow.Note
This touches desktop deliberately in one place — the caret inset — because the report was explicitly about desktop ("the carets in desktop browser are too close to the edge of the select box"). Nothing else in the diff applies above 900px.
🤖 Generated with Claude Code
https://claude.ai/code/session_01C83mrW9X8zBLY1sSZRgdCa