import { Trans, useLingui } from "@lingui/react/macro"; import type { SpaceBot, SpaceGroup } from "@rakazo/contracts"; import { BotAvatar, GroupAvatar } from "@rakazo/ui-web"; import type { RefObject } from "react"; import { needsYouChipLabel, rosterActivitySubtitle, rosterStatusDot, } from "../../lib/agent-activity"; import { localizedPreview } from "../../lib/onboarding-copy"; import type { ContextMenuPosition } from "../BotContextMenu"; import { cleanRosterPreview, formatRosterTime } from "./roster-format"; import { rosterNameClass, rosterPreviewClass, rosterRowClass, rosterTimeClass, rosterUnreadDotClass, } from "./roster-row-style"; export type SidebarChatItem = { kind: "bot"; chat: SpaceBot } | { kind: "group"; chat: SpaceGroup }; export type BotMenuRequest = { kind: "bot" | "group"; id: string; position: ContextMenuPosition; }; /** A bot in the conversations section: reorderable by drag or Alt+Arrow within its group. */ export function TeamRosterRow({ item, groupBotIds, draggedBotId, onDraggedBotIdChange, onReorder, selected, onOpen, activeSpaceId, menuAnchor, onMenu, }: { item: Extract; groupBotIds: string[]; draggedBotId: string | null; onDraggedBotIdChange: (botId: string | null) => void; onReorder: (sourceId: string, targetId: string, groupBotIds: string[]) => void; selected: boolean; onOpen: () => void; activeSpaceId: string | undefined; menuAnchor: RefObject; onMenu: (menu: BotMenuRequest) => void; }) { const { t } = useLingui(); return ( ); } /** A conversation in the projects section; a project's main conversation has no chat actions. */ export function ProjectRosterRow({ item, selected, onOpen, activeSpaceId, menuAnchor, onMenu, }: { item: SidebarChatItem; selected: boolean; onOpen: () => void; activeSpaceId: string | undefined; menuAnchor: RefObject; onMenu: (menu: BotMenuRequest) => void; }) { const { t } = useLingui(); return ( ); }