Resizable
React layoutDrag-to-resize panel layout — horizontal or vertical splits with persistent sizes. Use for IDE-style sidebars, split views, and any layout the user should be able to reshape.
Also available for Vue ->Installation
$ pnpm dlx shadcn@latest add https://react.uipkge.dev/r/react/resizable.json$ npx shadcn@latest add https://react.uipkge.dev/r/react/resizable.json$ yarn dlx shadcn@latest add https://react.uipkge.dev/r/react/resizable.json$ bunx shadcn@latest add https://react.uipkge.dev/r/react/resizable.json
Or with the named registry:
npx shadcn@latest add @uipkge-react/resizable
Examples
Dependencies
Files (2)
-
components/ui/resizable/resizable.tsx 2 kB
'use client' import * as React from 'react' import { GripVertical } from 'lucide-react' // Named exports (the package exposes these directly, not under a namespace). import { PanelGroup, Panel, PanelResizeHandle } from 'react-resizable-panels' import { cn } from '@/lib/utils' function ResizablePanelGroup({ className, ...props }: React.ComponentProps<typeof PanelGroup>) { return ( <PanelGroup data-uipkge="" data-slot="resizable-panel-group" className={cn( 'flex h-full w-full data-[panel-group-direction=vertical]:flex-col', className, )} {...props} /> ) } function ResizablePanel({ ...props }: React.ComponentProps<typeof Panel>) { return <Panel data-uipkge="" data-slot="resizable-panel" {...props} /> } function ResizableHandle({ withHandle, className, children, ...props }: React.ComponentProps<typeof PanelResizeHandle> & { withHandle?: boolean }) { return ( <PanelResizeHandle data-uipkge="" data-slot="resizable-handle" className={cn( 'bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90', className, )} {...props} > {withHandle && ( <div className="bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border"> {children ?? <GripVertical className="size-2.5" />} </div> )} </PanelResizeHandle> ) } export { ResizablePanelGroup, ResizablePanel, ResizableHandle } -
components/ui/resizable/index.ts 0.1 kB
export { ResizablePanelGroup, ResizablePanel, ResizableHandle } from './resizable'
Raw manifest: https://react.uipkge.dev/r/react/resizable.json