Skip to content

feat(ios): compact idle composer — one-line per shell when not typing#6

Merged
boggspa merged 1 commit into
masterfrom
feat/ios-compact-idle-composer
Jun 18, 2026
Merged

feat(ios): compact idle composer — one-line per shell when not typing#6
boggspa merged 1 commit into
masterfrom
feat/ios-compact-idle-composer

Conversation

@boggspa

@boggspa boggspa commented Jun 18, 2026

Copy link
Copy Markdown
Owner

What

When the composer text field is not focused (and empty, no draft/queued/attachment), each shell now collapses to a single-line field + model pill + send — like the Claude / Codex mobile composers. Focusing it (or any pending content) expands it back to the full composer: model/approval/guest controls, roster/queued secondary rows, and the telemetry footer rail.

This is the Claude-style idle bar (keeps a model pill), per your pick.

How

  • Composer (ComposerView.swift): a @FocusState drives isExpanded = focused || draft || attachment || queued || forced. Idle hides the approval + guest controls (the model pill stays as the compact control). The one-line text + send input row already existed, so no new input layout was needed.
  • Host (ThreadDetailView): mirrors expansion via an onExpandedChange callback (composerExpanded), and hides the secondary roster/queued rows + the telemetry rail when idle. attachedBottom now follows expansion so the bar's bottom corners round when the rail is hidden.
  • Per-shell skin preserved for free — the shell surface/rim/radius modifiers wrap independently of the inner rows, so Codex stays Codex-skinned, the bubble/capsule shells (Claude/Gemini/Cursor/Obsidian/Alabaster) frame the one-liner, etc.
  • Always-expanded (by design): the welcome hero, ensemble composer (its @-direct roster is core context), and the side-chat mini composer (forcesExpanded). A thread with a draft or queued prompt never collapses; focus resets on iPhone thread-switch (the composer instance is reused across threads).

Verification

  • swift build + 69 Kit tests + iOS app build (iPhone 17 sim) — all green.
  • Recommended on-device pass (visual, can't be unit-tested): cycle the 13 shells via Settings → Composer Shell and confirm the idle one-liner keeps each skin and the bottom corners round. Watch-items from the design map: Codex (#252525 inner module still backs the bar + bottom rounds), Grok (skin holds when the tucked tab disappears), Stub (perforation line on a one-line surface).

Notes / follow-ups

  • Compact bar = text + model pill + send (your choice). The pill reuses the existing ProviderModelPicker (already per-shell skinned).
  • The side-chat mini composer stays always-expanded for v1; collapsing it (biggest space win in the iPad inspector) is an easy fast-follow if wanted.

🤖 Generated with Claude Code

When the composer text field is unfocused, empty, and has nothing pending,
each shell collapses to a single-line field + model pill + send (like the
Claude/Codex mobile composers), expanding to the full controls + roster/
queued rows + telemetry rail the moment you focus it (or there's a draft /
queued prompt / attachment).

- Composer: a @focusstate drives `isExpanded`; idle hides the approval +
  guest controls (the model pill stays). Each shell's skin is preserved —
  the surface/rim/radius modifiers are independent of the inner rows.
- Host (ThreadDetailView): mirrors expansion via onExpandedChange; hides the
  secondary roster/queued rows + the telemetry rail when idle; rounds the
  composer's bottom corners when the rail is hidden (attachedBottom follows
  expansion).
- Welcome hero, ensemble (@-direct roster), and the side-chat mini composer
  stay always-expanded (forcesExpanded). A thread with a draft or queued
  prompt never collapses. Focus resets on iPhone thread-switch (the composer
  instance is reused across threads with no per-thread .id).

Verified: swift build + 69 Kit tests + iOS app build (iPhone 17 sim).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@boggspa boggspa merged commit 7bf4b94 into master Jun 18, 2026
16 checks passed
@boggspa boggspa deleted the feat/ios-compact-idle-composer branch June 18, 2026 14:15
boggspa added a commit that referenced this pull request Jun 18, 2026
Build 22 = merged iOS batch:
- PR #6: compact idle composer (collapses to a one-line text + send + model
  pill per shell when not typing/empty; expands on focus or content).
- PR #7: guest removal actually clears the composer chip (Mac projects
  sideChatLifecycleState; iOS filters closed guests; bigger X hit target +
  "Remove guest" picker item).

Co-Authored-By: Claude Opus 4.8 (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