import { Avatar, Icon, IconButton } from "../../shared/ui"; import type { ChatPresenceRecord } from "../../../../shared/domain"; import { formatRelative } from "../types"; import type { ConversationItem } from "./chat-helpers"; function presenceColor(status: string | undefined): string | null { switch (status) { case "active": case "online": return "var(--green)"; case "waiting_approval": case "busy": return "var(--amber)"; case "thinking": return "var(--accent)"; default: return null; } } /** * The conversation list: every channel and direct conversation is one row — * avatar, name, last-message preview, time, unread — newest first, the way * messengers do it. */ export function ChatSidebar({ conversations, presence, activeSpaceId, onSelect, onCreateSpace, }: { conversations: ConversationItem[]; presence: ChatPresenceRecord[]; activeSpaceId: string | null; onSelect: (spaceId: string) => void; onCreateSpace: () => void; }) { const presenceByPrincipal = new Map(presence.map((entry) => [entry.principalId, entry.status])); return ( ); } function ConversationRow({ conversation, active, presenceStatus, onClick, }: { conversation: ConversationItem; active: boolean; presenceStatus: string | undefined; onClick: () => void; }) { const dotColor = presenceColor(presenceStatus); return ( ); }