Sheet
A modal side panel anchored to a screen edge — for detail views and focused tasks without leaving the page.
Usage
import {
Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle,
SheetCloseButton, SheetBody, SheetDescription, SheetFooter,
} from '@acronis-platform/ui-react';Sheet is a modal side panel — the same Base UI Dialog primitive the Dialog
component uses (focus trap, scroll lock, ARIA), anchored to a screen edge via
side (top / right / bottom / left, default right) with a slide
transition. Compose it from parts: a trigger, the content panel, and an optional
header (title + close), body (with a description), and footer. This is a
design-pending v1 themed on the shared semantic tokens like the Dialog family.
Detailsis an alias. The Vue UI kit called this side panelDetails. The full part family is re-exported underDetails*(Details,DetailsContent,DetailsHeader, …) for a 1:1 migration —import { Details } from '@acronis-platform/ui-react'. PreferSheetin new code.
Examples
<Sheet>
<SheetTrigger render={<Button variant="secondary">Open details</Button>} />
<SheetContent side="right">
<SheetHeader>
<SheetTitle>Workload details</SheetTitle>
<SheetCloseButton />
</SheetHeader>
<SheetBody>
<SheetDescription>Inspect the selected workload.</SheetDescription>
</SheetBody>
<SheetFooter>
<Button>Edit</Button>
</SheetFooter>
</SheetContent>
</Sheet>side anchors the panel to any edge — left/right are full-height,
top/bottom full-width:
<SheetContent side="left"> … </SheetContent>Preset: SheetDetails
For the common "details of the selected item" panel, use the SheetDetails
preset — the easy path that is the
sheet-detail-panel pattern. It bakes the header
(title + close), a body that switches by contentState
(loading → Spinner, empty/error → Empty, else a property list or custom
children), and an optional footer of actions:
import { SheetDetails, Button } from '@acronis-platform/ui-react';
<SheetDetails
open={open}
onOpenChange={setOpen}
title="Workload details"
contentState={loading ? 'loading' : 'content'}
properties={[
{ label: 'Status', value: 'Protected' },
{ label: 'Owner', value: 'ken99@example.com' },
]}
actions={<Button>Edit</Button>}
/>Reach for the composable Sheet* parts (above) only when you need a layout the
preset doesn't cover.
API Reference
The root Sheet (and Details) forwards the Base UI Dialog root props
(open, defaultOpen, onOpenChange, modal). SheetContent adds:
Prop
Type