Lê Phi Nam
Deploy to HF Space
94004a2
Raw
History Blame Contribute Delete
1.28 kB
import React, { forwardRef } from 'react';
import './Panel.css';
/**
* Panel — a content surface. Replaces the ad-hoc card divs + `.glass-panel`.
*
* @param variant 'glass' | 'solid' | 'flat'
* @param padding 'none' | 'sm' | 'md' | 'lg'
* @param title optional string or node rendered in the panel header
* @param actions optional node rendered on the right of the header
* @param as element tag ('div' | 'section' | 'article' …)
*/
const Panel = forwardRef(function Panel(
{
variant = 'glass',
padding = 'md',
title = null,
actions = null,
as: Tag = 'section',
className = '',
children,
...rest
},
ref,
) {
const classes = [
'ui-panel',
`ui-panel--${variant}`,
`ui-panel--pad-${padding}`,
className,
].filter(Boolean).join(' ');
const hasHeader = title != null || actions != null;
return (
<Tag ref={ref} className={classes} {...rest}>
{hasHeader && (
<header className="ui-panel__header">
{title != null && <div className="ui-panel__title">{title}</div>}
{actions != null && <div className="ui-panel__actions">{actions}</div>}
</header>
)}
<div className="ui-panel__body">{children}</div>
</Tag>
);
});
export default Panel;