Add live ActiveAgentsPanel with real-time transcript feed, SidebarContext for responsive sidebar state, agent config form with reasoning effort, improved inbox with failed run alerts, enriched issue detail with project picker, and various component refinements across pages. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
import { Link } from "react-router-dom";
|
|
import { Menu } from "lucide-react";
|
|
import { useBreadcrumbs } from "../context/BreadcrumbContext";
|
|
import { useSidebar } from "../context/SidebarContext";
|
|
import { Button } from "@/components/ui/button";
|
|
import {
|
|
Breadcrumb,
|
|
BreadcrumbItem,
|
|
BreadcrumbLink,
|
|
BreadcrumbList,
|
|
BreadcrumbPage,
|
|
BreadcrumbSeparator,
|
|
} from "@/components/ui/breadcrumb";
|
|
import { Fragment } from "react";
|
|
|
|
export function BreadcrumbBar() {
|
|
const { breadcrumbs } = useBreadcrumbs();
|
|
const { toggleSidebar, isMobile } = useSidebar();
|
|
|
|
if (breadcrumbs.length === 0) return null;
|
|
|
|
const menuButton = isMobile && (
|
|
<Button
|
|
variant="ghost"
|
|
size="icon-sm"
|
|
className="mr-2 shrink-0"
|
|
onClick={toggleSidebar}
|
|
>
|
|
<Menu className="h-5 w-5" />
|
|
</Button>
|
|
);
|
|
|
|
// Single breadcrumb = page title (uppercase)
|
|
if (breadcrumbs.length === 1) {
|
|
return (
|
|
<div className="border-b border-border px-4 md:px-6 py-4 flex items-center">
|
|
{menuButton}
|
|
<h1 className="text-sm font-semibold uppercase tracking-wider">
|
|
{breadcrumbs[0].label}
|
|
</h1>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
// Multiple breadcrumbs = breadcrumb trail
|
|
return (
|
|
<div className="border-b border-border px-4 md:px-6 py-3 flex items-center">
|
|
{menuButton}
|
|
<Breadcrumb>
|
|
<BreadcrumbList>
|
|
{breadcrumbs.map((crumb, i) => {
|
|
const isLast = i === breadcrumbs.length - 1;
|
|
return (
|
|
<Fragment key={i}>
|
|
{i > 0 && <BreadcrumbSeparator />}
|
|
<BreadcrumbItem>
|
|
{isLast || !crumb.href ? (
|
|
<BreadcrumbPage>{crumb.label}</BreadcrumbPage>
|
|
) : (
|
|
<BreadcrumbLink asChild>
|
|
<Link to={crumb.href}>{crumb.label}</Link>
|
|
</BreadcrumbLink>
|
|
)}
|
|
</BreadcrumbItem>
|
|
</Fragment>
|
|
);
|
|
})}
|
|
</BreadcrumbList>
|
|
</Breadcrumb>
|
|
</div>
|
|
);
|
|
}
|