Skip to content
Merged
4 changes: 4 additions & 0 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,8 @@
]
},
"ui-kit/react/components/thread-header",
"ui-kit/react/components/pinned-messages",
"ui-kit/react/components/saved-messages",
"ui-kit/react/components/message-information",
"ui-kit/react/components/reactions",
"ui-kit/react/components/reaction-list",
Expand Down Expand Up @@ -612,6 +614,8 @@
"ui-kit/react/guide-block-unblock-user",
"ui-kit/react/guide-group-chat-setup",
"ui-kit/react/guide-threaded-messages",
"ui-kit/react/guide-pin-and-save-messages",
"ui-kit/react/guide-custom-text-formatter",
"ui-kit/react/guide-search-messages",
"ui-kit/react/guide-new-chat-creation",
"ui-kit/react/guide-message-privately"
Expand Down
2 changes: 2 additions & 0 deletions ui-kit/react/components-overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@

## Architecture

The UI Kit provides a set of independent, composable React components that wire together into complete chat layouts. A typical two-panel layout uses four core components:

Check warning on line 8 in ui-kit/react/components-overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components-overview.mdx#L8

Did you really mean 'composable'?

- **CometChatConversations** — sidebar listing recent conversations
- **CometChatMessageHeader** — toolbar showing avatar, name, status, and typing indicator
- **CometChatMessageList** — scrollable message feed with reactions, receipts, and threads

Check warning on line 12 in ui-kit/react/components-overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components-overview.mdx#L12

Did you really mean 'scrollable'?
- **CometChatMessageComposer** — rich text input with attachments, mentions, and voice notes

Data flow: selecting a conversation yields a `CometChat.User` or `CometChat.Group` object. Pass that object as a prop (`user` or `group`) to the message components. They handle SDK calls internally — the composer sends messages, the list receives them via real-time listeners.
Expand Down Expand Up @@ -63,7 +63,7 @@

## Compound Composition

For full layout control, use the compound pattern. Each feature component is a namespace with sub-components:

Check warning on line 66 in ui-kit/react/components-overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components-overview.mdx#L66

Did you really mean 'namespace'?

```tsx
<CometChatConversations.Root onItemClick={handleClick}>
Expand Down Expand Up @@ -111,7 +111,7 @@

| Component | Purpose | Page |
| --- | --- | --- |
| `CometChatConversations` | Scrollable list of recent conversations with real-time updates | [Conversations](/ui-kit/react/components/conversations) |

Check warning on line 114 in ui-kit/react/components-overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components-overview.mdx#L114

Did you really mean 'Scrollable'?
| `CometChatUsers` | Searchable list of users with selection support | [Users](/ui-kit/react/components/users) |
| `CometChatGroups` | Searchable list of groups with selection support | [Groups](/ui-kit/react/components/groups) |
| `CometChatGroupMembers` | List of group members with role-based actions | [Group Members](/ui-kit/react/components/group-members) |
Expand All @@ -121,10 +121,12 @@
| Component | Purpose | Page |
| --- | --- | --- |
| `CometChatMessageHeader` | Toolbar with avatar, name, status, typing indicator, and call buttons | [Message Header](/ui-kit/react/components/message-header) |
| `CometChatMessageList` | Scrollable message feed with plugin-based bubble rendering | [Message List](/ui-kit/react/components/message-list) |

Check warning on line 124 in ui-kit/react/components-overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components-overview.mdx#L124

Did you really mean 'Scrollable'?
| `CometChatMessageComposer` | Rich text input with attachments, emoji, voice recording, and formatting | [Message Composer](/ui-kit/react/components/message-composer) |
| `CometChatMessageBubble` | Message bubble container with alignment, receipts, options, and reactions | [Message Bubble](/ui-kit/react/components/message-bubble) |
| `CometChatThreadHeader` | Parent message bubble and reply count for threaded conversations | [Thread Header](/ui-kit/react/components/thread-header) |
| `CometChatPinnedMessages` | Panel of the messages pinned in a conversation | [Pinned Messages](/ui-kit/react/components/pinned-messages) |
| `CometChatSavedMessages` | The current user's saved messages across all conversations | [Saved Messages](/ui-kit/react/components/saved-messages) |
| `CometChatMessageInformation` | Message delivery and read receipt details panel | [Message Information](/ui-kit/react/components/message-information) |
| `CometChatReactions` | Reaction chips bar with reactor list popover | [Reactions](/ui-kit/react/components/reactions) |
| `CometChatReactionList` | Full reactor list with tabs and pagination | [Reaction List](/ui-kit/react/components/reaction-list) |
Expand All @@ -137,8 +139,8 @@
| Component | Message Type | Purpose | Page |
| --- | --- | --- | --- |
| `CometChatTextBubble` | `text` | Formatted text with mentions, URLs, markdown, and link previews | [Text Bubble](/ui-kit/react/components/text-bubble) |
| `CometChatImagesBubble` | `image` | Image grid with captions, batch grouping, and a fullscreen gallery | [Image Bubble](/ui-kit/react/components/image-bubble) |

Check warning on line 142 in ui-kit/react/components-overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components-overview.mdx#L142

Did you really mean 'fullscreen'?
| `CometChatVideosBubble` | `video` | Video grid with poster thumbnails, duration, and a fullscreen viewer | [Video Bubble](/ui-kit/react/components/video-bubble) |

Check warning on line 143 in ui-kit/react/components-overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components-overview.mdx#L143

Did you really mean 'fullscreen'?
| `CometChatAudiosBubble` | `audio` | Stacked audio player cards with seek, duration, and download | [Audio Bubble](/ui-kit/react/components/audio-bubble) |
| `CometChatVoiceNoteBubble` | `audio` (`voice_note`) | Waveform player for recorded voice notes | [Voice Note Bubble](/ui-kit/react/components/voice-note-bubble) |
| `CometChatFilesBubble` | `file` | Stacked file cards with type icons, size, and download | [File Bubble](/ui-kit/react/components/file-bubble) |
Expand All @@ -158,7 +160,7 @@
| `CometChatCallButtons` | Voice and video call initiation buttons | [Call Buttons](/ui-kit/react/components/call-buttons) |
| `CometChatIncomingCall` | Incoming call notification with accept/decline | [Incoming Call](/ui-kit/react/components/incoming-call) |
| `CometChatOutgoingCall` | Outgoing call screen with cancel control | [Outgoing Call](/ui-kit/react/components/outgoing-call) |
| `CometChatCallLogs` | Scrollable list of call history | [Call Logs](/ui-kit/react/components/call-logs) |

Check warning on line 163 in ui-kit/react/components-overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components-overview.mdx#L163

Did you really mean 'Scrollable'?

### Search and AI

Expand Down
29 changes: 29 additions & 0 deletions ui-kit/react/components/conversations.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Conversations"
description: "Scrollable list of recent one-on-one and group conversations for the logged-in user with real-time updates."

Check warning on line 3 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L3

Did you really mean 'Scrollable'?
---

<Accordion title="AI Integration Quick Reference">
Expand Down Expand Up @@ -47,11 +47,12 @@
"onSearchBarClicked": "() => void"
},
"visibility": {
"hideReceipts": { "type": "boolean", "default": false },

Check warning on line 50 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L50

Did you really mean 'hideReceipts'?
"hideUserStatus": { "type": "boolean", "default": false },
"hideGroupType": { "type": "boolean", "default": false },
"hideUnreadCount": { "type": "boolean", "default": false },
"hideDeleteConversation": { "type": "boolean", "default": false },
"hidePinConversation": { "type": "boolean", "default": false },
"showSearchBar": { "type": "boolean", "default": true },
"showScrollbar": { "type": "boolean", "default": false }
},
Expand All @@ -60,7 +61,7 @@
"customSoundForMessages": { "type": "string", "default": "built-in" }
},
"selection": {
"selectionMode": {

Check warning on line 64 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L64

Did you really mean 'selectionMode'?
"type": "CometChatConversationsSelectionMode",
"values": ["'none'", "'single'", "'multiple'"],
"default": "'none'"
Expand All @@ -85,6 +86,11 @@
"name": "ui:conversation/deleted",
"payload": "{ conversation: CometChat.Conversation }",
"description": "Conversation deleted from list"
},
{
"name": "ui:conversation/pin-changed",
"payload": "{ conversation: CometChat.Conversation, pinned: boolean }",
"description": "Emitted by the row's Pin/Unpin action; also received to keep the list ordering in sync"
}
],
"sdkListeners": [
Expand Down Expand Up @@ -155,6 +161,7 @@
- Real-time updates (new messages, typing indicators, presence changes)
- Search filtering
- Selection mode (single/multiple)
- Pin conversation — pin a chat to the top of the list, with a pin indicator on the row

---

Expand Down Expand Up @@ -294,9 +301,9 @@
| Prop | Signature | Fires when |
| --- | --- | --- |
| `onItemClick` | `(conversation: CometChat.Conversation) => void` | User clicks a conversation item |
| `onSelect` | `(conversation: CometChat.Conversation, selected: boolean) => void` | Conversation selected/deselected (selection mode) |

Check warning on line 304 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L304

Did you really mean 'onSelect'?
| `onError` | `((error: CometChat.CometChatException) => void) \| null` | SDK error occurs |

Check warning on line 305 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L305

Did you really mean 'onError'?
| `onEmpty` | `() => void` | List is empty after initial fetch |

Check warning on line 306 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L306

Did you really mean 'onEmpty'?
| `onSearchBarClicked` | `() => void` | Search bar is clicked (makes input read-only) |

### Events Emitted
Expand All @@ -306,6 +313,7 @@
| Event | Payload | Fires when |
| --- | --- | --- |
| `ui:conversation/deleted` | `{ conversation }` | User deletes a conversation |
| `ui:conversation/pin-changed` | `{ conversation, pinned }` | User pins or unpins a conversation from the row menu |

### Events Received

Expand All @@ -320,6 +328,7 @@
| `ui:conversation/updated` | `{ conversation }` | Updates the conversation in the list |
| `ui:conversation/read` | `{ conversationId }` | Resets unread count by conversation ID |
| `ui:conversation/deleted` | `{ conversation }` | Removes the conversation from the list |
| `ui:conversation/pin-changed` | `{ conversation, pinned }` | Optimistically re-orders the list when a chat is pinned/unpinned |
| `ui:group/created` | `{ group }` | Adds the new group conversation to the list |
| `ui:group/deleted` | `{ group }` | Removes the group conversation from the list |
| `ui:group/left` | `{ group }` | Removes the group conversation from the list |
Expand All @@ -342,14 +351,22 @@

## Customization

### Pin Conversation

When pinning is enabled for your app (the `features.ux.conversations.pinned.enabled` app setting), each row's context menu carries a **Pin / Unpin** action, and pinned chats sort to the top of the list with a pin indicator on the row. This is wired out of the box — no props required.

Pins are personal to each user, and your app can cap how many a user may pin through the `features.ux.conversations.pinned.limit` app setting; when a user reaches the cap, the kit shows a toast naming the limit. To remove the menu action entirely, set [`hidePinConversation`](#hidepinconversation). See [Core Features → Pin & Save](/ui-kit/react/core-features#pin-and-save-messages).

A conversation can also be **system-pinned** app-wide (even when empty). System pins always sort above user pins and cannot be unpinned from the UI.

### View Props

Use view props to replace sections of the default UI while keeping the component's behavior intact:

```tsx
<CometChatConversations
headerView={<MyCustomHeader />}

Check warning on line 368 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L368

Did you really mean 'headerView'?
itemView={(conversation) => <MyCustomItem conversation={conversation} />}

Check warning on line 369 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L369

Did you really mean 'itemView'?
emptyView={<EmptyState />}
loadingView={<Skeleton />}
errorView={<ErrorBanner />}
Expand All @@ -359,10 +376,10 @@
| Slot | Signature | Replaces |
| --- | --- | --- |
| `itemView` | `(conversation) => ReactNode` | Entire conversation row |
| `leadingView` | `(conversation) => ReactNode` | Avatar section |

Check warning on line 379 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L379

Did you really mean 'leadingView'?
| `titleView` | `(conversation) => ReactNode` | Conversation name |

Check warning on line 380 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L380

Did you really mean 'titleView'?
| `subtitleView` | `(conversation) => ReactNode` | Last message preview |

Check warning on line 381 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L381

Did you really mean 'subtitleView'?
| `trailingView` | `(conversation) => ReactNode` | Timestamp + unread badge |

Check warning on line 382 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L382

Did you really mean 'trailingView'?
| `headerView` | `ReactNode` | Header area |
| `searchView` | `ReactNode` | Search bar |
| `loadingView` | `ReactNode` | Loading shimmer |
Expand Down Expand Up @@ -679,7 +696,7 @@

let className = "conversations__trailing-view-min";
let topLabel = `${diffInMinutes}`;
let bottomLabel = diffInMinutes === 1 ? "Min ago" : "Mins ago";

Check warning on line 699 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L699

Did you really mean 'bottomLabel'?

Check warning on line 699 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L699

Did you really mean 'Mins'?

if (diffInHours >= 1 && diffInHours <= 10) {
className = "conversations__trailing-view-hour";
Expand Down Expand Up @@ -894,7 +911,7 @@
| Sub-component | Description | Props | Flat API equivalent |
| --- | --- | --- | --- |
| `Root` | Context provider and container | All Root props + `children` | — |
| `List` | Scrollable conversation list | `itemView`, `className` | `itemView` |

Check warning on line 914 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L914

Did you really mean 'Scrollable'?
| `Item` | Individual conversation row | `leadingView`, `titleView`, `subtitleView`, `trailingView`, `className` | Per-item view props |
| `Header` | Header area | `title`, `children` | `headerView` |
| `SearchBar` | Search input | `placeholder`, `onClick` | `searchView` |
Expand Down Expand Up @@ -951,7 +968,7 @@

---

### searchKeyword

Check warning on line 971 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L971

Did you really mean 'searchKeyword'?

Initial search keyword to pre-filter conversations on mount.

Expand All @@ -962,7 +979,7 @@

---

### activeConversation

Check warning on line 982 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L982

Did you really mean 'activeConversation'?

The currently active/highlighted conversation. The matching item receives an active visual state.

Expand Down Expand Up @@ -1039,6 +1056,17 @@

---

### hidePinConversation

Remove the built-in **Pin / Unpin** option from the conversation item's context menu. See [Pin Conversation](#pin-conversation) for the feature overview.

| | |
| --- | --- |
| Type | `boolean` |
| Default | `false` |

---

### showSearchBar

Whether to show the search bar. Set to `false` to hide it entirely.
Expand All @@ -1050,9 +1078,9 @@

---

### showScrollbar

Check warning on line 1081 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L1081

Did you really mean 'showScrollbar'?

Show the native scrollbar on the conversation list.

Check warning on line 1083 in ui-kit/react/components/conversations.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/conversations.mdx#L1083

Did you really mean 'scrollbar'?

| | |
| --- | --- |
Expand Down Expand Up @@ -1210,6 +1238,7 @@
| Unread badge | `.cometchat-conversations .cometchat-badge` |
| Subtitle text | `.cometchat-conversations .cometchat-conversations__subtitle-text` |
| Status indicator | `.cometchat-conversations .cometchat-status-indicator` |
| Pin indicator (pinned row) | `.cometchat-conversations__item-pin-indicator` |
| Read receipts | `.cometchat-conversations .cometchat-receipts-read` |
| Active item | `.cometchat-conversations__list-item-active .cometchat-list-item` |
| Typing indicator | `.cometchat-conversations__subtitle-typing` |
Expand Down
28 changes: 28 additions & 0 deletions ui-kit/react/components/message-bubble.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@
<CometChatMessageBubble
message={message}
alignment={alignment}
contentView={

Check warning on line 94 in ui-kit/react/components/message-bubble.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-bubble.mdx#L94

Did you really mean 'contentView'?
<CometChatTextBubble message={message} isSentByMe={alignment === "right"} />
}
/>
Expand All @@ -114,14 +114,39 @@
| Receipts | Outgoing + `!hideReceipts` | `message.getReadAt()` / `getDeliveredAt()` |
| Edited indicator | `message.getEditedAt()` truthy | "(edited)" text |
| Thread replies | `message.getReplyCount() > 0` + `!hideThreadView` | Reply count button |
| Pinned indicator | `message.getPinnedAt()` is set | Pin icon in the status-info area |
| Saved indicator | `message.getSavedAt()` is set | Bookmark icon in the status-info area |
| Context menu | `options.length > 0` + `!disableInteraction` | Hover/click |

## Pinned and Saved Indicators

When a message is pinned (visible to everyone in the conversation) or saved (personal to the current user), the bubble shows a small indicator in its status-info area alongside the timestamp — a pin icon for pinned, a bookmark icon for saved. A message can carry both at once.

This is automatic: the bubble derives each indicator from the message's own state (`getPinnedAt()` / `getSavedAt()`), and it updates live as messages are pinned, unpinned, saved, and unsaved. No props are required.

<Info>
**Live Preview** — a bubble carrying both the pinned and saved indicators.

[Open in Storybook ↗](https://storybook.cometchat.io/react/?path=/story/components-bubbles-message-bubble--pinned-and-saved)
</Info>

<iframe
src="https://storybook.cometchat.io/react/iframe.html?id=components-bubbles-message-bubble--pinned-and-saved&viewMode=story&shortcuts=false&singleStory=true"
className="w-full rounded-xl"
loading="lazy"
style={{height: "250px", border: "1px solid #e0e0e0"}}
title="CometChat Message Bubble — Pinned & Saved"
allow="clipboard-write"
></iframe>

To restyle or hide the indicators, target their selectors (see [CSS Selectors](#css-selectors)). To learn how users pin and save messages, see the [Pin & Save Messages guide](/ui-kit/react/guide-pin-and-save-messages).

## GlobalConfig Integration

`hideReceipts` reads from `GlobalConfigContext` when the prop is not explicitly set:

```tsx lines
<GlobalConfigProvider config={{ hideReceipts: true }}>

Check warning on line 149 in ui-kit/react/components/message-bubble.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-bubble.mdx#L149

Did you really mean 'hideReceipts'?
{/* All bubbles hide receipts unless overridden */}
<CometChatMessageBubble hideReceipts={false} ... /> {/* This one shows receipts */}
</GlobalConfigProvider>
Expand Down Expand Up @@ -170,7 +195,7 @@

---

### hideAvatar / hideSenderName / hideTimestamp / hideThreadView

Check warning on line 198 in ui-kit/react/components/message-bubble.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-bubble.mdx#L198

Did you really mean 'hideAvatar'?

Check warning on line 198 in ui-kit/react/components/message-bubble.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-bubble.mdx#L198

Did you really mean 'hideTimestamp'?

Per-bubble display controls. Not in GlobalConfig.

Expand All @@ -192,7 +217,7 @@

---

### showError

Check warning on line 220 in ui-kit/react/components/message-bubble.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-bubble.mdx#L220

Did you really mean 'showError'?

Show error receipt icon instead of normal receipts.

Expand All @@ -203,7 +228,7 @@

---

### disableInteraction

Check warning on line 231 in ui-kit/react/components/message-bubble.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-bubble.mdx#L231

Did you really mean 'disableInteraction'?

Disable hover options and keyboard interactions.

Expand Down Expand Up @@ -313,5 +338,8 @@
| Body | `.cometchat-message-bubble__body` |
| Content | `.cometchat-message-bubble__body-content-view` |
| Status info | `.cometchat-message-bubble__body-status-info-view` |
| Pin/save indicator (base) | `.cometchat-message-bubble__status-info-view-indicator` |
| Pinned indicator | `.cometchat-message-bubble__status-info-view-indicator--pinned` |
| Saved indicator | `.cometchat-message-bubble__status-info-view-indicator--saved` |
| Receipts | `.cometchat-receipts` |
| Thread button | `.cometchat-message-bubble__thread-button` |
42 changes: 41 additions & 1 deletion ui-kit/react/components/message-composer.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
}
},
"textInput": {
"initialText": { "type": "string", "default": "undefined" },

Check warning on line 32 in ui-kit/react/components/message-composer.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-composer.mdx#L32

Did you really mean 'initialText'?
"text": { "type": "string", "default": "undefined", "note": "Controlled mode — consumer owns state" },
"placeholder": { "type": "string", "default": "'Type a message...'" },
"enterKeyBehavior": {
Expand All @@ -48,7 +48,7 @@
"messageToReply": { "type": "CometChat.BaseMessage | null", "default": "null" }
},
"attachments": {
"attachmentOptions": { "type": "CometChatComposerAttachmentOption[]", "default": "undefined" },

Check warning on line 51 in ui-kit/react/components/message-composer.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-composer.mdx#L51

Did you really mean 'attachmentOptions'?
"hideAttachmentOptions": { "type": "CometChatAttachmentHideOptions", "default": "undefined" },
"showAttachmentPreview": { "type": "boolean", "default": true },
"enableMultipleAttachments": { "type": "boolean", "default": true, "note": "Enable multi-attachment staging tray and batch send. Set false for legacy single-select behavior." },
Expand Down Expand Up @@ -89,6 +89,7 @@
"emojiButtonIconView": "ReactNode",
"sendButtonView": "ReactNode",
"auxiliaryButtonView": "ReactNode",
"toolbarTrailingView": "ReactNode",
"headerView": "ReactNode"
},
"callbacks": {
Expand Down Expand Up @@ -279,12 +280,12 @@

Each staged file is a tile with its own upload lifecycle:

| State | Meaning | Tile UI | Retryable |

Check warning on line 283 in ui-kit/react/components/message-composer.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-composer.mdx#L283

Did you really mean 'Retryable'?
| --- | --- | --- | --- |
| `uploading` | Bytes are transferring | Progress ring with percentage | — |
| `success` | Uploaded, ready to send | Thumbnail (image/video) or file card | — |
| `failed` | Transfer failed (transient — e.g. network drop) | Retry control on the tile | Yes |
| `rejected` | File not accepted (see below) | Rejected marker + hover tooltip | No |

Check warning on line 288 in ui-kit/react/components/message-composer.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-composer.mdx#L288

Did you really mean 'tooltip'?

This mirrors the underlying SDK upload semantics: **failed** uploads are transient and can be retried, while **rejected** files must be swapped out.

Expand All @@ -295,15 +296,15 @@

### Why a file is rejected

A rejected tile explains itself on hover via a tooltip:

Check warning on line 299 in ui-kit/react/components/message-composer.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-composer.mdx#L299

Did you really mean 'tooltip'?

| Reason | What the tooltip conveys |

Check warning on line 301 in ui-kit/react/components/message-composer.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-composer.mdx#L301

Did you really mean 'tooltip'?
| --- | --- |
| File exceeds the maximum size | The file is too large, including the configured size limit in MB. |
| File type not permitted | The file's type is blocked by your app's role-based file-type permissions (RBAC/SBAC). |

<Note>
The per-file **size** and **type** rejections surface on the individual tile (with the hover tooltip above). The **count** limit is different — it rejects the whole over-limit pick at once and surfaces as a validation banner, not a per-tile tooltip.

Check warning on line 307 in ui-kit/react/components/message-composer.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-composer.mdx#L307

Did you really mean 'tooltip'?

Check warning on line 307 in ui-kit/react/components/message-composer.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-composer.mdx#L307

Did you really mean 'tooltip'?
</Note>

### Batch send
Expand Down Expand Up @@ -336,8 +337,8 @@

| Event | Payload | Fires when |
| --- | --- | --- |
| `ui:message/sent` | `{ message, status }` | Message sent (inprogress → success/error) |

Check warning on line 340 in ui-kit/react/components/message-composer.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-composer.mdx#L340

Did you really mean 'inprogress'?
| `ui:compose/edit` | `{ message, status }` | Message edit (inprogress → success/error/cancelled) |

Check warning on line 341 in ui-kit/react/components/message-composer.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-composer.mdx#L341

Did you really mean 'inprogress'?
| `ui:compose/reply` | `{ message, status }` | Reply context set/cleared |
| `ui:compose/recording-started` | `{ composerInstanceId }` | Voice recording started (stops other instances) |

Expand Down Expand Up @@ -383,9 +384,10 @@
| `emojiButtonIconView` | `ReactNode` | Icon inside the emoji button |
| `sendButtonView` | `ReactNode` | Content inside the send button |
| `auxiliaryButtonView` | `ReactNode` | Additional buttons in the actions area |
| `toolbarTrailingView` | `ReactNode` | Content at the trailing end of the rich-text formatting toolbar |
| `headerView` | `ReactNode` | Header area above the input |

#### attachmentOptions

Check warning on line 390 in ui-kit/react/components/message-composer.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-composer.mdx#L390

Did you really mean 'attachmentOptions'?

Override the default attachment options.

Expand Down Expand Up @@ -436,6 +438,33 @@
}
```

#### toolbarTrailingView

Render a node at the trailing end of the rich-text formatting toolbar, after the built-in buttons and an auto-inserted separator. This is the place for a button that drives a custom formatter from `textFormatters` — for example, a color button that wraps the selected text.

```tsx
import { CometChatMessageComposer } from "@cometchat/chat-uikit-react";
import { ColorFormatter } from "./formatters/ColorFormatter";
import { ColorButton } from "./components/ColorButton";

function ComposerWithColor({ chatUser }: { chatUser: CometChat.User }) {
return (
<CometChatMessageComposer
user={chatUser}
enableRichTextEditor
textFormatters={[new ColorFormatter()]}
toolbarTrailingView={<ColorButton />}
/>
);
}
```

<Note>
The toolbar (and therefore the trailing view) only renders when the rich-text editor is enabled — pass `enableRichTextEditor`. For a complete walkthrough that builds the button and formatter, see the [Custom Text Formatter guide](/ui-kit/react/guide-custom-text-formatter).

Check warning on line 463 in ui-kit/react/components/message-composer.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-composer.mdx#L463

Did you really mean 'walkthrough'?
</Note>

Your node is rendered as-is with **no wrapper class** — style it yourself. It sits inside `.cometchat-formatting-toolbar`, after an auto-inserted `.cometchat-formatting-toolbar__separator`.

#### sendButtonView

Replace the send button.
Expand Down Expand Up @@ -513,7 +542,7 @@
All props are optional unless noted.

<Note>
View slot props (`headerView`, `sendButtonView`, `auxiliaryButtonView`, `attachmentButtonIconView`, `voiceRecordingButtonIconView`, `emojiButtonIconView`) are convenience props available only on the flat API. In compound composition mode, use the corresponding sub-components directly or pass children to them.
View slot props (`headerView`, `sendButtonView`, `auxiliaryButtonView`, `toolbarTrailingView`, `attachmentButtonIconView`, `voiceRecordingButtonIconView`, `emojiButtonIconView`) are convenience props available only on the flat API. In compound composition mode, use the corresponding sub-components directly or pass children to them.
</Note>

---
Expand Down Expand Up @@ -1064,6 +1093,17 @@

---

#### toolbarTrailingView

Custom ReactNode rendered at the trailing end of the rich-text formatting toolbar, after the built-in buttons and an auto-inserted separator. Only shown when the rich-text editor and its toolbar are enabled. Intended for a button that drives a custom formatter from `textFormatters`. See the [Custom Text Formatter guide](/ui-kit/react/guide-custom-text-formatter).

| | |
| --- | --- |
| Type | `ReactNode` |
| Default | `undefined` |

---

#### headerView

Custom ReactNode for the header area above the input (replaces edit/reply preview + validation).
Expand Down
27 changes: 26 additions & 1 deletion ui-kit/react/components/message-header.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
"onSummaryClick": "() => void",
"onVoiceCallClick": "(entity: CometChat.User | CometChat.Group) => void",
"onVideoCallClick": "(entity: CometChat.User | CometChat.Group) => void",
"onPinnedMessagesClicked": "() => void",
"onError": "((error: CometChat.CometChatException) => void) | null"
},
"visibility": {
Expand All @@ -57,7 +58,8 @@
"showConversationSummaryButton": { "type": "boolean", "default": false },
"enableAutoSummaryGeneration": { "type": "boolean", "default": false },
"hideVoiceCallButton": { "type": "boolean", "default": false },
"hideVideoCallButton": { "type": "boolean", "default": false }
"hideVideoCallButton": { "type": "boolean", "default": false },
"hidePinnedMessagesOption": { "type": "boolean", "default": false }
},
"viewSlots": {
"leadingView": "ReactNode",
Expand Down Expand Up @@ -202,7 +204,7 @@
<CometChatMessageHeader
user={user}
onItemClick={(entity) => openDetails(entity)}
onBack={() => navigateBack()}

Check warning on line 207 in ui-kit/react/components/message-header.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-header.mdx#L207

Did you really mean 'onBack'?
/>
);
}
Expand Down Expand Up @@ -300,7 +302,8 @@
| `onSummaryClick` | `() => void` | User clicks the AI summary button |
| `onVoiceCallClick` | `(entity: CometChat.User \| CometChat.Group) => void` | User clicks the voice call button |
| `onVideoCallClick` | `(entity: CometChat.User \| CometChat.Group) => void` | User clicks the video call button |
| `onPinnedMessagesClicked` | `() => void` | User clicks "Pinned messages" in the overflow menu |
| `onError` | `((error: CometChat.CometChatException) => void) \| null` | SDK error occurs |

Check warning on line 306 in ui-kit/react/components/message-header.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-header.mdx#L306

Did you really mean 'onError'?

### Events Emitted

Expand Down Expand Up @@ -352,7 +355,7 @@

| Slot | Type | Replaces |
| --- | --- | --- |
| `leadingView` | `ReactNode` | Avatar area |

Check warning on line 358 in ui-kit/react/components/message-header.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-header.mdx#L358

Did you really mean 'leadingView'?
| `titleView` | `ReactNode` | Display name |
| `subtitleView` | `ReactNode` | Status / typing indicator |
| `trailingView` | `ReactNode` | Call buttons + overflow menu |
Expand All @@ -360,7 +363,7 @@

#### Custom item layout

Combine `leadingView`, `titleView`, and `subtitleView` to fully replace the header's item area.

Check warning on line 366 in ui-kit/react/components/message-header.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-header.mdx#L366

Did you really mean 'titleView'?

Check warning on line 366 in ui-kit/react/components/message-header.mdx

View check run for this annotation

Mintlify / Mintlify Validation (cometchat-22654f5b) - vale-spellcheck

ui-kit/react/components/message-header.mdx#L366

Did you really mean 'subtitleView'?

<Frame>
<img src="/images/0a3d38de-messages_header_list_item_view_web_screens-024979a70f09486b76e913633bfc9e81.png" />
Expand Down Expand Up @@ -676,6 +679,17 @@

---

### hidePinnedMessagesOption

Remove the "Pinned messages" entry from the overflow menu. The entry only appears when pinning is enabled for your app (the `features.ux.messages.pinned.enabled` app setting) **and** `onPinnedMessagesClicked` is provided; use this prop to hide it even then.

| | |
| --- | --- |
| Type | `boolean` |
| Default | `false` |

---

### callSettingsBuilder

Custom call settings builder for ongoing call sessions. Passed to the OngoingCall component when a call is started. Falls back to `GlobalConfig.callSettingsBuilder`, then the built-in default.
Expand Down Expand Up @@ -764,6 +778,17 @@

---

### onPinnedMessagesClicked

Callback when the user clicks "Pinned messages" in the overflow menu. Provide it to open a [`CometChatPinnedMessages`](/ui-kit/react/components/pinned-messages) panel for the current conversation. The menu entry only appears when pinning is enabled for your app (the `features.ux.messages.pinned.enabled` app setting) and this callback is set.

| | |
| --- | --- |
| Type | `() => void` |
| Default | `undefined` |

---

### onError

Callback when an SDK error occurs during call operations or other internal processes.
Expand Down
Loading