From 79ceddd85c07fc15e416e2d4b38fae7817d6576e Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Sun, 1 Mar 2026 16:50:29 -0600 Subject: [PATCH] feat: compact usage widget in authenticated layout header --- apps/web/src/components/layout/AppHeader.tsx | 4 + apps/web/src/components/ui/UsageWidget.tsx | 337 +++++++++++++++++++ 2 files changed, 341 insertions(+) create mode 100644 apps/web/src/components/ui/UsageWidget.tsx diff --git a/apps/web/src/components/layout/AppHeader.tsx b/apps/web/src/components/layout/AppHeader.tsx index 0c6f28b..a2d9e14 100644 --- a/apps/web/src/components/layout/AppHeader.tsx +++ b/apps/web/src/components/layout/AppHeader.tsx @@ -5,6 +5,7 @@ import Link from "next/link"; import { usePathname } from "next/navigation"; import { useAuth } from "@/lib/auth/auth-context"; import { ThemeToggle } from "./ThemeToggle"; +import { UsageWidget } from "@/components/ui/UsageWidget"; import { useSidebar } from "./SidebarContext"; /** @@ -350,6 +351,9 @@ export function AppHeader(): React.JSX.Element { {/* Theme Toggle */} + {/* Usage Widget */} + + {/* User Avatar + Dropdown */}
+ + {popoverOpen && ( +
+
+ Token Usage +
+ + {isLoading ? ( +
+ Loading usage data… +
+ ) : summary ? ( + <> +
+
+ Total Tokens + + {formatTokens(summary.totalTokens)} + +
+
+ Estimated Cost + + ${summary.totalCost.toFixed(2)} + +
+
+ Tasks + + {summary.taskCount} + +
+
+ + + )} +
+ ); +}