import { forwardRef, type ReactNode, type HTMLAttributes } from 'react'; import { cn } from '@kandev/ui/lib/utils'; /** * Reusable dockview panel layout primitives. * * PanelRoot – outermost wrapper, fills the dockview content area * PanelBody – scrollable (or non-scrollable) content region * PanelToolbar – fixed strip at the top/bottom of a panel */ type PanelRootProps = { children: ReactNode; className?: string; }; /** Fills the dockview content slot. Use as the outermost element in every panel. */ export function PanelRoot({ children, className }: PanelRootProps) { return (
{children}
); } type PanelBodyProps = Omit, 'className'> & { children: ReactNode; className?: string; /** Add default p-3 padding. Default true. */ padding?: boolean; /** Enable overflow scrolling. Default true. */ scroll?: boolean; }; /** Flexible content area that grows to fill remaining space. */ export const PanelBody = forwardRef( function PanelBody( { children, className, padding = true, scroll = true, ...rest }, ref, ) { return (
{children}
); }, ); type PanelToolbarProps = { children: ReactNode; className?: string; }; /** Fixed toolbar strip. Doesn't scroll with content. */ export function PanelToolbar({ children, className }: PanelToolbarProps) { return (
{children}
); } type PanelHeaderBarProps = { children?: ReactNode; className?: string; }; /** Fixed-height panel header bar. Renders children directly. */ export function PanelHeaderBar({ children, className }: PanelHeaderBarProps) { return (
{children}
); } type PanelHeaderBarSplitProps = { left?: ReactNode; right?: ReactNode; className?: string; }; /** Panel header bar with left/right slots separated by a spacer. */ export function PanelHeaderBarSplit({ left, right, className }: PanelHeaderBarSplitProps) { return (
{left}
{right}
); }