Skip to main content

ChatBubble

A versatile chat bubble component for displaying messages in chat interfaces. Perfect for messaging applications, customer support widgets, or any conversation-based UI.

Installation

npm install @brightcodeui/beta-ui
# or
yarn add @brightcodeui/beta-ui

Basic Usage

Hello! How can I help you today?
I have a question about your services.
I'm doing great, thanks for asking!
12:31 PM
Hello! How can I help you today?

Props

PropTypeDefaultDescription
messagestringRequiredThe message text to display
position'left' | 'right''left'Position of the chat bubble
variant'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'error''primary'Color variant of the bubble
avatarstringundefinedURL for the avatar image
classNamestring''Additional CSS class names
timestampstringundefinedTime the message was sent
senderstringundefinedName of the message sender
status'typing' | 'sent' | 'delivered' | 'read' | 'error'undefinedStatus of the message
showTailbooleantrueWhether to show the tail on the bubble
hasMediabooleanfalseWhether the message contains multimedia
mediaUrlstringundefinedOptional media URL (image, etc.)
onClickfunctionundefinedOptional callback when the bubble is clicked

Examples

Basic Left and Right Chat Bubbles

// Left bubble (received message)
<ChatBubble
message="Hello! How are you doing today?"
position="left"
timestamp="12:30 PM"
/>

// Right bubble (sent message)
<ChatBubble
message="I'm doing great, thanks for asking!"
position="right"
timestamp="12:31 PM"
/>

// Left bubble (received message)

Hello! How are you doing today?
12:30 PM

// Right bubble (sent message)

I'm doing great, thanks for asking!
12:31 PM

With Avatar and Sender Name

// Received message with avatar
<ChatBubble
message="Can you help me with something?"
position="left"
variant="secondary"
avatar="https://i.pravatar.cc/300"
sender="John Doe"
timestamp="12:32 PM"
/>

// Sent message with avatar
<ChatBubble
message="Sure, what do you need help with?"
position="right"
variant="secondary"
avatar="https://i.pravatar.cc/300"
sender="Jane Smith"
timestamp="12:33 PM"
/>

Color Variants

The ChatBubble component comes with several color variants that can be used to differentiate message types or senders:

// Primary variant (default)
<ChatBubble
message="This is a primary message"
variant="primary"
/>

// Secondary variant
<ChatBubble
message="This is a secondary message"
variant="secondary"
/>

// Accent variant
<ChatBubble
message="This is an accent message"
variant="accent"
/>

// Neutral variant
<ChatBubble
message="This is a neutral message"
variant="neutral"
/>

// Success variant
<ChatBubble
message="Your message was sent successfully!"
variant="success"
/>

// Warning variant
<ChatBubble
message="Your connection is unstable"
variant="warning"
/>

// Error variant
<ChatBubble
message="Failed to send message"
variant="error"
/>

// Primary variant (default)

This is a primary message

// Secondary variant

This is a secondary message

// Accent variant

This is an accent message

// Neutral variant

This is a neutral message

// Success variant

Your message was sent successfully!

// Warning variant

Your connection is unstable

// Error variant

Failed to send message

Message Status

You can display the status of a message with the status prop:

<ChatBubble
message="Hello there!"
position="right"
timestamp="3:45 PM"
status="sent"
/>

<ChatBubble
message="Is anyone there?"
position="right"
timestamp="3:46 PM"
status="delivered"
/>

<ChatBubble
message="Can you help me please?"
position="right"
timestamp="3:47 PM"
status="read"
/>

<ChatBubble
message="Network error!"
position="right"
timestamp="3:48 PM"
status="error"
/>

<ChatBubble
message=""
position="left"
status="typing"
/>
Hello there!
3:45 PM
Is anyone there?
3:46 PM✓✓
Can you help me please?
3:47 PM✓✓
Network error!
3:48 PM!

With Media Content

// With media placeholder
<ChatBubble
message="Check out this image!"
position="left"
hasMedia={true}
/>

// With actual media
<ChatBubble
message="Here's the photo from yesterday"
position="right"
hasMedia={true}
mediaUrl="https://example.com/photo.jpg"
/>

Interactive Bubbles

You can make chat bubbles interactive by using the onClick prop:

<ChatBubble
message="Click me to see more details"
position="left"
onClick={() => alert('Bubble clicked!')}
/>