Resizable
Accessible resizable panel groups and layouts with keyboard support.
Corvu
One
Two
Three
import { ResizableHandle, ResizablePanel, ResizablePanelGroup,} from "~/components/ui/resizable";
export default function ResizableDemo() { return ( <ResizablePanelGroup orientation="horizontal" class="max-w-sm rounded-lg border"> <ResizablePanel initialSize={0.5}> <div class="flex h-[200px] items-center justify-center p-6"> <span class="font-semibold">One</span> </div> </ResizablePanel> <ResizableHandle withHandle /> <ResizablePanel initialSize={0.5}> <ResizablePanelGroup orientation="vertical"> <ResizablePanel initialSize={0.25}> <div class="flex h-full items-center justify-center p-6"> <span class="font-semibold">Two</span> </div> </ResizablePanel> <ResizableHandle withHandle /> <ResizablePanel initialSize={0.75}> <div class="flex h-full items-center justify-center p-6"> <span class="font-semibold">Three</span> </div> </ResizablePanel> </ResizablePanelGroup> </ResizablePanel> </ResizablePanelGroup> );}About
The Resizable component is built on top of Corvu Resizable by Jasmin.
Installation
Usage
import { ResizableHandle, ResizablePanel, ResizablePanelGroup,} from "~/components/ui/resizable";<ResizablePanelGroup orientation="horizontal"> <ResizablePanel initialSize={0.25}>One</ResizablePanel> <ResizableHandle /> <ResizablePanel initialSize={0.75}>Two</ResizablePanel></ResizablePanelGroup>Composition
Use the following composition to build a ResizablePanelGroup:
ResizablePanelGroup├── ResizablePanel├── ResizableHandle└── ResizablePanelVertical
Use orientation="vertical" for vertical resizing.
Header
Content
import { ResizableHandle, ResizablePanel, ResizablePanelGroup,} from "~/components/ui/resizable";
export default function ResizableVertical() { return ( <ResizablePanelGroup orientation="vertical" class="min-h-[200px] max-w-sm rounded-lg border"> <ResizablePanel initialSize={0.25}> <div class="flex h-full items-center justify-center p-6"> <span class="font-semibold">Header</span> </div> </ResizablePanel> <ResizableHandle /> <ResizablePanel initialSize={0.75}> <div class="flex h-full items-center justify-center p-6"> <span class="font-semibold">Content</span> </div> </ResizablePanel> </ResizablePanelGroup> );}Handle
Use the withHandle prop on ResizableHandle to show a visible handle.
Sidebar
Content
import { ResizableHandle, ResizablePanel, ResizablePanelGroup,} from "~/components/ui/resizable";
export default function ResizableHandleDemo() { return ( <ResizablePanelGroup orientation="horizontal" class="min-h-[200px] max-w-sm rounded-lg border"> <ResizablePanel initialSize={0.25}> <div class="flex h-full items-center justify-center p-6"> <span class="font-semibold">Sidebar</span> </div> </ResizablePanel> <ResizableHandle withHandle /> <ResizablePanel initialSize={0.75}> <div class="flex h-full items-center justify-center p-6"> <span class="font-semibold">Content</span> </div> </ResizablePanel> </ResizablePanelGroup> );}API Reference
See the Corvu Resizable documentation for the primitive API.