Files
NetMesh/components/ai/AgentIconBadge.tsx
zhaolei 3c72efcb7f
Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
[Init] Initial commit - NetMesh terminal manager
2026-09-13 18:24:01 +08:00

79 lines
1.9 KiB
TypeScript

import React from 'react';
import { cn } from '../../lib/utils';
import {
AGENT_ICON_VISUALS,
resolveAgentIconKey,
type AgentIconKey,
type AgentIconSource,
} from '../../domain/agentIcon';
export type { AgentIconKey, AgentIconSource };
export const AgentIconBadge: React.FC<{
agent: AgentIconSource | 'add-more';
size?: 'xs' | 'sm' | 'md' | 'lg';
variant?: 'plain' | 'badge';
className?: string;
}> = ({ agent, size = 'md', variant = 'badge', className }) => {
const iconKey = resolveAgentIconKey(agent);
const visual = AGENT_ICON_VISUALS[iconKey];
const badgeSize =
size === 'xs'
? 'h-4 w-4 rounded-sm'
: size === 'sm'
? 'h-7 w-7 rounded-lg'
: size === 'lg'
? 'h-10 w-10 rounded-xl'
: 'h-8 w-8 rounded-lg';
const imageSize =
size === 'xs'
? 'h-3.5 w-3.5'
: size === 'sm'
? 'h-3.5 w-3.5'
: size === 'lg'
? 'h-5 w-5'
: 'h-4 w-4';
if (variant === 'plain') {
return (
<div
aria-hidden="true"
className={cn('shrink-0', imageSize, className)}
style={{
maskImage: `url(${visual.src})`,
WebkitMaskImage: `url(${visual.src})`,
maskSize: 'contain',
WebkitMaskSize: 'contain',
maskRepeat: 'no-repeat',
WebkitMaskRepeat: 'no-repeat',
maskPosition: 'center',
WebkitMaskPosition: 'center',
backgroundColor: 'currentColor',
}}
/>
);
}
return (
<div
data-agent-badge=""
className={cn(
'flex shrink-0 items-center justify-center overflow-hidden border',
badgeSize,
visual.badgeClassName,
className,
)}
>
<img
src={visual.src}
alt=""
aria-hidden="true"
draggable={false}
className={cn(imageSize, visual.imageClassName)}
/>
</div>
);
};
export default AgentIconBadge;