import { IconBulb, IconCheck } from "@tabler/icons-react";
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu";
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
import { cn } from "@/lib/utils";
import type { ThinkingMode } from "shared/legacy-sdk";
interface ThinkingButtonProps {
mode: ThinkingMode;
effort: string;
efforts?: string[];
alwaysOn?: boolean;
disabled?: boolean;
/** When set, rendered as a muted wrapping note below the effort options
* (e.g. the mid-conversation switch cache-cost notice). */
cacheNote?: string;
onToggle: () => void;
onSelectEffort: (effort: string) => void;
}
function label(effort: string): string {
return effort.charAt(0).toUpperCase() + effort.slice(1);
}
export function ThinkingButton({ mode, effort, efforts = [], alwaysOn = false, disabled, cacheNote, onToggle, onSelectEffort }: ThinkingButtonProps) {
if (mode === "none") return null;
const active = effort !== "off" || alwaysOn;
const button = (
);
if (mode === "effort") {
const options = alwaysOn ? efforts : ["off", ...efforts];
return (
{button}
Thinking effort: {label(effort)}
{options.map((option) => (
onSelectEffort(option)} className="text-xs gap-2">
{label(option)}
))}
{cacheNote !== undefined && (
{cacheNote}
)}
);
}
const tooltip = mode === "always" ? "Thinking is always enabled for this model" : active ? "Thinking enabled" : "Enable thinking";
return (
{button}
{tooltip}
);
}