"use client"; import * as React from "react"; import { Dialog } from "radix-ui"; import { useTambo } from "@tambo-ai/react"; import { cn } from "@/lib/utils"; import type { VariantProps } from "class-variance-authority"; import type { messageVariants } from "@/components/ui/message"; import { MessageInput, MessageInputTextarea, MessageInputToolbar, MessageInputSubmitButton, MessageInputError, // MessageInputMcpConfigButton, } from "@/components/ui/message-input"; import { ThreadContent, ThreadContentMessages, } from "@/components/ui/thread-content"; import { ScrollableMessageContainer } from "@/components/ui/scrollable-message-container"; /** * Props for the ControlBar component * @interface * @extends React.HTMLAttributes */ export interface ControlBarProps extends React.HTMLAttributes { /** Optional context key for the thread */ contextKey?: string; /** Keyboard shortcut for toggling the control bar (default: "mod+k") */ hotkey?: string; /** * Controls the visual styling of messages in the thread. * Possible values include: "default", "compact", etc. * These values are defined in messageVariants from "@/components/ui/message". * @example variant="compact" */ variant?: VariantProps["variant"]; } /** * A floating control bar component for quick access to chat functionality * @component * @example * ```tsx * * ``` */ export const ControlBar = React.forwardRef( ({ className, contextKey, hotkey = "mod+k", variant, ...props }, ref) => { const [open, setOpen] = React.useState(false); const isMac = typeof navigator !== "undefined" && navigator.platform.startsWith("Mac"); const { thread } = useTambo(); React.useEffect(() => { const down = (e: KeyboardEvent) => { const [modifier, key] = hotkey.split("+"); const isModifierPressed = modifier === "mod" ? e.metaKey || e.ctrlKey : false; if (e.key === key && isModifierPressed) { e.preventDefault(); setOpen((open) => !open); } }; document.addEventListener("keydown", down); return () => document.removeEventListener("keydown", down); }, [hotkey, setOpen]); return ( Control Bar
{/* Uncomment this to enable client-side MCP config modal button */} {/* */}
{thread?.messages?.length > 0 && ( )}
); }, ); ControlBar.displayName = "ControlBar";