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 />On desktop the name and the description share one row. The name keeps its full width; the description only uses what is left and truncates, or disappears, first. The name itself truncates only when it alone is wider than the row.
Wide
480px
320px
320px · name longer than the row
edge"inset" | "attached"
Lets the panel own how its header and content meet adjacent regions. AppShell slots remain layout-only.
...propsuseRender.ComponentProps<"section">
Panel root. The caller chooses sizing, placement, surface treatment, and header composition.
| 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. |
...propsuseRender.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"> | — | Low-level fixed header region. Use PanelHeader when the header needs the shared identity, metadata, status, and actions layout. |
...propsuseRender.ComponentProps<"div">
Shared panel header layout for caller-owned identity, metadata, status, and actions.
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Shared panel header layout for caller-owned identity, metadata, status, and actions. |
...propsuseRender.ComponentProps<"div">
Fixed section-level header with the shared responsive panel treatment.
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Fixed section-level header with the shared responsive panel treatment. |
...propsuseRender.ComponentProps<"div">
Optional identity region alongside PanelHeaderContent. It uses the contained sticker-chip 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"> | — | Optional identity region alongside PanelHeaderContent. It uses the contained sticker-chip icon treatment; the consumer owns the content's size, such as Avatar size or icon size classes. |
...propsuseRender.ComponentProps<"div">
Flexible region for an optional icon, title, metadata, and status parts.
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Flexible region for an optional icon, title, metadata, and status parts. |
...propsuseRender.ComponentProps<"div">
Inline group for a title and its adjacent status.
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Inline group for a title and its adjacent status. |
...propsuseRender.ComponentProps<"div">
Caller-owned panel or section title.
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Caller-owned panel or section title. |
sizedefault: "sm""sm" | "md"
Secondary metadata size.
...propsuseRender.ComponentProps<"div">
Optional secondary metadata below or alongside the title.
| Prop | Type | Default | Description |
|---|---|---|---|
size | "sm" | "md" | "sm" | Secondary metadata size. |
...props | useRender.ComponentProps<"div"> | — | Optional secondary metadata below or alongside the title. |
...propsuseRender.ComponentProps<"span">
Attribute badge alongside the title, such as a muted marker.
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"span"> | — | Attribute badge alongside the title, such as a muted marker. |
...propsuseRender.ComponentProps<"span">
Live status readout alongside the title, wrapping a Status.
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"span"> | — | Live status readout alongside the title, wrapping a Status. |
...propsuseRender.ComponentProps<"div">
Trailing region for caller-owned actions.
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Trailing region for caller-owned actions. |
...propsOmit<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<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. |
...propsOmit<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 | 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. |
...propsuseRender.ComponentProps<"div">
Flexible min-height-zero body boundary that clips overflow around a contained viewport.
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Flexible min-height-zero body boundary that clips overflow around a contained viewport. |
...propsuseRender.ComponentProps<"div">
Native vertical scroll owner with overscroll containment and mobile momentum scrolling.
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Native vertical scroll owner with overscroll containment and mobile momentum scrolling. |
...propsuseRender.ComponentProps<"div">
Minimum-full-height content wrapper.
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Minimum-full-height content wrapper. |
...propsuseRender.ComponentProps<"section">
Section boundary that owns the separator and panel-consistent inline padding.
| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"section"> | — | Section boundary that owns the separator and panel-consistent inline padding. |