feat(agent-office): AgentCard component with state dot + badge
- state→color mapping via STATE_COLORS - notification badge with 9+ overflow - active prop for selected card border Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
30
src/pages/agent-office/components/AgentCard.jsx
Normal file
30
src/pages/agent-office/components/AgentCard.jsx
Normal file
@@ -0,0 +1,30 @@
|
||||
// src/pages/agent-office/components/AgentCard.jsx
|
||||
import { AGENT_META, STATE_COLORS, DEFAULT_STATE_COLOR } from '../constants.js';
|
||||
|
||||
export default function AgentCard({ agentId, agentState, notificationCount = 0, active = false, onClick }) {
|
||||
const meta = AGENT_META[agentId];
|
||||
if (!meta) return null;
|
||||
|
||||
const state = agentState?.state || 'idle';
|
||||
const stateInfo = STATE_COLORS[state] || DEFAULT_STATE_COLOR;
|
||||
const dotClass = `ao-card-dot ${state}${stateInfo.pulse ? ' pulse' : ''}`;
|
||||
const badgeText = notificationCount > 9 ? '9+' : String(notificationCount);
|
||||
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
className={`ao-card${active ? ' active' : ''}`}
|
||||
onClick={onClick}
|
||||
style={{ '--card-accent': meta.color }}
|
||||
>
|
||||
<span className={dotClass} title={state} />
|
||||
{notificationCount > 0 && (
|
||||
<span className="ao-card-badge">{badgeText}</span>
|
||||
)}
|
||||
<div className="ao-card-image">
|
||||
<img src={meta.image} alt={meta.displayName} />
|
||||
</div>
|
||||
<div className="ao-card-name">{meta.displayName}</div>
|
||||
</button>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user