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}
);
}