Skip to content

polish(tray/chat): replace reconnecting spinner with skeleton timeline + composer#498

Merged
shanselman merged 1 commit into
openclaw:masterfrom
kenehong:polish/chat-skeleton-timeline
May 22, 2026
Merged

polish(tray/chat): replace reconnecting spinner with skeleton timeline + composer#498
shanselman merged 1 commit into
openclaw:masterfrom
kenehong:polish/chat-skeleton-timeline

Conversation

@kenehong
Copy link
Copy Markdown
Contributor

Summary

Replaces the centered "Reconnecting…" spinner with a message-shaped
skeleton (timeline + composer) so returning users see a placeholder
that visually maps to the chat surface that will replace it. Also
eliminates the brief zero-state flash that happened between thread
selection and the first chat.history response.

What changed

  • Skeleton timeline (OpenClawChatRoot.RenderSkeletonTimeline)
    • 5 alternating bubbles (L/R) with subtle text-line stripes inside
    • Bubble radius 8 (matches composer); line radius 4 (pill)
    • Staggered shimmer (Storyboard opacity 1.0 → 0.45, 900ms, AutoReverse, SineEase)
    • 4px-grid layout: padding (16, 12), margin (16, 8), VStack 8
  • Skeleton composer (RenderSkeletonComposer)
    • 56-tall rounded input placeholder + 40×40 circular send placeholder
    • Synced shimmer (160ms phase offset)
  • Welcome flicker fix (OpenClawChatRoot)
    • 800ms debounce on welcomeSettledState
    • Two-path eligibility gate combining isComposeOnlyThread /
      hasRealThreads / timeline.HistoryLoaded so the zero-state
      no longer appears momentarily while history is in flight
  • Sessions-list gate (OpenClawChatDataProvider)
    • _sessionsListReceived ensures composeReady doesn't fire before
      we know whether real threads exist (regression test added)

Validation

  • ./build.ps1
  • Tray tests 1176 / 1176 ✅
  • Shared tests 1813 / 1813 ✅
  • Manual: no flicker; skeleton breathes; bubble radius matches composer

Deferred (follow-ups)

  • HC-aware ThemeResource brushes for the skeleton fills
  • Skip shimmer animation when AccessibilitySettings.HighContrast
  • AutomationProperties.Name="Loading conversation" + LiveSetting=Polite

@kenehong kenehong marked this pull request as draft May 21, 2026 22:28
…e + composer

Replaces the centered `Reconnecting...` spinner with a message-shaped
skeleton (timeline + composer) so returning users see a placeholder that
visually maps to the chat surface that will replace it. Also eliminates
the brief zero-state flash between thread selection and the first
chat.history response.

What changed
- Skeleton timeline (RenderSkeletonTimeline): 5 alternating bubbles
  with subtle text-line stripes, bubble radius 8 (matches composer),
  line radius 4, staggered shimmer (Storyboard opacity 1.0 -> 0.45,
  900ms, AutoReverse, SineEase). 4px-grid layout throughout.
- Skeleton composer (RenderSkeletonComposer): 56-tall rounded input
  placeholder + 40x40 circular send placeholder, synced shimmer.
- Welcome flicker fix: 800ms debounce on welcomeSettledState plus a
  two-path eligibility gate (isComposeOnlyThread / hasRealThreads /
  timeline.HistoryLoaded) so the zero-state no longer flashes while
  history is in flight.
- Sessions-list gate (OpenClawChatDataProvider): _sessionsListReceived
  ensures composeReady does not fire before we know whether real
  threads exist. Regression test added.

Validation
- ./build.ps1
- Tray tests 1176/1176
- Shared tests 1813/1813
- Manual: no flicker; skeleton breathes; bubble radius matches composer.

Deferred follow-ups
- HC-aware ThemeResource brushes for skeleton fills
- Skip shimmer when AccessibilitySettings.HighContrast
- AutomationProperties.Name + LiveSetting=Polite on skeleton container

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@kenehong kenehong force-pushed the polish/chat-skeleton-timeline branch from ea32e10 to 20eb9e4 Compare May 22, 2026 00:02
@kenehong kenehong marked this pull request as ready for review May 22, 2026 01:02
shanselman added a commit that referenced this pull request May 22, 2026
Includes PRs #498, #500, #501, #502, and #503.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@shanselman shanselman merged commit 758d00e into openclaw:master May 22, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants