Panel

Layout foundation for fixed headers, contained scrolling, sections, and optional bottom actions.

Preview#

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

PropTypeDefaultDescription
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.
--panel-footer-clearance<length>10remElegant desktop space reserved below scroll content for an overlaid PanelFooter. Set to 0rem when the panel has no footer.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Low-level fixed header region. Use PanelHeader when the header needs the shared identity, metadata, status, and actions layout.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Shared panel header layout for caller-owned identity, metadata, status, and actions.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Fixed section-level header with the shared responsive panel treatment.
PropTypeDefaultDescription
...propsuseRender.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.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Flexible region for an optional icon, title, metadata, and status parts.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Inline group for a title and its adjacent status.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Caller-owned panel or section title.
PropTypeDefaultDescription
size"sm" | "md""sm"Secondary metadata size.
...propsuseRender.ComponentProps<"div">Optional secondary metadata below or alongside the title.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"span">Attribute badge alongside the title, such as a muted marker.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"span">Live status readout alongside the title, wrapping a Status.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Trailing region for caller-owned actions.
PropTypeDefaultDescription
...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.
PropTypeDefaultDescription
...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.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Flexible min-height-zero body boundary that clips overflow around a contained viewport.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Native vertical scroll owner with overscroll containment and mobile momentum scrolling.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Minimum-full-height content wrapper. Elegant panels reserve footer clearance when needed.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"section">Section boundary that owns the separator and panel-consistent inline padding.