Skip to content

feat(ui): restore sidebar chrome, delete the pane workspace strip, compact native narrow header#103561

Merged
steipete merged 4 commits into
mainfrom
claude/sidebar-restore-rail-strip
Jul 10, 2026
Merged

feat(ui): restore sidebar chrome, delete the pane workspace strip, compact native narrow header#103561
steipete merged 4 commits into
mainfrom
claude/sidebar-restore-rail-strip

Conversation

@steipete

Copy link
Copy Markdown
Contributor

What Problem This Solves

Course correction on #103426, from maintainer feedback: the left sidebar's chrome (Settings, Docs, pairing, the status dot bottom-left, pinned navigation + More with plugin tabs) was right where it was — the bar that should disappear is the vertical icon strip on each chat pane (the collapsed session-workspace rail), which sits mid-window in split view. Separately, narrow native macOS windows (the in-app link browser splitting the window) stacked 50px of injected titlebar padding on top of the 58px drawer header (~108px of chrome).

Fixes #103544.

Why This Change Was Made

  • Sidebar restored as the only desktop chrome. Brand row (with palette search + collapse toggle), pinned nav + More, New session, sessions list, utility footer. The desktop top bar is removed again; app-topbar returns to the narrow-viewport drawer header. This also deletes the topbar More/customize menus, making the recently landed menu-dismissal fix (fix(ui): dismiss topbar menus when their anchors disappear #103508) moot by design.
  • Kept from feat(ui): move app chrome into a topbar and dock the session workspace rail #103426 (the parts that matched the original ask): the dockable right/bottom session workspace rail (drag with drop zones, or the dock button), the in-flow per-pane split headers (the fixed geometry-mirroring toolbar stays dead), the dead-button fix, and Cmd+B as a full hide — no 78px icon rail; a floating expand control (and Cmd+B) brings the sidebar back.
  • Rail strip deleted. A collapsed workspace rail renders nothing at all. The toggle, with a changed-file count badge, sits in each split-pane header next to the split/close buttons; single-pane chat gets a floating top-right button (mirroring the floating split-view opener). Shift+Cmd+B unchanged.
  • Compact native narrow header. The web CSS now folds the macOS titlebar clearance into one 58px row beside the traffic lights, with body-qualified !important selectors that outrank the rules shipped Mac apps inject; the brand strip stays passive under the AppKit drag region (x 78-254) so every control remains clickable. The Mac app's injected chrome drops its narrow-width rules and keeps only the desktop sidebar padding.

User Impact

  • Familiar sidebar navigation is back: nav + plugins in the sidebar, Settings/Docs/pairing/status/theme in the bottom-left footer.
  • Chat panes have no leftover vertical strips — split view's middle is clean; the workspace rail still docks right or bottom and its toggle lives at the top of the pane.
  • Narrow Mac-app windows get half the top chrome (58px instead of ~108px), including against already-shipped Mac app builds.
  • Docs: https://docs.openclaw.ai/web/control-ui

Screenshots (mock gateway, deterministic):

Sidebar restored Split headers (no strips) Single-pane floating toggle
overview split floating
Sidebar hidden (floating expand) Rail right dock Rail bottom dock
hidden rail bottom
Native narrow: one 58px row (was ~108px) Drawer (900px)
native drawer

The native-narrow shot simulates a shipped Mac app exactly: the old injected style tag + html class, with the web override measured at .topbar height 58px.

Evidence

  • Remote (Blacksmith Testbox): pnpm check:changed green, exit 0 (lint/type/guard lanes + Vitest shards). First attempt died to a dropped Testbox lease (infra, all lanes green up to the cut); the retry completed clean.
  • Remote units: chat-page, chat-view, chat-session-workspace, app-sidebar, app-host, settings.node, app-navigation — 242 passed after fixing one assertion (classic pane now binds showPaneHeader=false explicitly).
  • Local e2e (Playwright Chromium, mock gateway): sidebar-customization 2/2, chat-flow 38/38, mobile-pairing 1/1 — all three updated by this PR.
  • pnpm ui:i18n:sync (keyed, real translations) + pnpm ui:i18n:check clean, re-verified after rebasing across the lobster wild-cards locale changes; docs:map:gen committed.
  • Autoreview (Codex gpt-5.5, thinking high): feature commit — two P2s about generated outputs, both satisfied by the sibling regen commit in this branch (verified via git show); one-line showPaneHeader fixup re-reviewed clean ("no accepted/actionable findings").
  • Rebased onto latest main across feat(cli,webchat): lobster wild cards — a CLI cousin, moving day, and opt-in sounds #103412/fix(ui): preserve desktop lobster run outcomes #103501/fix(ui): dismiss topbar menus when their anchors disappear #103508 with conflicts resolved in app-sidebar/app-host (new lobster props preserved: runOutcome, soundsEnabled, gatewayVersion) and app-topbar (restored minimal header wins; its menus are removed by design).

steipete added 4 commits July 10, 2026 01:16
Reverse course from #103426 on the app chrome: the left sidebar owns
brand, pinned navigation + More, New session, sessions, and the footer
(status dot, Settings, Docs, pairing, theme) again, and the desktop
topbar is gone. What stays from that PR: the dockable workspace rail
(right/bottom, drag or button), the in-flow split-pane headers, and
Cmd+B now hides the sidebar entirely (no 78px icon rail) with a
floating expand control.

The real target of the original request: the vertical icon strip at
each pane's right edge is deleted. A collapsed workspace rail renders
nothing; the toggle (with a changed-file badge) lives in the split-pane
header next to split/close, or floats at the top-right in single-pane
chat. Shift+Cmd+B still toggles.

Narrow native macOS windows (e.g. the in-app link browser splitting
the window) previously stacked 50px of injected titlebar padding on
top of the 58px drawer row; the web CSS now folds that into one
compact 58px row beside the traffic lights, with selectors that
outrank the rules shipped Mac apps inject.
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation app: macos App: macos app: web-ui App: web-ui size: XL maintainer Maintainer-authored PR labels Jul 10, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6963750b5e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

}
html.openclaw-native-macos .topnav-shell {
min-height: 58px;
@media (min-width: 700px) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep native sidebar padding below 700px

In the in-app link-browser split the dashboard WKWebView can shrink to 520px (apps/macos/Sources/OpenClaw/DashboardWindow.swift:10), so this min-width: 700px guard skips the only remaining native titlebar clearance for the settings/sidebar drawer in that 520–699px range. Since this commit removed the old web-side max-width drawer padding, opening Settings/navigation there puts the drawer header controls back under the AppKit traffic-light/drag region; keep the padding active for the native narrow split as well, or move the fallback into the web CSS keyed on html.openclaw-native-macos.

Useful? React with 👍 / 👎.

@steipete
steipete merged commit 9ecb2f3 into main Jul 10, 2026
112 of 117 checks passed
@steipete
steipete deleted the claude/sidebar-restore-rail-strip branch July 10, 2026 08:35
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 11, 2026
…mpact native narrow header (openclaw#103561)

* feat(ui): restore sidebar chrome and remove the pane workspace strip

Reverse course from openclaw#103426 on the app chrome: the left sidebar owns
brand, pinned navigation + More, New session, sessions, and the footer
(status dot, Settings, Docs, pairing, theme) again, and the desktop
topbar is gone. What stays from that PR: the dockable workspace rail
(right/bottom, drag or button), the in-flow split-pane headers, and
Cmd+B now hides the sidebar entirely (no 78px icon rail) with a
floating expand control.

The real target of the original request: the vertical icon strip at
each pane's right edge is deleted. A collapsed workspace rail renders
nothing; the toggle (with a changed-file badge) lives in the split-pane
header next to split/close, or floats at the top-right in single-pane
chat. Shift+Cmd+B still toggles.

Narrow native macOS windows (e.g. the in-app link browser splitting
the window) previously stacked 50px of injected titlebar padding on
top of the 58px drawer row; the web CSS now folds that into one
compact 58px row beside the traffic lights, with selectors that
outrank the rules shipped Mac apps inject.

* chore(ui): regenerate locale bundles and docs map for sidebar restore

* fix(ui): bind showPaneHeader explicitly on the classic single pane

* chore(ui): reconcile locale metadata after rebase onto lobster wild cards
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: macos App: macos app: web-ui App: web-ui docs Improvements or additions to documentation maintainer Maintainer-authored PR size: XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Control UI: keep sidebar chrome; remove the per-pane workspace strip; compact native narrow header

1 participant