feat(ui): org/project layout remake#2482
Merged
viktormarinho merged 31 commits intomainfrom Feb 24, 2026
Merged
Conversation
- Remove font-medium from button base (inherits body weight 450) - Remove unused brand variant (bg-brand-green-light no longer in @theme) - Add shadow-xs to card for subtle lift - Fix mcp-server-hero-section VersionDropdown brand → default variant
Contributor
🧪 BenchmarkShould we run the Virtual MCP strategy benchmark for this PR? React with 👍 to run the benchmark.
Benchmark will run on the next push after you react. |
Contributor
Release OptionsShould a new version be published when this PR is merged? React with an emoji to vote on the release type:
Current version: Deployment
|
- Add data-studio attribute to SidebarLayout for CSS-driven dark sidebar - Remove AppTopbar and Topbar function (no longer needed) - Simplify no-context fallback to bare Outlet - Sidebar header: replace all hardcoded zinc/bg colors with sidebar-* tokens - Sidebar header: remove isDark logic (CSS handles light/dark via [data-studio]) - Account switcher: remove variant prop, use sidebar tokens throughout - Account switcher: always show two-line layout (org + project name) - ProjectTopbar: remove dark wrapper, add subtle border-b
- sidebar: use text-sidebar-foreground so dark Studio sidebar shows light text correctly (was inheriting text-foreground = dark) - topbar: hide header when all portal divs are empty, use h-11 (nothing injects into portals yet; will be wired in Phase 4) - layout: add pt-1.5 to SidebarLayout + rounded-tl-xl border-t border-l to SidebarInset for the demo's floating canvas effect
…tokens Nav items, settings footer, and group labels were using text-foreground and text-muted-foreground which are dark in light mode — invisible on Studio's dark sidebar. Switching to text-sidebar-foreground/* adapts correctly to both.
Add [data-studio] [data-sidebar="sidebar"] rule to global.css that overrides generic tokens (--foreground, --muted-foreground, --accent, etc.) to dark-mode values scoped only to the sidebar inner element. This makes text-foreground, text-muted-foreground, bg-accent etc. work correctly on the dark Studio sidebar without any per-component changes. Revert all components back to standard text-foreground / text-muted-foreground.
…t border-l handles separation)
- Wrap chat panel in bg-sidebar container with padding (pl-1.5 pr-[5px] pb-[5px]) - Inner card: bg-card rounded-xl border border-sidebar-border shadow-sm - Main content gets rounded-tr-xl + border-r when chat is open - Extract ShellLayoutInner to access useDecoChatOpen inside Chat.Provider
Move border-t/border-l/rounded-* from SidebarInset (full width) to the ResizablePanel wrapping main content. This fixes: - border-t no longer extends over the chat panel area - rounded-tr-xl now always present (both corners match) - border-r added to main content panel when chat is open - Chat card retains its own independent border/shadow
- SidebarInset: transparent background so bg-sidebar shows through rounded corners - Card styling moved to inner div wrapper (not ResizablePanel) to avoid library interference with border-radius - ResizablePanel is pure sizing container only
- Add MeshUserMenu to SidebarSettingsFooter (sidebar footer, per design plan) - Restore minimal topbar with MeshUserMenu in the no-context fallback path (root/home route that renders without a project context)
- Refactor MeshAccountSwitcher from Popover to DropdownMenu with improved org/project switching UX, color-coded org avatars, and collapsible icon support - Add SidebarTrigger to PageHeader with hideSidebarTrigger prop; adjust header height (h-12→h-11), border opacity, and padding - Simplify chat background: remove dynamic --chat-surface CSS variable, use bg-background throughout chat root, sticky overlay, and skeleton - Improve side-panel-chat transitions: use ease-[var(--ease-out-quart)], add fade-in animation, refine duration timings - Fix sidebar settings footer padding and collapsible icon visibility - Add prefers-reduced-motion support to global.css Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Delete leftover components from the account switcher and topbar refactor: sidebar footer inbox, account switcher panels (org, user, inbox, menu items), and project-topbar. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace UserMenu compound component with DropdownMenu primitives, add Terms of Use, Privacy Policy, GitHub, and Community links with external link indicators, and use consistent 14px icon sizing throughout. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…isabled Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…is off Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
1 issue found across 8 files (changes from recent commits).
Prompt for AI agents (all issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/mesh/src/web/components/sidebar/footer/inbox.tsx">
<violation number="1" location="apps/mesh/src/web/components/sidebar/footer/inbox.tsx:69">
P2: Reset `isRejecting` after a successful reject so the item doesn’t remain disabled if the invitation still renders.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| setIsRejecting(false); | ||
| } else { | ||
| toast.success("Invitation declined"); | ||
| queryClient.invalidateQueries(); |
Contributor
There was a problem hiding this comment.
P2: Reset isRejecting after a successful reject so the item doesn’t remain disabled if the invitation still renders.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/mesh/src/web/components/sidebar/footer/inbox.tsx, line 69:
<comment>Reset `isRejecting` after a successful reject so the item doesn’t remain disabled if the invitation still renders.</comment>
<file context>
@@ -0,0 +1,185 @@
+ setIsRejecting(false);
+ } else {
+ toast.success("Invitation declined");
+ queryClient.invalidateQueries();
+ }
+ } catch {
</file context>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
font-medium(inherits body weight 450), removed unusedbrandvariant (token no longer in@theme)shadow-xsfor subtle liftbg-sidebar-primary text-sidebar-primary-foreground— gives proper contrast in both light and dark (Studio) sidebarsborder-primaryrounded-xl bg-muted/50), addedillustration/className/childrenprops (backward-compatible)AgentsIllustration,ConnectionsIllustration,TasksIllustration, etc.)Test plan
bun run check— passes (0 TS errors)bun run lint— passes (0 warnings)bun run fmt:check— passesbun test— 829/829 pass🤖 Generated with Claude Code
Summary by cubic
Rebuilt the org/project layout with phase 2 tokens, a CSS‑scoped dark sidebar, and a refined shell. Added an inbox footer with invitations, a redesigned user menu, improved account switching, accurate active states, and smoother chat transitions.
New Features
Bug Fixes
Written for commit 20efddc. Summary will update on new commits.