AppShell
Named working regions and a skip link, composed around the product's real content.
Live — this one is real
Skip to contentWorkshop
Your workspace
A shell gives content a place; it does not decide the product for you.
Usage
import { AppShell, SideNav } from "mizu-ui";
export function Example() {
return (
<AppShell
mainTag="section"
mainId="shell-demo-content"
header={<strong>Workshop</strong>}
sidebar={
<SideNav
currentPath="/components"
groups={[
{
label: "Explore",
items: [
{ label: "Collection", href: "/components" },
{ label: "Lab", href: "/lab" },
],
},
]}
/>
}
footer={
<span className="mizu-field-hint">
All changes stay on this device.
</span>
}
>
<h3>Your workspace</h3>
<p className="mizu-field-hint">
A shell gives content a place; it does not decide the product for you.
</p>
</AppShell>
);
}
Source & setup
Import mizu-ui/styles.css once. Fonts are optional via mizu-ui/fonts.css. Override --mizu-* tokens or use className for local styling. Uses native React and CSS; install the package peers for root imports.
Inspect layout/Layout.tsx
Source is included in the npm package under src/layout/Layout.tsx.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| header / sidebar / footer / children | ReactNode | — | Composed regions. |
| mainId | string | "mizu-main" | Unique skip-link destination. |
| mainTag | "main" | "section" | "main" | Use section when embedding in an existing main landmark. |
Accessibility
Native landmarks and a visible-on-focus skip link. Supply a unique mainId per shell. Sidebar stacks on small screens.
Motion
CSS reflow, no entrance animation.