Skip to main content

Custom Styles

Introduction​

The CMND React SDK allows you to customize the CSS styles of the chat interface using the customStyles prop. This provides a flexible way to adjust the appearance of various chat elements without needing to create custom components.

Benefits of Custom Styles

Using customStyles provides several advantages:

  • Ease of Use: No need to create separate components for styling.
  • Consistency: Ensures uniform design across different chat elements.
  • Flexibility: Quickly adjust styles to match different themes or branding guidelines.

With customStyles, you can easily personalize the chat experience while keeping implementation simple and maintainable.

Available Custom Styles​

The following style properties are available for customization:

Chat Avatar

chatAvatarStyle: Defines the appearance of the chatbot's avatar, such as size, shape, and border radius.

Avatar Style Example
chatAvatarStyle: {
borderRadius: "50%",
width: "40px",
height: "40px",
}

Usage​

To apply custom styles, pass the customStyles prop when initializing the chat component:

App.tsx
import { ChatProvider } from "@cmnd-ai/chatbot-react";

function App() {
return (
<ChatProvider
baseUrl="<your-cmnd-api-base-url>"
chatbotId={"<your-chatbot-id>"}
organizationId={"<your-organization-id>"}
customStyles={{
chatAvatarStyle: {
borderRadius: "50%",
width: "40px",
height: "40px",
},
inputStyle: {
border: "1px solid #ccc",
padding: "10px",
borderRadius: "5px",
},
sendButtonStyle: {
backgroundColor: "#007bff",
color: "white",
padding: "10px 15px",
borderRadius: "5px",
},
chatbubbleStyle: {
backgroundColor: "#f1f1f1",
padding: "10px",
borderRadius: "10px",
},
botChatbubbleStyle: {
backgroundColor: "#e0e0e0",
},
userChatbubbleStyle: {
backgroundColor: "#007bff",
color: "white",
},
}}
/>
);
}
Best Practices
  • Accessibility: Use meaningful color contrasts for better readability.
  • Readability: Maintain sufficient padding and margins for comfortable reading.
  • Responsiveness: Ensure styles are responsive for different screen sizes.

Interactive Style Editor​

Try Different Style Combinations

The code below demonstrates how to implement a dynamic style editor in your application:

StyleEditor.tsx
import React, { useState } from "react";
import { ChatProvider, CmndChatBot } from "@cmnd-ai/chatbot-react";

const StyleEditor = () => {
const [avatarBorderRadius, setAvatarBorderRadius] = useState("50%");
const [bubbleBg, setBubbleBg] = useState("#e0e0e0");
const [userBubbleBg, setUserBubbleBg] = useState("#007bff");

return (
<div className="style-editor">
<div className="controls">
<div>
<label>Avatar Border Radius:</label>
<select
value={avatarBorderRadius}
onChange={(e) => setAvatarBorderRadius(e.target.value)}
>
<option value="50%">Circle (50%)</option>
<option value="10%">Rounded (10%)</option>
<option value="0">Square (0)</option>
</select>
</div>

<div>
<label>Bot Bubble Color:</label>
<input
type="color"
value={bubbleBg}
onChange={(e) => setBubbleBg(e.target.value)}
/>
</div>

<div>
<label>User Bubble Color:</label>
<input
type="color"
value={userBubbleBg}
onChange={(e) => setUserBubbleBg(e.target.value)}
/>
</div>
</div>

<ChatProvider
baseUrl="<your-cmnd-api-base-url>"
chatbotId="<your-chatbot-id>"
organizationId="<your-organization-id>"
customStyles={{
chatAvatarStyle: {
borderRadius: avatarBorderRadius,
width: "40px",
height: "40px",
},
botChatbubbleStyle: {
backgroundColor: bubbleBg,
},
userChatbubbleStyle: {
backgroundColor: userBubbleBg,
color: "white",
},
}}
>
<CmndChatBot />
</ChatProvider>
</div>
);
};

export default StyleEditor;

This example creates a simple interface to dynamically adjust styles, allowing you to preview changes in real-time.