Skip to content

AppShell

Named working regions and a skip link, composed around the product's real content.

Live — this one is real

Skip to content
Workshop

Your workspace

A shell gives content a place; it does not decide the product for you.

All changes stay on this device.

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.

Open full source ↗

Props

PropTypeDefaultDescription
header / sidebar / footer / childrenReactNode—Composed regions.
mainIdstring"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.

Works alongside