Files
tutti/packages/agent/gui/shared/AgentTargetInfoTooltip.tsx
agent-radar 2ed3415fb7
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
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

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>
);
}