Skip to content

feat(chat): row actions — overflow menu + delete + rename (Phase 3a)#258

Merged
blove merged 13 commits into
mainfrom
claude/chat-row-actions-impl
May 12, 2026
Merged

feat(chat): row actions — overflow menu + delete + rename (Phase 3a)#258
blove merged 13 commits into
mainfrom
claude/chat-row-actions-impl

Conversation

@blove
Copy link
Copy Markdown
Contributor

@blove blove commented May 12, 2026

Summary

Phase 3a of the chat row-actions decomposition: per-thread-row contextual actions in the sidenav. Hover-revealed kebab opens an overflow menu with Rename and Delete. Rename morphs the row title into an inline <input>. Delete opens a destructive-toned confirmation dialog. Both actions are adapter-driven (consumer provides ThreadActionAdapter), with the framework owning the optimistic UI and rollback on rejection.

Spec: docs/superpowers/specs/2026-05-12-chat-row-actions-design.md
Plan: docs/superpowers/plans/2026-05-12-chat-row-actions.md

New primitives

  • ChatOverflowMenuComponent — reusable absolute-positioned popover menu. Items derive { id, label, tone?, disabled? }. ARIA menu/menuitem; ArrowUp/Down nav; Esc + scrim + outside-click close.
  • ChatConfirmDialogComponent — modal confirm with focus trap. Cancel button receives initial focus (intentional — destructive confirm requires explicit Tab → Enter). Destructive tone variant.

Extended

  • ChatThreadListComponent — new actions?: ThreadActionAdapter input. Internal optimistic state (pendingDeletes, pendingRenames) drives a visibleThreads computed. Hover-revealed kebab; inline rename input; rollback via finally clear on rejection.
  • ChatSidenavComponent — passes actions through to the inner thread list.

Public API additions

  • ChatOverflowMenuComponent, OverflowMenuItem type
  • ChatConfirmDialogComponent
  • ThreadActionAdapter type

Example wiring (examples-chat-angular)

  • ThreadsService gains delete(id) (LangGraph DELETE /threads/{id}) and rename(id, title) (LangGraph PATCH /threads/{id} with metadata.title).
  • demo-shell defines a threadActions: ThreadActionAdapter that clears the active thread id when the deleted thread is the current one.

Test plan

  • nx run chat:test — 12 thread-list tests (incl. 2 rollback cases) + 10 confirm-dialog + 8 overflow-menu, all pass
  • nx run chat:build — clean
  • nx lint chat — clean
  • nx run examples-chat-angular:build — clean
  • API docs regenerated
  • Browser-verified via Chrome MCP: kebab fades in on hover, menu opens with Rename + destructive Delete, Rename → inline editable input prefilled with title, Esc cancels rename, Delete opens confirm dialog with destructive-red Delete button, Cancel closes dialog without deleting.

🤖 Generated with Claude Code

blove and others added 13 commits May 12, 2026 09:57
Per-row overflow menu (kebab) with Rename + Delete. Adapter-driven
(ThreadActionAdapter); framework owns optimistic UI + rollback. Adds
two reusable primitives: chat-overflow-menu and chat-confirm-dialog.
Defers archive, share, pin/move to later phases.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Eleven tasks: overflow-menu + confirm-dialog primitives (TDD),
chat-thread-list extension with optimistic rename + delete, sidenav
pass-through, public-api exports, examples wiring, API doc regen,
and browser verification.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…istic UI

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…pter

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 12, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cacheplane Ready Ready Preview, Comment May 12, 2026 8:54pm

Request Review

@blove blove merged commit 903e2db into main May 12, 2026
14 checks passed
blove added a commit that referenced this pull request May 12, 2026
…rk (#271)

Brings the canonical smoke checklist current with 29 PRs that landed
between Phase 7 (#239) and today without checklist updates. Specifically:

Updated sections:
- chat-debug devtools — replaced bottom-drawer model with floating
  launcher + status pill + switch (PRs #249, #251)
- Control palette — palette v2 (status pill, shadcn-styled panel, PR #244)
- Generative UI / A2UI surfaces — single-bubble invariant (PR #255),
  parent-emits-envelopes architecture (PR #259), wrapped-content +
  tool_calls coexistence (PR #255), envelope reorder
- Server-side wire format — tool_calls preserved on the final AI
- Replaced 'Multi-thread' section with 'Sidenav (thread management)'
  reflecting the permanent semantic <nav> + Active/Archived sections
  (PR #253) and removing the old palette-toggled drawer model

Added sections:
- Cmd+K history search — palette open/search/select/close, archived
  result subtitle, keyboard navigation (PR #253)
- Per-row thread actions — kebab menu order per state (active, pinned,
  archived), rename + pin/unpin + archive/unarchive + delete flows
  (PRs #258, #260, #267)
- Thread titles — first-user-message derivation, idempotent writes,
  manual rename precedence (PR #242)
- Progressive A2UI streaming — per-component fallback transition
  observable during streaming window (PRs #252, #261, #262, #268, #269)
- Inline checkpoint markers — render between messages during multi-step
  runs (PR #243)
- Responsive sidenav — viewport breakpoints, auto-collapse behavior (PR #240)

Total: ~58 new check items across 6 new sections, plus rewrites to 5
existing sections. Original 333-line checklist → 391 lines / 237 check
items.
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