fix(app): chat UI polish — persistent dot, rail alignment, cohesive segments, smooth scroll - #629
Draft
jeonghun-jj-lee wants to merge 3 commits into
Draft
fix(app): chat UI polish — persistent dot, rail alignment, cohesive segments, smooth scroll#629jeonghun-jj-lee wants to merge 3 commits into
jeonghun-jj-lee wants to merge 3 commits into
Conversation
Pure logic modules for #628 chat UI polish: - chunk-boundaries.ts: markdown text segmentation with label heuristic (<40 chars + colon suppresses split), list-to-list guard, heading coherence - smooth-scroll.ts: custom RAF-based 180ms ease-out scroller with cancel(), instant fallback for reduced-motion - dot-offsets.ts: deterministic vertical centre by row group type (prose=21, tool-group=11, single-tool=16, thinking=11) All three modules are DOM-free and fully tested (34 tests, 0 failures).
- ChunkedMarkdown: settled text renders as multiple bordered cards using chunkBoundaries (streaming stays single-block for stability) - Smooth scroll: anchorResizedBottom uses 180ms ease-out RAF scroller; cancelled immediately on user scroll gesture - Rail alignment: md:pl-3 on TimelineRowFrame pushes content inside the composer's visible left boundary - ThoughtRailOverlay: persistent AmicoWave dot in a sticky container, spanning the active turn; 250ms spring animation on step transitions - CSS: thought-rail spring bezier, crossfade on settle, reduced-motion fallbacks disable all animations - Re-export AmicoWave from @opencode-ai/ui/amicode-thinking
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
- Rail renders inside session-turn's left padding (left: 12px), within the existing px-4/md:px-5 content area — no extra outer padding that would push content off the compositor alignment - Dot anchor centres at 18px from top for prose rows (aligns with first text baseline), 8px for thinking rows (aligns with wave) - Import AmicoWave in message-timeline for the live working dot - Rail segment only visible at md+ breakpoints (hidden md:block) - Verified: 1713 tests pass, build clean
Contributor
Author
Fresh implementation on rebased branchAll changes are now committed to the opencode fork at What's in:
Test results:
|
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.
Closes #628
Summary
Implements the four chat UI polish improvements for a seamless messaging feel:
1. Cohesive text segmentation (
chunk-boundaries.ts):) stay with their content2. Smooth scroll (
smooth-scroll.ts)scrollToEnd()prefers-reduced-motionfalls back to instant3. Persistent dot overlay (
thought-rail.tsx)position: sticky; top: 12pxkeeps it visible during long streamscubic-bezier(0.34, 1.56, 0.64, 1)) on step transitions4. Rail alignment
md:pl-3onTimelineRowFramealigns the rail inside the composer's visible left boundaryVerification
prefers-reduced-motiondisables all animations (global rule + per-component)