196 lines
4.6 KiB
TypeScript
196 lines
4.6 KiB
TypeScript
|
|
import type { ComponentType } from "react";
|
||
|
|
import {
|
||
|
|
Activity,
|
||
|
|
Brain,
|
||
|
|
ClipboardCheck,
|
||
|
|
Code2,
|
||
|
|
GitBranch,
|
||
|
|
Layers3,
|
||
|
|
LayoutDashboard,
|
||
|
|
ListChecks,
|
||
|
|
Network,
|
||
|
|
SearchCheck,
|
||
|
|
Settings2,
|
||
|
|
ShieldCheck,
|
||
|
|
UploadCloud,
|
||
|
|
} from "lucide-react";
|
||
|
|
|
||
|
|
export type NavGroupId = "workspace" | "build" | "review" | "publish";
|
||
|
|
|
||
|
|
export interface NavItem {
|
||
|
|
/** Stable identifier — used as React key and palette command id */
|
||
|
|
id: string;
|
||
|
|
/** i18n key */
|
||
|
|
labelKey: string;
|
||
|
|
/** Default label (English) */
|
||
|
|
label: string;
|
||
|
|
/** Static route — mutually exclusive with projectPath */
|
||
|
|
to?: string;
|
||
|
|
/** Path segment under /:projectId — joined as `/${projectPath}/${projectId}` */
|
||
|
|
projectPath?: string;
|
||
|
|
icon: ComponentType<{ className?: string }>;
|
||
|
|
/** Search keywords for the command palette (in addition to label) */
|
||
|
|
keywords?: string[];
|
||
|
|
/** Optional shortcut hint shown next to the item */
|
||
|
|
shortcut?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface NavGroup {
|
||
|
|
id: NavGroupId;
|
||
|
|
labelKey: string;
|
||
|
|
label: string;
|
||
|
|
items: NavItem[];
|
||
|
|
}
|
||
|
|
|
||
|
|
export const NAV_GROUPS: NavGroup[] = [
|
||
|
|
{
|
||
|
|
id: "workspace",
|
||
|
|
labelKey: "navGroup.workspace",
|
||
|
|
label: "Workspace",
|
||
|
|
items: [
|
||
|
|
{
|
||
|
|
id: "dashboard",
|
||
|
|
to: "/",
|
||
|
|
labelKey: "nav.dashboard",
|
||
|
|
label: "Dashboard",
|
||
|
|
icon: LayoutDashboard,
|
||
|
|
keywords: ["home", "overview"],
|
||
|
|
shortcut: "g d",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: "onboard",
|
||
|
|
to: "/onboard",
|
||
|
|
labelKey: "nav.onboard",
|
||
|
|
label: "New Project",
|
||
|
|
icon: UploadCloud,
|
||
|
|
keywords: ["create", "start", "wizard"],
|
||
|
|
shortcut: "g n",
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: "build",
|
||
|
|
labelKey: "navGroup.build",
|
||
|
|
label: "Build",
|
||
|
|
items: [
|
||
|
|
{
|
||
|
|
id: "sources",
|
||
|
|
projectPath: "sources",
|
||
|
|
labelKey: "nav.sources",
|
||
|
|
label: "Source Explorer",
|
||
|
|
icon: Settings2,
|
||
|
|
keywords: ["urls", "domains", "seed"],
|
||
|
|
shortcut: "g s",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: "crawl",
|
||
|
|
projectPath: "crawl",
|
||
|
|
labelKey: "nav.crawl",
|
||
|
|
label: "Seed Crawl",
|
||
|
|
icon: Activity,
|
||
|
|
keywords: ["scrape", "fetch"],
|
||
|
|
shortcut: "g c",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: "pipeline",
|
||
|
|
projectPath: "pipeline",
|
||
|
|
labelKey: "nav.pipeline",
|
||
|
|
label: "Build Pipeline",
|
||
|
|
icon: Layers3,
|
||
|
|
keywords: ["jobs", "run", "extract"],
|
||
|
|
shortcut: "g p",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: "analysis",
|
||
|
|
projectPath: "analysis",
|
||
|
|
labelKey: "nav.analysis",
|
||
|
|
label: "Page Analysis",
|
||
|
|
icon: SearchCheck,
|
||
|
|
keywords: ["html", "structure"],
|
||
|
|
shortcut: "g a",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: "schema",
|
||
|
|
projectPath: "schema",
|
||
|
|
labelKey: "nav.schema",
|
||
|
|
label: "Schema Designer",
|
||
|
|
icon: ShieldCheck,
|
||
|
|
keywords: ["types", "predicate", "model"],
|
||
|
|
shortcut: "g t",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: "research",
|
||
|
|
projectPath: "research",
|
||
|
|
labelKey: "nav.research",
|
||
|
|
label: "Graph Research",
|
||
|
|
icon: Brain,
|
||
|
|
keywords: ["graphrag", "query", "ai", "autonomous"],
|
||
|
|
shortcut: "g r",
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: "review",
|
||
|
|
labelKey: "navGroup.review",
|
||
|
|
label: "Review",
|
||
|
|
items: [
|
||
|
|
{
|
||
|
|
id: "editor",
|
||
|
|
projectPath: "editor",
|
||
|
|
labelKey: "nav.editor",
|
||
|
|
label: "Entity Manager",
|
||
|
|
icon: Network,
|
||
|
|
keywords: ["entities", "nodes", "merge"],
|
||
|
|
shortcut: "g e",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: "review",
|
||
|
|
projectPath: "review",
|
||
|
|
labelKey: "nav.review",
|
||
|
|
label: "Claim Review",
|
||
|
|
icon: ListChecks,
|
||
|
|
keywords: ["validate", "approve", "queue"],
|
||
|
|
shortcut: "g v",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: "quality",
|
||
|
|
projectPath: "quality",
|
||
|
|
labelKey: "nav.quality",
|
||
|
|
label: "Quality Inspector",
|
||
|
|
icon: ClipboardCheck,
|
||
|
|
keywords: ["metrics", "qa", "audit"],
|
||
|
|
shortcut: "g q",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: "graph",
|
||
|
|
projectPath: "graph",
|
||
|
|
labelKey: "nav.graph",
|
||
|
|
label: "Graph View",
|
||
|
|
icon: GitBranch,
|
||
|
|
keywords: ["visualization", "network"],
|
||
|
|
shortcut: "g g",
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: "publish",
|
||
|
|
labelKey: "navGroup.publish",
|
||
|
|
label: "Publish",
|
||
|
|
items: [
|
||
|
|
{
|
||
|
|
id: "export",
|
||
|
|
projectPath: "export",
|
||
|
|
labelKey: "nav.export",
|
||
|
|
label: "Export / API",
|
||
|
|
icon: Code2,
|
||
|
|
keywords: ["download", "rest", "json"],
|
||
|
|
shortcut: "g x",
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
export const PROJECT_ROUTE_PATTERNS = NAV_GROUPS.flatMap((g) =>
|
||
|
|
g.items.filter((i) => i.projectPath).map((i) => `/${i.projectPath}/:projectId`),
|
||
|
|
);
|