Add frontend app and redesign prototype for rule management UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Xin Wang
2026-07-16 11:24:02 +08:00
parent 64d5b82560
commit d093f95197
82 changed files with 12853 additions and 0 deletions

52
frontend/src/App.tsx Normal file
View File

@@ -0,0 +1,52 @@
import { useState } from "react"
import { ThemeProvider } from "next-themes"
import { MatchTester } from "@/components/MatchTester"
import { RuleEditor } from "@/components/RuleEditor"
import { Toaster } from "@/components/ui/sonner"
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
export default function App() {
const [version, setVersion] = useState<number | null>(null)
const [tab, setTab] = useState("rules")
return (
<ThemeProvider attribute="class" defaultTheme="light" enableSystem={false}>
<div className="bg-background min-h-svh">
<header className="border-b">
<div className="mx-auto flex w-full max-w-5xl items-center justify-between gap-4 px-6 py-4">
<div>
<h1 className="text-xl font-semibold tracking-tight">
ASR
</h1>
<p className="text-muted-foreground text-sm">
</p>
</div>
<div className="text-muted-foreground text-sm">
{version == null ? "版本加载中…" : `当前生效版本 V${version}`}
</div>
</div>
</header>
<main className="mx-auto w-full max-w-5xl px-6 py-6">
<Tabs value={tab} onValueChange={setTab}>
<TabsList>
<TabsTrigger value="rules"></TabsTrigger>
<TabsTrigger value="demo"></TabsTrigger>
</TabsList>
<TabsContent value="rules" className="mt-6">
<RuleEditor
onVersionChange={setVersion}
onSaved={() => setTab("demo")}
/>
</TabsContent>
<TabsContent value="demo" className="mt-6">
<MatchTester activeVersion={version} />
</TabsContent>
</Tabs>
</main>
</div>
<Toaster richColors position="top-center" />
</ThemeProvider>
)
}