| 'use client' |
|
|
| import * as React from 'react' |
| import { GripVerticalIcon } from 'lucide-react' |
| import * as ResizablePrimitive from 'react-resizable-panels' |
|
|
| import { cn } from '@/lib/utils' |
|
|
| function ResizablePanelGroup({ |
| className, |
| ...props |
| }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) { |
| return ( |
| <ResizablePrimitive.PanelGroup |
| 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 ResizablePrimitive.Panel>) { |
| return <ResizablePrimitive.Panel data-slot="resizable-panel" {...props} /> |
| } |
|
|
| function ResizableHandle({ |
| withHandle, |
| className, |
| ...props |
| }: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & { |
| withHandle?: boolean |
| }) { |
| return ( |
| <ResizablePrimitive.PanelResizeHandle |
| 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"> |
| <GripVerticalIcon className="size-2.5" /> |
| </div> |
| )} |
| </ResizablePrimitive.PanelResizeHandle> |
| ) |
| } |
|
|
| export { ResizablePanelGroup, ResizablePanel, ResizableHandle } |
|
|