Add mark-read/unread + clear notifications to workspace group menu
Workspace groups are a superset of their member workspaces, but the group header's right-click menu only offered group-config actions (rename, pin/unpin, edit config, docs, ungroup, delete). It was missing the basic notification actions that every normal workspace row has, most notably mark as unread.
This adds three items to the group context menu, between Pin/Unpin and Edit Group Config:
- Mark Group as Read
- Mark Group as Unread
- Clear Latest Notifications
Each operates over all member workspaces (anchor included) and reuses the existing TerminalNotificationStore mutation path (markRead/markUnread/clearLatestNotification) that the per-workspace menu uses, so there is one shared behavior path rather than duplicated logic. Each button is disabled when not applicable, using canMarkWorkspaceRead/canMarkWorkspaceUnread and a latest-notification check, matching the per-workspace menu's disabled rules.
The header view stays within the sidebar snapshot boundary: the new inputs are plain Bool value snapshots plus action closures (closures hold the store weakly), added to the view's Equatable so unread-state changes correctly invalidate the row.
Localization: added workspaceGroup.contextMenu.markRead, workspaceGroup.contextMenu.markUnread, and workspaceGroup.contextMenu.clearLatestNotifications to Resources/Localizable.xcstrings with translations for all locales used by the analogous per-workspace strings (en, ja, ko, zh-Hans, zh-Hant, de, es, fr, it, da, nb, pl, ru, th, tr, uk, ar, bs, pt-BR).
🤖 Generated with Claude Code
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.
Summary by cubic
Add notification controls and quick-create to the workspace group header menu. Plain actions target the group’s anchor; mark-all items update member workspaces and skip the anchor.
-
New Features
- Added: New Workspace in Group, Mark Group as Read/Unread, Clear Latest Notifications, and Mark All Workspaces in Group as Read/Unread.
- Mark-all resolves members at action time and guards each workspace before mutating to avoid stale IDs and manual-unread side effects.
- Reuses
TerminalNotificationStore; buttons disabled viacanMarkRead/canMarkUnread/hasLatestNotificationsandcanMarkAllRead/canMarkAllUnread; header stays snapshot-safe with Bool inputs and weak closures;Equatableextended; localized strings added (incl.km).
-
Refactors
- Moved drop zone/action/policy/delegate types into SidebarWorkspaceGroupHeaderDropDelegate.swift to keep the view file under the size budget; no behavior change.
Summary by CodeRabbit
- New Features
- Added workspace group context menu actions: Mark Group as Read/Unread, Clear Latest Notifications.
- Added bulk controls to mark all workspaces in a group as read/unread, with items enabled/disabled based on current state.
- Added support for drag-and-drop of workspace tabs onto a workspace group header.
- Localization
- Added new localized strings for the added context menu actions across multiple locales.