Repository navigation
cmux-next sidebar: group color picker with theme colors, custom hex and emoji (cx-25az) - #18997
Conversation
…s, header +, spam-click toggles (cx-q5jw) - Member rows start right of their group's line (SidebarStyle.groupGutter), so hover and selection fills never cover it; tab rows drop their own rail. The line runs from under the header to the last member. - Header bar and line take the theme's ANSI color itself (no pastel), with black or white ink by contrast; none is the sidebar's tonal step. - New groups get colors in a stable theme order (GroupColor.automaticOrder). - Header + (hover, with the more button) runs workspaceGroup.newWorkspace, the editor's New Workspace in Group. - Fast repeated clicks on the chip toggle the editor open, closed, open: clicks are matched by event number, not a double-click time window. - Member titles start closer to the line (less left space). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nd emoji (cx-25az) - GroupTint: a palette token or a custom #RRGGBB, the two color shapes the daemon stores for a group. SidebarGroup keeps the token and a custom hex. - The group editor's dot row adds two icon-only controls (Lawrence: never full width): a custom color dot that opens the system color panel (wheel, sliders, hex field) and shows the color once chosen, and an emoji button that runs workspaceGroup.setIcon (the shared icon picker, emoji included). - workspaceGroup.setColor and the bridge take a GroupTint, so the CLI and palette accept #RRGGBB as well as the tokens. - Two new strings in all 21 sidebar catalog locales. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
This comment has been minimized.
This comment has been minimized.
|
Agents: |
|
Unclear: CI failed on
Not re-run automatically: Written by |
- No + on an empty group: a click on it raced the editor closing on a new group, which then went before the workspace arrived. The editor's New Workspace in Group stays. - The + is hidden (not only transparent) while it does not show, so a click there before any hover still collapses the group. - Header buttons draw in the header's ink (SidebarIconButton.tintOverride); their own hover tint overrode white ink on dark accents. - The + never moves left of the bar's padding in a narrow sidebar. - The tab-drop insertion line inside a group starts right of the group's line, as the row does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-color-picker # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/GroupHeaderRowView.swift
…5az) - The emoji button (workspaceGroup.setIcon) and the custom color dot keep a new empty group: both pickers edit it after the editor closes, and the close used to delete it first. - The shared color panel is released when it closes: its target, action, alpha and continuous settings go back, so a later Show Colors elsewhere never recolors the group. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…x-next-group-color-picker # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/GroupEditor/SidebarGroupEditor.swift # Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/GroupHeaderRowView.swift
…d-file type limit) (cx-25az) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e instead of a full fill (cx-25az) Leo 2026-10-10 screenshot: no full pastel header fill. The group's color is a dot on its line (the line runs from the dot to the last member); the name is in the sidebar's text color and lines up with the members' titles; hover and drop fills are a row's, right of the line. The faint vertical more glyph becomes the clear three-dot (ellipsis) symbol. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…x-next-group-color-picker # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/GroupHeaderRowView.swift
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit b7f4396. Configure here.
| guard let group, let tint = GroupTint(picked: NSColorPanel.shared.color) else { return } | ||
| onColor?(group, tint) | ||
| } | ||
| } |
There was a problem hiding this comment.
Color panel target dangles after teardown
High Severity
SidebarGroupColorPanel borrows the shared NSColorPanel (target, action, showsAlpha, isContinuous) and only gives them back in release(), which runs from willCloseNotification. There is no deinit cleanup. NSControl targets are unowned, so tearing down the sidebar or window while the panel is still up leaves a dangling target; the next click on that panel can crash, and the borrowed settings stay applied.
Reviewed by Cursor Bugbot for commit b7f4396. Configure here.
|
Lawrence decided 2026-10-11: solid group header fill back; row actions on hover only, no layout shift. Landed in feat-cmux-next as b2ced02 (train 31936c9) under cx-qno.22: cx-rcby full-width pill chip with a hover step, one glyph ink at 4.5:1, header + and more and workspace-row more on hover only in reserved slots. |


Summary
cx-25az: let people pick a group's color and emoji, and make the group header subtler. Builds on #18991 (landed), which added the theme-color headers and the stable default order.
Subtler header (Leo's screenshot feedback). The header no longer has a full pastel fill.
action.morebutton; cx-a9h6 (cmux-next sidebar: more menu on group headers and workspace rows (cx-a9h6) #19019) turns it into the full menu.Theme colors. The editor's existing dots are the active theme's palette: none, then the ANSI accents.
Custom color. A new icon-only dot after the palette opens the system color panel, which has a wheel, sliders and a hex field.
#RRGGBB, a value the daemon already accepts for group colors.Emoji. A new icon-only button runs
workspaceGroup.setIcon. That opens the shared icon picker, emoji included, so this is the same path as the menu and palette.Every entrypoint.
workspaceGroup.setColorand the sidebar bridge now take aGroupTint, either a token or a hex color. The CLI, palette and editor all accept#RRGGBB.The color and emoji controls are icon-only, never full width (Lawrence's decision on the bead).
Review fixes:
Known gap: undo of Ungroup or Delete restores a custom color as no color, because the create intent still carries a palette token.
Testing
face.smilingthrough the pack's SF Symbol path (SidebarIconButton(symbol:)), because the pack has no emoji icon.sidebar.groupColor.custom,sidebar.groupEditor.emoji) are in all 21 locales of the sidebar catalog.scripts/localization_catalog.py checkreports nothing for this catalog; its repo-wide count is the same as base.Changelog
Added: Workspace groups can take a custom color from the system color panel (hex included) and an emoji, from icon-only controls in the group editor.
🤖 Generated with Claude Code
Note
Low Risk
UI and personal-group color serialization only; hex values reuse an existing daemon wire format. Undo after ungroup/delete may still drop custom colors (noted gap).
Overview
cx-25az extends workspace group styling and editing: group colors are modeled as
GroupTint(theme palette token or daemon-stored#RRGGBB), wired through actions, sidebar intents, bridge mapping, and personal-group updates viawirestrings.The group header no longer uses a full-width pastel bar. Color shows as a dot on the members’ vertical line; the title uses normal sidebar text. The editor adds an eyedropper swatch (system color panel, discrete commits) and an emoji/icon control that routes through
workspaceGroup.setIcon. Opening those pickers sendskeepGroupItemso a new empty group is not removed when the bubble closes.Palette shortcuts and
workspaceGroup.setColornow set.palette(...)or parse hex;SidebarGroupstores optionalcustomand applies colors throughtint. New localized strings cover custom color and emoji picker labels.Reviewed by Cursor Bugbot for commit b7f4396. Bugbot is set up for automated code reviews on this repo. Configure here.
Showcase
Open the live gallery