File size: 1,637 Bytes
d725335 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import { useDashboard } from "@/lib/dashboard"
import { Badge } from "@/components/ui/badge"
export function TopBar() {
const { params, result, running } = useDashboard()
return (
<header
id="top"
className="sticky top-0 z-30 border-b border-border/60 bg-background/70 backdrop-blur-xl"
>
<div className="flex flex-wrap items-center justify-between gap-3 px-6 py-4">
<div>
<div className="flex items-center gap-2.5">
<h1 className="font-display text-xl font-semibold tracking-tight">
Tiny Trigger
</h1>
<Badge variant={running ? "live" : "default"}>
{running ? (
<>
<span className="size-1.5 rounded-full bg-primary signal-dot" />
running
</>
) : (
"idle"
)}
</Badge>
</div>
<p className="mt-0.5 text-xs text-muted-foreground">
Open-vocabulary video automations · detect → validate rules → dispatch
</p>
</div>
<div className="flex flex-wrap items-center gap-2">
<Badge>{params.modelName}</Badge>
<Badge variant={params.enableWebhooks ? "info" : "default"}>
webhooks {params.enableWebhooks ? "live" : "off"}
</Badge>
{result && (
<Badge variant={result.status === "fired" ? "live" : "warning"}>
{result.status === "fired" ? `${result.stats.actions} fired` : "no match"}
</Badge>
)}
</div>
</div>
</header>
)
}
|