AppShell

Three-row vertical frame — header (fixed), scrollable content, optional footer (fixed). Mirrors the framed page pattern (think app chrome) and pairs with BrandMark for a wordmark in the header.

BOOGIE.RO

This is the scrollable content slot.

Header and footer stay pinned while this section scrolls. The shell hugs the center edge of the parent — open the picker above to flip it.

align = center@bwo-ui/react

Usage

import { AppShell, BrandMark, Button } from '@bwo-ui/react';

<AppShell
  maxWidth={420}
  align="center"
  header={
    <>
      <BrandMark brand="BOOGIE" tld=".RO" href="/" />
      <div style={{ display: 'inline-flex', gap: 8 }}>
        <Button size="sm" variant="ghost">Ghid</Button>
        <Button size="sm" variant="outline">Login</Button>
      </div>
    </>
  }
  footer={<span>#crafted-in-ro</span>}
>
  {/* your page content */}
</AppShell>

Alignment

The align prop controls where the shell sits horizontally inside its parent — handy when the shell is narrower than its container (a constrained maxWidth inside a full-bleed page, for example).

Alignment only matters when the shell's maxWidth is smaller than the parent. A full-width shell looks the same in all three modes. The prop also emits a data-align attribute and a bwo-app-shell--{align} modifier class so you can hook into either from custom CSS.

<AppShell align="left"  maxWidth={420}>{/* hugs left  */}</AppShell>
<AppShell align="center" maxWidth={420}>{/* default      */}</AppShell>
<AppShell align="right" maxWidth={420}>{/* hugs right */}</AppShell>

AppShell props

PropTypeDefaultDescription
headerReactNodeTop row — typically brand on the left, actions on the right.
footerReactNodeBottom row. Optional.
maxWidthnumber | stringConstrains the shell width. Numbers are treated as px. Defaults to the CSS variable `--bwo-app-shell-max` (900px).
align'left' | 'center' | 'right''center'Where the shell sits horizontally inside its parent. Only visible when `maxWidth` < parent width.
contentIdstringId on the scrollable content div — useful for `scrollIntoView` from elsewhere.

BrandMark props

PropTypeDefaultDescription
brandReactNodeMain wordmark, e.g. "BOOGIE".
accentReactNodeOptional fragment rendered in `--bwo-accent`.
tldReactNodeTrailing TLD-style suffix, smaller and muted.