bioflow / ui /components /page-header.tsx
yassinekolsi
Fix all TypeScript errors: remove unused imports, delete orphan reactflow components
532554f
import * as React from 'react';
import { SidebarTrigger } from '@/components/animate-ui/components/radix/sidebar';
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from '@/components/ui/breadcrumb';
import { Separator } from '@/components/ui/separator';
import { cn } from '@/lib/utils';
interface PageHeaderProps {
title: string;
subtitle?: string;
icon?: React.ReactNode;
className?: string;
breadcrumbs?: Array<{ label: string; href?: string }>;
showSidebarTrigger?: boolean;
}
export function PageHeader({
title,
subtitle,
icon,
className,
breadcrumbs,
showSidebarTrigger = true,
}: PageHeaderProps) {
return (
<div className={cn('space-y-4', className)}>
{(showSidebarTrigger || breadcrumbs) && (
<header className="flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12">
<div className="flex items-center gap-2">
{showSidebarTrigger && (
<>
<SidebarTrigger className="-ml-1" />
<Separator orientation="vertical" className="mr-2 h-4" />
</>
)}
{breadcrumbs && breadcrumbs.length > 0 && (
<Breadcrumb>
<BreadcrumbList>
{breadcrumbs.map((crumb, index) => (
<React.Fragment key={index}>
{index > 0 && (
<BreadcrumbSeparator className="hidden md:block" />
)}
<BreadcrumbItem
className={index === 0 ? 'hidden md:block' : ''}
>
{crumb.href ? (
<BreadcrumbLink href={crumb.href}>
{crumb.label}
</BreadcrumbLink>
) : (
<BreadcrumbPage>{crumb.label}</BreadcrumbPage>
)}
</BreadcrumbItem>
</React.Fragment>
))}
</BreadcrumbList>
</Breadcrumb>
)}
</div>
</header>
)}
<div className="space-y-2">
<h1 className="flex items-center gap-3 text-3xl font-bold tracking-tight">
{icon && <span className="text-primary">{icon}</span>}
{title}
</h1>
{subtitle && (
<p className="text-muted-foreground text-lg">{subtitle}</p>
)}
</div>
</div>
);
}
export function SectionHeader({
title,
icon,
action,
}: {
title: string;
icon?: React.ReactNode;
action?: React.ReactNode;
}) {
return (
<div className="mb-6 flex items-center justify-between">
<h2 className="flex items-center gap-2 text-xl font-semibold">
{icon}
{title}
</h2>
{action}
</div>
);
}