disclosure-bureau/web/app/graph/page.tsx

53 lines
2.2 KiB
TypeScript

/**
* /graph — force-directed entity graph view, Obsidian-style, FULLSCREEN.
*
* Layout: fixed 100vh viewport, overlay HUD com header + AuthBar no canto,
* canvas full-bleed por baixo. Mais imersivo que o layout em container.
*/
import Link from "next/link";
import { AuthBar } from "@/components/auth-bar";
import { ForceGraphCanvas } from "@/components/force-graph-canvas";
export const dynamic = "force-dynamic";
export default function GraphPage() {
return (
<main className="fixed inset-0 bg-[#040810] overflow-hidden">
{/* Top overlay HUD */}
<div className="absolute top-0 left-0 right-0 z-30 pointer-events-none">
<div className="flex items-start justify-between gap-4 p-4 bg-gradient-to-b from-[#040810]/95 via-[#040810]/60 to-transparent pointer-events-auto">
<div>
<div className="font-mono text-[10px] text-[#5a6678] tracking-widest uppercase mb-1">
graph · entity co-mention network
</div>
<h1 className="font-mono text-xl text-[#00ff9c]"> Bureau Connections</h1>
</div>
<div className="flex items-center gap-2 pointer-events-auto">
<Link
href="/"
className="font-mono text-xs px-3 py-1.5 border border-[#7fdbff] text-[#7fdbff] hover:bg-[rgba(127,219,255,0.10)] rounded"
>
home
</Link>
<AuthBar />
</div>
</div>
</div>
{/* Bottom legend */}
<div className="absolute bottom-0 left-0 right-0 z-30 pointer-events-none">
<div className="bg-gradient-to-t from-[#040810]/95 via-[#040810]/60 to-transparent p-3">
<p className="font-mono text-[10px] text-[#5a6678] text-center max-w-3xl mx-auto">
Cada é uma entidade. Arestas = co-menções no mesmo chunk (peso = de chunks compartilhados).
Clique para expandir vizinhos + abrir a página da entidade. Dados de <code className="text-[#7fdbff]">public.entity_mentions</code>.
</p>
</div>
</div>
{/* Fullscreen canvas */}
<div className="absolute inset-0">
<ForceGraphCanvas />
</div>
</main>
);
}