Problem
The Send button (Composer.tsx) stays a static Send icon during streaming and is merely disabled when the input is empty. There is no in-flight state.
Suggested fix
Reflect request state in the primary button: idle → Send, streaming → Stop. This pairs with the dedicated "Stop generation" issue and gives the composer a single, predictable primary action.
Reference
VS Code Copilot Chat changes Send into a dropdown (Stop and Send / Add to Queue) while a request is in progress: https://code.visualstudio.com/docs/chat/chat-overview
Filed from a UI research sweep of the Helm mobile app (landing + live demo session) using Playwright + full source review, cross-referenced against Claude, ChatGPT, GitHub Copilot Chat, and Codex/Claude Code UIs.
Problem
The Send button (
Composer.tsx) stays a static Send icon during streaming and is merely disabled when the input is empty. There is no in-flight state.Suggested fix
Reflect request state in the primary button: idle → Send, streaming → Stop. This pairs with the dedicated "Stop generation" issue and gives the composer a single, predictable primary action.
Reference
VS Code Copilot Chat changes Send into a dropdown (Stop and Send / Add to Queue) while a request is in progress: https://code.visualstudio.com/docs/chat/chat-overview
Filed from a UI research sweep of the Helm mobile app (landing + live demo session) using Playwright + full source review, cross-referenced against Claude, ChatGPT, GitHub Copilot Chat, and Codex/Claude Code UIs.