Skip to content

Add pulsing streaming indicator to chat list rows#124

Open
mcintyre94 wants to merge 3 commits into
mainfrom
chat-streaming-indicator-needed-322189be
Open

Add pulsing streaming indicator to chat list rows#124
mcintyre94 wants to merge 3 commits into
mainfrom
chat-streaming-indicator-needed-322189be

Conversation

@mcintyre94

Copy link
Copy Markdown
Owner

Summary

  • Adds a StreamingDot shared view — an 8×8 orange circle that slowly pulses (1s ease-in-out, 100%→30% opacity) while active
  • ChatSwitcherSheet chat rows show the dot when streaming, falling back to the blue unread dot when not
  • SpriteNavigationPanel sidebar rows get the same treatment on their right-side indicator
  • Driven by the existing ChatSessionManager.isStreaming(chatId:) — no model changes needed; SwiftUI re-renders automatically as the @Observable manager updates
  • Streaming state takes priority over unread since it's more immediate/actionable

Test plan

  • Send a message and open the chat switcher — the active chat row should show a pulsing orange dot while Claude streams
  • On iPad/Mac, confirm the sidebar nav panel shows the same dot for the active chat during streaming
  • After streaming completes, dot disappears; if the chat has a new response and isn't active, blue unread dot appears
  • Switching to a different chat while one is streaming shows the orange dot on the non-active streaming chat row

🤖 Generated with Claude Code

mcintyre94 and others added 3 commits April 4, 2026 07:19
Adds a ClaudeEffortLevel enum (low/medium/high/max) and surfaces it in
the existing model picker as a second Menu section. The pill label shows
the effort level only when non-default (e.g. "Sonnet · High") to avoid
visual noise. Max effort is hidden unless Opus is selected, and switching
away from Opus while on max resets to high. Effort is passed to every
claude invocation via --effort.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Shows a slow-pulsing orange dot on chat rows in the switcher sheet and
sidebar nav panel while Claude is actively streaming, using the existing
ChatSessionManager.isStreaming(chatId:) observable. Takes priority over
the blue unread dot when both states apply.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
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.

1 participant