LayoutUpdated May 3, 2026

AppShell

A minimal responsive shell for header, sidebar, and main content.

#Default usage

App shellUse AppShell as structure, then compose Header and Sidebar inside it.
Console

Workspace overview

Use AppShell as a layout primitive, not a full app framework.

#Usage

Code
import {
  AppShell,
  AppShellHeader,
  AppShellMain,
  AppShellSidebar,
  Card,
  CardContent,
  CardHeader,
  CardTitle,
  Header,
  HeaderBrand,
  Sidebar,
  SidebarItem,
  SidebarNav,
  SidebarSection,
  SidebarSectionTitle,
} from "@froggdesign/enter-ui";

export function Example() {
  return (
    <AppShell style={{ minHeight: 300 }}>
      <AppShellHeader><Header><HeaderBrand>Console</HeaderBrand></Header></AppShellHeader>
      <AppShellSidebar>
        <Sidebar>
          <SidebarSection>
            <SidebarSectionTitle>Workspace</SidebarSectionTitle>
            <SidebarNav><SidebarItem href="#" active>Overview</SidebarItem></SidebarNav>
          </SidebarSection>
        </Sidebar>
      </AppShellSidebar>
      <AppShellMain style={{ padding: 20 }}>
        <Card>
          <CardHeader><CardTitle>Workspace overview</CardTitle></CardHeader>
          <CardContent>Use AppShell as a layout primitive, not a full app framework.</CardContent>
        </Card>
      </AppShellMain>
    </AppShell>
  );
}

#Patterns

No sidebarUse sidebar none for focused pages or detail views.
Settings

No sidebar

The shell can collapse to a header and content layout.

#Accessibility

AppShellMain renders a main landmark. Avoid nesting multiple main landmarks in a real page.

#API

  • AppShell: sidebar="left" or sidebar="none".
  • Slot components map to header, sidebar, and main grid regions.
  • Responsive CSS hides the sidebar under the package breakpoint.

#Styling

Every exported component accepts className when it renders an element. EnterUI styles use .eui-* classes and --eui-* variables mapped from FroggDesign theme tokens.