feat(chat): redesign composer to two-row layout with toolbar#3165
Conversation
Extract the inline chat composer from Conversations.tsx into a standalone
ChatComposer component with a modern two-row layout:
- Row 1: full-width auto-resizing textarea
- Row 2: toolbar with + attachment (left), model/quality pill, mic, and
send/equalizer buttons (right)
All controls now live inside a single rounded container instead of as
separate pill buttons. The send button appears conditionally when the
user has content to send.
Includes ModelQualityPill (read-only v1), updated placeholder text
("How can I help you today?"), i18n translations for all 14 locales,
and 20 new unit tests.
Closes tinyhumansai#3158
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (2)
📝 WalkthroughWalkthroughExtracts the inline Conversations composer into a new ChatComposer (two-row textarea + toolbar), adds CycleUsagePill and ModelQualityPill, updates i18n placeholders/toolbar labels across locales, adapts Conversations to use ChatComposer, and adds component and page test updates. ChangesChat Composer Multi-Row Redesign
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
…e, no model pill - Remove ModelQualityPill from toolbar - Send button is always visible (disabled when empty), moved to far right - Voice mode (mic icon) placed left of send button Closes tinyhumansai#3158
Move the usage/cycle pill from the chat header into the composer toolbar, positioned to the right of the + attachment button. Closes tinyhumansai#3158
Move the LimitPill + tooltip ("CYCLE 0%" with spend/remaining hover)
from its position above the composer into the toolbar next to the +
attachment button. Extracted into a self-contained CycleUsagePill
component that uses useUsageState() internally.
Closes tinyhumansai#3158
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@app/src/components/chat/ChatComposer.tsx`:
- Around line 32-38: Update the stale top docstring in ChatComposer.tsx to match
the actual rendered toolbar: replace the Row 2 description that currently reads
"ModelQualityPill · mic · send/equalizer" with the current layout (e.g., "[+] ·
CycleUsagePill" on the left and "voice · send" on the right), remove any mention
of ModelQualityPill or equalizer, and keep the rest of the
textarea/ghost-completion description intact so the comment accurately reflects
the component's UI.
In `@app/src/lib/i18n/fr.ts`:
- Line 239: Update the translation for the key 'chat.typeMessage' to use the
informal tutoiement form to match the rest of the locale (e.g., change "Comment
puis-je vous aider aujourd'hui ?" to an informal equivalent such as "Comment
puis-je t'aider aujourd'hui ?"); locate the 'chat.typeMessage' entry in the
fr.ts translations and replace the formal "vous" phrasing with the informal
"tu"/contraction "t'" while preserving punctuation and encoding.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 111dedf1-b120-48db-92d4-21e4121c35e1
📒 Files selected for processing (22)
app/src/components/chat/ChatComposer.tsxapp/src/components/chat/CycleUsagePill.tsxapp/src/components/chat/ModelQualityPill.tsxapp/src/components/chat/__tests__/ChatComposer.test.tsxapp/src/components/chat/__tests__/ModelQualityPill.test.tsxapp/src/lib/i18n/ar.tsapp/src/lib/i18n/bn.tsapp/src/lib/i18n/de.tsapp/src/lib/i18n/en.tsapp/src/lib/i18n/es.tsapp/src/lib/i18n/fr.tsapp/src/lib/i18n/hi.tsapp/src/lib/i18n/id.tsapp/src/lib/i18n/it.tsapp/src/lib/i18n/ko.tsapp/src/lib/i18n/pl.tsapp/src/lib/i18n/pt.tsapp/src/lib/i18n/ru.tsapp/src/lib/i18n/zh-CN.tsapp/src/pages/Conversations.tsxapp/src/pages/__tests__/Conversations.attachments.test.tsxapp/src/pages/__tests__/Conversations.render.test.tsx
# Conflicts: # app/src/lib/i18n/ar.ts # app/src/lib/i18n/bn.ts # app/src/lib/i18n/de.ts # app/src/lib/i18n/en.ts # app/src/lib/i18n/es.ts # app/src/lib/i18n/fr.ts # app/src/lib/i18n/hi.ts # app/src/lib/i18n/id.ts # app/src/lib/i18n/it.ts # app/src/lib/i18n/ko.ts # app/src/lib/i18n/pl.ts # app/src/lib/i18n/pt.ts # app/src/lib/i18n/ru.ts # app/src/lib/i18n/zh-CN.ts
- Update ChatComposer docstring to match actual toolbar layout - Use informal tutoiement for French chat.typeMessage placeholder to match the chat namespace register
Summary
Redesigns the chat composer into a modern two-row layout inside a single rounded container, inspired by Claude's composer:
Conversations.tsx(2,357 lines) into a standaloneChatComposercomponent+attachment button (left),ModelQualityPill+ mic + send/equalizer buttons (right)Changes
ChatComposer.tsxModelQualityPill.tsxConversations.tsx<ChatComposer />Test plan
pnpm typecheck— cleanpnpm lint— 0 errors (89 pre-existing warnings)pnpm format:check— cleanpnpm build— successpnpm i18n:check— 0 missing/extra keys in all localesCloses #3158
Summary by CodeRabbit
New Features
Localization
Tests