Files
invyone/frontend/components/v5/PageHead.tsx
T
gbpark 5153386fce
Build & Deploy to K8s / build-and-deploy (push) Successful in 3m59s
디자인 수정
2026-04-21 22:59:51 +09:00

48 lines
1.5 KiB
TypeScript

"use client";
import { ReactNode } from "react";
import { ChevronRight } from "lucide-react";
export type Crumb = { label: string; href?: string };
type PageHeadProps = {
crumbs?: Crumb[];
title: ReactNode;
sub?: ReactNode;
/**
* Right-aligned action area. Design-system rule:
* priority `secondary` → `secondary` → `primary`, max 3 buttons.
* Pass <button class="v5-btn …"> nodes (or shadcn Buttons that visually match).
*/
actions?: ReactNode;
className?: string;
};
export function PageHead({ crumbs, title, sub, actions, className = "" }: PageHeadProps) {
return (
<div className={`v5-page-head ${className}`}>
<div className="v5-page-head-l">
{crumbs && crumbs.length > 0 && (
<div className="v5-crumbs">
{crumbs.map((c, i) => (
<span key={i} style={{ display: "inline-flex", alignItems: "center", gap: ".35rem" }}>
{i > 0 && <ChevronRight size={10} className="sep" />}
{c.href ? (
<a href={c.href} style={{ color: "inherit", textDecoration: "none" }}>
{c.label}
</a>
) : (
<span>{c.label}</span>
)}
</span>
))}
</div>
)}
<div className="v5-page-title">{title}</div>
{sub && <div className="v5-page-sub">{sub}</div>}
</div>
{actions && <div className="v5-page-head-r">{actions}</div>}
</div>
);
}