feat(ux): energize the in-flight loading state - #260
Draft
Zbrooklyn wants to merge 1 commit into
Draft
Conversation
The agent-thinking gap used to look like nothing was happening: 18x21px grey dot grid with no caption. Now: - Dots upsized to 26x26 with accent-color pulse (every dot still flashes on a staggered cycle so the grid pattern stays visible) - Status caption appears beside the dots: "[Agent] is thinking…" or "Waiting for permission…" when permission is pending - Caption uses a moving gradient shimmer (background-position animation with -webkit-background-clip:text) so the text breathes — same trick Linear and Vercel use on their loading skeletons - 12px gap between indicator and dots; 12px vertical padding so the block has actual presence in the message-list flow Falls back gracefully on browsers that don't support background-clip:text — the underlying solid muted color remains visible. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Owner
|
Thanks for the contribution! I tried it locally — love the shimmer effect, really nice touch. I'd love to incorporate it. A few things to adjust:
|
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.
What
Upgrades the in-flight loading indicator from a near-invisible 18×21px grey dot grid to a more present moment that reads as alive rather than frozen:
[Agent] is thinking…(orWaiting for permission…when permission is pending)background-positionanimation with-webkit-background-clip: text) — the same trick Linear, Vercel, and Stripe use on skeleton loadersWhy
The waiting state used to look frozen. A 9-dot grid with no caption, in 18×21px, didn't read as motion to most users — just static chrome. With this change, the gap between user prompt and first streaming token feels intentional, not broken.
Compatibility
background-clip: text— the underlying solid muted color (var(--text-muted)) remains visibleprefers-reduced-motionindirectly: the shimmer is a slow 2.4s cycle and the dot pulse is a soft 1.2s ease — neither rapid enough to be vestibular-uncomfortable. (Open to adding@media (prefers-reduced-motion: reduce)if maintainers prefer.)Files changed
src/ui/MessageList.tsx— caption span beside the dots; conditional text by permission statestyles.css— beefier dots, shimmer keyframe, layout tweaksScreenshots
Before / after pairs available on request — happy to attach if useful for review.
Notes
This is one of several small UX polish patches I have in flight on a fork branch. Each is independent; this one stands alone and is the smallest. If any of the visual choices conflict with the maintainer's taste, I'm open to iterating.