Files
warmbly/web/src/components/layout/AppLayout.tsx
T
Matthew Meszaros 3b0fd76139 feat(web): sky-chrome dashboard shell with Vercel-style breadcrumb
Replaces the flat zinc sidebar + thin header with one continuous
sky-coloured chrome wrapping a clean white work surface. Reads as
"work happens inside a room with sky outside the window frame."

Layout shape (the L):

  ┌──────────────────────────────────────────────────────┐
  │  [logo]  >  [org]  >  [section]               [⌘K ●] │  AppHeader
  ├──────────┬───────────────────────────────────────────┤
  │          │ ╭─── content (white, rounded-tl) ──────╮  │
  │  AppNav  │ │                                      │  │
  │          │ │                                      │  │
  └──────────┴───────────────────────────────────────────┘

Header and sidebar share one sky-gradient backdrop (SkyChrome). The
content panel tucks into the inner corner with rounded-tl-2xl and a
4px margin on right/bottom so a sliver of sky stays visible at every
edge except the seam — the inner corner is the only "merged" edge.

New components in components/layout/:
  - SkyChrome: gradient + two soft blurred glows. No animation; the
    auth page is where theatrical clouds live, the dashboard is
    intentionally quieter.
  - AppHeader: one-row breadcrumb spanning the full width. Warmbly
    logo lives in the sidebar-width left zone, then an org-picker
    button, then the URL-derived section/subpages. Connection
    indicator + ⌘K search on the far right.
  - AppNav: sidebar list, styled for the dark sky bg. Same section
    grammar as before (Email, CRM, Resources) plus a primary
    "New Campaign" action up top, settings + user menu pinned at
    the bottom. Hover/active states use translucent white pills.
  - AppShell: composes the three above, swaps in the keyboard
    shortcuts modal + command palette, takes over from AppLayout.

OrgSwitcher and UserNav restyled for the dark chrome (white text,
faint white borders/hover states) and lost their dependency on
@/components/ui/sidebar — there's no SidebarProvider any more, the
new shell doesn't need one.

Removed components/layout/AppSidebar.tsx (the old zinc sidebar).
Existing per-page layouts (e.g. admin's tab bar) keep working — they
render inside the white content panel exactly as before.
2026-05-22 15:03:52 +00:00

14 lines
363 B
TypeScript

// Thin wrapper: pulls in the theme provider and renders the new shell.
// All the actual layout lives in AppShell — sidebar + header + content.
import { AppShell } from "./AppShell";
import { ThemeProvider } from "./ThemeProvider";
export function AppLayout() {
return (
<ThemeProvider>
<AppShell />
</ThemeProvider>
);
}