Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
81 lines
1.8 KiB
TypeScript
81 lines
1.8 KiB
TypeScript
import type { ReactElement } from "react";
|
|
import {
|
|
Tooltip,
|
|
TooltipContent,
|
|
TooltipTrigger,
|
|
cn
|
|
} from "@tutti-os/ui-system";
|
|
import type {
|
|
AgentGUIAgentTarget,
|
|
AgentGUIAgentTargetInfoRenderer,
|
|
AgentGUIAgentTargetInfoSurface
|
|
} from "../types";
|
|
|
|
interface AgentTargetInfoTooltipProps {
|
|
align?: "center" | "end" | "start";
|
|
children: ReactElement;
|
|
fallbackLabel: string;
|
|
onOpenChange?: (open: boolean) => void;
|
|
open?: boolean;
|
|
renderer?: AgentGUIAgentTargetInfoRenderer | null;
|
|
side?: "bottom" | "left" | "right" | "top";
|
|
sideOffset?: number;
|
|
surface: AgentGUIAgentTargetInfoSurface;
|
|
target: AgentGUIAgentTarget;
|
|
}
|
|
|
|
export function AgentTargetInfoTooltip({
|
|
align,
|
|
children,
|
|
fallbackLabel,
|
|
onOpenChange,
|
|
open,
|
|
renderer,
|
|
side,
|
|
sideOffset,
|
|
surface,
|
|
target
|
|
}: AgentTargetInfoTooltipProps): React.JSX.Element {
|
|
return (
|
|
<Tooltip open={open} onOpenChange={onOpenChange}>
|
|
<TooltipTrigger asChild>{children}</TooltipTrigger>
|
|
<TooltipContent
|
|
align={align}
|
|
className={cn(renderer && "items-stretch p-0")}
|
|
side={side}
|
|
sideOffset={sideOffset}
|
|
>
|
|
{renderer ? (
|
|
<AgentTargetInfoContent
|
|
fallbackLabel={fallbackLabel}
|
|
renderer={renderer}
|
|
surface={surface}
|
|
target={target}
|
|
/>
|
|
) : (
|
|
fallbackLabel
|
|
)}
|
|
</TooltipContent>
|
|
</Tooltip>
|
|
);
|
|
}
|
|
|
|
function AgentTargetInfoContent({
|
|
fallbackLabel,
|
|
renderer,
|
|
surface,
|
|
target
|
|
}: {
|
|
fallbackLabel: string;
|
|
renderer: AgentGUIAgentTargetInfoRenderer;
|
|
surface: AgentGUIAgentTargetInfoSurface;
|
|
target: AgentGUIAgentTarget;
|
|
}): React.JSX.Element {
|
|
const content = renderer({ surface, target });
|
|
return content ? (
|
|
<>{content}</>
|
|
) : (
|
|
<span className="px-2 py-1">{fallbackLabel}</span>
|
|
);
|
|
}
|