| Property | MAUI Type | Blazor Type | Default | Description |
|---|
Messages | IList<ChatMessage>? | IList<ChatMessage>? | null | Message collection. On MAUI, supports INotifyCollectionChanged for reactive updates. |
Participants | IList<ChatParticipant>? | IList<ChatParticipant>? | null | Participant info for avatar, name, and color lookup |
IsMultiPerson | bool | bool | false | Show avatars and display names for other participants |
ShowAvatarsInSingleChat | bool | bool | false | Show avatars even when IsMultiPerson = false |
| Property | MAUI Type | Blazor Type | Default | Description |
|---|
MyBubbleColor | Color | string | #DCF8C6 | Local user bubble background |
MyTextColor | Color | string | Black | Local user text color |
OtherBubbleColor | Color | string | White | Default other-user bubble background |
OtherTextColor | Color | string | Black | Other-user text color |
ChatBackgroundColor | Color? | string? | null | Background color behind the messages area |
| Property | MAUI Type | Blazor Type | Default | Description |
|---|
BubbleFontSize | double | — | 15 | Font size for message bubble text (MAUI only) |
BubbleFontFamily | string? | — | null | Font family for message bubble text (MAUI only) |
TimestampFontSize | double | — | 11 | Font size for timestamp labels (MAUI only) |
BubbleCornerRadius | double | — | 18 | Corner radius for message bubbles. The “tail” corner on the last message in a group remains at 4. (MAUI only) |
| Property | MAUI Type | Blazor Type | Default | Description |
|---|
PlaceholderText | string | string | "Type a message..." | Input field placeholder text |
SendButtonText | string | string | "Send" | Send button label |
SendButtonBackgroundColor | Color | — | #007AFF | Send button background color (MAUI only) |
SendButtonTextColor | Color | — | White | Send button text color (MAUI only) |
InputBarBackgroundColor | Color | — | #F5F5F5 | Input bar background color (MAUI only) |
InputBarBorderColor | Color | — | #E0E0E0 | Input bar top separator/border color (MAUI only) |
IsInputBarVisible | bool | bool | true | Show/hide the entire input bar |
EntryText | string | — | "" | Get/set the current input text (MAUI only) |
| Property | MAUI Type | Blazor Type | Default | Description |
|---|
ShowTypingIndicator | bool | bool | true | Enable/disable typing indicator rendering |
TypingParticipants | IList<ChatParticipant>? | IList<ChatParticipant>? | null | Currently typing participants |
| Property | MAUI Type | Blazor Type | Default | Description |
|---|
ScrollToFirstUnread | bool | bool | false | Scroll to first unread on load (instead of end) |
FirstUnreadMessageId | string? | string? | null | ID of the message to scroll to |
| Property | Type | Default | Description |
|---|
ToolItems | IList<FabMenuItem>? | null | Items in the tools FAB menu |
ToolsIcon | ImageSource? | null | Icon for the tools button |
ToolsText | string? | null | Text label for the tools button |
ToolsFabBackgroundColor | Color | #007AFF | Tools button background color |
| Property | Type | Default | Description |
|---|
BubbleToolItems | IList<FabMenuItem>? | null | Default per-message tool actions |
BubbleToolItemTappedCommand | ICommand | null | Centralized handler (param: ChatBubbleToolContext) |
MessageTappedCommand | ICommand | null | Fires when a bubble is tapped (param: ChatMessage) |
| Property | Type | Default | Description |
|---|
MessageTemplate | DataTemplate? | null | Single template applied to all messages |
MessageTemplateSelector | DataTemplateSelector? | null | Per-message-type template routing |
| Property | Type | Default | Description |
|---|
UseFeedback | bool | true | Enable haptic/audio feedback on interactions |
MAUI (ICommand) | Blazor (EventCallback) | Parameter | Description |
|---|
SendCommand | EventCallback<string> | Trimmed text string | User taps Send or presses Enter |
AttachImageCommand | EventCallback | — | User taps the attach (+) button |
LoadMoreCommand | EventCallback | — | User scrolls near top (MAUI: auto, Blazor: button) |
MessageTappedCommand | EventCallback<ChatMessage> | ChatMessage | User taps a message bubble |
BubbleToolItemTappedCommand | — | ChatBubbleToolContext | User taps a bubble tool item (MAUI only) |
| Event | EventArgs Type | Description |
|---|
MessageTapped | ChatMessage | Fired when a message bubble is tapped |
BubbleToolItemTapped | ChatBubbleToolContext | Fired when a bubble tool is tapped |
| Method | Signature | Description |
|---|
ScrollToEnd | void ScrollToEnd(bool animate = false) | Scroll to the latest message |
ScrollToMessage | void ScrollToMessage(string messageId, bool animate = true) | Scroll to a specific message by ID |
SubmitEntry | void SubmitEntry() | Programmatically submit current input text |
| Property | Type | Default | Description |
|---|
Id | string | Auto GUID | Unique message identifier |
Text | string? | null | Message text content |
ImageUrl | string? | null | Image URL (mutually exclusive with text rendering) |
SenderId | string | "" | ID matching a ChatParticipant.Id |
Timestamp | DateTimeOffset | DateTimeOffset.Now | When the message was sent |
IsFromMe | bool | false | Whether this is from the local user (right-aligned) |
Identifier | string? | null | User-defined identifier for server correlation |
DateSent | DateTimeOffset? | null | Send confirmation timestamp — null renders at 50% opacity for IsFromMe messages (supports offline/background send) |
Acknowledgements | List<Acknowledgement>? | null | Emoji reaction badges |
ToolItems | IList<FabMenuItem>? | null | Per-message tool overrides (MAUI only) |
| Property | MAUI Type | Blazor Type | Description |
|---|
Id | string | string | Unique ID (matches ChatMessage.SenderId) |
DisplayName | string | string | Name shown above bubbles in multi-person mode |
Avatar | ImageSource? | — | Avatar image (MAUI only) |
AvatarUrl | — | string? | Avatar URL (Blazor only) |
BubbleColor | Color? | string? | Per-participant bubble color override |
| Property | Type | Description |
|---|
Glyph | string? | Emoji or character (e.g., ”👍”, “❤️”) |
UserId | string | ID of the user who reacted |
Timestamp | DateTime | When the reaction was added |
| Property | Type | Description |
|---|
Message | ChatMessage | The message the tool was invoked on |
Item | FabMenuItem | The specific tool item that was tapped |
Base class for input bar tools that need ChatView access. Inherit this instead of manually implementing IChatEntryTool on a FabMenuItem.
public abstract class ChatEntryTool : FabMenuItem, IChatEntryTool
protected ChatView? ChatView { get; private set; }
// Attach/Detach called automatically by ChatView when added to ToolItems
Built-in tools using this base: SpeechToTextTool
Base class for self-contained bubble tools that act on a message. The Message property is automatically populated when the bubble tool menu opens.
public abstract class ChatBubbleTool : FabMenuItem
protected ChatMessage? Message { get; } // Auto-populated via CommandParameter
Built-in tools using this base: CopyBubbleTool, TextToSpeechBubbleTool
The underlying interface that ChatEntryTool implements. You can implement this directly if you cannot inherit from ChatEntryTool:
public interface IChatEntryTool
void Attach(ChatView chatView);
Called automatically when the tool is added to ToolItems.
When UseFeedback = true, these events are fired for haptic/audio feedback:
| Event Name | Trigger | Args |
|---|
MessageSent | User sends a message | ChatMessage |
MessageReceived | New incoming message | ChatMessage |
MessageTapped | Bubble tapped | ChatMessage |
AttachImage | Attach button tapped | — |
ToolItemTapped | Input tool FAB item tapped | FabMenuItem |
BubbleToolItemTapped | Bubble tool item tapped | ChatBubbleToolContext |
Static utility methods used by both platforms:
| Method | Description |
|---|
IsNewGroup(current, previous) | Returns true if sender changes or timestamp minute differs |
FormatTimestamp(timestamp) | Returns "h:mm tt" (today) or "MMM d, h:mm tt" (other days) |
GetInitials(displayName) | Returns first+last initials, single initial, or ”?” |