Skip to content

Shadcn Resizable

The shadcn/ui Resizable builds panel layouts the user can resize by dragging a handle, styled with Tailwind CSS v4 and built on react-resizable-panels. It supports horizontal and vertical splits, nested groups, and keyboard resizing. Resizable panels power split views across ShadcnStore application blocks.

Key features

  • Horizontal and vertical panel groups.
  • Draggable handles, optionally with a grip.
  • Nested groups for complex layouts.
  • Keyboard-resizable handles.
  • Persist sizes with autoSaveId.

Installation

bash
npx shadcn@latest add resizable

Usage

tsx
import {
  ResizablePanelGroup,
  ResizablePanel,
  ResizableHandle,
} from "@/components/ui/resizable"

export function Example() {
  return (
    <ResizablePanelGroup direction="horizontal" className="rounded-lg border">
      <ResizablePanel defaultSize={50}>One</ResizablePanel>
      <ResizableHandle withHandle />
      <ResizablePanel defaultSize={50}>Two</ResizablePanel>
    </ResizablePanelGroup>
  )
}

Vertical and nested

tsx
<ResizablePanelGroup direction="vertical">…</ResizablePanelGroup>

Built on react-resizable-panels

Resizable is built on react-resizable-panels and is independent of the UI primitive layer.

Accessibility

  • Handles are keyboard-operable with arrow keys; keep that behavior.
  • Give each handle an accessible name where the layout is not obvious.
  • Set sensible minSize values so panels cannot collapse unexpectedly.

When to use the Resizable

Use resizable panels for layouts the user tailors: a code editor with a file tree, an email client, or a dashboard with adjustable regions. For fixed side content, use a Sidebar or Sheet.

Used in these blocks

For fixed navigation use a Sidebar; panels often contain a Data Table, a Scroll Area, or a Tabs view.

FAQ

What is the shadcn resizable used for?

The Resizable component builds panel layouts the user can resize by dragging a handle, such as split editors, sidebars, and dashboards.

How do I make vertical panels?

Set direction to vertical on ResizablePanelGroup; nest groups to combine horizontal and vertical splits.

Can panel sizes persist?

Yes. Give the group an autoSaveId to persist sizes, or control them with onLayout and your own storage.

How do I show a grip on the handle?

Add the withHandle prop to ResizableHandle.