feat(composer): one-row restructure (LC-574) #543

Merged
longjacksonle merged 1 commit from feat/lc574-composer-onerow into main 2026-07-11 05:15:11 +02:00

Collapses the composer's two control rows into one, matching the mockup and completing the layout deferred from LC-559. Carved out as LC-574; approved from a visual pass (all recommended).

What changed

The message input now spans the full width on top and is borderless - the elevated card frames it, a 2px focus ring replaces the resting border, and .lc-mdback / .lc-mdinput keep an equal 1px transparent border so the LC-399 markdown-highlight overlay stays metric-pinned.

Below it, a single .lc-composer-bar holds:

  • left: formatting group B I S | sep | </> link bullet quote, then a sep, then the action icons (attach, mic, clip, emoji, poll, AI, event, gif, schedule);
  • right (.lc-composer-bar-right, ml-auto): char counter, Preview toggle, ephemeral-timer select, accent Send square.

The bar wraps on narrow widths, so it no longer overflows and its buttons take a true 44x44 on coarse pointers - completing the dense-row target the LC-573 decision had deferred for the composer (the room-header cluster still doesn't wrap, so it stays height-only). The two composer button sizes (28px .lc-fmt-btn / 36px .lc-composer-btn, both composer-only) are unified to 32px.

Safety

Structural move only - every button keeps its id / data-lc-* / hx-* / onclick, so the composer JS and htmx keep all node references. Verified: single textarea[name=body], single #composer-send, single preview pane, balanced tags; dev/cargo check compiles the template; dev-web rebuilt and serving. Shared by the room and DM composer.

Please give the live composer a spin (type/resize, mention/slash/emoji popovers, Preview toggle, attach/voice, Send enable) on the running instance - the interaction set is unchanged but this is the heaviest-wired file in the redesign.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GJbJChgMXj7m1Q8GdnTPyT

Collapses the composer's two control rows into one, matching the mockup and completing the layout deferred from **LC-559**. Carved out as **LC-574**; approved from a visual pass (all recommended). ## What changed The message input now spans the **full width on top** and is **borderless** - the elevated card frames it, a 2px focus ring replaces the resting border, and `.lc-mdback` / `.lc-mdinput` keep an equal 1px *transparent* border so the LC-399 markdown-highlight overlay stays metric-pinned. Below it, a single `.lc-composer-bar` holds: - **left:** formatting group `B I S` | `sep` | `</> link bullet quote`, then a `sep`, then the action icons (attach, mic, clip, emoji, poll, AI, event, gif, schedule); - **right** (`.lc-composer-bar-right`, `ml-auto`): char counter, Preview toggle, ephemeral-timer select, accent **Send** square. The bar **wraps** on narrow widths, so it no longer overflows and its buttons take a true **44x44** on coarse pointers - completing the dense-row target the **LC-573** decision had deferred for the composer (the room-header cluster still doesn't wrap, so it stays height-only). The two composer button sizes (28px `.lc-fmt-btn` / 36px `.lc-composer-btn`, both composer-only) are unified to 32px. ## Safety Structural move only - every button keeps its `id` / `data-lc-*` / `hx-*` / `onclick`, so the composer JS and htmx keep all node references. Verified: single `textarea[name=body]`, single `#composer-send`, single preview pane, balanced tags; `dev/cargo check` compiles the template; dev-web rebuilt and serving. Shared by the room and DM composer. Please give the live composer a spin (type/resize, mention/slash/emoji popovers, Preview toggle, attach/voice, Send enable) on the running instance - the interaction set is unchanged but this is the heaviest-wired file in the redesign. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01GJbJChgMXj7m1Q8GdnTPyT
feat(composer): one-row restructure (LC-574)
All checks were successful
check-secrets / Kingfisher (pull_request) Successful in 5s
check-secrets / TruffleHog (pull_request) Successful in 6s
check-secrets / TruffleHog (push) Successful in 7s
check-secrets / Nosey parker (push) Successful in 7s
check-secrets / Nosey parker (pull_request) Successful in 8s
check-secrets / Kingfisher (push) Successful in 8s
Check / clippy + fmt + tests (pull_request) Successful in 7m2s
Create release / Create release from merged PR (pull_request) Has been skipped
d22046024b
Collapses the composer's two control rows into one, matching the mockup and completing the layout deferred from LC-559. Approved from a visual pass (all recommended).

The message input now spans the full width on top and is borderless (the elevated card frames it; a 2px focus ring replaces the resting border, and .lc-mdback/.lc-mdinput keep an equal 1px transparent border so the LC-399 markdown-highlight overlay stays metric-pinned). Below it, a single .lc-composer-bar holds the formatting group (B I S | </> link bullet quote) and a hairline sep, then the action icons (attach, mic, clip, emoji, poll, AI, event, gif, schedule), then a right cluster (.lc-composer-bar-right, ml-auto) with the char counter, Preview toggle, ephemeral-timer select and the accent Send square.

The bar wraps on narrow widths, so it no longer overflows and its buttons take a true 44x44 on coarse pointers - completing the dense-row target the LC-573 decision had deferred for the composer (the room-header cluster still doesn't wrap, so it stays height-only). The two composer button sizes (28px .lc-fmt-btn / 36px .lc-composer-btn, both composer-only) are unified to 32px so they align on the one bar.

Structural move only: every button keeps its id / data-lc-* / hx-* / onclick, so the composer JS and htmx keep all node references. Verified: single textarea[name=body], single #composer-send, single preview pane, balanced tags; dev/cargo check compiles the template; dev-web rebuilt and serving. Shared by the room and DM composer.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GJbJChgMXj7m1Q8GdnTPyT
longjacksonle scheduled this pull request to auto merge when all checks succeed 2026-07-11 05:11:51 +02:00
longjacksonle deleted branch feat/lc574-composer-onerow 2026-07-11 05:15:11 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/lets-chat!543
No description provided.