The CometChatStickerBubble component is a presentational Angular component that renders sticker messages as images within the chat interface. It extracts the sticker image URL from the message’s metadata or custom data using a priority-based fallback chain and displays it with proper sizing, alignment, and accessibility support.
Overview
The Sticker Bubble component handles sticker message rendering while maintaining visual consistency with the design system:
Automatic URL Extraction : Extracts the sticker image URL from multiple metadata locations using a priority chain
Alignment Variants : Supports incoming (left) and outgoing (right) message styling
Constrained Sizing : Sticker images are capped at 150×150px with object-fit: contain
Graceful Fallbacks : Handles missing URLs, null messages, and metadata errors without crashing
Localized Alt Text : Uses the conversation_subtitle_sticker localization key for accessibility
BEM CSS : Follows Block Element Modifier naming convention with CSS variable theming
OnPush Change Detection : Optimal performance with minimal re-renders
Basic Usage
Simple Sticker Bubble (Incoming)
import { Component } from '@angular/core' ;
import { CometChat } from '@cometchat/chat-sdk-javascript' ;
import { CometChatStickerBubbleComponent } from '@cometchat/chat-uikit-angular' ;
@ Component ({
selector: 'app-chat-message' ,
standalone: true ,
imports: [ CometChatStickerBubbleComponent ],
template: `
<cometchat-sticker-bubble
[message]="stickerMessage">
</cometchat-sticker-bubble>
`
})
export class ChatMessageComponent {
stickerMessage !: CometChat . CustomMessage ;
}
See all 17 lines
Outgoing Sticker Message
import { Component } from '@angular/core' ;
import { CometChat } from '@cometchat/chat-sdk-javascript' ;
import {
CometChatStickerBubbleComponent ,
MessageBubbleAlignment
} from '@cometchat/chat-uikit-angular' ;
@ Component ({
selector: 'app-chat-message' ,
standalone: true ,
imports: [ CometChatStickerBubbleComponent ],
template: `
<cometchat-sticker-bubble
[message]="stickerMessage"
[alignment]="MessageBubbleAlignment.right">
</cometchat-sticker-bubble>
`
})
export class ChatMessageComponent {
stickerMessage !: CometChat . CustomMessage ;
MessageBubbleAlignment = MessageBubbleAlignment ;
}
See all 22 lines
Incoming vs Outgoing Messages
import { Component } from '@angular/core' ;
import { CometChat } from '@cometchat/chat-sdk-javascript' ;
import {
CometChatStickerBubbleComponent ,
MessageBubbleAlignment
} from '@cometchat/chat-uikit-angular' ;
@ Component ({
selector: 'app-message-list' ,
standalone: true ,
imports: [ CometChatStickerBubbleComponent ],
template: `
<!-- Incoming sticker (left-aligned) -->
<cometchat-sticker-bubble
[message]="incomingSticker"
[alignment]="MessageBubbleAlignment.left">
</cometchat-sticker-bubble>
<!-- Outgoing sticker (right-aligned) -->
<cometchat-sticker-bubble
[message]="outgoingSticker"
[alignment]="MessageBubbleAlignment.right">
</cometchat-sticker-bubble>
`
})
export class MessageListComponent {
incomingSticker !: CometChat . CustomMessage ;
outgoingSticker !: CometChat . CustomMessage ;
MessageBubbleAlignment = MessageBubbleAlignment ;
}
See all 30 lines
Properties
Property Type Default Description messageCometChat.CustomMessage | nullnullThe sticker custom message object. The component extracts the sticker image URL from the message’s metadata or custom data alignmentMessageBubbleAlignmentMessageBubbleAlignment.leftBubble alignment. left for incoming/receiver messages, right for outgoing/sender messages
The component extracts the sticker image URL from the message using a priority-based fallback chain. The first location that contains a value wins:
metadata.data.sticker_url — Highest priority. Checked first via message.getMetadata().data.sticker_url
metadata.sticker_url — Second priority. Checked via message.getMetadata().sticker_url
customData.sticker_url — Final fallback. Checked via message.getCustomData().sticker_url
If no URL is found in any location, or if the message input is null/undefined, the component renders an empty container gracefully without errors.
The extraction is wrapped in a try/catch to handle cases where getMetadata() or getCustomData() might throw.
Customization
Styling with CSS Variables
The Sticker Bubble component uses CSS variables for easy customization:
/* Custom sticker bubble styling */
cometchat-sticker-bubble {
/* Container padding */
--cometchat-spacing-2 : 8 px ;
}
Available CSS Variables
Variable Purpose Default --cometchat-spacing-2Container padding 8px
BEM CSS Classes
The component exposes the following BEM classes for targeted styling:
Class Element Description .cometchat-sticker-bubbleBlock Root container .cometchat-sticker-bubble--incomingModifier Applied when alignment is left (incoming message) .cometchat-sticker-bubble--outgoingModifier Applied when alignment is right (outgoing message) .cometchat-sticker-bubble__imageElement The sticker <img> element (max 150×150px, object-fit: contain)
Custom Sizing
/* Larger stickers */
:: ng-deep .cometchat-sticker-bubble__image {
max-width : 200 px ;
max-height : 200 px ;
}
/* Smaller stickers */
:: ng-deep .cometchat-sticker-bubble__image {
max-width : 100 px ;
max-height : 100 px ;
}
See all 11 lines
Dark Theme
The component inherits theme changes automatically through CSS variables. No additional configuration is needed for dark theme support:
// Switch to dark theme
document . documentElement . setAttribute ( 'data-theme' , 'dark' );
Accessibility
The Sticker Bubble component follows WCAG 2.1 Level AA guidelines.
ARIA Attributes
Attribute Element Value Purpose roleContainer "img"Identifies the container as an image region aria-labelContainer Localized conversation_subtitle_sticker text Provides accessible name for screen readers altImage Localized conversation_subtitle_sticker text Text alternative for the sticker image
Screen Reader Behavior
Screen readers announce the sticker bubble using the localized conversation_subtitle_sticker text (e.g., “Sticker”). When the sticker image fails to load, the alt text is retained so screen readers can still convey the content.
Best Practices
The component automatically handles sticker URL extraction from multiple metadata locations. Just pass the CometChat.CustomMessage object directly.
The component expects a CometChat.CustomMessage with category custom and type containing sticker. Passing other message types will result in no sticker URL being found.
The sticker image is constrained to 150×150px with object-fit: contain, preserving the original aspect ratio without cropping.
CometChatMessageBubble : Parent component that delegates sticker rendering to this component
CometChatImageBubble : Displays image messages (similar pattern, different message type)
CometChatDeleteBubble : Displays deleted message placeholders (similar simple bubble pattern)
CometChatMessageList : Displays lists of messages including sticker bubbles
Technical Details
Standalone Component : Can be imported and used independently
Change Detection : Uses OnPush change detection strategy for optimal performance
Dependencies : Angular CommonModule, CometChat SDK, TranslatePipe for localization
BEM CSS : Follows Block Element Modifier naming convention
Max Dimensions : 150×150px with object-fit: contain
URL Extraction : Priority-based fallback chain across three metadata locations