Final corpus-graph PR. Connects the graph to the chair's workflow and rounds out the Obsidian-grade interactions. Backend (web/graph_api.py): neighborhood depth cap 2 → 3 (still bounded by NODE_CAP_MAX). Frontend: - URL deep-link: /graph?focus=cl:<id> is read on mount and written on focus change (router.replace, scroll:false). GraphView wrapped in <Suspense> per Next 16's useSearchParams requirement. - "הצג בגרף" button on the precedent detail page → /graph?focus=cl:<id>. - Depth slider (1–3) in the focused overlay → useNodeNeighborhood(id, depth). - Export PNG: grabs the rendered <canvas> from the area ref → toDataURL → download; failures surface a toast (UI4). - Rich node panel: precedent nodes fetch headnote/summary via the existing usePrecedent hook (Skeleton while pending, error surfaced — UI4). - Edge-type legend (ציטוט / נושא-תחום / יומון) added under the node legend. Deferred (noted for a later pass): expand-in-place merge, search→camera-center. web-ui build + lint pass. Invariants: G2 (depth change is read-only), UI4 (PNG + detail errors surfaced, not swallowed). api:types post-deploy. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
import { Suspense } from "react";
|
||
import Link from "next/link";
|
||
|
||
import { AppShell } from "@/components/app-shell";
|
||
import { GraphView } from "@/components/graph/graph-view";
|
||
|
||
export default function GraphPage() {
|
||
return (
|
||
<AppShell>
|
||
<section className="space-y-6">
|
||
<header>
|
||
<nav className="text-[0.78rem] text-ink-muted mb-1">
|
||
<Link href="/" className="hover:text-gold-deep">
|
||
בית
|
||
</Link>
|
||
<span aria-hidden> · </span>
|
||
<span className="text-navy">מפת הקורפוס</span>
|
||
</nav>
|
||
<h1 className="text-navy mb-0">מפת הקורפוס</h1>
|
||
<p className="text-ink-muted text-sm mt-1 max-w-3xl">
|
||
רשת הציטוטים של ספריית הפסיקה — כל נקודה היא פסיקה או נושא, וקו מציין ציטוט או שיוך.
|
||
גודל הנקודה משקף כמה פעמים הפסיקה צוטטה. לחצו על נקודה כדי להתמקד בשכניה.
|
||
</p>
|
||
</header>
|
||
<div className="h-[2px] bg-gradient-to-l from-transparent via-gold to-transparent" />
|
||
<Suspense
|
||
fallback={
|
||
<div className="grid h-[560px] place-items-center text-sm text-ink-muted">
|
||
טוען גרף…
|
||
</div>
|
||
}
|
||
>
|
||
<GraphView />
|
||
</Suspense>
|
||
</section>
|
||
</AppShell>
|
||
);
|
||
}
|