Conversation, participant, message, reaction, and media APIs backed by SignalR hub events for real-time delivery, read states, presence, and draft handling.
import { useState } from 'react';
import { AvatarRow, Avatar, AiTextarea, MessageBubble } from '@cleen/cleen-components';
import { useConversation } from '@/hooks/useConversation';
export function ChatThread({ conversationId }) {
const { conversation, messages, send, typing } = useConversation(conversationId);
const [draft, setDraft] = useState('');
if (!conversation) return null;
return (
<div className="chat-thread">
<header>
<h2>{conversation.title}</h2>
<AvatarRow users={conversation.participants} maxVisible={5} />
</header>
<ul className="chat-messages">
{messages.map((m) => (
<MessageBubble key={m.id} message={m} avatar={<Avatar user={m.author} />} />
))}
{typing && <li className="chat-typing">{typing.name} is typing…</li>}
</ul>
<AiTextarea
value={draft}
onChange={setDraft}
onSubmit={() => { send(draft); setDraft(''); }}
/>
</div>
);
}Internal code areas in the licensed Full-Stack codebase that back this module.
ApiChatHubs/MessagingHubA quick visual of how Messaging participates across the CleenUI stack, alongside the named operations it adds to the API surface.
Each operation maps to an endpoint in the licensed C# Web API surface.