CometChatReactions component renders emoji reaction pills on a message bubbleās footer area. It dynamically calculates how many pills to show based on the parent container width and provides overflow handling via a ā+Nā button with a popover list.
Overview
The Reactions component provides interactive emoji reaction display:- Dynamic Layout: Automatically adjusts visible reaction count based on container width
- Overflow Handling: Shows a ā+Nā button when reactions exceed available space, with a popover list for hidden reactions
- Toggle Support: Clicking a reaction pill emits an event to add or remove the reaction
- Hover Tooltips: Displays reaction info tooltips showing who reacted with each emoji
- Alignment Aware: Adjusts popover placement based on message bubble alignment (left/right)
- Responsive: Adapts popover placement for mobile viewports
- Keyboard Accessible: Full keyboard support for navigating and toggling reactions
Live Preview ā default reactions preview.
Open in Storybook ā
Basic Usage
Simple Reactions Display
With Custom Request Builder and Overflow Handling
Properties
| Property | Type | Default | Description |
|---|---|---|---|
message | CometChat.BaseMessage | required | The message object containing reactions to display |
alignment | MessageBubbleAlignment | MessageBubbleAlignment.left | Alignment of the message bubble (left or right). Used to determine popover placement for the overflow list |
reactionsRequestBuilder | CometChat.ReactionsRequestBuilder | undefined | Optional custom reactions request builder for fetching reaction details |
hoverDebounceTime | number | 500 | Debounce time in milliseconds for hover tooltips |
Events
| Event | Payload Type | Description |
|---|---|---|
reactionClick | { reaction: CometChat.ReactionCount; message: CometChat.BaseMessage } | Emitted when a reaction pill is clicked. Use this to toggle (add/remove) the reaction |
reactionListItemClick | { reaction: CometChat.Reaction; message: CometChat.BaseMessage } | Emitted when a reaction list item is clicked from the overflow popover |
Customization
CSS Variables
The Reactions component uses BEM-style CSS classes that can be customized:Theming
The component adapts to light and dark themes through CSS variables:Accessibility
Keyboard Navigation
| Key | Action |
|---|---|
Tab | Move focus between reaction pills and the more button |
Enter / Space | Toggle the focused reaction (add or remove) |
Enter / Space on ā+Nā | Open the overflow reaction list popover |
ARIA Attributes
| Element | Attribute | Value | Description |
|---|---|---|---|
| Reaction pill | role | "button" | Indicates the pill is interactive |
| Reaction pill | aria-label | Dynamic | Describes emoji, count, and whether the current user reacted |
| Reaction pill | tabindex | "0" | Makes the pill focusable |
| More button | role | "button" | Indicates the overflow button is interactive |
| More button | aria-label | Dynamic | Describes the number of hidden reactions |
Screen Reader Support
- Reaction pills announce the emoji, count, and user reaction status
- Toggling a reaction announces whether it was added or removed via a live region
- The overflow button announces how many additional reactions are hidden
Related Components
- CometChatReactionList - Displays the full list of users who reacted, used in the overflow popover
- CometChatReactionInfo - Tooltip showing who reacted with a specific emoji
- CometChatMessageBubble - Parent component that hosts reactions in its footer
- CometChatPopover - Used for the overflow reaction list popover