Skip to content

fix(web): composer text and placeholder stay clear of the send buttons - #30568

Merged
maria-rcks merged 60 commits into
pingdotgg:maria/redesign/2-composer-timelinefrom
flamboh:t3/redesign-fix-composer-text-gutter
Nov 5, 2026
Merged

maria-rcks merged 60 commits into
pingdotgg:maria/redesign/2-composer-timelinefrom
flamboh:t3/redesign-fix-composer-text-gutter

Conversation

@flamboh

@flamboh flamboh commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Note

🤖 Claude Opus 5.5 on behalf of Oliver

Fix for the redesign stack, targets layer 2 (#28840).

Problem

Prompt text in the redesign composer could run under the paperclip and the mic/send pill. Line 1 kept a gutter for the buttons, but line 2 could run full width and sit right under the pill. Sometimes the buttons dropped to their own row instead. The placeholder ignored the buttons completely, so "for commands" was covered by the pill.

Fix

The buttons now stay in the top-right corner, and text wraps around them:

  • A spacer sized to the buttons. The float beside the buttons is one line tall for a single line, so the composer doesn't grow. Once the prompt wraps, the float grows to the buttons' measured height plus a 6px gap (--spacing * 1.5). Every line beside the buttons keeps the gutter, and lines below them use the full width. This works for any font size, line height or button size, because it reads the real size of the buttons.
  • Scrolling prompts. Past the 8-line cap, a float would scroll away and let text slide under the buttons. So an overflowing prompt gets a right margin the width of the buttons on every line, which also keeps the scrollbar clear. This mode only ever makes lines narrower, so switching in and out of it can't flip back and forth.
  • Placeholder. It gets the same right padding, so its ellipsis lands before the buttons.

The observer no longer needs the hidden clone of the editor that it used to measure wrapping. It measures the paragraphs' own height, which ignores the float. The mobile resting state reads the same multi-line signal as before.

Before / after

Wrapped prompt — layer 2, 2× captures

Before After
Layer 2, dark, 560 px
Before: Layer 2, dark, 560 px
After: Layer 2, dark, 560 px
Layer 2, dark, 900 px
Before: Layer 2, dark, 900 px
After: Layer 2, dark, 900 px
Layer 2, light, 560 px
Before: Layer 2, light, 560 px
After: Layer 2, light, 560 px
Layer 2, light, 900 px
Before: Layer 2, light, 900 px
After: Layer 2, light, 900 px

Empty placeholder with mic pill — layer 6, 2× captures

Before After
Layer 6, dark, 560 px
Before: Layer 6, dark, 560 px
After: Layer 6, dark, 560 px
Layer 6, dark, 534 px
Before: Layer 6, dark, 534 px
After: Layer 6, dark, 534 px
Layer 6, light, 560 px
Before: Layer 6, light, 560 px
After: Layer 6, light, 560 px
Layer 6, light, 534 px
Before: Layer 6, light, 534 px
After: Layer 6, light, 534 px

Validation

  • New observeComposerPromptLayout.browser.test.ts: wrapping, entering scroll mode, and shrinking back to one line. Fails on the layer, passes here.
  • Checked by hand on layer 2 and on a port to layer 6, at composer widths of about 470–720 px, dark and light: single line, 4 wrapped lines, a long URL, the 8-line scroll, and the placeholder. No text rect touches the buttons. The first full-width line starts 15px below the pill.
  • vp run check:changed origin/maria/redesign/2-composer-timeline passes.

Made with Claude Opus 5.5 in Claude Code.

@maria-rcks
maria-rcks force-pushed the maria/redesign/2-composer-timeline branch 2 times, most recently from e908088 to 80cc977 Compare November 5, 2026 01:04
@maria-rcks
maria-rcks merged commit d8d3ec2 into pingdotgg:maria/redesign/2-composer-timeline Nov 5, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted Author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants