Skip to content

Put the phone input bar in flow below the output - #437

Closed
IvoryHeart wants to merge 1 commit into
powerfooI:mainfrom
IvoryHeart:mobile-input-bar
Closed

IvoryHeart wants to merge 1 commit into
powerfooI:mainfrom
IvoryHeart:mobile-input-bar

Conversation

@IvoryHeart

Copy link
Copy Markdown
Contributor

Part of #435.

Summary

On phones, the floating Type button sits over the bottom-right of the terminal output and opens the dock without raising the keyboard. This PR replaces it with a messaging-style input bar placed in the terminal's layout, below the output:

  • Message…: a full-width field. It opens Composer and focuses the draft within the tap, so the keyboard comes up in one tap. With an unsent draft it reads Continue draft… (aria: "Open terminal input, unsent draft"), replacing the old draft dot.
  • Terminal button beside it: opens Direct, through the dock's existing focus handoff.
  • In flow, not floating: .terminal-main becomes a column on phones, so the bar never covers terminal text.
  • During a long-press selection: the bar hides but keeps its height (data-reserved, visibility: hidden). Without that, xterm resizes and the selection is lost.
  • Sizes: buttons are 48px and scale with --ui-scale, like the existing touch targets.
  • Unchanged: the other floating controls and the desktop coarse-pointer keyboard button.

App.tsx loses the floating Type button and the draft state that only it used. mobile-nav.css loses its styles. The initial JS shrinks to 801.0/802 KiB. FEATURES.md describes the bar.

Relation to the other open PRs: #436 makes the existing Type button one-tap, while this PR replaces that button with the bar (which is one-tap too), so the two are alternatives for that button. #433 (system Back) is independent; the dock this bar opens is one of its layers.

Tests

TerminalView.inputMode.test.ts, new test "the phone input bar opens Composer with its draft focused, or Direct". It checks:

  • the label
  • Message opens Composer with the draft focused, saves Composer mode, and keeps stdin blocked
  • the unsent-draft label and aria text
  • Direct opens Direct with the terminal focused

Validation

  • bun run format:check, bun run lint, bun run typecheck and bun run typecheck:bun pass. bun run test:quick: 3719 pass, 0 fail.
  • Headless Chrome at 412×915 (mobile layout) against a real Herdr backend:
    • the terminal ends where the bar begins (output 87–853px, bar 853–915px)
    • Message opens the dock with focus in the draft
  • The same bar ships in a Roamgate-derived app and was tried on a physical phone there. This branch has not been tried on a device.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AWodzpMyqdBcX25EE9HhDG

@github-actions github-actions Bot added the enhancement New feature or request label Oct 16, 2026
On phones, the floating Type button sat over the bottom-right of the
terminal output and opened the dock without the keyboard. It becomes a
messaging-style bar in the terminal's layout, below the output: a full-
width Message field opens Composer with its draft focused, so one tap
raises the keyboard, and a terminal button beside it opens Direct. The
bar never covers output, names an unsent draft (Continue draft...), and
during a long-press selection it stays hidden but keeps its height, so
xterm does not resize and drop the selection. Its targets are 48px and
scale with the UI. The other floating controls are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AWodzpMyqdBcX25EE9HhDG
@IvoryHeart

Copy link
Copy Markdown
Contributor Author

Folded into #438 together with the app bar, so the #435 proposal lands as one PR. Closing this one in favour of it.

@IvoryHeart IvoryHeart closed this Oct 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant