Skip to content

feat(ui): org/project layout remake#2482

Merged
viktormarinho merged 31 commits intomainfrom
feat/ui-phase-2-components
Feb 24, 2026
Merged

feat(ui): org/project layout remake#2482
viktormarinho merged 31 commits intomainfrom
feat/ui-phase-2-components

Conversation

@viktormarinho
Copy link
Contributor

@viktormarinho viktormarinho commented Feb 23, 2026

Summary

  • button: removed font-medium (inherits body weight 450), removed unused brand variant (token no longer in @theme)
  • card: added shadow-xs for subtle lift
  • sidebar: active menu item now uses bg-sidebar-primary text-sidebar-primary-foreground — gives proper contrast in both light and dark (Studio) sidebars
  • tabs: underline variant active indicator aligned to border-primary
  • step-indicator: ported from studio-demo
  • empty-state: cleaner icon container (rounded-xl bg-muted/50), added illustration/className/children props (backward-compatible)
  • empty-state-illustrations: ported 8 monochrome SVG illustrations from studio-demo (AgentsIllustration, ConnectionsIllustration, TasksIllustration, etc.)

Test plan

  • bun run check — passes (0 TS errors)
  • bun run lint — passes (0 warnings)
  • bun run fmt:check — passes
  • bun test — 829/829 pass
  • Visual: buttons/cards look correct with warm-neutral palette
  • Visual: active sidebar item has correct contrast in both light and Studio dark sidebar

🤖 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

    • Sidebar inbox footer with avatar and inbox popover; accept/decline org invitations; replaces the settings footer.
    • Account switcher uses a DropdownMenu with color‑coded org avatars and supports org‑only mode when experimental_projects is off.
    • User menu redesigned with a DropdownMenu and links to Home, Terms, Privacy, GitHub, and Community; added a settings cog icon.
    • Page.Header adds a SidebarTrigger (hideSidebarTrigger) and updated sizing; chat panel gets smoother fade/ease; StepIndicator added; EmptyState now supports illustrations; tabs underline uses primary.
  • Bug Fixes

    • Chat uses a unified bg-background and updated sticky overlays; skeleton matches the new background.
    • Dark sidebar styling is CSS‑scoped and skipped when experimental_projects is off; collapsed labels/icons, item sizing, and active route states behave correctly.
    • Shell keeps the floating card layout, fixes corner artifacts, and restores the minimal no‑context header with MeshUserMenu.
    • MCP Store version dropdown uses the default variant; added prefers‑reduced‑motion support.

Written for commit 20efddc. Summary will update on new commits.

@github-actions
Copy link
Contributor

🧪 Benchmark

Should we run the Virtual MCP strategy benchmark for this PR?

React with 👍 to run the benchmark.

Reaction Action
👍 Run quick benchmark (10 & 128 tools)

Benchmark will run on the next push after you react.

@github-actions
Copy link
Contributor

github-actions bot commented Feb 23, 2026

Release Options

Should a new version be published when this PR is merged?

React with an emoji to vote on the release type:

Reaction Type Next Version
👍 Prerelease 2.113.2-alpha.1
🎉 Patch 2.113.2
❤️ Minor 2.114.0
🚀 Major 3.0.0

Current version: 2.113.1

Deployment

  • Deploy to production (triggers ArgoCD sync after Docker image is published)

Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 8 files

- 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.
- 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)
@viktormarinho viktormarinho changed the title feat(ui): component restyling phase 2 feat(ui): remake some stuff Feb 23, 2026
@viktormarinho viktormarinho changed the title feat(ui): remake some stuff feat(ui): layout remake Feb 23, 2026
@viktormarinho viktormarinho changed the title feat(ui): layout remake feat(ui): org/project layout remake Feb 23, 2026
rafavalls and others added 4 commits February 24, 2026 05:08
- 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>
rafavalls and others added 6 commits February 24, 2026 15:07
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>
Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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();
Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot Feb 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
Fix with Cubic

@viktormarinho viktormarinho merged commit d5eb10f into main Feb 24, 2026
7 checks passed
@viktormarinho viktormarinho deleted the feat/ui-phase-2-components branch February 24, 2026 21:23
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.

2 participants