import type { ReactNode } from "react";
import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover.js";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "../ui/tooltip.js";
import { cn } from "../utils.js";
import { formatContextTokens } from "./format.js";
import type { ContextManifestViewData } from "./types.js";
function ContextDonut({ pct, advisory }: { pct: number; advisory: boolean }) {
const radius = 7.5;
const circumference = 2 * Math.PI * radius;
const displayPct = Math.max(3, Math.min(100, pct));
const dashOffset = circumference - (displayPct / 100) * circumference;
return (
);
}
export function ContextMeterView({
manifest,
contextWindow,
open,
onOpenChange,
children,
}: {
manifest: ContextManifestViewData;
contextWindow: number;
open: boolean;
onOpenChange: (open: boolean) => void;
children: ReactNode;
}) {
const pct = Math.min(
100,
Math.round((manifest.totalTokens / contextWindow) * 100),
);
const { conversationTokens, systemTokens } = manifest;
return (
Context {pct}% ยท {formatContextTokens(manifest.totalTokens)}
{systemTokens > 0
? ` (${formatContextTokens(systemTokens)} system + ${formatContextTokens(conversationTokens)} conversation)`
: ""}
{children}
);
}