feat(ui): collapse header actions into inline dropdown #183

Merged
dries merged 3 commits from feat/header-actions-menu into main 2026-06-30 20:53:50 +02:00
Owner

Replace the stacked header (logo + breadcrumb above a per-route action button strip) with a logo-only brand mark and a single inline actions dropdown next to the project label, lowering the header height.

Changes

  • Header: ocman text replaced by the existing favicon.svg logo (reused from favicon/desktop icon); leading slash in the breadcrumb removed; <h1> is now a flex row so logo + breadcrumb are vertically centered. Header padding 16px → 8px, h1 font 24px → 18px.
  • Actions dropdown: per-route action buttons (tmux / launch / VS Code / new session / share) collapse into a single native <details> menu rendered inline with the project label. Flat, single level deep, with separators:
    1. New session
    2. Download Markdown / Print / Save as PDF / Share link…
    3. Switch tmux / Launch opencode / Open in VS Code
  • Share links: the share-link manager (create/list/copy/revoke) moved out of a nested popover into a modal (ShareLinkModal) opened from the menu, keeping the dropdown one level deep.

Verification

  • pnpm exec tsc -b — clean
  • pnpm lint (eslint) — clean

Note: the pre-commit full-suite hook flagged a failing SharedConversationView.test.tsx, which belongs to unrelated in-progress work and is not part of this branch (only the 5 header files are included).

Replace the stacked header (logo + breadcrumb above a per-route action button strip) with a logo-only brand mark and a single inline actions dropdown next to the project label, lowering the header height. ## Changes - **Header**: `ocman` text replaced by the existing `favicon.svg` logo (reused from favicon/desktop icon); leading slash in the breadcrumb removed; `<h1>` is now a flex row so logo + breadcrumb are vertically centered. Header padding `16px → 8px`, h1 font `24px → 18px`. - **Actions dropdown**: per-route action buttons (tmux / launch / VS Code / new session / share) collapse into a single `⋯` native `<details>` menu rendered inline with the project label. Flat, single level deep, with separators: 1. New session 2. Download Markdown / Print / Save as PDF / Share link… 3. Switch tmux / Launch opencode / Open in VS Code - **Share links**: the share-link manager (create/list/copy/revoke) moved out of a nested popover into a modal (`ShareLinkModal`) opened from the menu, keeping the dropdown one level deep. ## Verification - `pnpm exec tsc -b` — clean - `pnpm lint` (eslint) — clean Note: the pre-commit full-suite hook flagged a failing `SharedConversationView.test.tsx`, which belongs to unrelated in-progress work and is not part of this branch (only the 5 header files are included).
feat(ui): collapse header actions into inline dropdown
Some checks failed
CI / Semantic Tag (pull_request) Blocked by required conditions
CI / Frontend (pull_request) Successful in 3m11s
CI / Backend (pull_request) Successful in 3m48s
CI / Build Desktop (macOS arm64) (pull_request) Waiting to run
CI / Playwright E2E (pull_request) Failing after 7m39s
CI / Build (pull_request) Successful in 5m37s
CI / Coverage Ratchet (pull_request) Successful in 5m41s
43f9133dbf
Replace the stacked logo/breadcrumb header and per-route action button
strip with a logo-only brand mark and a single inline actions dropdown
next to the project label, lowering the header height.

The dropdown is a flat, single-level native <details> menu with
separators: New session, then export actions (Download Markdown, Print,
Share link), then host actions (tmux, launch, VS Code). The share-link
manager moves from a nested popover into a modal opened from the menu.

Coverage ratchet: pass

Suite Baseline This PR Δ
go 69.50% 69.50% +0.00
frontend 58.30% 58.34% +0.04

Tolerance: -0.1%. Baseline stored on gh-pages.

<!-- coverage-ratchet --> ### Coverage ratchet: ✅ pass | Suite | Baseline | This PR | Δ | | |---|---|---|---|---| | go | 69.50% | 69.50% | +0.00 | ✅ | | frontend | 58.30% | 58.34% | +0.04 | ✅ | _Tolerance: -0.1%. Baseline stored on `gh-pages`._
test(e2e): open actions menu before asserting session actions
Some checks failed
CI / Frontend (pull_request) Successful in 4m37s
CI / Backend (pull_request) Successful in 5m20s
CI / Build Desktop (macOS arm64) (pull_request) Successful in 50s
CI / Playwright E2E (pull_request) Failing after 8m32s
CI / Build (pull_request) Successful in 3m46s
CI / Coverage Ratchet (pull_request) Successful in 7m42s
CI / Semantic Tag (pull_request) Has been skipped
53f4fff848
The header actions (New session, Open in VS Code) moved into a
collapsed details dropdown, so the buttons are no longer visible
on load. Open the menu via its 'Session actions' label and assert
the menuitems, fixing the Playwright E2E failure.
test(e2e): assert header logo by alt text, not h1 text content
All checks were successful
CI / Frontend (pull_request) Successful in 4m13s
CI / Backend (pull_request) Successful in 4m57s
CI / Build Desktop (macOS arm64) (pull_request) Successful in 20s
CI / Playwright E2E (pull_request) Successful in 6m37s
CI / Build (pull_request) Successful in 4m27s
CI / Semantic Tag (pull_request) Has been skipped
CI / Coverage Ratchet (pull_request) Successful in 4m34s
d1c34ffbfc
The header 'ocman' wordmark was replaced by an <img alt="ocman">
logo, so the h1 no longer contains the literal text 'ocman' and
toContainText fails. Assert the logo image by its accessible name
instead.
dries merged commit 1366039324 into main 2026-06-30 20:53:50 +02:00
Sign in to join this conversation.
No description provided.