Documentation Index
Fetch the complete documentation index at: https://mintlify.com/shadcn-ui/ui/llms.txt
Use this file to discover all available pages before exploring further.
Installation
npx shadcn@latest add resizable
import {
ResizableHandle,
ResizablePanel,
ResizablePanelGroup,
} from "@/components/ui/resizable"
<ResizablePanelGroup orientation="horizontal">
<ResizablePanel>One</ResizablePanel>
<ResizableHandle />
<ResizablePanel>Two</ResizablePanel>
</ResizablePanelGroup>
Component API
ResizablePanelGroup
Container for resizable panels. Built on react-resizable-panels.
function ResizablePanelGroup({
className,
...props
}: ResizablePrimitive.GroupProps)
Props:
orientation - Layout direction ("horizontal" | "vertical")
onLayoutChange - Callback when panel sizes change
autoSaveId - ID for persisting layout to localStorage
ResizablePanel
Individual resizable panel.
function ResizablePanel({ ...props }: ResizablePrimitive.PanelProps)
Props:
defaultSize - Initial size as percentage string (e.g., "50%")
minSize - Minimum size as percentage string
maxSize - Maximum size as percentage string
collapsible - Whether panel can collapse
onCollapse - Callback when panel collapses
onExpand - Callback when panel expands
ResizableHandle
Draggable handle between panels.
function ResizableHandle({
withHandle,
className,
...props
}: ResizablePrimitive.SeparatorProps & {
withHandle?: boolean
})
Props:
withHandle - Shows a visible grip icon on the handle
Examples
Horizontal Layout
Default horizontal resizable panels:
<ResizablePanelGroup orientation="horizontal" className="min-h-[200px]">
<ResizablePanel defaultSize="50%">
<div className="flex h-full items-center justify-center p-6">
<span className="font-semibold">Panel One</span>
</div>
</ResizablePanel>
<ResizableHandle />
<ResizablePanel defaultSize="50%">
<div className="flex h-full items-center justify-center p-6">
<span className="font-semibold">Panel Two</span>
</div>
</ResizablePanel>
</ResizablePanelGroup>
Vertical Layout
Vertical resizable panels:
<ResizablePanelGroup orientation="vertical" className="min-h-[400px]">
<ResizablePanel defaultSize="50%">
<div className="flex h-full items-center justify-center p-6">
<span className="font-semibold">Top Panel</span>
</div>
</ResizablePanel>
<ResizableHandle />
<ResizablePanel defaultSize="50%">
<div className="flex h-full items-center justify-center p-6">
<span className="font-semibold">Bottom Panel</span>
</div>
</ResizablePanel>
</ResizablePanelGroup>
With Handle
Show a visible grip handle:
<ResizablePanelGroup orientation="horizontal">
<ResizablePanel defaultSize="50%">Panel One</ResizablePanel>
<ResizableHandle withHandle />
<ResizablePanel defaultSize="50%">Panel Two</ResizablePanel>
</ResizablePanelGroup>
Multiple Panels
Three or more panels:
<ResizablePanelGroup orientation="horizontal">
<ResizablePanel defaultSize="25%">Sidebar</ResizablePanel>
<ResizableHandle />
<ResizablePanel defaultSize="50%">Main Content</ResizablePanel>
<ResizableHandle />
<ResizablePanel defaultSize="25%">Details</ResizablePanel>
</ResizablePanelGroup>
Nested Panels
Nested resizable layouts:
<ResizablePanelGroup orientation="horizontal">
<ResizablePanel defaultSize="50%">
<ResizablePanelGroup orientation="vertical">
<ResizablePanel defaultSize="50%">Top Left</ResizablePanel>
<ResizableHandle />
<ResizablePanel defaultSize="50%">Bottom Left</ResizablePanel>
</ResizablePanelGroup>
</ResizablePanel>
<ResizableHandle withHandle />
<ResizablePanel defaultSize="50%">Right Panel</ResizablePanel>
</ResizablePanelGroup>
With Constraints
Set minimum and maximum sizes:
<ResizablePanelGroup orientation="horizontal">
<ResizablePanel defaultSize="30%" minSize="20%" maxSize="40%">
Constrained Panel
</ResizablePanel>
<ResizableHandle />
<ResizablePanel>Flexible Panel</ResizablePanel>
</ResizablePanelGroup>
Persistence
Save panel layout to localStorage:
<ResizablePanelGroup orientation="horizontal" autoSaveId="my-layout">
<ResizablePanel>Panel One</ResizablePanel>
<ResizableHandle />
<ResizablePanel>Panel Two</ResizablePanel>
</ResizablePanelGroup>
Accessibility
- Fully keyboard accessible
- Arrow keys to resize panels
- Enter to reset to default size
- Proper ARIA labels and roles
API Reference
See the react-resizable-panels documentation for complete API reference.