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
79 lines
1.9 KiB
TypeScript
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;
|