Panel
Layout foundation for fixed headers, contained scrolling, sections, and optional bottom actions.
Controls
import {
Panel,
PanelBody,
PanelFooter,
PanelHeaderRoot,
PanelScrollContent,
PanelScrollViewport,
PanelSection,
} from "raft-ui";
<Panel edge="inset">
{/* Use PanelHeaderRoot directly for a fully custom fixed header. */}
<PanelHeaderRoot />
<PanelBody>
<PanelScrollViewport>
<PanelScrollContent>
<PanelSection />
</PanelScrollContent>
</PanelScrollViewport>
</PanelBody>
{/* Optional bottom action boundary. */}
<PanelFooter />
</Panel>import {
PanelAction,
PanelActions,
PanelHeader,
PanelHeaderContent,
PanelHeaderIcon,
PanelHeading,
PanelMeta,
PanelSectionHeader,
PanelStatus,
PanelTitle,
} from "raft-ui";
<PanelHeader>
<PanelHeaderIcon />
<PanelHeaderContent>
<PanelHeading>
<PanelTitle />
<PanelStatus />
</PanelHeading>
<PanelMeta />
</PanelHeaderContent>
<PanelActions>
<PanelAction aria-label="Panel action">...</PanelAction>
</PanelActions>
</PanelHeader>
{/* Use as an alternative fixed header for a section-level view. */}
<PanelSectionHeader />API#WIP
| Prop | Type | Default | Description |
|---|---|---|---|
edge | "inset" | "attached" | — | Lets the panel own how its header and content meet adjacent regions. AppShell slots remain layout-only. |
...props | useRender.ComponentProps<"section"> | — | Panel root. The caller chooses sizing, placement, surface treatment, and header composition. |
--panel-footer-clearance | <length> | 10rem | Elegant desktop space reserved below scroll content for an overlaid PanelFooter. Set to 0rem when the panel has no footer. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Low-level fixed header region. Use PanelHeader when the header needs the shared identity, metadata, status, and actions layout. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Shared panel header layout for caller-owned identity, metadata, status, and actions. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Fixed section-level header with the shared responsive panel treatment. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Optional identity region alongside PanelHeaderContent. It uses the theme-native contained icon treatment; the consumer owns the content's size, such as Avatar size or icon size classes. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Flexible region for an optional icon, title, metadata, and status parts. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Inline group for a title and its adjacent status. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Caller-owned panel or section title. |
| Prop | Type | Default | Description |
|---|---|---|---|
size | "sm" | "md" | "sm" | Secondary metadata size. |
...props | useRender.ComponentProps<"div"> | — | Optional secondary metadata below or alongside the title. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"span"> | — | Attribute badge alongside the title, such as a muted marker. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"span"> | — | Live status readout alongside the title, wrapping a Status. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Trailing region for caller-owned actions. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | Omit<StyledProps<BaseToggle.Props>, "type"> | — | Base UI Toggle props for a pressed-state action (for example panel collapse). See the conversation-panel page for its header usage. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | Omit<StyledProps<BaseButton.Props>, "type"> | — | Base UI Button props with className narrowed to string. The component always renders type="button", supports render/nativeButton for element substitution, and owns panel-action icon sizing and tabular number alignment. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Flexible min-height-zero body boundary that clips overflow around a contained viewport. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Native vertical scroll owner with overscroll containment and mobile momentum scrolling. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Minimum-full-height content wrapper. Elegant panels reserve footer clearance when needed. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"section"> | — | Section boundary that owns the separator and panel-consistent inline padding. |