"use client";
import { Activity, ArrowUpRight, Database, FileText, Gauge, GitMerge, Hammer, LogOut, Plug, ShieldCheck, Wrench, Zap } from "lucide-react";
import Link from "next/link";
import { usePathname } from "next/navigation";
import type { ReactNode } from "react";
import { LogoMark } from "@/components/brand/logo";
import { ThemeToggle } from "@/components/theme";
import { cn } from "@/components/ui/cn";
import { ToastProvider } from "./toast";
export const ADMIN_NAV = [
{ label: "Overview", href: "/admin", icon: Activity, match: (p: string) => p === "/admin" },
{ label: "Connectors", href: "/admin/connectors", icon: Plug, match: (p: string) => p.startsWith("/admin/connectors") },
{ label: "Documents", href: "/admin/documents", icon: FileText, match: (p: string) => p.startsWith("/admin/documents") },
{ label: "Matches", href: "/admin/matches", icon: GitMerge, match: (p: string) => p.startsWith("/admin/matches") },
{ label: "Quality", href: "/admin/quality", icon: ShieldCheck, match: (p: string) => p.startsWith("/admin/quality") },
{ label: "Projects", href: "/admin/projects", icon: Hammer, match: (p: string) => p.startsWith("/admin/projects") },
{ label: "Data gaps", href: "/admin/data-gaps", icon: Gauge, match: (p: string) => p.startsWith("/admin/data-gaps") },
{ label: "Events", href: "/admin/events", icon: Zap, match: (p: string) => p.startsWith("/admin/events") },
{ label: "Dev tool", href: "/admin/devtool", icon: Wrench, match: (p: string) => p.startsWith("/admin/devtool") },
{ label: "Sources", href: "/admin/sources", icon: Database, match: (p: string) => p.startsWith("/admin/sources") },
] as const;
/** Compact operational shell: left rail ≥ md, horizontal tabs below (sticky) on phones. */
export function AdminShell({ children }: { children: ReactNode }) {
const path = usePathname();
return (
{children}
);
}
/** Page title row for admin pages (denser than the public PageHeader). */
export function AdminPageHeader({ title, eyebrow, description, aside, className }: { title: ReactNode; eyebrow?: ReactNode; description?: ReactNode; aside?: ReactNode; className?: string }) {
return (
{eyebrow &&
{eyebrow}
}
{title}
{description &&
{description}
}
{aside && {aside}
}
);
}