Usability pass, accessibility fixes, and themed scrollbars - #42
Merged
Conversation
…ompletes The per-resource probe functions always return model_ids=() since they have no model list to draw from; download_tokenizer passed that placeholder straight through instead of restoring the caller's original model_ids, so a resource's "used by N models" count silently dropped to zero the moment its download finished.
Ran each view end to end (mouse, keyboard, and a real download/analysis job, not just static review) and fixed what a screen reader user would actually hit: - Every progress bar now has an accessible name (context usage per row, VRAM utilization, analysis progress, tokenizer download) instead of announcing a bare percentage with no indication of what it's tracking. - The parser's status line is a polite live region, so "Done" / "Cleared" messages announce on their own instead of only being readable by navigating back to that line manually. Everything else exercised in the pass -- motion, focus return on dialogs and selects, empty/error states, keyboard traversal -- held up correctly.
…nce right The parser's status region unmounted and remounted on every job (setStatus(null) at the start, a fresh node with the final text at the end), so the completion message it exists to announce never actually fired -- a screen reader only picks up a mutation inside an already-present live region, not one that appears already populated. It now stays mounted with no visual footprint when empty, and only its content toggles. ContextBar's aria-valuenow was the raw percentage while aria-valuemax stayed fixed at 100, so an over-context bar (VRAM/context usage past 100%) could expose a clamped value to assistive tech that disagreed with the number on screen. valuenow is now clamped into the declared 0-100 range and aria-valuetext carries the exact displayed percentage.
…default Scrollbars were left at the browser default (opaque white track, grey thumb), which reads as a stray system widget dropped onto an otherwise fully themed surface. They now use --muted-foreground at partial opacity for the thumb and a transparent track, so they adapt automatically across light/dark and strengthen under prefers-contrast: more for free, since that's the same token the rest of the app already tunes for contrast.
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.
Summary
Test plan
cd frontend && npm run typecheck && npm run test && npm run build(97 vitest passing, clean build)python -m pytest -q(325 passing)