"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 (
DCI Admin
{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}
}
); }