Skip to content

fix(mobile): move a lone pane's actions into the tab menu on touch screens - #835

Merged
devswha merged 3 commits into
mainfrom
fix/phone-pane-actions-in-tab-menu
Oct 11, 2026
Merged

devswha merged 3 commits into
mainfrom
fix/phone-pane-actions-in-tab-menu

Conversation

@devswha

@devswha devswha commented Oct 11, 2026

Copy link
Copy Markdown
Owner

Problem

On a phone, opening a chat showed three ellipsis buttons around the top-right corner: the header's More, the active tab's touch menu, and the lone pane's own pane-actions button (always visible on touch since #747), which floated over the chat text right under the header's.

Change

  • PaneCanvas builds its pane actions with a shared itemsFor(pane) and publishes it through an actionsRef from App.
  • TabStrip's touch menu (opened from its ellipsis) now lists: the tab's panes (phone split), then the open pane's actions (rename, clear name, split, zoom, right-click passthrough, close), then the tab's actions. The desktop right-click tab menu is unchanged.
  • CSS hides a single pane's floating head while a .tab-strip-menu is on screen, so where the strip is not drawn (short phone with one tab) the pane keeps its own button. Split panes on a wide touch screen keep their own menus.

Tests

  • bun run check fast passes.
  • tab-menu-regression, mobile-tabs-regression and ui-regression updated for the merged menu and pass on an isolated herdr.

🤖 Generated with Claude Code

…reens

A pane shown alone on a touch screen drew its own ellipsis over the chat,
right under the header's, next to the tab's: three ellipses in one corner.
The tab's touch menu now carries the open pane's actions and the lone
pane's floating button is hidden while that menu button is on screen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 6 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Repository: devswha/herdr-web-ui/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 65c847c3-97f0-417d-84ee-1cdc95eba3b7

📥 Commits

Reviewing files that changed from the base of the PR and between c6f1a2b and 3b29819.


📒 Files selected for processing (8)
  • CHANGELOG.md
  • scripts/mobile-tabs-regression.ts
  • scripts/tab-menu-regression.ts
  • scripts/ui-regression.ts
  • src/App.tsx
  • src/components/PaneCanvas.css
  • src/components/PaneCanvas.tsx
  • src/components/TabStrip.tsx

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: devswha/herdr-web-ui/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: ab9c1f95-1856-4c5b-b9eb-982ef4e8178f



📥 Commits

Reviewing files that changed from the base of the PR and between d92df49 and c6f1a2b.




📒 Files selected for processing (8)
  • CHANGELOG.md
  • scripts/mobile-tabs-regression.ts
  • scripts/tab-menu-regression.ts
  • scripts/ui-regression.ts
  • src/App.tsx
  • src/components/PaneCanvas.css
  • src/components/PaneCanvas.tsx
  • src/components/TabStrip.tsx



Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 3 remain after this review.





📝 Summary

Summary by CodeRabbit

  • Bug Fixes
    • On touch screens, a pane displayed on its own no longer shows a separate ellipsis menu over the chat or terminal. Its actions are available from the tab’s ellipsis menu, alongside tab actions.
    • Split panes on wide touch screens retain their own menu.
    • Pane and tab actions are grouped in the combined menu, which remains usable when scrolled.
📝 Summary
📝 Summary

Walkthrough

On touch screens, the selected tab’s menu now includes actions for its open pane. A lone pane no longer shows its own ellipsis menu. Split panes on wide touch screens retain their own menu.

Changes

Touch pane actions

Layer / File(s) Summary
Expose pane actions to the tab menu
src/components/PaneCanvas.tsx, src/App.tsx
PaneCanvas exposes a function that builds actions for a target pane. App passes TabStrip a callback that looks up the pane and returns those actions.
Compose the touch menu and validate pane actions
src/components/TabStrip.tsx, src/components/PaneCanvas.css, scripts/*, CHANGELOG.md
The selected tab’s touch menu groups pane choices, pane actions, and tab actions. The lone pane’s separate menu is hidden. Regression checks cover the combined menu and its scroll behavior; the changelog records the touch-menu change.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~15 minutes

Change: Bug fix

Suggested reviewers: kilhyeonjun, jiunshinn





Merge Risk: ⚪ Minimal · up to c6f1a

On touch screens, a lone pane's actions move into the tab menu, and split panes on wide touch screens keep their own menu. No concrete merge-blocking risk was identified in the supplied change.

Pre-merge checks | Passed 4 | Failed 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 28.57% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 7 functions across 6 files. (2 skipped: 2… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check Passed The title clearly and concisely describes the main change: moving lone-pane actions into the touch-screen tab menu.
Description check Passed The description explains the problem, resulting behavior, implementation, platform-specific behavior, and validation results. It uses "Tests" instead of the template's "Validation" heading, but it pro…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.



Full details: Docstring Coverage

Explanation

Docstring coverage is 28.57% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 7 functions across 6 files. (2 skipped: 2 unsupported.)






✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR




🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR





  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

devswha and others added 2 commits October 12, 2026 06:34
…ender

Review finding (Codex, pre-merge): TabStrip renders before PaneCanvas, so
its menu held the actions of the canvas's previous render; a snapshot that
arrived while the sheet was up (another client closing the sibling pane)
left Close pane deciding on the old pane count, skipping the last-pane
confirmation. Each action now resolves itself against the canvas's current
actions when it runs. No deterministic browser check: herdr's follow-up
events re-render the strip before a tap can land on the stale items.

The narrow-window and tablet menu checks assert the full ordered group of
pane actions, as the phone check does.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@devswha
devswha merged commit f704740 into main Oct 11, 2026
9 checks passed
@devswha
devswha deleted the fix/phone-pane-actions-in-tab-menu branch October 11, 2026 21:44
devswha added a commit that referenced this pull request Oct 11, 2026
CHANGELOG: one Fixed heading under Unreleased with #837, #835 and this entry.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
devswha added a commit that referenced this pull request Oct 11, 2026
## Problem
On a phone, a long press on the chat opened "Pane actions for …" instead
of the phone's own text selection and copy. A touch long press fires
`contextmenu`, and `PaneCanvas`'s capture handler took every contextmenu
for the pane menu.

## Change
- `PaneCanvas` ignores a contextmenu whose `pointerType` is `touch` or
`pen` (or, where the event carries none, one that followed a touch/pen
pointerdown on the frame), and does not prevent its default. Mouse
right-click and macOS Control-click are unchanged.
- Pane actions stay reachable on touch from the pane's ⋯ (and from the
tab menu once #835 lands).

## Tests
- New `scripts/touch-long-press-demo-regression.ts` (demo app, phone
viewport): a touch contextmenu is not prevented and opens no pane menu;
a mouse right-click still opens it. It fails without the fix. Added to
`ci-browser.sh` (lane count 36 → 37 in `ci-browser.test.ts`).
- `bun run check fast`, `tab-menu-regression`,
`key-bar-hold-repeat-regression`, `terminal-arrows-clicks-regression`
pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
devswha added a commit that referenced this pull request Oct 12, 2026
## Change

Release 0.4.8, from main at ca6db6e (20 PRs since v0.4.7: the 0.4.7
mobile walk-through fixes, two contributor PRs and the revived #793).

- `package.json` and `herdr-plugin.toml`: 0.4.8.
- CHANGELOG: `[Unreleased]` becomes `[0.4.8] - 2026-10-12`, with the
compare links. Twelve entries that had no PR link get theirs (#835 #837
#838 #840 #842 #843 #844+#848 #845 #847 #849 #851 #852). A Maintenance
line says the remote-PC runtime is now version 27.
- `release-summaries.json`: 0.4.8 in en/ko/ja/zh/tr (3 new, 6 improved,
8 fixed). The Turkish lines are not checked by a native speaker.
- `REMOTE_BUNDLE_VERSION` 26 -> 27: #836 adds the `pending-hold` server
feature and #787 serves precompressed assets, so `remote-v27` is
published before the app release.

Every PR merged since v0.4.7 is linked in the section: #787 #788 #793
#835 #836 #837 #838 #839 #840 #841 #842 #843 #844 #845 #846 #847 #848
#849 #851 #852.

## Validation

- `bun scripts/release-notes.ts 0.4.8` renders the summaries and the
full changelog (116 lines).
- `bun run check fast`: generated types, typecheck, build and 2800+ unit
tests pass.

## Release

After this merges and its CI on `main` passes: push `remote-v27`, wait
for its release, then run the Release workflow with `0.4.8`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Haeminway1 added a commit to Haeminway1/herdr-web-ui that referenced this pull request Oct 12, 2026
Conflicts: version 0.4.801; the classic tab strip and one-pane canvas kept beside
upstream devswha#835's pane actions in the touch tab menu; the open latest work prop kept
with devswha#788's immutable turn revisions. Upstream devswha#846 removed the header's plan button
and its dialog: they stay as the default, and its plan in the background-task chip
is Settings → Appearance → Plan in the message box, off (on under automation).

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