import { clsx } from "clsx";
export function PageHeader({
title,
description,
actions,
meta
}: {
title: string;
description?: string;
actions?: React.ReactNode;
meta?: React.ReactNode;
}) {
return (
{meta ?
{meta}
: null}
{title}
{description ?
{description}
: null}
{actions ? {actions}
: null}
);
}
export function Panel({
title,
eyebrow,
actions,
children,
className
}: {
title?: string;
eyebrow?: string;
actions?: React.ReactNode;
children: React.ReactNode;
className?: string;
}) {
return (
{title || actions || eyebrow ? (
{eyebrow ? {eyebrow} : null}
{title ?
{title}
: null}
{actions ?
{actions}
: null}
) : null}
{children}
);
}
export function MetricTile({
label,
value,
detail,
tone = "neutral",
icon
}: {
label: string;
value: React.ReactNode;
detail?: string;
tone?: "neutral" | "good" | "warn" | "danger" | "info";
icon?: React.ReactNode;
}) {
return (
{label}
{icon ? {icon} : null}
{value}
{detail ?
{detail}
: null}
);
}
export function Tabs({ items, active }: { items: Array<{ label: string; href: string; count?: number }>; active: string }) {
return (
);
}
export function EmptyState({
title,
description,
action
}: {
title: string;
description?: string;
action?: React.ReactNode;
}) {
return (
{title}
{description ?
{description} : null}
{action ?
{action}
: null}
);
}
export function StatusDot({ tone = "neutral", label }: { tone?: string; label: string }) {
return {label};
}
export function DataTable({ children }: { children: React.ReactNode }) {
return {children}
;
}